Reenable Chest Size Matches Contents

This commit is contained in:
espeon65536 2021-09-10 10:31:05 -05:00 committed by Fabian Dill
parent 9c09d84c71
commit cace88e8fa
4 changed files with 28 additions and 12 deletions

View File

@ -916,6 +916,9 @@ Ocarina of Time:
random: 50
random-low: 0
random-high: 0
correct_chest_sizes: # Changes chests containing progression into large chests, and nonprogression into small chests.
false: 50
true: 0
hints: # Gossip Stones can give hints about item locations.
none: 0
mask: 0

View File

@ -483,6 +483,11 @@ timesavers_options: typing.Dict[str, type(Option)] = {
}
class CSMC(Toggle):
"""Changes chests containing progression into large chests, and nonprogression into small chests."""
displayname = "Chest Size Matches Contents"
class Hints(Choice):
"""Gossip Stones can give hints about item locations."""
displayname = "Gossip Stones"
@ -559,7 +564,7 @@ class RupeeStart(Toggle):
misc_options: typing.Dict[str, type(Option)] = {
# "clearer_hints": DefaultOnToggle,
"correct_chest_sizes": CSMC,
"hints": Hints,
"hint_dist": HintDistribution,
"text_shuffle": TextShuffle,

View File

@ -1624,10 +1624,15 @@ def patch_rom(world, rom):
chest_name = 'Spirit Temple Compass Chest'
chest_address = 0x2B6B07C
location = world.get_location(chest_name)
item = read_rom_item(rom, location.item.index)
if item['chest_type'] in (1, 3):
rom.write_int16(chest_address + 2, 0x0190) # X pos
rom.write_int16(chest_address + 6, 0xFABC) # Z pos
if location.item.game == 'Ocarina of Time':
item = read_rom_item(rom, location.item.index)
if item['chest_type'] in (1, 3):
rom.write_int16(chest_address + 2, 0x0190) # X pos
rom.write_int16(chest_address + 6, 0xFABC) # Z pos
else:
if location.item.advancement:
rom.write_int16(chest_address + 2, 0x0190) # X pos
rom.write_int16(chest_address + 6, 0xFABC) # Z pos
# Move Silver Gauntlets chest if it is small so it is reachable from Spirit Hover Seam
if world.logic_rules != 'glitchless':
@ -1635,10 +1640,15 @@ 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)
item = read_rom_item(rom, location.item.index)
if item['chest_type'] in (1, 3):
rom.write_int16(chest_address_0 + 6, 0x0172) # Z pos
rom.write_int16(chest_address_2 + 6, 0x0172) # Z pos
if location.item.game == 'Ocarina of Time':
item = read_rom_item(rom, location.item.index)
if item['chest_type'] in (1, 3):
rom.write_int16(chest_address_0 + 6, 0x0172) # Z pos
rom.write_int16(chest_address_2 + 6, 0x0172) # Z pos
else:
if location.item.advancement:
rom.write_int16(chest_address_0 + 6, 0x0172) # Z pos
rom.write_int16(chest_address_2 + 6, 0x0172) # Z pos
# give dungeon items the correct messages
add_item_messages(messages, shop_items, world)

View File

@ -169,7 +169,6 @@ class OOTWorld(World):
self.mq_dungeons_random = False # this will be a deprecated option later
self.ocarina_songs = False # just need to pull in the OcarinaSongs module
self.big_poe_count = 1 # disabled due to client-side issues for now
self.correct_chest_sizes = False # will probably never be implemented since multiworld items are always major
# ER options
self.shuffle_interior_entrances = 'off'
self.shuffle_grotto_entrances = False
@ -180,8 +179,7 @@ class OOTWorld(World):
self.spawn_positions = False
# Set internal names used by the OoT generator
self.keysanity = self.shuffle_smallkeys in ['keysanity', 'remove', 'any_dungeon',
'overworld'] # only 'keysanity' and 'remove' implemented
self.keysanity = self.shuffle_smallkeys in ['keysanity', 'remove', 'any_dungeon', 'overworld']
# Hint stuff
self.misc_hints = True # this is just always on