diff options
22 files changed, 35 insertions, 35 deletions
diff --git a/data/ids.yaml b/data/ids.yaml index 45c9ea0..a2762a7 100644 --- a/data/ids.yaml +++ b/data/ids.yaml | |||
@@ -53,7 +53,10 @@ maps: | |||
53 | Between Door: 2716 | 53 | Between Door: 2716 |
54 | Desert Door: 2717 | 54 | Desert Door: 2717 |
55 | Front Door: 2709 | 55 | Front Door: 2709 |
56 | Hidden Door: 2840 | ||
56 | Partial Door: 2713 | 57 | Partial Door: 2713 |
58 | Perceptive From Inside: 2842 | ||
59 | Perceptive From Outside: 2841 | ||
57 | Repetitive Entrance: 2714 | 60 | Repetitive Entrance: 2714 |
58 | Shop Door: 2718 | 61 | Shop Door: 2718 |
59 | Stormy Entrance: 2710 | 62 | Stormy Entrance: 2710 |
@@ -2466,8 +2469,8 @@ maps: | |||
2466 | FINCH: 886 | 2469 | FINCH: 886 |
2467 | FOUR: 885 | 2470 | FOUR: 885 |
2468 | doors: | 2471 | doors: |
2469 | Control Center Entrance: 865 | ||
2470 | F Door: 866 | 2472 | F Door: 866 |
2473 | L Entered: 2843 | ||
2471 | Main Room Puzzles: 863 | 2474 | Main Room Puzzles: 863 |
2472 | P Door: 864 | 2475 | P Door: 864 |
2473 | the_plaza: | 2476 | the_plaza: |
@@ -3207,6 +3210,7 @@ maps: | |||
3207 | panels: | 3210 | panels: |
3208 | WISDOM: 2459 | 3211 | WISDOM: 2459 |
3209 | doors: | 3212 | doors: |
3213 | K Entered: 2844 | ||
3210 | Paintings Door: 2453 | 3214 | Paintings Door: 2453 |
3211 | the_three_doors: | 3215 | the_three_doors: |
3212 | rooms: | 3216 | rooms: |
@@ -3458,6 +3462,7 @@ maps: | |||
3458 | Control Center Orange Door: 2582 | 3462 | Control Center Orange Door: 2582 |
3459 | East Door: 2580 | 3463 | East Door: 2580 |
3460 | Honor Our Hint: 2585 | 3464 | Honor Our Hint: 2585 |
3465 | I Entered: 2845 | ||
3461 | Let Untrue Tie: 2583 | 3466 | Let Untrue Tie: 2583 |
3462 | Routine Out Chute: 2584 | 3467 | Routine Out Chute: 2584 |
3463 | W2 Room Door: 2581 | 3468 | W2 Room Door: 2581 |
diff --git a/data/maps/control_center/doors.txtpb b/data/maps/control_center/doors.txtpb index 08476a7..cac1937 100644 --- a/data/maps/control_center/doors.txtpb +++ b/data/maps/control_center/doors.txtpb | |||
@@ -15,6 +15,8 @@ doors { | |||
15 | doors { | 15 | doors { |
16 | name: "Hidden Door" | 16 | name: "Hidden Door" |
17 | type: EVENT | 17 | type: EVENT |
18 | latch: true | ||
19 | receivers: "Components/Doors/entry_12" | ||
18 | keyholders { room: "Main Area" name: "1" key: "h" } | 20 | keyholders { room: "Main Area" name: "1" key: "h" } |
19 | keyholders { room: "Main Area" name: "2" key: "i" } | 21 | keyholders { room: "Main Area" name: "2" key: "i" } |
20 | keyholders { room: "Main Area" name: "3" key: "d" } | 22 | keyholders { room: "Main Area" name: "3" key: "d" } |
@@ -103,6 +105,7 @@ doors { | |||
103 | doors { | 105 | doors { |
104 | name: "Repetitive Entrance" | 106 | name: "Repetitive Entrance" |
105 | type: STANDARD | 107 | type: STANDARD |
108 | latch: true | ||
106 | receivers: "Components/Doors/entry_7" | 109 | receivers: "Components/Doors/entry_7" |
107 | keyholders { room: "Main Area" name: "1" key: "m" } | 110 | keyholders { room: "Main Area" name: "1" key: "m" } |
108 | keyholders { room: "Main Area" name: "2" key: "o" } | 111 | keyholders { room: "Main Area" name: "2" key: "o" } |
@@ -113,20 +116,26 @@ doors { | |||
113 | } | 116 | } |
114 | doors { | 117 | doors { |
115 | name: "Perceptive From Outside" | 118 | name: "Perceptive From Outside" |
116 | type: EVENT | 119 | type: STANDARD |
120 | latch: true | ||
121 | receivers: "Components/Doors/entry_26" | ||
117 | keyholders { room: "Main Area" name: "1" key: "p" } | 122 | keyholders { room: "Main Area" name: "1" key: "p" } |
118 | keyholders { room: "Main Area" name: "2" key: "a" } | 123 | keyholders { room: "Main Area" name: "2" key: "a" } |
119 | keyholders { room: "Main Area" name: "3" key: "r" } | 124 | keyholders { room: "Main Area" name: "3" key: "r" } |
120 | keyholders { room: "Main Area" name: "4" key: "t" } | 125 | keyholders { room: "Main Area" name: "4" key: "t" } |
126 | location_room: "Main Area" | ||
127 | location_name: "Keyword PART" | ||
121 | } | 128 | } |
122 | doors { | 129 | doors { |
123 | name: "Perceptive From Inside" | 130 | name: "Perceptive From Inside" |
124 | type: EVENT | 131 | type: LOCATION_ONLY |
125 | panels { room: "Perceptive Entrance" name: "PART" } | 132 | panels { room: "Perceptive Entrance" name: "PART" } |
133 | location_room: "Perceptive Entrance" | ||
126 | } | 134 | } |
127 | doors { | 135 | doors { |
128 | name: "Ancient Entrance" | 136 | name: "Ancient Entrance" |
129 | type: STANDARD | 137 | type: STANDARD |
138 | latch: true | ||
130 | receivers: "Components/Doors/entry_20" | 139 | receivers: "Components/Doors/entry_20" |
131 | keyholders { room: "Main Area" name: "1" key: "z" } | 140 | keyholders { room: "Main Area" name: "1" key: "z" } |
132 | keyholders { room: "Main Area" name: "2" key: "e" } | 141 | keyholders { room: "Main Area" name: "2" key: "e" } |
diff --git a/data/maps/control_center/rooms/Partial Entrance.txtpb b/data/maps/control_center/rooms/Partial Entrance.txtpb index 5771afc..de5d91a 100644 --- a/data/maps/control_center/rooms/Partial Entrance.txtpb +++ b/data/maps/control_center/rooms/Partial Entrance.txtpb | |||
@@ -12,6 +12,4 @@ ports { | |||
12 | path: "Components/Warps/worldport4" | 12 | path: "Components/Warps/worldport4" |
13 | destination { x: 21 y: 0 z: -41 } | 13 | destination { x: 21 y: 0 z: -41 } |
14 | rotation: 270 | 14 | rotation: 270 |
15 | # TODO: shuffle entrances with dependent keyholders | ||
16 | no_shuffle: true | ||
17 | } | 15 | } |
diff --git a/data/maps/control_center/rooms/Perceptive Entrance.txtpb b/data/maps/control_center/rooms/Perceptive Entrance.txtpb index cf5a82c..99b100b 100644 --- a/data/maps/control_center/rooms/Perceptive Entrance.txtpb +++ b/data/maps/control_center/rooms/Perceptive Entrance.txtpb | |||
@@ -20,6 +20,4 @@ ports { | |||
20 | path: "Components/Warps/worldport12" | 20 | path: "Components/Warps/worldport12" |
21 | destination { x: -23 y: 0 z: -11 } | 21 | destination { x: -23 y: 0 z: -11 } |
22 | rotation: 0 | 22 | rotation: 0 |
23 | # TODO: shuffle entrances with dependent keyholders | ||
24 | no_shuffle: true | ||
25 | } | 23 | } |
diff --git a/data/maps/control_center/rooms/Repetitive Entrance.txtpb b/data/maps/control_center/rooms/Repetitive Entrance.txtpb index 6e242f3..0767e2c 100644 --- a/data/maps/control_center/rooms/Repetitive Entrance.txtpb +++ b/data/maps/control_center/rooms/Repetitive Entrance.txtpb | |||
@@ -5,6 +5,4 @@ ports { | |||
5 | path: "Components/Warps/worldport14" | 5 | path: "Components/Warps/worldport14" |
6 | destination { x: -16 y: 0 z: -17.5 } | 6 | destination { x: -16 y: 0 z: -17.5 } |
7 | rotation: 0 | 7 | rotation: 0 |
8 | # TODO: shuffle entrances with dependent keyholders | ||
9 | no_shuffle: true | ||
10 | } | 8 | } |
diff --git a/data/maps/control_center/rooms/Tenacious Entrance.txtpb b/data/maps/control_center/rooms/Tenacious Entrance.txtpb index 2689589..093e4fc 100644 --- a/data/maps/control_center/rooms/Tenacious Entrance.txtpb +++ b/data/maps/control_center/rooms/Tenacious Entrance.txtpb | |||
@@ -12,6 +12,4 @@ ports { | |||
12 | path: "Components/Warps/worldport13" | 12 | path: "Components/Warps/worldport13" |
13 | destination { x: 56 y: 0 z: -38 } | 13 | destination { x: 56 y: 0 z: -38 } |
14 | rotation: 180 | 14 | rotation: 180 |
15 | # TODO: shuffle entrances with dependent keyholders | ||
16 | no_shuffle: true | ||
17 | } | 15 | } |
diff --git a/data/maps/control_center/rooms/Unkempt Entrance.txtpb b/data/maps/control_center/rooms/Unkempt Entrance.txtpb index 5e65254..a89cceb 100644 --- a/data/maps/control_center/rooms/Unkempt Entrance.txtpb +++ b/data/maps/control_center/rooms/Unkempt Entrance.txtpb | |||
@@ -12,6 +12,4 @@ ports { | |||
12 | path: "Components/Warps/worldport3" | 12 | path: "Components/Warps/worldport3" |
13 | destination { x: 34 y: 0 z: -38.5 } | 13 | destination { x: 34 y: 0 z: -38.5 } |
14 | rotation: 90 | 14 | rotation: 90 |
15 | # TODO: shuffle entrances with dependent keyholders | ||
16 | no_shuffle: true | ||
17 | } | 15 | } |
diff --git a/data/maps/the_entry/rooms/Repetitive Entrance.txtpb b/data/maps/the_entry/rooms/Repetitive Entrance.txtpb index 25c3307..a83eea4 100644 --- a/data/maps/the_entry/rooms/Repetitive Entrance.txtpb +++ b/data/maps/the_entry/rooms/Repetitive Entrance.txtpb | |||
@@ -6,7 +6,4 @@ ports { | |||
6 | path: "Components/Warps/worldport7" | 6 | path: "Components/Warps/worldport7" |
7 | destination { x: -20 y: 0 z: -16 } | 7 | destination { x: -20 y: 0 z: -16 } |
8 | rotation: 180 | 8 | rotation: 180 |
9 | # TODO: this is part of what makes the keyholder dependent connection from CC | ||
10 | # safe in vanilla doors | ||
11 | no_shuffle: true | ||
12 | } | 9 | } |
diff --git a/data/maps/the_partial/doors.txtpb b/data/maps/the_partial/doors.txtpb index c51062a..b6445cd 100644 --- a/data/maps/the_partial/doors.txtpb +++ b/data/maps/the_partial/doors.txtpb | |||
@@ -43,17 +43,15 @@ doors { | |||
43 | doors { | 43 | doors { |
44 | name: "L Entered" | 44 | name: "L Entered" |
45 | type: EVENT | 45 | type: EVENT |
46 | # It does this in vanilla, but I'm specifying it so that the Control Center | 46 | latch: true |
47 | # Entrance door doesn't override it. | ||
48 | receivers: "Components/Doors/controlDoor" | 47 | receivers: "Components/Doors/controlDoor" |
49 | keyholders { room: "Obverse Side" name: "L" key: "l" } | 48 | keyholders { room: "Obverse Side" name: "L" key: "l" } |
50 | } | 49 | } |
51 | doors { | 50 | doors { |
52 | name: "Control Center Entrance" | 51 | name: "Control Center Entrance" |
53 | type: LOCATION_ONLY | 52 | type: EVENT |
54 | #receivers: "Components/Doors/controlDoor" | 53 | #receivers: "Components/Doors/controlDoor" |
55 | panels { room: "Control Center Entrance" name: "RETURN" } | 54 | panels { room: "Control Center Entrance" name: "RETURN" } |
56 | location_room: "Control Center Entrance" | ||
57 | } | 55 | } |
58 | doors { | 56 | doors { |
59 | name: "F Door" | 57 | name: "F Door" |
diff --git a/data/maps/the_partial/rooms/Control Center Entrance.txtpb b/data/maps/the_partial/rooms/Control Center Entrance.txtpb index 02f3e69..faccd50 100644 --- a/data/maps/the_partial/rooms/Control Center Entrance.txtpb +++ b/data/maps/the_partial/rooms/Control Center Entrance.txtpb | |||
@@ -12,6 +12,4 @@ ports { | |||
12 | path: "Components/Warps/worldport2" | 12 | path: "Components/Warps/worldport2" |
13 | destination { x: -19 y: 0 z: 8 } | 13 | destination { x: -19 y: 0 z: 8 } |
14 | rotation: 180 | 14 | rotation: 180 |
15 | # TODO: shuffle entrances with dependent keyholders | ||
16 | no_shuffle: true | ||
17 | } | 15 | } |
diff --git a/data/maps/the_perceptive/rooms/Main Area.txtpb b/data/maps/the_perceptive/rooms/Main Area.txtpb index 90bfb41..ebf511d 100644 --- a/data/maps/the_perceptive/rooms/Main Area.txtpb +++ b/data/maps/the_perceptive/rooms/Main Area.txtpb | |||
@@ -5,6 +5,4 @@ ports { | |||
5 | path: "Components/Warps/worldport" | 5 | path: "Components/Warps/worldport" |
6 | destination { x: 3 y: 0 z: 13 } | 6 | destination { x: 3 y: 0 z: 13 } |
7 | rotation: 90 | 7 | rotation: 90 |
8 | # TODO: shuffle entrances with dependent keyholders | ||
9 | no_shuffle: true | ||
10 | } | 8 | } |
diff --git a/data/maps/the_repetitive/rooms/Entry Connector.txtpb b/data/maps/the_repetitive/rooms/Entry Connector.txtpb index 16dc116..d953ecc 100644 --- a/data/maps/the_repetitive/rooms/Entry Connector.txtpb +++ b/data/maps/the_repetitive/rooms/Entry Connector.txtpb | |||
@@ -5,7 +5,4 @@ ports { | |||
5 | path: "Components/Warps/worldport2" | 5 | path: "Components/Warps/worldport2" |
6 | destination { x: -11 y: 0 z: 13 } | 6 | destination { x: -11 y: 0 z: 13 } |
7 | rotation: 0 | 7 | rotation: 0 |
8 | # TODO: this is part of what makes the keyholder dependent connection form CC | ||
9 | # safe in vanilla doors | ||
10 | no_shuffle: true | ||
11 | } | 8 | } |
diff --git a/data/maps/the_repetitive/rooms/Main Room.txtpb b/data/maps/the_repetitive/rooms/Main Room.txtpb index 3e624a7..623204c 100644 --- a/data/maps/the_repetitive/rooms/Main Room.txtpb +++ b/data/maps/the_repetitive/rooms/Main Room.txtpb | |||
@@ -142,6 +142,4 @@ ports { | |||
142 | path: "Components/Warps/worldport3" | 142 | path: "Components/Warps/worldport3" |
143 | destination { x: -5.5 y: 0 z: 56 } | 143 | destination { x: -5.5 y: 0 z: 56 } |
144 | rotation: 90 | 144 | rotation: 90 |
145 | # TODO: shuffle entrances with dependent keyholders | ||
146 | no_shuffle: true | ||
147 | } | 145 | } |
diff --git a/data/maps/the_tenacious/doors.txtpb b/data/maps/the_tenacious/doors.txtpb index 8fe8bd5..4c454c1 100644 --- a/data/maps/the_tenacious/doors.txtpb +++ b/data/maps/the_tenacious/doors.txtpb | |||
@@ -6,6 +6,8 @@ doors { | |||
6 | doors { | 6 | doors { |
7 | name: "K Entered" | 7 | name: "K Entered" |
8 | type: EVENT | 8 | type: EVENT |
9 | latch: true | ||
10 | receivers: "Components/Doors/entry_6" | ||
9 | keyholders { room: "Main Area" name: "K" key: "k" } | 11 | keyholders { room: "Main Area" name: "K" key: "k" } |
10 | } | 12 | } |
11 | doors { | 13 | doors { |
diff --git a/data/maps/the_tenacious/rooms/Control Center Entrance.txtpb b/data/maps/the_tenacious/rooms/Control Center Entrance.txtpb index 873fabe..05a3af3 100644 --- a/data/maps/the_tenacious/rooms/Control Center Entrance.txtpb +++ b/data/maps/the_tenacious/rooms/Control Center Entrance.txtpb | |||
@@ -12,6 +12,4 @@ ports { | |||
12 | path: "Components/Warps/worldport" | 12 | path: "Components/Warps/worldport" |
13 | destination { x: 0 y: 0 z: 10 } | 13 | destination { x: 0 y: 0 z: 10 } |
14 | rotation: 0 | 14 | rotation: 0 |
15 | # TODO: shuffle entrances with dependent keyholders | ||
16 | no_shuffle: true | ||
17 | } | 15 | } |
diff --git a/data/maps/the_unkempt/doors.txtpb b/data/maps/the_unkempt/doors.txtpb index 29065ec..10165ee 100644 --- a/data/maps/the_unkempt/doors.txtpb +++ b/data/maps/the_unkempt/doors.txtpb | |||
@@ -48,6 +48,8 @@ doors { | |||
48 | doors { | 48 | doors { |
49 | name: "I Entered" | 49 | name: "I Entered" |
50 | type: EVENT | 50 | type: EVENT |
51 | latch: true | ||
52 | receivers: "Components/Doors/entry_4" | ||
51 | keyholders { room: "Main Area" name: "I" key: "i" } | 53 | keyholders { room: "Main Area" name: "I" key: "i" } |
52 | } | 54 | } |
53 | doors { | 55 | doors { |
diff --git a/data/maps/the_unkempt/rooms/Control Center Entrance.txtpb b/data/maps/the_unkempt/rooms/Control Center Entrance.txtpb index 847b8ad..7971cf7 100644 --- a/data/maps/the_unkempt/rooms/Control Center Entrance.txtpb +++ b/data/maps/the_unkempt/rooms/Control Center Entrance.txtpb | |||
@@ -12,6 +12,4 @@ ports { | |||
12 | path: "Components/Warps/worldport2" | 12 | path: "Components/Warps/worldport2" |
13 | destination { x: -4.5 y: 0 z: 7 } | 13 | destination { x: -4.5 y: 0 z: 7 } |
14 | rotation: 0 | 14 | rotation: 0 |
15 | # TODO: shuffle entrances with dependent keyholders | ||
16 | no_shuffle: true | ||
17 | } | 15 | } |
diff --git a/proto/data.proto b/proto/data.proto index a9e1d0d..4b3cf1f 100644 --- a/proto/data.proto +++ b/proto/data.proto | |||
@@ -148,6 +148,7 @@ message Door { | |||
148 | repeated string senders = 19; | 148 | repeated string senders = 19; |
149 | 149 | ||
150 | optional DoorType type = 8; | 150 | optional DoorType type = 8; |
151 | optional bool latch = 20; | ||
151 | 152 | ||
152 | optional string location_name = 17; | 153 | optional string location_name = 17; |
153 | } | 154 | } |
diff --git a/proto/human.proto b/proto/human.proto index c8d653f..ee59bab 100644 --- a/proto/human.proto +++ b/proto/human.proto | |||
@@ -114,6 +114,11 @@ message HumanDoor { | |||
114 | optional DoorType type = 4; | 114 | optional DoorType type = 4; |
115 | optional string location_room = 5; | 115 | optional string location_room = 5; |
116 | optional string location_name = 14; | 116 | optional string location_name = 14; |
117 | |||
118 | // Non-item doors that are latched will stay open once opened, even if the | ||
119 | // opening trigger is deactivated. This applies to EVENT/LOCATION_ONLY doors, | ||
120 | // as well as item-locked doors when not shuffling doors. | ||
121 | optional bool latch = 17; | ||
117 | } | 122 | } |
118 | 123 | ||
119 | message HumanDoors { | 124 | message HumanDoors { |
diff --git a/tools/assign_ids/main.cpp b/tools/assign_ids/main.cpp index 3e16f78..357566a 100644 --- a/tools/assign_ids/main.cpp +++ b/tools/assign_ids/main.cpp | |||
@@ -111,7 +111,7 @@ class AssignIds { | |||
111 | 111 | ||
112 | void ProcessDoor(const HumanDoor& h_door, | 112 | void ProcessDoor(const HumanDoor& h_door, |
113 | const std::string& current_map_name) { | 113 | const std::string& current_map_name) { |
114 | if (h_door.type() == DoorType::EVENT) { | 114 | if (h_door.type() == DoorType::EVENT && !h_door.latch()) { |
115 | return; | 115 | return; |
116 | } | 116 | } |
117 | 117 | ||
diff --git a/tools/datapacker/main.cpp b/tools/datapacker/main.cpp index 9b487e4..fe520aa 100644 --- a/tools/datapacker/main.cpp +++ b/tools/datapacker/main.cpp | |||
@@ -431,6 +431,10 @@ class DataPacker { | |||
431 | if (h_door.has_double_letters()) { | 431 | if (h_door.has_double_letters()) { |
432 | door.set_double_letters(h_door.double_letters()); | 432 | door.set_double_letters(h_door.double_letters()); |
433 | } | 433 | } |
434 | |||
435 | if (h_door.has_latch()) { | ||
436 | door.set_latch(h_door.latch()); | ||
437 | } | ||
434 | } | 438 | } |
435 | 439 | ||
436 | void ProcessConnectionsFile(std::filesystem::path path, | 440 | void ProcessConnectionsFile(std::filesystem::path path, |
diff --git a/tools/validator/validator.cpp b/tools/validator/validator.cpp index c048bab..d651e04 100644 --- a/tools/validator/validator.cpp +++ b/tools/validator/validator.cpp | |||
@@ -234,7 +234,7 @@ class Validator { | |||
234 | << std::endl; | 234 | << std::endl; |
235 | } | 235 | } |
236 | 236 | ||
237 | bool needs_id = (h_door.type() != DoorType::EVENT); | 237 | bool needs_id = (h_door.type() != DoorType::EVENT || h_door.latch()); |
238 | if (door_info.has_id != needs_id) { | 238 | if (door_info.has_id != needs_id) { |
239 | if (needs_id) { | 239 | if (needs_id) { |
240 | std::cout << "Door " << door_identifier.ShortDebugString() | 240 | std::cout << "Door " << door_identifier.ShortDebugString() |