diff --git a/EntranceShuffle.py b/EntranceShuffle.py index aecfd8ae..15e6907d 100644 --- a/EntranceShuffle.py +++ b/EntranceShuffle.py @@ -3267,9 +3267,9 @@ default_connections = [('Waterfall of Wishing', 'Waterfall of Wishing'), ('Cave Shop (Dark Death Mountain)', 'Cave Shop (Dark Death Mountain)'), ('Dark Death Mountain Fairy', 'Dark Death Mountain Healer Fairy'), ('Superbunny Cave (Bottom)', 'Superbunny Cave (Bottom)'), - ('Superbunny Cave Exit (Top)', 'Dark Death Mountain (Top East)'), - ('Superbunny Cave Exit (Bottom)', 'Dark Death Mountain (East Bottom)'), - ('Hookshot Cave Exit (South)', 'Dark Death Mountain (Top East)'), + ('Superbunny Cave Exit (Top)', 'East Dark Death Mountain (Top)'), + ('Superbunny Cave Exit (Bottom)', 'East Dark Death Mountain (Bottom)'), + ('Hookshot Cave Exit (South)', 'East Dark Death Mountain (Top)'), ('Hookshot Cave Exit (North)', 'Dark Death Mountain Floating Island'), ('Hookshot Cave Back Entrance', 'Hookshot Cave'), ('Mimic Cave', 'Mimic Cave'), @@ -3485,7 +3485,7 @@ default_dungeon_connections = [('Desert Palace Entrance (South)', 'Desert South ('Turtle Rock Isolated Ledge Entrance', 'Turtle Rock Eye Bridge Portal'), ('Ganons Tower', 'Ganons Tower Portal'), - ('Ganons Tower Exit', 'Dark Death Mountain (Top West)') + ('Ganons Tower Exit', 'West Dark Death Mountain (Top)') ] inverted_default_dungeon_connections = [('Desert Palace Entrance (South)', 'Desert South Portal'), diff --git a/OWEdges.py b/OWEdges.py index 0a81473d..eb175d08 100644 --- a/OWEdges.py +++ b/OWEdges.py @@ -52,8 +52,8 @@ def create_owedges(world, player): create_owedge(player, 'Death Mountain TR Pegs WN', 0x07, We, Ld, 0x02) .coordInfo(0x00e0), create_owedge(player, 'Mountain Entry NW', 0x0a, No, Ld, 0x01) .coordInfo(0x180a), create_owedge(player, 'Mountain Entry SE', 0x0a, So, Ld, 0x04) .coordInfo(0x1012), - create_owedge(player, 'Zora Approach NE', 0x0f, No, Ld, 0x02) .coordInfo(0x009a), - create_owedge(player, 'Zora Approach SE', 0x0f, So, Ld, 0x05) .coordInfo(0x1020), + create_owedge(player, 'Zora Waterfall NE', 0x0f, No, Ld, 0x02) .coordInfo(0x009a), + create_owedge(player, 'Zora Waterfall SE', 0x0f, So, Ld, 0x05) .coordInfo(0x1020), create_owedge(player, 'Lost Woods Pass NW', 0x10, No, Ld, 0x03) .coordInfo(0x1800), create_owedge(player, 'Lost Woods Pass NE', 0x10, No, Ld, 0x04) .coordInfo(0x181e), create_owedge(player, 'Lost Woods Pass SW', 0x10, So, Ld, 0x06) .coordInfo(0x1002), @@ -86,9 +86,9 @@ def create_owedges(world, player): create_owedge(player, 'Potion Shop WS', 0x16, We, Ld, 0x0c) .coordInfo(0x08e0), create_owedge(player, 'Potion Shop EN', 0x16, Ea, Wr, 0x0d) .coordInfo(0x00c0), create_owedge(player, 'Potion Shop EC', 0x16, Ea, Ld, 0x0e) .coordInfo(0x01c0), - create_owedge(player, 'Zora Warning NE', 0x17, No, Ld, 0x07) .coordInfo(0x1820), - create_owedge(player, 'Zora Warning WN', 0x17, We, Wr, 0x0d) .coordInfo(0x00e0), - create_owedge(player, 'Zora Warning WC', 0x17, We, Ld, 0x0e) .coordInfo(0x01e0), + create_owedge(player, 'Zora Approach NE', 0x17, No, Ld, 0x07) .coordInfo(0x1820), + create_owedge(player, 'Zora Approach WN', 0x17, We, Wr, 0x0d) .coordInfo(0x00e0), + create_owedge(player, 'Zora Approach WC', 0x17, We, Ld, 0x0e) .coordInfo(0x01e0), create_owedge(player, 'Kakariko NW', 0x18, No, Ld, 0x08) .coordInfo(0x1802), create_owedge(player, 'Kakariko NC', 0x18, No, Ld, 0x09) .coordInfo(0x181a), create_owedge(player, 'Kakariko NE', 0x18, No, Ld, 0x0a, 0x19).coordInfo(0x1854), @@ -143,9 +143,9 @@ def create_owedges(world, player): create_owedge(player, 'Eastern Nook NE', 0x2f, No, Ld, 0x16) .coordInfo(0x1820), create_owedge(player, 'Desert EC', 0x30, Ea, Ld, 0x1e, 0x39).coordInfo(0x1480), create_owedge(player, 'Desert ES', 0x30, Ea, Ld, 0x1f, 0x39).coordInfo(0x1980), - create_owedge(player, 'Cave 45 NW', 0x32, No, Ld, 0x17) .coordInfo(0x1800), - create_owedge(player, 'Cave 45 NC', 0x32, No, Ld, 0x18) .coordInfo(0x180c), - create_owedge(player, 'Cave 45 EC', 0x32, Ea, Ld, 0x1a) .coordInfo(0x05c0), + create_owedge(player, 'Flute Boy Approach NW', 0x32, No, Ld, 0x17) .coordInfo(0x1800), + create_owedge(player, 'Flute Boy Approach NC', 0x32, No, Ld, 0x18) .coordInfo(0x180c), + create_owedge(player, 'Flute Boy Approach EC', 0x32, Ea, Ld, 0x1a) .coordInfo(0x05c0), create_owedge(player, 'C Whirlpool NW', 0x33, No, Ld, 0x19) .coordInfo(0x1804), create_owedge(player, 'C Whirlpool SC', 0x33, So, Ld, 0x1c) .coordInfo(0x1016), create_owedge(player, 'C Whirlpool WC', 0x33, We, Ld, 0x1b) .coordInfo(0x05e0), @@ -281,9 +281,9 @@ def create_owedges(world, player): create_owedge(player, 'Dark Tree Line WN', 0x6e, We, Ld, 0x3f) .coordInfo(0x01e0), create_owedge(player, 'Dark Tree Line WC', 0x6e, We, Wr, 0x40) .coordInfo(0x0660), create_owedge(player, 'Palace of Darkness Nook NE', 0x6f, No, Ld, 0x36) .coordInfo(0x1820), - create_owedge(player, 'Circle of Bushes NW', 0x72, No, Ld, 0x37) .coordInfo(0x1800), - create_owedge(player, 'Circle of Bushes NC', 0x72, No, Ld, 0x38) .coordInfo(0x180c), - create_owedge(player, 'Circle of Bushes EC', 0x72, Ea, Ld, 0x40) .coordInfo(0x05c0), + create_owedge(player, 'Stumpy Approach NW', 0x72, No, Ld, 0x37) .coordInfo(0x1800), + create_owedge(player, 'Stumpy Approach NC', 0x72, No, Ld, 0x38) .coordInfo(0x180c), + create_owedge(player, 'Stumpy Approach EC', 0x72, Ea, Ld, 0x40) .coordInfo(0x05c0), create_owedge(player, 'Dark C Whirlpool NW', 0x73, No, Ld, 0x39) .coordInfo(0x1804), create_owedge(player, 'Dark C Whirlpool SC', 0x73, So, Ld, 0x3c) .coordInfo(0x1016), create_owedge(player, 'Dark C Whirlpool WC', 0x73, We, Ld, 0x41) .coordInfo(0x05e0), @@ -355,7 +355,7 @@ OWEdgeGroups = { ['Maze Race ES'], ['Kakariko Suburb ES'], ['Links House ES'], - ['Cave 45 EC'], + ['Flute Boy Approach EC'], ['Dam EC'], ['South Pass ES'], ['Potion Shop EC'], @@ -377,7 +377,7 @@ OWEdgeGroups = { ['C Whirlpool WC'], ['South Pass WC'], ['Lake Hylia WS'], - ['Zora Warning WC'], + ['Zora Approach WC'], ['Octoballoon WS'], ['Tree Line WN'], ['East Death Mountain WN'], @@ -397,7 +397,7 @@ OWEdgeGroups = { ['Lumberjack SW'], ['Mountain Entry SE'], ['Lost Woods SE'], - ['Zora Approach SE'], + ['Zora Waterfall SE'], ['Kakariko Fortune SC'], ['Wooden Bridge SW'], ['Kakariko SE'], @@ -416,7 +416,7 @@ OWEdgeGroups = { ['Mountain Entry NW'], ['Kakariko Pond NE'], ['Kakariko Fortune NE'], - ['Zora Warning NE'], + ['Zora Approach NE'], ['Kakariko NE'], ['Sand Dunes NW'], ['Kakariko Suburb NE'], @@ -468,7 +468,7 @@ OWEdgeGroups = { ['Lost Woods Pass NW', 'Lost Woods Pass NE'], ['Kakariko NW', 'Kakariko NC'], ['Forgotten Forest NW', 'Forgotten Forest NE'], - ['Cave 45 NW', 'Cave 45 NC'], + ['Flute Boy Approach NW', 'Flute Boy Approach NC'], ['Wooden Bridge NW', 'Wooden Bridge NE'] ] ), @@ -481,7 +481,7 @@ OWEdgeGroups = { ['C Whirlpool EC'] ], [ - ['Zora Warning WN'], + ['Zora Approach WN'], ['Octoballoon WC'], ['Tree Line WC'], ['Potion Shop WN'], @@ -510,7 +510,7 @@ OWEdgeGroups = { ['Pyramid ES'], ['Frog ES'], ['Big Bomb Shop ES'], - ['Circle of Bushes EC'], + ['Stumpy Approach EC'], ['Swamp EC'], ['Dark South Pass ES'], ['Dark Witch EC'], @@ -618,7 +618,7 @@ OWEdgeGroups = { ['Skull Woods Pass NW', 'Skull Woods Pass NE'], ['Village of Outcasts NW', 'Village of Outcasts NC'], ['Shield Shop NW', 'Shield Shop NE'], - ['Circle of Bushes NW', 'Circle of Bushes NC'], + ['Stumpy Approach NW', 'Stumpy Approach NC'], ['Broken Bridge NW', 'Broken Bridge NE'] ] ), diff --git a/OverworldGlitchRules.py b/OverworldGlitchRules.py index e369bd0f..ced7520e 100644 --- a/OverworldGlitchRules.py +++ b/OverworldGlitchRules.py @@ -134,82 +134,202 @@ def get_boots_clip_exits_lw(inverted = False): Special Light World region exits that require boots clips. """ - yield ('Bat Cave River Clip Spot', 'Light World', 'Bat Cave Drop Ledge') - yield ('Light World DMA Clip Spot', 'Light World', 'Death Mountain') - yield ('Hera Ascent', 'Death Mountain', 'Death Mountain (Top)') - yield ('Death Mountain Return Ledge Clip Spot', 'Light World', 'Death Mountain Return Ledge') - yield ('Death Mountain Entrance Clip Spot', 'Light World', 'Death Mountain Entrance') - yield ('Death Mountain Glitched Bridge', 'Death Mountain', 'East Death Mountain (Top)') - yield ('Zora Descent Clip Spot', 'East Death Mountain (Top)', 'Zoras River') - yield ('Desert Northern Cliffs', 'Light World', 'Desert Northern Cliffs') - yield ('Desert Ledge Dropdown', 'Desert Northern Cliffs', 'Desert Ledge') - yield ('Desert Palace Entrance Dropdown', 'Desert Northern Cliffs', 'Desert Palace Entrance (North) Spot') - yield ('Lake Hylia Island Clip Spot', 'Light World', 'Lake Hylia Island') - yield ('Death Mountain Descent', 'Death Mountain', 'Light World') - yield ('Kings Grave Clip Spot', 'Death Mountain', 'Kings Grave Area') - + 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 (West Lip)') + 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 (West Lip)', 'East Death Mountain (Bottom)') + yield ('WDM DMD To River Bend Clip', 'East Death Mountain (West Lip)', '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 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', 'Death Mountain Return Ledge') + yield ('Mountain Ledge Drop Clip', 'Death Mountain Return Ledge', 'Death Mountain 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 ('Graveyard Ledge Clip Spot', 'Death Mountain', 'Graveyard Ledge') - yield ('Desert Ledge (Northeast) Dropdown', 'Desert Northern Cliffs', 'Desert Ledge (Northeast)') - yield ('Spectacle Rock Clip Spot', 'Death Mountain (Top)', 'Spectacle Rock') - yield ('Bombos Tablet Clip Spot', 'Light World', 'Bombos Tablet Ledge') - yield ('Floating Island Clip Spot', 'East Death Mountain (Top)', 'Death Mountain Floating Island (Light World)') - yield ('Cave 45 Clip Spot', 'Light World', 'Cave 45 Ledge') - + 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)') def get_boots_clip_exits_dw(inverted): """ Special Dark World region exits that require boots clips. """ - yield ('Dark World DMA Clip Spot', 'West Dark World', inverted and 'Dark Death Mountain' or 'Dark Death Mountain (West Bottom)') - yield ('Bumper Cave Ledge Clip Spot', 'West Dark World', 'Bumper Cave Ledge') - yield ('Bumper Cave Entrance Clip Spot', 'West Dark World', 'Bumper Cave Entrance') - yield ('Catfish Descent', inverted and 'Dark Death Mountain' or 'Dark Death Mountain (Top)', 'Catfish') - yield ('Hammer Pegs River Clip Spot', 'East Dark World', 'Hammer Peg Area') - yield ('Dark Lake Hylia Ledge Clip Spot', 'East Dark World', 'Dark Lake Hylia Ledge') - yield ('Dark Desert Cliffs Clip Spot', 'South Dark World', 'Dark Desert') - yield ('DW Floating Island Clip Spot', 'Dark Death Mountain (East Bottom)', 'Death Mountain Floating Island (Dark World)') - + 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 (West Lip)') + 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 (West Lip)', 'Qirn Jump Area') + yield ('WDDM To EDDM Clip', 'East Dark Death Mountain (West Lip)', '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 Peg 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 Peg 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 Peg 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 ('Dark Death Mountain Descent', 'Dark Death Mountain (West Bottom)', 'West Dark World') - yield ('Ganons Tower Ascent', 'Dark Death Mountain (West Bottom)', 'Dark Death Mountain (Top)') # This only gets you to the GT entrance - yield ('Dark Death Mountain Glitched Bridge', 'Dark Death Mountain (West Bottom)', 'Dark Death Mountain (Top)') - yield ('Turtle Rock (Top) Clip Spot', 'Dark Death Mountain (Top)', 'Turtle Rock (Top)') + 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 ('Dark Desert Teleporter Clip Spot', 'Dark Desert', 'Dark Desert Ledge') + yield ('Misery Mire Teleporter Clip', 'Misery Mire Area', 'Misery Mire Teleporter Ledge') + + +def get_glitched_speed_drops_lw(inverted = False): + """ + Light World drop-down ledges that require glitched speed. + """ def get_glitched_speed_drops_dw(inverted = False): """ Dark World drop-down ledges that require glitched speed. """ - yield ('Dark Death Mountain Ledge Clip Spot', inverted and 'Dark Death Mountain' or 'Dark Death Mountain (Top)', 'Dark Death Mountain Ledge') def get_mirror_clip_spots_dw(): """ Out of bounds transitions using the mirror """ - yield ('Dark Death Mountain Bunny Descent Mirror Spot', 'Dark Death Mountain (West Bottom)', 'Dark Death Mountain Bunny Descent Area') - yield ('West Dark World Bunny Descent', 'Dark Death Mountain Bunny Descent Area', 'West Dark World') - yield ('Dark Death Mountain (East Bottom) Jump', 'Dark Death Mountain Bunny Descent Area', 'Dark Death Mountain (East Bottom)') - yield ('Desert East Mirror Clip', 'Dark Desert', 'Desert Palace Lone Stairs') + yield ('Qirn Jump Bunny DMD Clip', 'East Dark Death Mountain (West Lip)', 'Qirn Jump Area') + yield ('EDDM Mirror Clip', 'East Dark Death Mountain (West Lip)', 'East Dark Death Mountain (Bottom)') + yield ('Desert East Mirror Clip', 'Misery Mire Area', 'Desert Palace Mouth') def get_mirror_offset_spots_dw(): """ Mirror shenanigans placing a mirror portal with a broken camera """ - yield ('Dark Death Mountain Offset Mirror', 'Dark Death Mountain (West Bottom)', 'East Dark World') + yield ('Dark Death Mountain Offset Mirror', 'West Dark Death Mountain (Bottom)', 'Pyramid Area') def get_mirror_offset_spots_lw(player): """ Mirror shenanigans placing a mirror portal with a broken camera """ - yield ('Death Mountain Offset Mirror', 'Death Mountain', 'Light World') - yield ('Death Mountain Offset Mirror (Houlihan Exit)', 'Death Mountain', 'Hyrule Castle Ledge', lambda state: state.has_Mirror(player) and state.can_boots_clip_dw(player) and state.has_Pearl(player)) + #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 create_owg_connections(world, player): @@ -220,14 +340,15 @@ def create_owg_connections(world, player): create_no_logic_connections(player, world, get_boots_clip_exits_dw(world.mode[player] == 'inverted')) # Glitched speed drops. - 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.mode[player] == 'inverted')) + #create_no_logic_connections(player, world, get_glitched_speed_drops_dw(world.mode[player] == 'inverted')) # 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)) + #else: + #create_no_logic_connections(player, world, get_mirror_offset_spots_lw(player)) def overworld_glitches_rules(world, player): @@ -236,38 +357,51 @@ def overworld_glitches_rules(world, player): set_owg_rules(player, world, get_boots_clip_exits_dw(world.mode[player] == 'inverted'), lambda state: state.can_boots_clip_dw(player)) # Glitched speed drops. - set_owg_rules(player, world, get_glitched_speed_drops_dw(world.mode[player] == 'inverted'), lambda state: state.can_get_glitched_speed_dw(player)) - # Dark Death Mountain Ledge Clip Spot also accessible with mirror. - if world.mode[player] != 'inverted': - add_alternate_rule(world.get_entrance('Dark Death Mountain Ledge Clip Spot', player), lambda state: state.has_Mirror(player)) + #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)) # 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)) + #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)) # Regions that require the boots and some other stuff. - if world.mode[player] != 'inverted': - world.get_entrance('Turtle Rock Teleporter', player).access_rule = lambda state: (state.can_boots_clip_lw(player) or state.can_lift_heavy_rocks(player)) and state.has('Hammer', player) - add_alternate_rule(world.get_entrance('Waterfall of Wishing Cave Entry', player), lambda state: state.has('Moon Pearl', player) or state.has_Boots(player)) - else: - add_alternate_rule(world.get_entrance('Waterfall of Wishing Cave Entry', player), lambda state: state.has('Moon Pearl', player)) - - world.get_entrance('Dark Desert Teleporter', player).access_rule = lambda state: (state.can_flute(player) or state.has_Boots(player)) and state.can_lift_heavy_rocks(player) - add_alternate_rule(world.get_entrance('Catfish Exit Rock', player), lambda state: state.can_boots_clip_dw(player)) - add_alternate_rule(world.get_entrance('East Dark World Broken Bridge Pass', player), lambda state: state.can_boots_clip_dw(player)) + # TODO: Revisit below when we can guarantee water walk + # if world.mode[player] != 'inverted': + # add_alternate_rule(world.get_entrance('Waterfall of Wishing Cave Entry', player), lambda state: state.has_Pearl(player) or state.has_Boots(player)) + # else: + # add_alternate_rule(world.get_entrance('Waterfall of Wishing Cave Entry', player), lambda state: state.has_Pearl(player)) # Zora's Ledge via waterwalk setup. - add_alternate_rule(world.get_location('Zora\'s Ledge', player), lambda state: state.has_Boots(player)) + #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('Dark Tree Line Water Clip', player), lambda state: state.has('Flippers', player)) + def add_alternate_rule(entrance, rule): old_rule = entrance.access_rule entrance.access_rule = lambda state: old_rule(state) or rule(state) +def add_additional_rule(entrance, rule): + old_rule = entrance.access_rule + entrance.access_rule = lambda state: old_rule(state) and rule(state) + + def create_no_logic_connections(player, world, connections): for entrance, parent_region, target_region, *rule_override in connections: parent = world.get_region(parent_region, player) diff --git a/OverworldShuffle.py b/OverworldShuffle.py index 4cf2185b..31b52d91 100644 --- a/OverworldShuffle.py +++ b/OverworldShuffle.py @@ -245,7 +245,7 @@ def connect_two_way(world, edgename1, edgename2, player): else: x.dest = y y.dest = x - + if world.owShuffle[player] != 'vanilla': world.spoiler.set_overworld(edgename2, edgename1, 'both', player) @@ -289,7 +289,7 @@ test_connections = [ temporary_mandatory_connections = [ # Special OW Areas ('Lost Woods NW', 'Master Sword Meadow SC'), - ('Zora Approach NE', 'Zoras Domain SW'), + ('Zora Waterfall NE', 'Zoras Domain SW'), ('Stone Bridge WC', 'Hobo EC'), ] @@ -305,8 +305,8 @@ mandatory_connections = [('Flute Spot 1', 'West Death Mountain (Bottom)'), # Whirlpool Connections ('C Whirlpool', 'River Bend Water'), - ('River Bend Whirlpool', 'C Whirlpool Area'), - ('Lake Hylia Whirlpool', 'Zora Approach Area'), + ('River Bend Whirlpool', 'C Whirlpool Water'), + ('Lake Hylia Whirlpool', 'Zora Waterfall Water'), ('Zora Whirlpool', 'Lake Hylia Water'), ('Kakariko Pond Whirlpool', 'Octoballoon Water'), ('Octoballoon Whirlpool', 'Kakariko Pond Area'), @@ -317,8 +317,10 @@ mandatory_connections = [('Flute Spot 1', 'West Death Mountain (Bottom)'), ('Death Mountain Entrance Rock', 'Death Mountain Entrance'), ('Death Mountain Entrance Drop', 'Mountain Entry Area'), ('Death Mountain Return Drop', 'Mountain Entry Area'), + ('Zora Waterfall Landing', 'Zora Waterfall Area'), + ('Zora Waterfall Water Drop', 'Zora Waterfall Water'), + ('Zora Waterfall Water Entry', 'Zora Waterfall Water'), ('Waterfall of Wishing Cave Entry', 'Waterfall of Wishing Cave'), - ('Zora Approach Water Drop', 'Zora Approach Area'), ('Bonk Rock Ledge Drop', 'Sanctuary Area'), ('Kings Grave Outer Rocks', 'Kings Grave Area'), ('Kings Grave Inner Rocks', 'Graveyard Area'), @@ -331,7 +333,7 @@ mandatory_connections = [('Flute Spot 1', 'West Death Mountain (Bottom)'), ('Potion Shop Northeast Water Drop', 'Potion Shop Water'), ('Potion Shop Rock (South)', 'Potion Shop Northeast'), ('Potion Shop Rock (North)', 'Potion Shop Area'), - ('Zora Warning Water Drop', 'Zora Warning Water'), + ('Zora Approach Water Drop', 'Zora Approach Water'), ('Bat Cave Ledge Peg', 'Bat Cave Ledge'), ('Hyrule Castle Main Gate (South)', 'Hyrule Castle Courtyard'), ('Hyrule Castle Main Gate (North)', 'Hyrule Castle Area'), @@ -340,10 +342,15 @@ mandatory_connections = [('Flute Spot 1', 'West Death Mountain (Bottom)'), ('Hyrule Castle Inner East Rock', 'Hyrule Castle East Entry'), ('Hyrule Castle Outer East Rock', 'Hyrule Castle Area'), ('Wooden Bridge Water Drop', 'Wooden Bridge Water'), + ('Maze Race Game', 'Maze Race Prize'), ('Maze Race Ledge Drop', 'Maze Race Area'), - ('Cave 45 Ledge Drop', 'Cave 45 Area'), + ('Cave 45 Ledge Drop', 'Flute Boy Approach Area'), + ('C Whirlpool Water Entry', 'C Whirlpool Water'), + ('C Whirlpool Landing', 'C Whirlpool Area'), ('C Whirlpool Rock (Bottom)', 'C Whirlpool Outer Area'), ('C Whirlpool Rock (Top)', 'C Whirlpool Area'), + ('Statues Water Entry', 'Statues Water'), + ('Statues Landing', 'Statues Area'), ('Desert Palace Statue Move', 'Desert Palace Stairs'), ('Desert Ledge Drop', 'Desert Area'), ('Desert Ledge Outer Rocks', 'Desert Palace Entrance (North) Spot'), @@ -378,7 +385,9 @@ mandatory_connections = [('Flute Spot 1', 'West Death Mountain (Bottom)'), ('Fairy Ascension Plateau Drop', 'East Death Mountain (Bottom)'), ('Fairy Ascension Rocks', 'Fairy Ascension Plateau'), ('DM Broken Bridge (West)', 'East Death Mountain (Bottom)'), - ('DM Broken Bridge (East)', 'East Death Mountain (Bottom Left)'), + ('DM Broken Bridge (East)', 'East Death Mountain (West Lip)'), + ('TR Pegs Ledge Entry', 'Death Mountain TR Pegs Ledge'), + ('TR Pegs Ledge Drop', 'Death Mountain TR Pegs'), ('Skull Woods Bush Rock (West)', 'Skull Woods Forest'), ('Skull Woods Bush Rock (East)', 'Skull Woods Portal Entry'), @@ -414,28 +423,87 @@ mandatory_connections = [('Flute Spot 1', 'West Death Mountain (Bottom)'), ('Dig Game Ledge Drop', 'Dig Game Area'), ('Frog Ledge Drop', 'Archery Game Area'), ('Archery Game Rock', 'Frog Area'), - ('Circle of Bushes Bush (North)', 'Circle of Bushes Area'), - ('Circle of Bushes Bush (South)', 'Circle of Bushes Stumpy Entry'), + ('Stumpy Approach Bush (North)', 'Stumpy Approach Area'), + ('Stumpy Approach Bush (South)', 'Stumpy Approach Bush Entry'), + ('Dark C Whirlpool Water Entry', 'Dark C Whirlpool Water'), + ('Dark C Whirlpool Landing', 'Dark C Whirlpool Area'), ('Dark C Whirlpool Rock (Bottom)', 'Dark C Whirlpool Outer Area'), ('Dark C Whirlpool Rock (Top)', 'Dark C Whirlpool Area'), + ('Hype Cave Water Entry', 'Hype Cave Water'), + ('Hype Cave Landing', 'Hype Cave Area'), ('Hammer Bridge Pegs (North)', 'Hammer Bridge South Area'), ('Hammer Bridge Pegs (South)', 'Hammer Bridge North Area'), ('Hammer Bridge Water Drop', 'Hammer Bridge Water'), ('Hammer Bridge Pier', 'Hammer Bridge North Area'), + ('Misery Mire Teleporter Ledge Drop', 'Misery Mire Area'), ('Ice Lake Water Drop', 'Ice Lake Water'), ('Ice Lake Northeast Water Drop', 'Ice Lake Water'), ('Ice Lake Southwest Water Drop', 'Ice Lake Water'), ('Ice Lake Southeast Water Drop', 'Ice Lake Water'), + ('Ice Lake Moat Water Drop', 'Ice Lake Water'), ('Ice Lake Northeast Pier', 'Ice Lake Northeast Bank'), ('Bomber Corner Water Drop', 'Bomber Corner Water'), ('Bomber Corner Waterfall Water Drop', 'Bomber Corner Water'), ('Bomber Corner Pier', 'Bomber Corner Area'), - ('Dark Death Mountain Drop (West)', 'Dark Death Mountain (West Bottom)'), - ('Dark Death Mountain Drop (East)', 'Dark Death Mountain (East Bottom)'), - ('Floating Island Drop', 'Dark Death Mountain (Top East)'), + ('Dark Death Mountain Drop (West)', 'West Dark Death Mountain (Bottom)'), + ('GT Approach Entry', 'GT Approach'), + ('Dark Death Mountain Drop (East)', 'East Dark Death Mountain (Bottom)'), + ('Floating Island Drop', 'East Dark Death Mountain (Top)'), ('Turtle Rock Ledge Drop', 'Turtle Rock 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 C Whirlpool Area'), + ('Statues Cliff Ledge Drop', 'Statues Area'), + ('Lake Hylia Island FAWT Ledge Drop', 'Lake Hylia Island'), + ('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'), + + ('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 Bomb Jump', 'Ice Lake Northeast Bank'), + ('Dark C Whirlpool Cliff Ledge Drop', 'Dark C Whirlpool Area'), + ('Dark C Whirlpool Outer Cliff Ledge Drop', 'Dark C Whirlpool Outer Area'), + #('Dark South Teleporter Cliff Ledge Drop', 'C Whirlpool Area'), #inverted only, add glove requirement + ('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 + # Portal Connections ('Kakariko Teleporter (Hammer)', 'Skull Woods Pass East Top Area'), ('Kakariko Teleporter (Rock)', 'Skull Woods Pass East Top Area'), @@ -443,11 +511,11 @@ mandatory_connections = [('Flute Spot 1', 'West Death Mountain (Bottom)'), ('Top of Pyramid (Inner)', 'Pyramid Area'), ('East Hyrule Teleporter', 'Palace of Darkness Nook Area'), ('South Hyrule Teleporter', 'Dark C Whirlpool Area'), - ('Desert Teleporter', 'Misery Mire Area'), + ('Desert Teleporter', 'Misery Mire Teleporter Ledge'), ('Lake Hylia Teleporter', 'Ice Palace Area'), - ('West Death Mountain Teleporter', 'Dark Death Mountain (West Bottom)'), - ('East Death Mountain Teleporter', 'Dark Death Mountain (East Bottom)'), - ('Turtle Rock Teleporter', 'Turtle Rock Ledge'), + ('West Death Mountain Teleporter', 'West Dark Death Mountain (Bottom)'), + ('East Death Mountain Teleporter', 'East Dark Death Mountain (Bottom)'), + ('TR Pegs Teleporter', 'Turtle Rock Ledge'), # Mirror Connections ('Lost Woods Mirror Spot', 'Lost Woods Area'), @@ -472,8 +540,8 @@ mandatory_connections = [('Flute Spot 1', 'West Death Mountain (Bottom)'), ('River Bend East Mirror Spot', 'River Bend East Bank'), ('Potion Shop Mirror Spot', 'Potion Shop Area'), ('Potion Shop Northeast Mirror Spot', 'Potion Shop Northeast'), - ('Zora Warning Mirror Spot', 'Zora Warning Area'), ('Zora Approach Mirror Spot', 'Zora Approach Area'), + ('Zora Waterfall Mirror Spot', 'Zora Waterfall Area'), ('Kakariko Mirror Spot', 'Kakariko Area'), ('Kakariko Grass Mirror Spot', 'Kakariko Area'), ('Blacksmith Mirror Spot', 'Blacksmith Area'), @@ -509,7 +577,8 @@ mandatory_connections = [('Flute Spot 1', 'West Death Mountain (Bottom)'), ('Checkerboard Mirror Spot', 'Desert Checkerboard Ledge'), ('DP Stairs Mirror Spot', 'Desert Palace Stairs'), ('DP Entrance (North) Mirror Spot', 'Desert Palace Entrance (North) Spot'), - ('Bombos Tablet Mirror Spot', 'Desert Pass Ledge'), + ('Bombos Tablet Ledge Mirror Spot', 'Bombos Tablet Ledge'), + ('Desert Pass Ledge Mirror Spot', 'Desert Pass Ledge'), ('Desert Pass Mirror Spot', 'Desert Pass Area'), ('Dam Mirror Spot', 'Dam Area'), ('Statues Mirror Spot', 'Statues Area'), @@ -520,6 +589,7 @@ mandatory_connections = [('Flute Spot 1', 'West Death Mountain (Bottom)'), ('South Shore East Mirror Spot', 'Lake Hylia South Shore'), ('Lake Hylia Island Mirror Spot', 'Lake Hylia Island'), ('Lake Hylia Central Island Mirror Spot', 'Lake Hylia Central Island'), + ('Lake Hylia Water Mirror Spot', 'Lake Hylia Water'), ('Octoballoon Mirror Spot', 'Octoballoon Area'), ('Ice Cave Mirror Spot', 'Ice Cave Area'), ('Spectacle Rock Mirror Spot', 'Spectacle Rock Ledge'), @@ -530,8 +600,8 @@ mandatory_connections = [('Flute Spot 1', 'West Death Mountain (Bottom)'), ('Mimic Cave Mirror Spot', 'Mimic Cave Ledge'), ('Isolated Ledge Mirror Spot', 'Fairy Ascension Ledge'), ('Fairy Ascension Mirror Spot', 'Fairy Ascension Plateau'), - ('Death Mountain Bridge Mirror Spot', 'East Death Mountain (Bottom Left)'), - ('Floating Island Mirror Spot', 'Death Mountain Floating Island (Light World)'), + ('Death Mountain Bridge Mirror Spot', 'East Death Mountain (West Lip)'), + ('Floating Island Mirror Spot', 'Death Mountain Floating Island'), ('TR Pegs Area Mirror Spot', 'Death Mountain TR Pegs') ] @@ -561,7 +631,7 @@ parallel_links = bidict({'Lost Woods SW': 'Skull Woods SW', 'Death Mountain TR Pegs WN': 'Turtle Rock WN', 'Mountain Entry NW': 'Bumper Cave NW', 'Mountain Entry SE': 'Bumper Cave SE', - 'Zora Approach SE': 'Catfish SE', + 'Zora Waterfall SE': 'Catfish SE', 'Lost Woods Pass NW': 'Skull Woods Pass NW', 'Lost Woods Pass NE': 'Skull Woods Pass NE', 'Lost Woods Pass SW': 'Skull Woods Pass SW', @@ -594,9 +664,9 @@ parallel_links = bidict({'Lost Woods SW': 'Skull Woods SW', 'Potion Shop WS': 'Dark Witch WS', 'Potion Shop EN': 'Dark Witch EN', 'Potion Shop EC': 'Dark Witch EC', - 'Zora Warning NE': 'Catfish Approach NE', - 'Zora Warning WN': 'Catfish Approach WN', - 'Zora Warning WC': 'Catfish Approach WC', + 'Zora Approach NE': 'Catfish Approach NE', + 'Zora Approach WN': 'Catfish Approach WN', + 'Zora Approach WC': 'Catfish Approach WC', 'Kakariko NW': 'Village of Outcasts NW', 'Kakariko NC': 'Village of Outcasts NC', 'Kakariko NE': 'Village of Outcasts NE', @@ -646,9 +716,9 @@ parallel_links = bidict({'Lost Woods SW': 'Skull Woods SW', 'Tree Line WN': 'Dark Tree Line WN', 'Tree Line WC': 'Dark Tree Line WC', 'Eastern Nook NE': 'Palace of Darkness Nook NE', - 'Cave 45 NW': 'Circle of Bushes NW', - 'Cave 45 NC': 'Circle of Bushes NC', - 'Cave 45 EC': 'Circle of Bushes EC', + 'Flute Boy Approach NW': 'Stumpy Approach NW', + 'Flute Boy Approach NC': 'Stumpy Approach NC', + 'Flute Boy Approach EC': 'Stumpy Approach EC', 'C Whirlpool NW': 'Dark C Whirlpool NW', 'C Whirlpool SC': 'Dark C Whirlpool SC', 'C Whirlpool WC': 'Dark C Whirlpool WC', @@ -708,9 +778,9 @@ default_connections = [('Lost Woods SW', 'Lost Woods Pass NW'), ('River Bend EN', 'Potion Shop WN'), ('River Bend EC', 'Potion Shop WC'), ('River Bend ES', 'Potion Shop WS'), - ('Potion Shop EN', 'Zora Warning WN'), - ('Potion Shop EC', 'Zora Warning WC'), - ('Zora Warning NE', 'Zora Approach SE'), + ('Potion Shop EN', 'Zora Approach WN'), + ('Potion Shop EC', 'Zora Approach WC'), + ('Zora Approach NE', 'Zora Waterfall SE'), ('Kakariko SE', 'Kakariko Suburb NE'), ('Kakariko ES', 'Blacksmith WS'), ('Hyrule Castle SW', 'Central Bonk Rocks NW'), @@ -722,9 +792,9 @@ default_connections = [('Lost Woods SW', 'Lost Woods Pass NW'), ('Eastern Palace SE', 'Eastern Nook NE'), ('Maze Race ES', 'Kakariko Suburb WS'), ('Kakariko Suburb ES', 'Flute Boy WS'), - ('Flute Boy SW', 'Cave 45 NW'), - ('Flute Boy SC', 'Cave 45 NC'), - ('Cave 45 EC', 'C Whirlpool WC'), + ('Flute Boy SW', 'Flute Boy Approach NW'), + ('Flute Boy SC', 'Flute Boy Approach NC'), + ('Flute Boy Approach EC', 'C Whirlpool WC'), ('C Whirlpool NW', 'Central Bonk Rocks SW'), ('C Whirlpool SC', 'Dam NC'), ('C Whirlpool EN', 'Statues WN'), @@ -793,9 +863,9 @@ default_connections = [('Lost Woods SW', 'Lost Woods Pass NW'), ('Dig Game EC', 'Frog WC'), ('Dig Game ES', 'Frog WS'), ('Frog ES', 'Stumpy WS'), - ('Stumpy SW', 'Circle of Bushes NW'), - ('Stumpy SC', 'Circle of Bushes NC'), - ('Circle of Bushes EC', 'Dark C Whirlpool WC'), + ('Stumpy SW', 'Stumpy Approach NW'), + ('Stumpy SC', 'Stumpy Approach NC'), + ('Stumpy Approach EC', 'Dark C Whirlpool WC'), ('Dark C Whirlpool NW', 'Dark Bonk Rocks SW'), ('Dark C Whirlpool SC', 'Swamp NC'), ('Dark C Whirlpool EN', 'Hype Cave WN'), diff --git a/Regions.py b/Regions.py index 9047dcd1..e3d9c41c 100644 --- a/Regions.py +++ b/Regions.py @@ -8,18 +8,35 @@ def create_regions(world, player): create_menu_region(player, 'Menu', None, ['Links House S&Q', 'Sanctuary S&Q', 'Old Man S&Q']), create_menu_region(player, 'Flute Sky', None, ['Flute Spot 1', 'Flute Spot 2', 'Flute Spot 3', 'Flute Spot 4', 'Flute Spot 5', 'Flute Spot 6', 'Flute Spot 7', 'Flute Spot 8']), - create_lw_region(player, 'Lost Woods Area', ['Mushroom'], ['Lost Woods Gamble', 'Lost Woods Hideout Drop', 'Lost Woods Hideout Stump', 'Lost Woods NW', 'Lost Woods SW', 'Lost Woods SC', 'Lost Woods SE', 'Lost Woods EN']), create_lw_region(player, 'Master Sword Meadow', ['Master Sword Pedestal'], ['Master Sword Meadow SC']), + create_lw_region(player, 'Lost Woods Area', ['Mushroom'], ['Lost Woods Gamble', 'Lost Woods Hideout Drop', 'Lost Woods Hideout Stump', 'Lost Woods NW', 'Lost Woods SW', 'Lost Woods SC', 'Lost Woods SE', 'Lost Woods EN']), create_lw_region(player, 'Lumberjack Area', None, ['Lumberjack Tree Tree', 'Lumberjack Tree Cave', 'Lumberjack House', 'Lumberjack WN', 'Lumberjack SW']), + create_lw_region(player, 'West Death Mountain (Top)', ['Ether Tablet'], ['Tower of Hera', 'West Death Mountain Drop', 'West Death Mountain EN']), + create_lw_region(player, 'Spectacle Rock Ledge', ['Spectacle Rock'], ['Spectacle Rock Drop']), + create_lw_region(player, 'West Death Mountain (Bottom)', None, ['Old Man Cave (East)', 'Old Man House (Bottom)', 'Old Man House (Top)', 'Death Mountain Return Cave (East)', 'Spectacle Rock Cave', 'Spectacle Rock Cave Peak', 'Spectacle Rock Cave (Bottom)', 'West Death Mountain Teleporter', 'West Death Mountain ES']), + create_lw_region(player, 'East Death Mountain (Top West)', None, ['DM Hammer Bridge (West)', 'East Death Mountain WN']), + create_lw_region(player, 'East Death Mountain (Top East)', None, ['Paradox Cave (Top)', 'DM Hammer Bridge (East)', 'East Death Mountain Spiral Drop', 'East Death Mountain Fairy Drop', 'East Death Mountain EN']), + create_lw_region(player, 'Spiral Cave Ledge', None, ['Spiral Cave', 'Spiral Ledge Drop']), + create_lw_region(player, 'Mimic Cave Ledge', None, ['Mimic Cave']), + create_lw_region(player, 'Fairy Ascension Ledge', None, ['Fairy Ascension Ledge Drop', 'Fairy Ascension Cave (Top)']), + create_lw_region(player, 'Fairy Ascension Plateau', None, ['Fairy Ascension Plateau Drop', 'Fairy Ascension Cave (Bottom)']), + create_lw_region(player, 'East Death Mountain (West Lip)', None, ['DM Broken Bridge (West)', 'East Death Mountain WS']), + create_lw_region(player, 'East Death Mountain (Bottom)', None, ['DM Broken Bridge (East)', 'Paradox Cave (Bottom)', 'Paradox Cave (Middle)', 'Hookshot Fairy', 'Spiral Cave (Bottom)', 'Fairy Ascension Rocks', 'East Death Mountain Teleporter']), + create_lw_region(player, 'Death Mountain Floating Island', ['Floating Island']), + create_lw_region(player, 'Death Mountain TR Pegs', None, ['Death Mountain TR Pegs WN', 'TR Pegs Ledge Entry']), + create_lw_region(player, 'Death Mountain TR Pegs Ledge', None, ['TR Pegs Ledge Drop', 'TR Pegs Teleporter']), create_lw_region(player, 'Mountain Entry Area', None, ['Death Mountain Entrance Rock', 'Mountain Entry NW', 'Mountain Entry SE']), create_lw_region(player, 'Death Mountain Entrance', None, ['Old Man Cave (West)', 'Death Mountain Entrance Drop']), create_lw_region(player, 'Death Mountain Return Ledge', None, ['Death Mountain Return Cave (West)', 'Death Mountain Return Drop']), + create_lw_region(player, 'Zora Waterfall Area', None, ['Zora Waterfall Water Entry', 'Zora Waterfall SE', 'Zora Waterfall NE']), + create_lw_region(player, 'Zora Waterfall Water', None, ['Waterfall of Wishing Cave Entry', 'Zora Waterfall Landing', 'Zora Whirlpool']), + create_lw_region(player, 'Waterfall of Wishing Cave', None, ['Waterfall of Wishing', 'Zora Waterfall Water Drop']), + create_lw_region(player, 'Zoras Domain', ['King Zora', 'Zora\'s Ledge'], ['Zoras Domain SW']), create_lw_region(player, 'Lost Woods Pass West Area', None, ['Lost Woods Pass NW', 'Lost Woods Pass SW']), create_lw_region(player, 'Lost Woods Pass East Top Area', None, ['Kakariko Teleporter (Hammer)', 'Lost Woods Pass NE']), create_lw_region(player, 'Lost Woods Pass East Bottom Area', None, ['Kakariko Teleporter (Rock)', 'Lost Woods Pass SE']), create_lw_region(player, 'Kakariko Fortune Area', None, ['Fortune Teller (Light)', 'Kakariko Fortune NE', 'Kakariko Fortune EN', 'Kakariko Fortune ES', 'Kakariko Fortune SC']), create_lw_region(player, 'Kakariko Pond Area', None, ['Kakariko Pond NE', 'Kakariko Pond WN', 'Kakariko Pond WS', 'Kakariko Pond SW', 'Kakariko Pond SE', 'Kakariko Pond EN', 'Kakariko Pond ES', 'Kakariko Pond Whirlpool']), - create_lw_region(player, 'Forgotten Forest Area', None, ['Forgotten Forest NW', 'Forgotten Forest NE', 'Forgotten Forest ES']), create_lw_region(player, 'Sanctuary Area', None, ['Sanctuary', 'Sanctuary WS', 'Sanctuary EC']), create_lw_region(player, 'Bonk Rock Ledge', None, ['Bonk Rock Cave', 'Bonk Rock Ledge Drop', 'Sanctuary WN']), create_lw_region(player, 'Graveyard Area', None, ['Sanctuary Grave', 'Kings Grave Outer Rocks', 'Graveyard WC', 'Graveyard EC']), @@ -31,41 +48,38 @@ def create_regions(world, player): create_lw_region(player, 'Potion Shop Area', None, ['Potion Shop', 'Potion Shop Water Drop', 'Potion Shop Rock (South)', 'Potion Shop WC', 'Potion Shop WS']), create_lw_region(player, 'Potion Shop Northeast', None, ['Potion Shop Northeast Water Drop', 'Potion Shop Rock (North)', 'Potion Shop EC']), create_lw_region(player, 'Potion Shop Water', None, ['Potion Shop WN', 'Potion Shop EN']), - create_lw_region(player, 'Zora Warning Area', None, ['Zora Warning Water Drop', 'Zora Warning WC', 'Zora Warning NE']), - create_lw_region(player, 'Zora Warning Water', None, ['Zora Warning WN']), - create_lw_region(player, 'Zora Approach Area', None, ['Waterfall of Wishing Cave Entry', 'Zora Approach SE', 'Zora Approach NE', 'Zora Whirlpool']), - create_lw_region(player, 'Waterfall of Wishing Cave', None, ['Waterfall of Wishing', 'Zora Approach Water Drop']), - create_lw_region(player, 'Zoras Domain', ['King Zora', 'Zora\'s Ledge'], ['Zoras Domain SW']), + create_lw_region(player, 'Zora Approach Area', None, ['Zora Approach Water Drop', 'Zora Approach WC', 'Zora Approach NE']), + create_lw_region(player, 'Zora Approach Water', None, ['Zora Approach WN']), create_lw_region(player, 'Kakariko Area', ['Bottle Merchant'], ['Kakariko Well Drop', 'Kakariko Well Cave', 'Blinds Hideout', 'Elder House (West)', 'Elder House (East)', - 'Snitch Lady (West)', 'Snitch Lady (East)', 'Chicken House', 'Sick Kids House', 'Bush Covered House', 'Light World Bomb Hut', - 'Kakariko Shop', 'Tavern (Front)', 'Tavern North', 'Kakariko NW', 'Kakariko NC', 'Kakariko NE', 'Kakariko ES', 'Kakariko SE']), - create_lw_region(player, 'Blacksmith Area', None, ['Blacksmiths Hut', 'Bat Cave Cave', 'Bat Cave Ledge Peg', 'Blacksmith WS']), - create_lw_region(player, 'Bat Cave Ledge', None, ['Bat Cave Drop']), + 'Snitch Lady (West)', 'Snitch Lady (East)', 'Chicken House', 'Sick Kids House', 'Bush Covered House', 'Light World Bomb Hut', + 'Kakariko Shop', 'Tavern (Front)', 'Tavern North', 'Kakariko NW', 'Kakariko NC', 'Kakariko NE', 'Kakariko ES', 'Kakariko SE']), + create_lw_region(player, 'Forgotten Forest Area', None, ['Forgotten Forest NW', 'Forgotten Forest NE', 'Forgotten Forest ES']), create_lw_region(player, 'Hyrule Castle Area', None, ['Hyrule Castle Secret Entrance Drop', 'Top of Pyramid', 'Hyrule Castle Main Gate (South)', 'Hyrule Castle Inner East Rock', 'Hyrule Castle WN', 'Hyrule Castle SW', 'Hyrule Castle SE']), create_lw_region(player, 'Hyrule Castle Courtyard', None, ['Hyrule Castle Secret Entrance Stairs', 'Hyrule Castle Entrance (South)', 'Hyrule Castle Main Gate (North)', 'Top of Pyramid (Inner)']), create_lw_region(player, 'Hyrule Castle Ledge', None, ['Hyrule Castle Entrance (West)', 'Agahnims Tower', 'Hyrule Castle Entrance (East)', 'Hyrule Castle Ledge Drop', 'Hyrule Castle Ledge Courtyard Drop']), create_lw_region(player, 'Hyrule Castle East Entry', None, ['Hyrule Castle Outer East Rock', 'Hyrule Castle ES']), create_lw_region(player, 'Wooden Bridge Area', None, ['Wooden Bridge Water Drop', 'Wooden Bridge NW', 'Wooden Bridge NE', 'Wooden Bridge SW']), create_lw_region(player, 'Wooden Bridge Water', None, ['Wooden Bridge NC']), - create_lw_region(player, 'Sand Dunes Area', None, ['Sand Dunes NW', 'Sand Dunes WN', 'Sand Dunes SC']), create_lw_region(player, 'Eastern Palace Area', None, ['Sahasrahlas Hut', 'Eastern Palace', 'Eastern Palace SW', 'Eastern Palace SE']), - create_lw_region(player, 'Eastern Nook Area', None, ['Long Fairy Cave', 'East Hyrule Teleporter', 'Eastern Nook NE']), + create_lw_region(player, 'Eastern Cliff', None, ['Sand Dunes Ledge Drop', 'Stone Bridge East Ledge Drop', 'Tree Line Ledge Drop', 'Eastern Palace Ledge Drop']), + create_lw_region(player, 'Blacksmith Area', None, ['Blacksmiths Hut', 'Bat Cave Cave', 'Bat Cave Ledge Peg', 'Blacksmith WS']), + create_lw_region(player, 'Bat Cave Ledge', None, ['Bat Cave Drop']), + create_lw_region(player, 'Sand Dunes Area', None, ['Sand Dunes NW', 'Sand Dunes WN', 'Sand Dunes SC']), create_lw_region(player, 'Maze Race Area', None, ['Maze Race ES']), - create_lw_region(player, 'Maze Race Ledge', ['Maze Race'], ['Two Brothers House (West)', 'Maze Race Ledge Drop']), + create_lw_region(player, 'Maze Race Ledge', None, ['Two Brothers House (West)', 'Maze Race Game']), + create_lw_region(player, 'Maze Race Prize', ['Maze Race'], ['Maze Race Ledge Drop']), #this is a separate region to make OWG item get possible without allowing the Entrance access create_lw_region(player, 'Kakariko Suburb Area', None, ['Library', 'Two Brothers House (East)', 'Kakariko Gamble Game', 'Kakariko Suburb NE', 'Kakariko Suburb WS', 'Kakariko Suburb ES']), create_lw_region(player, 'Flute Boy Area', ['Flute Spot'], ['Flute Boy SC']), create_lw_region(player, 'Flute Boy Pass', None, ['Flute Boy WS', 'Flute Boy SW']), - create_lw_region(player, 'Cave 45 Area', None, ['Cave 45 NW', 'Cave 45 NC', 'Cave 45 EC']), - create_lw_region(player, 'Cave 45 Ledge', None, ['Cave 45', 'Cave 45 Ledge Drop']), - create_lw_region(player, 'C Whirlpool Area', None, ['C Whirlpool Rock (Bottom)', 'South Hyrule Teleporter', 'C Whirlpool EN', 'C Whirlpool EC', 'C Whirlpool ES', 'C Whirlpool SC', 'C Whirlpool']), - create_lw_region(player, 'C Whirlpool Outer Area', None, ['C Whirlpool Rock (Top)', 'C Whirlpool WC', 'C Whirlpool NW']), create_lw_region(player, 'Central Bonk Rocks Area', None, ['Bonk Fairy (Light)', 'Central Bonk Rocks NW', 'Central Bonk Rocks SW', 'Central Bonk Rocks EN', 'Central Bonk Rocks EC', 'Central Bonk Rocks ES']), create_lw_region(player, 'Links House Area', None, ['Links House', 'Links House NE', 'Links House WN', 'Links House WC', 'Links House WS', 'Links House SC', 'Links House ES', 'Flute Away']), create_lw_region(player, 'Stone Bridge Area', None, ['Stone Bridge NC', 'Stone Bridge EN', 'Stone Bridge WS', 'Stone Bridge SC']), create_lw_region(player, 'Stone Bridge Water', None, ['Stone Bridge WC', 'Stone Bridge EC']), create_lw_region(player, 'Hobo Bridge', ['Hobo'], ['Hobo EC']), + create_lw_region(player, 'Central Cliffs', None, ['Central Bonk Rocks Cliff Ledge Drop', 'Links House Cliff Ledge Drop', 'Stone Bridge Cliff Ledge Drop', 'Lake Hylia Area Cliff Ledge Drop', 'Lake Hylia Island FAWT Ledge Drop', 'Stone Bridge EC Cliff Water Drop', 'Tree Line WC Cliff Water Drop', 'C Whirlpool Outer Cliff Ledge Drop', 'C Whirlpool Cliff Ledge Drop', 'South Teleporter Cliff Ledge Drop', 'Statues Cliff Ledge Drop']), create_lw_region(player, 'Tree Line Area', None, ['Lake Hylia Fairy', 'Tree Line WN', 'Tree Line NW', 'Tree Line SE']), create_lw_region(player, 'Tree Line Water', None, ['Tree Line WC', 'Tree Line SC']), + create_lw_region(player, 'Eastern Nook Area', None, ['Long Fairy Cave', 'East Hyrule Teleporter', 'Eastern Nook NE']), create_lw_region(player, 'Desert Area', None, ['Aginahs Cave', 'Desert Palace Statue Move', 'Desert ES']), create_lw_region(player, 'Desert Ledge', ['Desert Ledge'], ['Desert Palace Entrance (West)', 'Desert Ledge Outer Rocks', 'Desert Ledge Drop']), create_lw_region(player, 'Desert Palace Entrance (North) Spot', None, ['Desert Palace Entrance (North)', 'Desert Ledge Inner Rocks']), @@ -73,53 +87,58 @@ def create_regions(world, player): create_lw_region(player, 'Desert Palace Stairs', None, ['Desert Palace Entrance (South)']), create_lw_region(player, 'Desert Palace Mouth', None, ['Desert Palace Entrance (East)', 'Desert Mouth Drop']), 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, 'Bombos Tablet Ledge', ['Bombos Tablet'], ['Bombos Tablet Drop', 'Desert EC']), - create_lw_region(player, 'Desert Pass Area', ['Purple Chest'], ['Desert Fairy', '50 Rupee Cave', 'Desert Pass WS', 'Desert Pass EC', 'Desert Pass Rocks (North)']), - create_lw_region(player, 'Desert Pass Southeast', None, ['Desert Pass Rocks (South)', 'Desert Pass ES']), - create_lw_region(player, 'Desert Pass Ledge', None, ['Desert Pass Ledge Drop', 'Desert Pass WC']), - create_lw_region(player, 'Dam Area', ['Sunken Treasure'], ['Dam', 'Dam WC', 'Dam WS', 'Dam NC', 'Dam EC']), - create_lw_region(player, 'Statues Area', None, ['Light Hype Fairy', 'Statues NC', 'Statues WN', 'Statues WC', 'Statues WS', 'Statues SC']), - create_lw_region(player, 'South Pass Area', None, ['South Pass WC', 'South Pass NC', 'South Pass ES']), + create_lw_region(player, 'Flute Boy Approach Area', None, ['Flute Boy Approach NW', 'Flute Boy Approach NC', 'Flute Boy Approach EC']), + create_lw_region(player, 'Cave 45 Ledge', None, ['Cave 45', 'Cave 45 Ledge Drop']), + create_lw_region(player, 'C Whirlpool Area', None, ['C Whirlpool Rock (Bottom)', 'C Whirlpool Water Entry', 'South Hyrule Teleporter', 'C Whirlpool EN', 'C Whirlpool ES', 'C Whirlpool SC']), + create_lw_region(player, 'C Whirlpool Water', None, ['C Whirlpool Landing', 'C Whirlpool EC', 'C Whirlpool']), + create_lw_region(player, 'C Whirlpool Outer Area', None, ['C Whirlpool Rock (Top)', 'C Whirlpool WC', 'C Whirlpool NW']), + create_lw_region(player, 'Statues Area', None, ['Light Hype Fairy', 'Statues Water Entry', 'Statues NC', 'Statues WN', 'Statues WS', 'Statues SC']), + create_lw_region(player, 'Statues Water', None, ['Statues Landing', 'Statues WC']), create_lw_region(player, 'Lake Hylia Area', None, ['Lake Hylia Fortune Teller', 'Cave Shop (Lake Hylia)', 'Lake Hylia Water Drop', 'Lake Hylia NW']), create_lw_region(player, 'Lake Hylia South Shore', None, ['Mini Moldorm Cave', 'Lake Hylia South Water Drop', 'Lake Hylia WS', 'Lake Hylia ES']), create_lw_region(player, 'Lake Hylia Northeast Bank', None, ['Lake Hylia Northeast Water Drop', 'Lake Hylia NE']), create_lw_region(player, 'Lake Hylia Central Island', None, ['Capacity Upgrade', 'Lake Hylia Central Water Drop', 'Lake Hylia Teleporter']), create_lw_region(player, 'Lake Hylia Island', ['Lake Hylia Island'], ['Lake Hylia Island Water Drop']), create_lw_region(player, 'Lake Hylia Water', None, ['Lake Hylia Central Island Pier', 'Lake Hylia West Pier', 'Lake Hylia East Pier', 'Lake Hylia NC', 'Lake Hylia EC', 'Lake Hylia Whirlpool']), + create_lw_region(player, 'Ice Cave Area', None, ['Ice Rod Cave', 'Good Bee Cave', '20 Rupee Cave', 'Ice Cave SE', 'Ice Cave SW']), + create_lw_region(player, 'Desert Pass Area', ['Purple Chest'], ['Desert Fairy', '50 Rupee Cave', 'Desert Pass WS', 'Desert Pass EC', 'Desert Pass Rocks (North)']), + create_lw_region(player, 'Desert Pass Southeast', None, ['Desert Pass Rocks (South)', 'Desert Pass ES']), + create_lw_region(player, 'Desert Pass Ledge', None, ['Desert Pass Ledge Drop', 'Desert Pass WC']), + create_lw_region(player, 'Dam Area', ['Sunken Treasure'], ['Dam', 'Dam WC', 'Dam WS', 'Dam NC', 'Dam EC']), + create_lw_region(player, 'South Pass Area', None, ['South Pass WC', 'South Pass NC', 'South Pass ES']), create_lw_region(player, 'Octoballoon Area', None, ['Octoballoon Water Drop', 'Octoballoon WS', 'Octoballoon NE']), create_lw_region(player, 'Octoballoon Water', None, ['Octoballoon Pier', 'Octoballoon WC', 'Octoballoon Whirlpool']), create_lw_region(player, 'Octoballoon Water Ledge', None, ['Octoballoon Waterfall Water Drop', 'Octoballoon NW']), - create_lw_region(player, 'Ice Cave Area', None, ['Ice Rod Cave', 'Good Bee Cave', '20 Rupee Cave', 'Ice Cave SE', 'Ice Cave SW']), - create_lw_region(player, 'West Death Mountain (Bottom)', None, ['Old Man Cave (East)', 'Old Man House (Bottom)', 'Old Man House (Top)', 'Death Mountain Return Cave (East)', 'Spectacle Rock Cave', 'Spectacle Rock Cave Peak', 'Spectacle Rock Cave (Bottom)', 'West Death Mountain Teleporter', 'West Death Mountain ES']), - create_lw_region(player, 'West Death Mountain (Top)', ['Ether Tablet'], ['Tower of Hera', 'West Death Mountain Drop', 'West Death Mountain EN']), - create_lw_region(player, 'Spectacle Rock Ledge', ['Spectacle Rock'], ['Spectacle Rock Drop']), - create_lw_region(player, 'East Death Mountain (Top West)', None, ['DM Hammer Bridge (West)', 'East Death Mountain WN']), - create_lw_region(player, 'East Death Mountain (Top East)', None, ['Paradox Cave (Top)', 'DM Hammer Bridge (East)', 'East Death Mountain Spiral Drop', 'East Death Mountain Fairy Drop', 'East Death Mountain EN']), - create_lw_region(player, 'Spiral Cave Ledge', None, ['Spiral Cave', 'Spiral Ledge Drop']), - create_lw_region(player, 'Mimic Cave Ledge', None, ['Mimic Cave']), - create_lw_region(player, 'Fairy Ascension Ledge', None, ['Fairy Ascension Ledge Drop', 'Fairy Ascension Cave (Top)']), - create_lw_region(player, 'Fairy Ascension Plateau', None, ['Fairy Ascension Plateau Drop', 'Fairy Ascension Cave (Bottom)']), - create_lw_region(player, 'East Death Mountain (Bottom Left)', None, ['DM Broken Bridge (West)', 'East Death Mountain WS']), - create_lw_region(player, 'East Death Mountain (Bottom)', None, ['DM Broken Bridge (East)', 'Paradox Cave (Bottom)', 'Paradox Cave (Middle)', 'Hookshot Fairy', 'Spiral Cave (Bottom)', 'Fairy Ascension Rocks', 'East Death Mountain Teleporter']), - create_lw_region(player, 'Death Mountain Floating Island (Light World)', ['Floating Island']), - create_lw_region(player, 'Death Mountain TR Pegs', None, ['Death Mountain TR Pegs WN', 'Turtle Rock Teleporter']), create_dw_region(player, 'Skull Woods Forest', None, ['Skull Woods First Section Hole (East)', 'Skull Woods First Section Hole (West)', 'Skull Woods First Section Hole (North)', - 'Skull Woods First Section Door', 'Skull Woods Second Section Door (East)', 'Skull Woods Bush Rock (East)', 'Lost Woods Mirror Spot', 'Skull Woods SE']), + 'Skull Woods First Section Door', 'Skull Woods Second Section Door (East)', 'Skull Woods Bush Rock (East)', 'Lost Woods Mirror Spot', 'Skull Woods SE']), create_dw_region(player, 'Skull Woods Portal Entry', None, ['Skull Woods Bush Rock (West)', 'Lost Woods Entry Mirror Spot', 'Skull Woods SC']), create_dw_region(player, 'Skull Woods Forest (West)', None, ['Skull Woods Second Section Hole', 'Skull Woods Second Section Door (West)', 'Skull Woods Final Section', 'Lost Woods Pedestal Mirror Spot']), create_dw_region(player, 'Skull Woods Forgotten Path (Southwest)', None, ['Skull Woods Forgotten Bush (West)', 'Lost Woods Southwest Mirror Spot', 'Skull Woods SW']), create_dw_region(player, 'Skull Woods Forgotten Path (Northeast)', None, ['Skull Woods Forgotten Bush (East)', 'Lost Woods Northeast Mirror Spot', 'Skull Woods EN']), create_dw_region(player, 'Dark Lumberjack Area', None, ['Dark World Lumberjack Shop', 'Lumberjack Mirror Spot', 'Dark Lumberjack WN', 'Dark Lumberjack SW']), + create_dw_region(player, 'West Dark Death Mountain (Top)', None, ['Dark Death Mountain Drop (West)', 'GT Approach Entry', 'West Death Mountain (Top) Mirror Spot', 'West Dark Death Mountain EN']), + create_dw_region(player, 'GT Approach', None, ['Ganons Tower']), + create_dw_region(player, 'West Dark Death Mountain (Bottom)', None, ['Spike Cave', 'Dark Death Mountain Fairy', 'Spectacle Rock Mirror Spot', 'West Dark Death Mountain ES']), + create_dw_region(player, 'East Dark Death Mountain (Top)', None, ['Superbunny Cave (Top)', 'Hookshot Cave', 'Dark Death Mountain Drop (East)', 'East Death Mountain (Top West) Mirror Spot', 'East Death Mountain (Top East) Mirror Spot', 'East Dark Death Mountain WN', 'East Dark Death Mountain EN']), + create_dw_region(player, 'East Dark Death Mountain (Bottom)', None, ['Superbunny Cave (Bottom)', 'Cave Shop (Dark Death Mountain)', 'Fairy Ascension Mirror Spot']), + create_dw_region(player, 'East Dark Death Mountain (West Lip)', None, ['Death Mountain Bridge Mirror Spot', 'East Dark Death Mountain WS']), + create_dw_region(player, 'Dark Death Mountain Ledge', None, ['Dark Death Mountain Ledge (East)', 'Dark Death Mountain Ledge (West)', 'Spiral Cave Mirror Spot', 'Mimic Cave Mirror Spot']), + create_dw_region(player, 'Dark Death Mountain Isolated Ledge', None, ['Turtle Rock Isolated Ledge Entrance', 'Isolated Ledge Mirror Spot']), + create_dw_region(player, 'Dark Death Mountain Floating Island', None, ['Floating Island Drop', 'Hookshot Cave Back Entrance', 'Floating Island Mirror Spot']), + create_dw_region(player, 'Turtle Rock Area', None, ['Turtle Rock', 'TR Pegs Area Mirror Spot', 'Turtle Rock WN']), + create_dw_region(player, 'Turtle Rock Ledge', None, ['Turtle Rock Ledge Drop']), create_dw_region(player, 'Bumper Cave Area', None, ['Bumper Cave Entrance Rock', 'Mountain Entry Mirror Spot', 'Bumper Cave NW', 'Bumper Cave SE']), create_dw_region(player, 'Bumper Cave Entrance', None, ['Bumper Cave (Bottom)', 'Mountain Entry Entrance Mirror Spot', 'Bumper Cave Ledge Drop']), create_dw_region(player, 'Bumper Cave Ledge', ['Bumper Cave Ledge'], ['Bumper Cave (Top)', 'Mountain Entry Ledge Mirror Spot', 'Bumper Cave Entrance Drop']), + create_dw_region(player, 'Catfish Area', ['Catfish'], ['Zora Waterfall Mirror Spot', 'Catfish SE']), create_dw_region(player, 'Skull Woods Pass West Area', None, ['Skull Woods Pass Bush Row (West)', 'Lost Woods Pass West Mirror Spot', 'Skull Woods Pass NW', 'Skull Woods Pass SW']), create_dw_region(player, 'Skull Woods Pass East Top Area', None, ['Skull Woods Pass Bush Row (East)', 'Skull Woods Pass Rock (Top)', 'Lost Woods Pass East Top Mirror Spot', 'Skull Woods Pass NE']), create_dw_region(player, 'Skull Woods Pass East Bottom Area', None, ['Skull Woods Pass Rock (Bottom)', 'Lost Woods East Bottom Mirror Spot', 'Skull Woods Pass SE']), create_dw_region(player, 'Dark Fortune Area', None, ['Fortune Teller (Dark)', 'Kakariko Fortune Mirror Spot', 'Dark Fortune NE', 'Dark Fortune EN', 'Dark Fortune ES', 'Dark Fortune SC']), create_dw_region(player, 'Outcast Pond Area', None, ['Kakariko Pond Mirror Spot', 'Outcast Pond NE', 'Outcast Pond WN', 'Outcast Pond WS', 'Outcast Pond SW', 'Outcast Pond SE', 'Outcast Pond EN', 'Outcast Pond ES']), - create_dw_region(player, 'Shield Shop Area', None, ['Red Shield Shop', 'Forgotton Forest Mirror Spot', 'Shield Shop NW', 'Shield Shop NE']), create_dw_region(player, 'Dark Chapel Area', None, ['Dark Sanctuary Hint', 'Bonk Rock Ledge Mirror Spot', 'Dark Chapel WN', 'Dark Chapel WS', 'Dark Chapel EC']), create_dw_region(player, 'Dark Graveyard Area', None, ['Graveyard Ledge Mirror Spot', 'Kings Grave Mirror Spot', 'Dark Graveyard WC', 'Dark Graveyard ES']), create_dw_region(player, 'Qirn Jump Area', None, ['Qirn Jump Water Drop', 'River Bend Mirror Spot', 'Qirn Jump WC', 'Qirn Jump SW']), @@ -128,13 +147,11 @@ def create_regions(world, player): create_dw_region(player, 'Dark Witch Area', None, ['Dark World Potion Shop', 'Dark Witch Water Drop', 'Potion Shop Mirror Spot', 'Dark Witch Rock (South)', 'Dark Witch WC', 'Dark Witch WS']), create_dw_region(player, 'Dark Witch Northeast', None, ['Dark Witch Northeast Water Drop', 'Dark Witch Rock (North)', 'Potion Shop Northeast Mirror Spot', 'Dark Witch EC']), create_dw_region(player, 'Dark Witch Water', None, ['Dark Witch WN', 'Dark Witch EN']), - create_dw_region(player, 'Catfish Approach Area', None, ['Catfish Approach Water Drop', 'Zora Warning Mirror Spot', 'Catfish Approach WC', 'Catfish Approach NE']), + create_dw_region(player, 'Catfish Approach Area', None, ['Catfish Approach Water Drop', 'Zora Approach Mirror Spot', 'Catfish Approach WC', 'Catfish Approach NE']), create_dw_region(player, 'Catfish Approach Water', None, ['Catfish Approach WN']), - create_dw_region(player, 'Catfish Area', ['Catfish'], ['Zora Approach Mirror Spot', 'Catfish SE']), create_dw_region(player, 'Village of Outcasts Area', None, ['Chest Game', 'Thieves Town', 'C-Shaped House', 'Brewery', 'Village of Outcasts Pegs', 'Kakariko Mirror Spot', 'Village of Outcasts NW', 'Village of Outcasts NC', 'Village of Outcasts NE', 'Village of Outcasts ES', 'Village of Outcasts SE']), create_dw_region(player, 'Dark Grassy Lawn', None, ['Dark World Shop', 'Kakariko Grass Mirror Spot', 'Grassy Lawn Pegs']), - create_dw_region(player, 'Hammer Peg Entry', None, ['Peg Area Rocks (West)', 'Blacksmith Entry Mirror Spot', 'Hammer Pegs WS']), - create_dw_region(player, 'Hammer Peg Area', ['Dark Blacksmith Ruins'], ['Dark World Hammer Peg Cave', 'Blacksmith Mirror Spot', 'Bat Cave Ledge Mirror Spot', 'Peg Area Rocks (East)']), + create_dw_region(player, 'Shield Shop Area', None, ['Red Shield Shop', 'Forgotton Forest Mirror Spot', 'Shield Shop NW', 'Shield Shop NE']), create_dw_region(player, 'Pyramid Area', ['Pyramid'], ['Pyramid Fairy', 'Pyramid Hole', 'HC Ledge Mirror Spot', 'HC Courtyard Mirror Spot', 'HC Area Mirror Spot', 'HC East Entry Mirror Spot', 'Pyramid ES']), create_dw_region(player, 'Pyramid Exit Ledge', None, ['Pyramid Entrance', 'Pyramid Exit Drop']), create_dw_region(player, 'Pyramid Pass', None, ['HC Area South Mirror Spot', 'Pyramid SW', 'Pyramid SE']), @@ -142,51 +159,50 @@ def create_regions(world, player): 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']), create_dw_region(player, 'Broken Bridge Water', None, ['Broken Bridge NC']), - create_dw_region(player, 'Dark Dunes Area', None, ['Sand Dunes Mirror Spot', 'Dark Dunes NW', 'Dark Dunes WN', 'Dark Dunes SC']), create_dw_region(player, 'Palace of Darkness Area', None, ['Palace of Darkness Hint', 'Palace of Darkness', 'Eastern Palace Mirror Spot', 'Palace of Darkness SW', 'Palace of Darkness SE']), - create_dw_region(player, 'Palace of Darkness Nook Area', None, ['East Dark World Hint', 'Eastern Nook Mirror Spot', 'Palace of Darkness Nook NE']), + create_dw_region(player, 'Darkness Cliff', None, ['Dark Dunes Ledge Drop', 'Hammer Bridge North Ledge Drop', 'Dark Tree Line Ledge Drop', 'Palace of Darkness Ledge Drop']), + create_dw_region(player, 'Hammer Peg Entry', None, ['Peg Area Rocks (West)', 'Blacksmith Entry Mirror Spot', 'Hammer Pegs WS']), + create_dw_region(player, 'Hammer Peg Area', ['Dark Blacksmith Ruins'], ['Dark World Hammer Peg Cave', 'Blacksmith Mirror Spot', 'Bat Cave Ledge Mirror Spot', 'Peg Area Rocks (East)']), + create_dw_region(player, 'Dark Dunes Area', None, ['Sand Dunes Mirror Spot', 'Dark Dunes NW', 'Dark Dunes WN', 'Dark Dunes SC']), create_dw_region(player, 'Dig Game Area', ['Digging Game'], ['Dig Game To Ledge Drop', 'Maze Race Mirror Spot', 'Dig Game ES']), create_dw_region(player, 'Dig Game Ledge', None, ['Maze Race Ledge Mirror Spot', 'Dig Game Ledge Drop', 'Dig Game EC']), create_dw_region(player, 'Frog Area', ['Frog'], ['Frog Ledge Drop', 'Kakariko Suburb Mirror Spot', 'Frog NE']), create_dw_region(player, 'Archery Game Area', None, ['Archery Game', 'Archery Game Rock', 'Kakariko Suburb South Mirror Spot', 'Frog WC', 'Frog WS', 'Frog ES']), create_dw_region(player, 'Stumpy Area', ['Stumpy'], ['Flute Boy Mirror Spot', 'Stumpy SC']), create_dw_region(player, 'Stumpy Pass', None, ['Flute Boy Pass Mirror Spot', 'Stumpy WS', 'Stumpy SW']), - create_dw_region(player, 'Circle of Bushes Area', None, ['Circle of Bushes Bush (South)', 'Cave 45 Mirror Spot', 'Circle of Bushes NW', 'Circle of Bushes EC']), - create_dw_region(player, 'Circle of Bushes Stumpy Entry', None, ['Circle of Bushes Bush (North)', 'Flute Boy Entry Mirror Spot', 'Circle of Bushes NC']), - create_dw_region(player, 'Dark C Whirlpool Area', None, ['Dark C Whirlpool Rock (Bottom)', 'C Whirlpool Mirror Spot', 'Dark C Whirlpool EN', 'Dark C Whirlpool EC', 'Dark C Whirlpool ES', 'Dark C Whirlpool SC']), - create_dw_region(player, 'Dark C Whirlpool Outer Area', None, ['Dark C Whirlpool Rock (Top)', 'C Whirlpool Outer Mirror Spot', 'Dark C Whirlpool WC', 'Dark C Whirlpool NW']), create_dw_region(player, 'Dark Bonk Rocks Area', None, ['Bonk Fairy (Dark)', 'Central Bonk Rocks Mirror Spot', 'Dark Bonk Rocks NW', 'Dark Bonk Rocks SW', 'Dark Bonk Rocks EN', 'Dark Bonk Rocks EC', 'Dark Bonk Rocks ES']), create_dw_region(player, 'Big Bomb Shop Area', None, ['Big Bomb Shop', 'Links House Mirror Spot', 'Big Bomb Shop NE', 'Big Bomb Shop WN', 'Big Bomb Shop WC', 'Big Bomb Shop WS', 'Big Bomb Shop SC', 'Big Bomb Shop ES']), create_dw_region(player, 'Hammer Bridge North Area', None, ['Hammer Bridge Pegs (North)', 'Hammer Bridge Water Drop', 'Stone Bridge Mirror Spot', 'Hammer Bridge NC', 'Hammer Bridge EN']), create_dw_region(player, 'Hammer Bridge South Area', None, ['Hammer Bridge Pegs (South)', 'Stone Bridge South Mirror Spot', 'Hammer Bridge WS', 'Hammer Bridge SC']), create_dw_region(player, 'Hammer Bridge Water', None, ['Hammer Bridge Pier', 'Hobo Mirror Spot', 'Hammer Bridge EC']), + create_dw_region(player, 'Dark Central Cliffs', None, ['Dark Bonk Rocks Cliff Ledge Drop', 'Bomb Shop Cliff Ledge Drop', 'Hammer Bridge South Cliff Ledge Drop', 'Ice Lake Area Cliff Ledge Drop', 'Ice Palace Island FAWT Ledge Drop', 'Hammer Bridge EC Cliff Water Drop', 'Dark Tree Line WC Cliff Water Drop', 'Dark C Whirlpool Outer Cliff Ledge Drop', 'Dark C Whirlpool Cliff Ledge Drop', 'Dark South Teleporter Cliff Ledge Drop', 'Hype Cliff Ledge Drop']), create_dw_region(player, 'Dark Tree Line Area', None, ['Dark Lake Hylia Fairy', 'Tree Line Mirror Spot', 'Dark Tree Line WN', 'Dark Tree Line NW', 'Dark Tree Line SE']), create_dw_region(player, 'Dark Tree Line Water', None, ['Dark Tree Line WC', 'Dark Tree Line SC']), + create_dw_region(player, 'Palace of Darkness Nook Area', None, ['East Dark World Hint', '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 Ledge Mirror Spot', 'Checkerboard Mirror Spot', 'DP Stairs Mirror Spot', 'DP Entrance (North) Mirror Spot']), - create_dw_region(player, 'Swamp Nook Area', None, ['Bombos Tablet Mirror Spot', 'Desert Pass Mirror Spot', 'Swamp Nook EC', 'Swamp Nook ES']), - create_dw_region(player, 'Swamp Area', None, ['Swamp Palace', 'Dam Mirror Spot', 'Swamp WC', 'Swamp WS', 'Swamp NC', 'Swamp EC']), - create_dw_region(player, 'Hype Cave Area', None, ['Hype Cave', 'Statues Mirror Spot', 'Hype Cave NC', 'Hype Cave WN', 'Hype Cave WC', 'Hype Cave WS', 'Hype Cave SC']), - create_dw_region(player, 'Dark South Pass Area', None, ['South Pass Mirror Spot', 'Dark South Pass WC', 'Dark South Pass NC', 'Dark South Pass ES']), + create_dw_region(player, 'Misery Mire Teleporter Ledge', None, ['Misery Mire Teleporter Ledge Drop']), + 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, '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)', 'C Whirlpool Mirror Spot', 'Dark C Whirlpool Water Entry', 'Dark C Whirlpool EN', 'Dark C Whirlpool ES', 'Dark C Whirlpool SC']), + create_dw_region(player, 'Dark C Whirlpool Water', None, ['Dark C Whirlpool Landing', 'Dark C Whirlpool EC']), + create_dw_region(player, 'Dark C Whirlpool Outer Area', None, ['Dark C Whirlpool Rock (Top)', 'C Whirlpool Outer Mirror Spot', 'Dark C Whirlpool WC', 'Dark C Whirlpool NW']), + create_dw_region(player, 'Hype Cave Area', None, ['Hype Cave', 'Statues Mirror Spot', 'Hype Cave Water Entry', 'Hype Cave NC', 'Hype Cave WN', 'Hype Cave WS', 'Hype Cave SC']), + create_dw_region(player, 'Hype Cave Water', None, ['Hype Cave Landing', 'Hype Cave WC']), create_dw_region(player, 'Ice Lake Area', None, ['Dark Lake Hylia Shop', 'Ice Lake Water Drop', 'Lake Hylia Mirror Spot', 'Ice Lake NW']), create_dw_region(player, 'Ice Lake Northeast Bank', None, ['Ice Lake Northeast Water Drop', 'Lake Hylia Northeast Mirror Spot', 'Ice Lake NE']), create_dw_region(player, 'Ice Lake Ledge (West)', None, ['Ice Lake Southwest Water Drop', 'South Shore Mirror Spot', 'Ice Lake WS']), create_dw_region(player, 'Ice Lake Ledge (East)', None, ['Ice Lake Southeast Water Drop', 'South Shore East Mirror Spot', 'Ice Lake ES']), create_dw_region(player, 'Ice Lake Water', None, ['Lake Hylia Island Mirror Spot', 'Ice Lake Northeast Pier', 'Ice Lake NC', 'Ice Lake EC']), + create_dw_region(player, 'Ice Lake Moat', None, ['Ice Lake Moat Water Drop', 'Ice Lake Northeast Pier Bomb Jump', 'Lake Hylia Water Mirror Spot']), create_dw_region(player, 'Ice Palace Area', None, ['Ice Palace', 'Lake Hylia Central Island Mirror Spot']), + create_dw_region(player, 'Shopping Mall Area', None, ['Dark Lake Hylia Ledge Fairy', 'Dark Lake Hylia Ledge Hint', 'Dark Lake Hylia Ledge Spike Cave', 'Ice Cave Mirror Spot', 'Shopping Mall SE', 'Shopping Mall SW']), + create_dw_region(player, 'Swamp Nook Area', None, ['Desert Pass Ledge Mirror Spot', 'Desert Pass Mirror Spot', 'Swamp Nook EC', 'Swamp Nook ES']), + create_dw_region(player, 'Swamp Area', None, ['Swamp Palace', 'Dam Mirror Spot', 'Swamp WC', 'Swamp WS', 'Swamp NC', 'Swamp EC']), + create_dw_region(player, 'Dark South Pass Area', None, ['South Pass Mirror Spot', 'Dark South Pass WC', 'Dark South Pass NC', 'Dark South Pass ES']), create_dw_region(player, 'Bomber Corner Area', None, ['Bomber Corner Water Drop', 'Octoballoon Mirror Spot', 'Bomber Corner WS', 'Bomber Corner NE']), create_dw_region(player, 'Bomber Corner Water', None, ['Bomber Corner Pier', 'Bomber Corner Whirlpool', 'Bomber Corner WC']), create_dw_region(player, 'Bomber Corner Water Ledge', None, ['Bomber Corner Waterfall Water Drop', 'Bomber Corner NW']), - create_dw_region(player, 'Shopping Mall Area', None, ['Dark Lake Hylia Ledge Fairy', 'Dark Lake Hylia Ledge Hint', 'Dark Lake Hylia Ledge Spike Cave', 'Ice Cave Mirror Spot', 'Shopping Mall SE', 'Shopping Mall SW']), - create_dw_region(player, 'Dark Death Mountain (West Bottom)', None, ['Spike Cave', 'Dark Death Mountain Fairy', 'Spectacle Rock Mirror Spot', 'West Dark Death Mountain ES']), - create_dw_region(player, 'Dark Death Mountain (Top West)', None, ['Ganons Tower', 'Dark Death Mountain Drop (West)', 'West Death Mountain (Top) Mirror Spot', 'West Dark Death Mountain EN']), - create_dw_region(player, 'Dark Death Mountain (Top East)', None, ['Superbunny Cave (Top)', 'Hookshot Cave', 'Dark Death Mountain Drop (East)', 'East Death Mountain (Top West) Mirror Spot', 'East Death Mountain (Top East) Mirror Spot', 'East Dark Death Mountain WN', 'East Dark Death Mountain EN']), - create_dw_region(player, 'Dark Death Mountain (East Bottom)', None, ['Superbunny Cave (Bottom)', 'Cave Shop (Dark Death Mountain)', 'Fairy Ascension Mirror Spot']), - create_dw_region(player, 'Dark Death Mountain (West Lip)', None, ['Death Mountain Bridge Mirror Spot', 'East Dark Death Mountain WS']), - create_dw_region(player, 'Dark Death Mountain Ledge', None, ['Dark Death Mountain Ledge (East)', 'Dark Death Mountain Ledge (West)', 'Spiral Cave Mirror Spot', 'Mimic Cave Mirror Spot']), - create_dw_region(player, 'Dark Death Mountain Isolated Ledge', None, ['Turtle Rock Isolated Ledge Entrance', 'Isolated Ledge Mirror Spot']), - create_dw_region(player, 'Dark Death Mountain Floating Island', None, ['Floating Island Drop', 'Hookshot Cave Back Entrance', 'Floating Island Mirror Spot']), - create_dw_region(player, 'Turtle Rock Area', None, ['Turtle Rock', 'TR Pegs Area Mirror Spot', 'Turtle Rock WN']), - create_dw_region(player, 'Turtle Rock Ledge', None, ['Turtle Rock Ledge Drop']), create_cave_region(player, 'Lost Woods Gamble', 'a game of chance'), create_cave_region(player, 'Lost Woods Hideout (top)', 'a drop\'s exit', ['Lost Woods Hideout'], ['Lost Woods Hideout (top to bottom)']), @@ -270,7 +286,7 @@ def create_regions(world, player): create_cave_region(player, 'Spike Cave', 'Spike Cave', ['Spike Cave']), create_cave_region(player, 'Dark Death Mountain Healer Fairy', 'a fairy fountain'), create_cave_region(player, 'Hookshot Cave', 'a connector', ['Hookshot Cave - Top Right', 'Hookshot Cave - Top Left', 'Hookshot Cave - Bottom Right', 'Hookshot Cave - Bottom Left'], - ['Hookshot Cave Exit (South)', 'Hookshot Cave Exit (North)']) + ['Hookshot Cave Exit (South)', 'Hookshot Cave Exit (North)']), create_cave_region(player, 'Superbunny Cave (Top)', 'a connector', ['Superbunny Cave - Top', 'Superbunny Cave - Bottom'], ['Superbunny Cave Exit (Top)']), create_cave_region(player, 'Superbunny Cave (Bottom)', 'a connector', None, ['Superbunny Cave Climb', 'Superbunny Cave Exit (Bottom)']), create_cave_region(player, 'Cave Shop (Dark Death Mountain)', 'a common shop', ['Dark Death Mountain Shop - Left', 'Dark Death Mountain Shop - Middle', 'Dark Death Mountain Shop - Right']), @@ -301,7 +317,7 @@ def create_regions(world, player): create_cave_region(player, 'Dark Lake Hylia Ledge Spike Cave', 'a spiky hint'), create_cave_region(player, 'Mire Shed', 'a cave with two chests', ['Mire Shed - Left', 'Mire Shed - Right']), create_cave_region(player, 'Dark Desert Healer Fairy', 'a fairy fountain'), - create_cave_region(player, 'Dark Desert Hint', 'a storyteller'), + create_cave_region(player, 'Dark Desert Hint', 'a storyteller') ] diff --git a/Rules.py b/Rules.py index ba52be93..3c86fe89 100644 --- a/Rules.py +++ b/Rules.py @@ -61,8 +61,9 @@ def set_rules(world, player): if world.mode[player] != 'inverted': set_big_bomb_rules(world, player) if world.logic[player] == 'owglitches' and world.shuffle[player] not in ('insanity', 'insanity_legacy'): + path_to_hc = mirrorless_path_to_location(world, 'West Death Mountain (Bottom)', 'Hyrule Castle Area', player) path_to_courtyard = mirrorless_path_to_castle_courtyard(world, player) - add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.world.get_entrance('Dark Death Mountain Offset Mirror', player).can_reach(state) and all(rule(state) for rule in path_to_courtyard), 'or') + add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.world.get_entrance('Dark Death Mountain Offset Mirror', player).can_reach(state) and all(rule(state) for rule in path_to_courtyard) and all(rule(state) for rule in path_to_hc), 'or') else: set_inverted_big_bomb_rules(world, player) @@ -72,9 +73,23 @@ def set_rules(world, player): set_bunny_rules(world, player, world.mode[player] == 'inverted') - if world.mode[player] != 'inverted' and world.logic[player] == 'owglitches': - add_rule(world.get_entrance('Ganons Tower', player), lambda state: state.world.get_entrance('Ganons Tower Ascent', player).can_reach(state), 'or') +def mirrorless_path_to_location(world, startName, targetName, player): + # If Agahnim is defeated then the courtyard needs to be accessible without using the mirror for the mirror offset glitch. + # Only considering the secret passage for now (in non-insanity shuffle). Basically, if it's Ganon you need the master sword. + start = world.get_region(startName, player) + target = world.get_region(targetName, player) + seen = {start} + queue = collections.deque([(start, [])]) + while queue: + (current, path) = queue.popleft() + for entrance in current.exits: + if entrance.connected_region not in seen: + new_path = path + [entrance.access_rule] + if entrance.connected_region == target: + return new_path + else: + queue.append((entrance.connected_region, new_path)) def mirrorless_path_to_castle_courtyard(world, player): # If Agahnim is defeated then the courtyard needs to be accessible without using the mirror for the mirror offset glitch. @@ -166,14 +181,14 @@ def global_rules(world, player): set_rule(world.get_entrance('Flute Spot 8', player), lambda state: state.can_flute(player)) #TODO: Remove the water drop ones, they should be redundant - set_rule(world.get_entrance('C Whirlpool', player), lambda state: state.has('Flippers', player)) - set_rule(world.get_entrance('River Bend Whirlpool', player), lambda state: state.has('Flippers', player)) - set_rule(world.get_entrance('Lake Hylia Whirlpool', player), lambda state: state.has('Flippers', player)) - set_rule(world.get_entrance('Zora Whirlpool', player), lambda state: state.has('Flippers', player)) - set_rule(world.get_entrance('Kakariko Pond Whirlpool', player), lambda state: state.has('Flippers', player)) - set_rule(world.get_entrance('Octoballoon Whirlpool', player), lambda state: state.has('Flippers', player)) - set_rule(world.get_entrance('Qirn Jump Whirlpool', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) - set_rule(world.get_entrance('Bomber Corner Whirlpool', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) + # set_rule(world.get_entrance('C Whirlpool', player), lambda state: state.has('Flippers', player)) + # set_rule(world.get_entrance('River Bend Whirlpool', player), lambda state: state.has('Flippers', player)) + # set_rule(world.get_entrance('Lake Hylia Whirlpool', player), lambda state: state.has('Flippers', player)) + # set_rule(world.get_entrance('Zora Whirlpool', player), lambda state: state.has('Flippers', player)) + # set_rule(world.get_entrance('Kakariko Pond Whirlpool', player), lambda state: state.has('Flippers', player)) + # set_rule(world.get_entrance('Octoballoon Whirlpool', player), lambda state: state.has('Flippers', player)) + # set_rule(world.get_entrance('Qirn Jump Whirlpool', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) + # set_rule(world.get_entrance('Bomber Corner Whirlpool', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) set_rule(world.get_location('Sunken Treasure', player), lambda state: state.has('Open Floodgate', player)) set_rule(world.get_location('Dark Blacksmith Ruins', player), lambda state: state.has('Return Smith', player)) @@ -752,6 +767,7 @@ def default_rules(world, player): set_rule(world.get_entrance('DM Broken Bridge (West)', player), lambda state: state.has('Hookshot', player)) set_rule(world.get_entrance('DM Broken Bridge (East)', player), lambda state: state.has('Hookshot', player)) set_rule(world.get_entrance('Fairy Ascension Rocks', player), lambda state: state.can_lift_heavy_rocks(player)) + set_rule(world.get_entrance('TR Pegs Ledge Entry', player), lambda state: state.can_lift_heavy_rocks(player)) set_rule(world.get_entrance('Skull Woods Bush Rock (West)', player), lambda state: state.has_Pearl(player) and state.can_lift_rocks(player)) set_rule(world.get_entrance('Skull Woods Bush Rock (East)', player), lambda state: state.has_Pearl(player) and state.can_lift_rocks(player)) set_rule(world.get_entrance('Skull Woods Forgotten Bush (West)', player), lambda state: state.has_Pearl(player)) @@ -777,47 +793,30 @@ def default_rules(world, player): set_rule(world.get_entrance('Dark C Whirlpool Rock (Top)', player), lambda state: state.has_Pearl(player) and state.can_lift_rocks(player)) set_rule(world.get_entrance('Hammer Bridge Pegs (North)', player), lambda state: state.has('Hammer', player) and state.has_Pearl(player)) set_rule(world.get_entrance('Hammer Bridge Pegs (South)', player), lambda state: state.has_Pearl(player) and state.has('Hammer', player)) - set_rule(world.get_entrance('Circle of Bushes Bush (North)', player), lambda state: state.has_Pearl(player)) - set_rule(world.get_entrance('Circle of Bushes Bush (South)', player), lambda state: state.has_Pearl(player)) + set_rule(world.get_entrance('Stumpy Approach Bush (North)', player), lambda state: state.has_Pearl(player)) + set_rule(world.get_entrance('Stumpy Approach Bush (South)', player), lambda state: state.has_Pearl(player)) set_rule(world.get_entrance('Flute Away', player), lambda state: state.can_flute(player)) - set_rule(world.get_entrance('Waterfall of Wishing Cave Entry', player), lambda state: state.has('Flippers', player)) - set_rule(world.get_entrance('Zora Approach Water Drop', player), lambda state: state.has('Flippers', player)) - set_rule(world.get_entrance('Zora Warning Water Drop', player), lambda state: state.has('Flippers', player)) - set_rule(world.get_entrance('Potion Shop Water Drop', player), lambda state: state.has('Flippers', player)) - set_rule(world.get_entrance('Potion Shop Northeast Water Drop', player), lambda state: state.has('Flippers', player)) - set_rule(world.get_entrance('River Bend Water Drop', player), lambda state: state.has('Flippers', player)) - set_rule(world.get_entrance('River Bend East Water Drop', player), lambda state: state.has('Flippers', player)) + set_rule(world.get_entrance('Zora Waterfall Water Drop', player), lambda state: state.has('Flippers', player)) + set_rule(world.get_entrance('Zora Waterfall Water Entry', player), lambda state: state.has('Flippers', player)) set_rule(world.get_entrance('Wooden Bridge Water Drop', player), lambda state: state.has('Flippers', player)) set_rule(world.get_entrance('Lake Hylia Water Drop', player), lambda state: state.has('Flippers', player)) - set_rule(world.get_entrance('Lake Hylia South Water Drop', player), lambda state: state.has('Flippers', player)) set_rule(world.get_entrance('Lake Hylia Northeast Water Drop', player), lambda state: state.has('Flippers', player)) set_rule(world.get_entrance('Lake Hylia Central Water Drop', player), lambda state: state.has('Flippers', player)) set_rule(world.get_entrance('Lake Hylia Island Water Drop', player), lambda state: state.has('Flippers', player)) - set_rule(world.get_entrance('Octoballoon Water Drop', player), lambda state: state.has('Flippers', player)) set_rule(world.get_entrance('Octoballoon Waterfall Water Drop', player), lambda state: state.has('Flippers', player)) - set_rule(world.get_entrance('Catfish Approach Water Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) - set_rule(world.get_entrance('Dark Witch Water Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) - set_rule(world.get_entrance('Dark Witch Northeast Water Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) - set_rule(world.get_entrance('Qirn Jump Water Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) - set_rule(world.get_entrance('Qirn Jump East Water Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) set_rule(world.get_entrance('Broken Bridge Water Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) set_rule(world.get_entrance('Broken Bridge Northeast Water Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) set_rule(world.get_entrance('Broken Bridge West Water Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) set_rule(world.get_entrance('Hammer Bridge Water Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) set_rule(world.get_entrance('Ice Lake Water Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) set_rule(world.get_entrance('Ice Lake Northeast Water Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) + set_rule(world.get_entrance('Ice Lake Moat Water Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) set_rule(world.get_entrance('Ice Lake Southwest Water Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) - set_rule(world.get_entrance('Ice Lake Southeast Water Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) - set_rule(world.get_entrance('Bomber Corner Water Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) set_rule(world.get_entrance('Bomber Corner Waterfall Water Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) set_rule(world.get_entrance('Ice Cave SW', player), lambda state: state.has('Flippers', player)) set_rule(world.get_entrance('Shopping Mall SW', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) - set_rule(world.get_entrance('C Whirlpool EC', player), lambda state: state.has('Flippers', player)) - set_rule(world.get_entrance('Statues WC', player), lambda state: state.has('Flippers', player)) - set_rule(world.get_entrance('Dark C Whirlpool EC', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) - set_rule(world.get_entrance('Hype Cave WC', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) set_rule(world.get_entrance('Kakariko Teleporter (Hammer)', player), lambda state: state.has('Hammer', player) and state.can_lift_rocks(player) and state.has_Pearl(player)) # bunny cannot lift bushes set_rule(world.get_entrance('Kakariko Teleporter (Rock)', player), lambda state: state.can_lift_heavy_rocks(player) and state.has_Pearl(player)) # bunny cannot lift bushes @@ -825,10 +824,11 @@ def default_rules(world, player): set_rule(world.get_entrance('Top of Pyramid (Inner)', player), lambda state: state.has('Beat Agahnim 1', player)) set_rule(world.get_entrance('East Hyrule Teleporter', player), lambda state: state.has('Hammer', player) and state.can_lift_rocks(player) and state.has_Pearl(player)) # bunny cannot use hammer set_rule(world.get_entrance('South Hyrule Teleporter', player), lambda state: state.has('Hammer', player) and state.can_lift_rocks(player) and state.has_Pearl(player)) # bunny cannot use hammer - set_rule(world.get_entrance('Desert Teleporter', player), lambda state: state.can_flute(player) and state.can_lift_heavy_rocks(player)) + set_rule(world.get_entrance('South Teleporter Cliff Ledge Drop', player), lambda state: state.can_lift_rocks(player) and state.has_Pearl(player)) # OWG only, can bomb clip out + set_rule(world.get_entrance('Desert Teleporter', player), lambda state: state.can_lift_heavy_rocks(player)) set_rule(world.get_entrance('Lake Hylia Teleporter', player), lambda state: state.can_lift_heavy_rocks(player)) set_rule(world.get_entrance('East Death Mountain Teleporter', player), lambda state: state.can_lift_heavy_rocks(player)) - set_rule(world.get_entrance('Turtle Rock Teleporter', player), lambda state: state.can_lift_heavy_rocks(player) and state.has('Hammer', player)) + set_rule(world.get_entrance('TR Pegs Teleporter', player), lambda state: state.has('Hammer', player)) set_rule(world.get_entrance('Lost Woods Mirror Spot', player), lambda state: state.has_Mirror(player)) set_rule(world.get_entrance('Lost Woods Entry Mirror Spot', player), lambda state: state.has_Mirror(player)) @@ -853,7 +853,7 @@ def default_rules(world, player): set_rule(world.get_entrance('River Bend East Mirror Spot', player), lambda state: state.has_Mirror(player)) set_rule(world.get_entrance('Potion Shop Mirror Spot', player), lambda state: state.has_Mirror(player)) set_rule(world.get_entrance('Potion Shop Northeast Mirror Spot', player), lambda state: state.has_Mirror(player)) - set_rule(world.get_entrance('Zora Warning Mirror Spot', player), lambda state: state.has_Mirror(player)) + set_rule(world.get_entrance('Zora Waterfall Mirror Spot', player), lambda state: state.has_Mirror(player)) set_rule(world.get_entrance('Zora Approach Mirror Spot', player), lambda state: state.has_Mirror(player)) set_rule(world.get_entrance('Kakariko Mirror Spot', player), lambda state: state.has_Mirror(player)) set_rule(world.get_entrance('Kakariko Grass Mirror Spot', player), lambda state: state.has_Mirror(player)) @@ -891,7 +891,8 @@ def default_rules(world, player): set_rule(world.get_entrance('Desert Ledge Mirror Spot', player), lambda state: state.has_Mirror(player)) set_rule(world.get_entrance('DP Stairs Mirror Spot', player), lambda state: state.has_Mirror(player)) set_rule(world.get_entrance('DP Entrance (North) Mirror Spot', player), lambda state: state.has_Mirror(player)) - set_rule(world.get_entrance('Bombos Tablet Mirror Spot', player), lambda state: state.has_Mirror(player)) + set_rule(world.get_entrance('Bombos Tablet Ledge Mirror Spot', player), lambda state: state.has_Mirror(player)) + set_rule(world.get_entrance('Desert Pass Ledge Mirror Spot', player), lambda state: state.has_Mirror(player)) set_rule(world.get_entrance('Desert Pass Mirror Spot', player), lambda state: state.has_Mirror(player)) set_rule(world.get_entrance('Dam Mirror Spot', player), lambda state: state.has_Mirror(player)) set_rule(world.get_entrance('Statues Mirror Spot', player), lambda state: state.has_Mirror(player)) @@ -900,6 +901,7 @@ def default_rules(world, player): set_rule(world.get_entrance('Lake Hylia Northeast Mirror Spot', player), lambda state: state.has_Mirror(player)) set_rule(world.get_entrance('Lake Hylia Island Mirror Spot', player), lambda state: state.has_Pearl(player) and state.has_Mirror(player) and state.has('Flippers', player)) set_rule(world.get_entrance('Lake Hylia Central Island Mirror Spot', player), lambda state: state.has_Mirror(player)) + set_rule(world.get_entrance('Lake Hylia Water Mirror Spot', player), lambda state: state.has_Mirror(player)), set_rule(world.get_entrance('South Shore Mirror Spot', player), lambda state: state.has_Mirror(player)) set_rule(world.get_entrance('South Shore East Mirror Spot', player), lambda state: state.has_Mirror(player)) set_rule(world.get_entrance('Octoballoon Mirror Spot', player), lambda state: state.has_Mirror(player)) @@ -921,7 +923,7 @@ def default_rules(world, player): if world.swords[player] == 'swordless': swordless_rules(world, player) - set_rule(world.get_entrance('Ganons Tower', player), lambda state: state.has_crystals(world.crystals_needed_for_gt[player], player)) + set_rule(world.get_entrance('GT Approach Entry', player), lambda state: state.has_crystals(world.crystals_needed_for_gt[player], player)) def inverted_rules(world, player): @@ -1077,12 +1079,25 @@ def inverted_rules(world, player): def no_glitches_rules(world, player): if world.mode[player] != 'inverted': # TODO: move some OW fake flipper situations here, new Water Drop Exits will need to be created - add_rule(world.get_entrance('Potion Shop Water Drop', player), lambda state: state.has('Flippers', player)) - add_rule(world.get_entrance('Potion Shop Northeast Water Drop', player), lambda state: state.has('Flippers', player)) - add_rule(world.get_entrance('Zora Warning Water Drop', player), lambda state: state.has('Flippers', player)) - add_rule(world.get_entrance('Dark Witch Water Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) - add_rule(world.get_entrance('Dark Witch Northeast Water Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) - add_rule(world.get_entrance('Catfish Approach Water Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) + set_rule(world.get_entrance('Waterfall of Wishing Cave Entry', player), lambda state: state.has('Flippers', player)) + set_rule(world.get_entrance('River Bend Water Drop', player), lambda state: state.has('Flippers', player)) + set_rule(world.get_entrance('River Bend East Water Drop', player), lambda state: state.has('Flippers', player)) + set_rule(world.get_entrance('Potion Shop Water Drop', player), lambda state: state.has('Flippers', player)) + set_rule(world.get_entrance('Potion Shop Northeast Water Drop', player), lambda state: state.has('Flippers', player)) + set_rule(world.get_entrance('Zora Approach Water Drop', player), lambda state: state.has('Flippers', player)) + set_rule(world.get_entrance('C Whirlpool Water Entry', player), lambda state: state.has('Flippers', player)) + set_rule(world.get_entrance('Statues Water Entry', player), lambda state: state.has('Flippers', player)) + set_rule(world.get_entrance('Lake Hylia South Water Drop', player), lambda state: state.has('Flippers', player)) + set_rule(world.get_entrance('Octoballoon Water Drop', player), lambda state: state.has('Flippers', player)) + set_rule(world.get_entrance('Qirn Jump Water Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) + set_rule(world.get_entrance('Qirn Jump East Water Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) + set_rule(world.get_entrance('Dark Witch Water Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) + set_rule(world.get_entrance('Dark Witch Northeast Water Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) + set_rule(world.get_entrance('Catfish Approach Water Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) + set_rule(world.get_entrance('Dark C Whirlpool Water Entry', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) + set_rule(world.get_entrance('Hype Cave Water Entry', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) + set_rule(world.get_entrance('Ice Lake Southeast Water Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) + set_rule(world.get_entrance('Bomber Corner Water Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) else: add_rule(world.get_entrance('Zoras River', player), lambda state: state.has_Pearl(player) and (state.has('Flippers', player) or state.can_lift_rocks(player))) add_rule(world.get_entrance('Lake Hylia Central Island Pier', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) # can be fake flippered to @@ -1109,12 +1124,25 @@ def no_glitches_rules(world, player): def fake_flipper_rules(world, player): if world.mode[player] != 'inverted': - set_rule(world.get_entrance('Zoras River', player), lambda state: True) - set_rule(world.get_entrance('Lake Hylia Central Island Pier', player), lambda state: True) - set_rule(world.get_entrance('Hobo Bridge', player), lambda state: True) - set_rule(world.get_entrance('Dark Lake Hylia Drop (East)', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) - set_rule(world.get_entrance('Dark Lake Hylia Teleporter', player), lambda state: state.has_Pearl(player)) - set_rule(world.get_entrance('Dark Lake Hylia Ledge Drop', player), lambda state: state.has_Pearl(player)) + set_rule(world.get_entrance('Waterfall of Wishing Cave Entry', player), lambda state: state.has('Flippers', player) or state.has_Pearl(player)) + set_rule(world.get_entrance('River Bend Water Drop', player), lambda state: True) + set_rule(world.get_entrance('River Bend East Water Drop', player), lambda state: True) + set_rule(world.get_entrance('Potion Shop Water Drop', player), lambda state: True) + set_rule(world.get_entrance('Potion Shop Northeast Water Drop', player), lambda state: True) + set_rule(world.get_entrance('Zora Approach Water Drop', player), lambda state: True) + set_rule(world.get_entrance('C Whirlpool Water Entry', player), lambda state: True) + set_rule(world.get_entrance('Statues Water Entry', player), lambda state: True) + set_rule(world.get_entrance('Lake Hylia South Water Drop', player), lambda state: True) + set_rule(world.get_entrance('Octoballoon Water Drop', player), lambda state: True) + set_rule(world.get_entrance('Qirn Jump Water Drop', player), lambda state: state.has_Pearl(player)) + set_rule(world.get_entrance('Qirn Jump East Water Drop', player), lambda state: state.has_Pearl(player)) + set_rule(world.get_entrance('Dark Witch Water Drop', player), lambda state: state.has_Pearl(player)) + set_rule(world.get_entrance('Dark Witch Northeast Water Drop', player), lambda state: state.has_Pearl(player)) + set_rule(world.get_entrance('Catfish Approach Water Drop', player), lambda state: state.has_Pearl(player)) + set_rule(world.get_entrance('Dark C Whirlpool Water Entry', player), lambda state: state.has_Pearl(player)) + set_rule(world.get_entrance('Hype Cave Water Entry', player), lambda state: state.has_Pearl(player)) + set_rule(world.get_entrance('Ice Lake Southeast Water Drop', player), lambda state: state.has_Pearl(player)) + set_rule(world.get_entrance('Bomber Corner Water Drop', player), lambda state: state.has_Pearl(player)) else: set_rule(world.get_entrance('Zoras River', player), lambda state: state.has_Pearl(player)) set_rule(world.get_entrance('Lake Hylia Central Island Pier', player), lambda state: state.has_Pearl(player)) @@ -1337,31 +1365,6 @@ def standard_rules(world, player): rule_list, debug_path = find_rules_for_zelda_delivery(world, player) set_rule(world.get_location('Zelda Drop Off', player), lambda state: state.has('Zelda Herself', player) and check_rule_list(state, rule_list)) - # for location in ['Mushroom', 'Bottle Merchant', 'Flute Spot', 'Sunken Treasure', 'King Zora', 'Zora\'s Ledge', - # 'Purple Chest', 'Maze Race', 'Hobo', 'Desert Ledge', 'Bombos Tablet', 'Lake Hylia Island', - # 'Old Man', 'Ether Tablet', 'Spectacle Rock', 'Floating Island']: - # add_rule(world.get_location(location, player), lambda state: state.has('Zelda Delivered', player)) - - # Bonk Fairy (Light) is a notable omission in ER shuffles/Retro - # for entrance in ['Blinds Hideout', 'Kings Grave Outer Rocks', 'Dam', 'Tavern North', - # 'Chicken House', 'Aginahs Cave', 'Sahasrahlas Hut', 'Kakariko Well Drop', 'Kakariko Well Cave', - # 'Blacksmiths Hut', 'Bat Cave Drop Ledge', 'Bat Cave Cave', 'Sick Kids House', 'Hobo Bridge', - # 'Lost Woods Hideout Drop', 'Lost Woods Hideout Stump', 'Lumberjack Tree Tree', - # 'Lumberjack Tree Cave', 'Mini Moldorm Cave', 'Ice Rod Cave', 'Lake Hylia Central Island Pier', - # 'Bonk Rock Cave', 'Library', 'Potion Shop', 'Two Brothers House (East)', 'Desert Palace Statue Move', - # 'Eastern Palace', 'Master Sword Meadow', 'Sanctuary', 'Sanctuary Grave', - # 'Death Mountain Entrance Rock', 'Desert Teleporter', 'East Hyrule Teleporter', - # 'Flute Spot 1', 'Flute Spot 2', 'Flute Spot 3', 'Flute Spot 4', - # 'Flute Spot 5', 'Flute Spot 6', 'Flute Spot 7', 'Flute Spot 8', - # 'South Hyrule Teleporter', 'Kakariko Teleporter', 'Elder House (East)', 'Elder House (West)', - # 'North Fairy Cave', 'North Fairy Cave Drop', 'Lost Woods Gamble', 'Snitch Lady (East)', - # 'Snitch Lady (West)', 'Tavern (Front)', 'Bush Covered House', 'Light World Bomb Hut', - # 'Kakariko Shop', 'Long Fairy Cave', 'Good Bee Cave', '20 Rupee Cave', 'Cave Shop (Lake Hylia)', - # 'Waterfall of Wishing', 'Hyrule Castle Main Gate (North)', 'Hyrule Castle Main Gate (South)', '50 Rupee Cave', - # 'Fortune Teller (Light)', 'Lake Hylia Fairy', 'Light Hype Fairy', 'Desert Fairy', - # 'Lumberjack House', 'Lake Hylia Fortune Teller', 'Kakariko Gamble Game', 'Top of Pyramid', 'Top of Pyramid (Inner)']: - # add_rule(world.get_entrance(entrance, player), lambda state: state.has('Zelda Delivered', player)) - add_rule(world.get_entrance('Links House SC', player), lambda state: state.has('Zelda Delivered', player)) add_rule(world.get_entrance('Links House ES', player), lambda state: state.has('Zelda Delivered', player)) add_rule(world.get_entrance('Central Bonk Rocks SW', player), lambda state: state.has('Zelda Delivered', player))