fix: logic for dynamic doors
This commit is contained in:
@@ -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',
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
9
Rules.py
9
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))
|
||||
|
||||
Reference in New Issue
Block a user