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 | ||
