From 2ea5762540a67ba20c5cb72c89c5cf62c7e9bfd5 Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Mon, 20 Oct 2025 18:33:18 -0400 Subject: Mark some doors as "latched" --- data/ids.yaml | 7 ++++++- data/maps/control_center/doors.txtpb | 13 +++++++++++-- data/maps/control_center/rooms/Partial Entrance.txtpb | 2 -- data/maps/control_center/rooms/Perceptive Entrance.txtpb | 2 -- data/maps/control_center/rooms/Repetitive Entrance.txtpb | 2 -- data/maps/control_center/rooms/Tenacious Entrance.txtpb | 2 -- data/maps/control_center/rooms/Unkempt Entrance.txtpb | 2 -- data/maps/the_entry/rooms/Repetitive Entrance.txtpb | 3 --- data/maps/the_partial/doors.txtpb | 6 ++---- data/maps/the_partial/rooms/Control Center Entrance.txtpb | 2 -- data/maps/the_perceptive/rooms/Main Area.txtpb | 2 -- data/maps/the_repetitive/rooms/Entry Connector.txtpb | 3 --- data/maps/the_repetitive/rooms/Main Room.txtpb | 2 -- data/maps/the_tenacious/doors.txtpb | 2 ++ data/maps/the_tenacious/rooms/Control Center Entrance.txtpb | 2 -- data/maps/the_unkempt/doors.txtpb | 2 ++ data/maps/the_unkempt/rooms/Control Center Entrance.txtpb | 2 -- proto/data.proto | 1 + proto/human.proto | 5 +++++ tools/assign_ids/main.cpp | 2 +- tools/datapacker/main.cpp | 4 ++++ tools/validator/validator.cpp | 2 +- 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: Between Door: 2716 Desert Door: 2717 Front Door: 2709 + Hidden Door: 2840 Partial Door: 2713 + Perceptive From Inside: 2842 + Perceptive From Outside: 2841 Repetitive Entrance: 2714 Shop Door: 2718 Stormy Entrance: 2710 @@ -2466,8 +2469,8 @@ maps: FINCH: 886 FOUR: 885 doors: - Control Center Entrance: 865 F Door: 866 + L Entered: 2843 Main Room Puzzles: 863 P Door: 864 the_plaza: @@ -3207,6 +3210,7 @@ maps: panels: WISDOM: 2459 doors: + K Entered: 2844 Paintings Door: 2453 the_three_doors: rooms: @@ -3458,6 +3462,7 @@ maps: Control Center Orange Door: 2582 East Door: 2580 Honor Our Hint: 2585 + I Entered: 2845 Let Untrue Tie: 2583 Routine Out Chute: 2584 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 { doors { name: "Hidden Door" type: EVENT + latch: true + receivers: "Components/Doors/entry_12" keyholders { room: "Main Area" name: "1" key: "h" } keyholders { room: "Main Area" name: "2" key: "i" } keyholders { room: "Main Area" name: "3" key: "d" } @@ -103,6 +105,7 @@ doors { doors { name: "Repetitive Entrance" type: STANDARD + latch: true receivers: "Components/Doors/entry_7" keyholders { room: "Main Area" name: "1" key: "m" } keyholders { room: "Main Area" name: "2" key: "o" } @@ -113,20 +116,26 @@ doors { } doors { name: "Perceptive From Outside" - type: EVENT + type: STANDARD + latch: true + receivers: "Components/Doors/entry_26" keyholders { room: "Main Area" name: "1" key: "p" } keyholders { room: "Main Area" name: "2" key: "a" } keyholders { room: "Main Area" name: "3" key: "r" } keyholders { room: "Main Area" name: "4" key: "t" } + location_room: "Main Area" + location_name: "Keyword PART" } doors { name: "Perceptive From Inside" - type: EVENT + type: LOCATION_ONLY panels { room: "Perceptive Entrance" name: "PART" } + location_room: "Perceptive Entrance" } doors { name: "Ancient Entrance" type: STANDARD + latch: true receivers: "Components/Doors/entry_20" keyholders { room: "Main Area" name: "1" key: "z" } 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 { path: "Components/Warps/worldport4" destination { x: 21 y: 0 z: -41 } rotation: 270 - # TODO: shuffle entrances with dependent keyholders - no_shuffle: true } 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 { path: "Components/Warps/worldport12" destination { x: -23 y: 0 z: -11 } rotation: 0 - # TODO: shuffle entrances with dependent keyholders - no_shuffle: true } 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 { path: "Components/Warps/worldport14" destination { x: -16 y: 0 z: -17.5 } rotation: 0 - # TODO: shuffle entrances with dependent keyholders - no_shuffle: true } 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 { path: "Components/Warps/worldport13" destination { x: 56 y: 0 z: -38 } rotation: 180 - # TODO: shuffle entrances with dependent keyholders - no_shuffle: true } 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 { path: "Components/Warps/worldport3" destination { x: 34 y: 0 z: -38.5 } rotation: 90 - # TODO: shuffle entrances with dependent keyholders - no_shuffle: true } 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 { path: "Components/Warps/worldport7" destination { x: -20 y: 0 z: -16 } rotation: 180 - # TODO: this is part of what makes the keyholder dependent connection from CC - # safe in vanilla doors - no_shuffle: true } 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 { doors { name: "L Entered" type: EVENT - # It does this in vanilla, but I'm specifying it so that the Control Center - # Entrance door doesn't override it. + latch: true receivers: "Components/Doors/controlDoor" keyholders { room: "Obverse Side" name: "L" key: "l" } } doors { name: "Control Center Entrance" - type: LOCATION_ONLY + type: EVENT #receivers: "Components/Doors/controlDoor" panels { room: "Control Center Entrance" name: "RETURN" } - location_room: "Control Center Entrance" } doors { 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 { path: "Components/Warps/worldport2" destination { x: -19 y: 0 z: 8 } rotation: 180 - # TODO: shuffle entrances with dependent keyholders - no_shuffle: true } 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 { path: "Components/Warps/worldport" destination { x: 3 y: 0 z: 13 } rotation: 90 - # TODO: shuffle entrances with dependent keyholders - no_shuffle: true } 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 { path: "Components/Warps/worldport2" destination { x: -11 y: 0 z: 13 } rotation: 0 - # TODO: this is part of what makes the keyholder dependent connection form CC - # safe in vanilla doors - no_shuffle: true } 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 { path: "Components/Warps/worldport3" destination { x: -5.5 y: 0 z: 56 } rotation: 90 - # TODO: shuffle entrances with dependent keyholders - no_shuffle: true } 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 { doors { name: "K Entered" type: EVENT + latch: true + receivers: "Components/Doors/entry_6" keyholders { room: "Main Area" name: "K" key: "k" } } 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 { path: "Components/Warps/worldport" destination { x: 0 y: 0 z: 10 } rotation: 0 - # TODO: shuffle entrances with dependent keyholders - no_shuffle: true } 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 { doors { name: "I Entered" type: EVENT + latch: true + receivers: "Components/Doors/entry_4" keyholders { room: "Main Area" name: "I" key: "i" } } 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 { path: "Components/Warps/worldport2" destination { x: -4.5 y: 0 z: 7 } rotation: 0 - # TODO: shuffle entrances with dependent keyholders - no_shuffle: true } 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 { repeated string senders = 19; optional DoorType type = 8; + optional bool latch = 20; optional string location_name = 17; } 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 { optional DoorType type = 4; optional string location_room = 5; optional string location_name = 14; + + // Non-item doors that are latched will stay open once opened, even if the + // opening trigger is deactivated. This applies to EVENT/LOCATION_ONLY doors, + // as well as item-locked doors when not shuffling doors. + optional bool latch = 17; } 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 { void ProcessDoor(const HumanDoor& h_door, const std::string& current_map_name) { - if (h_door.type() == DoorType::EVENT) { + if (h_door.type() == DoorType::EVENT && !h_door.latch()) { return; } 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 { if (h_door.has_double_letters()) { door.set_double_letters(h_door.double_letters()); } + + if (h_door.has_latch()) { + door.set_latch(h_door.latch()); + } } 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 { << std::endl; } - bool needs_id = (h_door.type() != DoorType::EVENT); + bool needs_id = (h_door.type() != DoorType::EVENT || h_door.latch()); if (door_info.has_id != needs_id) { if (needs_id) { std::cout << "Door " << door_identifier.ShortDebugString() -- cgit 1.4.1