From f28fc45a46aea803a0481ea6805975e19c6a9cb9 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Mon, 24 Oct 2022 16:55:44 -0500 Subject: [PATCH] Added Mixed OWG Logic --- Main.py | 4 +- OWEdges.py | 4 +- OverworldGlitchRules.py | 484 +++++++++++++++++++++++----------------- OverworldShuffle.py | 187 +++++++++------- Regions.py | 6 +- 5 files changed, 398 insertions(+), 287 deletions(-) diff --git a/Main.py b/Main.py index f91f29c7..e7d296ce 100644 --- a/Main.py +++ b/Main.py @@ -163,8 +163,6 @@ def main(args, seed=None, fish=None): for player in range(1, world.players + 1): create_regions(world, player) - if world.logic[player] in ('owglitches', 'nologic'): - create_owg_connections(world, player) create_dungeon_regions(world, player) create_owedges(world, player) create_shops(world, player) @@ -189,6 +187,8 @@ def main(args, seed=None, fish=None): link_overworld(world, player) create_shops(world, player) update_world_regions(world, player) + if world.logic[player] in ('owglitches', 'nologic'): + create_owg_connections(world, player) create_flute_exits(world, player) logger.info(world.fish.translate("cli","cli","shuffling.world")) diff --git a/OWEdges.py b/OWEdges.py index f6145831..9a6a52cb 100644 --- a/OWEdges.py +++ b/OWEdges.py @@ -1087,6 +1087,7 @@ OWTileRegions = bidict({ 'Hyrule Castle Courtyard Northeast': 0x1b, 'Hyrule Castle Ledge': 0x1b, 'Hyrule Castle East Entry': 0x1b, + 'Hyrule Castle Water': 0x1b, 'Wooden Bridge Area': 0x1d, 'Wooden Bridge Northeast': 0x1d, @@ -1227,6 +1228,7 @@ OWTileRegions = bidict({ 'Pyramid Crack': 0x5b, 'Pyramid Exit Ledge': 0x5b, 'Pyramid Pass': 0x5b, + 'Pyramid Water': 0x5b, 'Broken Bridge Area': 0x5d, 'Broken Bridge Northeast': 0x5d, @@ -1491,7 +1493,6 @@ OWExitTypes = { 'Cave 45 Cliff Ledge Drop', 'Desert C Whirlpool Cliff Ledge Drop', 'Desert Pass Cliff Ledge Drop', - 'Desert Pass Southeast Cliff Ledge Drop', 'Dam Cliff Ledge Drop', 'Bombos Tablet Drop', 'Cave 45 Ledge Drop', @@ -1540,6 +1541,7 @@ OWExitTypes = { 'Dark South Teleporter Cliff Ledge Drop', 'Misery Mire Teleporter Ledge Drop', 'Mire Cliff Ledge Drop', + 'Dark Checkerboard Cliff Ledge Drop', 'Archery Game Cliff Ledge Drop', 'Stumpy Approach Cliff Ledge Drop', 'Mire C Whirlpool Cliff Ledge Drop', diff --git a/OverworldGlitchRules.py b/OverworldGlitchRules.py index cfe15841..291295c6 100644 --- a/OverworldGlitchRules.py +++ b/OverworldGlitchRules.py @@ -3,6 +3,7 @@ Helper functions to deliver entrance/exit/region sets to OWG rules. """ from BaseClasses import Entrance +from OWEdges import OWTileRegions def get_sword_required_superbunny_mirror_regions(): @@ -25,6 +26,8 @@ def get_boots_required_superbunny_mirror_locations(): yield 'Sahasrahla\'s Hut - Middle' yield 'Sahasrahla\'s Hut - Right' + # TODO: Add pottery locations + def get_invalid_mirror_bunny_entrances(): """ @@ -98,7 +101,7 @@ def get_superbunny_accessible_locations(): yield location -def get_non_mandatory_exits(inverted): +def get_non_mandatory_exits(world, player): """ Entrances that can be reached with full equipment using overworld glitches and don't need to be an exit. The following are still be mandatory exits: @@ -116,257 +119,169 @@ def get_non_mandatory_exits(inverted): yield 'Death Mountain Return Cave (West)' yield 'Hookshot Cave Back Entrance' - if inverted: + if world.is_tile_swapped(0x30, player): yield 'Desert Palace Entrance (North)' yield 'Desert Palace Entrance (West)' + else: + yield 'Desert Palace Entrance (East)' + + if world.is_tile_swapped(0x1b, player): yield 'Agahnims Tower' yield 'Hyrule Castle Entrance (West)' yield 'Hyrule Castle Entrance (East)' - else: + + if not world.is_tile_swapped(0x05, player): yield 'Dark Death Mountain Ledge (West)' yield 'Dark Death Mountain Ledge (East)' - yield 'Mimic Cave' - yield 'Desert Palace Entrance (East)' + #yield 'Mimic Cave' #TODO: This was here, I don't think this is true -def get_boots_clip_exits_lw(inverted = False): +def get_boots_clip_exits_lw(world, player): """ Special Light World region exits that require boots clips. """ - yield ('Lumberjack DMA Clip', 'Lumberjack Area', 'West Death Mountain (Bottom)') - yield ('Lumberjack DMD Clip', 'West Death Mountain (Top)', 'Lumberjack Area') - yield ('DM Glitched Bridge Clip', 'West Death Mountain (Bottom)', 'East Death Mountain (Top East)') - yield ('WDM to EDM Top Clip', 'West Death Mountain (Top)', 'East Death Mountain (Top West)') - yield ('Hera Ascent Clip', 'West Death Mountain (Bottom)', 'West Death Mountain (Top)') #cannot guarantee camera correction, but a bomb clip exists - yield ('Sanctuary DMD Clip', 'West Death Mountain (Bottom)', 'Sanctuary Area') - yield ('Graveyard Ledge DMD Clip', 'West Death Mountain (Bottom)', 'Graveyard Ledge') - yield ('Kings Grave DMD Clip', 'West Death Mountain (Bottom)', 'Kings Grave Area') - yield ('EDM to WDM Top Clip', 'East Death Mountain (Top West)', 'West Death Mountain (Top)') - yield ('EDM East Dropdown Clip', 'East Death Mountain (Top East)', 'East Death Mountain (Bottom Left)') - yield ('EDM To TR Pegs Clip', 'East Death Mountain (Top East)', 'Death Mountain TR Pegs') - yield ('EDM DMD FAWT Clip', 'East Death Mountain (Bottom)', 'Potion Shop Area') - yield ('WDM To EDM Bottom Clip', 'East Death Mountain (Bottom Left)', 'East Death Mountain (Bottom)') - yield ('WDM DMD To River Bend Clip', 'East Death Mountain (Bottom Left)', 'River Bend Area') - yield ('EDM DMD To River Bend Clip', 'East Death Mountain (Bottom)', 'River Bend Area') - yield ('TR Pegs Ledge Clip', 'Death Mountain TR Pegs', 'Death Mountain TR Pegs Ledge') - yield ('TR Pegs Ledge Descent Clip', 'Death Mountain TR Pegs Ledge', 'Death Mountain TR Pegs') - yield ('TR Pegs To EDM Clip', 'Death Mountain TR Pegs', 'East Death Mountain (Top East)') - yield ('Zora DMD Clip', 'Death Mountain TR Pegs', 'Zora Waterfall Area') - yield ('Mountain Entry To Ledge Clip', 'Mountain Entry Area', 'Mountain Entry Ledge') - yield ('Mountain Ledge Drop Clip', 'Mountain Entry Ledge', 'Mountain Entry Entrance') - yield ('Mountain Entry To Pond Clip', 'Mountain Entry Area', 'Kakariko Pond Area') - yield ('Zora Waterfall Ledge Clip', 'Zora Waterfall Area', 'Zora Approach Area') - - #yield ('Pond DMA Clip', 'Kakariko Pond Area', 'West Death Mountain (Bottom)') #cannot guarantee camera correction - yield ('Pond To Mountain Entry Clip', 'Kakariko Pond Area', 'Mountain Entry Area') - yield ('Pond To Bonk Rocks Clip', 'Kakariko Pond Area', 'Bonk Rock Ledge') - yield ('River Bend To Potion Shop Clip', 'River Bend East Bank', 'Potion Shop Area') - yield ('River Bend To Wooden Bridge Clip', 'River Bend East Bank', 'Wooden Bridge Area') - yield ('Potion Shop To EP Clip', 'Potion Shop Area', 'Eastern Palace Area') - yield ('Potion Shop To River Bend Clip', 'Potion Shop Area', 'River Bend East Bank') - yield ('Potion Shop To Zora Approach Clip', 'Potion Shop Northeast', 'Zora Approach Area') - yield ('Zora Approach To Potion Shop Clip', 'Zora Approach Area', 'Potion Shop Area') - - yield ('Kakariko Bomb Hut Clip', 'Kakariko Area', 'Maze Race Area') - yield ('Forgotten Forest To Blacksmith Clip', 'Forgotten Forest Area', 'Blacksmith Area') #fake flipper - yield ('Hyrule Castle To Blacksmith Clip', 'Hyrule Castle Area', 'Blacksmith Area') #fake flipper - yield ('Wooden Bridge To Dunes Clip', 'Wooden Bridge Area', 'Sand Dunes Area') - yield ('Eastern Palace To Zora Approach Clip', 'Eastern Palace Area', 'Zora Approach Area') - yield ('Eastern Palace To Nook Clip', 'Eastern Palace Area', 'Eastern Nook Area') - yield ('Eastern Palace To Cliff Clip', 'Eastern Palace Area', 'Eastern Cliff') - #yield ('Bat Cave River Clip Spot', 'Blacksmith Area', 'Bat Cave Ledge') #cannot guarantee camera correction - yield ('Sand Dunes To Cliff Clip', 'Sand Dunes Area', 'Eastern Cliff') - - yield ('Maze Race Item Get Ledge Clip', 'Maze Race Area', 'Maze Race Prize') - yield ('Maze Race To Desert Ledge Clip', 'Maze Race Area', 'Desert Ledge') - yield ('Maze Race To Desert Boss Clip', 'Maze Race Area', 'Desert Palace Entrance (North) Spot') - yield ('Suburb To Cliff Clip', 'Kakariko Suburb Area', 'Desert Northeast Cliffs') - yield ('Central Bonk Rocks To Cliff Clip', 'Central Bonk Rocks Area', 'Central Cliffs') - yield ('Links House To Cliff Clip', 'Links House Area', 'Central Cliffs') - yield ('Stone Bridge To Cliff Clip', 'Stone Bridge Area', 'Central Cliffs') - yield ('Tree Line Water Clip', 'Tree Line Area', 'Tree Line Water') #requires flippers - yield ('Eastern Nook To Eastern Clip', 'Eastern Nook Area', 'Eastern Palace Area') - yield ('Eastern Nook To Ice Cave FAWT Clip', 'Eastern Nook Area', 'Ice Cave Area') - - yield ('Desert To Maze Race Clip', 'Desert Ledge', 'Maze Race Area') - yield ('Desert Ledge To Cliff Clip', 'Desert Ledge', 'Desert Northeast Cliffs') #requires gloves - yield ('Checkerboard To Cliff Clip', 'Desert Checkerboard Ledge', 'Desert Northeast Cliffs') - yield ('Desert To Cliff Clip', 'Desert Area', 'Desert Northeast Cliffs') - yield ('Desert To Teleporter Clip', 'Desert Area', 'Desert Palace Teleporter Ledge') - yield ('Desert To Bombos Tablet Clip', 'Desert Area', 'Bombos Tablet Ledge') - - yield ('Flute Boy To Cliff Clip', 'Flute Boy Approach Area', 'Desert Northeast Cliffs') - yield ('Cave 45 To Cliff Clip', 'Cave 45 Ledge', 'Desert Northeast Cliffs') - yield ('C Whirlpool To Cliff Clip', 'C Whirlpool Area', 'Central Cliffs') - yield ('C Whirlpool Outer To Cliff Clip', 'C Whirlpool Outer Area', 'Central Cliffs') - yield ('Statues To Cliff Clip', 'Statues Area', 'Central Cliffs') - yield ('Lake Hylia To Statues Clip', 'Lake Hylia Area', 'Statues Area') - yield ('Lake Hylia To South Pass Clip', 'Lake Hylia Area', 'South Pass Area') - yield ('Lake Hylia To Shore Clip', 'Lake Hylia Area', 'Lake Hylia South Shore') - yield ('Desert Pass To Cliff Clip', 'Desert Pass Area', 'Desert Northeast Cliffs') - yield ('Desert Pass Southeast To Cliff Clip', 'Desert Pass Southeast', 'Desert Northeast Cliffs') - #yield ('Desert Pass To Zora Clip', 'Desert Pass Area', 'Zoras Domain') #revisit when Zora is shuffled - yield ('Dam To Cliff Clip', 'Dam Area', 'Desert Northeast Cliffs') - yield ('South Pass To Lake Hylia Clip', 'South Pass Area', 'Lake Hylia Area') - yield ('South Pass To Shore Clip', 'South Pass Area', 'Lake Hylia South Shore') - #yield ('Octoballoon To Shore Clip', 'Octoballoon Area', 'Lake Hylia South Shore') #map wrap hardlock risk - - if not inverted: - yield ('Spectacle Rock Ledge Clip', 'West Death Mountain (Top)', 'Spectacle Rock Ledge') - yield ('Floating Island Clip', 'East Death Mountain (Top East)', 'Death Mountain Floating Island') - yield ('Floating Island Return Clip', 'Death Mountain Floating Island', 'East Death Mountain (Top East)') + for name, parent_region, target_region in boots_clips_local: + if not world.is_tile_swapped(OWTileRegions[parent_region], player): + yield(name, parent_region, target_region) -def get_boots_clip_exits_dw(inverted): + for name, parent_region, target_region in boots_clips: + parent_swapped, target_swapped = get_swapped_status(world, player, parent_region, target_region) + if parent_region[0] and not parent_swapped: + if target_region[0] and not target_swapped: + yield(name[0], parent_region[0], target_region[0]) + elif target_region[1]: + yield(name[0], parent_region[0], target_region[1]) + elif parent_region[1]: + if target_region[0] and not target_swapped: + yield(name[1], parent_region[1], target_region[0]) + elif target_region[1]: + yield(name[1], parent_region[1], target_region[1]) + +def get_boots_clip_exits_dw(world, player): """ Special Dark World region exits that require boots clips. """ - yield ('Dark Lumberjack DMA Clip', 'Dark Lumberjack Area', 'West Dark Death Mountain (Bottom)') - yield ('DDM Glitched Bridge Clip', 'West Dark Death Mountain (Bottom)', 'East Dark Death Mountain (Top)') - yield ('Chapel DMD Clip', 'West Dark Death Mountain (Bottom)', 'Dark Chapel Area') - yield ('Dark Graveyard DMD Clip', 'West Dark Death Mountain (Bottom)', 'Dark Graveyard Area') - yield ('EDDM West Dropdown Clip', 'East Dark Death Mountain (Top)', 'East Dark Death Mountain (Bottom Left)') - yield ('EDDM To WDDM Clip', 'East Dark Death Mountain (Top)', 'West Dark Death Mountain (Top)') - yield ('TR Bridge Clip', 'East Dark Death Mountain (Top)', 'Dark Death Mountain Ledge') - yield ('Dark Witch DMD FAWT Clip', 'East Dark Death Mountain (Bottom)', 'Dark Witch Area') - yield ('Qirn Jump DMD Clip', 'East Dark Death Mountain (Bottom Left)', 'Qirn Jump Area') - yield ('WDDM To EDDM Clip', 'East Dark Death Mountain (Bottom Left)', 'East Dark Death Mountain (Bottom)') - #yield ('DW Floating Island Clip', 'East Dark Death Mountain (Bottom)', 'Dark Death Mountain Floating Island') #cannot guarantee camera correction - yield ('TR To EDDM Clip', 'Turtle Rock Area', 'East Dark Death Mountain (Top)') - yield ('Catfish DMD Clip', 'Turtle Rock Area', 'Catfish Area') - yield ('Bumper Cave Ledge Clip', 'Bumper Cave Area', 'Bumper Cave Ledge') - yield ('Bumper Cave Ledge Drop Clip', 'Bumper Cave Ledge', 'Bumper Cave Entrance') - yield ('Bumper Cave To Pond Clip', 'Bumper Cave Area', 'Outcast Pond Area') - yield ('Catfish Ledge Clip', 'Catfish Area', 'Catfish Approach Area') - - #yield ('Dark Pond DMA Clip', 'Outcast Pond Area', 'West Dark Death Mountain (Bottom)') #cannot guarantee camera correction - yield ('Pond To Bumper Cave Clip', 'Outcast Pond Area', 'Bumper Cave Area') - yield ('Pond To Chapel Clip', 'Outcast Pond Area', 'Dark Chapel Area') - yield ('Qirn Jump To Dark Witch Clip', 'Qirn Jump East Bank', 'Dark Witch Area') - yield ('Qirn Jump To Broken Bridge North Clip', 'Qirn Jump East Bank', 'Broken Bridge Northeast') - yield ('Qirn Jump To Broken Bridge Clip', 'Qirn Jump East Bank', 'Broken Bridge Area') - yield ('Dark Witch To PoD Clip', 'Dark Witch Area', 'Palace of Darkness Area') - yield ('Dark Witch To Qirn Jump Clip', 'Dark Witch Area', 'Qirn Jump East Bank') - yield ('Dark Witch To Catfish Approach Clip', 'Dark Witch Northeast', 'Catfish Approach Area') - yield ('Catfish Approach To Dark Witch Clip', 'Catfish Approach Area', 'Dark Witch Area') - yield ('Catfish Approach To PoD Clip', 'Catfish Approach Area', 'Palace of Darkness Area') - - yield ('VoO To Dig Game Clip', 'Village of Outcasts Area', 'Dig Game Area') - yield ('VoO To Dig Game Hook Clip', 'Village of Outcasts Area', 'Dig Game Ledge') #requires hookshot - yield ('Broken Bridge To Dunes Clip', 'Broken Bridge West', 'Dark Dunes Area') - yield ('Broken Bridge To Hammer Pegs Clip', 'Broken Bridge West', 'Hammer Pegs Area') #fake flipper - yield ('Broken Bridge To Bomb Shop Clip', 'Broken Bridge West', 'Big Bomb Shop Area') #fake flipper - yield ('PoD To Cliff Clip', 'Palace of Darkness Area', 'Darkness Cliff') - yield ('Dark Dunes To Cliff Clip', 'Dark Dunes Area', 'Darkness Cliff') - yield ('Dark Dunes To Hammer Pegs Clip', 'Dark Dunes Area', 'Hammer Pegs Area') - yield ('Dark Dunes To Bomb Shop Clip', 'Dark Dunes Area', 'Big Bomb Shop Area') - - yield ('Dig Game To Mire Clip', 'Dig Game Area', 'Misery Mire Area') - yield ('Archery Game To Cliff Clip', 'Archery Game Area', 'Mire Northeast Cliffs') - yield ('Dark Bonk Rocks To Cliff Clip', 'Dark Bonk Rocks Area', 'Dark Central Cliffs') - yield ('Bomb Shop To Cliff Clip', 'Big Bomb Shop Area', 'Dark Central Cliffs') - yield ('Bomb Shop To Hammer Bridge FAWT Clip', 'Big Bomb Shop Area', 'Hammer Bridge North Area') - yield ('Hammer Bridge To Bomb Shop Clip', 'Hammer Bridge North Area', 'Big Bomb Shop Area') - yield ('Hammer Bridge To Hammer Pegs Clip', 'Hammer Bridge North Area', 'Hammer Pegs Area') - yield ('Hammer Bridge To Cliff Clip', 'Hammer Bridge South Area', 'Dark Central Cliffs') - yield ('Dark Tree Line Water Clip', 'Dark Tree Line Area', 'Dark Tree Line Water') #requires flippers - yield ('PoD Nook To Shopping Mall FAWT Clip', 'Palace of Darkness Nook Area', 'Shopping Mall Area') - - yield ('Mire To Cliff Clip', 'Misery Mire Area', 'Mire Northeast Cliffs') - yield ('Mire To Teleporter Clip', 'Misery Mire Area', 'Misery Mire Teleporter Ledge') - yield ('Stumpy To Cliff Clip', 'Stumpy Approach Area', 'Mire Northeast Cliffs') - yield ('Dark C Whirlpool To Cliff Clip', 'Dark C Whirlpool Area', 'Dark Central Cliffs') - yield ('Dark C Whirlpool Outer To Cliff Clip', 'Dark C Whirlpool Outer Area', 'Dark Central Cliffs') - yield ('Hype To Cliff Clip', 'Hype Cave Area', 'Dark Central Cliffs') - yield ('Ice Lake To Hype Clip', 'Ice Lake Area', 'Hype Cave Area') - yield ('Ice Lake To South Pass Clip', 'Ice Lake Area', 'Dark South Pass Area') - yield ('Ice Lake To Shore Clip', 'Ice Lake Area', 'Ice Lake Ledge (West)') - - yield ('Swamp Nook To Cliff Clip', 'Swamp Nook Area', 'Mire Northeast Cliffs') - yield ('Swamp To Cliff Clip', 'Swamp Area', 'Mire Northeast Cliffs') - yield ('South Pass To Ice Lake Clip', 'Dark South Pass Area', 'Ice Lake Area') - yield ('South Pass To Dark Shore Clip', 'Dark South Pass Area', 'Ice Lake Ledge (West)') - #yield ('Bomber Corner To Shore Clip', 'Bomber Corner Area', 'Ice Lake Ledge (East)') #map wrap hardlock risk - - if not inverted: - yield ('Ganons Tower Screen Wrap Clip', 'West Dark Death Mountain (Bottom)', 'GT Approach') # This only gets you to the GT entrance - yield ('WDDM Bomb Clip', 'West Dark Death Mountain (Bottom)', 'West Dark Death Mountain (Top)') #cannot guarantee camera correction, but a bomb clip exists - yield ('Turtle Rock Ledge Clip', 'Turtle Rock Area', 'Turtle Rock Ledge') - else: - yield ('Misery Mire Teleporter Clip', 'Misery Mire Area', 'Misery Mire Teleporter Ledge') + for name, parent_region, target_region in boots_clips_local: + if world.is_tile_swapped(OWTileRegions[parent_region], player): + yield(name, parent_region, target_region) + + for name, parent_region, target_region in boots_clips: + parent_swapped, target_swapped = get_swapped_status(world, player, parent_region, target_region) + if parent_region[0] and parent_swapped: + if target_region[0] and target_swapped: + yield(name[0], parent_region[0], target_region[0]) + elif target_region[1]: + yield(name[0], parent_region[0], target_region[1]) + elif parent_region[1]: + if target_region[0] and target_swapped: + yield(name[1], parent_region[1], target_region[0]) + elif target_region[1]: + yield(name[1], parent_region[1], target_region[1]) -def get_glitched_speed_drops_lw(inverted = False): +def get_glitched_speed_drops_lw(world, player): """ Light World drop-down ledges that require glitched speed. """ - -def get_glitched_speed_drops_dw(inverted = False): +def get_glitched_speed_drops_dw(world, player): """ Dark World drop-down ledges that require glitched speed. """ -def get_mirror_clip_spots_dw(): +def get_mirror_clip_spots(world, player): """ Out of bounds transitions using the mirror """ - yield ('Qirn Jump Bunny DMD Clip', 'East Dark Death Mountain (Bottom Left)', 'Qirn Jump Area') - yield ('EDDM Mirror Clip', 'East Dark Death Mountain (Bottom Left)', 'East Dark Death Mountain (Bottom)') - yield ('Desert East Mirror Clip', 'Misery Mire Area', 'Desert Palace Mouth') + + for name, parent_region, target_region in mirror_clips_local: + if not world.is_tile_swapped(OWTileRegions[parent_region], player): + yield(name, parent_region, target_region) + + for name, parent_region, target_region in mirror_clips: + parent_swapped, target_swapped = get_swapped_status(world, player, parent_region, target_region) + if parent_region[0] and not parent_swapped: + if target_region[0] and not target_region: + yield(name[0], parent_region[0], target_region[0]) + elif target_region[1]: + yield(name[0], parent_region[0], target_region[1]) + elif parent_region[1]: + if target_region[0] and not target_region: + yield(name[1], parent_region[1], target_region[0]) + elif target_region[1]: + yield(name[1], parent_region[1], target_region[1]) -def get_mirror_offset_spots_dw(): +def get_mirror_offset_spots(world, player): """ Mirror shenanigans placing a mirror portal with a broken camera """ - yield ('Dark Death Mountain Offset Mirror', 'West Dark Death Mountain (Bottom)', 'Pyramid Area') + + # TODO: These really should check to see if there is a mirrorless path to the mirror portal + # but being that OWG is very very open, it's very unlikely there isn't a path, but possible + + for name, parent_region, target_region, path_to in mirror_offsets: + parent_swapped, target_swapped = get_swapped_status(world, player, parent_region, target_region) + if parent_region[0] and not parent_swapped: + if target_region[0] and not target_region: + yield(name[0], parent_region[0], target_region[0]) + elif target_region[1]: + yield(name[0], parent_region[0], target_region[1]) + elif parent_region[1]: + if target_region[0] and not target_region: + yield(name[1], parent_region[1], target_region[0]) + elif target_region[1]: + yield(name[1], parent_region[1], target_region[1]) -def get_mirror_offset_spots_lw(player): - """ - Mirror shenanigans placing a mirror portal with a broken camera - """ - #yield ('Death Mountain Offset Mirror', 'West Death Mountain (Bottom)', 'Hyrule Castle Courtyard') #revisit when we can guarantee walk access to Pyramid Area - #yield ('Death Mountain Offset Mirror (Houlihan Exit)', 'West Death Mountain (Bottom)', 'Hyrule Castle Ledge', lambda state: state.has_Mirror(player) and state.can_boots_clip_dw(player) and state.has_Pearl(player)) +def get_swapped_status(world, player, parents, targets): + if parents[0]: + parent_swapped = world.is_tile_swapped(OWTileRegions[parents[0]], player) + else: + parent_swapped = world.is_tile_swapped(OWTileRegions[parents[1]], player) + + if targets[0] and targets[0] in (glitch_regions[0] + glitch_regions[1]): + target_swapped = targets[0] in glitch_regions[1] + else: + if targets[0]: + target_swapped = world.is_tile_swapped(OWTileRegions[targets[0]], player) + else: + target_swapped = world.is_tile_swapped(OWTileRegions[targets[1]], player) + return parent_swapped, target_swapped + def create_owg_connections(world, player): """ Add OWG transitions to player's world without logic """ - create_no_logic_connections(player, world, get_boots_clip_exits_lw(world.mode[player] == 'inverted')) - create_no_logic_connections(player, world, get_boots_clip_exits_dw(world.mode[player] == 'inverted')) + create_no_logic_connections(player, world, get_boots_clip_exits_lw(world, player)) + create_no_logic_connections(player, world, get_boots_clip_exits_dw(world, player)) # Glitched speed drops. - #create_no_logic_connections(player, world, get_glitched_speed_drops_lw(world.mode[player] == 'inverted')) - #create_no_logic_connections(player, world, get_glitched_speed_drops_dw(world.mode[player] == 'inverted')) + #create_no_logic_connections(player, world, get_glitched_speed_drops_lw(world, player)) + #create_no_logic_connections(player, world, get_glitched_speed_drops_dw(world, player)) # Mirror clip spots. - if world.mode[player] != 'inverted': - create_no_logic_connections(player, world, get_mirror_clip_spots_dw()) - create_no_logic_connections(player, world, get_mirror_offset_spots_dw()) - #else: - #create_no_logic_connections(player, world, get_mirror_offset_spots_lw(player)) + create_no_logic_connections(player, world, get_mirror_clip_spots(world, player)) + create_no_logic_connections(player, world, get_mirror_offset_spots(world, player)) def overworld_glitches_rules(world, player): # Boots-accessible locations. - set_owg_rules(player, world, get_boots_clip_exits_lw(world.mode[player] == 'inverted'), lambda state: state.can_boots_clip_lw(player)) - set_owg_rules(player, world, get_boots_clip_exits_dw(world.mode[player] == 'inverted'), lambda state: state.can_boots_clip_dw(player)) + set_owg_rules(player, world, get_boots_clip_exits_lw(world, player), lambda state: state.can_boots_clip_lw(player)) + set_owg_rules(player, world, get_boots_clip_exits_dw(world, player), lambda state: state.can_boots_clip_dw(player)) # Glitched speed drops. - #set_owg_rules(player, world, get_glitched_speed_drops_lw(world.mode[player] == 'inverted'), lambda state: state.can_get_glitched_speed_lw(player)) - #set_owg_rules(player, world, get_glitched_speed_drops_dw(world.mode[player] == 'inverted'), lambda state: state.can_get_glitched_speed_dw(player)) + #set_owg_rules(player, world, get_glitched_speed_drops_lw(world, player), lambda state: state.can_get_glitched_speed_lw(player)) + #set_owg_rules(player, world, get_glitched_speed_drops_dw(world, player), lambda state: state.can_get_glitched_speed_dw(player)) # Mirror clip spots. - if world.mode[player] != 'inverted': - set_owg_rules(player, world, get_mirror_clip_spots_dw(), lambda state: state.has_Mirror(player)) - set_owg_rules(player, world, get_mirror_offset_spots_dw(), lambda state: state.has_Mirror(player) and state.can_boots_clip_lw(player)) - #else: - #set_owg_rules(player, world, get_mirror_offset_spots_lw(player), lambda state: state.has_Mirror(player) and state.can_boots_clip_dw(player)) + set_owg_rules(player, world, get_mirror_clip_spots(world, player), lambda state: state.has_Mirror(player)) + set_owg_rules(player, world, get_mirror_offset_spots(world, player), lambda state: state.has_Mirror(player) and state.can_boots_clip_lw(player)) # Regions that require the boots and some other stuff. # TODO: Revisit below when we can guarantee water walk @@ -378,18 +293,9 @@ def overworld_glitches_rules(world, player): # Zora's Ledge via waterwalk setup. #add_alternate_rule(world.get_location('Zora\'s Ledge', player), lambda state: state.has_Boots(player)) #revisit when we can guarantee water walk - # Regions that can bypass item requirements - add_alternate_rule(world.get_entrance('DM Hammer Bridge (West)', player), lambda state: state.can_boots_clip_lw(player)) - add_alternate_rule(world.get_entrance('DM Broken Bridge (West)', player), lambda state: state.can_boots_clip_lw(player)) - add_alternate_rule(world.get_entrance('Potion Shop Rock (North)', player), lambda state: state.can_boots_clip_lw(player)) - add_alternate_rule(world.get_entrance('Potion Shop Rock (South)', player), lambda state: state.can_boots_clip_lw(player)) - add_alternate_rule(world.get_entrance('Dark Witch Rock (North)', player), lambda state: state.can_boots_clip_dw(player)) - add_alternate_rule(world.get_entrance('Dark Witch Rock (South)', player), lambda state: state.can_boots_clip_dw(player)) - # Adding additional item requirements to OWG Clips - add_additional_rule(world.get_entrance('Tree Line Water Clip', player), lambda state: state.has('Flippers', player)) - add_additional_rule(world.get_entrance('Desert Ledge To Cliff Clip', player), lambda state: state.can_lift_rocks(player)) add_additional_rule(world.get_entrance('VoO To Dig Game Hook Clip', player), lambda state: state.has('Hookshot', player)) + add_additional_rule(world.get_entrance('Tree Line Water Clip', player), lambda state: state.has('Flippers', player)) add_additional_rule(world.get_entrance('Dark Tree Line Water Clip', player), lambda state: state.has('Flippers', player)) @@ -417,3 +323,171 @@ def set_owg_rules(player, world, connections, default_rule): connection = world.get_entrance(entrance, player) rule = rule_override[0] if len(rule_override) > 0 else default_rule connection.access_rule = rule + + +glitch_regions = (['Central Cliffs', 'Eastern Cliff', 'Desert Northeast Cliffs'], + ['Dark Central Cliffs', 'Darkness Cliff', 'Mire Northeast Cliffs']) + +# same screen clips, no OWR tile swap implications +boots_clips_local = [ # (name, from_region, to_region) + ('Hera Ascent Clip', 'West Death Mountain (Bottom)', 'West Death Mountain (Top)'), #cannot guarantee camera correction, but a bomb clip exists + ('WDDM Bomb Clip', 'West Dark Death Mountain (Bottom)', 'West Dark Death Mountain (Top)'), #cannot guarantee camera correction, but a bomb clip exists + ('Ganons Tower Screen Wrap Clip', 'West Dark Death Mountain (Bottom)', 'GT Approach'), # This only gets you to the GT entrance + ('Spectacle Rock Ledge Clip', 'West Death Mountain (Top)', 'Spectacle Rock Ledge'), + + ('Floating Island Clip', 'East Death Mountain (Top East)', 'Death Mountain Floating Island'), + ('Floating Island Return Clip', 'Death Mountain Floating Island', 'East Death Mountain (Top East)'), + #('DW Floating Island Clip', 'East Dark Death Mountain (Bottom)', 'Dark Death Mountain Floating Island'), #cannot guarantee camera correction + ('EDM East Dropdown Clip', 'East Death Mountain (Top East)', 'East Death Mountain (Bottom Left)'), + ('EDM Hammer Bypass Teleport', 'East Death Mountain (Top West)', 'East Death Mountain (Top East)'), + ('EDDM West Dropdown Clip', 'East Dark Death Mountain (Top)', 'East Dark Death Mountain (Bottom Left)'), + ('WDM To EDM Bottom Clip', 'East Death Mountain (Bottom Left)', 'East Death Mountain (Bottom)'), + ('WDDM To EDDM Bottom Clip', 'East Dark Death Mountain (Bottom Left)', 'East Dark Death Mountain (Bottom)'), + ('TR Bridge Clip', 'East Dark Death Mountain (Top)', 'Dark Death Mountain Ledge'), + + ('TR Pegs Ledge Clip', 'Death Mountain TR Pegs', 'Death Mountain TR Pegs Ledge'), + ('TR Pegs Ledge Descent Clip', 'Death Mountain TR Pegs Ledge', 'Death Mountain TR Pegs'), # inverted only, but doesn't hurt to exist always + ('Turtle Rock Ledge Clip', 'Turtle Rock Area', 'Turtle Rock Ledge'), + + ('Mountain Entry To Ledge Clip', 'Mountain Entry Area', 'Mountain Entry Ledge'), + ('Bumper Cave Ledge Clip', 'Bumper Cave Area', 'Bumper Cave Ledge'), + ('Mountain Ledge Drop Clip', 'Mountain Entry Ledge', 'Mountain Entry Entrance'), + ('Bumper Cave Ledge Drop Clip', 'Bumper Cave Ledge', 'Bumper Cave Entrance'), + + ('Potion Shop Northbound Rock Bypass Clip', 'Potion Shop Area', 'Potion Shop Northeast'), + ('Potion Shop Southbound Rock Bypass Clip', 'Potion Shop Northeast', 'Potion Shop Area'), + ('Dark Witch Northbound Rock Bypass Clip', 'Dark Witch Area', 'Dark Witch Northeast'), + ('Dark Witch Southbound Rock Bypass Clip', 'Dark Witch Northeast', 'Dark Witch Area'), + + ('Hyrule Castle To Water Clip', 'Hyrule Castle Area', 'Hyrule Castle Water'), #fake flipper + + #('Bat Cave River Clip Spot', 'Blacksmith Area', 'Bat Cave Ledge'), #cannot guarantee camera correction + + ('Maze Race Item Get Ledge Clip', 'Maze Race Area', 'Maze Race Prize'), + + ('Tree Line Water Clip', 'Tree Line Area', 'Tree Line Water'), #requires flippers + ('Dark Tree Line Water Clip', 'Dark Tree Line Area', 'Dark Tree Line Water'), #requires flippers + + ('Desert To Teleporter Clip', 'Desert Area', 'Desert Palace Teleporter Ledge'), + ('Mire To Teleporter Clip', 'Misery Mire Area', 'Misery Mire Teleporter Ledge'), + ('Desert To Bombos Tablet Clip', 'Desert Area', 'Bombos Tablet Ledge'), + + ('Lake Hylia To Shore Clip', 'Lake Hylia Area', 'Lake Hylia South Shore'), + ('Ice Lake To Shore Clip', 'Ice Lake Area', 'Ice Lake Ledge (West)') + + #('Desert Pass To Zora Clip', 'Desert Pass Area', 'Zoras Domain', ) #revisit when Zora is shuffled +] + +# Common structure for cross-screen connections: +# (name, from_region, to_region) <- each three consists of [LW, DW] +# This is so OWR Tile Swap can properly connect both connections, and simultaneously be aware of which one requires pearl +# Note: Some clips have no way to reach the OOB area, and others have no way to get from the OOB area +# to a proper destination, these are marked with 'None'; these connections will not be made +boots_clips = [ + (['Lumberjack DMA Clip', 'Dark Lumberjack DMA Clip'], ['Lumberjack Area', 'Dark Lumberjack Area'], ['West Death Mountain (Bottom)', 'West Dark Death Mountain (Bottom)']), + + (['Lumberjack DMD Clip', None], ['West Death Mountain (Top)', None], ['Lumberjack Area', 'Dark Lumberjack Area']), + (['DM Glitched Bridge Clip', 'DDM Glitched Bridge Clip'], ['West Death Mountain (Bottom)', 'West Dark Death Mountain (Bottom)'], ['East Death Mountain (Top East)', 'East Dark Death Mountain (Top)']), + (['WDM to EDM Top Clip', 'WDDM to EDDM Top Clip'], ['West Death Mountain (Top)', 'West Dark Death Mountain (Top)'], ['East Death Mountain (Top West)', None]), + (['Sanctuary DMD Clip', 'Chapel DMD Clip'], ['West Death Mountain (Bottom)', 'West Dark Death Mountain (Bottom)'], ['Sanctuary Area', 'Dark Chapel Area']), + (['Graveyard Ledge DMD Clip', 'Dark Graveyard DMD Clip', ], ['West Death Mountain (Bottom)', 'West Dark Death Mountain (Bottom)'], ['Graveyard Ledge', 'Dark Graveyard North']), + (['Kings Grave DMD Clip', 'Dark Kings Grave DMD Clip'], ['West Death Mountain (Bottom)', 'West Dark Death Mountain (Bottom)'], ['Kings Grave Area', None]), + + (['EDM to WDM Top Clip', 'EDDM To WDDM Clip'], ['East Death Mountain (Top West)', 'East Dark Death Mountain (Top)'], ['West Death Mountain (Top)', 'West Dark Death Mountain (Top)']), + (['EDM To TR Pegs Clip', 'EDDM To TR Clip'], ['East Death Mountain (Top East)', 'East Dark Death Mountain (Top)'], ['Death Mountain TR Pegs', None]), + (['EDM DMD FAWT Clip', 'Dark Witch DMD FAWT Clip'], ['East Death Mountain (Bottom)', 'East Dark Death Mountain (Bottom)'], ['Potion Shop Area', 'Dark Witch Area']), + (['WDM DMD To River Bend Clip', 'WDDM DMD To Qirn Jump Clip'], ['East Death Mountain (Bottom Left)', 'East Dark Death Mountain (Bottom Left)'], ['River Bend Area', 'Qirn Jump Area']), + (['EDM DMD To River Bend Clip', 'EDDM DMD To Qirn Jump Clip'], ['East Death Mountain (Bottom)', 'East Dark Death Mountain (Bottom)'], ['River Bend Area', 'Qirn Jump Area']), + + (['TR Pegs To EDM Clip', 'TR To EDDM Clip'], ['Death Mountain TR Pegs', 'Turtle Rock Area'], ['East Death Mountain (Top East)', 'East Dark Death Mountain (Top)']), + (['Zora DMD Clip', 'Catfish DMD Clip'], ['Death Mountain TR Pegs', 'Turtle Rock Area'], ['Zora Waterfall Area', 'Catfish Area']), + + (['Mountain Entry To Pond Clip', 'Bumper Cave To Pond Clip'], ['Mountain Entry Area', 'Bumper Cave Area'], ['Kakariko Pond Area', 'Outcast Pond Area']), + + (['Zora Waterfall Ledge Clip', 'Catfish Ledge Clip'], ['Zora Waterfall Area', 'Catfish Area'], ['Zora Approach Area', 'Catfish Approach Area']), + + #(['Pond DMA Clip', 'Dark Pond DMA Clip'], ['Kakariko Pond Area', 'Outcast Pond Area'], ['West Death Mountain (Bottom)', 'West Dark Death Mountain (Bottom)']), #cannot guarantee camera correction + (['Pond To Mountain Entry Clip', 'Pond To Bumper Cave Clip'], ['Kakariko Pond Area', 'Outcast Pond Area'], ['Mountain Entry Area', 'Bumper Cave Area']), + (['Pond To Bonk Rocks Clip', 'Pond To Chapel Clip'], ['Kakariko Pond Area', 'Outcast Pond Area'], ['Bonk Rock Ledge', 'Dark Chapel Area']), + + (['River Bend To Potion Shop Clip', 'Qirn Jump To Dark Witch Clip'], ['River Bend East Bank', 'Qirn Jump East Bank'], ['Potion Shop Area', 'Dark Witch Area']), + (['River Bend To Wooden Bridge Clip', 'Qirn Jump To Broken Bridge North Clip'], ['River Bend East Bank', 'Qirn Jump East Bank'], ['Wooden Bridge Area', 'Broken Bridge Northeast']), + (['River Bend To Broken Bridge Clip', 'Qirn Jump To Broken Bridge Clip'], ['River Bend East Bank', 'Qirn Jump East Bank'], [None, 'Broken Bridge Area']), + + (['Potion Shop To EP Clip', 'Dark Witch To PoD Clip'], ['Potion Shop Area', 'Dark Witch Area'], ['Eastern Palace Area', 'Palace of Darkness Area']), + (['Potion Shop To River Bend Clip', 'Dark Witch To Qirn Jump Clip'], ['Potion Shop Area', 'Dark Witch Area'], ['River Bend East Bank', 'Qirn Jump East Bank']), + (['Potion Shop To Zora Approach Clip', 'Dark Witch To Catfish Approach Clip'], ['Potion Shop Northeast', 'Dark Witch Northeast'], ['Zora Approach Area', 'Catfish Approach Area']), + + (['Zora Approach To Potion Shop Clip', 'Catfish Approach To Dark Witch Clip'], ['Zora Approach Area', 'Catfish Approach Area'], ['Potion Shop Area', 'Dark Witch Area']), + (['Zora Approach To PoD Clip', 'Catfish Approach To PoD Clip'], ['Zora Approach Area', 'Catfish Approach Area'], [None, 'Palace of Darkness Area']), + + (['Kakariko Bomb Hut Clip', 'VoO To Dig Game Clip'], ['Kakariko Southwest', 'Village of Outcasts Area'], ['Maze Race Area', 'Dig Game Area']), + (['Kakariko To Dig Game Hook Clip', 'VoO To Dig Game Hook Clip'], ['Kakariko Southwest', 'Village of Outcasts Area'], [None, 'Dig Game Ledge']), #requires hookshot + + (['Forgotten Forest To Blacksmith Clip', None], ['Forgotten Forest Area', None], ['Hyrule Castle Water', 'Pyramid Water']), #fake flipper + + (['Wooden Bridge To Dunes Clip', 'Broken Bridge To Dunes Clip'], ['Wooden Bridge Area', 'Broken Bridge West'], ['Sand Dunes Area', 'Dark Dunes Area']), + (['Wooden Bridge To Water Clip', 'Broken Bridge To Water Clip'], ['Wooden Bridge Area', 'Broken Bridge West'], [None, 'Pyramid Water']), #fake flipper + + (['Eastern Palace To Zora Approach Clip', None], ['Eastern Palace Area', None], ['Zora Approach Area', 'Catfish Approach Area']), + (['Eastern Palace To Nook Clip', None], ['Eastern Palace Area', None], ['Eastern Nook Area', 'Palace of Darkness Nook Area']), + (['Eastern Palace To Cliff Clip', 'PoD To Cliff Clip'], ['Eastern Palace Area', 'Palace of Darkness Area'], ['Eastern Cliff', 'Darkness Cliff']), + + (['Sand Dunes To Cliff Clip', 'Dark Dunes To Cliff Clip'], ['Sand Dunes Area', 'Dark Dunes Area'], ['Eastern Cliff', 'Darkness Cliff']), + (['Sand Dunes To Water Clip', 'Dark Dunes To Water Clip'], ['Sand Dunes Area', 'Dark Dunes Area'], [None, 'Pyramid Water']), #fake flipper + + (['Maze Race To Desert Ledge Clip', 'Dig Game To Mire Clip'], ['Maze Race Area', 'Dig Game Area'], ['Desert Ledge', 'Misery Mire Area']), + (['Maze Race To Desert Boss Clip', 'Dig Game To Desert Boss Clip'], ['Maze Race Area', 'Dig Game Area'], ['Desert Palace Entrance (North) Spot', None]), + (['Suburb To Cliff Clip', 'Archery Game To Cliff Clip'], ['Kakariko Suburb Area', 'Archery Game Area'], ['Desert Northeast Cliffs', 'Mire Northeast Cliffs']), + (['Central Bonk Rocks To Cliff Clip', 'Dark Bonk Rocks To Cliff Clip'], ['Central Bonk Rocks Area', 'Dark Bonk Rocks Area'], ['Central Cliffs', 'Dark Central Cliffs']), + (['Links House To Cliff Clip', 'Bomb Shop To Cliff Clip'], ['Links House Area', 'Big Bomb Shop Area'], ['Central Cliffs', 'Dark Central Cliffs']), + (['Stone Bridge To Cliff Clip', 'Hammer Bridge To Cliff Clip'], ['Stone Bridge Area', 'Hammer Bridge South Area'], ['Central Cliffs', 'Dark Central Cliffs']), + (['Eastern Nook To Eastern Clip', None], ['Eastern Nook Area', None], ['Eastern Palace Area', 'Palace of Darkness Area']), + (['Eastern Nook To Ice Cave FAWT Clip', 'PoD Nook To Shopping Mall FAWT Clip'], ['Eastern Nook Area', 'Palace of Darkness Nook Area'], ['Ice Cave Area', 'Shopping Mall Area']), + + (['Links To Bridge FAWT Clip', 'Bomb Shop To Hammer Bridge FAWT Clip'], ['Links House Area', 'Big Bomb Shop Area'], ['Stone Bridge Area', 'Hammer Bridge North Area']), #fake flipper + + (['Stone Bridge To Water Clip', 'Hammer Bridge To Water Clip'], ['Stone Bridge Area', 'Hammer Bridge North Area'], [None, 'Pyramid Water']), #fake flipper + + (['Desert To Maze Race Clip', None], ['Desert Ledge', None], ['Maze Race Area', 'Dig Game Area']), + (['Desert To Cliff Clip', 'Mire To Cliff Clip'], ['Desert Area', 'Misery Mire Area'], ['Desert Northeast Cliffs', 'Mire Northeast Cliffs']), + + (['Flute Boy To Cliff Clip', 'Stumpy To Cliff Clip'], ['Flute Boy Approach Area', 'Stumpy Approach Area'], ['Desert Northeast Cliffs', 'Mire Northeast Cliffs']), + (['Cave 45 To Cliff Clip', None], ['Cave 45 Ledge', None], ['Desert Northeast Cliffs', 'Mire Northeast Cliffs']), + + (['C Whirlpool To Cliff Clip', 'Dark C Whirlpool To Cliff Clip'], ['C Whirlpool Area', 'Dark C Whirlpool Area'], ['Central Cliffs', 'Dark Central Cliffs']), + (['C Whirlpool Outer To Cliff Clip', 'Dark C Whirlpool Outer To Cliff Clip'], ['C Whirlpool Outer Area', 'Dark C Whirlpool Outer Area'], ['Central Cliffs', 'Dark Central Cliffs']), + + (['Statues To Cliff Clip', 'Hype To Cliff Clip'], ['Statues Area', 'Hype Cave Area'], ['Central Cliffs', 'Dark Central Cliffs']), + + (['Lake Hylia To Statues Clip', 'Ice Lake To Hype Clip'], ['Lake Hylia Area', 'Ice Lake Area'], ['Statues Area', 'Hype Cave Area']), + (['Lake Hylia To South Pass Clip', 'Ice Lake To South Pass Clip'], ['Lake Hylia Area', 'Ice Lake Area'], ['South Pass Area', 'Dark South Pass Area']), + + (['Desert Pass To Cliff Clip', 'Swamp Nook To Cliff Clip'], ['Desert Pass Area', 'Swamp Nook Area'], ['Desert Northeast Cliffs', 'Mire Northeast Cliffs']), + (['Desert Pass Southeast To Cliff Clip', None], ['Desert Pass Southeast', None], ['Desert Northeast Cliffs', 'Mire Northeast Cliffs']), + + (['Dam To Cliff Clip', 'Swamp To Cliff Clip'], ['Dam Area', 'Swamp Area'], ['Desert Northeast Cliffs', 'Mire Northeast Cliffs']), + (['Dam To Desert Pass Southeast Clip', 'Swamp To Desert Pass Southeast Clip'], ['Dam Area', 'Swamp Area'], ['Desert Pass Southeast', None]), + + (['South Pass To Lake Hylia Clip', 'South Pass To Ice Lake Clip'], ['South Pass Area', 'Dark South Pass Area'], ['Lake Hylia Area', 'Ice Lake Area']), + (['South Pass To Shore Clip', 'South Pass To Dark Shore Clip'], ['South Pass Area', 'Dark South Pass Area'], ['Lake Hylia South Shore', 'Ice Lake Ledge (West)']), + #(['Octoballoon To Shore Clip', 'Bomber Corner To Shore Clip'], ['Octoballoon Area', 'Bomber Corner Area'], ['Lake Hylia South Shore', 'Ice Lake Ledge (East)']), #map wrap hardlock risk + + (['HC Water To Blacksmith Clip', 'Pyramid Water To Hammerpegs Clip'], ['Hyrule Castle Water', 'Pyramid Water'], ['Blacksmith Area', 'Hammer Pegs Area']), #TODO: THIS IS NOT A BOOTS CLIP, this is a normal connection that needs to occur somewhere + ([None, 'Pyramid Water To Bomb Shop Clip'], [None, 'Pyramid Water'], ['Links House Area', 'Big Bomb Shop Area']) #TODO: THIS IS NOT A BOOTS CLIP, this is a normal connection that needs to occur somewhere +] + +mirror_clips_local = [ + ('Desert East Mirror Clip', 'Misery Mire Area', 'Desert Palace Mouth'), + ('EDDM Mirror Clip', 'East Dark Death Mountain (Bottom Left)', 'East Dark Death Mountain (Bottom)'), + ('EDDM Mirror Clip', 'East Dark Death Mountain (Top)', 'Dark Death Mountain Ledge') +] + +mirror_clips = [ + ([None, 'Qirn Jump Bunny DMD Clip'], [None, 'East Dark Death Mountain (Bottom Left)'], ['River Bend Area', 'Qirn Jump Area']) +] + +mirror_offsets = [ + (['DM Offset Mirror', 'DDM Offset Mirror'], ['West Death Mountain (Bottom)', 'West Dark Death Mountain (Bottom)'], ['Hyrule Castle Courtyard', 'Pyramid Area'], ['Pyramid Area', 'Hyrule Castle Courtyard']), + (['DM To HC Ledge Offset Mirror', 'DDM To HC Ledge Offset Mirror'], ['West Death Mountain (Bottom)', 'West Dark Death Mountain (Bottom)'], ['Hyrule Castle Ledge', None], ['Pyramid Area', None]) +] \ No newline at end of file diff --git a/OverworldShuffle.py b/OverworldShuffle.py index d0ea7fec..571b37ee 100644 --- a/OverworldShuffle.py +++ b/OverworldShuffle.py @@ -1340,58 +1340,15 @@ mandatory_connections = [# Intra-tile OW Connections ('Bomber Corner Waterfall Water Drop', 'Bomber Corner Water'), #flippers ('Bomber Corner Pier', 'Bomber Corner Area'), - # OWG Connections - ('Sand Dunes Ledge Drop', 'Sand Dunes Area'), - ('Stone Bridge East Ledge Drop', 'Stone Bridge Area'), - ('Tree Line Ledge Drop', 'Tree Line Area'), - ('Eastern Palace Ledge Drop', 'Eastern Palace Area'), - - ('Links House Cliff Ledge Drop', 'Links House Area'), - ('Central Bonk Rocks Cliff Ledge Drop', 'Central Bonk Rocks Area'), - ('Stone Bridge Cliff Ledge Drop', 'Stone Bridge Area'), - ('Lake Hylia Area Cliff Ledge Drop', 'Lake Hylia Area'), - ('C Whirlpool Cliff Ledge Drop', 'C Whirlpool Area'), - ('C Whirlpool Outer Cliff Ledge Drop', 'C Whirlpool Outer Area'), - ('South Teleporter Cliff Ledge Drop', 'Dark Central Cliffs'), - ('Statues Cliff Ledge Drop', 'Statues Area'), - ('Lake Hylia Island FAWT Ledge Drop', 'Lake Hylia Island'), + # OWG In-Bounds Connections ('Stone Bridge EC Cliff Water Drop', 'Stone Bridge Water'), #fake flipper - ('Tree Line WC Cliff Water Drop', 'Tree Line Water'), #fake flipper - - ('Desert Boss Cliff Ledge Drop', 'Desert Palace Entrance (North) Spot'), - ('Checkerboard Cliff Ledge Drop', 'Desert Checkerboard Ledge'), - ('Suburb Cliff Ledge Drop', 'Kakariko Suburb Area'), - ('Cave 45 Cliff Ledge Drop', 'Cave 45 Ledge'), - ('Desert Pass Cliff Ledge Drop', 'Desert Pass Area'), - ('Desert Pass Southeast Cliff Ledge Drop', 'Desert Pass Southeast'), - ('Desert C Whirlpool Cliff Ledge Drop', 'C Whirlpool Outer Area'), - ('Dam Cliff Ledge Drop', 'Dam Area'), + ('Tree Line WC Cliff Water Drop', 'Tree Line Water'), #fake flipper, - ('Dark Dunes Ledge Drop', 'Dark Dunes Area'), - ('Hammer Bridge North Ledge Drop', 'Hammer Bridge North Area'), - ('Dark Tree Line Ledge Drop', 'Dark Tree Line Area'), - ('Palace of Darkness Ledge Drop', 'Palace of Darkness Area'), - - ('Mire Cliff Ledge Drop', 'Misery Mire Area'), - ('Archery Game Cliff Ledge Drop', 'Archery Game Area'), - ('Stumpy Approach Cliff Ledge Drop', 'Stumpy Approach Area'), - ('Swamp Nook Cliff Ledge Drop', 'Swamp Nook Area'), - ('Mire C Whirlpool Cliff Ledge Drop', 'Dark C Whirlpool Outer Area'), - ('Swamp Cliff Ledge Drop', 'Swamp Area'), - - ('Bomb Shop Cliff Ledge Drop', 'Big Bomb Shop Area'), - ('Dark Bonk Rocks Cliff Ledge Drop', 'Dark Bonk Rocks Area'), - ('Hammer Bridge South Cliff Ledge Drop', 'Hammer Bridge South Area'), - ('Ice Lake Area Cliff Ledge Drop', 'Ice Lake Area'), - ('Ice Lake Northeast Pier Hop', 'Ice Lake Northeast Bank'), - ('Ice Lake Moat Bomb Jump', 'Ice Lake Moat'), - ('Dark C Whirlpool Cliff Ledge Drop', 'Dark C Whirlpool Area'), - ('Dark C Whirlpool Outer Cliff Ledge Drop', 'Dark C Whirlpool Outer Area'), - ('Hype Cliff Ledge Drop', 'Hype Cave Area'), - ('Ice Palace Island FAWT Ledge Drop', 'Ice Lake Moat'), ('Hammer Bridge EC Cliff Water Drop', 'Hammer Bridge Water'), #fake flipper - ('Dark Tree Line WC Cliff Water Drop', 'Dark Tree Line Water') #fake flipper - ] + ('Dark Tree Line WC Cliff Water Drop', 'Dark Tree Line Water'), #fake flipper + ('Ice Lake Northeast Pier Hop', 'Ice Lake Northeast Bank'), + ('Ice Lake Moat Bomb Jump', 'Ice Lake Moat') + ] default_whirlpool_connections = [ ((0x33, 'C Whirlpool', 'C Whirlpool Water'), (0x15, 'River Bend Whirlpool', 'River Bend Water')), @@ -1594,9 +1551,13 @@ ow_connections = { ('Broken Bridge Northeast Mirror Spot', 'Broken Bridge Northeast') ]), 0x1e: ([ - ('Eastern Palace Mirror Spot', 'Eastern Palace Area') + ('Eastern Palace Mirror Spot', 'Eastern Palace Area'), + ('Eastern Palace Ledge Drop', 'Eastern Palace Area'), # OWG + ('Palace of Darkness Ledge Drop', 'Palace of Darkness Area') # OWG ], [ - ('Palace of Darkness Mirror Spot', 'Palace of Darkness Area') + ('Palace of Darkness Mirror Spot', 'Palace of Darkness Area'), + ('Eastern Palace Ledge Drop', 'Palace of Darkness Area'), # OWG + ('Palace of Darkness Ledge Drop', 'Eastern Palace Area') # OWG ]), 0x22: ([ ('Blacksmith Mirror Spot', 'Blacksmith Area'), @@ -1607,9 +1568,13 @@ ow_connections = { ('Hammer Pegs Entry Mirror Spot', 'Hammer Pegs Entry') ]), 0x25: ([ - ('Sand Dunes Mirror Spot', 'Sand Dunes Area') + ('Sand Dunes Mirror Spot', 'Sand Dunes Area'), + ('Sand Dunes Ledge Drop', 'Sand Dunes Area'), # OWG + ('Dark Dunes Ledge Drop', 'Dark Dunes Area') # OWG ], [ - ('Dark Dunes Mirror Spot', 'Dark Dunes Area') + ('Dark Dunes Mirror Spot', 'Dark Dunes Area'), + ('Sand Dunes Ledge Drop', 'Dark Dunes Area'), # OWG + ('Dark Dunes Ledge Drop', 'Sand Dunes Area') # OWG ]), 0x28: ([ ('Maze Race Mirror Spot', 'Maze Race Ledge'), @@ -1620,11 +1585,15 @@ ow_connections = { ]), 0x29: ([ ('Kakariko Suburb Mirror Spot', 'Kakariko Suburb Area'), - ('Kakariko Suburb South Mirror Spot', 'Kakariko Suburb Area') + ('Kakariko Suburb South Mirror Spot', 'Kakariko Suburb Area'), + ('Suburb Cliff Ledge Drop', 'Kakariko Suburb Area'), # OWG + ('Archery Game Cliff Ledge Drop', 'Archery Game Area') # OWG ], [ ('Frog Mirror Spot', 'Frog Area'), ('Frog Prison Mirror Spot', 'Frog Prison'), - ('Archery Game Mirror Spot', 'Archery Game Area') + ('Archery Game Mirror Spot', 'Archery Game Area'), + ('Suburb Cliff Ledge Drop', 'Archery Game Area'), # OWG + ('Archery Game Cliff Ledge Drop', 'Kakariko Suburb Area') # OWG ]), 0x2a: ([ ('Flute Boy Mirror Spot', 'Flute Boy Area'), @@ -1634,28 +1603,48 @@ ow_connections = { ('Stumpy Pass Mirror Spot', 'Stumpy Pass') ]), 0x2b: ([ - ('Central Bonk Rocks Mirror Spot', 'Central Bonk Rocks Area') + ('Central Bonk Rocks Mirror Spot', 'Central Bonk Rocks Area'), + ('Central Bonk Rocks Cliff Ledge Drop', 'Central Bonk Rocks Area'), # OWG + ('Dark Bonk Rocks Cliff Ledge Drop', 'Dark Bonk Rocks Area') # OWG ], [ - ('Dark Bonk Rocks Mirror Spot', 'Dark Bonk Rocks Area') + ('Dark Bonk Rocks Mirror Spot', 'Dark Bonk Rocks Area'), + ('Central Bonk Rocks Cliff Ledge Drop', 'Dark Bonk Rocks Area'), # OWG + ('Dark Bonk Rocks Cliff Ledge Drop', 'Central Bonk Rocks Area') # OWG ]), 0x2c: ([ - ('Links House Mirror Spot', 'Links House Area') + ('Links House Mirror Spot', 'Links House Area'), + ('Links House Cliff Ledge Drop', 'Links House Area'), # OWG + ('Bomb Shop Cliff Ledge Drop', 'Big Bomb Shop Area') # OWG ], [ - ('Big Bomb Shop Mirror Spot', 'Big Bomb Shop Area') + ('Big Bomb Shop Mirror Spot', 'Big Bomb Shop Area'), + ('Links House Cliff Ledge Drop', 'Big Bomb Shop Area'), # OWG + ('Bomb Shop Cliff Ledge Drop', 'Links House Area') # OWG ]), 0x2d: ([ ('Stone Bridge Mirror Spot', 'Stone Bridge Area'), ('Stone Bridge South Mirror Spot', 'Stone Bridge Area'), - ('Hobo Mirror Spot', 'Stone Bridge Water') + ('Hobo Mirror Spot', 'Stone Bridge Water'), + ('Stone Bridge East Ledge Drop', 'Stone Bridge Area'), # OWG + ('Hammer Bridge North Ledge Drop', 'Hammer Bridge North Area'), # OWG + ('Stone Bridge Cliff Ledge Drop', 'Stone Bridge Area'), # OWG + ('Hammer Bridge South Cliff Ledge Drop', 'Hammer Bridge South Area') # OWG ], [ ('Hammer Bridge North Mirror Spot', 'Hammer Bridge North Area'), ('Hammer Bridge South Mirror Spot', 'Hammer Bridge South Area'), - ('Dark Hobo Mirror Spot', 'Hammer Bridge Water') + ('Dark Hobo Mirror Spot', 'Hammer Bridge Water'), + ('Stone Bridge East Ledge Drop', 'Hammer Bridge North Area'), # OWG + ('Hammer Bridge North Ledge Drop', 'Stone Bridge Area'), # OWG + ('Stone Bridge Cliff Ledge Drop', 'Hammer Bridge South Area'), # OWG + ('Hammer Bridge South Cliff Ledge Drop', 'Stone Bridge Area') # OWG ]), 0x2e: ([ - ('Tree Line Mirror Spot', 'Tree Line Area') + ('Tree Line Mirror Spot', 'Tree Line Area'), + ('Tree Line Ledge Drop', 'Tree Line Area'), # OWG + ('Dark Tree Line Ledge Drop', 'Dark Tree Line Area') # OWG ], [ - ('Dark Tree Line Mirror Spot', 'Dark Tree Line Area') + ('Dark Tree Line Mirror Spot', 'Dark Tree Line Area'), + ('Tree Line Ledge Drop', 'Dark Tree Line Area'), # OWG + ('Dark Tree Line Ledge Drop', 'Tree Line Area') # OWG ]), 0x2f: ([ ('Eastern Nook Mirror Spot', 'Eastern Nook Area'), @@ -1671,7 +1660,10 @@ ow_connections = { ('DP Stairs Mirror Spot', 'Desert Palace Stairs'), ('DP Entrance (North) Mirror Spot', 'Desert Palace Entrance (North) Spot'), ('Bombos Tablet Ledge Mirror Spot', 'Bombos Tablet Ledge'), - ('Desert Teleporter', 'Misery Mire Teleporter Ledge') + ('Desert Teleporter', 'Misery Mire Teleporter Ledge'), + ('Desert Boss Cliff Ledge Drop', 'Desert Palace Entrance (North) Spot'), # OWG + ('Mire Cliff Ledge Drop', 'Misery Mire Area'), # OWG + ('Checkerboard Cliff Ledge Drop', 'Desert Checkerboard Ledge') # OWG ], [ ('Checkerboard Ledge Approach', 'Desert Checkerboard Ledge'), ('Checkerboard Ledge Leave', 'Desert Area'), @@ -1679,32 +1671,56 @@ ow_connections = { ('Misery Mire Ledge Mirror Spot', 'Misery Mire Area'), ('Misery Mire Blocked Mirror Spot', 'Misery Mire Area'), ('Misery Mire Main Mirror Spot', 'Misery Mire Area'), - ('Misery Mire Teleporter', 'Desert Palace Teleporter Ledge') + ('Misery Mire Teleporter', 'Desert Palace Teleporter Ledge'), + ('Desert Boss Cliff Ledge Drop', 'Misery Mire Area'), # OWG + ('Mire Cliff Ledge Drop', 'Desert Palace Entrance (North) Spot'), # OWG + ('Dark Checkerboard Cliff Ledge Drop', 'Desert Checkerboard Ledge') # OWG ]), 0x32: ([ ('Cave 45 Ledge Drop', 'Flute Boy Approach Area'), ('Flute Boy Entry Mirror Spot', 'Flute Boy Bush Entry'), - ('Cave 45 Mirror Spot', 'Cave 45 Ledge') + ('Cave 45 Mirror Spot', 'Cave 45 Ledge'), + ('Cave 45 Cliff Ledge Drop', 'Cave 45 Ledge'), # OWG + ('Stumpy Approach Cliff Ledge Drop', 'Stumpy Approach Area') # OWG ], [ ('Cave 45 Inverted Leave', 'Flute Boy Approach Area'), ('Cave 45 Inverted Approach', 'Cave 45 Ledge'), ('Stumpy Approach Mirror Spot', 'Stumpy Approach Area'), - ('Stumpy Bush Entry Mirror Spot', 'Stumpy Approach Bush Entry') + ('Stumpy Bush Entry Mirror Spot', 'Stumpy Approach Bush Entry'), + ('Cave 45 Cliff Ledge Drop', 'Stumpy Approach Area'), # OWG + ('Stumpy Approach Cliff Ledge Drop', 'Cave 45 Ledge') # OWG ]), 0x33: ([ ('C Whirlpool Mirror Spot', 'C Whirlpool Area'), ('C Whirlpool Outer Mirror Spot', 'C Whirlpool Outer Area'), - ('South Hyrule Teleporter', 'Dark C Whirlpool Area') + ('South Hyrule Teleporter', 'Dark C Whirlpool Area'), + ('South Teleporter Cliff Ledge Drop', 'Dark Central Cliffs'), # OWG only, needs glove + ('C Whirlpool Cliff Ledge Drop', 'C Whirlpool Area'), # OWG + ('Dark C Whirlpool Cliff Ledge Drop', 'Dark C Whirlpool Area'), # OWG + ('C Whirlpool Outer Cliff Ledge Drop', 'C Whirlpool Outer Area'), # OWG + ('Dark C Whirlpool Outer Cliff Ledge Drop', 'Dark C Whirlpool Outer Area'), # OWG + ('Desert C Whirlpool Cliff Ledge Drop', 'C Whirlpool Outer Area'), # OWG + ('Mire C Whirlpool Cliff Ledge Drop', 'Dark C Whirlpool Outer Area') # OWG ], [ ('Dark C Whirlpool Mirror Spot', 'Dark C Whirlpool Area'), ('Dark C Whirlpool Outer Mirror Spot', 'Dark C Whirlpool Outer Area'), ('South Dark World Teleporter', 'C Whirlpool Area'), - ('Dark South Teleporter Cliff Ledge Drop', 'Central Cliffs') #OWG only, needs glove + ('Dark South Teleporter Cliff Ledge Drop', 'Central Cliffs'), # OWG, needs glove/pearl + ('C Whirlpool Cliff Ledge Drop', 'Dark C Whirlpool Area'), # OWG + ('Dark C Whirlpool Cliff Ledge Drop', 'C Whirlpool Area'), # OWG + ('C Whirlpool Outer Cliff Ledge Drop', 'Dark C Whirlpool Outer Area'), # OWG + ('Dark C Whirlpool Outer Cliff Ledge Drop', 'C Whirlpool Outer Area'), # OWG + ('Desert C Whirlpool Cliff Ledge Drop', 'Dark C Whirlpool Outer Area'), # OWG + ('Mire C Whirlpool Cliff Ledge Drop', 'C Whirlpool Outer Area') # OWG ]), 0x34: ([ - ('Statues Mirror Spot', 'Statues Area') + ('Statues Mirror Spot', 'Statues Area'), + ('Statues Cliff Ledge Drop', 'Statues Area'), # OWG + ('Hype Cliff Ledge Drop', 'Hype Cave Area') # OWG ], [ - ('Hype Cave Mirror Spot', 'Hype Cave Area') + ('Hype Cave Mirror Spot', 'Hype Cave Area'), + ('Statues Cliff Ledge Drop', 'Hype Cave Area'), # OWG + ('Hype Cliff Ledge Drop', 'Statues Area') # OWG ]), 0x35: ([ ('Lake Hylia Mirror Spot', 'Lake Hylia Area'), @@ -1715,7 +1731,12 @@ ow_connections = { ('Lake Hylia Central Island Mirror Spot', 'Lake Hylia Central Island'), ('Lake Hylia Water Mirror Spot', 'Lake Hylia Water'), ('Lake Hylia Water D Mirror Spot', 'Lake Hylia Water D'), - ('Lake Hylia Teleporter', 'Ice Palace Area') + ('Lake Hylia Teleporter', 'Ice Palace Area'), + #('Ice Palace Ledge Drop', 'Ice Lake Moat'), + ('Lake Hylia Area Cliff Ledge Drop', 'Lake Hylia Area'), # OWG + ('Ice Lake Area Cliff Ledge Drop', 'Ice Lake Area'), # OWG + ('Lake Hylia Island FAWT Ledge Drop', 'Lake Hylia Island'), # OWG + ('Ice Palace Island FAWT Ledge Drop', 'Ice Lake Moat') # OWG ], [ ('Lake Hylia Island Pier', 'Lake Hylia Island'), ('Ice Lake Mirror Spot', 'Ice Lake Area'), @@ -1724,7 +1745,11 @@ ow_connections = { ('Ice Lake Northeast Mirror Spot', 'Ice Lake Northeast Bank'), ('Ice Palace Mirror Spot', 'Ice Palace Area'), ('Ice Lake Moat Mirror Spot', 'Ice Lake Moat'), - ('Ice Palace Teleporter', 'Lake Hylia Water D') + ('Ice Palace Teleporter', 'Lake Hylia Water D'), + ('Lake Hylia Area Cliff Ledge Drop', 'Ice Lake Area'), # OWG + ('Ice Lake Area Cliff Ledge Drop', 'Lake Hylia Area'), # OWG + ('Lake Hylia Island FAWT Ledge Drop', 'Ice Lake Moat'), # OWG + ('Ice Palace Island FAWT Ledge Drop', 'Lake Hylia Island') # OWG ]), 0x37: ([ ('Ice Cave Mirror Spot', 'Ice Cave Area') @@ -1733,18 +1758,26 @@ ow_connections = { ]), 0x3a: ([ ('Desert Pass Ledge Mirror Spot', 'Desert Pass Ledge'), - ('Desert Pass Mirror Spot', 'Desert Pass Area') + ('Desert Pass Mirror Spot', 'Desert Pass Area'), + ('Desert Pass Cliff Ledge Drop', 'Desert Pass Area'), # OWG + ('Swamp Nook Cliff Ledge Drop', 'Swamp Nook Area') # OWG ], [ ('Desert Pass Ladder (North)', 'Desert Pass Area'), ('Desert Pass Ladder (South)', 'Desert Pass Ledge'), ('Swamp Nook Mirror Spot', 'Swamp Nook Area'), ('Swamp Nook Southeast Mirror Spot', 'Swamp Nook Area'), - ('Swamp Nook Pegs Mirror Spot', 'Swamp Nook Area') + ('Swamp Nook Pegs Mirror Spot', 'Swamp Nook Area'), + ('Desert Pass Cliff Ledge Drop', 'Swamp Nook Area'), # OWG + ('Swamp Nook Cliff Ledge Drop', 'Desert Pass Area') # OWG ]), 0x3b: ([ - ('Dam Mirror Spot', 'Dam Area') + ('Dam Mirror Spot', 'Dam Area'), + ('Dam Cliff Ledge Drop', 'Dam Area'), # OWG + ('Swamp Cliff Ledge Drop', 'Swamp Area') # OWG ], [ - ('Swamp Mirror Spot', 'Swamp Area') + ('Swamp Mirror Spot', 'Swamp Area'), + ('Dam Cliff Ledge Drop', 'Swamp Area'), # OWG + ('Swamp Cliff Ledge Drop', 'Dam Area') # OWG ]), 0x3c: ([ ('South Pass Mirror Spot', 'South Pass Area') diff --git a/Regions.py b/Regions.py index 0a463e98..a59f24ed 100644 --- a/Regions.py +++ b/Regions.py @@ -67,6 +67,7 @@ def create_regions(world, player): create_lw_region(player, 'Hyrule Castle Courtyard Northeast', None, ['Hyrule Castle Courtyard Bush (North)', 'Hyrule Castle Secret Entrance Stairs', 'Pyramid Uncle Mirror Spot']), create_lw_region(player, 'Hyrule Castle Ledge', None, ['Hyrule Castle Ledge Drop', 'Hyrule Castle Ledge Courtyard Drop', 'Inverted Pyramid Entrance', 'Hyrule Castle Entrance (West)', 'Agahnims Tower', 'Hyrule Castle Entrance (East)', 'Inverted Pyramid Hole', 'Pyramid From Ledge Mirror Spot'], 'the castle rampart'), create_lw_region(player, 'Hyrule Castle East Entry', None, ['Hyrule Castle Outer East Rock', 'Pyramid Entry Mirror Spot', 'Hyrule Castle ES']), + create_dw_region(player, 'Hyrule Castle Water', None, ['Blacksmith Water Exit'], 'Dark World', Terrain.Water), create_lw_region(player, 'Wooden Bridge Area', None, ['Wooden Bridge Bush (South)', 'Wooden Bridge Water Drop', 'Broken Bridge West Mirror Spot', 'Broken Bridge East Mirror Spot', 'Wooden Bridge NW', 'Wooden Bridge SW']), create_lw_region(player, 'Wooden Bridge Northeast', None, ['Wooden Bridge Bush (North)', 'Wooden Bridge Northeast Water Drop', 'Broken Bridge Northeast Mirror Spot', 'Wooden Bridge NE']), create_lw_region(player, 'Wooden Bridge Water', None, ['Wooden Bridge NC'], 'Light World', Terrain.Water), @@ -97,7 +98,7 @@ def create_regions(world, player): create_lw_region(player, 'Desert Palace Stairs', None, ['Desert Palace Entrance (South)', 'Misery Mire Main Mirror Spot'], 'a sandy vista'), create_lw_region(player, 'Desert Palace Mouth', None, ['Desert Mouth Drop', 'Desert Palace Entrance (East)']), create_lw_region(player, 'Desert Palace Teleporter Ledge', None, ['Desert Teleporter Drop', 'Desert Teleporter']), - create_lw_region(player, 'Desert Northeast Cliffs', None, ['Desert Boss Cliff Ledge Drop', 'Checkerboard Cliff Ledge Drop', 'Suburb Cliff Ledge Drop', 'Cave 45 Cliff Ledge Drop', 'Desert C Whirlpool Cliff Ledge Drop', 'Desert Pass Cliff Ledge Drop', 'Desert Pass Southeast Cliff Ledge Drop', 'Dam Cliff Ledge Drop']), + create_lw_region(player, 'Desert Northeast Cliffs', None, ['Desert Boss Cliff Ledge Drop', 'Checkerboard Cliff Ledge Drop', 'Suburb Cliff Ledge Drop', 'Cave 45 Cliff Ledge Drop', 'Desert C Whirlpool Cliff Ledge Drop', 'Desert Pass Cliff Ledge Drop', 'Dam Cliff Ledge Drop']), create_lw_region(player, 'Bombos Tablet Ledge', ['Bombos Tablet'], ['Bombos Tablet Drop', 'Desert EC']), create_lw_region(player, 'Flute Boy Approach Area', None, ['Flute Boy Bush (South)', 'Cave 45 Inverted Approach', 'Stumpy Approach Mirror Spot', 'Flute Boy Approach NW', 'Flute Boy Approach EC']), create_lw_region(player, 'Flute Boy Bush Entry', None, ['Flute Boy Bush (North)', 'Stumpy Bush Entry Mirror Spot', 'Flute Boy Approach NC']), @@ -173,6 +174,7 @@ def create_regions(world, player): create_dw_region(player, 'Pyramid Crack', ['Pyramid Crack'], None), create_dw_region(player, 'Pyramid Exit Ledge', None, ['Pyramid Exit Ledge Drop', 'HC Courtyard Left Mirror Spot', 'Pyramid Entrance']), create_dw_region(player, 'Pyramid Pass', None, ['Post Aga Inverted Teleporter', 'HC Area South Mirror Spot', 'Pyramid SW', 'Pyramid SE']), + create_dw_region(player, 'Pyramid Water', None, ['Hammerpegs Water Exit', 'Big Bomb Shop Water Exit'], 'Dark World', Terrain.Water), create_dw_region(player, 'Broken Bridge Area', None, ['Broken Bridge Hammer Rock (South)', 'Broken Bridge Water Drop', 'Wooden Bridge Mirror Spot', 'Broken Bridge SW']), create_dw_region(player, 'Broken Bridge Northeast', None, ['Broken Bridge Hammer Rock (North)', 'Broken Bridge Hookshot Gap', 'Broken Bridge Northeast Water Drop', 'Wooden Bridge Northeast Mirror Spot', 'Broken Bridge NE']), create_dw_region(player, 'Broken Bridge West', None, ['Broken Bridge West Water Drop', 'Wooden Bridge West Mirror Spot', 'Broken Bridge NW']), @@ -201,7 +203,7 @@ def create_regions(world, player): create_dw_region(player, 'Palace of Darkness Nook Area', None, ['East Dark World Hint', 'East Dark World Teleporter', 'Eastern Nook Mirror Spot', 'Palace of Darkness Nook NE']), create_dw_region(player, 'Misery Mire Area', None, ['Mire Shed', 'Misery Mire', 'Dark Desert Fairy', 'Dark Desert Hint', 'Desert Mirror Spot', 'Desert Ledge Mirror Spot', 'Checkerboard Mirror Spot', 'DP Stairs Mirror Spot', 'DP Entrance (North) Mirror Spot']), create_dw_region(player, 'Misery Mire Teleporter Ledge', None, ['Misery Mire Teleporter Ledge Drop', 'Misery Mire Teleporter']), - create_dw_region(player, 'Mire Northeast Cliffs', None, ['Mire Cliff Ledge Drop', 'Archery Game Cliff Ledge Drop', 'Stumpy Approach Cliff Ledge Drop', 'Mire C Whirlpool Cliff Ledge Drop', 'Swamp Nook Cliff Ledge Drop', 'Swamp Cliff Ledge Drop', 'Bombos Tablet Ledge Mirror Spot']), + create_dw_region(player, 'Mire Northeast Cliffs', None, ['Mire Cliff Ledge Drop', 'Dark Checkerboard Cliff Ledge Drop', 'Archery Game Cliff Ledge Drop', 'Stumpy Approach Cliff Ledge Drop', 'Mire C Whirlpool Cliff Ledge Drop', 'Swamp Nook Cliff Ledge Drop', 'Swamp Cliff Ledge Drop', 'Bombos Tablet Ledge Mirror Spot']), create_dw_region(player, 'Stumpy Approach Area', None, ['Stumpy Approach Bush (South)', 'Cave 45 Mirror Spot', 'Stumpy Approach NW', 'Stumpy Approach EC']), create_dw_region(player, 'Stumpy Approach Bush Entry', None, ['Stumpy Approach Bush (North)', 'Flute Boy Entry Mirror Spot', 'Stumpy Approach NC']), create_dw_region(player, 'Dark C Whirlpool Area', None, ['Dark C Whirlpool Rock (Bottom)', 'South Dark World Teleporter', 'C Whirlpool Mirror Spot', 'Dark C Whirlpool Water Entry', 'Dark C Whirlpool EN', 'Dark C Whirlpool ES', 'Dark C Whirlpool SC']),