fix: logic for dynamic doors

This commit is contained in:
aerinon
2024-01-29 10:06:04 -07:00
parent a6e96720a3
commit ef778b7125
3 changed files with 16 additions and 1 deletions

View File

@@ -2437,6 +2437,11 @@ def change_door_to_trap(d, world, player):
if d.entrance.connected_region is not None and d.blocked: if d.entrance.connected_region is not None and d.blocked:
d.entrance.connected_region.entrances.remove(d.entrance) d.entrance.connected_region.entrances.remove(d.entrance)
d.entrance.connected_region = None 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 = { 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', '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', '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', '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', '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', 'Tower Dark Pits EN', 'Tower Dark Maze ES', 'TR Tongue Pull WS', 'GT Conveyor Cross EN',
} }

View File

@@ -142,6 +142,7 @@ These are now independent of retro mode and have three options: None, Random, an
# Bug Fixes and Notes # Bug Fixes and Notes
* 1.4.1.4u * 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 * Inverted: Castle warp should not appear after defeating Aga 1
* Enemzier: Fixed a crash with cached sprites Zora/Swamola * Enemzier: Fixed a crash with cached sprites Zora/Swamola
* 1.4.1.3v * 1.4.1.3v

View File

@@ -895,8 +895,14 @@ def bomb_rules(world, player):
for door in doors_to_bomb_check: for door in doors_to_bomb_check:
if door.kind(world) in [DoorKind.Dashable]: if door.kind(world) in [DoorKind.Dashable]:
add_rule(door.entrance, lambda state: state.can_use_bombs(player) or state.has_Boots(player)) 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]: elif door.kind(world) in [DoorKind.Bombable]:
add_rule(door.entrance, lambda state: state.can_use_bombs(player)) 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): 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) forbid_item(location, d_logic.small_key_name, player)
for door in d_logic.bk_doors: for door in d_logic.bk_doors:
add_rule(world.get_entrance(door.name, player), create_rule(d_logic.bk_name, player)) 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: for chest in d_logic.bk_chests:
big_chest = world.get_location(chest.name, player) big_chest = world.get_location(chest.name, player)
add_rule(big_chest, create_rule(d_logic.bk_name, player)) add_rule(big_chest, create_rule(d_logic.bk_name, player))