From 5ef1ceb136621408dd03fa8eea184effc6977e00 Mon Sep 17 00:00:00 2001 From: StructuralMike <66819228+StructuralMike@users.noreply.github.com> Date: Sat, 6 Mar 2021 17:56:45 +0100 Subject: [PATCH] ToH Crystal Switch Region WIP --- BaseClasses.py | 10 ++++++++++ DoorShuffle.py | 20 ++++++++++++++++---- Doors.py | 28 ++++++++++++++++++++++------ Dungeons.py | 3 ++- EntranceShuffle.py | 18 ++++++++++++------ InvertedRegions.py | 3 ++- Regions.py | 14 ++++++++++---- Rules.py | 31 +++++++++++++++++++------------ 8 files changed, 93 insertions(+), 34 deletions(-) diff --git a/BaseClasses.py b/BaseClasses.py index 2d0ead39..d8551373 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -701,6 +701,16 @@ class CollectionState(object): or self.has('Ice Rod', player) or self.has('Cane of Somaria', player) or self.has('Cane of Byrna', player)) + + def can_hit_switch_through_barrier(self, player): + return (self.can_use_bombs(player) + or self.can_shoot_arrows(player) + or self.has_beam_sword(player) + or self.has('Blue Boomerang', player) + or self.has('Red Boomerang', player) + or self.has('Fire Rod', player) + or self.has('Ice Rod', player) + or self.has('Cane of Somaria', player)) def can_shoot_arrows(self, player): if self.world.retro[player]: diff --git a/DoorShuffle.py b/DoorShuffle.py index 922142f4..42585edf 100644 --- a/DoorShuffle.py +++ b/DoorShuffle.py @@ -1986,6 +1986,16 @@ logical_connections = [ ('Desert Main Lobby Right Path', 'Desert Right Alcove'), ('Desert Left Alcove Path', 'Desert Main Lobby'), ('Desert Right Alcove Path', 'Desert Main Lobby'), + + ('Hera Lobby to Front Barrier - Blue', 'Hera Front'), + ('Hera Front to Lobby Barrier - Blue', 'Hera Lobby'), + ('Hera Front to Down Stairs Barrier - Blue', 'Hera Down Stairs Landing'), + ('Hera Front to Up Stairs Barrier - Orange', 'Hera Up Stairs Landing'), + ('Hera Front to Back Barrier - Orange', 'Hera Back'), + ('Hera Down Stairs to Front Barrier - Blue', 'Hera Front'), + ('Hera Up Stairs to Front Barrier - Orange', 'Hera Front'), + ('Hera Back to Front Barrier - Orange', 'Hera Front'), + ('Hera Big Chest Hook Path', 'Hera Big Chest Landing'), ('Hera Big Chest Landing Exit', 'Hera 4F'), ('PoD Pit Room Block Path N', 'PoD Pit Room Blocked'), @@ -2217,10 +2227,12 @@ open_edges = [ falldown_pits = [ ('Eastern Courtyard Potholes', 'Eastern Fairies'), - ('Hera Beetles Holes', 'Hera Lobby'), - ('Hera Startile Corner Holes', 'Hera Lobby'), - ('Hera Startile Wide Holes', 'Hera Lobby'), - ('Hera 4F Holes', 'Hera Lobby'), # failed bomb jump + ('Hera Beetles Holes Front', 'Hera Front'), + ('Hera Beetles Holes Landing', 'Hera Up Stairs Landing'), + ('Hera Startile Corner Holes Front', 'Hera Front'), + ('Hera Startile Corner Holes Landing', 'Hera Down Stairs Landing'), + ('Hera Startile Wide Holes', 'Hera Back'), + ('Hera 4F Holes', 'Hera Back'), # failed bomb jump ('Hera Big Chest Landing Holes', 'Hera Startile Wide'), # the other holes near big chest ('Hera 5F Star Hole', 'Hera Big Chest Landing'), ('Hera 5F Pothole Chain', 'Hera Fairies'), diff --git a/Doors.py b/Doors.py index 460bf0d9..1d55c9de 100644 --- a/Doors.py +++ b/Doors.py @@ -252,6 +252,14 @@ def create_doors(world, player): # Hera create_door(player, 'Hera Lobby S', Nrml).dir(So, 0x77, Mid, Low).pos(0).portal(Z, 0x22, 1), + create_door(player, 'Hera Lobby to Front Barrier - Blue', Lgcl), + create_door(player, 'Hera Front to Lobby Barrier - Blue', Lgcl), + create_door(player, 'Hera Front to Down Stairs Barrier - Blue', Lgcl), + create_door(player, 'Hera Down Stairs to Front Barrier - Blue', Lgcl), + create_door(player, 'Hera Front to Up Stairs Barrier - Orange', Lgcl), + create_door(player, 'Hera Up Stairs to Front Barrier - Orange', Lgcl), + create_door(player, 'Hera Front to Back Barrier - Orange', Lgcl), + create_door(player, 'Hera Back to Front Barrier - Orange', Lgcl), create_door(player, 'Hera Lobby Down Stairs', Sprl).dir(Dn, 0x77, 3, HTL).ss(Z, 0x21, 0x90, False, True), 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), @@ -263,10 +271,12 @@ def create_doors(world, player): 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), create_door(player, 'Hera Beetles WS', Intr).dir(We, 0x31, Bot, High).pos(1), - create_door(player, 'Hera Beetles Holes', Hole), + create_door(player, 'Hera Beetles Holes Front', Hole), + create_door(player, 'Hera Beetles Holes Landing', Hole), create_door(player, 'Hera Startile Corner ES', Intr).dir(Ea, 0x31, Bot, High).pos(1), create_door(player, 'Hera Startile Corner NW', Intr).dir(No, 0x31, Left, High).big_key().pos(0), - create_door(player, 'Hera Startile Corner Holes', Hole), + create_door(player, 'Hera Startile Corner Holes Front', Hole), + create_door(player, 'Hera Startile Corner Holes Landing', Hole), # technically ugly but causes lots of failures in basic 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), @@ -1128,9 +1138,14 @@ def create_doors(world, player): world.get_door('Hyrule Castle Tapestry Backwards', player).event('Zelda Pickup') # crystal switches and barriers - world.get_door('Hera Lobby Down Stairs', player).c_switch() - world.get_door('Hera Lobby Key Stairs', player).c_switch() - world.get_door('Hera Lobby Up Stairs', player).c_switch() + world.get_door('Hera Lobby to Front Barrier - Blue', player).barrier(CrystalBarrier.Blue) + world.get_door('Hera Front to Lobby Barrier - Blue', player).barrier(CrystalBarrier.Blue) + world.get_door('Hera Front to Down Stairs Barrier - Blue', player).barrier(CrystalBarrier.Blue) + world.get_door('Hera Down Stairs to Front Barrier - Blue', player).barrier(CrystalBarrier.Blue) + 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 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 Basement Cage Up Stairs', player).c_switch() world.get_door('Hera Tile Room Up Stairs', player).c_switch() world.get_door('Hera Tile Room EN', player).c_switch() @@ -1138,7 +1153,8 @@ def create_doors(world, player): world.get_door('Hera Tridorm SE', player).c_switch() 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', 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() diff --git a/Dungeons.py b/Dungeons.py index c33b38e8..1ec4d6cb 100644 --- a/Dungeons.py +++ b/Dungeons.py @@ -195,7 +195,8 @@ desert_regions = [ ] hera_regions = [ - 'Hera Lobby', 'Hera Basement Cage', 'Hera Tile Room', 'Hera Tridorm', 'Hera Torches', 'Hera Beetles', + 'Hera Lobby', 'Hera Front', 'Hera Back', 'Hera Down Stairs Landing', 'Hera Up Stairs Landing', + '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 Fairies', 'Hera Boss', 'Hera Portal' ] diff --git a/EntranceShuffle.py b/EntranceShuffle.py index 710767f6..3718d0a3 100644 --- a/EntranceShuffle.py +++ b/EntranceShuffle.py @@ -2271,7 +2271,7 @@ Cave_Exits_Base = [['Elder House Exit (East)', 'Elder House Exit (West)'], ['Death Mountain Return Cave Exit (West)', 'Death Mountain Return Cave Exit (East)'], ['Fairy Ascension Cave Exit (Bottom)', 'Fairy Ascension Cave Exit (Top)'], ['Bumper Cave Exit (Top)', 'Bumper Cave Exit (Bottom)'], - ['Hookshot Cave Exit (South)', 'Hookshot Cave Exit (North)']] + ['Hookshot Cave Exit (South)', 'Hookshot Cave Back Exit']] Cave_Exits_Base += [('Superbunny Cave Exit (Bottom)', 'Superbunny Cave Exit (Top)'), ('Spiral Cave Exit (Top)', 'Spiral Cave Exit')] @@ -3252,9 +3252,13 @@ default_connections = [('Waterfall of Wishing', 'Waterfall of Wishing'), ('Superbunny Cave (Bottom)', 'Superbunny Cave'), ('Superbunny Cave Exit (Top)', 'Dark Death Mountain (Top)'), ('Superbunny Cave Exit (Bottom)', 'Dark Death Mountain (East Bottom)'), + ('Hookshot Cave Exit (South)', 'Dark Death Mountain (Top)'), - ('Hookshot Cave Exit (North)', 'Death Mountain Floating Island (Dark World)'), - ('Hookshot Cave Back Entrance', 'Hookshot Cave'), + ('Hookshot Cave Bombable Wall', 'Hookshot Cave Back'), + ('Hookshot Cave Back Exit', 'Death Mountain Floating Island (Dark World)'), + ('Hookshot Cave Back Bombable Wall', 'Hookshot Cave'), + ('Hookshot Cave Back Entrance', 'Hookshot Cave Back'), + ('Mimic Cave', 'Mimic Cave'), ('Pyramid Hole', 'Pyramid'), @@ -3384,8 +3388,10 @@ inverted_default_connections = [('Waterfall of Wishing', 'Waterfall of Wishing' ('Cave Shop (Dark Death Mountain)', 'Cave Shop (Dark Death Mountain)'), ('Superbunny Cave (Bottom)', 'Superbunny Cave'), ('Superbunny Cave Exit (Bottom)', 'Dark Death Mountain (East Bottom)'), - ('Hookshot Cave Exit (North)', 'Death Mountain Floating Island (Dark World)'), - ('Hookshot Cave Back Entrance', 'Hookshot Cave'), + ('Hookshot Cave Bombable Wall', 'Hookshot Cave Back'), + ('Hookshot Cave Back Bombable Wall', 'Hookshot Cave'), + ('Hookshot Cave Back Exit', 'Death Mountain Floating Island (Dark World'), + ('Hookshot Cave Back Entrance', 'Hookshot Cave Back'), ('Mimic Cave', 'Mimic Cave'), ('Inverted Pyramid Hole', 'Pyramid'), ('Inverted Links House', 'Inverted Links House'), @@ -3755,7 +3761,7 @@ exit_ids = {'Links House Exit': (0x01, 0x00), 'Superbunny Cave Exit (Top)': (0x14, 0x15), 'Superbunny Cave Exit (Bottom)': (0x13, 0x14), 'Hookshot Cave Exit (South)': (0x3A, 0x3B), - 'Hookshot Cave Exit (North)': (0x3B, 0x3C), + 'Hookshot Cave Back Exit': (0x3B, 0x3C), 'Ganons Tower Exit': (0x37, 0x38), 'Inverted Ganons Tower Exit': (0x37, 0x38), 'Pyramid Exit': (0x36, 0x37), diff --git a/InvertedRegions.py b/InvertedRegions.py index 71c26fc9..c911d4e9 100644 --- a/InvertedRegions.py +++ b/InvertedRegions.py @@ -197,7 +197,8 @@ def create_inverted_regions(world, player): ['Superbunny Cave Exit (Top)', 'Superbunny Cave Exit (Bottom)']), create_cave_region(player, 'Spike Cave', 'Spike Cave', ['Spike Cave']), create_cave_region(player, 'Hookshot Cave', 'a connector', ['Hookshot Cave - Top Right', 'Hookshot Cave - Top Left', 'Hookshot Cave - Bottom Right', 'Hookshot Cave - Bottom Left'], - ['Hookshot Cave Exit (South)', 'Hookshot Cave Exit (North)']), + ['Hookshot Cave Exit (South)', 'Hookshot Cave Bombable Wall']), + create_cave_region(player, 'Hookshot Cave Back', 'a connector', None, ['Hookshot Cave Back Exit', 'Hookshot Cave Back Bombable Wall']), create_dw_region(player, 'Death Mountain Floating Island (Dark World)', None, ['Floating Island Drop', 'Hookshot Cave Back Entrance']), create_cave_region(player, 'Mimic Cave', 'Mimic Cave', ['Mimic Cave']), diff --git a/Regions.py b/Regions.py index ce4281c0..1f202779 100644 --- a/Regions.py +++ b/Regions.py @@ -187,7 +187,8 @@ def create_regions(world, player): ['Superbunny Cave Exit (Top)', 'Superbunny Cave Exit (Bottom)']), create_cave_region(player, 'Spike Cave', 'Spike Cave', ['Spike Cave']), create_cave_region(player, 'Hookshot Cave', 'a connector', ['Hookshot Cave - Top Right', 'Hookshot Cave - Top Left', 'Hookshot Cave - Bottom Right', 'Hookshot Cave - Bottom Left'], - ['Hookshot Cave Exit (South)', 'Hookshot Cave Exit (North)']), + ['Hookshot Cave Exit (South)', 'Hookshot Cave Bombable Wall']), + create_cave_region(player, 'Hookshot Cave Back', 'a connector', None, ['Hookshot Cave Back Exit', 'Hookshot Cave Back Bombable Wall']), create_dw_region(player, 'Death Mountain Floating Island (Dark World)', None, ['Floating Island Drop', 'Hookshot Cave Back Entrance', 'Floating Island Mirror Spot']), create_lw_region(player, 'Death Mountain Floating Island (Light World)', ['Floating Island']), create_dw_region(player, 'Turtle Rock (Top)', None, ['Turtle Rock Drop']), @@ -337,13 +338,17 @@ def create_dungeon_regions(world, player): create_dungeon_region(player, 'Desert Boss', 'Desert Palace', ['Desert Palace - Boss', 'Desert Palace - Prize'], ['Desert Boss SW']), # Hera - create_dungeon_region(player, 'Hera Lobby', 'Tower of Hera', ['Tower of Hera - Map Chest'], ['Hera Lobby Down Stairs', 'Hera Lobby Key Stairs', 'Hera Lobby Up Stairs', 'Hera Lobby S']), + create_dungeon_region(player, 'Hera Lobby', 'Tower of Hera', None, ['Hera Lobby S', 'Hera Lobby to Front Barrier - Blue']), + create_dungeon_region(player, 'Hera Front', 'Tower of Hera', None, ['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 Down Stairs Landing', 'Tower of Hera', None, ['Hera Lobby Down Stairs', 'Hera Down Stairs to Front Barrier - Blue']), + create_dungeon_region(player, 'Hera Up Stairs Landing', 'Tower of Hera', None, ['Hera Up Stairs to Front Barrier - Orange', 'Hera Lobby Up Stairs']), + create_dungeon_region(player, 'Hera Back', 'Tower of Hera', ['Tower of Hera - Map Chest'], ['Hera Back to Front Barrier - Orange', 'Hera Lobby Key Stairs']), 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 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 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']), - create_dungeon_region(player, 'Hera Startile Corner', 'Tower of Hera', None, ['Hera Startile Corner ES', 'Hera Startile Corner NW', 'Hera Startile Corner Holes']), + 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 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']), @@ -755,6 +760,7 @@ def create_dungeon_regions(world, player): world.initialize_regions() world.get_region('Hera Lobby', player).crystal_switch = True + world.get_region('Hera Front', player).crystal_switch = True world.get_region('Hera Basement Cage', player).crystal_switch = True world.get_region('Hera Tile Room', player).crystal_switch = True # INTERIOR not accessible (maybe with cane) world.get_region('Hera Tridorm', player).crystal_switch = True diff --git a/Rules.py b/Rules.py index 8b689e78..bf7e868f 100644 --- a/Rules.py +++ b/Rules.py @@ -349,6 +349,14 @@ def global_rules(world, player): else: set_rule(world.get_entrance('Thieves Attic ES', player), lambda state: state.can_reach_orange(world.get_region('Thieves Attic', player), player)) + set_rule(world.get_entrance('Hera Lobby to Front Barrier - Blue', player), lambda state: state.can_hit_switch(player)) + set_rule(world.get_entrance('Hera Front to Lobby Barrier - Blue', player), lambda state: state.can_hit_switch(player)) + set_rule(world.get_entrance('Hera Front to Down Stairs Barrier - Blue', player), lambda state: lambda state: state.can_hit_switch(player)) + set_rule(world.get_entrance('Hera Down Stairs to Front Barrier - Blue', player), lambda state: lambda state: state.can_hit_switch_through_barrier(player) or state.can_reach_blue(world.get_region('Hera Down Stairs Landing', player), player)) + set_rule(world.get_entrance('Hera Front to Up Stairs Barrier - Orange', player), lambda state: lambda state: state.can_hit_switch(player)) + set_rule(world.get_entrance('Hera Up Stairs to Front Barrier - Orange', player), lambda state: lambda state: state.can_hit_switch_through_barrier(player) or 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: lambda state: state.can_hit_switch(player)) + set_rule(world.get_entrance('Hera Back to Front Barrier - Orange', player), lambda state: state.has_beam_sword(player) or 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.can_reach_orange(world.get_region('Hera Back', player), player)) set_rule(world.get_entrance('PoD Arena Crystal Path', player), lambda state: state.can_reach_blue(world.get_region('PoD Arena Crystal', player), player)) set_rule(world.get_entrance('Swamp Trench 2 Pots Blue Barrier', player), lambda state: state.can_reach_blue(world.get_region('Swamp Trench 2 Pots', player), player)) set_rule(world.get_entrance('Swamp Shortcut Blue Barrier', player), lambda state: state.can_reach_blue(world.get_region('Swamp Shortcut', player), player)) @@ -407,17 +415,17 @@ def global_rules(world, player): def bomb_rules(world, player): bonkable_doors = ['Two Brothers House Exit (West)', 'Two Brothers House Exit (East)'] # Technically this is incorrectly defined, but functionally the same as what is intended. - bombable_doors = ['Ice Rod Cave', 'Light World Bomb Hut', 'Light World Death Mountain Shop', 'Hookshot Cave Exit (North)', 'Mini Moldorm Cave', - 'Dark Lake Hylia Ledge Fairy', 'Hype Cave', 'Brewery'] + bombable_doors = ['Ice Rod Cave', 'Light World Bomb Hut', 'Light World Death Mountain Shop', 'Mini Moldorm Cave', + 'Hookshot Cave Bombable Wall', 'Hookshot Cave Back Bombable Wall', 'Dark Lake Hylia Ledge Fairy', 'Hype Cave', 'Brewery'] for entrance in bonkable_doors: add_rule(world.get_entrance(entrance, player), lambda state: state.can_use_bombs(player) or state.has_Boots(player)) for entrance in bombable_doors: add_rule(world.get_entrance(entrance, player), lambda state: state.can_use_bombs(player)) - bonkable_items = ["Sahasrahla's Hut - Left", "Sahasrahla's Hut - Middle", "Sahasrahla's Hut - Right"] - bombable_items = ["Blind's Hideout - Top", "Kakariko Well - Top", 'Chicken House', "Aginah's Cave", 'Graveyard Cave', - 'Paradox Cave Upper - Left', 'Paradox Cave Upper - Right', - 'Hype Cave - Top', 'Hype Cave - Middle Right', 'Hype Cave - Middle Left', 'Hype Cave - Bottom'] + bonkable_items = ['Sahasrahla\'s Hut - Left', 'Sahasrahla\'s Hut - Middle', 'Sahasrahla\'s Hut - Right'] + bombable_items = ['Blind\'s Hideout - Top', 'Kakariko Well - Top', 'Chicken House', 'Aginah\'s Cave', 'Graveyard Cave', + 'Paradox Cave Upper - Left', 'Paradox Cave Upper - Right', + 'Hype Cave - Top', 'Hype Cave - Middle Right', 'Hype Cave - Middle Left', 'Hype Cave - Bottom'] for location in bonkable_items: add_rule(world.get_location(location, player), lambda state: state.can_use_bombs(player) or state.has_Boots(player)) for location in bombable_items: @@ -429,10 +437,7 @@ def bomb_rules(world, player): paradox_switch_chests = ['Paradox Cave Lower - Far Left', 'Paradox Cave Lower - Left', 'Paradox Cave Lower - Right', 'Paradox Cave Lower - Far Right', 'Paradox Cave Lower - Middle'] for location in paradox_switch_chests: - add_rule(world.get_location(location, player), lambda state: \ - state.can_use_bombs(player) or state.can_shoot_arrows(player) or state.has_beam_sword(player) \ - or state.has('Blue Boomerang', 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)) + add_rule(world.get_location(location, player), lambda state: state.can_hit_switch_through_barrier(player)) # Dungeon bomb logic for _,entrances in std_kill_rooms.items(): @@ -1591,8 +1596,10 @@ bunny_impassible_doors = { 'Eastern Attic Start WS', 'Eastern Single Eyegore NE', 'Eastern Duo Eyegores NE', 'Desert Main Lobby Left Path', 'Desert Main Lobby Right Path', 'Desert Left Alcove Path', 'Desert Right Alcove Path', 'Desert Compass NW', 'Desert West Lobby NW', 'Desert Back Lobby NW', 'Desert Four Statues NW', 'Desert Four Statues ES', - 'Desert Beamos Hall WS', 'Desert Beamos Hall NE', 'Desert Wall Slide NW', 'Hera Lobby Down Stairs', - 'Hera Lobby Key Stairs', 'Hera Lobby Up Stairs', 'Hera Tile Room EN', 'Hera Tridorm SE', 'Hera Beetles WS', + 'Desert Beamos Hall WS', 'Desert Beamos Hall NE', 'Desert Wall Slide NW', + 'Hera Lobby to Front Barrier - Blue', '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 Down Stairs to Front Barrier - Blue', + 'Hera Up Stairs to Front Barrier - Orange', 'Hera Back to Front Barrier - Orange', 'Hera Tile Room EN', 'Hera Tridorm SE', 'Hera Beetles WS', 'Hera 4F Down Stairs', 'Tower Gold Knights SW', 'Tower Dark Maze EN', 'Tower Dark Pits ES', 'Tower Dark Archers WN', 'Tower Red Spears WN', 'Tower Red Guards EN', 'Tower Red Guards SW', 'Tower Circle of Pots NW', 'Tower Altar NW', 'PoD Left Cage SW', 'PoD Middle Cage SE', 'PoD Pit Room Bomb Hole', 'PoD Pit Room Block Path N',