diff --git a/DoorShuffle.py b/DoorShuffle.py index b75e4df4..c961dee7 100644 --- a/DoorShuffle.py +++ b/DoorShuffle.py @@ -2437,6 +2437,11 @@ def change_door_to_trap(d, world, player): if d.entrance.connected_region is not None and d.blocked: d.entrance.connected_region.entrances.remove(d.entrance) d.entrance.connected_region = None + if d.dependents: + for dep in d.dependents: + if dep.entrance.connected_region is not None: + dep.entrance.connected_region.remove(dep.entrance) + dep.entrance.connected_region = None trap_door_exceptions = { @@ -2448,7 +2453,7 @@ trap_door_exceptions = { 'GT Torch Cross WN', 'Mire Tile Room SW', 'Mire Tile Room ES', 'TR Torches WN', 'PoD Lobby N', 'PoD Middle Cage S', 'Ice Bomb Jump NW', 'GT Hidden Spikes SE', 'Ice Tall Hint EN', 'Ice Tall Hint SE', 'Eastern Pot Switch WN', 'Thieves Conveyor Maze WN', 'Thieves Conveyor Maze SW', 'Eastern Dark Square Key Door WN', 'Eastern Lobby NW', - 'Eastern Lobby NE', 'Ice Cross Bottom SE', 'Desert Back Lobby S', 'Desert West S', + 'Eastern Lobby NE', 'Ice Cross Bottom SE', 'Ice Cross Right ES', 'Desert Back Lobby S', 'Desert West S', 'Desert West Lobby ES', 'Mire Hidden Shooters SE', 'Mire Hidden Shooters ES', 'Mire Hidden Shooters WS', 'Tower Dark Pits EN', 'Tower Dark Maze ES', 'TR Tongue Pull WS', 'GT Conveyor Cross EN', } diff --git a/RELEASENOTES.md b/RELEASENOTES.md index cd256c63..22b92568 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -142,6 +142,7 @@ These are now independent of retro mode and have three options: None, Random, an # Bug Fixes and Notes * 1.4.1.4u + * Logic: Fixed logic bugs surrounding dynammic doors missing logic from big keys and other door types * Inverted: Castle warp should not appear after defeating Aga 1 * Enemzier: Fixed a crash with cached sprites Zora/Swamola * 1.4.1.3v diff --git a/Rules.py b/Rules.py index 41705faf..7fd58e10 100644 --- a/Rules.py +++ b/Rules.py @@ -895,8 +895,14 @@ def bomb_rules(world, player): for door in doors_to_bomb_check: if door.kind(world) in [DoorKind.Dashable]: add_rule(door.entrance, lambda state: state.can_use_bombs(player) or state.has_Boots(player)) + if door.dependents: + for dep in door.dependents: + add_rule(dep.entrance, lambda state: state.can_use_bombs(player) or state.has_Boots(player)) elif door.kind(world) in [DoorKind.Bombable]: add_rule(door.entrance, lambda state: state.can_use_bombs(player)) + if door.dependents: + for dep in door.dependents: + add_rule(dep.entrance, lambda state: state.can_use_bombs(player)) def challenge_room_rules(world, player): @@ -2335,6 +2341,9 @@ def add_key_logic_rules(world, player): forbid_item(location, d_logic.small_key_name, player) for door in d_logic.bk_doors: add_rule(world.get_entrance(door.name, player), create_rule(d_logic.bk_name, player)) + if door.dependents: + for dep in door.dependents: + add_rule(dep.entrance, create_rule(d_logic.bk_name, player)) for chest in d_logic.bk_chests: big_chest = world.get_location(chest.name, player) add_rule(big_chest, create_rule(d_logic.bk_name, player))