about summary refs log tree commit diff stats
path: root/data/maps/the_plaza/doors.txtpb
blob: be491ede2f298e92b9739de9e8bd4768ae81d1ec (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182pre { line-height: 125%; }
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.highlight .hll { background-color: #ffffcc }
.highlight .c { color: #888888 } /* Comment */
.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
.highlight .k { color: #008800; font-weight: bold } /* Keyword */
.highlight .ch { color: #888888 } /* Comment.Hashbang */
.highlight .cm { color: #888888 } /* Comment.Multiline */
.highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */
.highlight .cpf { color: #888888 } /* Comment.PreprocFile */
.highlight .c1 { color: #888888 } /* Comment.Single */
.highlight .cs { color: #cc0000
doors {
  name: "Repetitive Entrance"
  type: STANDARD
  receivers: "Components/Doors/entry_3"
  panels { room: "Main Area" name: "ASTOUNDING" }
  panels { room: "Main Area" name: "INFLEXIBLE" }
  panels { room: "Main Area" name: "AMONG" }
  location_room: "Main Area"
}
doors {
  name: "Symbolic Entrance"
  type: ITEM_ONLY
  receivers: "Components/Doors/entry_2"
  panels { room: "Main Area" name: "ASTOUNDING" }
  panels { room: "Main Area" name: "INFLEXIBLE" }
  panels { room: "Main Area" name: "AMONG" }
}
doors {
  name: "Sirenic Entrance"
  type: ITEM_ONLY
  receivers: "Components/Doors/entry_8"
  panels { room: "Main Area" name: "ASTOUNDING" }
  panels { room: "Main Area" name: "INFLEXIBLE" }
  panels { room: "Main Area" name: "AMONG" }
}
doors {
  name: "Turtle Entrance"
  type: STANDARD
  receivers: "Components/Doors/entry_1"
  panels { room: "Main Area" name: "COURTYARD" }
  location_room: "Main Area"
}
doors {
  name: "Top Left Door"
  type: STANDARD
  receivers: "Components/Doors/entry_6"
  panels { room: "Center Room" name: "REPORTER" }
  panels { room: "Center Room" name: "BIRD" }
  panels { room: "Center Room" name: "FOX" }
  panels { room: "Center Room" name: "JUDGE" }
  panels { room: "Center Room" name: "DENTIST" }
  panels { room: "Center Room" name: "SQUIRREL" }
  location_room: "Center Room"
}
doors {
  name: "Top Right Door"
  type: ITEM_ONLY
  receivers: "Components/Doors/entry_7"
  panels { room: "Center Room" name: "REPORTER" }
  panels { room: "Center Room" name: "BIRD" }
  panels { room: "Center Room" name: "FOX" }
  panels { room: "Center Room" name: "JUDGE" }
  panels { room: "Center Room" name: "DENTIST" }
  panels { room: "Center Room" name: "SQUIRREL" }
}
doors {
  name: "Bottom Left Door"
  type: ITEM_ONLY
  receivers: "Components/Doors/entry_5"
  panels { room: "Center Room" name: "REPORTER" }
  panels { room: "Center Room" name: "BIRD" }
  panels { room: "Center Room" name: "FOX" }
  panels { room: "Center Room" name: "JUDGE" }
  panels { room: "Center Room" name: "DENTIST" }
  panels { room: "Center Room" name: "SQUIRREL" }
}
doors {
  name: "Bottom Right Door"
  type: ITEM_ONLY
  receivers: "Components/Doors/entry_4"
  panels { room: "Center Room" name: "REPORTER" }
  panels { room: "Center Room" name: "BIRD" }
  panels { room: "Center Room" name: "FOX" }
  panels { room: "Center Room" name: "JUDGE" }
  panels { room: "Center Room" name: "DENTIST" }
  panels { room: "Center Room" name: "SQUIRREL" }
}
doors {
  name: "Top Left Puzzles"
  type: LOCATION_ONLY
  panels { room: "Top Left Room" name: "BARE SOD" }
  panels { room: "Top Left Room" name: "SOD" }
  panels { room: "Top Left Room" name: "BARE" }
  panels { room: "Top Left Room" name: "KNOT TECTONIC" }
  panels { room: "Top Left Room" name: "TECTONIC" }
  panels { room: "Top Left Room" name: "KNOT" }
  panels { room: "Top Left Room" name: "SURE TEMPER" }
  panels { room: "Top Left Room" name: "TEMPER" }
  panels { room: "Top Left Room" name: "SURE" }
  panels { room: "Top Left Room" name: "BACKPACK SILVER" }
  panels { room: "Top Left Room" name: "COLOR (2)" }
  panels { room: "Top Left Room" name: "SILVER" }
  panels { room: "Top Left Room" name: "BACKPACK" }
  panels { room: "Top Left Room" name: "COLOR WHOLE" }
  panels { room: "Top Left Room" name: "WHOLE" }
  panels { room: "Top Left Room" name: "COLOR (1)" }
  panels { room: "Top Left Room" name: "CHILL BEAR" }
  panels { room: "Top Left Room" name: "BEAR" }
  panels { room: "Top Left Room" name: "CHILL" }
  panels { room: "Top Left Room" name: "SURE TEMPER BACKPACK SILVER" }
  panels { room: "Top Left Room" name: "KNOT TECTONIC BARE SOD" }
  panels { room: "Top Left Room" name: "COLOR WHOLE CHILL BEAR" }
  location_room: "Top Left Room"
}
doors {
  name: "Top Right Puzzles"
  type: LOCATION_ONLY
  panels { room: "Top Right Room" name: "RIGHT WING" }
  panels { room: "Top Right Room" name: "WING" }
  panels { room: "Top Right Room" name: "RIGHT" }
  panels { room: "Top Right Room" name: "TYPIST BEAR" }
  panels { room: "Top Right Room" name: "BEAR" }
  panels { room: "Top Right Room" name: "TYPIST" }
  panels { room: "Top Right Room" name: "HALVES ANNOYED" }
  panels { room: "Top Right Room" name: "ANNOYED" }
  panels { room: "Top Right Room" name: "HALVES" }
  panels { room: "Top Right Room" name: "SOUR GOOD" }
  panels { room: "Top Right Room" name: "GOOD" }
  panels { room: "Top Right Room" name: "SOUR" }
  panels { room: "Top Right Room" name: "HOLE TIME" }
  panels { room: "Top Right Room" name: "TIME" }
  panels { room: "Top Right Room" name: "HOLE" }
  panels { room: "Top Right Room" name: "KNOT CHEF" }
  panels { room: "Top Right Room" name: "CHEF" }
  panels { room: "Top Right Room" name: "KNOT" }
  panels { room: "Top Right Room" name: "HALVES ANNOYED SOUR GOOD" }
  panels { room: "Top Right Room" name: "TYPIST BEAR RIGHT WING" }
  panels { room: "Top Right Room" name: "KNOT CHEF HOLE TIME" }
  location_room: "Top Right Room"
}
doors {
  name: "Bottom Left Puzzles"
  type: LOCATION_ONLY
  panels { room: "Bottom Left Room" name: "SHELL (1)" }
  panels { room: "Bottom Left Room" name: "SHELL (2)" }
  panels { room: "Bottom Left Room" name: "SHELL (3)" }
  panels { room: "Bottom Left Room" name: "SHELL (4)" }
  panels { room: "Bottom Left Room" name: "SHELL (5)" }
  panels { room: "Bottom Left Room" name: "SHELL (6)" }
  location_room: "Bottom Left Room"
}
doors {
  name: "Bottom Right Puzzles"
  type: LOCATION_ONLY
  panels { room: "Bottom Right Room" name: "FLY" }
  panels { room: "Bottom Right Room" name: "DECLOG" }
  panels { room: "Bottom Right Room" name: "SWING" }
  panels { room: "Bottom Right Room" name: "HIBERNATE" }
  panels { room: "Bottom Right Room" name: "HONEY" }
  panels { room: "Bottom Right Room" name: "INJECT" }
  location_room: "Bottom Right Room"
}
doors {
  name: "Mastery"
  type: EVENT
  panels { room: "Top Left Room" name: "BARE SOD" }
  panels { room: "Top Left Room" name: "SOD" }
  panels { room: "Top Left Room" name: "BARE" }
  panels { room: "Top Left Room" name: "KNOT TECTONIC" }
  panels { room: "Top Left Room" name: "TECTONIC" }
  panels { room: "Top Left Room" name: "KNOT" }
  panels { room: "Top Left Room" name: "SURE TEMPER" }
  panels { room: "Top Left Room" name: "TEMPER" }
  panels { room: "Top Left Room" name: "SURE" }
  panels { room: "Top Left Room" name: "BACKPACK SILVER" }
  panels { room: "Top Left Room" name: "COLOR (2)" }
  panels { room: "Top Left Room" name: "SILVER" }
  panels { room: "Top Left Room" name: "BACKPACK" }
  panels { room: "Top Left Room" name: "COLOR WHOLE" }
  panels { room: "Top Left Room" name: "WHOLE" }
  panels { room: "Top Left Room" name: "COLOR (1)" }
  panels { room: "Top Left Room" name: "CHILL BEAR" }
  panels { room: "Top Left Room" name: "BEAR" }
  panels { room: "Top Left Room" name: "CHILL" }
  panels { room: "Top Left Room" name: "SURE TEMPER BACKPACK SILVER" }
  panels { room: "Top Left Room" name: "KNOT TECTONIC BARE SOD" }
  panels { room: "Top Left Room" name: "COLOR WHOLE CHILL BEAR" }
  panels { room: "Top Right Room" name: "RIGHT WING" }
  panels { room: "Top Right Room" name: "WING" }
  panels { room: "Top Right Room" name: "RIGHT" }
  panels { room: "Top Right Room" name: "TYPIST BEAR" }
  panels { room: "Top Right Room" name: "BEAR" }
  panels { room: "Top Right Room" name: "TYPIST" }
  panels { room: "Top Right Room" name: "HALVES ANNOYED" }
  panels { room: "Top Right Room" name: "ANNOYED" }
  panels { room: "Top Right Room" name: "HALVES" }
  panels { room: "Top Right Room" name: "SOUR GOOD" }
  panels { room: "Top Right Room" name: "GOOD" }
  panels { room: "Top Right Room" name: "SOUR" }
  panels { room: "Top Right Room" name: "HOLE TIME" }
  panels { room: "Top Right Room" name: "TIME" }
  panels { room: "Top Right Room" name: "HOLE" }
  panels { room: "Top Right Room" name: "KNOT CHEF" }
  panels { room: "Top Right Room" name: "CHEF" }
  panels { room: "Top Right Room" name: "KNOT" }
  panels { room: "Top Right Room" name: "HALVES ANNOYED SOUR GOOD" }
  panels { room: "Top Right Room" name: "TYPIST BEAR RIGHT WING" }
  panels { room: "Top Right Room" name: "KNOT CHEF HOLE TIME" }
  panels { room: "Bottom Left Room" name: "SHELL (1)" }
  panels { room: "Bottom Left Room" name: "SHELL (2)" }
  panels { room: "Bottom Left Room" name: "SHELL (3)" }
  panels { room: "Bottom Left Room" name: "SHELL (4)" }
  panels { room: "Bottom Left Room" name: "SHELL (5)" }
  panels { room: "Bottom Left Room" name: "SHELL (6)" }
  panels { room: "Bottom Right Room" name: "FLY" }
  panels { room: "Bottom Right Room" name: "DECLOG" }
  panels { room: "Bottom Right Room" name: "SWING" }
  panels { room: "Bottom Right Room" name: "HIBERNATE" }
  panels { room: "Bottom Right Room" name: "HONEY" }
  panels { room: "Bottom Right Room" name: "INJECT" }
}
p">("Endings", []).append(location_name) for progressive in self.objects.progressives: self.item_id_to_name[progressive.ap_id] = progressive.name for door_group in self.objects.door_groups: self.item_id_to_name[door_group.ap_id] = door_group.name for keyholder in self.objects.keyholders: if keyholder.HasField("key"): location_name = f"{self.get_room_object_location_prefix(keyholder)} - {keyholder.key.upper()} Keyholder" self.location_id_to_name[keyholder.ap_id] = location_name self.location_name_groups.setdefault("Keyholders", []).append(location_name) self.item_id_to_name[self.objects.special_ids["A Job Well Done"]] = "A Job Well Done" self.item_id_to_name[self.objects.special_ids["Numbers"]] = "Numbers" self.item_name_groups["Symbols"] = [] for symbol_name in SYMBOL_ITEMS.values(): self.item_id_to_name[self.objects.special_ids[symbol_name]] = symbol_name self.item_name_groups["Symbols"].append(symbol_name) for trap_name in ANTI_COLLECTABLE_TRAPS: self.item_id_to_name[self.objects.special_ids[trap_name]] = trap_name for game_map in self.objects.maps: if game_map.HasField("rte_room"): self.item_id_to_name[game_map.rte_ap_id] = self.get_map_rte_item_name(game_map.id) self.item_name_to_id = {name: ap_id for ap_id, name in self.item_id_to_name.items()} self.location_name_to_id = {name: ap_id for ap_id, name in self.location_id_to_name.items()} for panel in self.objects.panels: for letter in panel.answer.upper(): if letter.isalpha(): self.letter_weights[letter] = self.letter_weights.get(letter, 0) + 1 self.door_id_by_ap_id = {door.ap_id: door.id for door in self.objects.doors if door.HasField("ap_id")} self.port_id_by_ap_id = {port.ap_id: port.id for port in self.objects.ports if port.HasField("ap_id")} self.map_id_by_name = {game_map.name: game_map.id for game_map in self.objects.maps} def get_door_item_name(self, door: data_pb2.Door) -> str: return f"{self.get_map_object_map_name(door)} - {door.name}" def get_door_item_name_by_id(self, door_id: int) -> str: door = self.objects.doors[door_id] return self.get_door_item_name(door_id) def get_door_location_name(self, door: data_pb2.Door) -> str: map_part = self.get_room_object_location_prefix(door) if door.HasField("location_name"): return f"{map_part} - {door.location_name}" generated_location_name = self.get_generated_door_location_name(door) if generated_location_name is not None: return generated_location_name return f"{map_part} - {door.name}" def get_generated_door_location_name(self, door: data_pb2.Door) -> str | None: if door.type != data_pb2.DoorType.STANDARD: return None if len(door.keyholders) > 0 or door.white_ending or door.HasField("complete_at"): return None if len(door.panels) > 4: return None map_areas = set() for panel_id in door.panels: panel = self.objects.panels[panel_id.panel] panel_room = self.objects.rooms[panel.room_id] # It's okay if panel_display_name is not present because then it's coalesced with other unnamed areas. map_areas.add(panel_room.panel_display_name) if len(map_areas) > 1: return None game_map = self.objects.maps[door.map_id] map_area = map_areas.pop() if map_area == "": map_part = game_map.display_name else: map_part = f"{game_map.display_name} ({map_area})" def get_panel_display_name(panel: data_pb2.ProxyIdentifier) -> str: panel_data = self.objects.panels[panel.panel] panel_name = panel_data.display_name if panel_data.HasField("display_name") else panel_data.name if panel.HasField("answer"): return f"{panel_name}/{panel.answer.upper()}" else: return panel_name panel_names = [get_panel_display_name(panel_id) for panel_id in door.panels] panel_names.sort() return map_part + " - " + ", ".join(panel_names) def get_door_location_name_by_id(self, door_id: int) -> str: door = self.objects.doors[door_id] return self.get_door_location_name(door) def get_room_region_name(self, room_id: int) -> str: room = self.objects.rooms[room_id] return f"{self.get_map_object_map_name(room)} - {room.name}" def get_map_object_map_name(self, obj) -> str: return self.objects.maps[obj.map_id].display_name def get_room_object_map_name(self, obj) -> str: return self.get_map_object_map_name(self.objects.rooms[obj.room_id]) def get_room_object_location_prefix(self, obj) -> str: room = self.objects.rooms[obj.room_id] game_map = self.objects.maps[room.map_id] if room.HasField("panel_display_name"): return f"{game_map.display_name} ({room.panel_display_name})" else: return game_map.display_name def get_room_object_map_id(self, obj) -> int: return self.objects.rooms[obj.room_id].map_id def get_map_rte_item_name(self, map_id: int) -> str: game_map = self.objects.maps[map_id] return f"Return to {game_map.display_name}" def get_data_version(self) -> list[int]: version = self.objects.version return [version.major, version.minor, version.patch]