diff --git a/.gitignore b/.gitignore index d098afe9..f20124a7 100644 --- a/.gitignore +++ b/.gitignore @@ -39,3 +39,4 @@ test data/base2current.json TestSuite.py +crystal_regions.py diff --git a/DoorShuffle.py b/DoorShuffle.py index cfba665d..35731a15 100644 --- a/DoorShuffle.py +++ b/DoorShuffle.py @@ -1993,6 +1993,7 @@ logical_connections = [ ('Hera Lobby to Crystal', 'Hera Lobby Crystal'), ('Hera Lobby Crystal Exit', 'Hera Lobby'), ('Hera Front to Crystal', 'Hera Front Crystal'), + ('Hera Front to Back Bypass', 'Hera Back'), ('Hera Front Crystal Exit', 'Hera Front'), ('Hera Front to Down Stairs Barrier - Blue', 'Hera Down Stairs Landing'), ('Hera Front to Up Stairs Barrier - Orange', 'Hera Up Stairs Landing'), @@ -2017,7 +2018,8 @@ logical_connections = [ ('PoD Arena North to Landing Barrier - Orange', 'PoD Arena Landing'), ('PoD Arena Main to Ranged Crystal', 'PoD Arena Main - Ranged Crystal'), ('PoD Arena Main to Landing Barrier - Blue', 'PoD Arena Landing'), - ('PoD Arena Main to North Ranged Barrier - Orange', 'PoD Arena North'), + ('PoD Arena Main to Landing Bypass', 'PoD Arena Landing'), + ('PoD Arena Main to Right Bypass', 'PoD Arena Right'), ('PoD Arena Main Ranged Crystal Exit', 'PoD Arena Main'), ('PoD Arena Bridge to Ranged Crystal', 'PoD Arena Bridge - Ranged Crystal'), ('PoD Arena Bridge Ranged Crystal Exit', 'PoD Arena Bridge'), @@ -2025,6 +2027,10 @@ logical_connections = [ ('PoD Arena Landing to Right Barrier - Blue', 'PoD Arena Right'), ('PoD Arena Landing to North Barrier - Orange', 'PoD Arena North'), ('PoD Arena Right to Landing Barrier - Blue', 'PoD Arena Landing'), + ('PoD Arena Right to Ranged Crystal', 'PoD Arena Right - Ranged Crystal'), + ('PoD Arena Right Ranged Crystal Exit', 'PoD Arena Right'), + ('PoD Arena Ledge to Ranged Crystal', 'PoD Arena Ledge - Ranged Crystal'), + ('PoD Arena Ledge Ranged Crystal Exit', 'PoD Arena Ledge'), ('PoD Map Balcony Drop Down', 'PoD Sexy Statue'), ('PoD Map Balcony to Ranged Crystal', 'PoD Map Balcony - Ranged Crystal'), @@ -2033,6 +2039,7 @@ logical_connections = [ ('PoD Falling Bridge Path N', 'PoD Falling Bridge Ledge'), ('PoD Falling Bridge Path S', 'PoD Falling Bridge'), ('PoD Bow Statue Left to Right Barrier - Orange', 'PoD Bow Statue Right'), + ('PoD Bow Statue Left to Right Bypass', 'PoD Bow Statue Right'), ('PoD Bow Statue Right to Left Barrier - Orange', 'PoD Bow Statue Left'), ('PoD Bow Statue Right to Ranged Crystal', 'PoD Bow Statue Right - Ranged Crystal'), ('PoD Bow Statue Ranged Crystal Exit', 'PoD Bow Statue Right'), @@ -2177,12 +2184,19 @@ logical_connections = [ ('GT Hookshot South-East Path', 'GT Hookshot East Platform'), ('GT Hookshot South-North Path', 'GT Hookshot North Platform'), ('GT Hookshot Platform Blue Barrier', 'GT Hookshot South Entry'), + ('GT Hookshot Platform Barrier Bypass', 'GT Hookshot South Entry'), ('GT Hookshot Entry Blue Barrier', 'GT Hookshot South Platform'), ('GT Hookshot South Entry to Ranged Crystal', 'GT Hookshot South Entry - Ranged Crystal'), ('GT HookShot South Entry Ranged Crystal Exit', 'GT Hookshot South Entry'), - ('GT Double Switch to Pot Corners Barrier - Orange', 'GT Double Switch Pot Corners'), - ('GT Double Switch Pot Corners to Barrier - Orange', 'GT Double Switch Entry'), - ('GT Double Switch Pot Corners to Barrier - Blue', 'GT Double Switch Exit'), + ('GT Double Switch Entry to Pot Corners Barrier - Orange', 'GT Double Switch Pot Corners'), + ('GT Double Switch Entry to Left Barrier - Orange', 'GT Double Switch Left'), + ('GT Double Switch Entry to Ranged Switches', 'GT Double Switch Entry - Ranged Switches'), + ('GT Double Switch Entry Ranged Switches Exit', 'GT Double Switch Entry'), + ('GT Double Switch Left to Entry Barrier - Orange', 'GT Double Switch Entry'), + ('GT Double Switch Left to Entry Bypass', 'GT Double Switch Entry'), + ('GT Double Switch Left to Pot Corners Bypass', 'GT Double Switch Pot Corners'), + ('GT Double Switch Pot Corners to Entry Barrier - Orange', 'GT Double Switch Entry'), + ('GT Double Switch Pot Corners to Exit Barrier - Blue', 'GT Double Switch Exit'), ('GT Double Switch Pot Corners to Ranged Switches', 'GT Double Switch Pot Corners - Ranged Switches'), ('GT Double Switch Pot Corners Ranged Switches Exit', 'GT Double Switch Pot Corners'), ('GT Double Switch Exit to Blue Barrier', 'GT Double Switch Pot Corners'), diff --git a/Doors.py b/Doors.py index d045b3d5..329580e5 100644 --- a/Doors.py +++ b/Doors.py @@ -267,6 +267,7 @@ def create_doors(world, player): create_door(player, 'Hera Up Stairs Landing to Ranged Crystal', Lgcl), create_door(player, 'Hera Up Stairs Landing Ranged Crystal Exit', Lgcl), create_door(player, 'Hera Front to Back Barrier - Orange', Lgcl), + create_door(player, 'Hera Front to Back Bypass', Lgcl), create_door(player, 'Hera Back to Front Barrier - Orange', Lgcl), create_door(player, 'Hera Back to Ranged Crystal', Lgcl), create_door(player, 'Hera Back Ranged Crystal Exit', Lgcl), @@ -381,7 +382,8 @@ def create_doors(world, player): create_door(player, 'PoD Arena North to Landing Barrier - Orange', Lgcl), create_door(player, 'PoD Arena Main to Ranged Crystal', Lgcl), create_door(player, 'PoD Arena Main to Landing Barrier - Blue', Lgcl), - create_door(player, 'PoD Arena Main to North Ranged Barrier - Orange', Lgcl), + create_door(player, 'PoD Arena Main to Landing Bypass', Lgcl), + create_door(player, 'PoD Arena Main to Right Bypass', Lgcl), create_door(player, 'PoD Arena Main Ranged Crystal Exit', Lgcl), create_door(player, 'PoD Arena Bridge to Ranged Crystal', Lgcl), create_door(player, 'PoD Arena Bridge Ranged Crystal Exit', Lgcl), @@ -389,6 +391,10 @@ def create_doors(world, player): create_door(player, 'PoD Arena Landing to Right Barrier - Blue', Lgcl), create_door(player, 'PoD Arena Landing to North Barrier - Orange', Lgcl), create_door(player, 'PoD Arena Right to Landing Barrier - Blue', Lgcl), + create_door(player, 'PoD Arena Right to Ranged Crystal', Lgcl), + create_door(player, 'PoD Arena Right Ranged Crystal Exit', Lgcl), + create_door(player, 'PoD Arena Ledge to Ranged Crystal', Lgcl), + create_door(player, 'PoD Arena Ledge Ranged Crystal Exit', Lgcl), create_door(player, 'PoD Arena Ledge ES', Nrml).dir(Ea, 0x2a, Bot, High).pos(2), create_door(player, 'PoD Sexy Statue W', Nrml).dir(We, 0x2b, Mid, High).pos(3), create_door(player, 'PoD Sexy Statue NW', Nrml).dir(No, 0x2b, Left, High).trap(0x1).pos(2), @@ -426,6 +432,7 @@ def create_doors(world, player): create_door(player, 'PoD Mimics 2 NW', Intr).dir(No, 0x1b, Left, High).pos(0), create_door(player, 'PoD Bow Statue SW', Intr).dir(So, 0x1b, Left, High).pos(0), create_door(player, 'PoD Bow Statue Left to Right Barrier - Orange', Lgcl), + create_door(player, 'PoD Bow Statue Left to Right Bypass', Lgcl), create_door(player, 'PoD Bow Statue Right to Left Barrier - Orange', Lgcl), create_door(player, 'PoD Bow Statue Right to Ranged Crystal', Lgcl), create_door(player, 'PoD Bow Statue Ranged Crystal Exit', Lgcl), @@ -1064,6 +1071,7 @@ def create_doors(world, player): create_door(player, 'GT Hookshot South-North Path', Lgcl), create_door(player, 'GT Hookshot Platform Blue Barrier', Lgcl), create_door(player, 'GT Hookshot Entry Blue Barrier', Lgcl), + create_door(player, 'GT Hookshot Platform Barrier Bypass', Lgcl), create_door(player, 'GT Hookshot South Entry to Ranged Crystal', Lgcl), create_door(player, 'GT HookShot South Entry Ranged Crystal Exit', Lgcl), create_door(player, 'GT Hookshot NW', Nrml).dir(No, 0x8b, Left, High).pos(4), @@ -1071,9 +1079,15 @@ def create_doors(world, player): create_door(player, 'GT Map Room WS', Intr).dir(We, 0x8b, Bot, High).small_key().pos(1), create_door(player, 'GT Hookshot SW', Nrml).dir(So, 0x8b, Left, High).pos(3).portal(Z, 0x02), create_door(player, 'GT Double Switch NW', Nrml).dir(No, 0x9b, Left, High).pos(1).kill(), - create_door(player, 'GT Double Switch to Pot Corners Barrier - Orange', Lgcl), - create_door(player, 'GT Double Switch Pot Corners to Barrier - Orange', Lgcl), - create_door(player, 'GT Double Switch Pot Corners to Barrier - Blue', Lgcl), + create_door(player, 'GT Double Switch Entry to Pot Corners Barrier - Orange', Lgcl), + create_door(player, 'GT Double Switch Entry to Left Barrier - Orange', Lgcl), + create_door(player, 'GT Double Switch Entry to Ranged Switches', Lgcl), + create_door(player, 'GT Double Switch Entry Ranged Switches Exit', Lgcl), + create_door(player, 'GT Double Switch Left to Entry Barrier - Orange', Lgcl), + create_door(player, 'GT Double Switch Left to Pot Corners Bypass', Lgcl), + create_door(player, 'GT Double Switch Left to Entry Bypass', Lgcl), + create_door(player, 'GT Double Switch Pot Corners to Entry Barrier - Orange', Lgcl), + create_door(player, 'GT Double Switch Pot Corners to Exit Barrier - Blue', Lgcl), create_door(player, 'GT Double Switch Pot Corners to Ranged Switches', Lgcl), create_door(player, 'GT Double Switch Pot Corners Ranged Switches Exit', Lgcl), create_door(player, 'GT Double Switch Exit to Blue Barrier', Lgcl), @@ -1221,6 +1235,7 @@ def create_doors(world, player): world.get_door('Hera Front to Up Stairs Barrier - Orange', player).barrier(CrystalBarrier.Orange) world.get_door('Hera Up Stairs to Front Barrier - Orange', player).barrier(CrystalBarrier.Orange) world.get_door('Hera Up Stairs Landing Ranged Crystal Exit', player).c_switch() + world.get_door('Hera Front to Back Bypass', player).barrier(CrystalBarrier.Blue) world.get_door('Hera Front to Back Barrier - Orange', player).barrier(CrystalBarrier.Orange) world.get_door('Hera Back to Front Barrier - Orange', player).barrier(CrystalBarrier.Orange) world.get_door('Hera Back Ranged Crystal Exit', player).c_switch() @@ -1239,18 +1254,22 @@ def create_doors(world, player): world.get_door('PoD Arena North to Landing Barrier - Orange', player).barrier(CrystalBarrier.Orange) world.get_door('PoD Arena Main to Landing Barrier - Blue', player).barrier(CrystalBarrier.Blue) - world.get_door('PoD Arena Main to North Ranged Barrier - Orange', player).barrier(CrystalBarrier.Orange) + world.get_door('PoD Arena Main to Landing Bypass', player).barrier(CrystalBarrier.Orange) + world.get_door('PoD Arena Main to Right Bypass', player).barrier(CrystalBarrier.Orange) world.get_door('PoD Arena Main Ranged Crystal Exit', player).c_switch() world.get_door('PoD Arena Bridge Ranged Crystal Exit', player).c_switch() world.get_door('PoD Arena Landing to Main Barrier - Blue', player).barrier(CrystalBarrier.Blue) world.get_door('PoD Arena Landing to Right Barrier - Blue', player).barrier(CrystalBarrier.Blue) world.get_door('PoD Arena Landing to North Barrier - Orange', player).barrier(CrystalBarrier.Orange) world.get_door('PoD Arena Right to Landing Barrier - Blue', player).barrier(CrystalBarrier.Blue) + world.get_door('PoD Arena Right Ranged Crystal Exit', player).c_switch() + world.get_door('PoD Arena Ledge Ranged Crystal Exit', player).c_switch() world.get_door('PoD Sexy Statue W', player).c_switch() world.get_door('PoD Sexy Statue NW', player).c_switch() world.get_door('PoD Map Balcony Ranged Crystal Exit', player).c_switch() world.get_door('PoD Bow Statue SW', player).c_switch() + world.get_door('PoD Bow Statue Left to Right Bypass', player).barrier(CrystalBarrier.Blue) world.get_door('PoD Bow Statue Left to Right Barrier - Orange', player).barrier(CrystalBarrier.Orange) world.get_door('PoD Bow Statue Right to Left Barrier - Orange', player).barrier(CrystalBarrier.Orange) world.get_door('PoD Bow Statue Ranged Crystal Exit', player).c_switch() @@ -1356,6 +1375,7 @@ def create_doors(world, player): world.get_door('GT Hookshot South-North Path', player).c_switch() world.get_door('GT Hookshot South-East Path', player).c_switch() world.get_door('GT Hookshot ES', player).c_switch() + world.get_door('GT Hookshot Platform Barrier Bypass', player).barrier(CrystalBarrier.Orange) world.get_door('GT Hookshot Platform Blue Barrier', player).barrier(CrystalBarrier.Blue) world.get_door('GT HookShot South Entry Ranged Crystal Exit', player).c_switch() world.get_door('GT Spike Crystals WN', player).c_switch() @@ -1369,9 +1389,14 @@ def create_doors(world, player): world.get_door('GT Crystal Inner Circle Barrier - Orange', player).c_switch() world.get_door('GT Crystal Circles Ranged Crystal Exit', player).c_switch() world.get_door('GT Hookshot Entry Blue Barrier', player).barrier(CrystalBarrier.Blue) - world.get_door('GT Double Switch to Pot Corners Barrier - Orange', player).barrier(CrystalBarrier.Orange) - world.get_door('GT Double Switch Pot Corners to Barrier - Orange', player).barrier(CrystalBarrier.Orange) - world.get_door('GT Double Switch Pot Corners to Barrier - Blue', player).barrier(CrystalBarrier.Blue) + world.get_door('GT Double Switch Entry to Pot Corners Barrier - Orange', player).barrier(CrystalBarrier.Orange) + world.get_door('GT Double Switch Entry to Left Barrier - Orange', player).barrier(CrystalBarrier.Orange) + world.get_door('GT Double Switch Entry Ranged Switches Exit', player).c_switch() + world.get_door('GT Double Switch Left to Entry Barrier - Orange', player).barrier(CrystalBarrier.Orange) + world.get_door('GT Double Switch Left to Entry Bypass', player).barrier(CrystalBarrier.Blue) + world.get_door('GT Double Switch Left to Pot Corners Bypass', player).barrier(CrystalBarrier.Blue) + world.get_door('GT Double Switch Pot Corners to Entry Barrier - Orange', player).barrier(CrystalBarrier.Orange) + world.get_door('GT Double Switch Pot Corners to Exit Barrier - Blue', player).barrier(CrystalBarrier.Blue) world.get_door('GT Double Switch Pot Corners Ranged Switches Exit', player).c_switch() world.get_door('GT Double Switch Exit to Blue Barrier', player).barrier(CrystalBarrier.Blue) diff --git a/Dungeons.py b/Dungeons.py index 2e333572..44e38e4d 100644 --- a/Dungeons.py +++ b/Dungeons.py @@ -212,7 +212,7 @@ tower_regions = [ pod_regions = [ 'PoD Lobby', 'PoD Left Cage', 'PoD Middle Cage', 'PoD Shooter Room', 'PoD Pit Room', 'PoD Pit Room Blocked', 'PoD Arena Main', 'PoD Arena Main - Ranged Crystal', 'PoD Arena North', 'PoD Arena Bridge', 'PoD Arena Bridge - Ranged Crystal', - 'PoD Arena Landing', 'PoD Arena Right', 'PoD Arena Ledge', 'PoD Sexy Statue', + 'PoD Arena Landing', 'PoD Arena Right', 'PoD Arena Right - Ranged Crystal', 'PoD Arena Ledge', 'PoD Arena Ledge - Ranged Crystal', 'PoD Sexy Statue', 'PoD Map Balcony', 'PoD Map Balcony - Ranged Crystal', 'PoD Conveyor', 'PoD Mimics 1', 'PoD Jelly Hall', 'PoD Warp Hint', 'PoD Warp Room', 'PoD Stalfos Basement', 'PoD Basement Ledge', 'PoD Big Key Landing', 'PoD Falling Bridge', 'PoD Falling Bridge Ledge', 'PoD Dark Maze', 'PoD Big Chest Balcony', 'PoD Compass Room', 'PoD Dark Basement', @@ -299,7 +299,8 @@ gt_regions = [ 'GT Crystal Conveyor Corner - Ranged Crystal', 'GT Compass Room', 'GT Invisible Bridges', 'GT Invisible Catwalk', 'GT Conveyor Cross', 'GT Hookshot East Platform', 'GT Hookshot North Platform', 'GT Hookshot South Platform', 'GT Hookshot South Entry', 'GT Hookshot South Entry - Ranged Crystal', 'GT Map Room', - 'GT Double Switch Entry', 'GT Double Switch Pot Corners - Ranged Switches', 'GT Double Switch Pot Corners', + 'GT Double Switch Entry', 'GT Double Switch Pot Corners - Ranged Switches', 'GT Double Switch Pot Corners', 'GT Double Switch Left', + 'GT Double Switch Entry - Ranged Switches', 'GT Double Switch Exit', 'GT Spike Crystals', 'GT Warp Maze - Left Section', 'GT Warp Maze - Mid Section', 'GT Warp Maze - Right Section', 'GT Warp Maze - Pit Section', 'GT Warp Maze - Pit Exit Warp Spot', 'GT Warp Maze Exit Section', 'GT Firesnake Room', 'GT Firesnake Room Ledge', 'GT Warp Maze - Rail Choice', diff --git a/Regions.py b/Regions.py index fc403261..ac24520b 100644 --- a/Regions.py +++ b/Regions.py @@ -339,7 +339,7 @@ def create_dungeon_regions(world, player): # Hera create_dungeon_region(player, 'Hera Lobby', 'Tower of Hera', None, ['Hera Lobby S', 'Hera Lobby to Crystal', 'Hera Lobby to Front Barrier - Blue']), create_dungeon_region(player, 'Hera Lobby Crystal', 'Tower of Hera', None, ['Hera Lobby Crystal Exit']), - create_dungeon_region(player, 'Hera Front', 'Tower of Hera', None, ['Hera Front to Crystal', 'Hera Front to Lobby Barrier - Blue', 'Hera Front to Down Stairs Barrier - Blue', 'Hera Front to Up Stairs Barrier - Orange', 'Hera Front to Back Barrier - Orange']), + create_dungeon_region(player, 'Hera Front', 'Tower of Hera', None, ['Hera Front to Crystal', 'Hera Front to Lobby Barrier - Blue', 'Hera Front to Down Stairs Barrier - Blue', 'Hera Front to Up Stairs Barrier - Orange', 'Hera Front to Back Barrier - Orange', 'Hera Front to Back Bypass']), create_dungeon_region(player, 'Hera Front Crystal', 'Tower of Hera', None, ['Hera Front Crystal Exit']), create_dungeon_region(player, 'Hera Down Stairs Landing', 'Tower of Hera', None, ['Hera Lobby Down Stairs', 'Hera Down Stairs to Front Barrier - Blue', 'Hera Down Stairs Landing to Ranged Crystal']), create_dungeon_region(player, 'Hera Down Stairs Landing - Ranged Crystal', 'Tower of Hera', None, ['Hera Down Stairs Landing Ranged Crystal Exit']), @@ -388,15 +388,17 @@ def create_dungeon_regions(world, player): create_dungeon_region(player, 'PoD Pit Room', 'Palace of Darkness', None, ['PoD Pit Room S', 'PoD Pit Room NW', 'PoD Pit Room Bomb Hole', 'PoD Pit Room Block Path N']), create_dungeon_region(player, 'PoD Pit Room Blocked', 'Palace of Darkness', None, ['PoD Pit Room NE', 'PoD Pit Room Freefall', 'PoD Pit Room Block Path S']), - create_dungeon_region(player, 'PoD Arena Main', 'Palace of Darkness', None, ['PoD Arena Main SW', 'PoD Arena Main to Ranged Crystal', 'PoD Arena Main to Landing Barrier - Blue', 'PoD Arena Main to North Ranged Barrier - Orange']), + create_dungeon_region(player, 'PoD Arena Main', 'Palace of Darkness', None, ['PoD Arena Main SW', 'PoD Arena Main to Ranged Crystal', 'PoD Arena Main to Landing Barrier - Blue', 'PoD Arena Main to Landing Bypass', 'PoD Arena Main to Right Bypass']), create_dungeon_region(player, 'PoD Arena Main - Ranged Crystal', 'Palace of Darkness', None, ['PoD Arena Main Ranged Crystal Exit']), create_dungeon_region(player, 'PoD Arena North', 'Palace of Darkness', None, ['PoD Arena Main NW', 'PoD Arena Main NE', 'PoD Arena North Drop Down', 'PoD Arena North to Landing Barrier - Orange']), create_dungeon_region(player, 'PoD Arena Bridge', 'Palace of Darkness', ['Palace of Darkness - The Arena - Bridge'], ['PoD Arena Bridge SE', 'PoD Arena Bridge Drop Down', 'PoD Arena Bridge to Ranged Crystal']), create_dungeon_region(player, 'PoD Arena Bridge - Ranged Crystal', 'Palace of Darkness', None, ['PoD Arena Bridge Ranged Crystal Exit']), create_dungeon_region(player, 'PoD Arena Landing', 'Palace of Darkness', None, ['PoD Arena Landing to Main Barrier - Blue', 'PoD Arena Landing to Right Barrier - Blue', 'PoD Arena Landing to North Barrier - Orange', 'PoD Arena Landing Bonk Path']), - create_dungeon_region(player, 'PoD Arena Right', 'Palace of Darkness', None, ['PoD Arena Crystals E', 'PoD Arena Right to Landing Barrier - Blue']), + create_dungeon_region(player, 'PoD Arena Right', 'Palace of Darkness', None, ['PoD Arena Crystals E', 'PoD Arena Right to Landing Barrier - Blue', 'PoD Arena Right to Ranged Crystal']), + create_dungeon_region(player, 'PoD Arena Right - Ranged Crystal', 'Palace of Darkness', None, ['PoD Arena Right Ranged Crystal Exit']), + create_dungeon_region(player, 'PoD Arena Ledge', 'Palace of Darkness', ['Palace of Darkness - The Arena - Ledge'], ['PoD Arena Ledge ES', 'PoD Arena Ledge to Ranged Crystal']), + create_dungeon_region(player, 'PoD Arena Ledge - Ranged Crystal', 'Palace of Darkness', None, ['PoD Arena Ledge Ranged Crystal Exit']), - create_dungeon_region(player, 'PoD Arena Ledge', 'Palace of Darkness', ['Palace of Darkness - The Arena - Ledge'], ['PoD Arena Ledge ES']), create_dungeon_region(player, 'PoD Sexy Statue', 'Palace of Darkness', None, ['PoD Sexy Statue W', 'PoD Sexy Statue NW']), create_dungeon_region(player, 'PoD Map Balcony', 'Palace of Darkness', ['Palace of Darkness - Map Chest'], ['PoD Map Balcony to Ranged Crystal', 'PoD Map Balcony WS', 'PoD Map Balcony South Stairs', 'PoD Map Balcony Drop Down']), create_dungeon_region(player, 'PoD Map Balcony - Ranged Crystal', 'Palace of Darkness', None, ['PoD Map Balcony Ranged Crystal Exit']), @@ -418,7 +420,7 @@ def create_dungeon_regions(world, player): create_dungeon_region(player, 'PoD Mimics 2', 'Palace of Darkness', None, ['PoD Mimics 2 SW', 'PoD Mimics 2 NW']), create_dungeon_region(player, 'PoD Bow Statue', 'Palace of Darkness', None, ['PoD Bow Statue SW', 'PoD Bow Statue Down Ladder']), - create_dungeon_region(player, 'PoD Bow Statue Left', 'Palace of Darkness', None, ['PoD Bow Statue SW', 'PoD Bow Statue Left to Right Barrier - Orange']), + create_dungeon_region(player, 'PoD Bow Statue Left', 'Palace of Darkness', None, ['PoD Bow Statue SW', 'PoD Bow Statue Left to Right Barrier - Orange', 'PoD Bow Statue Left to Right Bypass']), create_dungeon_region(player, 'PoD Bow Statue Right', 'Palace of Darkness', None, ['PoD Bow Statue Right to Left Barrier - Orange', 'PoD Bow Statue Right to Ranged Crystal', 'PoD Bow Statue Down Ladder']), create_dungeon_region(player, 'PoD Bow Statue Right - Ranged Crystal', 'Palace of Darkness', None, ['PoD Bow Statue Ranged Crystal Exit']), @@ -732,15 +734,18 @@ def create_dungeon_regions(world, player): create_dungeon_region(player, 'GT Conveyor Cross', 'Ganon\'s Tower', ['Ganons Tower - Conveyor Cross Pot Key'], ['GT Conveyor Cross EN', 'GT Conveyor Cross WN']), create_dungeon_region(player, 'GT Hookshot East Platform', 'Ganon\'s Tower', None, ['GT Hookshot EN', 'GT Hookshot East-North Path', 'GT Hookshot East-South Path']), create_dungeon_region(player, 'GT Hookshot North Platform', 'Ganon\'s Tower', None, ['GT Hookshot NW', 'GT Hookshot North-East Path', 'GT Hookshot North-South Path']), - create_dungeon_region(player, 'GT Hookshot South Platform', 'Ganon\'s Tower', None, ['GT Hookshot ES', 'GT Hookshot South-East Path', 'GT Hookshot South-North Path', 'GT Hookshot Platform Blue Barrier']), + create_dungeon_region(player, 'GT Hookshot South Platform', 'Ganon\'s Tower', None, ['GT Hookshot ES', 'GT Hookshot South-East Path', 'GT Hookshot South-North Path', 'GT Hookshot Platform Blue Barrier', 'GT Hookshot Platform Barrier Bypass']), create_dungeon_region(player, 'GT Hookshot South Entry', 'Ganon\'s Tower', None, ['GT Hookshot SW', 'GT Hookshot Entry Blue Barrier', 'GT Hookshot South Entry to Ranged Crystal']), create_dungeon_region(player, 'GT Hookshot South Entry - Ranged Crystal', 'Ganon\'s Tower', None, ['GT HookShot South Entry Ranged Crystal Exit']), create_dungeon_region(player, 'GT Map Room', 'Ganon\'s Tower', ['Ganons Tower - Map Chest'], ['GT Map Room WS']), - create_dungeon_region(player, 'GT Double Switch Entry', 'Ganon\'s Tower', None, ['GT Double Switch NW', 'GT Double Switch to Pot Corners Barrier - Orange']), - create_dungeon_region(player, 'GT Double Switch Pot Corners', 'Ganon\'s Tower', ['Ganons Tower - Double Switch Pot Key'], ['GT Double Switch Pot Corners to Barrier - Orange', 'GT Double Switch Pot Corners to Barrier - Blue', 'GT Double Switch Pot Corners to Ranged Switches']), + create_dungeon_region(player, 'GT Double Switch Entry', 'Ganon\'s Tower', None, ['GT Double Switch NW', 'GT Double Switch Entry to Left Barrier - Orange', 'GT Double Switch Entry to Pot Corners Barrier - Orange', 'GT Double Switch Entry to Ranged Switches']), + create_dungeon_region(player, 'GT Double Switch Entry - Ranged Switches', 'Ganon\'s Tower', None, ['GT Double Switch Entry Ranged Switches Exit']), + create_dungeon_region(player, 'GT Double Switch Left', 'Ganon\'s Tower', None, ['GT Double Switch Left to Entry Barrier - Orange', 'GT Double Switch Left to Entry Bypass', 'GT Double Switch Left to Pot Corners Bypass']), + create_dungeon_region(player, 'GT Double Switch Pot Corners', 'Ganon\'s Tower', ['Ganons Tower - Double Switch Pot Key'], ['GT Double Switch Pot Corners to Entry Barrier - Orange', 'GT Double Switch Pot Corners to Exit Barrier - Blue', 'GT Double Switch Pot Corners to Ranged Switches']), create_dungeon_region(player, 'GT Double Switch Pot Corners - Ranged Switches', 'Ganon\'s Tower', None, ['GT Double Switch Pot Corners Ranged Switches Exit']), create_dungeon_region(player, 'GT Double Switch Exit', 'Ganon\'s Tower', None, ['GT Double Switch EN', 'GT Double Switch Exit to Blue Barrier']), + create_dungeon_region(player, 'GT Spike Crystals', 'Ganon\'s Tower', None, ['GT Spike Crystals WN', 'GT Spike Crystals Warp']), create_dungeon_region(player, 'GT Warp Maze - Left Section', 'Ganon\'s Tower', None, ['GT Warp Maze - Left Section Warp']), create_dungeon_region(player, 'GT Warp Maze - Mid Section', 'Ganon\'s Tower', None, ['GT Warp Maze - Mid Section Left Warp', 'GT Warp Maze - Mid Section Right Warp']), @@ -820,6 +825,8 @@ def create_dungeon_regions(world, player): world.get_region('Hera Startile Wide', player).crystal_switch = True world.get_region('PoD Arena Main - Ranged Crystal', player).crystal_switch = True world.get_region('PoD Arena Bridge - Ranged Crystal', player).crystal_switch = True + world.get_region('PoD Arena Right - Ranged Crystal', player).crystal_switch = True + world.get_region('PoD Arena Ledge - Ranged Crystal', player).crystal_switch = True world.get_region('PoD Map Balcony - Ranged Crystal', player).crystal_switch = True world.get_region('PoD Sexy Statue', player).crystal_switch = True world.get_region('PoD Bow Statue Left', player).crystal_switch = True @@ -854,6 +861,8 @@ def create_dungeon_regions(world, player): world.get_region('GT Hookshot South Platform', player).crystal_switch = True world.get_region('GT Hookshot South Entry - Ranged Crystal', player).crystal_switch = True # Relevant to indicate north door can access c_switch + world.get_region('GT Double Switch Left', player).crystal_switch = True + world.get_region('GT Double Switch Entry - Ranged Switches', player).crystal_switch = True world.get_region('GT Double Switch Pot Corners - Ranged Switches', player).crystal_switch = True world.get_region('GT Spike Crystals', player).crystal_switch = True world.get_region('GT Crystal Paths', player).crystal_switch = True diff --git a/Rules.py b/Rules.py index 85013efc..d13b3e2f 100644 --- a/Rules.py +++ b/Rules.py @@ -355,22 +355,28 @@ def global_rules(world, player): set_rule(world.get_entrance('Hera Up Stairs to Front Barrier - Orange', player), lambda state: state.can_reach_orange(world.get_region('Hera Up Stairs Landing', player), player)) set_rule(world.get_entrance('Hera Up Stairs Landing to Ranged Crystal', player), lambda state: state.can_hit_crystal_through_barrier(player)) set_rule(world.get_entrance('Hera Front to Back Barrier - Orange', player), lambda state: state.can_reach_orange(world.get_region('Hera Front', player), player)) + set_rule(world.get_entrance('Hera Front to Back Bypass', player), lambda state: state.can_use_bombs(player) or state.can_use_arrows(player) or state.has('Red Boomerang', player) or state.has('Blue Boomerang', player) or state.has('Cane of Somaria', player) or state.has('Fire Rod', player) or state.has('Ice Rod', player)) # or state.has_beam_sword(player) set_rule(world.get_entrance('Hera Back to Front Barrier - Orange', player), lambda state: state.can_reach_orange(world.get_region('Hera Back', player), player)) - set_rule(world.get_entrance('Hera Back to Ranged Crystal', player), lambda state:state.can_shoot_arrows(player) or state.has('Fire Rod', player) or state.has('Ice Rod', player)) + set_rule(world.get_entrance('Hera Back to Ranged Crystal', player), lambda state: False) # state.can_shoot_arrows(player) or state.has('Fire Rod', player) or state.has('Ice Rod', player) or state.has('Cane of Somaria', player) or state.has_beam_sword(player) or (state.has('Hookshot', player) and state.has('Red Boomerang', player)) set_rule(world.get_entrance('PoD Arena Main to Ranged Crystal', player), lambda state: True) # Can always throw pots here set_rule(world.get_entrance('PoD Arena Bridge to Ranged Crystal', player), lambda state: state.can_shoot_arrows(player) or state.has('Red Boomerang', player) or state.has('Fire Rod', player) or state.has('Ice Rod', player) or state.has('Cane of Somaria', player)) - set_rule(world.get_entrance('PoD Arena Main to North Ranged Barrier - Orange', player), lambda state: state.can_use_bombs(player) or state.has('Cane of Somaria', player)) + set_rule(world.get_entrance('PoD Arena Main to Landing Bypass', player), lambda state: state.can_use_bombs(player) or state.has('Cane of Somaria', player)) + set_rule(world.get_entrance('PoD Arena Main to Right Bypass', player), lambda state: state.can_use_bombs(player) or state.has('Cane of Somaria', player)) set_rule(world.get_entrance('PoD Arena North to Landing Barrier - Orange', player), lambda state: state.can_reach_orange(world.get_region('PoD Arena North', player), player)) set_rule(world.get_entrance('PoD Arena Landing to North Barrier - Orange', player), lambda state: state.can_reach_orange(world.get_region('PoD Arena Landing', player), player)) set_rule(world.get_entrance('PoD Arena Main to Landing Barrier - Blue', player), lambda state: state.can_reach_blue(world.get_region('PoD Arena Main', player), player)) set_rule(world.get_entrance('PoD Arena Landing to Main Barrier - Blue', player), lambda state: state.can_reach_blue(world.get_region('PoD Arena Landing', player), player)) set_rule(world.get_entrance('PoD Arena Landing to Right Barrier - Blue', player), lambda state: state.can_reach_blue(world.get_region('PoD Arena Landing', player), player)) set_rule(world.get_entrance('PoD Arena Right to Landing Barrier - Blue', player), lambda state: state.can_reach_blue(world.get_region('PoD Arena Right', player), player)) - set_rule(world.get_entrance('PoD Map Balcony to Ranged Crystal', player), lambda state: state.has('Cane of Somaria', player) or state.can_use_bombs(player)) + set_rule(world.get_entrance('PoD Arena Right to Ranged Crystal', player), lambda state: False) # (state.has('Cane of Somaria', player) and state.has_Boots(player)) + set_rule(world.get_entrance('PoD Arena Ledge to Ranged Crystal', player), lambda state: False) # state.has('Cane of Somaria', player) + set_rule(world.get_entrance('PoD Map Balcony to Ranged Crystal', player), lambda state: state.can_use_bombs(player) or state.has('Cane of Somaria', player)) set_rule(world.get_entrance('PoD Bow Statue Left to Right Barrier - Orange', player), lambda state: state.can_reach_orange(world.get_region('PoD Bow Statue Left', player), player)) + set_rule(world.get_entrance('PoD Bow Statue Left to Right Bypass', player), lambda state: state.has('Cane of Somaria', player)) # state.can_use_bombs(player) or state.can_shoot_arrows(player) or state.has_beam_sword(player) or state.has('Red Boomrang', player) or state.has('Ice Rod', player) or state.has('Fire Rod', player) set_rule(world.get_entrance('PoD Bow Statue Right to Left Barrier - Orange', player), lambda state: state.can_reach_orange(world.get_region('PoD Bow Statue Right', player), player)) set_rule(world.get_entrance('PoD Bow Statue Right to Ranged Crystal', player), lambda state: state.has('Cane of Somaria', player)) + set_rule(world.get_entrance('PoD Dark Pegs Landing to Ranged Crystal', player), lambda state: state.has('Cane of Somaria', player)) set_rule(world.get_entrance('PoD Dark Pegs Right to Middle Barrier - Orange', player), lambda state: state.can_reach_orange(world.get_region('PoD Dark Pegs Right', player), player)) set_rule(world.get_entrance('PoD Dark Pegs Middle to Right Barrier - Orange', player), lambda state: state.can_reach_orange(world.get_region('PoD Dark Pegs Middle', player), player)) @@ -431,12 +437,19 @@ def global_rules(world, player): set_rule(world.get_entrance('TR Crystal Maze End to Ranged Crystal', player), lambda state: state.has('Cane of Somaria', player)) set_rule(world.get_entrance('GT Hookshot Platform Blue Barrier', player), lambda state: state.can_reach_blue(world.get_region('GT Hookshot South Platform', player), player)) + set_rule(world.get_entrance('GT Hookshot Platform Barrier Bypass', player), lambda state: state.can_use_bombs(player) or state.has('Blue Boomerang', player) or state.has('Red Boomerang', player) or state.has('Cane of Somaria', player)) set_rule(world.get_entrance('GT Hookshot South Entry to Ranged Crystal', player), lambda state: state.can_use_bombs(player) or state.has('Blue Boomerang', player) or state.has('Red Boomerang', player) or state.has('Cane of Somaria', player)) set_rule(world.get_entrance('GT Hookshot Entry Blue Barrier', player), lambda state: state.can_reach_blue(world.get_region('GT Hookshot South Entry', player), player)) - set_rule(world.get_entrance('GT Double Switch to Pot Corners Barrier - Orange', player), lambda state: state.can_reach_orange(world.get_region('GT Double Switch Entry', player), player)) - set_rule(world.get_entrance('GT Double Switch Pot Corners to Barrier - Orange', player), lambda state: state.can_reach_orange(world.get_region('GT Double Switch Pot Corners', player), player)) - set_rule(world.get_entrance('GT Double Switch Pot Corners to Barrier - Blue', player), lambda state: state.can_reach_blue(world.get_region('GT Double Switch Pot Corners', player), player)) - set_rule(world.get_entrance('GT Double Switch Pot Corners to Ranged Switches', player), lambda state: (state.has('Blue Boomerang', player) and state.has('Hookshot', player)) or state.has('Red Boomerang', player) or state.has('Cane of Somaria', player) or state.can_use_bombs(player)) + + set_rule(world.get_entrance('GT Double Switch Entry to Pot Corners Barrier - Orange', player), lambda state: state.can_reach_orange(world.get_region('GT Double Switch Entry', player), player)) + set_rule(world.get_entrance('GT Double Switch Entry to Left Barrier - Orange', player), lambda state: state.can_reach_orange(world.get_region('GT Double Switch Entry', player), player)) + set_rule(world.get_entrance('GT Double Switch Entry to Ranged Switches', player), lambda state: False) # state.has('Cane of Somaria', player) + set_rule(world.get_entrance('GT Double Switch Left to Entry Barrier - Orange', player), lambda state: state.can_reach_orange(world.get_region('GT Double Switch Left', player), player)) + set_rule(world.get_entrance('GT Double Switch Left to Entry Bypass', player), lambda state: state.can_use_bombs(player) or state.has('Cane of Somaria') or state.has('Red Boomerang', player) or state.has('Blue Boomerang', player)) + set_rule(world.get_entrance('GT Double Switch Left to Pot Corners Bypass', player), lambda state: state.can_use_bombs(player) or state.has('Cane of Somaria') or state.has('Red Boomerang', player) or (state.has('Blue Boomerang', player) and state.has('Hookshot', player))) + set_rule(world.get_entrance('GT Double Switch Pot Corners to Entry Barrier - Orange', player), lambda state: state.can_reach_orange(world.get_region('GT Double Switch Pot Corners', player), player)) + set_rule(world.get_entrance('GT Double Switch Pot Corners to Exit Barrier - Blue', player), lambda state: state.can_reach_blue(world.get_region('GT Double Switch Pot Corners', player), player)) + set_rule(world.get_entrance('GT Double Switch Pot Corners to Ranged Switches', player), lambda state: False) # state.has('Cane of Somaria', player) and state.has_Boots(player) set_rule(world.get_entrance('GT Double Switch Exit to Blue Barrier', player), lambda state: state.can_reach_blue(world.get_region('GT Double Switch Exit', player), player)) set_rule(world.get_entrance('GT Crystal Conveyor to Corner Barrier - Blue', player), lambda state: state.can_reach_blue(world.get_region('GT Crystal Conveyor', player), player)) @@ -1663,7 +1676,6 @@ bunny_impassible_doors = { 'PoD Left Cage SW', 'PoD Middle Cage SE', 'PoD Pit Room Bomb Hole', 'PoD Stalfos Basement Warp', 'PoD Arena Main to Landing Barrier - Blue', 'PoD Arena Landing to Right Barrier - Blue', 'PoD Arena Right to Landing Barrier - Blue', 'PoD Arena Main to Landing Barrier - Blue', - 'PoD Arena Main to North Ranged Barrier - Orange', 'PoD Arena Landing Bonk Path', 'PoD Sexy Statue NW', 'PoD Map Balcony Drop Down', 'PoD Mimics 1 NW', 'PoD Falling Bridge Path N', 'PoD Falling Bridge Path S', 'PoD Mimics 2 NW', 'PoD Bow Statue Down Ladder', 'PoD Dark Pegs Landing to Right', @@ -1703,7 +1715,7 @@ bunny_impassible_doors = { 'GT Crystal Conveyor NE', 'GT Crystal Conveyor WN', 'GT Conveyor Cross EN', 'GT Conveyor Cross WN', 'GT Hookshot East-North Path', 'GT Hookshot East-South Path', 'GT Hookshot North-East Path', 'GT Hookshot North-South Path', 'GT Hookshot South-East Path', 'GT Hookshot South-North Path', - 'GT Hookshot Platform Blue Barrier', 'GT Hookshot Entry Blue Barrier', 'GT Double Switch Pot Corners to Barrier - Blue', + 'GT Hookshot Platform Blue Barrier', 'GT Hookshot Entry Blue Barrier', 'GT Double Switch Pot Corners to Exit Barrier - Blue', 'GT Double Switch Exit to Blue Barrier', 'GT Firesnake Room Hook Path', 'GT Falling Bridge WN', 'GT Falling Bridge WS', 'GT Ice Armos NE', 'GT Ice Armos WS', 'GT Crystal Paths SW', 'GT Mimics 1 NW', 'GT Mimics 1 ES', 'GT Mimics 2 WS', 'GT Mimics 2 NE', 'GT Hidden Spikes EN', 'GT Cannonball Bridge SE', 'GT Gauntlet 1 WN', 'GT Gauntlet 2 EN',