about summary refs log tree commit diff stats
path: root/apworld/regions.py
diff options
context:
space:
mode:
authorStar Rauchenberger <fefferburbia@gmail.com>2025-09-16 16:59:51 -0400
committerStar Rauchenberger <fefferburbia@gmail.com>2025-09-16 16:59:51 -0400
commit462a547f78080fbd371c318945352bf9a08001bb (patch)
tree8ce02c0234461a4b73e45245f02e1a9870239875 /apworld/regions.py
parentb2b87691af2b9bba227735152abc2d983ed938ab (diff)
downloadlingo2-archipelago-462a547f78080fbd371c318945352bf9a08001bb.tar.gz
lingo2-archipelago-462a547f78080fbd371c318945352bf9a08001bb.tar.bz2
lingo2-archipelago-462a547f78080fbd371c318945352bf9a08001bb.zip
[Apworld] Fix indirect conditions for deep reqs
Diffstat (limited to 'apworld/regions.py')
-rw-r--r--apworld/regions.py23
1 files changed, 12 insertions, 11 deletions
diff --git a/apworld/regions.py b/apworld/regions.py index 4f1dd55..fad9bc7 100644 --- a/apworld/regions.py +++ b/apworld/regions.py
@@ -17,8 +17,7 @@ def create_region(room, world: "Lingo2World") -> Region:
17def create_locations(room, new_region: Region, world: "Lingo2World", regions: dict[str, Region]): 17def create_locations(room, new_region: Region, world: "Lingo2World", regions: dict[str, Region]):
18 for location in world.player_logic.locations_by_room.get(room.id, {}): 18 for location in world.player_logic.locations_by_room.get(room.id, {}):
19 reqs = location.reqs.copy() 19 reqs = location.reqs.copy()
20 if new_region.name in reqs.rooms: 20 reqs.remove_room(new_region.name)
21 reqs.rooms.remove(new_region.name)
22 21
23 new_location = Lingo2Location(world.player, world.static_logic.location_id_to_name[location.code], 22 new_location = Lingo2Location(world.player, world.static_logic.location_id_to_name[location.code],
24 location.code, new_region) 23 location.code, new_region)
@@ -58,6 +57,10 @@ def create_regions(world: "Lingo2World"):
58 57
59 from_region = world.static_logic.get_room_region_name(connection.from_room) 58 from_region = world.static_logic.get_room_region_name(connection.from_room)
60 to_region = world.static_logic.get_room_region_name(connection.to_room) 59 to_region = world.static_logic.get_room_region_name(connection.to_room)
60
61 if from_region not in regions or to_region not in regions:
62 continue
63
61 connection_name = f"{from_region} -> {to_region}" 64 connection_name = f"{from_region} -> {to_region}"
62 65
63 reqs = AccessRequirements() 66 reqs = AccessRequirements()
@@ -95,17 +98,15 @@ def create_regions(world: "Lingo2World"):
95 connection_name = f"{connection_name} (via panel {panel.name})" 98 connection_name = f"{connection_name} (via panel {panel.name})"
96 99
97 reqs.simplify() 100 reqs.simplify()
101 reqs.remove_room(from_region)
98 102
99 if from_region in regions and to_region in regions: 103 connection = Entrance(world.player, connection_name, regions[from_region])
100 connection = Entrance(world.player, connection_name, regions[from_region]) 104 connection.access_rule = make_location_lambda(reqs, world, regions)
101 connection.access_rule = make_location_lambda(reqs, world, regions)
102 105
103 regions[from_region].exits.append(connection) 106 regions[from_region].exits.append(connection)
104 connection.connect(regions[to_region]) 107 connection.connect(regions[to_region])
105 108
106 for region in reqs.rooms: 109 for region in reqs.get_referenced_rooms():
107 if region == from_region: 110 world.multiworld.register_indirect_condition(regions[region], connection)
108 continue
109 world.multiworld.register_indirect_condition(regions[region], connection)
110 111
111 world.multiworld.regions += regions.values() 112 world.multiworld.regions += regions.values()