From 89b255c03127957e242cd54572012a29db2c1eef Mon Sep 17 00:00:00 2001 From: codemann8 Date: Fri, 2 Jan 2026 18:12:23 -0600 Subject: [PATCH 1/7] Fixed follower placement failures --- ItemList.py | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/ItemList.py b/ItemList.py index 65121389..bb6af714 100644 --- a/ItemList.py +++ b/ItemList.py @@ -1717,21 +1717,27 @@ def shuffle_event_items(world, player): set_event_item(world, player, zelda_dropoff, zelda_pickup) # randomize the follower pickups, but ensure that the last items are the unrestrictive ones - unrestrictive_pickups = [p for p in ['Zelda Herself', 'Sign Vandalized'] if p in available_pickups] - restrictive_pickups = [p for p in available_pickups if p not in unrestrictive_pickups] - random.shuffle(restrictive_pickups) - random.shuffle(unrestrictive_pickups) - available_pickups = restrictive_pickups + unrestrictive_pickups - - pickup_items = ItemFactory(available_pickups, player) + unrestrictive_pickups = ItemFactory([p for p in ['Zelda Herself', 'Sign Vandalized'] if p in available_pickups], player) + restrictive_pickups = ItemFactory([p for p in available_pickups if p not in unrestrictive_pickups], player) follower_locations = [world.get_location(loc_name, player) for loc_name in available_quests.keys()] - random.shuffle(follower_locations) - fill_restrictive(world, all_state, follower_locations, pickup_items, single_player_placement=True) - for loc_name in available_quests.keys(): - loc = world.get_location(loc_name, player) - if loc.item: - set_event_item(world, player, loc_name) + attempts = 10 + for attempt in range(attempts): + try: + random.shuffle(restrictive_pickups) + random.shuffle(unrestrictive_pickups) + pickup_items = unrestrictive_pickups + restrictive_pickups + random.shuffle(follower_locations) + + fill_restrictive(world, all_state, follower_locations, pickup_items, single_player_placement=True) + for loc_name in available_quests.keys(): + loc = world.get_location(loc_name, player) + if loc.item: + set_event_item(world, player, loc_name) + except FillError as e: + logging.getLogger('').info("Failed to place followers (%s). Will retry %s more times", e, attempts - attempt - 1) + continue + break def get_item_and_event_flag(item, world, player, dungeon_pool, prize_set, prize_pool): From 3c386a0c0dcdf342542f6d1bd08aafa8c912e82b Mon Sep 17 00:00:00 2001 From: codemann8 Date: Mon, 5 Jan 2026 16:38:25 -0600 Subject: [PATCH 2/7] Fix follower shuffle placement errors --- ItemList.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/ItemList.py b/ItemList.py index bb6af714..a6d0f899 100644 --- a/ItemList.py +++ b/ItemList.py @@ -1695,7 +1695,6 @@ def set_event_item(world, player, location_name, item_name=None): def shuffle_event_items(world, player): if world.shuffle_followers[player]: - all_state = world.get_all_state(keys=True) available_quests = follower_quests.copy() available_pickups = [quests[0] for quests in available_quests.values()] @@ -1716,14 +1715,21 @@ def shuffle_event_items(world, player): available_pickups.remove(zelda_pickup) set_event_item(world, player, zelda_dropoff, zelda_pickup) - # randomize the follower pickups, but ensure that the last items are the unrestrictive ones - unrestrictive_pickups = ItemFactory([p for p in ['Zelda Herself', 'Sign Vandalized'] if p in available_pickups], player) - restrictive_pickups = ItemFactory([p for p in available_pickups if p not in unrestrictive_pickups], player) follower_locations = [world.get_location(loc_name, player) for loc_name in available_quests.keys()] attempts = 10 for attempt in range(attempts): try: + all_state = world.get_all_state(keys=True) + if world.prizeshuffle[player] != 'wild': + from Items import prize_item_table + prizes = ItemFactory(list(prize_item_table.keys()), player) + for prize in prizes: + all_state.collect(prize, True) + + # randomize the follower pickups, but ensure that the last items are the unrestrictive ones + unrestrictive_pickups = ItemFactory([p for p in ['Zelda Herself', 'Sign Vandalized'] if p in available_pickups], player) + restrictive_pickups = ItemFactory([p for p in available_pickups if p not in unrestrictive_pickups], player) random.shuffle(restrictive_pickups) random.shuffle(unrestrictive_pickups) pickup_items = unrestrictive_pickups + restrictive_pickups @@ -1736,8 +1742,12 @@ def shuffle_event_items(world, player): set_event_item(world, player, loc_name) except FillError as e: logging.getLogger('').info("Failed to place followers (%s). Will retry %s more times", e, attempts - attempt - 1) + for loc in follower_locations: + loc.item = None continue break + else: + raise FillError(f'Unable to place followers: {", ".join(list(map(lambda d: d.hint_text, follower_locations)))}') def get_item_and_event_flag(item, world, player, dungeon_pool, prize_set, prize_pool): From 7d757f3e28632793f95377504639ecdddc19a373 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Tue, 6 Jan 2026 03:11:31 -0600 Subject: [PATCH 3/7] Reordered ow_prize_table data based on screen ID --- source/overworld/EntranceData.py | 256 ++++++++++++++++--------------- 1 file changed, 133 insertions(+), 123 deletions(-) diff --git a/source/overworld/EntranceData.py b/source/overworld/EntranceData.py index a9fe0b2a..f4dcb362 100644 --- a/source/overworld/EntranceData.py +++ b/source/overworld/EntranceData.py @@ -147,139 +147,149 @@ door_addresses = {'Links House': (0x00, (0x0104, 0x2c 'Lake Hylia Fortune Teller': (0x72, (0x0122, 0x35, 0x0380, 0x0c6a, 0x0a00, 0x0cb8, 0x0a58, 0x0cd7, 0x0a85, 0x06, 0xfa, 0x0000, 0x0000), 0x00), 'Kakariko Gamble Game': (0x66, (0x0118, 0x29, 0x069e, 0x0ac4, 0x02ea, 0x0b18, 0x0368, 0x0b33, 0x036f, 0x0a, 0xf6, 0x09AC, 0x0000), 0x00)} -ow_prize_table = {'Links House': (0x8b1, 0xb2d), - 'Desert Palace Entrance (South)': (0x108, 0xd70), 'Desert Palace Entrance (West)': (0x031, 0xca0), - 'Desert Palace Entrance (North)': (0x0e1, 0xba0), 'Desert Palace Entrance (East)': (0x191, 0xca0), - 'Eastern Palace': (0xf31, 0x620), 'Tower of Hera': (0x8D0, 0x080), - 'Hyrule Castle Entrance (South)': (0x820, 0x730), 'Hyrule Castle Entrance (West)': (0x740, 0x5D0), - 'Hyrule Castle Entrance (East)': (0x8f0, 0x5D0), +ow_prize_table = {'Lost Woods Gamble': (0x240, 0x080), + 'Lost Woods Hideout Drop': (0x290, 0x200), + 'Lost Woods Hideout Stump': (0x240, 0x280), + 'Lumberjack House': (0x580, 0x100), + 'Lumberjack Tree Tree': (0x4e0, 0x140), + 'Lumberjack Tree Cave': (0x560, 0x004), + 'Tower of Hera': (0x8D0, 0x080), + 'Spectacle Rock Cave Peak': (0x720, 0x0a0), + 'Spectacle Rock Cave (Bottom)': (0x710, 0x0a0), + 'Death Mountain Return Cave (East)': (0x600, 0x220), + 'Old Man Cave (East)': (0x620, 0x2c0), + 'Old Man House (Top)': (0x820, 0x220), + 'Old Man House (Bottom)': (0x720, 0x320), + 'Paradox Cave (Top)': (0xd80, 0x020), + 'Paradox Cave (Bottom)': (0xd80, 0x180), + 'Paradox Cave (Middle)': (0xd80, 0x380), + 'Fairy Ascension Cave (Top)': (0xc00, 0x240), + 'Fairy Ascension Cave (Bottom)': (0xcc8, 0x2a0), + 'Spiral Cave': (0xb80, 0x180), + 'Spiral Cave (Bottom)': (0xb80, 0x2c0), + 'Mimic Cave': (0xc80, 0x180), + 'Hookshot Fairy': (0xd00, 0x180), + 'Death Mountain Return Cave (West)': (0x500, 0x1c0), + 'Old Man Cave (West)': (0x580, 0x2c0), + 'Waterfall of Wishing': (0xe80, 0x280), + 'Fortune Teller (Light)': (0x2c0, 0x4c0), + 'Bonk Rock Cave': (0x5f0, 0x460), + 'Sanctuary': (0x720, 0x4a0), + 'Spectacle Rock Cave': (0x790, 0x1a0), + 'Sanctuary Grave': (0x820, 0x4c0), + 'Graveyard Cave': (0x8f0, 0x430), + 'Kings Grave': (0x920, 0x520), + 'North Fairy Cave Drop': (0xa40, 0x500), + 'North Fairy Cave': (0xa80, 0x440), + 'Potion Shop': (0xc80, 0x4c0), + 'Kakariko Well Drop': (0x030, 0x680), + 'Kakariko Well Cave': (0x060, 0x680), + 'Blinds Hideout': (0x190, 0x6c0), + 'Elder House (West)': (0x230, 0x6a0), + 'Elder House (East)': (0x2b0, 0x6a0), + 'Snitch Lady (West)': (0x080, 0x7a0), + 'Snitch Lady (East)': (0x310, 0x7a0), + 'Chicken House': (0x120, 0x880), + 'Sick Kids House': (0x220, 0x880), + 'Bush Covered House': (0x2e0, 0x880), + 'Light World Bomb Hut': (0x070, 0x980), + 'Kakariko Shop': (0x170, 0x980), + 'Tavern North': (0x270, 0x900), + 'Tavern (Front)': (0x270, 0x980), 'Agahnims Tower': (0x820, 0x5D0), - 'Thieves Town': (0x1d0, 0x780), 'Skull Woods First Section Door': (0x2e0, 0x280), - 'Skull Woods Second Section Door (East)': (0x200, 0x240), - 'Skull Woods Second Section Door (West)': (0x0c0, 0x1c0), + 'Hyrule Castle Entrance (South)': (0x820, 0x730), + 'Hyrule Castle Entrance (West)': (0x740, 0x5D0), + 'Hyrule Castle Entrance (East)': (0x8f0, 0x5D0), + 'Hyrule Castle Secret Entrance Drop': (0x9D0, 0x680), + 'Hyrule Castle Secret Entrance Stairs': (0x8D0, 0x700), + 'Inverted Pyramid Hole': (0x820, 0x680), + 'Inverted Pyramid Entrance': (0x6C0, 0x5D0), + 'Sahasrahlas Hut': (0xcf0, 0x6c0), + 'Eastern Palace': (0xf31, 0x620), + 'Blacksmiths Hut': (0x4a0, 0x880), + 'Bat Cave Drop': (0x520, 0x8f0), + 'Bat Cave Cave': (0x560, 0x940), + 'Two Brothers House (West)': (0x180, 0x0b60), + 'Two Brothers House (East)': (0x200, 0x0b60), + 'Library': (0x270, 0xaa0), + 'Kakariko Gamble Game': (0x2f0, 0xaf0), + 'Bonk Fairy (Light)': (0x740, 0xa80), + 'Links House': (0x8b1, 0xb2d), + 'Lake Hylia Fairy': (0xd40, 0x9f0), + 'Long Fairy Cave': (0xf60, 0xb00), + 'Desert Palace Entrance (North)': (0x0e1, 0xba0), + 'Desert Palace Entrance (West)': (0x031, 0xca0), + 'Desert Palace Entrance (East)': (0x191, 0xca0), + 'Desert Palace Entrance (South)': (0x108, 0xd70), + 'Checkerboard Cave': (0x260, 0xc00), + 'Aginahs Cave': (0x2e0, 0xd00), + 'Cave 45': (0x440, 0xca0), + 'Light Hype Fairy': (0x940, 0xc80), + 'Lake Hylia Fortune Teller': (0xa40, 0xc40), + 'Lake Hylia Shop': (0xbc0, 0xc00), + 'Capacity Upgrade': (0xca0, 0xda0), + 'Mini Moldorm Cave': (0xa40, 0xe80), + 'Ice Rod Cave': (0xe00, 0xc00), + 'Good Bee Cave': (0xec0, 0xc00), + '20 Rupee Cave': (0xe80, 0xca0), + 'Desert Fairy': (0x420, 0xe00), + '50 Rupee Cave': (0x4d0, 0xed0), + 'Dam': (0x759, 0xED0), + 'Skull Woods Final Section': (0x082, 0x0b0), + 'Skull Woods Second Section Door (West)': (0x0c0, 0x1c0), + 'Skull Woods Second Section Hole': (0x0f0, 0x0b0), + 'Skull Woods Second Section Door (East)': (0x200, 0x240), + 'Skull Woods First Section Door': (0x2e0, 0x280), + 'Skull Woods First Section Hole (North)': (0x320, 0x1e0), 'Skull Woods First Section Hole (West)': (0x200, 0x2b0), 'Skull Woods First Section Hole (East)': (0x340, 0x2e0), - 'Skull Woods First Section Hole (North)': (0x320, 0x1e0), - 'Skull Woods Second Section Hole': (0x0f0, 0x0b0), - 'Ice Palace': (0xca0, 0xda0), - 'Misery Mire': (0x100, 0xca0), - 'Palace of Darkness': (0xf40, 0x620), 'Swamp Palace': (0x759, 0xED0), - 'Turtle Rock': (0xf11, 0x103), + 'Dark Lumberjack Shop': (0x4e0, 0x0d0), + 'Ganons Tower': (0x8D0, 0x080), + 'Dark Death Mountain Fairy': (0x620, 0x2c0), + 'Spike Cave': (0x860, 0x180), + 'Hookshot Cave Back Entrance': (0xcf0, 0x004), + 'Hookshot Cave': (0xc80, 0x0c0), + 'Superbunny Cave (Top)': (0xd80, 0x020), + 'Superbunny Cave (Bottom)': (0xd00, 0x180), 'Dark Death Mountain Ledge (West)': (0xb80, 0x180), 'Dark Death Mountain Ledge (East)': (0xc80, 0x180), 'Turtle Rock Isolated Ledge Entrance': (0xc00, 0x240), - 'Hyrule Castle Secret Entrance Drop': (0x9D0, 0x680), - 'Hyrule Castle Secret Entrance Stairs': (0x8D0, 0x700), - 'Kakariko Well Drop': (0x030, 0x680), - 'Kakariko Well Cave': (0x060, 0x680), - 'Bat Cave Drop': (0x520, 0x8f0), - 'Bat Cave Cave': (0x560, 0x940), - 'Elder House (East)': (0x2b0, 0x6a0), - 'Elder House (West)': (0x230, 0x6a0), - 'North Fairy Cave Drop': (0xa40, 0x500), - 'North Fairy Cave': (0xa80, 0x440), - 'Lost Woods Hideout Drop': (0x290, 0x200), - 'Lost Woods Hideout Stump': (0x240, 0x280), - 'Lumberjack Tree Tree': (0x4e0, 0x140), - 'Lumberjack Tree Cave': (0x560, 0x004), - 'Two Brothers House (East)': (0x200, 0x0b60), - 'Two Brothers House (West)': (0x180, 0x0b60), - 'Sanctuary Grave': (0x820, 0x4c0), - 'Sanctuary': (0x720, 0x4a0), - 'Old Man Cave (West)': (0x580, 0x2c0), - 'Old Man Cave (East)': (0x620, 0x2c0), - 'Old Man House (Bottom)': (0x720, 0x320), - 'Old Man House (Top)': (0x820, 0x220), - 'Death Mountain Return Cave (East)': (0x600, 0x220), - 'Death Mountain Return Cave (West)': (0x500, 0x1c0), - 'Spectacle Rock Cave Peak': (0x720, 0x0a0), - 'Spectacle Rock Cave': (0x790, 0x1a0), - 'Spectacle Rock Cave (Bottom)': (0x710, 0x0a0), - 'Paradox Cave (Bottom)': (0xd80, 0x180), - 'Paradox Cave (Middle)': (0xd80, 0x380), - 'Paradox Cave (Top)': (0xd80, 0x020), - 'Fairy Ascension Cave (Bottom)': (0xcc8, 0x2a0), - 'Fairy Ascension Cave (Top)': (0xc00, 0x240), - 'Spiral Cave': (0xb80, 0x180), - 'Spiral Cave (Bottom)': (0xb80, 0x2c0), - 'Bumper Cave (Bottom)': (0x580, 0x2c0), - 'Bumper Cave (Top)': (0x500, 0x1c0), - 'Superbunny Cave (Top)': (0xd80, 0x020), - 'Superbunny Cave (Bottom)': (0xd00, 0x180), - 'Hookshot Cave': (0xc80, 0x0c0), - 'Hookshot Cave Back Entrance': (0xcf0, 0x004), - 'Ganons Tower': (0x8D0, 0x080), - 'Pyramid Hole': (0x820, 0x680), - 'Inverted Pyramid Hole': (0x820, 0x680), - 'Pyramid Entrance': (0x640, 0x7c0), - 'Inverted Pyramid Entrance': (0x6C0, 0x5D0), - 'Waterfall of Wishing': (0xe80, 0x280), - 'Dam': (0x759, 0xED0), - 'Blinds Hideout': (0x190, 0x6c0), - 'Bonk Fairy (Light)': (0x740, 0xa80), - 'Lake Hylia Fairy': (0xd40, 0x9f0), - 'Light Hype Fairy': (0x940, 0xc80), - 'Desert Fairy': (0x420, 0xe00), - 'Kings Grave': (0x920, 0x520), - 'Tavern North': (0x270, 0x900), - 'Chicken House': (0x120, 0x880), - 'Aginahs Cave': (0x2e0, 0xd00), - 'Sahasrahlas Hut': (0xcf0, 0x6c0), - 'Lake Hylia Shop': (0xbc0, 0xc00), - 'Capacity Upgrade': (0xca0, 0xda0), - 'Blacksmiths Hut': (0x4a0, 0x880), - 'Sick Kids House': (0x220, 0x880), - 'Lost Woods Gamble': (0x240, 0x080), - 'Fortune Teller (Light)': (0x2c0, 0x4c0), - 'Snitch Lady (East)': (0x310, 0x7a0), - 'Snitch Lady (West)': (0x080, 0x7a0), - 'Bush Covered House': (0x2e0, 0x880), - 'Tavern (Front)': (0x270, 0x980), - 'Light World Bomb Hut': (0x070, 0x980), - 'Kakariko Shop': (0x170, 0x980), - 'Cave 45': (0x440, 0xca0), 'Graveyard Cave': (0x8f0, 0x430), - 'Checkerboard Cave': (0x260, 0xc00), - 'Mini Moldorm Cave': (0xa40, 0xe80), - 'Long Fairy Cave': (0xf60, 0xb00), - 'Good Bee Cave': (0xec0, 0xc00), - '20 Rupee Cave': (0xe80, 0xca0), - '50 Rupee Cave': (0x4d0, 0xed0), - 'Ice Rod Cave': (0xe00, 0xc00), - 'Bonk Rock Cave': (0x5f0, 0x460), - 'Library': (0x270, 0xaa0), - 'Potion Shop': (0xc80, 0x4c0), - 'Hookshot Fairy': (0xd00, 0x180), - 'Pyramid Fairy': (0x740, 0x740), - 'East Dark World Hint': (0xf60, 0xb00), - 'Palace of Darkness Hint': (0xd60, 0x7c0), - 'Dark Lake Hylia Fairy': (0xd40, 0x9f0), - 'Dark Lake Hylia Ledge Fairy': (0xe00, 0xc00), - 'Dark Lake Hylia Ledge Spike Cave': (0xe80, 0xca0), - 'Dark Lake Hylia Ledge Hint': (0xec0, 0xc00), - 'Hype Cave': (0x940, 0xc80), - 'Bonk Fairy (Dark)': (0x740, 0xa80), - 'Brewery': (0x170, 0x980), 'C-Shaped House': (0x310, 0x7a0), 'Chest Game': (0x080, 0x7a0), - 'Hammer Peg Cave': (0x4c0, 0x940), - 'Red Shield Shop': (0x500, 0x680), - 'Dark Sanctuary Hint': (0x720, 0x4a0), - 'Fortune Teller (Dark)': (0x2c0, 0x4c0), - 'Dark World Shop': (0x2e0, 0x880), - 'Dark Lumberjack Shop': (0x4e0, 0x0d0), - 'Dark Potion Shop': (0xc80, 0x4c0), - 'Archery Game': (0x2f0, 0xaf0), - 'Mire Shed': (0x060, 0xc90), - 'Mire Hint': (0x2e0, 0xd00), - 'Mire Fairy': (0x1c0, 0xc90), - 'Spike Cave': (0x860, 0x180), 'Dark Death Mountain Shop': (0xd80, 0x180), - 'Dark Death Mountain Fairy': (0x620, 0x2c0), - 'Mimic Cave': (0xc80, 0x180), + 'Turtle Rock': (0xf11, 0x103), + 'Bumper Cave (Top)': (0x500, 0x1c0), + 'Bumper Cave (Bottom)': (0x580, 0x2c0), + 'Fortune Teller (Dark)': (0x2c0, 0x4c0), + 'Dark Sanctuary Hint': (0x720, 0x4a0), + 'Dark Potion Shop': (0xc80, 0x4c0), + 'Chest Game': (0x080, 0x7a0), + 'Thieves Town': (0x1d0, 0x780), + 'C-Shaped House': (0x310, 0x7a0), + 'Brewery': (0x170, 0x980), + 'Dark World Shop': (0x2e0, 0x880), + 'Red Shield Shop': (0x500, 0x680), + 'Pyramid Hole': (0x820, 0x680), + 'Pyramid Entrance': (0x640, 0x7c0), + 'Pyramid Fairy': (0x740, 0x740), + 'Palace of Darkness': (0xf40, 0x620), + 'Palace of Darkness Hint': (0xd60, 0x7c0), + 'Hammer Peg Cave': (0x4c0, 0x940), + 'Archery Game': (0x2f0, 0xaf0), + 'Bonk Fairy (Dark)': (0x740, 0xa80), 'Big Bomb Shop': (0x8b1, 0xb2d), + 'Dark Lake Hylia Fairy': (0xd40, 0x9f0), + 'East Dark World Hint': (0xf60, 0xb00), + 'Mire Shed': (0x060, 0xc90), + 'Misery Mire': (0x100, 0xca0), + 'Mire Fairy': (0x1c0, 0xc90), + 'Mire Hint': (0x2e0, 0xd00), + 'Hype Cave': (0x940, 0xc80), 'Dark Lake Hylia Shop': (0xa40, 0xc40), - 'Lumberjack House': (0x580, 0x100), - 'Lake Hylia Fortune Teller': (0xa40, 0xc40), - 'Kakariko Gamble Game': (0x2f0, 0xaf0)} + 'Ice Palace': (0xca0, 0xda0), + 'Dark Lake Hylia Ledge Fairy': (0xe00, 0xc00), + 'Dark Lake Hylia Ledge Hint': (0xec0, 0xc00), + 'Dark Lake Hylia Ledge Spike Cave': (0xe80, 0xca0), + 'Swamp Palace': (0x759, 0xED0)} default_connector_connections = [('Death Mountain Return Cave (West)', 'Death Mountain Return Cave Exit (West)'), ('Death Mountain Return Cave (East)', 'Death Mountain Return Cave Exit (East)'), From aac7ff179187c6cdce2dbdd4b49f0f07cd5e538c Mon Sep 17 00:00:00 2001 From: codemann8 Date: Thu, 8 Jan 2026 12:59:57 -0600 Subject: [PATCH 4/7] Improved and fixed map check coord accuracy --- OverworldShuffle.py | 141 +++++++++++----- Rom.py | 113 +++++++------ data/base2current.bps | Bin 138619 -> 138750 bytes source/overworld/EntranceData.py | 280 +++++++++++++++---------------- 4 files changed, 299 insertions(+), 235 deletions(-) diff --git a/OverworldShuffle.py b/OverworldShuffle.py index 9b40b7a6..8abb8aa5 100644 --- a/OverworldShuffle.py +++ b/OverworldShuffle.py @@ -2540,46 +2540,107 @@ isolated_regions = [ flute_data = { #OWID LW Region DW Region Slot VRAM BG Y BG X Link Y Link X Cam Y Cam X Unk1 Unk2 IconY IconX AltY AltX AltVRAM AltBGY AltBGX AltCamY AltCamX AltUnk1 AltUnk2 AltIconY AltIconX 0x00: (['Lost Woods East Area', 'Skull Woods Forest'], 0x09, 0x1042, 0x022e, 0x0202, 0x0290, 0x0288, 0x029b, 0x028f, 0xfff2, 0x000e, 0x0290, 0x0288, 0x0290, 0x0290), - 0x02: (['Lumberjack Area', 'Dark Lumberjack Area'], 0x02, 0x059c, 0x00d6, 0x04e6, 0x0138, 0x0558, 0x0143, 0x0563, 0xfffa, 0xfffa, 0x0138, 0x0550), - 0x03: (['West Death Mountain (Bottom)', 'West Dark Death Mountain (Top)'], 0x0b, 0x1600, 0x02ca, 0x060e, 0x0328, 0x0678, 0x0337, 0x0683, 0xfff6, 0xfff2, 0x035b, 0x0680, 0x0118, 0x0860, 0x05c0, 0x00b8, 0x07ec, 0x0127, 0x086b, 0xfff8, 0x0004, 0x0148, 0x0850), - 0x05: (['East Death Mountain (Bottom)', 'East Dark Death Mountain (Bottom)'], 0x0e, 0x1860, 0x031e, 0x0d00, 0x0388, 0x0da8, 0x038d, 0x0d7d, 0x0000, 0x0000, 0x0388, 0x0da8), - 0x07: (['Death Mountain TR Pegs Area', 'Turtle Rock Area'], 0x07, 0x0804, 0x0102, 0x0e1a, 0x0160, 0x0e90, 0x016f, 0x0e97, 0xfffe, 0x0006, 0x0160, 0x0f20), - 0x0a: (['Mountain Pass Area', 'Bumper Cave Area'], 0x0a, 0x0180, 0x0220, 0x0406, 0x0280, 0x0488, 0x028f, 0x0493, 0x0000, 0xfffa, 0x0280, 0x0488), - 0x0f: (['Zora Waterfall Area', 'Catfish Area'], 0x0f, 0x0316, 0x025c, 0x0eb2, 0x02c0, 0x0f28, 0x02cb, 0x0f2f, 0x0002, 0xfffe, 0x02d0, 0x0f38), - 0x10: (['Lost Woods Pass West Area', 'Skull Woods Pass West Area'], 0x10, 0x0080, 0x0400, 0x0000, 0x0448, 0x0058, 0x046f, 0x0085, 0x0000, 0x0000, 0x0448, 0x0058), - 0x11: (['Kakariko Fortune Area', 'Dark Fortune Area'], 0x11, 0x0912, 0x051e, 0x0292, 0x0588, 0x0318, 0x058d, 0x031f, 0x0000, 0xfffe, 0x0588, 0x0318), - 0x12: (['Kakariko Pond Area', 'Outcast Pond Area'], 0x12, 0x0890, 0x051a, 0x0476, 0x0578, 0x04f8, 0x0587, 0x0503, 0xfff6, 0x000a, 0x0578, 0x04f8), - 0x13: (['Sanctuary Area', 'Dark Chapel Area'], 0x13, 0x051c, 0x04aa, 0x06de, 0x0508, 0x0758, 0x0517, 0x0763, 0xfff6, 0x0002, 0x0508, 0x0758), - 0x14: (['Graveyard Area', 'Dark Graveyard Area'], 0x14, 0x089c, 0x051e, 0x08e6, 0x0580, 0x0958, 0x058b, 0x0963, 0x0000, 0xfffa, 0x0580, 0x0928, 0x0580, 0x0948), - 0x15: (['River Bend East Bank', 'Qirn Jump East Bank'], 0x15, 0x041a, 0x0486, 0x0ad2, 0x04e8, 0x0b48, 0x04f3, 0x0b4f, 0x0008, 0xfffe, 0x04f8, 0x0b60), - 0x16: (['Potion Shop Area', 'Dark Witch Area'], 0x16, 0x0888, 0x0516, 0x0c4e, 0x0578, 0x0cc8, 0x0583, 0x0cd3, 0xfffa, 0xfff2, 0x0598, 0x0ccf), - 0x17: (['Zora Approach Ledge', 'Catfish Approach Ledge'], 0x17, 0x039e, 0x047e, 0x0ef2, 0x04e0, 0x0f68, 0x04eb, 0x0f6f, 0x0000, 0xfffe, 0x04e0, 0x0f68), - 0x18: (['Kakariko Village', 'Village of Outcasts'], 0x18, 0x0b30, 0x0759, 0x017e, 0x07b7, 0x0200, 0x07c6, 0x020b, 0x0007, 0x0002, 0x07c0, 0x0210, 0x07c8, 0x01f8), - 0x1a: (['Forgotten Forest Area', 'Shield Shop Fence'], 0x1a, 0x081a, 0x070f, 0x04d2, 0x0770, 0x0548, 0x077c, 0x054f, 0xffff, 0xfffe, 0x0770, 0x0548), - 0x1b: (['Hyrule Castle Courtyard', 'Pyramid Area'], 0x1b, 0x0c30, 0x077a, 0x0786, 0x07d8, 0x07f8, 0x07e7, 0x0803, 0x0006, 0xfffa, 0x07d8, 0x07f8), - 0x1d: (['Wooden Bridge Area', 'Broken Bridge Northeast'], 0x1d, 0x0602, 0x06c2, 0x0a0e, 0x0720, 0x0a80, 0x072f, 0x0a8b, 0xfffe, 0x0002, 0x0720, 0x0a80), - 0x1e: (['Eastern Palace Area', 'Palace of Darkness Area'], 0x26, 0x1802, 0x091e, 0x0c0e, 0x09c0, 0x0c80, 0x098b, 0x0c8b, 0x0000, 0x0002, 0x09c0, 0x0c80), - 0x22: (['Blacksmith Area', 'Hammer Pegs Area'], 0x22, 0x058c, 0x08aa, 0x0462, 0x0908, 0x04d8, 0x0917, 0x04df, 0x0006, 0xfffe, 0x0908, 0x04d8), - 0x25: (['Sand Dunes Area', 'Dark Dunes Area'], 0x25, 0x030e, 0x085a, 0x0a76, 0x08b8, 0x0ae8, 0x08c7, 0x0af3, 0x0006, 0xfffa, 0x08b8, 0x0b08), - 0x28: (['Maze Race Area', 'Dig Game Area'], 0x28, 0x0908, 0x0b1e, 0x003a, 0x0b88, 0x00b8, 0x0b8d, 0x00bf, 0x0000, 0x0006, 0x0b88, 0x00b8), - 0x29: (['Kakariko Suburb Area', 'Frog Area'], 0x29, 0x0408, 0x0a7c, 0x0242, 0x0ae0, 0x02c0, 0x0aeb, 0x02c7, 0x0002, 0xfffe, 0x0ae0, 0x02c0), - 0x2a: (['Flute Boy Area', 'Stumpy Area'], 0x2a, 0x058e, 0x0aac, 0x046e, 0x0b10, 0x04e8, 0x0b1b, 0x04f3, 0x0002, 0x0002, 0x0b10, 0x04e8), - 0x2b: (['Central Bonk Rocks Area', 'Dark Bonk Rocks Area'], 0x2b, 0x0620, 0x0acc, 0x0700, 0x0b30, 0x0790, 0x0b3b, 0x0785, 0xfff2, 0x0000, 0x0b30, 0x0770), - 0x2c: (['Links House Area', 'Big Bomb Shop Area'], 0x2c, 0x0588, 0x0ab9, 0x0840, 0x0b17, 0x08b8, 0x0b26, 0x08bf, 0xfff7, 0x0000, 0x0b20, 0x08b8), - 0x2d: (['Stone Bridge South Area', 'Hammer Bridge South Area'], 0x2d, 0x0886, 0x0b1e, 0x0a2a, 0x0ba0, 0x0aa8, 0x0b8b, 0x0aaf, 0x0000, 0x0006, 0x0bc4, 0x0ad0), - 0x2e: (['Tree Line Area', 'Dark Tree Line Area'], 0x2e, 0x0100, 0x0a1a, 0x0c00, 0x0a78, 0x0c30, 0x0a87, 0x0c7d, 0x0006, 0x0000, 0x0a78, 0x0c58), - 0x2f: (['Eastern Nook Area', 'Darkness Nook Area'], 0x2f, 0x0798, 0x0afa, 0x0eb2, 0x0b58, 0x0f30, 0x0b67, 0x0f37, 0xfff6, 0x000e, 0x0b50, 0x0f30), - 0x30: (['Desert Teleporter Ledge', 'Mire Teleporter Ledge'], 0x38, 0x1880, 0x0f1e, 0x0000, 0x0fa8, 0x0078, 0x0f8d, 0x008d, 0x0000, 0x0000, 0x0fb0, 0x0070), - 0x32: (['Flute Boy Approach Area', 'Stumpy Approach Area'], 0x32, 0x03a0, 0x0c6c, 0x0500, 0x0cd0, 0x05a8, 0x0cdb, 0x0585, 0x0002, 0x0000, 0x0cd6, 0x0568), - 0x33: (['C Whirlpool Outer Area', 'Dark C Whirlpool Outer Area'], 0x33, 0x0180, 0x0c20, 0x0600, 0x0c80, 0x0628, 0x0c8f, 0x067d, 0x0000, 0x0000, 0x0c80, 0x0628), - 0x34: (['Statues Area', 'Hype Cave Area'], 0x34, 0x088e, 0x0d00, 0x0866, 0x0d60, 0x08d8, 0x0d6f, 0x08e3, 0x0000, 0x000a, 0x0d60, 0x08d8), - #0x35: (['Lake Hylia Northwest Bank', 'Ice Lake Northwest Bank'], 0x35, 0x0d00, 0x0da6, 0x0a06, 0x0e08, 0x0a80, 0x0e13, 0x0a8b, 0xfffa, 0xfffa, 0x0d88, 0x0a88), - 0x35: (['Lake Hylia South Shore', 'Ice Lake Southeast Ledge'], 0x3e, 0x1860, 0x0f1e, 0x0d00, 0x0f98, 0x0da8, 0x0f8b, 0x0d85, 0x0000, 0x0000, 0x0f90, 0x0da4), - 0x37: (['Ice Cave Area', 'Shopping Mall Area'], 0x37, 0x0786, 0x0cf6, 0x0e2e, 0x0d58, 0x0ea0, 0x0d63, 0x0eab, 0x000a, 0x0002, 0x0d48, 0x0ed0), - 0x3a: (['Desert Pass Area', 'Swamp Nook Area'], 0x3a, 0x001a, 0x0e08, 0x04c6, 0x0e70, 0x0540, 0x0e7d, 0x054b, 0x0006, 0x000a, 0x0e70, 0x0540), - 0x3b: (['Dam Area', 'Swamp Area'], 0x3b, 0x069e, 0x0edf, 0x06f2, 0x0f3d, 0x0778, 0x0f4c, 0x077f, 0xfff1, 0xfffe, 0x0f30, 0x0770), - 0x3c: (['South Pass Area', 'Dark South Pass Area'], 0x3c, 0x0584, 0x0ed0, 0x081e, 0x0f38, 0x0898, 0x0f45, 0x08a3, 0xfffe, 0x0002, 0x0f38, 0x0898), - 0x3f: (['Octoballoon Area', 'Bomber Corner Area'], 0x3f, 0x0810, 0x0f05, 0x0e75, 0x0f67, 0x0ef3, 0x0f72, 0x0efa, 0xfffb, 0x000b, 0x0f80, 0x0ef0) + 0x02: (['Lumberjack Area', 'Dark Lumberjack Area'], 0x02, 0x059c, 0x00d6, 0x04e6, 0x0138, 0x0558, 0x0143, 0x0563, 0xfffa, 0xfffa, 0x01d8, 0x0518), + 0x03: (['West Death Mountain (Bottom)', 'West Dark Death Mountain (Top)'], 0x0b, 0x1600, 0x02ca, 0x060e, 0x0328, 0x0678, 0x0337, 0x0683, 0xfff6, 0xfff2, 0x03bb, 0x0680, 0x0118, 0x0860, 0x05c0, 0x00b8, 0x07ec, 0x0127, 0x086b, 0xfff8, 0x0004, 0x0148, 0x0850), + 0x05: (['East Death Mountain (Bottom)', 'East Dark Death Mountain (Bottom)'], 0x0e, 0x1860, 0x031e, 0x0d00, 0x0388, 0x0da8, 0x038d, 0x0d7d, 0x0000, 0x0000, 0x03c8, 0x0d98), + 0x07: (['Death Mountain TR Pegs Area', 'Turtle Rock Area'], 0x07, 0x0804, 0x0102, 0x0e1a, 0x0160, 0x0e90, 0x016f, 0x0e97, 0xfffe, 0x0006, 0x0150, 0x0ea0), + 0x0a: (['Mountain Pass Area', 'Bumper Cave Area'], 0x0a, 0x0180, 0x0220, 0x0406, 0x0280, 0x0488, 0x028f, 0x0493, 0x0000, 0xfffa, 0x0390, 0x04d8), + 0x0f: (['Zora Waterfall Area', 'Catfish Area'], 0x0f, 0x0316, 0x025c, 0x0eb2, 0x02c0, 0x0f28, 0x02cb, 0x0f2f, 0x0002, 0xfffe, 0x0360, 0x0f58), + 0x10: (['Lost Woods Pass West Area', 'Skull Woods Pass West Area'], 0x10, 0x0080, 0x0400, 0x0000, 0x0448, 0x0058, 0x046f, 0x0085, 0x0000, 0x0000, 0x04f8, 0x0088), + 0x11: (['Kakariko Fortune Area', 'Dark Fortune Area'], 0x11, 0x0912, 0x051e, 0x0292, 0x0588, 0x0318, 0x058d, 0x031f, 0x0000, 0xfffe, 0x05f8, 0x0318), + 0x12: (['Kakariko Pond Area', 'Outcast Pond Area'], 0x12, 0x0890, 0x051a, 0x0476, 0x0578, 0x04f8, 0x0587, 0x0503, 0xfff6, 0x000a, 0x05b8, 0x04f8), + 0x13: (['Sanctuary Area', 'Dark Chapel Area'], 0x13, 0x051c, 0x04aa, 0x06de, 0x0508, 0x0758, 0x0517, 0x0763, 0xfff6, 0x0002, 0x05b8, 0x0738), + 0x14: (['Graveyard Area', 'Dark Graveyard Area'], 0x14, 0x089c, 0x051e, 0x08e6, 0x0580, 0x0958, 0x058b, 0x0963, 0x0000, 0xfffa, 0x05f0, 0x0918, 0x0580, 0x0948), + 0x15: (['River Bend East Bank', 'Qirn Jump East Bank'], 0x15, 0x041a, 0x0486, 0x0ad2, 0x04e8, 0x0b48, 0x04f3, 0x0b4f, 0x0008, 0xfffe, 0x0548, 0x0b78), + 0x16: (['Potion Shop Area', 'Dark Witch Area'], 0x16, 0x0888, 0x0516, 0x0c4e, 0x0578, 0x0cc8, 0x0583, 0x0cd3, 0xfffa, 0xfff2, 0x05e8, 0x0c9f), + 0x17: (['Zora Approach Ledge', 'Catfish Approach Ledge'], 0x17, 0x039e, 0x047e, 0x0ef2, 0x04e0, 0x0f68, 0x04eb, 0x0f6f, 0x0000, 0xfffe, 0x0580, 0x0f48), + 0x18: (['Kakariko Village', 'Village of Outcasts'], 0x18, 0x0b30, 0x0759, 0x017e, 0x07b7, 0x0200, 0x07c6, 0x020b, 0x0007, 0x0002, 0x0830, 0x0240, 0x07c8, 0x01f8), + 0x1a: (['Forgotten Forest Area', 'Shield Shop Fence'], 0x1a, 0x081a, 0x070f, 0x04d2, 0x0770, 0x0548, 0x077c, 0x054f, 0xffff, 0xfffe, 0x0770, 0x0518), + 0x1b: (['Hyrule Castle Courtyard', 'Pyramid Area'], 0x1b, 0x0c30, 0x077a, 0x0786, 0x07d8, 0x07f8, 0x07e7, 0x0803, 0x0006, 0xfffa, 0x07f8, 0x07f8), + 0x1d: (['Wooden Bridge Area', 'Broken Bridge Northeast'], 0x1d, 0x0602, 0x06c2, 0x0a0e, 0x0720, 0x0a80, 0x072f, 0x0a8b, 0xfffe, 0x0002, 0x0750, 0x0a70), + 0x1e: (['Eastern Palace Area', 'Palace of Darkness Area'], 0x26, 0x1802, 0x091e, 0x0c0e, 0x09c0, 0x0c80, 0x098b, 0x0c8b, 0x0000, 0x0002, 0x09a0, 0x0cb0), + 0x22: (['Blacksmith Area', 'Hammer Pegs Area'], 0x22, 0x058c, 0x08aa, 0x0462, 0x0908, 0x04d8, 0x0917, 0x04df, 0x0006, 0xfffe, 0x0978, 0x04e8), + 0x25: (['Sand Dunes Area', 'Dark Dunes Area'], 0x25, 0x030e, 0x085a, 0x0a76, 0x08b8, 0x0ae8, 0x08c7, 0x0af3, 0x0006, 0xfffa, 0x0918, 0x0b18), + 0x28: (['Maze Race Area', 'Dig Game Area'], 0x28, 0x0908, 0x0b1e, 0x003a, 0x0b88, 0x00b8, 0x0b8d, 0x00bf, 0x0000, 0x0006, 0x0ba8, 0x00b8), + 0x29: (['Kakariko Suburb Area', 'Frog Area'], 0x29, 0x0408, 0x0a7c, 0x0242, 0x0ae0, 0x02c0, 0x0aeb, 0x02c7, 0x0002, 0xfffe, 0x0b30, 0x02e0), + 0x2a: (['Flute Boy Area', 'Stumpy Area'], 0x2a, 0x058e, 0x0aac, 0x046e, 0x0b10, 0x04e8, 0x0b1b, 0x04f3, 0x0002, 0x0002, 0x0b60, 0x04f8), + 0x2b: (['Central Bonk Rocks Area', 'Dark Bonk Rocks Area'], 0x2b, 0x0620, 0x0acc, 0x0700, 0x0b30, 0x0790, 0x0b3b, 0x0785, 0xfff2, 0x0000, 0x0b80, 0x0760), + 0x2c: (['Links House Area', 'Big Bomb Shop Area'], 0x2c, 0x0588, 0x0ab9, 0x0840, 0x0b17, 0x08b8, 0x0b26, 0x08bf, 0xfff7, 0x0000, 0x0bb0, 0x08a8), + 0x2d: (['Stone Bridge South Area', 'Hammer Bridge South Area'], 0x2d, 0x0886, 0x0b1e, 0x0a2a, 0x0ba0, 0x0aa8, 0x0b8b, 0x0aaf, 0x0000, 0x0006, 0x0bf0, 0x0ab8), + 0x2e: (['Tree Line Area', 'Dark Tree Line Area'], 0x2e, 0x0100, 0x0a1a, 0x0c00, 0x0a78, 0x0c30, 0x0a87, 0x0c7d, 0x0006, 0x0000, 0x0ac8, 0x0c70), + 0x2f: (['Eastern Nook Area', 'Darkness Nook Area'], 0x2f, 0x0798, 0x0afa, 0x0eb2, 0x0b58, 0x0f30, 0x0b67, 0x0f37, 0xfff6, 0x000e, 0x0bc0, 0x0f00), + 0x30: (['Desert Teleporter Ledge', 'Mire Teleporter Ledge'], 0x38, 0x1880, 0x0f1e, 0x0000, 0x0fa8, 0x0078, 0x0f8d, 0x008d, 0x0000, 0x0000, 0x0ff0, 0x0070), + 0x32: (['Flute Boy Approach Area', 'Stumpy Approach Area'], 0x32, 0x03a0, 0x0c6c, 0x0500, 0x0cd0, 0x05a8, 0x0cdb, 0x0585, 0x0002, 0x0000, 0x0d00, 0x0528), + 0x33: (['C Whirlpool Outer Area', 'Dark C Whirlpool Outer Area'], 0x33, 0x0180, 0x0c20, 0x0600, 0x0c80, 0x0628, 0x0c8f, 0x067d, 0x0000, 0x0000, 0x0ce0, 0x0688), + 0x34: (['Statues Area', 'Hype Cave Area'], 0x34, 0x088e, 0x0d00, 0x0866, 0x0d60, 0x08d8, 0x0d6f, 0x08e3, 0x0000, 0x000a, 0x0dd0, 0x08e8), + #0x35: (['Lake Hylia Northwest Bank', 'Ice Lake Northwest Bank'], 0x35, 0x0d00, 0x0da6, 0x0a06, 0x0e08, 0x0a80, 0x0e13, 0x0a8b, 0xfffa, 0xfffa, 0x0dc8, 0x0a90), + 0x35: (['Lake Hylia South Shore', 'Ice Lake Southeast Ledge'], 0x3e, 0x1860, 0x0f1e, 0x0d00, 0x0f98, 0x0da8, 0x0f8b, 0x0d85, 0x0000, 0x0000, 0x0fd8, 0x0da8), + 0x37: (['Ice Cave Area', 'Shopping Mall Area'], 0x37, 0x0786, 0x0cf6, 0x0e2e, 0x0d58, 0x0ea0, 0x0d63, 0x0eab, 0x000a, 0x0002, 0x0d98, 0x0ed0), + 0x3a: (['Desert Pass Area', 'Swamp Nook Area'], 0x3a, 0x001a, 0x0e08, 0x04c6, 0x0e70, 0x0540, 0x0e7d, 0x054b, 0x0006, 0x000a, 0x0ee0, 0x0570), + 0x3b: (['Dam Area', 'Swamp Area'], 0x3b, 0x069e, 0x0edf, 0x06f2, 0x0f3d, 0x0778, 0x0f4c, 0x077f, 0xfff1, 0xfffe, 0x0fd0, 0x0770), + 0x3c: (['South Pass Area', 'Dark South Pass Area'], 0x3c, 0x0584, 0x0ed0, 0x081e, 0x0f38, 0x0898, 0x0f45, 0x08a3, 0xfffe, 0x0002, 0x0fa8, 0x0898), + 0x3f: (['Octoballoon Area', 'Bomber Corner Area'], 0x3f, 0x0810, 0x0f05, 0x0e75, 0x0f67, 0x0ef3, 0x0f72, 0x0efa, 0xfffb, 0x000b, 0x0fd0, 0x0ef0) +} + +ow_loc_prize_table = { + 'Master Sword Pedestal': (0x06d, 0x070), + 'Hobo': (0xb80, 0xb90), + 'Mushroom': (0x180, 0x140), + 'Lost Woods Hideout Tree': (0x200, 0x320), + 'Ether Tablet': (0x728, 0x017), + 'Spectacle Rock': (0x7F8, 0x128), + 'Old Man': (0x6A8, 0x3FF), + 'Floating Island': (0xD38, 0x038), + 'Death Mountain Bonk Rocks': (0xD48, 0x107), + 'Mountain Pass Pull Tree': (0x4E0, 0x380), + 'Mountain Pass Southeast Tree': (0x5A0, 0x3FF), + 'Lost Woods Pass West Tree': (0x080, 0x540), + 'Kakariko Portal Tree': (0x190, 0x540), + 'Fortune Bonk Rocks': (0x288, 0x558), + 'Bonk Rocks Tree': (0x680, 0x520), + 'Sanctuary Tree': (0x788, 0x594), + 'River Bend West Tree': (0xA38, 0x5FF), + 'River Bend East Tree': (0xB88, 0x558), + 'Bottle Merchant': (0x178, 0x7E8), + 'Blinds Hideout Tree': (0x118, 0x6F7), + 'Kakariko Welcome Tree': (0x358, 0x988), + 'Hyrule Castle Tree': (0x730, 0x780), + 'Wooden Bridge Tree': (0xA78, 0x6F0), + 'Eastern Palace Tree': (0xEC0, 0x968), + 'Maze Race': (0x0C0, 0xB00), + 'Flute Spot': (0x480, 0xAC0), + 'Flute Boy East Tree': (0x540, 0xB80), + 'Flute Boy South Tree': (0x540, 0xB80), + 'Central Bonk Rocks Tree': (0x768, 0xB37), + 'Tree Line Tree 2': (0xCD8, 0xB00), + 'Tree Line Tree 4': (0xCD8, 0xB00), + 'Desert Ledge': (0x018, 0xE88), + 'Bombos Tablet': (0x3E8, 0xEF8), + 'Flute Boy Approach North Tree': (0x588, 0xD07), + 'Flute Boy Approach South Tree': (0x588, 0xD07), + 'Lake Hylia Island': (0xB98, 0xD88), + 'Purple Chest': (0x588, 0xE96), + 'Sunken Treasure': (0x6F8, 0xF48), + + 'Dark Lumberjack Tree': (0x438, 0x1F7), + 'Bumper Cave Ledge': (0x538, 0x277), + 'Catfish': (0xE80, 0x368), + 'Dark Fortune Bonk Rocks (Drop 1)': (0x288, 0x558), + 'Dark Fortune Bonk Rocks (Drop 2)': (0x288, 0x558), + 'Dark Graveyard West Bonk Rocks': (0x900, 0x580), + 'Dark Graveyard North Bonk Rocks': (0x900, 0x580), + 'Dark Graveyard Tomb Bonk Rocks': (0x900, 0x580), + 'Qirn Jump West Tree': (0xA98, 0x5FF), + 'Qirn Jump East Tree': (0xB88, 0x558), + 'Dark Witch Tree': (0xC28, 0x558), + 'Pyramid': (0x998, 0x778), + 'Pyramid Tree': (0x738, 0x908), + 'Palace of Darkness Tree': (0xEC0, 0x968), + 'Digging Game': (0x0C0, 0xB00), + 'Dark Tree Line Tree 2': (0xCD8, 0xB00), + 'Dark Tree Line Tree 3': (0xCD8, 0xB00), + 'Dark Tree Line Tree 4': (0xCD8, 0xB00), + 'Hype Cave Statue': (0x900, 0xDB0) } tile_swap_spoiler_table = \ diff --git a/Rom.py b/Rom.py index 687805ab..06d31130 100644 --- a/Rom.py +++ b/Rom.py @@ -43,7 +43,7 @@ from source.enemizer.Enemizer import write_enemy_shuffle_settings JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = 'b2b8b42d575dd9825f2d8c424a4abb21' +RANDOMIZERBASEHASH = '5af87240955d04dfbbab1087de73d4c7' class JsonRom(object): @@ -527,35 +527,27 @@ def patch_rom(world, rom, player, team, is_mystery=False, rom_header=None): if world.is_tile_swapped(owid, player): offset = 0x40 - + write_int16(rom, snes_to_pc(0x02E849 + (o * 2)), owid + offset) # owid write_int16(rom, snes_to_pc(0x02E8D1 + (o * 2)), data[13] if offset > 0 and len(data) > 13 else data[5]) # link Y write_int16(rom, snes_to_pc(0x02E8F3 + (o * 2)), data[14] if offset > 0 and len(data) > 13 else data[6]) # link X - - if offset == 0 or len(data) <= 15: - write_int16(rom, snes_to_pc(0x02E86B + (o * 2)), data[2]) # vram - write_int16(rom, snes_to_pc(0x02E88D + (o * 2)), data[3]) # BG scroll Y - write_int16(rom, snes_to_pc(0x02E8AF + (o * 2)), data[4]) # BG scroll X - write_int16(rom, snes_to_pc(0x02E915 + (o * 2)), data[7]) # cam Y - write_int16(rom, snes_to_pc(0x02E937 + (o * 2)), data[8]) # cam X - write_int16(rom, snes_to_pc(0x02E959 + (o * 2)), data[9]) # unknown 1 - write_int16(rom, snes_to_pc(0x02E97B + (o * 2)), data[10]) # unknown 2 - rom.write_byte(snes_to_pc(0x0AB783 + o), data[12] & 0xff) # flute menu blip - X low byte - rom.write_byte(snes_to_pc(0x0AB78B + o), data[12] // 0x100) # flute menu blip - X high byte - rom.write_byte(snes_to_pc(0x0AB793 + o), data[11] & 0xff) # flute menu blip - Y low byte - rom.write_byte(snes_to_pc(0x0AB79B + o), data[11] // 0x100) # flute menu blip - Y high byte - else: # use alternate flute data - write_int16(rom, snes_to_pc(0x02E86B + (o * 2)), data[15]) # vram - write_int16(rom, snes_to_pc(0x02E88D + (o * 2)), data[16]) # BG scroll Y - write_int16(rom, snes_to_pc(0x02E8AF + (o * 2)), data[17]) # BG scroll X - write_int16(rom, snes_to_pc(0x02E915 + (o * 2)), data[18]) # cam Y - write_int16(rom, snes_to_pc(0x02E937 + (o * 2)), data[19]) # cam X - write_int16(rom, snes_to_pc(0x02E959 + (o * 2)), data[20]) # unknown 1 - write_int16(rom, snes_to_pc(0x02E97B + (o * 2)), data[21]) # unknown 2 - rom.write_byte(snes_to_pc(0x0AB783 + o), data[23] & 0xff) # flute menu blip - X low byte - rom.write_byte(snes_to_pc(0x0AB78B + o), data[23] // 0x100) # flute menu blip - X high byte - rom.write_byte(snes_to_pc(0x0AB793 + o), data[22] & 0xff) # flute menu blip - Y low byte - rom.write_byte(snes_to_pc(0x0AB79B + o), data[22] // 0x100) # flute menu blip - Y high byte + + base_index = 0 + if not (offset == 0 or len(data) <= 15): + base_index = 13 # use alternate flute data + write_int16(rom, snes_to_pc(0x02E86B + (o * 2)), data[base_index + 2]) # vram + write_int16(rom, snes_to_pc(0x02E88D + (o * 2)), data[base_index + 3]) # BG scroll Y + write_int16(rom, snes_to_pc(0x02E8AF + (o * 2)), data[base_index + 4]) # BG scroll X + if base_index > 0: + base_index -= 2 + write_int16(rom, snes_to_pc(0x02E915 + (o * 2)), data[base_index + 7]) # cam Y + write_int16(rom, snes_to_pc(0x02E937 + (o * 2)), data[base_index + 8]) # cam X + write_int16(rom, snes_to_pc(0x02E959 + (o * 2)), data[base_index + 9]) # unknown 1 + write_int16(rom, snes_to_pc(0x02E97B + (o * 2)), data[base_index + 10]) # unknown 2 + rom.write_byte(snes_to_pc(0x0AB783 + o), data[base_index + 12] & 0xff) # flute menu blip - X low byte + rom.write_byte(snes_to_pc(0x0AB78B + o), data[base_index + 12] // 0x100) # flute menu blip - X high byte + rom.write_byte(snes_to_pc(0x0AB793 + o), data[base_index + 11] & 0xff) # flute menu blip - Y low byte + rom.write_byte(snes_to_pc(0x0AB79B + o), data[base_index + 11] // 0x100) # flute menu blip - Y high byte # patch whirlpools if world.owWhirlpoolShuffle[player]: @@ -1412,34 +1404,45 @@ def patch_rom(world, rom, player, team, is_mystery=False, rom_header=None): rom.write_byte(0x18003C, compass_mode) def get_entrance_coords(ent): - if ent is None: - owid_map = [0x1E, 0x30, 0xFF, 0x7B, 0x5E, 0x70, 0x40, 0x75, 0x03, 0x58, 0x47] - x_map_position_generic = [0x03c0, 0x0740, 0xff00, 0x03c0, 0x01c0, 0x0bc0, 0x05c0, 0x09c0, 0x0ac0, 0x07c0, 0x0dc0] - y_map_position_generic = [0xff00, 0xff00, 0xff00, 0x0fc0, 0x0fc0, 0x0fc0, 0x0fc0, 0x0fc0, 0xff00, 0x0fc0, 0x0fc0] - world_indicator = 0x0000 - idx = int((map_index-2)/2) + if ent is None or isinstance(ent, int): + owid_map = [ 0x1E, 0x30, 0xFF, 0x7B, 0x5E, 0x70, 0x40, 0x75, 0x03, 0x58, 0x47 ] + coord_flags = 0x0000 + if ent is None: + # HUD-style dislocated icons + x_map_position = [0x0050, 0x0080, 0xFF00, 0x0040, 0x0020, 0x00C0, 0x0060, 0x00A0, 0x00B0, 0x0080, 0x00E0] + y_map_position = [0x000C, 0x000C, 0xFF00, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x00D4, 0x000C, 0x00D4, 0x00D4] + coord_flags = 0x4000 # raw OAM coord flag + idx = int((map_index-2)/2) + elif isinstance(ent, int): + # vanilla icon positions + x_map_position = [0x0F30, 0x0170, 0xFF00, 0x0790, 0x0F30, 0x0160, 0x00F0, 0x0CB0, 0x0900, 0x0240, 0x0F30] + y_map_position = [0x06E0, 0x0E50, 0xFF00, 0x0FD0, 0x06E0, 0x0D80, 0x0160, 0x0E80, 0x0130, 0x0840, 0x01B0] + idx = ent owid = owid_map[idx] if owid != 0xFF: if (owid < 0x40) == (world.is_tile_swapped(owid, player)): - world_indicator = 0x8000 - return [world_indicator | x_map_position_generic[idx], y_map_position_generic[idx]] - if type(ent) is Location: - from OverworldShuffle import OWTileRegions - if ent.name == 'Hobo': - coords = (0xb80, 0xb80) - elif ent.name == 'Master Sword Pedestal': - coords = (0x06d, 0x070) + coord_flags |= 0x8000 # world indicator flag + return (coord_flags | x_map_position[idx], y_map_position[idx]) + elif type(ent) is Location: + from OverworldShuffle import OWTileRegions, ow_loc_prize_table + if ent.name in ow_loc_prize_table: + coords = ow_loc_prize_table[ent.name] else: owid = OWTileRegions[ent.parent_region.name] if owid == 0x81: - coords = (0x220, 0xf40) + coords = (0xF60, 0x280) else: owid = owid % 0x40 coords = (0x200 * (owid % 0x08) + 0x100, 0x200 * int(owid / 0x08) + 0x100) - if owid in [0x00, 0x03, 0x05, 0x18, 0x1b, 0x1e, 0x30, 0x35]: + if owid in [0x00, 0x03, 0x05, 0x18, 0x1B, 0x1E, 0x30, 0x35]: coords = (coords[0] + 0x100, coords[1] + 0x100) else: - coords = ow_prize_table[ent.name] + if ent.name in ow_prize_table: + coords = ow_prize_table[ent.name] + elif door_addresses[ent.name][1] is not None: + coords = (door_addresses[ent.name][1][6], door_addresses[ent.name][1][5]) + else: + raise Exception(f"No overworld map coordinates for entrance {ent.name}") coords = ((0x8000 if ent.parent_region.type == RegionType.DarkWorld else 0x0000) | coords[0], coords[1]) return coords if world.overworld_map[player] == 'default': @@ -1468,16 +1471,16 @@ def patch_rom(world, rom, player, team, is_mystery=False, rom_header=None): # prize location write_int16s(rom, snes_to_pc(0x0ABE2E)+(map_index*6)+8, coords) if world.shuffle[player] == 'vanilla' or world.overworld_map[player] == 'default': - # TODO: I think this is logically the same as some of the vanilla stuff below - vanilla_entrances = { 'Hyrule Castle': 'Hyrule Castle Entrance (South)', - 'Desert Palace': 'Desert Palace Entrance (North)', - 'Skull Woods': 'Skull Woods Final Section' } - entrance_name = vanilla_entrances[dungeon] if dungeon in vanilla_entrances else dungeon - if world.is_atgt_swapped(player): - swap_entrances = { 'Agahnims Tower': 'Ganons Tower', - 'Ganons Tower': 'Agahnims Tower' } - entrance_name = swap_entrances[dungeon] if dungeon in swap_entrances else entrance_name - entrance = world.get_entrance(entrance_name, player) + swap_entrances = { 'Agahnims Tower': 'Ganons Tower', + 'Ganons Tower': 'Agahnims Tower' } + if dungeon in swap_entrances: + entrance_name = dungeon + if world.is_atgt_swapped(player): + entrance_name = swap_entrances[dungeon] + entrance = world.get_entrance(entrance_name, player) + coords = get_entrance_coords(entrance) + else: + coords = get_entrance_coords(int((map_index-2)/2)) else: if len(portal_list) == 1: portal_idx = 0 @@ -1497,7 +1500,7 @@ def patch_rom(world, rom, player, team, is_mystery=False, rom_header=None): offset += 4 portal = world.get_portal(portal_list[portal_idx], player) entrance = portal.find_portal_entrance() - coords = get_entrance_coords(entrance) + coords = get_entrance_coords(entrance) # figure out compass entrances and what world (light/dark) write_int16s(rom, snes_to_pc(0x0ABE2E)+(map_index*6), coords) diff --git a/data/base2current.bps b/data/base2current.bps index 5ec6d04bb9922f4431f4ef9b1adee07a008182d4..df5de37ef81ea16cf69b3d506e7c5fe8cc1a8850 100644 GIT binary patch delta 639 zcmV-_0)YMdx(NQe2(T&x3XL!V3k8U&HoVERH3OnEW-t%nl4?DGoiGpJ25RiC}?%l8TRzo$!EQ0RaC1|BsM~u#A9{`;!2G zg$Xd0@{5p(K!QM$b%2kMjWCa}0hjrg0D#|&rVl-nFgKY2cC*SiN&x{SlNC8jPL>gb zIe>`(K;j_K2_Uh*G@@DHU9IOzz54y6z22!#)T4WetX zj)JYiAf*nHkmiu)kfjWl7=v|yXoUcij5#YXYQvBUm?`}L2?zkFfM&09o4%n3mf8;xJ4f#Q=eUid2Q0Riu-MIwJyQQCF zet>}qqe!z?{TfyUpkFC~1E7B(j6$0-E9a9|frYO* zmuE2Nf%Kagm!VSu<_b4---!vWWS3Sjw~1&8i2-I07hu()+6t<_*q5jJV4oDXFNy(o6%CVlL;aB$X#|B2mrh8xt)BtkZUGaQ ZjSd1U0$>lfx())l4hR7rPz?YTIB0o84{87a delta 499 zcmVn(S zi4Ud=kCCoTuerh?XoUc!4w8`Okmiu3442AjfRnm8D=<&PkP4V7{QwCF0H}awuX3BX zp$C`=0syFhRj-?oq0sMuNr^B3&>54flMPFvs|=GBI%WcSfs=hYA{Uc)g|c%GjH@G@ zWPpK+T!Vp%RE3)ks*?pfBLWG3lPWtS0V%UiJI`Pibr8&f4w`-%t(njTsZscV1CoT# z3}3S|oSGpAPc+woA(sQQ)V<39V$83^BJ3RRIz; z7Y$DFlO|5_g&?($p|hlubxiSr1DhOBmp6(5W)DqZ)uGx7s=wHmr}|)@O1G?v0e2M# prz;!%mv$ewFrWe7ZUIS`5Dx+?0u~UrJr4r84hY^5EWWNnQYY4d(Gmav diff --git a/source/overworld/EntranceData.py b/source/overworld/EntranceData.py index f4dcb362..095615e1 100644 --- a/source/overworld/EntranceData.py +++ b/source/overworld/EntranceData.py @@ -147,149 +147,149 @@ door_addresses = {'Links House': (0x00, (0x0104, 0x2c 'Lake Hylia Fortune Teller': (0x72, (0x0122, 0x35, 0x0380, 0x0c6a, 0x0a00, 0x0cb8, 0x0a58, 0x0cd7, 0x0a85, 0x06, 0xfa, 0x0000, 0x0000), 0x00), 'Kakariko Gamble Game': (0x66, (0x0118, 0x29, 0x069e, 0x0ac4, 0x02ea, 0x0b18, 0x0368, 0x0b33, 0x036f, 0x0a, 0xf6, 0x09AC, 0x0000), 0x00)} -ow_prize_table = {'Lost Woods Gamble': (0x240, 0x080), - 'Lost Woods Hideout Drop': (0x290, 0x200), - 'Lost Woods Hideout Stump': (0x240, 0x280), - 'Lumberjack House': (0x580, 0x100), - 'Lumberjack Tree Tree': (0x4e0, 0x140), - 'Lumberjack Tree Cave': (0x560, 0x004), - 'Tower of Hera': (0x8D0, 0x080), - 'Spectacle Rock Cave Peak': (0x720, 0x0a0), - 'Spectacle Rock Cave (Bottom)': (0x710, 0x0a0), - 'Death Mountain Return Cave (East)': (0x600, 0x220), - 'Old Man Cave (East)': (0x620, 0x2c0), - 'Old Man House (Top)': (0x820, 0x220), - 'Old Man House (Bottom)': (0x720, 0x320), - 'Paradox Cave (Top)': (0xd80, 0x020), - 'Paradox Cave (Bottom)': (0xd80, 0x180), - 'Paradox Cave (Middle)': (0xd80, 0x380), - 'Fairy Ascension Cave (Top)': (0xc00, 0x240), - 'Fairy Ascension Cave (Bottom)': (0xcc8, 0x2a0), - 'Spiral Cave': (0xb80, 0x180), - 'Spiral Cave (Bottom)': (0xb80, 0x2c0), - 'Mimic Cave': (0xc80, 0x180), - 'Hookshot Fairy': (0xd00, 0x180), - 'Death Mountain Return Cave (West)': (0x500, 0x1c0), - 'Old Man Cave (West)': (0x580, 0x2c0), - 'Waterfall of Wishing': (0xe80, 0x280), - 'Fortune Teller (Light)': (0x2c0, 0x4c0), - 'Bonk Rock Cave': (0x5f0, 0x460), - 'Sanctuary': (0x720, 0x4a0), - 'Spectacle Rock Cave': (0x790, 0x1a0), - 'Sanctuary Grave': (0x820, 0x4c0), - 'Graveyard Cave': (0x8f0, 0x430), - 'Kings Grave': (0x920, 0x520), - 'North Fairy Cave Drop': (0xa40, 0x500), - 'North Fairy Cave': (0xa80, 0x440), - 'Potion Shop': (0xc80, 0x4c0), - 'Kakariko Well Drop': (0x030, 0x680), - 'Kakariko Well Cave': (0x060, 0x680), - 'Blinds Hideout': (0x190, 0x6c0), - 'Elder House (West)': (0x230, 0x6a0), - 'Elder House (East)': (0x2b0, 0x6a0), - 'Snitch Lady (West)': (0x080, 0x7a0), - 'Snitch Lady (East)': (0x310, 0x7a0), - 'Chicken House': (0x120, 0x880), - 'Sick Kids House': (0x220, 0x880), - 'Bush Covered House': (0x2e0, 0x880), - 'Light World Bomb Hut': (0x070, 0x980), - 'Kakariko Shop': (0x170, 0x980), - 'Tavern North': (0x270, 0x900), - 'Tavern (Front)': (0x270, 0x980), - 'Agahnims Tower': (0x820, 0x5D0), - 'Hyrule Castle Entrance (South)': (0x820, 0x730), - 'Hyrule Castle Entrance (West)': (0x740, 0x5D0), - 'Hyrule Castle Entrance (East)': (0x8f0, 0x5D0), +ow_prize_table = {'Lost Woods Gamble': (0x2A0, 0x080), + 'Lost Woods Hideout Drop': (0x338, 0x218), + 'Lost Woods Hideout Stump': (0x2A0, 0x2E0), + 'Lumberjack House': (0x538, 0x158), + 'Lumberjack Tree Tree': (0x4A0, 0x160), + 'Lumberjack Tree Cave': (0x550, 0x004), + 'Tower of Hera': (0x900, 0x0E0), + 'Spectacle Rock Cave Peak': (0x758, 0x1B7), + 'Spectacle Rock Cave (Bottom)': (0x6F0, 0x257), + 'Spectacle Rock Cave': (0x7C8, 0x257), + 'Death Mountain Return Cave (East)': (0x648, 0x278), + 'Old Man Cave (East)': (0x658, 0x387), + 'Old Man House (Top)': (0x8C8, 0x2D8), + 'Old Man House (Bottom)': (0x728, 0x3A7), + 'Paradox Cave (Top)': (0xDE0, 0x100), + 'Paradox Cave (Bottom)': (0xDC8, 0x358), + 'Paradox Cave (Middle)': (0xDDF, 0x3FF), + 'Fairy Ascension Cave (Top)': (0xCD8, 0x2B8), + 'Fairy Ascension Cave (Bottom)': (0xC78, 0x358), + 'Spiral Cave': (0xC78, 0x207), + 'Spiral Cave (Bottom)': (0xBC8, 0x2F7), + 'Mimic Cave': (0xD38, 0x207), + 'Hookshot Fairy': (0xD38, 0x358), + 'Death Mountain Return Cave (West)': (0x5B8, 0x247), + 'Old Man Cave (West)': (0x5B8, 0x348), + 'Waterfall of Wishing': (0xE80, 0x2C7), + 'Fortune Teller (Light)': (0x308, 0x5A8), + 'Bonk Rock Cave': (0x600, 0x517), + 'Sanctuary': (0x748, 0x4F4), + 'Sanctuary Grave': (0x860, 0x550), + 'Graveyard Cave': (0x8F8, 0x4A6), + 'Kings Grave': (0x978, 0x566), + 'North Fairy Cave Drop': (0xA40, 0x580), + 'North Fairy Cave': (0xAA8, 0x4A8), + 'Potion Shop': (0xCB8, 0x598), + 'Kakariko Well Drop': (0x030, 0x6C0), + 'Kakariko Well Cave': (0x0D8, 0x6F7), + 'Blinds Hideout': (0x1B8, 0x6F7), + 'Elder House (West)': (0x258, 0x6F7), + 'Elder House (East)': (0x2E8, 0x6F7), + 'Snitch Lady (West)': (0x0C8, 0x7E8), + 'Snitch Lady (East)': (0x338, 0x7E8), + 'Chicken House': (0x188, 0x8E8), + 'Sick Kids House': (0x278, 0x8E8), + 'Bush Covered House': (0x338, 0x8E8), + 'Light World Bomb Hut': (0x068, 0x9D7), + 'Kakariko Shop': (0x1C8, 0x9D7), + 'Tavern North': (0x2B8, 0x977), + 'Tavern (Front)': (0x2B8, 0x9F7), + 'Agahnims Tower': (0x7F0, 0x630), + 'Hyrule Castle Entrance (South)': (0x7F0, 0x750), + 'Hyrule Castle Entrance (West)': (0x758, 0x644), + 'Hyrule Castle Entrance (East)': (0x8E8, 0x644), 'Hyrule Castle Secret Entrance Drop': (0x9D0, 0x680), - 'Hyrule Castle Secret Entrance Stairs': (0x8D0, 0x700), - 'Inverted Pyramid Hole': (0x820, 0x680), - 'Inverted Pyramid Entrance': (0x6C0, 0x5D0), - 'Sahasrahlas Hut': (0xcf0, 0x6c0), - 'Eastern Palace': (0xf31, 0x620), - 'Blacksmiths Hut': (0x4a0, 0x880), - 'Bat Cave Drop': (0x520, 0x8f0), - 'Bat Cave Cave': (0x560, 0x940), - 'Two Brothers House (West)': (0x180, 0x0b60), - 'Two Brothers House (East)': (0x200, 0x0b60), - 'Library': (0x270, 0xaa0), - 'Kakariko Gamble Game': (0x2f0, 0xaf0), - 'Bonk Fairy (Light)': (0x740, 0xa80), - 'Links House': (0x8b1, 0xb2d), - 'Lake Hylia Fairy': (0xd40, 0x9f0), - 'Long Fairy Cave': (0xf60, 0xb00), - 'Desert Palace Entrance (North)': (0x0e1, 0xba0), - 'Desert Palace Entrance (West)': (0x031, 0xca0), - 'Desert Palace Entrance (East)': (0x191, 0xca0), - 'Desert Palace Entrance (South)': (0x108, 0xd70), - 'Checkerboard Cave': (0x260, 0xc00), - 'Aginahs Cave': (0x2e0, 0xd00), - 'Cave 45': (0x440, 0xca0), - 'Light Hype Fairy': (0x940, 0xc80), - 'Lake Hylia Fortune Teller': (0xa40, 0xc40), - 'Lake Hylia Shop': (0xbc0, 0xc00), - 'Capacity Upgrade': (0xca0, 0xda0), - 'Mini Moldorm Cave': (0xa40, 0xe80), - 'Ice Rod Cave': (0xe00, 0xc00), - 'Good Bee Cave': (0xec0, 0xc00), - '20 Rupee Cave': (0xe80, 0xca0), - 'Desert Fairy': (0x420, 0xe00), - '50 Rupee Cave': (0x4d0, 0xed0), - 'Dam': (0x759, 0xED0), + 'Hyrule Castle Secret Entrance Stairs': (0x8C8, 0x718), + 'Inverted Pyramid Hole': (0x7F0, 0x6B0), + 'Inverted Pyramid Entrance': (0x6E8, 0x644), + 'Sahasrahlas Hut': (0xCF0, 0x747), + 'Eastern Palace': (0xF40, 0x680), + 'Blacksmiths Hut': (0x4E8, 0x8C8), + 'Bat Cave Drop': (0x538, 0x9A8), + 'Bat Cave Cave': (0x510, 0x930), + 'Two Brothers House (West)': (0x1B8, 0xB88), + 'Two Brothers House (East)': (0x238, 0xB88), + 'Library': (0x2B8, 0xAA7), + 'Kakariko Gamble Game': (0x348, 0xB78), + 'Bonk Fairy (Light)': (0x788, 0xA87), + 'Links House': (0x8B8, 0xB58), + 'Lake Hylia Fairy': (0xD58, 0xA57), + 'Long Fairy Cave': (0xF68, 0xB58), + 'Desert Palace Entrance (North)': (0x148, 0xC28), + 'Desert Palace Entrance (West)': (0x088, 0xCF8), + 'Desert Palace Entrance (East)': (0x1E8, 0xCF8), + 'Desert Palace Entrance (South)': (0x138, 0xD18), + 'Checkerboard Cave': (0x2E8, 0xCF7), + 'Aginahs Cave': (0x388, 0xDE8), + 'Cave 45': (0x448, 0xD86), + 'Light Hype Fairy': (0x988, 0xCF8), + 'Lake Hylia Fortune Teller': (0xA68, 0xCC8), + 'Lake Hylia Shop': (0xBF8, 0xC66), + 'Capacity Upgrade': (0xCC8, 0xDE8), + 'Mini Moldorm Cave': (0xA88, 0xEF8), + 'Ice Rod Cave': (0xE68, 0xC37), + 'Good Bee Cave': (0xEF8, 0xC36), + '20 Rupee Cave': (0xEB8, 0xCC6), + 'Desert Fairy': (0x488, 0xE76), + '50 Rupee Cave': (0x4F8, 0xF47), + 'Dam': (0x778, 0xF68), - 'Skull Woods Final Section': (0x082, 0x0b0), - 'Skull Woods Second Section Door (West)': (0x0c0, 0x1c0), - 'Skull Woods Second Section Hole': (0x0f0, 0x0b0), - 'Skull Woods Second Section Door (East)': (0x200, 0x240), - 'Skull Woods First Section Door': (0x2e0, 0x280), + 'Skull Woods Final Section': (0x078, 0x0A8), + 'Skull Woods Second Section Door (West)': (0x0E0, 0x1C0), + 'Skull Woods Second Section Hole': (0x150, 0x120), + 'Skull Woods Second Section Door (East)': (0x208, 0x208), + 'Skull Woods First Section Door': (0x2C8, 0x2A8), 'Skull Woods First Section Hole (North)': (0x320, 0x1e0), - 'Skull Woods First Section Hole (West)': (0x200, 0x2b0), - 'Skull Woods First Section Hole (East)': (0x340, 0x2e0), - 'Dark Lumberjack Shop': (0x4e0, 0x0d0), - 'Ganons Tower': (0x8D0, 0x080), - 'Dark Death Mountain Fairy': (0x620, 0x2c0), - 'Spike Cave': (0x860, 0x180), - 'Hookshot Cave Back Entrance': (0xcf0, 0x004), - 'Hookshot Cave': (0xc80, 0x0c0), - 'Superbunny Cave (Top)': (0xd80, 0x020), - 'Superbunny Cave (Bottom)': (0xd00, 0x180), - 'Dark Death Mountain Ledge (West)': (0xb80, 0x180), - 'Dark Death Mountain Ledge (East)': (0xc80, 0x180), - 'Turtle Rock Isolated Ledge Entrance': (0xc00, 0x240), - 'Dark Death Mountain Shop': (0xd80, 0x180), - 'Turtle Rock': (0xf11, 0x103), - 'Bumper Cave (Top)': (0x500, 0x1c0), - 'Bumper Cave (Bottom)': (0x580, 0x2c0), - 'Fortune Teller (Dark)': (0x2c0, 0x4c0), - 'Dark Sanctuary Hint': (0x720, 0x4a0), - 'Dark Potion Shop': (0xc80, 0x4c0), - 'Chest Game': (0x080, 0x7a0), - 'Thieves Town': (0x1d0, 0x780), - 'C-Shaped House': (0x310, 0x7a0), - 'Brewery': (0x170, 0x980), - 'Dark World Shop': (0x2e0, 0x880), - 'Red Shield Shop': (0x500, 0x680), - 'Pyramid Hole': (0x820, 0x680), - 'Pyramid Entrance': (0x640, 0x7c0), - 'Pyramid Fairy': (0x740, 0x740), - 'Palace of Darkness': (0xf40, 0x620), - 'Palace of Darkness Hint': (0xd60, 0x7c0), - 'Hammer Peg Cave': (0x4c0, 0x940), - 'Archery Game': (0x2f0, 0xaf0), - 'Bonk Fairy (Dark)': (0x740, 0xa80), - 'Big Bomb Shop': (0x8b1, 0xb2d), - 'Dark Lake Hylia Fairy': (0xd40, 0x9f0), - 'East Dark World Hint': (0xf60, 0xb00), - 'Mire Shed': (0x060, 0xc90), - 'Misery Mire': (0x100, 0xca0), - 'Mire Fairy': (0x1c0, 0xc90), - 'Mire Hint': (0x2e0, 0xd00), - 'Hype Cave': (0x940, 0xc80), - 'Dark Lake Hylia Shop': (0xa40, 0xc40), - 'Ice Palace': (0xca0, 0xda0), - 'Dark Lake Hylia Ledge Fairy': (0xe00, 0xc00), - 'Dark Lake Hylia Ledge Hint': (0xec0, 0xc00), - 'Dark Lake Hylia Ledge Spike Cave': (0xe80, 0xca0), - 'Swamp Palace': (0x759, 0xED0)} + 'Skull Woods First Section Hole (West)': (0x240, 0x380), + 'Skull Woods First Section Hole (East)': (0x340, 0x380), + 'Dark Lumberjack Shop': (0x538, 0x177), + 'Ganons Tower': (0x900, 0x0E0), + 'Dark Death Mountain Fairy': (0x658, 0x387), + 'Spike Cave': (0x9F8, 0x268), + 'Hookshot Cave Back Entrance': (0xD38, 0x038), + 'Hookshot Cave': (0xD48, 0x107), + 'Superbunny Cave (Top)': (0xDE0, 0x100), + 'Superbunny Cave (Bottom)': (0xD38, 0x358), + 'Dark Death Mountain Ledge (West)': (0xC78, 0x207), + 'Dark Death Mountain Ledge (East)': (0xD38, 0x207), + 'Turtle Rock Isolated Ledge Entrance': (0xCD8, 0x2B8), + 'Dark Death Mountain Shop': (0xDC8, 0x358), + 'Turtle Rock': (0xF48, 0x108), + 'Bumper Cave (Top)': (0x5B8, 0x247), + 'Bumper Cave (Bottom)': (0x5B8, 0x348), + 'Fortune Teller (Dark)': (0x308, 0x5A8), + 'Dark Sanctuary Hint': (0x748, 0x4F4), + 'Dark Potion Shop': (0xCB8, 0x598), + 'Chest Game': (0x0C8, 0x7E8), + 'Thieves Town': (0x1F0, 0x7E8), + 'C-Shaped House': (0x338, 0x7E8), + 'Brewery': (0x1C8, 0x9D7), + 'Dark World Shop': (0x338, 0x8E8), + 'Red Shield Shop': (0x538, 0x778), + 'Pyramid Hole': (0x800, 0x680), + 'Pyramid Entrance': (0x718, 0x7A8), + 'Pyramid Fairy': (0x7B8, 0x7A8), + 'Palace of Darkness': (0xF40, 0x680), + 'Palace of Darkness Hint': (0xD70, 0x878), + 'Hammer Peg Cave': (0x528, 0x9B6), + 'Archery Game': (0x348, 0xB78), + 'Bonk Fairy (Dark)': (0x788, 0xA87), + 'Big Bomb Shop': (0x8B8, 0xB58), + 'Dark Lake Hylia Fairy': (0xD58, 0xA57), + 'East Dark World Hint': (0xF68, 0xB58), + 'Mire Shed': (0x0A8, 0xCC7), + 'Misery Mire': (0x148, 0xCC7), + 'Mire Fairy': (0x1E8, 0xCC7), + 'Mire Hint': (0x388, 0xDE8), + 'Hype Cave': (0x988, 0xCF8), + 'Dark Lake Hylia Shop': (0xA68, 0xCC8), + 'Ice Palace': (0xCA8, 0xE28), + 'Dark Lake Hylia Ledge Fairy': (0xE68, 0xC37), + 'Dark Lake Hylia Ledge Hint': (0xEF8, 0xC36), + 'Dark Lake Hylia Ledge Spike Cave': (0xEB8, 0xCC6), + 'Swamp Palace': (0x778, 0xF68)} default_connector_connections = [('Death Mountain Return Cave (West)', 'Death Mountain Return Cave Exit (West)'), ('Death Mountain Return Cave (East)', 'Death Mountain Return Cave Exit (East)'), From 7b25261f67e0151a0f35867dc0bf77a6ad91eb10 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Thu, 8 Jan 2026 16:17:45 -0600 Subject: [PATCH 5/7] Fix psuedoboots ability to open Kings Tomb --- Rom.py | 2 +- data/base2current.bps | Bin 138750 -> 138728 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Rom.py b/Rom.py index 06d31130..67a86860 100644 --- a/Rom.py +++ b/Rom.py @@ -43,7 +43,7 @@ from source.enemizer.Enemizer import write_enemy_shuffle_settings JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '5af87240955d04dfbbab1087de73d4c7' +RANDOMIZERBASEHASH = 'd2f1b8b15480a08856f6902c74adfc02' class JsonRom(object): diff --git a/data/base2current.bps b/data/base2current.bps index df5de37ef81ea16cf69b3d506e7c5fe8cc1a8850..9eddab29153b52450082c4cbdba2e678f2ca4c6f 100644 GIT binary patch delta 6126 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 N$@t@DxXuh7@_&tEUG4w? delta 6193 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 Date: Thu, 8 Jan 2026 16:19:43 -0600 Subject: [PATCH 6/7] Disallow money balancing to apply to locked and event items --- Fill.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Fill.py b/Fill.py index c47a2f3d..43915406 100644 --- a/Fill.py +++ b/Fill.py @@ -1054,6 +1054,8 @@ def balance_money_progression(world): return [loc for loc in locations if sphere_state.can_reach(loc) and sphere_state.not_flooding_a_key(sphere_state.world, loc)] def interesting_item(location, item, world, player): + if location.event or location.locked: + return True if item.advancement: return True if item.type is not None or item.name.startswith('Rupee'): From de343ce650f773bc8570a4a33f910167842a1188 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Thu, 8 Jan 2026 16:22:47 -0600 Subject: [PATCH 7/7] Version bump 0.6.1.9 --- CHANGELOG.md | 6 ++++++ OverworldShuffle.py | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index aa40a360..0eaa0685 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## 0.6.1.9 +- Fixed follower shuffle placement errors +- Fixed pseudoboots ability to open Kings Tomb +- Implemented better accurate coordinates on map check locations +- Fixed janky icons on zoomed-in map check screen + ## 0.6.1.8 - Fixed follower placement and logic - Fixed error with HC Courtyard Tree Pull diff --git a/OverworldShuffle.py b/OverworldShuffle.py index 8abb8aa5..714e2870 100644 --- a/OverworldShuffle.py +++ b/OverworldShuffle.py @@ -8,7 +8,7 @@ from OWEdges import OWTileRegions, OWEdgeGroups, OWEdgeGroupsTerrain, OWExitType from OverworldGlitchRules import create_owg_connections from Utils import bidict -version_number = '0.6.1.8' +version_number = '0.6.1.9' # branch indicator is intentionally different across branches version_branch = '-u'