diff --git a/BaseClasses.py b/BaseClasses.py index a69ba623..46879529 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -570,7 +570,7 @@ class CollectionState(object): def can_reach_blue(self, region, player): - return region in self.reachable_regions[player] and self.reachable_regions[player][region] in [CrystalBarrier.Blue, CrystalBarrier.Either] and self.can_hit_crystal(player) + return region in self.reachable_regions[player] and self.reachable_regions[player][region] in [CrystalBarrier.Blue, CrystalBarrier.Either] def can_reach_orange(self, region, player): return region in self.reachable_regions[player] and self.reachable_regions[player][region] in [CrystalBarrier.Orange, CrystalBarrier.Either] diff --git a/DoorShuffle.py b/DoorShuffle.py index c244385a..63850aa9 100644 --- a/DoorShuffle.py +++ b/DoorShuffle.py @@ -1990,9 +1990,9 @@ logical_connections = [ ('Hera Lobby to Front Barrier - Blue', 'Hera Front'), ('Hera Front to Lobby Barrier - Blue', 'Hera Lobby'), - ('Hera Lobby to Crystal', 'Hera Lobby Crystal'), + ('Hera Lobby to Crystal', 'Hera Lobby - Crystal'), ('Hera Lobby Crystal Exit', 'Hera Lobby'), - ('Hera Front to Crystal', 'Hera Front Crystal'), + ('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'), @@ -2007,6 +2007,12 @@ logical_connections = [ ('Hera Back to Front Barrier - Orange', 'Hera Front'), ('Hera Back to Ranged Crystal', 'Hera Back - Ranged Crystal'), ('Hera Back Ranged Crystal Exit', 'Hera Back'), + ('Hera Basement Cage to Crystal', 'Hera Basement Cage - Crystal'), + ('Hera Basement Cage Crystal Exit', 'Hera Basement Cage'), + ('Hera Tridorm to Crystal', 'Hera Tridorm - Crystal'), + ('Hera Tridorm Crystal Exit', 'Hera Tridorm'), + ('Hera Startile Wide to Crystal', 'Hera Startile Wide - Crystal'), + ('Hera Startile Wide Crystal Exit', 'Hera Startile Wide'), ('Hera Big Chest Hook Path', 'Hera Big Chest Landing'), ('Hera Big Chest Landing Exit', 'Hera 4F'), @@ -2077,6 +2083,8 @@ logical_connections = [ ('Swamp Crystal Switch Outer Ranged Crystal Exit', 'Swamp Crystal Switch Outer'), ('Swamp Crystal Switch Inner to Outer Barrier - Blue', 'Swamp Crystal Switch Outer'), ('Swamp Crystal Switch Inner to Outer Bypass', 'Swamp Crystal Switch Outer'), + ('Swamp Crystal Switch Inner to Crystal', 'Swamp Crystal Switch Inner - Crystal'), + ('Swamp Crystal Switch Inner Crystal Exit', 'Swamp Crystal Switch Inner'), ('Swamp Compass Donut Push Block', 'Swamp Donut Top'), ('Swamp Shortcut Blue Barrier', 'Swamp Trench 2 Pots'), ('Swamp Trench 2 Pots Blue Barrier', 'Swamp Shortcut'), @@ -2095,6 +2103,7 @@ logical_connections = [ ('Swamp Drain Right Switch', 'Swamp Drain Left'), ('Swamp Flooded Spot Ladder', 'Swamp Flooded Room'), ('Swamp Flooded Room Ladder', 'Swamp Flooded Spot'), + ('Skull Pot Circle Star Path', 'Skull Map Room'), ('Skull Big Chest Hookpath', 'Skull 1 Lobby'), ('Skull Back Drop Star Path', 'Skull Small Hall'), @@ -2111,8 +2120,11 @@ logical_connections = [ ('Thieves Conveyor Block Path', 'Thieves Conveyor Bridge'), ("Thieves Blind's Cell Door", "Thieves Blind's Cell Interior"), ("Thieves Blind's Cell Exit", "Thieves Blind's Cell"), + ('Ice Cross Bottom Push Block Left', 'Ice Floor Switch'), ('Ice Cross Right Push Block Top', 'Ice Bomb Drop'), + ('Ice Conveyor to Crystal', 'Ice Conveyor - Crystal'), + ('Ice Conveyor Crystal Exit', 'Ice Conveyor'), ('Ice Big Key Push Block', 'Ice Dead End'), ('Ice Bomb Jump Ledge Orange Barrier', 'Ice Bomb Jump Catwalk'), ('Ice Bomb Jump Catwalk Orange Barrier', 'Ice Bomb Jump Ledge'), @@ -2123,6 +2135,9 @@ logical_connections = [ ('Ice Crystal Left Blue Barrier', 'Ice Crystal Block'), ('Ice Crystal Block Exit', 'Ice Crystal Left'), ('Ice Big Chest Landing Push Blocks', 'Ice Big Chest View'), + ('Ice Refill to Crystal', 'Ice Refill - Crystal'), + ('Ice Refill Crystal Exit', 'Ice Refill'), + ('Mire Lobby Gap', 'Mire Post-Gap'), ('Mire Post-Gap Gap', 'Mire Lobby'), ('Mire Hub Upper Blue Barrier', 'Mire Hub Switch'), @@ -2138,6 +2153,8 @@ logical_connections = [ ('Mire Crystal Dead End Right Barrier', 'Mire Map Spike Side'), ('Mire Hidden Shooters Block Path S', 'Mire Hidden Shooters'), ('Mire Hidden Shooters Block Path N', 'Mire Hidden Shooters Blocked'), + ('Mire Conveyor to Crystal', 'Mire Conveyor - Crystal'), + ('Mire Conveyor Crystal Exit', 'Mire Conveyor Crystal'), ('Mire Left Bridge Hook Path', 'Mire Right Bridge'), ('Mire Tall Dark and Roomy to Ranged Crystal', 'Mire Tall Dark and Roomy - Ranged Crystal'), ('Mire Tall Dark and Roomy Ranged Crystal Exit', 'Mire Tall Dark and Roomy'), @@ -2151,16 +2168,21 @@ logical_connections = [ ('Mire Compass Chest Exit', 'Mire Compass Room'), ('Mire South Fish Blue Barrier', 'Mire Fishbone'), ('Mire Fishbone Blue Barrier', 'Mire South Fish'), + ('TR Main Lobby Gap', 'TR Lobby Ledge'), ('TR Lobby Ledge Gap', 'TR Main Lobby'), ('TR Pipe Ledge Drop Down', 'TR Pipe Pit'), ('TR Big Chest Gap', 'TR Big Chest Entrance'), ('TR Big Chest Entrance Gap', 'TR Big Chest'), ('TR Chain Chomps Top to Bottom Barrier - Orange', 'TR Chain Chomps Bottom'), + ('TR Chain Chomps Top to Crystal', 'TR Chain Chomps Top - Crystal'), + ('TR Chain Chomps Top Crystal Exit', 'TR Chain Chomps Top'), ('TR Chain Chomps Bottom to Top Barrier - Orange', 'TR Chain Chomps Top'), ('TR Chain Chomps Bottom to Ranged Crystal', 'TR Chain Chomps Bottom - Ranged Crystal'), ('TR Chain Chomps Bottom Ranged Crystal Exit', 'TR Chain Chomps Bottom'), ('TR Pokey 2 Top to Bottom Barrier - Blue', 'TR Pokey 2 Bottom'), + ('TR Pokey 2 Top to Crystal', 'TR Pokey 2 Top - Crystal'), + ('TR Pokey 2 Top Crystal Exit', 'TR Pokey 2 Top'), ('TR Pokey 2 Bottom to Top Barrier - Blue', 'TR Pokey 2 Top'), ('TR Pokey 2 Bottom to Ranged Crystal', 'TR Pokey 2 Bottom - Ranged Crystal'), ('TR Pokey 2 Bottom Ranged Crystal Exit', 'TR Pokey 2 Bottom'), @@ -2172,13 +2194,18 @@ logical_connections = [ ('TR Crystaroller Middle to Top Barrier - Orange', 'TR Crystaroller Top'), ('TR Crystaroller Middle to Ranged Crystal', 'TR Crystaroller Middle - Ranged Crystal'), ('TR Crystaroller Top to Middle Barrier - Orange', 'TR Crystaroller Middle'), + ('TR Crystaroller Top to Crystal', 'TR Crystaroller Top - Crystal'), + ('TR Crystaroller Top Crystal Exit', 'TR Crystaroller Top'), ('TR Crystaroller Chest to Middle Barrier - Blue', 'TR Crystaroller Middle'), ('TR Crystaroller Middle Ranged Crystal Exit', 'TR Crystaroller Middle'), ('TR Crystaroller Bottom Ranged Crystal Exit', 'TR Crystaroller Bottom'), ('TR Crystal Maze Start to Interior Barrier - Blue', 'TR Crystal Maze Interior'), + ('TR Crystal Maze Start to Crystal', 'TR Crystal Maze Start - Crystal'), + ('TR Crystal Maze Start Crystal Exit', 'TR Crystal Maze Start'), ('TR Crystal Maze Interior to End Barrier - Blue', 'TR Crystal Maze End'), ('TR Crystal Maze Interior to Start Barrier - Blue', 'TR Crystal Maze Start'), ('TR Crystal Maze Interior to End Bypass', 'TR Crystal Maze End'), + ('TR Crystal Maze Interior to Start Bypass', 'TR Crystal Maze Start'), ('TR Crystal Maze End to Interior Barrier - Blue', 'TR Crystal Maze Interior'), ('TR Crystal Maze End to Ranged Crystal', 'TR Crystal Maze End - Ranged Crystal'), ('TR Crystal Maze End Ranged Crystal Exit', 'TR Crystal Maze End'), @@ -2210,6 +2237,9 @@ logical_connections = [ ('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'), + ('GT Spike Crystal Left to Right Barrier - Orange', 'GT Spike Crystal Right'), + ('GT Spike Crystal Right to Left Barrier - Orange', 'GT Spike Crystal Left'), + ('GT Spike Crystal Left to Right Bypass', 'GT Spike Crystal Right'), ('GT Warp Maze - Pit Section Warp Spot', 'GT Warp Maze - Pit Exit Warp Spot'), ('GT Warp Maze Exit Section Warp Spot', 'GT Warp Maze - Pit Exit Warp Spot'), ('GT Firesnake Room Hook Path', 'GT Firesnake Room Ledge'), diff --git a/Doors.py b/Doors.py index 9ad7928f..703480e0 100644 --- a/Doors.py +++ b/Doors.py @@ -275,9 +275,13 @@ def create_doors(world, player): create_door(player, 'Hera Lobby Key Stairs', Sprl).dir(Dn, 0x77, 1, HTL).ss(A, 0x12, 0x80).small_key().pos(1), create_door(player, 'Hera Lobby Up Stairs', Sprl).dir(Up, 0x77, 2, HTL).ss(X, 0x2b, 0x5c, False, True), create_door(player, 'Hera Basement Cage Up Stairs', Sprl).dir(Up, 0x87, 3, LTH).ss(Z, 0x42, 0x7c, True, True), + create_door(player, 'Hera Basement Cage to Crystal', Lgcl), + create_door(player, 'Hera Basement Cage Crystal Exit', Lgcl), create_door(player, 'Hera Tile Room Up Stairs', Sprl).dir(Up, 0x87, 1, LTH).ss(A, 0x32, 0x6c, True, True), create_door(player, 'Hera Tile Room EN', Intr).dir(Ea, 0x87, Top, High).pos(0), create_door(player, 'Hera Tridorm WN', Intr).dir(We, 0x87, Top, High).pos(0), + create_door(player, 'Hera Tridorm to Crystal', Lgcl), + create_door(player, 'Hera Tridorm Crystal Exit', Lgcl), create_door(player, 'Hera Tridorm SE', Intr).dir(So, 0x87, Right, High).pos(1), create_door(player, 'Hera Torches NE', Intr).dir(No, 0x87, Right, High).pos(1), create_door(player, 'Hera Beetles Down Stairs', Sprl).dir(Dn, 0x31, 2, LTH).ss(X, 0x3a, 0x70, True, True), @@ -292,6 +296,8 @@ def create_doors(world, player): create_door(player, 'Hera Startile Wide SW', Intr).dir(So, 0x31, Left, High).pos(0), create_door(player, 'Hera Startile Wide Up Stairs', Sprl).dir(Up, 0x31, 0, HTH).ss(S, 0x6b, 0xac, False, True), create_door(player, 'Hera Startile Wide Holes', Hole), + create_door(player, 'Hera Startile Wide to Crystal', Lgcl), + create_door(player, 'Hera Startile Wide Crystal Exit', Lgcl), create_door(player, 'Hera 4F Down Stairs', Sprl).dir(Dn, 0x27, 0, HTH).ss(S, 0x62, 0xc0), create_door(player, 'Hera 4F Up Stairs', Sprl).dir(Up, 0x27, 1, HTH).ss(A, 0x6b, 0x2c), create_door(player, 'Hera 4F Holes', Hole), @@ -433,6 +439,8 @@ def create_doors(world, player): 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 Left to Crystal', Lgcl), + create_door(player, 'PoD Bow Statue Left Crystal Exit', 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), @@ -509,6 +517,8 @@ def create_doors(world, player): create_door(player, 'Swamp Crystal Switch Outer Ranged Crystal Exit', Lgcl), create_door(player, 'Swamp Crystal Switch Inner to Outer Barrier - Blue', Lgcl), create_door(player, 'Swamp Crystal Switch Inner to Outer Bypass', Lgcl), + create_door(player, 'Swamp Crystal Switch Inner to Crystal', Lgcl), + create_door(player, 'Swamp Crystal Switch Inner Crystal Exit', Lgcl), create_door(player, 'Swamp Shortcut NE', Intr).dir(No, 0x35, Right, High).pos(3), create_door(player, 'Swamp Shortcut Blue Barrier', Lgcl), create_door(player, 'Swamp Trench 2 Pots ES', Nrml).dir(Ea, 0x35, Bot, High).pos(4), @@ -727,6 +737,8 @@ def create_doors(world, player): create_door(player, 'Ice Big Key Down Ladder', Lddr), create_door(player, 'Ice Stalfos Hint SE', Intr).dir(So, 0x3e, Right, High).pos(0), create_door(player, 'Ice Conveyor NE', Intr).dir(No, 0x3e, Right, High).no_exit().pos(0), + create_door(player, 'Ice Conveyor to Crystal', Lgcl), + create_door(player, 'Ice Conveyor Crystal Exit', Lgcl), create_door(player, 'Ice Conveyor SW', Nrml).dir(So, 0x3e, Left, High).small_key().pos(1).portal(Z, 0x20), create_door(player, 'Ice Bomb Jump NW', Nrml).dir(No, 0x4e, Left, High).small_key().pos(1), create_door(player, 'Ice Bomb Jump Ledge Orange Barrier', Lgcl), @@ -793,6 +805,9 @@ def create_doors(world, player): create_door(player, 'Ice Switch Room ES', Nrml).dir(Ea, 0xbe, Bot, High).small_key().pos(1), create_door(player, 'Ice Switch Room SE', Nrml).dir(So, 0xbe, Right, High).trap(0x4).pos(0).portal(X, 0x00), create_door(player, 'Ice Refill WS', Nrml).dir(We, 0xbf, Bot, High).small_key().pos(0), + create_door(player, 'Ice Refill to Crystal', Lgcl), + create_door(player, 'Ice Refill Crystal Exit', Lgcl), + create_door(player, 'Ice Fairy Warp', Warp), create_door(player, 'Ice Antechamber NE', Nrml).dir(No, 0xce, Right, High).trap(0x4).pos(0), create_door(player, 'Ice Antechamber Hole', Hole), @@ -874,6 +889,8 @@ def create_doors(world, player): create_door(player, 'Mire Conveyor Crystal ES', Nrml).dir(Ea, 0xc1, Bot, High).small_key().pos(1), create_door(player, 'Mire Conveyor Crystal SE', Nrml).dir(So, 0xc1, Right, High).pos(7).portal(X, 0x00), create_door(player, 'Mire Conveyor Crystal WS', Intr).dir(We, 0xc1, Bot, High).small_key().pos(0), + create_door(player, 'Mire Conveyor to Crystal', Lgcl), + create_door(player, 'Mire Conveyor Crystal Exit', Lgcl), create_door(player, 'Mire Tile Room ES', Intr).dir(Ea, 0xc1, Bot, High).small_key().pos(0), create_door(player, 'Mire Tile Room SW', Nrml).dir(So, 0xc1, Left, High).pos(4).portal(Z, 0x00), create_door(player, 'Mire Tile Room NW', Intr).dir(No, 0xc1, Left, High).pos(3), @@ -948,6 +965,8 @@ def create_doors(world, player): create_door(player, 'TR Pokey 1 NW', Intr).dir(No, 0xb6, Left, High).small_key().pos(3), create_door(player, 'TR Chain Chomps SW', Intr).dir(So, 0xb6, Left, High).small_key().pos(3), create_door(player, 'TR Chain Chomps Top to Bottom Barrier - Orange', Lgcl), + create_door(player, 'TR Chain Chomps Top to Crystal', Lgcl), + create_door(player, 'TR Chain Chomps Top Crystal Exit', Lgcl), create_door(player, 'TR Chain Chomps Bottom to Top Barrier - Orange', Lgcl), create_door(player, 'TR Chain Chomps Bottom to Ranged Crystal', Lgcl), create_door(player, 'TR Chain Chomps Bottom Ranged Crystal Exit', Lgcl), @@ -965,6 +984,8 @@ def create_doors(world, player): create_door(player, 'TR Lava Escape NW', Nrml).dir(No, 0x14, Left, High).pos(2), create_door(player, 'TR Pokey 2 EN', Nrml).dir(Ea, 0x13, Top, High).pos(1), create_door(player, 'TR Pokey 2 Top to Bottom Barrier - Blue', Lgcl), + create_door(player, 'TR Pokey 2 Top to Crystal', Lgcl), + create_door(player, 'TR Pokey 2 Top Crystal Exit', Lgcl), create_door(player, 'TR Pokey 2 Bottom to Top Barrier - Blue', Lgcl), create_door(player, 'TR Pokey 2 Bottom to Ranged Crystal', Lgcl), create_door(player, 'TR Pokey 2 Bottom Ranged Crystal Exit', Lgcl), @@ -1000,6 +1021,8 @@ def create_doors(world, player): create_door(player, 'TR Crystaroller Middle to Top Barrier - Orange', Lgcl), create_door(player, 'TR Crystaroller Middle to Ranged Crystal', Lgcl), create_door(player, 'TR Crystaroller Top to Middle Barrier - Orange', Lgcl), + create_door(player, 'TR Crystaroller Top to Crystal', Lgcl), + create_door(player, 'TR Crystaroller Top Crystal Exit', Lgcl), create_door(player, 'TR Crystaroller Chest to Middle Barrier - Blue', Lgcl), create_door(player, 'TR Crystaroller Middle Ranged Crystal Exit', Lgcl), create_door(player, 'TR Crystaroller Bottom Ranged Crystal Exit', Lgcl), @@ -1013,9 +1036,12 @@ def create_doors(world, player): create_door(player, 'TR Eye Bridge SW', Nrml).dir(So, 0xd5, Left, High).pos(0).portal(Z, 0x02), create_door(player, 'TR Crystal Maze ES', Nrml).dir(Ea, 0xc4, Bot, High).small_key().pos(0), create_door(player, 'TR Crystal Maze Start to Interior Barrier - Blue', Lgcl), + create_door(player, 'TR Crystal Maze Start to Crystal', Lgcl), + create_door(player, 'TR Crystal Maze Start Crystal Exit', Lgcl), create_door(player, 'TR Crystal Maze Interior to Start Barrier - Blue', Lgcl), create_door(player, 'TR Crystal Maze Interior to End Barrier - Blue', Lgcl), create_door(player, 'TR Crystal Maze Interior to End Bypass', Lgcl), + create_door(player, 'TR Crystal Maze Interior to Start Bypass', Lgcl), create_door(player, 'TR Crystal Maze End to Interior Barrier - Blue', Lgcl), create_door(player, 'TR Crystal Maze End to Ranged Crystal', Lgcl), create_door(player, 'TR Crystal Maze End Ranged Crystal Exit', Lgcl), @@ -1102,6 +1128,9 @@ def create_doors(world, player): create_door(player, 'GT Double Switch Exit to Blue Barrier', Lgcl), create_door(player, 'GT Double Switch EN', Intr).dir(Ea, 0x9b, Top, High).small_key().pos(0), create_door(player, 'GT Spike Crystals WN', Intr).dir(We, 0x9b, Top, High).small_key().pos(0), + create_door(player, 'GT Spike Crystal Left to Right Barrier - Orange', Lgcl), + create_door(player, 'GT Spike Crystal Right to Left Barrier - Orange', Lgcl), + create_door(player, 'GT Spike Crystal Left to Right Bypass', Lgcl), create_door(player, 'GT Spike Crystals Warp', Warp), create_door(player, 'GT Warp Maze - Left Section Warp', Warp), create_door(player, 'GT Warp Maze - Mid Section Left Warp', Warp), @@ -1248,18 +1277,17 @@ def create_doors(world, player): 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() - world.get_door('Hera Basement Cage Up Stairs', player).c_switch() + world.get_door('Hera Basement Cage Crystal Exit', player).c_switch() world.get_door('Hera Tile Room Up Stairs', player).c_switch() - world.get_door('Hera Tile Room EN', player).c_switch() - world.get_door('Hera Tridorm WN', player).c_switch() - world.get_door('Hera Tridorm SE', player).c_switch() + world.get_door('Hera Tile Room EN', player).barrier(CrystalBarrier.Blue) + world.get_door('Hera Tridorm WN', player).barrier(CrystalBarrier.Blue) + world.get_door('Hera Tridorm Crystal Exit', player).c_switch() + world.get_door('Hera Tridorm SE', player).barrier(CrystalBarrier.Orange) world.get_door('Hera Beetles Down Stairs', player).c_switch() world.get_door('Hera Beetles WS', player).c_switch() world.get_door('Hera Beetles Holes Front', player).c_switch() world.get_door('Hera Beetles Holes Landing', player).c_switch() - world.get_door('Hera Startile Wide SW', player).c_switch() - world.get_door('Hera Startile Wide Up Stairs', player).c_switch() - world.get_door('Hera Startile Wide Holes', player).c_switch() + world.get_door('Hera Startile Wide Crystal Exit', player).c_switch() 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) @@ -1277,7 +1305,7 @@ def create_doors(world, player): 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 Crystal Exit', 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) @@ -1296,6 +1324,7 @@ def create_doors(world, player): world.get_door('Swamp Crystal Switch Outer to Inner Bypass', player).barrier(CrystalBarrier.Orange) world.get_door('Swamp Crystal Switch Inner to Outer Barrier - Blue', player).barrier(CrystalBarrier.Blue) world.get_door('Swamp Crystal Switch Inner to Outer Bypass', player).barrier(CrystalBarrier.Orange) + world.get_door('Swamp Crystal Switch Inner Crystal Exit', player).c_switch() world.get_door('Swamp Crystal Switch Outer Ranged Crystal Exit', player).c_switch() world.get_door('Swamp Shortcut Blue Barrier', player).barrier(CrystalBarrier.Blue) world.get_door('Swamp Trench 2 Pots Blue Barrier', player).barrier(CrystalBarrier.Blue) @@ -1316,8 +1345,8 @@ def create_doors(world, player): world.get_door('Thieves Attic Hint Orange Barrier', player).barrier(CrystalBarrier.Orange) world.get_door('Ice Bomb Drop SE', player).c_switch() - world.get_door('Ice Conveyor SW', player).c_switch() - world.get_door('Ice Refill WS', player).c_switch() + world.get_door('Ice Conveyor Crystal Exit', player).c_switch() + world.get_door('Ice Refill Crystal Exit', player).c_switch() world.get_door('Ice Bomb Drop Hole', player).barrier(CrystalBarrier.Orange) # not required to hit switch w/ bomb world.get_door('Ice Bomb Jump Ledge Orange Barrier', player).barrier(CrystalBarrier.Orange) world.get_door('Ice Bomb Jump Catwalk Orange Barrier', player).barrier(CrystalBarrier.Orange) @@ -1328,9 +1357,7 @@ def create_doors(world, player): world.get_door('Ice Backwards Room Hole', player).barrier(CrystalBarrier.Blue) world.get_door('Mire Fishbone E', player).c_switch() - world.get_door('Mire Conveyor Crystal ES', player).c_switch() - world.get_door('Mire Conveyor Crystal SE', player).c_switch() - world.get_door('Mire Conveyor Crystal WS', player).c_switch() + world.get_door('Mire Conveyor Crystal Exit', player).c_switch() world.get_door('Mire Tall Dark and Roomy Ranged Crystal Exit', player).c_switch() world.get_door('Mire Crystal Top SW', player).c_switch() world.get_door('Mire Falling Foes ES', player).c_switch() @@ -1355,11 +1382,11 @@ def create_doors(world, player): world.get_door('Mire Firesnake Skip Orange Barrier', player).barrier(CrystalBarrier.Orange) world.get_door('Mire Antechamber Orange Barrier', player).barrier(CrystalBarrier.Orange) - world.get_door('TR Chain Chomps Down Stairs', player).c_switch() + world.get_door('TR Chain Chomps Top Crystal Exit', player).c_switch() world.get_door('TR Chain Chomps Top to Bottom Barrier - Orange', player).barrier(CrystalBarrier.Orange) world.get_door('TR Chain Chomps Bottom to Top Barrier - Orange', player).barrier(CrystalBarrier.Orange) world.get_door('TR Chain Chomps Bottom Ranged Crystal Exit', player).c_switch() - world.get_door('TR Pokey 2 EN', player).c_switch() + world.get_door('TR Pokey 2 Top Crystal Exit', player).c_switch() world.get_door('TR Pokey 2 Top to Bottom Barrier - Blue', player).barrier(CrystalBarrier.Blue) world.get_door('TR Pokey 2 Bottom to Top Barrier - Blue', player).barrier(CrystalBarrier.Blue) world.get_door('TR Pokey 2 Bottom Ranged Crystal Exit', player).c_switch() @@ -1372,12 +1399,13 @@ def create_doors(world, player): world.get_door('TR Crystaroller Top to Middle Barrier - Orange', player).barrier(CrystalBarrier.Orange) world.get_door('TR Crystaroller Middle Ranged Crystal Exit', player).c_switch() world.get_door('TR Crystaroller Bottom Ranged Crystal Exit', player).c_switch() - world.get_door('TR Crystaroller Down Stairs', player).c_switch() - world.get_door('TR Crystal Maze ES', player).c_switch() + world.get_door('TR Crystaroller Top Crystal Exit', player).c_switch() + world.get_door('TR Crystal Maze Start Crystal Exit', player).c_switch() world.get_door('TR Crystal Maze Start to Interior Barrier - Blue', player).barrier(CrystalBarrier.Blue) world.get_door('TR Crystal Maze Interior to Start Barrier - Blue', player).barrier(CrystalBarrier.Blue) world.get_door('TR Crystal Maze Interior to End Barrier - Blue', player).barrier(CrystalBarrier.Blue) world.get_door('TR Crystal Maze Interior to End Bypass', player).barrier(CrystalBarrier.Orange) + world.get_door('TR Crystal Maze Interior to Start Bypass', player).barrier(CrystalBarrier.Orange) world.get_door('TR Crystal Maze End to Interior Barrier - Blue', player).barrier(CrystalBarrier.Blue) world.get_door('TR Crystal Maze End Ranged Crystal Exit', player).c_switch() @@ -1396,7 +1424,6 @@ def create_doors(world, player): world.get_door('GT HookShot South Entry Ranged Crystal Exit', player).c_switch() world.get_door('GT Spike Crystals WN', player).c_switch() world.get_door('GT Spike Crystals Warp', player).c_switch() - world.get_door('GT Crystal Paths Down Stairs', player).c_switch() world.get_door('GT Crystal Paths SW', player).c_switch() world.get_door('GT Hidden Spikes SE', player).c_switch() @@ -1416,6 +1443,9 @@ def create_doors(world, player): 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) + world.get_door('GT Spike Crystal Left to Right Barrier - Orange', player).barrier(CrystalBarrier.Orange) + world.get_door('GT Spike Crystal Right to Left Barrier - Orange', player).barrier(CrystalBarrier.Orange) + world.get_door('GT Spike Crystal Left to Right Bypass', player).barrier(CrystalBarrier.Blue) # nifty dynamic logical doors: south_controller = world.get_door('Ice Cross Bottom SE', player) diff --git a/Dungeons.py b/Dungeons.py index 6903d474..e362a8d3 100644 --- a/Dungeons.py +++ b/Dungeons.py @@ -195,10 +195,11 @@ desert_regions = [ ] hera_regions = [ - 'Hera Lobby', 'Hera Lobby Crystal', 'Hera Front', 'Hera Back', 'Hera Front Crystal', 'Hera Down Stairs Landing', + 'Hera Lobby', 'Hera Lobby - Crystal', 'Hera Front', 'Hera Back', 'Hera Front - Crystal', 'Hera Down Stairs Landing', 'Hera Down Stairs Landing - Ranged Crystal', 'Hera Up Stairs Landing', 'Hera Up Stairs Landing - Ranged Crystal', - 'Hera Back - Ranged Crystal', 'Hera Basement Cage', 'Hera Tile Room', 'Hera Tridorm', 'Hera Torches', 'Hera Beetles', - 'Hera Startile Corner', 'Hera Startile Wide', 'Hera 4F', 'Hera Big Chest Landing', 'Hera 5F', + 'Hera Back - Ranged Crystal', 'Hera Basement Cage', 'Hera Basement Cage - Crystal', 'Hera Tile Room', + 'Hera Tridorm', 'Hera Tridorm - Crystal', 'Hera Torches', 'Hera Beetles', 'Hera Startile Corner', + 'Hera Startile Wide', 'Hera Startile Wide - Crystal', 'Hera 4F', 'Hera Big Chest Landing', 'Hera 5F', 'Hera Fairies', 'Hera Boss', 'Hera Portal' ] @@ -227,7 +228,7 @@ swamp_regions = [ 'Swamp Trench 1 Nexus', 'Swamp Trench 1 Alcove', 'Swamp Trench 1 Key Ledge', 'Swamp Trench 1 Departure', 'Swamp Hammer Switch', 'Swamp Hub', 'Swamp Hub Dead Ledge', 'Swamp Hub North Ledge', 'Swamp Donut Top', 'Swamp Donut Bottom', 'Swamp Compass Donut', 'Swamp Crystal Switch Outer', 'Swamp Crystal Switch Outer - Ranged Crystal', - 'Swamp Crystal Switch Inner', 'Swamp Shortcut', 'Swamp Trench 2 Pots', + 'Swamp Crystal Switch Inner', 'Swamp Crystal Switch Inner - Crystal', 'Swamp Shortcut', 'Swamp Trench 2 Pots', 'Swamp Trench 2 Blocks', 'Swamp Trench 2 Alcove', 'Swamp Trench 2 Departure', 'Swamp Big Key Ledge', 'Swamp West Shallows', 'Swamp West Block Path', 'Swamp West Ledge', 'Swamp Barrier Ledge', 'Swamp Barrier', 'Swamp Attic', 'Swamp Push Statue', 'Swamp Shooters', 'Swamp Left Elbow', 'Swamp Right Elbow', 'Swamp Drain Left', @@ -259,13 +260,13 @@ thieves_regions = [ ice_regions = [ 'Ice Lobby', 'Ice Jelly Key', 'Ice Floor Switch', 'Ice Cross Left', 'Ice Cross Bottom', 'Ice Cross Right', 'Ice Cross Top', 'Ice Compass Room', 'Ice Pengator Switch', 'Ice Dead End', 'Ice Big Key', 'Ice Bomb Drop', - 'Ice Stalfos Hint', 'Ice Conveyor', 'Ice Bomb Jump Ledge', 'Ice Bomb Jump Catwalk', 'Ice Narrow Corridor', + 'Ice Stalfos Hint', 'Ice Conveyor', 'Ice Conveyor - Crystal', 'Ice Bomb Jump Ledge', 'Ice Bomb Jump Catwalk', 'Ice Narrow Corridor', 'Ice Pengator Trap', 'Ice Spike Cross', 'Ice Firebar', 'Ice Falling Square', 'Ice Spike Room', 'Ice Hammer Block', 'Ice Tongue Pull', 'Ice Freezors', 'Ice Freezors Ledge', 'Ice Tall Hint', 'Ice Hookshot Ledge', 'Ice Hookshot Balcony', 'Ice Spikeball', 'Ice Lonely Freezor', 'Iced T', 'Ice Catwalk', 'Ice Many Pots', 'Ice Crystal Right', 'Ice Crystal Left', 'Ice Crystal Block', 'Ice Big Chest View', 'Ice Big Chest Landing', - 'Ice Backwards Room', 'Ice Anti-Fairy', 'Ice Switch Room', 'Ice Refill', 'Ice Fairy', 'Ice Antechamber', 'Ice Boss', - 'Ice Portal' + 'Ice Backwards Room', 'Ice Anti-Fairy', 'Ice Switch Room', 'Ice Refill', 'Ice Refill - Crystal', + 'Ice Fairy', 'Ice Antechamber', 'Ice Boss', 'Ice Portal' ] mire_regions = [ @@ -274,7 +275,7 @@ mire_regions = [ 'Mire Crystal Dead End', 'Mire Hidden Shooters', 'Mire Hidden Shooters Blocked', 'Mire Cross', 'Mire Minibridge', 'Mire BK Door Room', 'Mire Spikes', 'Mire Ledgehop', 'Mire Bent Bridge', 'Mire Over Bridge', 'Mire Right Bridge', 'Mire Left Bridge', 'Mire Fishbone', 'Mire South Fish', 'Mire Spike Barrier', 'Mire Square Rail', 'Mire Lone Warp', - 'Mire Wizzrobe Bypass', 'Mire Conveyor Crystal', 'Mire Tile Room', 'Mire Compass Room', 'Mire Compass Chest', + 'Mire Wizzrobe Bypass', 'Mire Conveyor Crystal', 'Mire Conveyor - Crystal', 'Mire Tile Room', 'Mire Compass Room', 'Mire Compass Chest', 'Mire Neglected Room', 'Mire Chest View', 'Mire Conveyor Barrier', 'Mire BK Chest Ledge', 'Mire Warping Pool', 'Mire Torches Top', 'Mire Torches Bottom', 'Mire Attic Hint', 'Mire Dark Shooters', 'Mire Key Rupees', 'Mire Block X', 'Mire Tall Dark and Roomy', 'Mire Tall Dark and Roomy - Ranged Crystal', 'Mire Crystal Right', 'Mire Crystal Mid', 'Mire Crystal Left', @@ -284,13 +285,16 @@ mire_regions = [ tr_regions = [ 'TR Main Lobby', 'TR Lobby Ledge', 'TR Compass Room', 'TR Hub', 'TR Torches Ledge', 'TR Torches', 'TR Roller Room', - 'TR Tile Room', 'TR Refill', 'TR Pokey 1', 'TR Chain Chomps Top', 'TR Chain Chomps Bottom', 'TR Chain Chomps Bottom - Ranged Crystal', 'TR Pipe Pit', 'TR Pipe Ledge', 'TR Lava Dual Pipes', - 'TR Lava Island', 'TR Lava Escape', 'TR Pokey 2 Top', 'TR Pokey 2 Bottom', 'TR Pokey 2 Bottom - Ranged Crystal', 'TR Twin Pokeys', 'TR Hallway', 'TR Dodgers', 'TR Big View', - 'TR Big Chest', 'TR Big Chest Entrance', 'TR Lazy Eyes', 'TR Dash Room', 'TR Tongue Pull', 'TR Rupees', - 'TR Crystaroller Bottom', 'TR Crystaroller Middle', 'TR Crystaroller Top', 'TR Crystaroller Chest', 'TR Crystaroller Middle - Ranged Crystal', 'TR Crystaroller Bottom - Ranged Crystal', - 'TR Dark Ride', 'TR Dash Bridge', 'TR Eye Bridge', 'TR Crystal Maze Start', 'TR Crystal Maze Interior', 'TR Crystal Maze End', 'TR Crystal Maze End - Ranged Crystal', - 'TR Final Abyss', 'TR Boss', 'Turtle Rock Main Portal', 'Turtle Rock Lazy Eyes Portal', 'Turtle Rock Chest Portal', - 'Turtle Rock Eye Bridge Portal' + 'TR Tile Room', 'TR Refill', 'TR Pokey 1', 'TR Chain Chomps Top', 'TR Chain Chomps Top - Crystal', + 'TR Chain Chomps Bottom', 'TR Chain Chomps Bottom - Ranged Crystal', 'TR Pipe Pit', 'TR Pipe Ledge', 'TR Lava Dual Pipes', + 'TR Lava Island', 'TR Lava Escape', 'TR Pokey 2 Top', 'TR Pokey 2 Top - Crystal', 'TR Pokey 2 Bottom', 'TR Pokey 2 Bottom - Ranged Crystal', + 'TR Twin Pokeys', 'TR Hallway', 'TR Dodgers', 'TR Big View','TR Big Chest', 'TR Big Chest Entrance', + 'TR Lazy Eyes', 'TR Dash Room', 'TR Tongue Pull', 'TR Rupees', 'TR Crystaroller Bottom', + 'TR Crystaroller Middle', 'TR Crystaroller Top', 'TR Crystaroller Top - Crystal', 'TR Crystaroller Chest', + 'TR Crystaroller Middle - Ranged Crystal', 'TR Crystaroller Bottom - Ranged Crystal', 'TR Dark Ride', 'TR Dash Bridge', 'TR Eye Bridge', + 'TR Crystal Maze Start', 'TR Crystal Maze Start - Crystal', 'TR Crystal Maze Interior', 'TR Crystal Maze End', + 'TR Crystal Maze End - Ranged Crystal', 'TR Final Abyss', 'TR Boss', 'Turtle Rock Main Portal', + 'Turtle Rock Lazy Eyes Portal', 'Turtle Rock Chest Portal', 'Turtle Rock Eye Bridge Portal' ] gt_regions = [ @@ -301,8 +305,8 @@ gt_regions = [ '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 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 Double Switch Entry - Ranged Switches', 'GT Double Switch Exit', 'GT Spike Crystal Left', + 'GT Spike Crystal Right', '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', 'GT Warp Maze - Rando Rail', 'GT Warp Maze - Main Rails', 'GT Warp Maze - Pot Rail', 'GT Petting Zoo', diff --git a/Regions.py b/Regions.py index 92bbbce7..99bff723 100644 --- a/Regions.py +++ b/Regions.py @@ -338,22 +338,25 @@ 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 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', '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 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']), create_dungeon_region(player, 'Hera Up Stairs Landing', 'Tower of Hera', None, ['Hera Up Stairs to Front Barrier - Orange', 'Hera Lobby Up Stairs', 'Hera Up Stairs Landing to Ranged Crystal']), create_dungeon_region(player, 'Hera Up Stairs Landing - Ranged Crystal', 'Tower of Hera', None, ['Hera Up Stairs Landing Ranged Crystal Exit']), create_dungeon_region(player, 'Hera Back', 'Tower of Hera', ['Tower of Hera - Map Chest'], ['Hera Back to Front Barrier - Orange', 'Hera Lobby Key Stairs', 'Hera Back to Ranged Crystal']), create_dungeon_region(player, 'Hera Back - Ranged Crystal', 'Tower of Hera', None, ['Hera Back Ranged Crystal Exit']), - create_dungeon_region(player, 'Hera Basement Cage', 'Tower of Hera', ['Tower of Hera - Basement Cage'], ['Hera Basement Cage Up Stairs']), + create_dungeon_region(player, 'Hera Basement Cage', 'Tower of Hera', ['Tower of Hera - Basement Cage'], ['Hera Basement Cage to Crystal', 'Hera Basement Cage Up Stairs']), + create_dungeon_region(player, 'Hera Basement Cage - Crystal', 'Tower of Hera', None, ['Hera Basement Cage Crystal Exit']), create_dungeon_region(player, 'Hera Tile Room', 'Tower of Hera', None, ['Hera Tile Room Up Stairs', 'Hera Tile Room EN']), - create_dungeon_region(player, 'Hera Tridorm', 'Tower of Hera', None, ['Hera Tridorm WN', 'Hera Tridorm SE']), + create_dungeon_region(player, 'Hera Tridorm', 'Tower of Hera', None, ['Hera Tridorm WN', 'Hera Tridorm SE', 'Hera Tridorm to Crystal']), + create_dungeon_region(player, 'Hera Tridorm - Crystal', 'Tower of Hera', None, ['Hera Tridorm Crystal Exit']), create_dungeon_region(player, 'Hera Torches', 'Tower of Hera', ['Tower of Hera - Big Key Chest'], ['Hera Torches NE']), create_dungeon_region(player, 'Hera Beetles', 'Tower of Hera', None, ['Hera Beetles Down Stairs', 'Hera Beetles WS', 'Hera Beetles Holes Front', 'Hera Beetles Holes Landing']), create_dungeon_region(player, 'Hera Startile Corner', 'Tower of Hera', None, ['Hera Startile Corner ES', 'Hera Startile Corner NW', 'Hera Startile Corner Holes Front', 'Hera Startile Corner Holes Landing']), - create_dungeon_region(player, 'Hera Startile Wide', 'Tower of Hera', None, ['Hera Startile Wide SW', 'Hera Startile Wide Up Stairs', 'Hera Startile Wide Holes']), + create_dungeon_region(player, 'Hera Startile Wide', 'Tower of Hera', None, ['Hera Startile Wide SW', 'Hera Startile Wide Up Stairs', 'Hera Startile Wide Holes', 'Hera Startile Wide to Crystal']), + create_dungeon_region(player, 'Hera Startile Wide - Crystal', 'Tower of Hera', None, ['Hera Startile Wide Crystal Exit']), create_dungeon_region(player, 'Hera 4F', 'Tower of Hera', ['Tower of Hera - Compass Chest'], ['Hera 4F Down Stairs', 'Hera 4F Up Stairs', 'Hera Big Chest Hook Path', 'Hera 4F Holes']), create_dungeon_region(player, 'Hera Big Chest Landing', 'Tower of Hera', ['Tower of Hera - Big Chest'], ['Hera Big Chest Landing Exit', 'Hera Big Chest Landing Holes']), create_dungeon_region(player, 'Hera 5F', 'Tower of Hera', None, ['Hera 5F Down Stairs', 'Hera 5F Up Stairs', 'Hera 5F Star Hole', 'Hera 5F Pothole Chain', 'Hera 5F Normal Holes']), @@ -416,8 +419,8 @@ def create_dungeon_regions(world, player): create_dungeon_region(player, 'PoD Dark Basement', 'Palace of Darkness', ['Palace of Darkness - Dark Basement - Left', 'Palace of Darkness - Dark Basement - Right'], ['PoD Dark Basement W Up Stairs', 'PoD Dark Basement E Up Stairs']), create_dungeon_region(player, 'PoD Harmless Hellway', 'Palace of Darkness', ['Palace of Darkness - Harmless Hellway'], ['PoD Harmless Hellway NE', 'PoD Harmless Hellway SE']), 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', 'PoD Bow Statue Left to Right Bypass']), + 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', 'PoD Bow Statue Left to Crystal']), + create_dungeon_region(player, 'PoD Bow Statue Left - Crystal', 'Palace of Darkness', None, ['PoD Bow Statue Left Crystal Exit']), 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']), create_dungeon_region(player, 'PoD Dark Pegs Landing', 'Palace of Darkness', None, ['PoD Dark Pegs Up Ladder', 'PoD Dark Pegs Landing to Right', 'PoD Dark Pegs Landing to Ranged Crystal']), @@ -452,8 +455,8 @@ def create_dungeon_regions(world, player): create_dungeon_region(player, 'Swamp Compass Donut', 'Swamp Palace', ['Swamp Palace - Compass Chest'], ['Swamp Compass Donut SW', 'Swamp Compass Donut Push Block']), create_dungeon_region(player, 'Swamp Crystal Switch Outer', 'Swamp Palace', None, ['Swamp Crystal Switch EN', 'Swamp Crystal Switch SE', 'Swamp Crystal Switch Outer to Inner Barrier - Blue', 'Swamp Crystal Switch Outer to Ranged Crystal', 'Swamp Crystal Switch Outer to Inner Bypass']), create_dungeon_region(player, 'Swamp Crystal Switch Outer - Ranged Crystal', 'Swamp Palace', None, ['Swamp Crystal Switch Outer Ranged Crystal Exit']), - create_dungeon_region(player, 'Swamp Crystal Switch Inner', 'Swamp Palace', ['Trench 2 Switch'], ['Swamp Crystal Switch Inner to Outer Bypass', 'Swamp Crystal Switch Inner to Outer Barrier - Blue']), - + create_dungeon_region(player, 'Swamp Crystal Switch Inner', 'Swamp Palace', ['Trench 2 Switch'], ['Swamp Crystal Switch Inner to Crystal', 'Swamp Crystal Switch Inner to Outer Bypass', 'Swamp Crystal Switch Inner to Outer Barrier - Blue']), + create_dungeon_region(player, 'Swamp Crystal Switch Inner - Crystal', 'Swamp Palace', None, ['Swamp Crystal Switch Inner Crystal Exit']), create_dungeon_region(player, 'Swamp Shortcut', 'Swamp Palace', None, ['Swamp Shortcut NE', 'Swamp Shortcut Blue Barrier']), create_dungeon_region(player, 'Swamp Trench 2 Pots', 'Swamp Palace', None, ['Swamp Trench 2 Pots ES', 'Swamp Trench 2 Pots Blue Barrier', 'Swamp Trench 2 Pots Dry', 'Swamp Trench 2 Pots Wet']), create_dungeon_region(player, 'Swamp Trench 2 Blocks', 'Swamp Palace', None, ['Swamp Trench 2 Blocks Pots', 'Swamp Trench 2 Blocks N']), @@ -560,7 +563,8 @@ def create_dungeon_regions(world, player): create_dungeon_region(player, 'Ice Big Key', 'Ice Palace', ['Ice Palace - Big Key Chest'], ['Ice Big Key Push Block', 'Ice Big Key Down Ladder']), create_dungeon_region(player, 'Ice Bomb Drop', 'Ice Palace', None, ['Ice Bomb Drop SE', 'Ice Bomb Drop Hole']), create_dungeon_region(player, 'Ice Stalfos Hint', 'Ice Palace', None, ['Ice Stalfos Hint SE']), - create_dungeon_region(player, 'Ice Conveyor', 'Ice Palace', ['Ice Palace - Conveyor Key Drop'], ['Ice Conveyor NE', 'Ice Conveyor SW']), + create_dungeon_region(player, 'Ice Conveyor', 'Ice Palace', ['Ice Palace - Conveyor Key Drop'], ['Ice Conveyor NE', 'Ice Conveyor to Crystal', 'Ice Conveyor SW']), + create_dungeon_region(player, 'Ice Conveyor - Crystal', 'Ice Palace', None, ['Ice Conveyor Crystal Exit']), create_dungeon_region(player, 'Ice Bomb Jump Ledge', 'Ice Palace', None, ['Ice Bomb Jump NW', 'Ice Bomb Jump Ledge Orange Barrier']), create_dungeon_region(player, 'Ice Bomb Jump Catwalk', 'Ice Palace', None, ['Ice Bomb Jump Catwalk Orange Barrier', 'Ice Bomb Jump EN']), create_dungeon_region(player, 'Ice Narrow Corridor', 'Ice Palace', None, ['Ice Narrow Corridor WN', 'Ice Narrow Corridor Down Stairs']), @@ -589,7 +593,8 @@ def create_dungeon_regions(world, player): create_dungeon_region(player, 'Ice Backwards Room', 'Ice Palace', None, ['Ice Backwards Room SE', 'Ice Backwards Room Down Stairs', 'Ice Backwards Room Hole']), create_dungeon_region(player, 'Ice Anti-Fairy', 'Ice Palace', None, ['Ice Anti-Fairy Up Stairs', 'Ice Anti-Fairy SE']), create_dungeon_region(player, 'Ice Switch Room', 'Ice Palace', None, ['Ice Switch Room NE', 'Ice Switch Room ES', 'Ice Switch Room SE']), - create_dungeon_region(player, 'Ice Refill', 'Ice Palace', None, ['Ice Refill WS']), + create_dungeon_region(player, 'Ice Refill', 'Ice Palace', None, ['Ice Refill WS', 'Ice Refill to Crystal']), + create_dungeon_region(player, 'Ice Refill - Crystal', 'Ice Palace', None, ['Ice Refill Crystal Exit']), create_dungeon_region(player, 'Ice Fairy', 'Ice Palace', None, ['Ice Fairy Warp']), create_dungeon_region(player, 'Ice Antechamber', 'Ice Palace', None, ['Ice Antechamber NE', 'Ice Antechamber Hole']), create_dungeon_region(player, 'Ice Boss', 'Ice Palace', ['Ice Palace - Boss', 'Ice Palace - Prize']), @@ -625,7 +630,8 @@ def create_dungeon_regions(world, player): create_dungeon_region(player, 'Mire Square Rail', 'Misery Mire', None, ['Mire Square Rail WS', 'Mire Square Rail NW']), create_dungeon_region(player, 'Mire Lone Warp', 'Misery Mire', None, ['Mire Lone Warp SW', 'Mire Lone Warp Warp']), create_dungeon_region(player, 'Mire Wizzrobe Bypass', 'Misery Mire', None, ['Mire Wizzrobe Bypass WN', 'Mire Wizzrobe Bypass EN', 'Mire Wizzrobe Bypass NE']), - create_dungeon_region(player, 'Mire Conveyor Crystal', 'Misery Mire', ['Misery Mire - Conveyor Crystal Key Drop'], ['Mire Conveyor Crystal WS', 'Mire Conveyor Crystal ES', 'Mire Conveyor Crystal SE']), + create_dungeon_region(player, 'Mire Conveyor Crystal', 'Misery Mire', ['Misery Mire - Conveyor Crystal Key Drop'], ['Mire Conveyor to Crystal', 'Mire Conveyor Crystal WS', 'Mire Conveyor Crystal ES', 'Mire Conveyor Crystal SE']), + create_dungeon_region(player, 'Mire Conveyor - Crystal', 'Misery Mire', None, ['Mire Conveyor Crystal Exit']), create_dungeon_region(player, 'Mire Tile Room', 'Misery Mire', None, ['Mire Tile Room ES', 'Mire Tile Room NW', 'Mire Tile Room SW']), create_dungeon_region(player, 'Mire Compass Room', 'Misery Mire', None, ['Mire Compass Room SW', 'Mire Compass Room EN', 'Mire Compass Blue Barrier']), create_dungeon_region(player, 'Mire Compass Chest', 'Misery Mire', ['Misery Mire - Compass Chest'], ['Mire Compass Chest Exit']), @@ -663,7 +669,8 @@ def create_dungeon_regions(world, player): create_dungeon_region(player, 'TR Tile Room', 'Turtle Rock', None, ['TR Tile Room SE', 'TR Tile Room NE']), create_dungeon_region(player, 'TR Refill', 'Turtle Rock', None, ['TR Refill SE']), create_dungeon_region(player, 'TR Pokey 1', 'Turtle Rock', ['Turtle Rock - Pokey 1 Key Drop'], ['TR Pokey 1 SW', 'TR Pokey 1 NW']), - create_dungeon_region(player, 'TR Chain Chomps Top', 'Turtle Rock', ['Turtle Rock - Chain Chomps'], ['TR Chain Chomps Down Stairs', 'TR Chain Chomps Top to Bottom Barrier - Orange']), + create_dungeon_region(player, 'TR Chain Chomps Top', 'Turtle Rock', ['Turtle Rock - Chain Chomps'], ['TR Chain Chomps Top to Crystal', 'TR Chain Chomps Down Stairs', 'TR Chain Chomps Top to Bottom Barrier - Orange']), + create_dungeon_region(player, 'TR Chain Chomps Top - Crystal', 'Turtle Rock', None, ['TR Chain Chomps Top Crystal Exit']), create_dungeon_region(player, 'TR Chain Chomps Bottom', 'Turtle Rock', None, ['TR Chain Chomps SW', 'TR Chain Chomps Bottom to Top Barrier - Orange', 'TR Chain Chomps Bottom to Ranged Crystal']), create_dungeon_region(player, 'TR Chain Chomps Bottom - Ranged Crystal', 'Turtle Rock', None, ['TR Chain Chomps Bottom Ranged Crystal Exit']), create_dungeon_region(player, 'TR Pipe Pit', 'Turtle Rock', None, ['TR Pipe Pit Up Stairs', 'TR Pipe Pit WN']), @@ -671,7 +678,8 @@ def create_dungeon_regions(world, player): create_dungeon_region(player, 'TR Lava Dual Pipes', 'Turtle Rock', None, ['TR Lava Dual Pipes EN', 'TR Lava Dual Pipes WN', 'TR Lava Dual Pipes SW']), create_dungeon_region(player, 'TR Lava Island', 'Turtle Rock', ['Turtle Rock - Big Key Chest'], ['TR Lava Island WS', 'TR Lava Island ES']), create_dungeon_region(player, 'TR Lava Escape', 'Turtle Rock', None, ['TR Lava Escape SE', 'TR Lava Escape NW']), - create_dungeon_region(player, 'TR Pokey 2 Top', 'Turtle Rock', None, ['TR Pokey 2 EN', 'TR Pokey 2 Top to Bottom Barrier - Blue']), + create_dungeon_region(player, 'TR Pokey 2 Top', 'Turtle Rock', None, ['TR Pokey 2 EN', 'TR Pokey 2 Top to Bottom Barrier - Blue', 'TR Pokey 2 Top to Crystal']), + create_dungeon_region(player, 'TR Pokey 2 Top - Crystal', 'Turtle Rock', None, ['TR Pokey 2 Top Crystal Exit']), create_dungeon_region(player, 'TR Pokey 2 Bottom', 'Turtle Rock', ['Turtle Rock - Pokey 2 Key Drop'], ['TR Pokey 2 ES', 'TR Pokey 2 Bottom to Top Barrier - Blue', 'TR Pokey 2 Bottom to Ranged Crystal']), create_dungeon_region(player, 'TR Pokey 2 Bottom - Ranged Crystal', 'Turtle Rock', None, ['TR Pokey 2 Bottom Ranged Crystal Exit']), create_dungeon_region(player, 'TR Twin Pokeys', 'Turtle Rock', None, ['TR Twin Pokeys NW', 'TR Twin Pokeys EN', 'TR Twin Pokeys SW']), @@ -686,7 +694,8 @@ def create_dungeon_regions(world, player): create_dungeon_region(player, 'TR Rupees', 'Turtle Rock', None, ['TR Rupees SE']), create_dungeon_region(player, 'TR Crystaroller Bottom' , 'Turtle Rock', None, ['TR Crystaroller Bottom to Middle Barrier - Orange', 'TR Crystaroller Bottom to Ranged Crystal', 'TR Crystaroller SW']), create_dungeon_region(player, 'TR Crystaroller Middle', 'Turtle Rock', None, ['TR Crystaroller Middle to Bottom Barrier - Orange', 'TR Crystaroller Middle to Chest Barrier - Blue', 'TR Crystaroller Middle to Top Barrier - Orange', 'TR Crystaroller Middle to Ranged Crystal', 'TR Crystaroller Middle to Bottom Bypass']), - create_dungeon_region(player, 'TR Crystaroller Top', 'Turtle Rock', None, ['TR Crystaroller Top to Middle Barrier - Orange', 'TR Crystaroller Down Stairs']), + create_dungeon_region(player, 'TR Crystaroller Top', 'Turtle Rock', None, ['TR Crystaroller Top to Middle Barrier - Orange', 'TR Crystaroller Down Stairs', 'TR Crystaroller Top to Crystal']), + create_dungeon_region(player, 'TR Crystaroller Top - Crystal', 'Turtle Rock', None, ['TR Crystaroller Top Crystal Exit']), create_dungeon_region(player, 'TR Crystaroller Chest', 'Turtle Rock', ['Turtle Rock - Crystaroller Room'], ['TR Crystaroller Chest to Middle Barrier - Blue']), create_dungeon_region(player, 'TR Crystaroller Middle - Ranged Crystal', 'Turtle Rock', None, ['TR Crystaroller Middle Ranged Crystal Exit']), create_dungeon_region(player, 'TR Crystaroller Bottom - Ranged Crystal', 'Turtle Rock', None, ['TR Crystaroller Bottom Ranged Crystal Exit']), @@ -695,8 +704,9 @@ def create_dungeon_regions(world, player): create_dungeon_region(player, 'TR Eye Bridge', 'Turtle Rock', ['Turtle Rock - Eye Bridge - Bottom Left', 'Turtle Rock - Eye Bridge - Bottom Right', 'Turtle Rock - Eye Bridge - Top Left', 'Turtle Rock - Eye Bridge - Top Right'], ['TR Eye Bridge SW', 'TR Eye Bridge NW']), - create_dungeon_region(player, 'TR Crystal Maze Start', 'Turtle Rock', None, ['TR Crystal Maze ES', 'TR Crystal Maze Start to Interior Barrier - Blue']), - create_dungeon_region(player, 'TR Crystal Maze Interior', 'Turtle Rock', None, ['TR Crystal Maze Interior to End Barrier - Blue', 'TR Crystal Maze Interior to Start Barrier - Blue', 'TR Crystal Maze Interior to End Bypass']), + create_dungeon_region(player, 'TR Crystal Maze Start', 'Turtle Rock', None, ['TR Crystal Maze ES', 'TR Crystal Maze Start to Interior Barrier - Blue', 'TR Crystal Maze Start to Crystal']), + create_dungeon_region(player, 'TR Crystal Maze Start - Crystal', 'Turtle Rock', None, ['TR Crystal Maze Start Crystal Exit']), + create_dungeon_region(player, 'TR Crystal Maze Interior', 'Turtle Rock', None, ['TR Crystal Maze Interior to End Barrier - Blue', 'TR Crystal Maze Interior to Start Barrier - Blue', 'TR Crystal Maze Interior to Start Bypass', 'TR Crystal Maze Interior to End Bypass']), create_dungeon_region(player, 'TR Crystal Maze End', 'Turtle Rock', None, ['TR Crystal Maze North Stairs', 'TR Crystal Maze End to Interior Barrier - Blue', 'TR Crystal Maze End to Ranged Crystal']), create_dungeon_region(player, 'TR Crystal Maze End - Ranged Crystal', 'Turtle Rock', None, ['TR Crystal Maze End Ranged Crystal Exit']), create_dungeon_region(player, 'TR Final Abyss', 'Turtle Rock', None, ['TR Final Abyss South Stairs', 'TR Final Abyss NW']), @@ -738,7 +748,8 @@ def create_dungeon_regions(world, player): 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 Spike Crystal Left', 'Ganon\'s Tower', None, ['GT Spike Crystals WN', 'GT Spike Crystal Left to Right Barrier - Orange', 'GT Spike Crystal Left to Right Bypass']), + create_dungeon_region(player, 'GT Spike Crystal Right', 'Ganon\'s Tower', None, ['GT Spike Crystals Warp', 'GT Spike Crystal Right to Left Barrier - Orange']), 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']), create_dungeon_region(player, 'GT Warp Maze - Right Section', 'Ganon\'s Tower', None, ['GT Warp Maze - Right Section Warp']), @@ -806,47 +817,47 @@ def create_dungeon_regions(world, player): ] world.initialize_regions() - world.get_region('Hera Lobby Crystal', player).crystal_switch = True - world.get_region('Hera Front Crystal', player).crystal_switch = True + world.get_region('Hera Lobby - Crystal', player).crystal_switch = True + world.get_region('Hera Front - Crystal', player).crystal_switch = True world.get_region('Hera Down Stairs Landing - Ranged Crystal', player).crystal_switch = True world.get_region('Hera Up Stairs Landing - Ranged Crystal', player).crystal_switch = True world.get_region('Hera Back - Ranged Crystal', player).crystal_switch = True - world.get_region('Hera Basement Cage', player).crystal_switch = True + world.get_region('Hera Basement Cage - Crystal', player).crystal_switch = True world.get_region('Hera Tile Room', player).crystal_switch = True # INTERIOR not accessible (maybe with cane) world.get_region('Hera Beetles', player).crystal_switch = True - world.get_region('Hera Tridorm', player).crystal_switch = True - world.get_region('Hera Startile Wide', player).crystal_switch = True + world.get_region('Hera Tridorm - Crystal', player).crystal_switch = True + world.get_region('Hera Startile Wide - Crystal', 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 + world.get_region('PoD Bow Statue Left - Crystal', player).crystal_switch = True world.get_region('PoD Bow Statue Right - Ranged Crystal', player).crystal_switch = True world.get_region('PoD Dark Pegs Landing - Ranged Crystal', player).crystal_switch = True world.get_region('PoD Dark Pegs Right', player).crystal_switch = True world.get_region('PoD Dark Pegs Middle - Ranged Crystal', player).crystal_switch = True world.get_region('PoD Dark Pegs Left - Ranged Crystal', player).crystal_switch = True - world.get_region('Swamp Crystal Switch Inner', player).crystal_switch = True + world.get_region('Swamp Crystal Switch Inner - Crystal', player).crystal_switch = True world.get_region('Swamp Crystal Switch Outer - Ranged Crystal', player).crystal_switch = True world.get_region('Thieves Spike Switch', player).crystal_switch = True world.get_region('Ice Bomb Drop', player).crystal_switch = True - world.get_region('Ice Conveyor', player).crystal_switch = True - world.get_region('Ice Refill', player).crystal_switch = True + world.get_region('Ice Conveyor - Crystal', player).crystal_switch = True + world.get_region('Ice Refill - Crystal', player).crystal_switch = True world.get_region('Mire Fishbone', player).crystal_switch = True - world.get_region('Mire Conveyor Crystal', player).crystal_switch = True + world.get_region('Mire Conveyor - Crystal', player).crystal_switch = True world.get_region('Mire Tall Dark and Roomy - Ranged Crystal', player).crystal_switch = True world.get_region('Mire Crystal Top', player).crystal_switch = True world.get_region('Mire Falling Foes', player).crystal_switch = True - world.get_region('TR Chain Chomps Top', player).crystal_switch = True + world.get_region('TR Chain Chomps Top - Crystal', player).crystal_switch = True world.get_region('TR Chain Chomps Bottom - Ranged Crystal', player).crystal_switch = True - world.get_region('TR Pokey 2 Top', player).crystal_switch = True + world.get_region('TR Pokey 2 Top - Crystal', player).crystal_switch = True world.get_region('TR Pokey 2 Bottom - Ranged Crystal', player).crystal_switch = True - world.get_region('TR Crystaroller Top', player).crystal_switch = True + world.get_region('TR Crystaroller Top - Crystal', player).crystal_switch = True world.get_region('TR Crystaroller Bottom - Ranged Crystal', player).crystal_switch = True world.get_region('TR Crystaroller Middle - Ranged Crystal', player).crystal_switch = True - world.get_region('TR Crystal Maze Start', player).crystal_switch = True + world.get_region('TR Crystal Maze Start - Crystal', player).crystal_switch = True world.get_region('TR Crystal Maze Interior', player).crystal_switch = True world.get_region('TR Crystal Maze End - Ranged Crystal', player).crystal_switch = True world.get_region('GT Crystal Conveyor - Ranged Crystal', player).crystal_switch = True @@ -856,7 +867,7 @@ def create_dungeon_regions(world, player): 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 Spike Crystal Left', player).crystal_switch = True world.get_region('GT Crystal Paths', player).crystal_switch = True world.get_region('GT Hidden Spikes', player).crystal_switch = True world.get_region('GT Crystal Inner Circle', player).crystal_switch = True diff --git a/Rules.py b/Rules.py index be7bf733..bc91c5e2 100644 --- a/Rules.py +++ b/Rules.py @@ -354,11 +354,20 @@ 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 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 Back to Front Barrier - Orange', player), lambda state: state.can_reach_orange(world.get_region('Hera Back', player), player)) + set_rule(world.get_location('Tower of Hera - Basement Cage', player), lambda state: state.can_reach_orange(world.get_region('Hera Basement Cage', player), player)) + set_rule(world.get_entrance('Hera Tridorm WN', player), lambda state: state.can_reach_blue(world.get_region('Hera Tridorm', player), player)) + set_rule(world.get_entrance('Hera Tridorm SE', player), lambda state: state.can_reach_orange(world.get_region('Hera Tridorm', player), player)) + set_rule(world.get_entrance('Hera Tile Room EN', player), lambda state: state.can_reach_blue(world.get_region('Hera Tile Room', player), player)) + set_rule(world.get_entrance('Hera Lobby to Crystal', player), lambda state: state.can_hit_crystal(player)) + set_rule(world.get_entrance('Hera Front to Crystal', player), lambda state: state.can_hit_crystal(player)) set_rule(world.get_entrance('Hera Down Stairs Landing to Ranged Crystal', player), lambda state: state.can_hit_crystal_through_barrier(player) or (state.has('Hookshot', player) and state.can_reach_blue(world.get_region('Hera Down Stairs Landing', player), player))) # or state.has_beam_sword(player) set_rule(world.get_entrance('Hera Up Stairs Landing to Ranged Crystal', player), lambda state: state.can_hit_crystal_through_barrier(player) or (state.has('Hookshot', player) and state.can_reach_orange(world.get_region('Hera Up Stairs Landing', player), player))) # or state.has_beam_sword(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('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 Basement Cage to Crystal', player), lambda state: state.can_hit_crystal(player)) + set_rule(world.get_entrance('Hera Tridorm to Crystal', player), lambda state: state.can_hit_crystal(player)) + set_rule(world.get_entrance('Hera Startile Wide to Crystal', player), lambda state: state.can_hit_crystal(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)) @@ -380,6 +389,7 @@ def global_rules(world, 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) or state.has_beam_sword(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)) # or state.has('Red Boomerang', player) + set_rule(world.get_entrance('PoD Bow Statue Left to Crystal', player), lambda state: state.can_hit_switch(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 Bow Statue Left to Right Bypass', player), lambda state: state.has('Cane of Somaria', player)) # or 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 Dark Pegs Landing to Ranged Crystal', player), lambda state: state.has('Cane of Somaria', player)) # or state.can_use_bombs(player) or state.has('Blue boomerang', player) or state.has('Red boomerang', player) @@ -395,6 +405,7 @@ def global_rules(world, player): set_rule(world.get_entrance('Swamp Barrier Ledge - Orange', player), lambda state: state.can_reach_orange(world.get_region('Swamp Barrier Ledge', player), player)) set_rule(world.get_entrance('Swamp Barrier - Orange', player), lambda state: state.can_reach_orange(world.get_region('Swamp Barrier', player), player)) + set_rule(world.get_entrance('Swamp Crystal Switch Inner to Crystal', player), lambda state: state.can_hit_crystal(player)) set_rule(world.get_entrance('Swamp Crystal Switch Outer to Ranged Crystal', player), lambda state: state.can_hit_crystal_through_barrier(player) or state.has_beam_sword(player) or (state.has('Hookshot', player) and state.can_reach_blue(world.get_region('Swamp Crystal Switch Outer', player), player))) # It is the length of the sword, not the beam itself that allows this set_rule(world.get_entrance('Swamp Crystal Switch Outer to Inner Bypass', player), lambda state: state.world.can_take_damage or state.has('Cape', player) or state.has('Cane of Byrna', player)) set_rule(world.get_entrance('Swamp Crystal Switch Inner to Outer Bypass', player), lambda state: state.world.can_take_damage or state.has('Cape', player) or state.has('Cane of Byrna', player)) @@ -415,6 +426,9 @@ def global_rules(world, player): set_rule(world.get_entrance('Ice Bomb Jump Ledge Orange Barrier', player), lambda state: state.can_reach_orange(world.get_region('Ice Bomb Jump Ledge', player), player)) set_rule(world.get_entrance('Ice Bomb Jump Catwalk Orange Barrier', player), lambda state: state.can_reach_orange(world.get_region('Ice Bomb Jump Catwalk', player), player)) + set_rule(world.get_entrance('Ice Conveyor to Crystal', player), lambda state: state.can_hit_crystal(player)) + set_rule(world.get_entrance('Ice Refill to Crystal', player), lambda state: state.can_hit_crystal(player) or state.can_reach_blue(world.get_region('Ice Refill', player), player)) + set_rule(world.get_entrance('Mire Crystal Right Orange Barrier', player), lambda state: state.can_reach_orange(world.get_region('Mire Crystal Right', player), player)) set_rule(world.get_entrance('Mire Crystal Mid Orange Barrier', player), lambda state: state.can_reach_orange(world.get_region('Mire Crystal Mid', player), player)) set_rule(world.get_entrance('Mire Firesnake Skip Orange Barrier', player), lambda state: state.can_reach_orange(world.get_region('Mire Firesnake Skip', player), player)) @@ -434,6 +448,7 @@ def global_rules(world, player): set_rule(world.get_entrance('Mire Crystal Mid Blue Barrier', player), lambda state: state.can_reach_blue(world.get_region('Mire Crystal Mid', player), player)) set_rule(world.get_entrance('Mire Crystal Left Blue Barrier', player), lambda state: state.can_reach_blue(world.get_region('Mire Crystal Left', player), player)) + set_rule(world.get_entrance('Mire Conveyor to Crystal', player), lambda state: state.can_hit_crystal(player)) set_rule(world.get_entrance('Mire Tall Dark and Roomy to Ranged Crystal', player), lambda state: True) # Can always throw pots set_rule(world.get_location('Turtle Rock - Chain Chomps', player), lambda state: state.can_reach('TR Chain Chomps Top', 'Region', player) and state.can_hit_crystal_through_barrier(player)) @@ -452,6 +467,10 @@ def global_rules(world, player): set_rule(world.get_entrance('TR Crystal Maze Interior to Start Barrier - Blue', player), lambda state: state.can_reach_blue(world.get_region('TR Crystal Maze Interior', player), player)) set_rule(world.get_entrance('TR Crystal Maze End to Interior Barrier - Blue', player), lambda state: state.can_reach_blue(world.get_region('TR Crystal Maze End', player), player)) + set_rule(world.get_entrance('TR Chain Chomps Top to Crystal', player), lambda state: state.can_hit_crystal(player)) + set_rule(world.get_entrance('TR Pokey 2 Top to Crystal', player), lambda state: state.can_hit_crystal(player)) + set_rule(world.get_entrance('TR Crystaroller Top to Crystal', player), lambda state: state.can_hit_crystal(player)) + set_rule(world.get_entrance('TR Crystal Maze Start to Crystal', player), lambda state: state.can_hit_crystal(player)) set_rule(world.get_entrance('TR Chain Chomps Bottom to Ranged Crystal', player), lambda state: state.can_hit_crystal_through_barrier(player) or (state.has('Hookshot', player) and state.can_reach_orange(world.get_region('TR Chain Chomps Bottom', player), player))) # or state.has_beam_sword(player) set_rule(world.get_entrance('TR Pokey 2 Bottom to Ranged Crystal', player), lambda state: state.can_hit_crystal_through_barrier(player) or (state.has('Hookshot', player) and state.can_reach_blue(world.get_region('TR Pokey 2', player), player))) # or state.has_beam_sword(player) set_rule(world.get_entrance('TR Crystaroller Bottom to Ranged Crystal', player), lambda state: 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('Hookshot', player) and state.can_reach_orange(world.get_region('TR Crystaroller Bottom', player), player))) # or state.has_beam_sword(player) @@ -459,6 +478,7 @@ def global_rules(world, player): set_rule(world.get_entrance('TR Crystaroller Middle to Bottom Bypass', player), lambda state: state.can_use_bombs(player) or state.has('Blue Boomerang', 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('TR Crystal Maze Interior to End 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('Fire Rod', player) or state.has('Ice Rod', player) or state.has('Cane of Somaria', player)) # Beam sword does NOT work + set_rule(world.get_entrance('TR Crystal Maze Interior to Start Bypass', player), lambda state: True) # Can always grab a pot from the interior and walk it to the start region and throw it there 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 Entry Blue Barrier', player), lambda state: state.can_reach_blue(world.get_region('GT Hookshot South Entry', player), player)) @@ -468,6 +488,8 @@ def global_rules(world, 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 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 Spike Crystal Left to Right Barrier - Orange', player), lambda state: state.can_reach_orange(world.get_region('GT Spike Crystal Left', player), player)) + set_rule(world.get_entrance('GT Spike Crystal Right to Left Barrier - Orange', player), lambda state: state.can_reach_orange(world.get_region('GT Spike Crystal Right', 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)) set_rule(world.get_entrance('GT Crystal Conveyor Corner to Barrier - Blue', player), lambda state: state.can_reach_blue(world.get_region('GT Crystal Conveyor Corner', player), player)) set_rule(world.get_entrance('GT Crystal Conveyor Corner to Barrier - Orange', player), lambda state: state.can_reach_orange(world.get_region('GT Crystal Conveyor Corner', player), player)) @@ -481,6 +503,7 @@ def global_rules(world, 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)) or (state.has('Ice Rod', player) and state.has('Hookshot', player)) or state.has('Hookshot', player) /// You can do this with just a pot and a hookshot set_rule(world.get_entrance('GT Double Switch Left to Exit Bypass', player), lambda state: False) # state.can_use_bombs(player) or (state.has('Cane of Somaria', player) and (state.has('Red Boomerang', player) or (state.has('Hookshot', player) and state.has('Blue Boomerang', player)) or (state.has('Hookshot', player) and state.has('Ice Rod', player)))) set_rule(world.get_entrance('GT Double Switch Pot Corners to Ranged Switches', player), lambda state: False) # state.can_use_bombs(player) or state.has('Cane of Somaria', player) or (state.has('Cane of Somaria', player) and state.has_Boots(player)) /// There's two ways to interact with the switch. Somaria bounce at the top corner, or timed throws at the bottom corner. + set_rule(world.get_entrance('GT Spike Crystal Left to Right Bypass', player), lambda state: state.can_use_bombs(player) or state.has('Cane of Somaria', player) or state.has('Red Boomerang', player) or state.has('Blue Boomerang', player)) # or state.has('Fire Rod', player) or state.has('Ice Rod', player) or state.can_use_beam_sword(player) set_rule(world.get_entrance('GT Crystal Conveyor to Ranged Crystal', player), lambda state: state.can_use_bombs(player) or state.has('Cane of Somaria', player)) set_rule(world.get_entrance('GT Crystal Conveyor Corner to Ranged Crystal', player), lambda state: state.can_use_bombs(player) or state.has('Cane of Somaria', player)) set_rule(world.get_entrance('GT Crystal Conveyor Corner to Left Bypass', player), lambda state: state.can_use_bombs(player) or state.has('Cane of Somaria', player))