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:
|
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',
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
9
Rules.py
9
Rules.py
@@ -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))
|
||||||
|
|||||||
Reference in New Issue
Block a user