Merge branch 'DoorDevUnstable' into DoorDevVolatile

This commit is contained in:
aerinon
2021-10-27 15:02:47 -06:00
4 changed files with 54 additions and 9 deletions

View File

@@ -215,6 +215,13 @@ def link_entrances(world, player):
if bomb_shop in dw_entrances: if bomb_shop in dw_entrances:
dw_entrances.remove(bomb_shop) dw_entrances.remove(bomb_shop)
# standard mode cannot have Bonk Fairy Light be a connector in case of starting boots
# or boots are in links house, etc.
removed = False
if world.mode[player] == 'standard' and 'Bonk Fairy (Light)' in lw_entrances:
lw_entrances.remove('Bonk Fairy (Light)')
removed = True
# place the old man cave's entrance somewhere in the light world # place the old man cave's entrance somewhere in the light world
random.shuffle(lw_entrances) random.shuffle(lw_entrances)
old_man_entrance = lw_entrances.pop() old_man_entrance = lw_entrances.pop()
@@ -226,6 +233,8 @@ def link_entrances(world, player):
# now scramble the rest # now scramble the rest
connect_caves(world, lw_entrances, dw_entrances, caves, player) connect_caves(world, lw_entrances, dw_entrances, caves, player)
if removed:
lw_entrances.append('Bonk Fairy (Light)')
# scramble holes # scramble holes
scramble_holes(world, player) scramble_holes(world, player)
@@ -395,14 +404,23 @@ def link_entrances(world, player):
if bomb_shop in dw_entrances: if bomb_shop in dw_entrances:
dw_entrances.remove(bomb_shop) dw_entrances.remove(bomb_shop)
# standard mode cannot have Bonk Fairy Light be a connector in case of
# starting boots or boots are in links house, etc.
removed = False
if world.mode[player] == 'standard' and 'Bonk Fairy (Light)' in lw_entrances:
lw_entrances.remove('Bonk Fairy (Light)')
removed = True
# place the old man cave's entrance somewhere in the light world # place the old man cave's entrance somewhere in the light world
old_man_entrance = lw_entrances.pop() old_man_entrance = lw_entrances.pop()
connect_two_way(world, old_man_entrance, 'Old Man Cave Exit (West)', player) connect_two_way(world, old_man_entrance, 'Old Man Cave Exit (West)', player)
# now scramble the rest # now scramble the rest
connect_caves(world, lw_entrances, dw_entrances, caves, player) connect_caves(world, lw_entrances, dw_entrances, caves, player)
if removed:
lw_entrances.append('Bonk Fairy (Light)')
# scramble holes # scramble holes
scramble_holes(world, player) scramble_holes(world, player)
@@ -487,16 +505,24 @@ def link_entrances(world, player):
connect_entrance(world, bomb_shop, 'Big Bomb Shop', player) connect_entrance(world, bomb_shop, 'Big Bomb Shop', player)
entrances.remove(bomb_shop) entrances.remove(bomb_shop)
# standard mode cannot have Bonk Fairy Light be a connector in case of
# starting boots or boots are in links house, etc.
removed = False
if world.mode[player] == 'standard' and 'Bonk Fairy (Light)' in entrances:
entrances.remove('Bonk Fairy (Light)')
removed = True
# place the old man cave's entrance somewhere # place the old man cave's entrance somewhere
random.shuffle(entrances) random.shuffle(entrances)
old_man_entrance = entrances.pop() old_man_entrance = entrances.pop()
connect_two_way(world, old_man_entrance, 'Old Man Cave Exit (West)', player) connect_two_way(world, old_man_entrance, 'Old Man Cave Exit (West)', player)
# now scramble the rest # now scramble the rest
connect_caves(world, entrances, [], caves, player) connect_caves(world, entrances, [], caves, player)
if removed:
entrances.append('Bonk Fairy (Light)')
# scramble holes # scramble holes
scramble_holes(world, player) scramble_holes(world, player)
@@ -971,6 +997,13 @@ def link_entrances(world, player):
connect_entrance(world, bomb_shop, 'Big Bomb Shop', player) connect_entrance(world, bomb_shop, 'Big Bomb Shop', player)
doors.remove(bomb_shop) doors.remove(bomb_shop)
# standard mode cannot have Bonk Fairy Light be a connector in case of
# starting boots or boots are in links house, etc.
removed = False
if world.mode[player] == 'standard' and 'Bonk Fairy (Light)' in doors:
doors.remove('Bonk Fairy (Light)')
removed = True
# handle remaining caves # handle remaining caves
for cave in caves: for cave in caves:
if isinstance(cave, str): if isinstance(cave, str):
@@ -980,6 +1013,9 @@ def link_entrances(world, player):
connect_exit(world, exit, exit_pool.pop(), player) connect_exit(world, exit, exit_pool.pop(), player)
connect_entrance(world, doors.pop(), exit, player) connect_entrance(world, doors.pop(), exit, player)
if removed:
doors.append('Bonk Fairy (Light)')
# place remaining doors # place remaining doors
connect_doors(world, doors, door_targets, player) connect_doors(world, doors, door_targets, player)
elif world.shuffle[player] == 'insanity_legacy': elif world.shuffle[player] == 'insanity_legacy':

View File

@@ -43,6 +43,10 @@ CLI: ```--bombbag```
## Bug Fixes and Notes. ## Bug Fixes and Notes.
* 0.5.1.5
* Fix for hard pool capacity upgrades missing
* Bonk Fairy (Light) is no longer in logic for ER Standard and is forbidden to be a connector, so rain state isn't exitable
* Bug fix for retro + enemizer and arrows appearing under pots
* 0.5.1.4 * 0.5.1.4
* Revert quadrant glitch fix for baserom * Revert quadrant glitch fix for baserom
* Fix for inverted * Fix for inverted

17
Rom.py
View File

@@ -1488,6 +1488,8 @@ def patch_rom(world, rom, player, team, enemized, is_mystery=False):
rom.write_byte(0x180176, 0x0A if world.retro[player] else 0x00) # wood arrow cost rom.write_byte(0x180176, 0x0A if world.retro[player] else 0x00) # wood arrow cost
rom.write_byte(0x180178, 0x32 if world.retro[player] else 0x00) # silver arrow cost rom.write_byte(0x180178, 0x32 if world.retro[player] else 0x00) # silver arrow cost
rom.write_byte(0x301FC, 0xDA if world.retro[player] else 0xE1) # rupees replace arrows under pots rom.write_byte(0x301FC, 0xDA if world.retro[player] else 0xE1) # rupees replace arrows under pots
if enemized:
rom.write_byte(0x1B152e, 0xDA if world.retro[player] else 0xE1)
rom.write_byte(0x30052, 0xDB if world.retro[player] else 0xE2) # replace arrows in fish prize from bottle merchant rom.write_byte(0x30052, 0xDB if world.retro[player] else 0xE2) # replace arrows in fish prize from bottle merchant
rom.write_bytes(0xECB4E, [0xA9, 0x00, 0xEA, 0xEA] if world.retro[player] else [0xAF, 0x77, 0xF3, 0x7E]) # Thief steals rupees instead of arrows rom.write_bytes(0xECB4E, [0xA9, 0x00, 0xEA, 0xEA] if world.retro[player] else [0xAF, 0x77, 0xF3, 0x7E]) # Thief steals rupees instead of arrows
rom.write_bytes(0xF0D96, [0xA9, 0x00, 0xEA, 0xEA] if world.retro[player] else [0xAF, 0x77, 0xF3, 0x7E]) # Pikit steals rupees instead of arrows rom.write_bytes(0xF0D96, [0xA9, 0x00, 0xEA, 0xEA] if world.retro[player] else [0xAF, 0x77, 0xF3, 0x7E]) # Pikit steals rupees instead of arrows
@@ -1653,13 +1655,16 @@ def write_custom_shops(rom, world, player):
loc_item = ItemFactory(item['item'], player) loc_item = ItemFactory(item['item'], player)
if (not world.shopsanity[player] and shop.region.name == 'Capacity Upgrade' if (not world.shopsanity[player] and shop.region.name == 'Capacity Upgrade'
and world.difficulty[player] != 'normal'): and world.difficulty[player] != 'normal'):
continue # skip cap upgrades except in normal/shopsanity # really should be 5A instead of B0 -- surprise!!!
item_id = loc_item.code item_id, price, replace, replace_price, item_max = 0xB0, [0, 0], 0xFF, [0, 0], 1
price = int16_as_bytes(item['price']) else:
replace = ItemFactory(item['replacement'], player).code if item['replacement'] else 0xFF item_id = loc_item.code
replace_price = int16_as_bytes(item['replacement_price']) price = int16_as_bytes(item['price'])
replace = ItemFactory(item['replacement'], player).code if item['replacement'] else 0xFF
replace_price = int16_as_bytes(item['replacement_price'])
item_max = item['max']
item_player = 0 if item['player'] == player else item['player'] item_player = 0 if item['player'] == player else item['player']
item_data = [shop_id, item_id] + price + [item['max'], replace] + replace_price + [item_player] item_data = [shop_id, item_id] + price + [item_max, replace] + replace_price + [item_player]
items_data.extend(item_data) items_data.extend(item_data)
rom.write_bytes(0x184800, shop_data) rom.write_bytes(0x184800, shop_data)

View File

@@ -1212,7 +1212,7 @@ def standard_rules(world, player):
'North Fairy Cave', 'North Fairy Cave Drop', 'Lost Woods Gamble', 'Snitch Lady (East)', 'North Fairy Cave', 'North Fairy Cave Drop', 'Lost Woods Gamble', 'Snitch Lady (East)',
'Snitch Lady (West)', 'Tavern (Front)', 'Bush Covered House', 'Light World Bomb Hut', 'Snitch Lady (West)', 'Tavern (Front)', 'Bush Covered House', 'Light World Bomb Hut',
'Kakariko Shop', 'Long Fairy Cave', 'Good Bee Cave', '20 Rupee Cave', 'Cave Shop (Lake Hylia)', 'Kakariko Shop', 'Long Fairy Cave', 'Good Bee Cave', '20 Rupee Cave', 'Cave Shop (Lake Hylia)',
'Waterfall of Wishing', 'Hyrule Castle Main Gate', '50 Rupee Cave', 'Waterfall of Wishing', 'Hyrule Castle Main Gate', '50 Rupee Cave', 'Bonk Fairy (Light)',
'Fortune Teller (Light)', 'Lake Hylia Fairy', 'Light Hype Fairy', 'Desert Fairy', 'Fortune Teller (Light)', 'Lake Hylia Fairy', 'Light Hype Fairy', 'Desert Fairy',
'Lumberjack House', 'Lake Hylia Fortune Teller', 'Kakariko Gamble Game', 'Top of Pyramid']: 'Lumberjack House', 'Lake Hylia Fortune Teller', 'Kakariko Gamble Game', 'Top of Pyramid']:
add_rule(world.get_entrance(entrance, player), lambda state: state.has('Zelda Delivered', player)) add_rule(world.get_entrance(entrance, player), lambda state: state.has('Zelda Delivered', player))