Ocarina of Time: long-awaited bugfixes (#2344)

- Added location name groups, so you can make your entire Water Temple priority to annoy everyone else
- Significant improvement to ER generation success rate (~80% to >99%)
- Changed `adult_trade_start` option to a choice option instead of a list (this shouldn't actually break any YAMLs though, due to the lesser-known property of lists parsing as a uniformly-weighted choice)
- Major improvements to the option tooltips where needed. (Possibly too much text now)
- Changed default hint distribution to `async` to help people's generation times. The tooltip explains that it removes WOTH hints so people hopefully don't get tripped up.
- Makes stick and nut capacity upgrades useful items
- Added shop prices and required trials to spoiler log
- Added Cojiro to adult trade item group, because it had been forgotten previously
- Fixed size-modified chests not being moved properly due to trap appearance changing the size
- Fixed Thieves Hideout keyring not being allowed in start inventory
- Fixed hint generation not accurately flagging barren locations on certain dungeon item shuffle settings
- Fixed bug where you could plando arbitrarily-named items into the world, breaking everything
This commit is contained in:
espeon65536
2023-10-22 10:38:47 -06:00
committed by GitHub
parent 50244342d9
commit 724999fc43
7 changed files with 424 additions and 252 deletions

View File

@@ -2094,10 +2094,14 @@ def patch_rom(world, rom):
if not world.dungeon_mq['Ganons Castle']:
chest_name = 'Ganons Castle Light Trial Lullaby Chest'
location = world.get_location(chest_name)
if location.item.game == 'Ocarina of Time':
item = read_rom_item(rom, location.item.index)
if not location.item.trap:
if location.item.game == 'Ocarina of Time':
item = read_rom_item(rom, location.item.index)
else:
item = read_rom_item(rom, AP_PROGRESSION if location.item.advancement else AP_JUNK)
else:
item = read_rom_item(rom, AP_PROGRESSION if location.item.advancement else AP_JUNK)
looks_like_index = get_override_entry(world, location)[5]
item = read_rom_item(rom, looks_like_index)
if item['chest_type'] in (GOLD_CHEST, GILDED_CHEST, SKULL_CHEST_BIG):
rom.write_int16(0x321B176, 0xFC40) # original 0xFC48
@@ -2106,10 +2110,14 @@ def patch_rom(world, rom):
chest_name = 'Spirit Temple Compass Chest'
chest_address = 0x2B6B07C
location = world.get_location(chest_name)
if location.item.game == 'Ocarina of Time':
item = read_rom_item(rom, location.item.index)
if not location.item.trap:
if location.item.game == 'Ocarina of Time':
item = read_rom_item(rom, location.item.index)
else:
item = read_rom_item(rom, AP_PROGRESSION if location.item.advancement else AP_JUNK)
else:
item = read_rom_item(rom, AP_PROGRESSION if location.item.advancement else AP_JUNK)
looks_like_index = get_override_entry(world, location)[5]
item = read_rom_item(rom, looks_like_index)
if item['chest_type'] in (BROWN_CHEST, SILVER_CHEST, SKULL_CHEST_SMALL):
rom.write_int16(chest_address + 2, 0x0190) # X pos
rom.write_int16(chest_address + 6, 0xFABC) # Z pos
@@ -2120,10 +2128,14 @@ def patch_rom(world, rom):
chest_address_0 = 0x21A02D0 # Address in setup 0
chest_address_2 = 0x21A06E4 # Address in setup 2
location = world.get_location(chest_name)
if location.item.game == 'Ocarina of Time':
item = read_rom_item(rom, location.item.index)
if not location.item.trap:
if location.item.game == 'Ocarina of Time':
item = read_rom_item(rom, location.item.index)
else:
item = read_rom_item(rom, AP_PROGRESSION if location.item.advancement else AP_JUNK)
else:
item = read_rom_item(rom, AP_PROGRESSION if location.item.advancement else AP_JUNK)
looks_like_index = get_override_entry(world, location)[5]
item = read_rom_item(rom, looks_like_index)
if item['chest_type'] in (BROWN_CHEST, SILVER_CHEST, SKULL_CHEST_SMALL):
rom.write_int16(chest_address_0 + 6, 0x0172) # Z pos
rom.write_int16(chest_address_2 + 6, 0x0172) # Z pos