summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--apworld/player_logic.py7
-rw-r--r--data/maps/the_bearer/doors.txtpb2
-rw-r--r--data/maps/the_darkroom/doors.txtpb9
-rw-r--r--data/maps/the_entry/doors.txtpb8
-rw-r--r--data/maps/the_graveyard/doors.txtpb3
-rw-r--r--data/maps/the_great/doors.txtpb2
-rw-r--r--data/maps/the_parthenon/doors.txtpb2
-rw-r--r--data/maps/the_unkempt/doors.txtpb4
-rw-r--r--data/maps/the_unyielding/doors.txtpb2
-rw-r--r--proto/data.proto1
-rw-r--r--proto/human.proto1
-rw-r--r--tools/datapacker/main.cpp4
-rw-r--r--tools/validator/validator.cpp9
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
2doors { 2doors {
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}
10doors { 9doors {
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}
201doors { 201doors {
202 name: "Shop Entrance" 202 name: "Shop Entrance"
@@ -214,9 +214,9 @@ doors {
214} 214}
215doors { 215doors {
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}
221doors { 221doors {
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}
256doors { 256doors {
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 {
19doors { 19doors {
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}
231doors { 231doors {
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 @@
1doors { 1doors {
2 name: "Double Letters" 2 name: "Double Letters"
3 type: EVENT 3 type: EVENT
4 switches: "double_letters" 4 double_letters: true
5} 5}
6doors { 6doors {
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 {
21doors { 21doors {
22 name: "Cyan Doors" 22 name: "Cyan Doors"
23 type: EVENT 23 type: EVENT
24 switches: "double_letters" 24 double_letters: true
25} 25}
26doors { 26doors {
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}
71doors { 73doors {
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 {
499doors { 499doors {
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