diff options
author | Star Rauchenberger <fefferburbia@gmail.com> | 2025-08-31 12:35:27 -0400 |
---|---|---|
committer | Star Rauchenberger <fefferburbia@gmail.com> | 2025-08-31 12:35:27 -0400 |
commit | 8dffc0d1fb5fde81e534d6de8f9cab67483fcce3 (patch) | |
tree | 26a5ef7b6868a77a772d8329c30ba1aa5b68a7fb | |
parent | 09edc0f568705081720a30f976de0f16339f2a96 (diff) | |
download | lingo2-archipelago-8dffc0d1fb5fde81e534d6de8f9cab67483fcce3.tar.gz lingo2-archipelago-8dffc0d1fb5fde81e534d6de8f9cab67483fcce3.tar.bz2 lingo2-archipelago-8dffc0d1fb5fde81e534d6de8f9cab67483fcce3.zip |
Handled cyan doors
-rw-r--r-- | apworld/player_logic.py | 7 | ||||
-rw-r--r-- | data/maps/the_bearer/doors.txtpb | 2 | ||||
-rw-r--r-- | data/maps/the_darkroom/doors.txtpb | 9 | ||||
-rw-r--r-- | data/maps/the_entry/doors.txtpb | 8 | ||||
-rw-r--r-- | data/maps/the_graveyard/doors.txtpb | 3 | ||||
-rw-r--r-- | data/maps/the_great/doors.txtpb | 2 | ||||
-rw-r--r-- | data/maps/the_parthenon/doors.txtpb | 2 | ||||
-rw-r--r-- | data/maps/the_unkempt/doors.txtpb | 4 | ||||
-rw-r--r-- | data/maps/the_unyielding/doors.txtpb | 2 | ||||
-rw-r--r-- | proto/data.proto | 1 | ||||
-rw-r--r-- | proto/human.proto | 1 | ||||
-rw-r--r-- | tools/datapacker/main.cpp | 4 | ||||
-rw-r--r-- | tools/validator/validator.cpp | 9 |
13 files changed, 37 insertions, 17 deletions
diff --git a/apworld/player_logic.py b/apworld/player_logic.py index ae22818..36156e4 100644 --- a/apworld/player_logic.py +++ b/apworld/player_logic.py | |||
@@ -205,7 +205,7 @@ class Lingo2PlayerLogic: | |||
205 | door = self.world.static_logic.objects.doors[door_id] | 205 | door = self.world.static_logic.objects.doors[door_id] |
206 | reqs = AccessRequirements() | 206 | reqs = AccessRequirements() |
207 | 207 | ||
208 | # TODO: control_center_color, switches | 208 | # TODO: lavender_cubes, endings |
209 | if not door.HasField("complete_at") or door.complete_at == 0: | 209 | if not door.HasField("complete_at") or door.complete_at == 0: |
210 | for proxy in door.panels: | 210 | for proxy in door.panels: |
211 | panel_reqs = self.get_panel_reqs(proxy.panel, proxy.answer if proxy.HasField("answer") else None) | 211 | panel_reqs = self.get_panel_reqs(proxy.panel, proxy.answer if proxy.HasField("answer") else None) |
@@ -219,9 +219,14 @@ class Lingo2PlayerLogic: | |||
219 | pass | 219 | pass |
220 | 220 | ||
221 | if door.HasField("control_center_color"): | 221 | if door.HasField("control_center_color"): |
222 | # TODO: Logic for ensuring two CC states aren't needed at once. | ||
222 | reqs.rooms.add("Control Center - Main Area") | 223 | reqs.rooms.add("Control Center - Main Area") |
223 | reqs.add_solution(door.control_center_color) | 224 | reqs.add_solution(door.control_center_color) |
224 | 225 | ||
226 | if door.double_letters: | ||
227 | # TODO: When letter shuffle is on, change this to require any double letter instead. | ||
228 | reqs.rooms.add("The Repetitive - Main Room") | ||
229 | |||
225 | for keyholder_uses in door.keyholders: | 230 | for keyholder_uses in door.keyholders: |
226 | key_name = keyholder_uses.key.upper() | 231 | key_name = keyholder_uses.key.upper() |
227 | if key_name not in reqs.letters: | 232 | if key_name not in reqs.letters: |
diff --git a/data/maps/the_bearer/doors.txtpb b/data/maps/the_bearer/doors.txtpb index 574ea8f..f1f5a57 100644 --- a/data/maps/the_bearer/doors.txtpb +++ b/data/maps/the_bearer/doors.txtpb | |||
@@ -248,5 +248,5 @@ doors { | |||
248 | name: "Butterfly Entrance" | 248 | name: "Butterfly Entrance" |
249 | type: ITEM_ONLY | 249 | type: ITEM_ONLY |
250 | receivers: "Components/Doors/brown_2" | 250 | receivers: "Components/Doors/brown_2" |
251 | switches: "double_letters" | 251 | double_letters: true |
252 | } | 252 | } |
diff --git a/data/maps/the_darkroom/doors.txtpb b/data/maps/the_darkroom/doors.txtpb index ba297e4..d7094ae 100644 --- a/data/maps/the_darkroom/doors.txtpb +++ b/data/maps/the_darkroom/doors.txtpb | |||
@@ -1,11 +1,10 @@ | |||
1 | # TODO: gallery painting | 1 | # TODO: gallery painting |
2 | doors { | 2 | doors { |
3 | name: "Double Letter Panel Blockers" | 3 | name: "Double Letter Panel Blockers" |
4 | type: ITEM_ONLY | 4 | type: EVENT |
5 | receivers: "Panels/Room 1/panel_3/visibilityListener" | 5 | #receivers: "Panels/Room 1/panel_3/visibilityListener" |
6 | receivers: "Panels/Room 2/panel_3/visibilityListener" | 6 | #receivers: "Panels/Room 2/panel_3/visibilityListener" |
7 | # TODO: honestly idk if this should even exist | 7 | double_letters: true |
8 | switches: "double_letters" | ||
9 | } | 8 | } |
10 | doors { | 9 | doors { |
11 | name: "Second Room Entrance" | 10 | name: "Second Room Entrance" |
diff --git a/data/maps/the_entry/doors.txtpb b/data/maps/the_entry/doors.txtpb index 1473af2..78ffa52 100644 --- a/data/maps/the_entry/doors.txtpb +++ b/data/maps/the_entry/doors.txtpb | |||
@@ -196,7 +196,7 @@ doors { | |||
196 | name: "Repetitive Entrance" | 196 | name: "Repetitive Entrance" |
197 | type: ITEM_ONLY | 197 | type: ITEM_ONLY |
198 | receivers: "Components/Doors/Entry/entry_proxied_9" | 198 | receivers: "Components/Doors/Entry/entry_proxied_9" |
199 | switches: "double_letters" | 199 | double_letters: true |
200 | } | 200 | } |
201 | doors { | 201 | doors { |
202 | name: "Shop Entrance" | 202 | name: "Shop Entrance" |
@@ -214,9 +214,9 @@ doors { | |||
214 | } | 214 | } |
215 | doors { | 215 | doors { |
216 | name: "Flipped Pyramid Area Entrance" | 216 | name: "Flipped Pyramid Area Entrance" |
217 | type: ITEM_ONLY | 217 | type: EVENT |
218 | receivers: "Components/Doors/Entry/entry_proxied_12" | 218 | receivers: "Components/Doors/Entry/entry_proxied_12" |
219 | switches: "double_letters" | 219 | double_letters: true |
220 | } | 220 | } |
221 | doors { | 221 | doors { |
222 | name: "Literate Entrance" | 222 | name: "Literate Entrance" |
@@ -251,7 +251,7 @@ doors { | |||
251 | type: ITEM_ONLY | 251 | type: ITEM_ONLY |
252 | receivers: "Components/Doors/Entry/d_3" | 252 | receivers: "Components/Doors/Entry/d_3" |
253 | receivers: "Components/Doors/Entry/d_4" | 253 | receivers: "Components/Doors/Entry/d_4" |
254 | switches: "double_letters" | 254 | double_letters: true |
255 | } | 255 | } |
256 | doors { | 256 | doors { |
257 | name: "D Room Panels" | 257 | name: "D Room Panels" |
diff --git a/data/maps/the_graveyard/doors.txtpb b/data/maps/the_graveyard/doors.txtpb index f06d40d..5e5e929 100644 --- a/data/maps/the_graveyard/doors.txtpb +++ b/data/maps/the_graveyard/doors.txtpb | |||
@@ -19,6 +19,5 @@ doors { | |||
19 | doors { | 19 | doors { |
20 | name: "Double Letters" | 20 | name: "Double Letters" |
21 | type: EVENT | 21 | type: EVENT |
22 | switches: "double_letters" | 22 | double_letters: true |
23 | # TODO: once again, not sure whether this is how it should work | ||
24 | } | 23 | } |
diff --git a/data/maps/the_great/doors.txtpb b/data/maps/the_great/doors.txtpb index 477c678..e768dc7 100644 --- a/data/maps/the_great/doors.txtpb +++ b/data/maps/the_great/doors.txtpb | |||
@@ -226,7 +226,7 @@ doors { | |||
226 | name: "Tower Entrance" | 226 | name: "Tower Entrance" |
227 | type: ITEM_ONLY | 227 | type: ITEM_ONLY |
228 | receivers: "Components/Doors/entry_25" | 228 | receivers: "Components/Doors/entry_25" |
229 | switches: "double_letters" | 229 | double_letters: true |
230 | } | 230 | } |
231 | doors { | 231 | doors { |
232 | name: "Maze Out/South Door" | 232 | name: "Maze Out/South Door" |
diff --git a/data/maps/the_parthenon/doors.txtpb b/data/maps/the_parthenon/doors.txtpb index 7bc41c1..bb57d12 100644 --- a/data/maps/the_parthenon/doors.txtpb +++ b/data/maps/the_parthenon/doors.txtpb | |||
@@ -1,7 +1,7 @@ | |||
1 | doors { | 1 | doors { |
2 | name: "Double Letters" | 2 | name: "Double Letters" |
3 | type: EVENT | 3 | type: EVENT |
4 | switches: "double_letters" | 4 | double_letters: true |
5 | } | 5 | } |
6 | doors { | 6 | doors { |
7 | name: "Lavender Cubes" | 7 | name: "Lavender Cubes" |
diff --git a/data/maps/the_unkempt/doors.txtpb b/data/maps/the_unkempt/doors.txtpb index 906a900..9a13c82 100644 --- a/data/maps/the_unkempt/doors.txtpb +++ b/data/maps/the_unkempt/doors.txtpb | |||
@@ -21,7 +21,7 @@ doors { | |||
21 | doors { | 21 | doors { |
22 | name: "Cyan Doors" | 22 | name: "Cyan Doors" |
23 | type: EVENT | 23 | type: EVENT |
24 | switches: "double_letters" | 24 | double_letters: true |
25 | } | 25 | } |
26 | doors { | 26 | doors { |
27 | name: "Sun Temple Entrance" | 27 | name: "Sun Temple Entrance" |
@@ -66,7 +66,9 @@ doors { | |||
66 | name: "Control Center Orange Door" | 66 | name: "Control Center Orange Door" |
67 | type: CONTROL_CENTER_COLOR | 67 | type: CONTROL_CENTER_COLOR |
68 | receivers: "Components/Doors/entry_6" | 68 | receivers: "Components/Doors/entry_6" |
69 | receivers: "Components/Doors/entry_13" | ||
69 | control_center_color: "orange" | 70 | control_center_color: "orange" |
71 | double_letters: true | ||
70 | } | 72 | } |
71 | doors { | 73 | doors { |
72 | name: "W2 Door" | 74 | name: "W2 Door" |
diff --git a/data/maps/the_unyielding/doors.txtpb b/data/maps/the_unyielding/doors.txtpb index 46da45c..b9d0d77 100644 --- a/data/maps/the_unyielding/doors.txtpb +++ b/data/maps/the_unyielding/doors.txtpb | |||
@@ -499,5 +499,5 @@ doors { | |||
499 | doors { | 499 | doors { |
500 | name: "Cyan Doors" | 500 | name: "Cyan Doors" |
501 | type: EVENT | 501 | type: EVENT |
502 | switches: "double_letters" | 502 | double_letters: true |
503 | } | 503 | } |
diff --git a/proto/data.proto b/proto/data.proto index 032cf3a..60b603b 100644 --- a/proto/data.proto +++ b/proto/data.proto | |||
@@ -105,6 +105,7 @@ message Door { | |||
105 | repeated uint64 rooms = 14; | 105 | repeated uint64 rooms = 14; |
106 | repeated uint64 doors = 15; | 106 | repeated uint64 doors = 15; |
107 | repeated uint64 endings = 16; | 107 | repeated uint64 endings = 16; |
108 | optional bool double_letters = 18; | ||
108 | 109 | ||
109 | optional DoorType type = 8; | 110 | optional DoorType type = 8; |
110 | 111 | ||
diff --git a/proto/human.proto b/proto/human.proto index 5f6354c..c7e2f5d 100644 --- a/proto/human.proto +++ b/proto/human.proto | |||
@@ -87,6 +87,7 @@ message HumanDoor { | |||
87 | repeated RoomIdentifier rooms = 11; | 87 | repeated RoomIdentifier rooms = 11; |
88 | repeated DoorIdentifier doors = 12; | 88 | repeated DoorIdentifier doors = 12; |
89 | repeated string endings = 13; | 89 | repeated string endings = 13; |
90 | optional bool double_letters = 15; | ||
90 | 91 | ||
91 | optional DoorType type = 4; | 92 | optional DoorType type = 4; |
92 | optional string location_room = 5; | 93 | optional string location_room = 5; |
diff --git a/tools/datapacker/main.cpp b/tools/datapacker/main.cpp index cc83ca1..4923fce 100644 --- a/tools/datapacker/main.cpp +++ b/tools/datapacker/main.cpp | |||
@@ -406,6 +406,10 @@ class DataPacker { | |||
406 | if (h_door.has_location_name()) { | 406 | if (h_door.has_location_name()) { |
407 | door.set_location_name(h_door.location_name()); | 407 | door.set_location_name(h_door.location_name()); |
408 | } | 408 | } |
409 | |||
410 | if (h_door.has_double_letters()) { | ||
411 | door.set_double_letters(h_door.double_letters()); | ||
412 | } | ||
409 | } | 413 | } |
410 | 414 | ||
411 | void ProcessConnectionsFile(std::filesystem::path path, | 415 | void ProcessConnectionsFile(std::filesystem::path path, |
diff --git a/tools/validator/validator.cpp b/tools/validator/validator.cpp index f5524c3..9c66e09 100644 --- a/tools/validator/validator.cpp +++ b/tools/validator/validator.cpp | |||
@@ -198,6 +198,15 @@ class Validator { | |||
198 | std::cout << "Door " << door_identifier.ShortDebugString() | 198 | std::cout << "Door " << door_identifier.ShortDebugString() |
199 | << " needs an explicit location name." << std::endl; | 199 | << " needs an explicit location name." << std::endl; |
200 | } | 200 | } |
201 | |||
202 | if (h_door.double_letters() && | ||
203 | (h_door.type() == DoorType::STANDARD || | ||
204 | h_door.type() == DoorType::LOCATION_ONLY || | ||
205 | h_door.type() == DoorType::GRAVESTONE)) { | ||
206 | std::cout << "Door " << door_identifier.ShortDebugString() | ||
207 | << " is a location that depends on double_letters." | ||
208 | << std::endl; | ||
209 | } | ||
201 | } | 210 | } |
202 | } | 211 | } |
203 | 212 | ||