about summary refs log tree commit diff stats
path: root/proto
diff options
context:
space:
mode:
Diffstat (limited to 'proto')
-rw-r--r--proto/data.proto108
-rw-r--r--proto/human.proto118
2 files changed, 220 insertions, 6 deletions
diff --git a/proto/data.proto b/proto/data.proto index 93f2227..619b3d3 100644 --- a/proto/data.proto +++ b/proto/data.proto
@@ -27,6 +27,36 @@ enum DoorType {
27 27
28 // This door is an item if gravestone shuffle is enabled, and is a location as long as panelsanity is not on. 28 // This door is an item if gravestone shuffle is enabled, and is a location as long as panelsanity is not on.
29 GRAVESTONE = 6; 29 GRAVESTONE = 6;
30
31 // This door is never a location, and is an item as long as gallery painting shuffle is on.
32 GALLERY_PAINTING = 7;
33}
34
35enum DoorGroupType {
36 DOOR_GROUP_TYPE_UNKNOWN = 0;
37
38 // These doors border a worldport. They should be grouped when connections are
39 // not shuffled.
40 CONNECTOR = 1;
41
42 // Similar to CONNECTOR, but these doors are also ordinarily opened by solving
43 // the COLOR panel in the Control Center. These should be grouped when
44 // connections are not shuffled, but are not items at all when control center
45 // colors are not shuffled.
46 COLOR_CONNECTOR = 2;
47
48 // Groups with this type become an item if cyan door behavior is set to item.
49 CYAN_DOORS = 3;
50
51 // Groups with this type always become an item if door shuffle is on.
52 SHUFFLE_GROUP = 4;
53}
54
55enum MapType {
56 NORMAL_MAP = 0;
57 ICARUS = 1;
58 GIFT_MAP = 2;
59 DEMO = 3;
30} 60}
31 61
32enum AxisDirection { 62enum AxisDirection {
@@ -64,6 +94,24 @@ enum PuzzleSymbol {
64 QUESTION = 19; 94 QUESTION = 19;
65} 95}
66 96
97enum DaedalusOnlyMode {
98 DAED_ONLY_DISALLOW = 0;
99 DAED_ONLY_PARTIAL = 1;
100 DAED_ONLY_ALLOW = 2;
101}
102
103message Vec3d {
104 optional double x = 1;
105 optional double y = 2;
106 optional double z = 3;
107}
108
109message VersionNumber {
110 optional uint64 major = 1;
111 optional uint64 minor = 2;
112 optional uint64 patch = 3;
113}
114
67message ProxyIdentifier { 115message ProxyIdentifier {
68 optional uint64 panel = 1; 116 optional uint64 panel = 1;
69 optional string answer = 2; 117 optional string answer = 2;
@@ -84,6 +132,12 @@ message Connection {
84 uint64 painting = 5; 132 uint64 painting = 5;
85 ProxyIdentifier panel = 6; 133 ProxyIdentifier panel = 6;
86 } 134 }
135
136 optional bool roof_access = 7;
137 optional bool purple_ending = 8;
138 optional bool cyan_ending = 9;
139 optional bool mint_ending = 11;
140 optional bool vanilla_only = 10;
87} 141}
88 142
89message Door { 143message Door {
@@ -100,13 +154,20 @@ message Door {
100 optional uint64 complete_at = 12; 154 optional uint64 complete_at = 12;
101 155
102 optional string control_center_color = 6; 156 optional string control_center_color = 6;
103 repeated string switches = 7;
104 repeated KeyholderAnswer keyholders = 13; 157 repeated KeyholderAnswer keyholders = 13;
105 repeated uint64 rooms = 14; 158 repeated uint64 rooms = 14;
106 repeated uint64 doors = 15; 159 repeated uint64 doors = 15;
107 repeated uint64 endings = 16; 160 optional bool white_ending = 16;
161 optional bool double_letters = 18;
162 repeated string senders = 19;
108 163
109 optional DoorType type = 8; 164 optional DoorType type = 8;
165 optional bool latch = 20;
166 optional bool legacy_location = 21;
167
168 optional string location_name = 17;
169 optional bool daedalus_only_allow = 22;
170 optional bool daedalus_only_always_item = 23;
110} 171}
111 172
112message PanelData { 173message PanelData {
@@ -124,6 +185,10 @@ message PanelData {
124 185
125 optional uint64 required_door = 9; 186 optional uint64 required_door = 9;
126 optional uint64 required_room = 11; 187 optional uint64 required_room = 11;
188
189 optional bool exclude_from_panelsanity = 13;
190
191 optional string display_name = 12;
127} 192}
128 193
129message PaintingData { 194message PaintingData {
@@ -145,22 +210,28 @@ message PaintingData {
145 210
146message Port { 211message Port {
147 optional uint64 id = 1; 212 optional uint64 id = 1;
213 optional uint64 ap_id = 11;
148 optional uint64 room_id = 2; 214 optional uint64 room_id = 2;
149 optional string name = 3; 215 optional string name = 3;
150 216
217 optional string display_name = 10;
151 optional string path = 4; 218 optional string path = 4;
152 optional string orientation = 5; 219 optional Vec3d destination = 5;
220 optional double rotation = 8;
153 optional AxisDirection gravity = 7; 221 optional AxisDirection gravity = 7;
222 optional bool no_shuffle = 9;
154 223
155 optional uint64 required_door = 6; 224 optional uint64 required_door = 6;
156} 225}
157 226
158message KeyholderData { 227message KeyholderData {
159 optional uint64 id = 1; 228 optional uint64 id = 1;
229 optional uint64 ap_id = 6;
160 optional uint64 room_id = 2; 230 optional uint64 room_id = 2;
161 231
162 optional string name = 3; 232 optional string name = 3;
163 optional string path = 4; 233 optional string path = 4;
234 optional string key = 5;
164} 235}
165 236
166message Letter { 237message Letter {
@@ -198,6 +269,8 @@ message Room {
198 optional uint64 map_id = 8; 269 optional uint64 map_id = 8;
199 optional string name = 2; 270 optional string name = 2;
200 optional string display_name = 3; 271 optional string display_name = 3;
272 optional string panel_display_name = 13;
273 optional bool daedalus_only_allow = 14;
201 274
202 repeated uint64 panels = 4; 275 repeated uint64 panels = 4;
203 repeated uint64 paintings = 5; 276 repeated uint64 paintings = 5;
@@ -213,9 +286,36 @@ message Map {
213 optional uint64 id = 1; 286 optional uint64 id = 1;
214 optional string name = 2; 287 optional string name = 2;
215 optional string display_name = 3; 288 optional string display_name = 3;
289 optional DaedalusOnlyMode daedalus_only_mode = 6;
290 optional uint64 worldport_entrance = 4;
291 optional MapType type = 5;
292
293 optional uint64 rte_room = 7;
294 optional uint64 rte_ap_id = 8;
295 optional Vec3d rte_trigger_pos = 9;
296 optional Vec3d rte_trigger_scale = 10;
297}
298
299message Progressive {
300 optional uint64 id = 1;
301 optional string name = 2;
302 optional uint64 ap_id = 3;
303 repeated uint64 doors = 4;
304}
305
306message DoorGroup {
307 optional uint64 id = 1;
308 optional string name = 2;
309 optional uint64 ap_id = 3;
310 optional DoorGroupType type = 4;
311 repeated uint64 doors = 5;
312
313 optional bool daedalus_only_always_item = 6;
216} 314}
217 315
218message AllObjects { 316message AllObjects {
317 optional VersionNumber version = 15;
318
219 repeated Map maps = 7; 319 repeated Map maps = 7;
220 repeated Room rooms = 1; 320 repeated Room rooms = 1;
221 repeated Door doors = 2; 321 repeated Door doors = 2;
@@ -227,5 +327,7 @@ message AllObjects {
227 repeated Mastery masteries = 10; 327 repeated Mastery masteries = 10;
228 repeated Ending endings = 12; 328 repeated Ending endings = 12;
229 repeated Connection connections = 6; 329 repeated Connection connections = 6;
330 repeated Progressive progressives = 13;
331 repeated DoorGroup door_groups = 14;
230 map<string, uint64> special_ids = 8; 332 map<string, uint64> special_ids = 8;
231} 333}
diff --git a/proto/human.proto b/proto/human.proto index 1a15c59..5cd8ce7 100644 --- a/proto/human.proto +++ b/proto/human.proto
@@ -62,6 +62,29 @@ message HumanConnection {
62 62
63 optional bool oneway = 3; 63 optional bool oneway = 3;
64 optional DoorIdentifier door = 4; 64 optional DoorIdentifier door = 4;
65
66 // If true, this connection will only be logically allowed if the Daedalus
67 // Roof Access option is enabled.
68 optional bool roof_access = 7;
69
70 // This means that the connection intentionally skips the target object's
71 // required door.
72 optional bool bypass_target_door = 8;
73
74 // This means that the connection should additionally require all purple
75 // letters when the Strict Purple Ending option is on.
76 optional bool purple_ending = 9;
77
78 // This means that the connection should additionally require all cyan letters
79 // when the Strict Cyan Ending option is on.
80 optional bool cyan_ending = 10;
81
82 // This means that the connection should additionally require being able to
83 // type a specific text string when Custom Mint Ending is on.
84 optional bool mint_ending = 12;
85
86 // This means that the connection only exists when doors are not shuffled.
87 optional bool vanilla_only = 11;
65} 88}
66 89
67message HumanConnections { 90message HumanConnections {
@@ -82,14 +105,32 @@ message HumanDoor {
82 optional uint64 complete_at = 9; 105 optional uint64 complete_at = 9;
83 106
84 optional string control_center_color = 6; 107 optional string control_center_color = 6;
85 repeated string switches = 7;
86 repeated KeyholderIdentifier keyholders = 10; 108 repeated KeyholderIdentifier keyholders = 10;
87 repeated RoomIdentifier rooms = 11; 109 repeated RoomIdentifier rooms = 11;
88 repeated DoorIdentifier doors = 12; 110 repeated DoorIdentifier doors = 12;
89 repeated string endings = 13; 111 optional bool white_ending = 13;
112 optional bool double_letters = 15;
113
114 // Sender nodes to be added to the list of requirements for triggering the
115 // location. Only for senders that have no logic requirements.
116 repeated string senders = 16;
90 117
91 optional DoorType type = 4; 118 optional DoorType type = 4;
92 optional string location_room = 5; 119 optional string location_room = 5;
120 optional string location_name = 14;
121
122 // Non-item doors that are latched will stay open once opened, even if the
123 // opening trigger is deactivated. This applies to EVENT/LOCATION_ONLY doors,
124 // as well as item-locked doors when not shuffling doors.
125 optional bool latch = 17;
126
127 // If true, the client will treat this door like a location, even though no
128 // location is created for it in the generator. This helps provide backwards
129 // compatability with older worlds.
130 optional bool legacy_location = 18;
131
132 optional bool daedalus_only_allow = 19;
133 optional bool daedalus_only_always_item = 20;
93} 134}
94 135
95message HumanDoors { 136message HumanDoors {
@@ -108,6 +149,10 @@ message HumanPanel {
108 149
109 optional DoorIdentifier required_door = 7; 150 optional DoorIdentifier required_door = 7;
110 optional RoomIdentifier required_room = 8; 151 optional RoomIdentifier required_room = 8;
152
153 optional bool exclude_from_panelsanity = 10;
154
155 optional string display_name = 9;
111} 156}
112 157
113message HumanPainting { 158message HumanPainting {
@@ -127,9 +172,16 @@ message HumanPainting {
127 172
128message HumanPort { 173message HumanPort {
129 optional string name = 1; 174 optional string name = 1;
175 optional string display_name = 8;
130 optional string path = 2; 176 optional string path = 2;
131 177
132 optional string orientation = 3; 178 optional bool no_shuffle = 7;
179
180 // These specify how the player should be placed when a randomized entrance
181 // sends them to this port. "rotation" is in degrees and is counter-clockwise
182 // from the positive X axis.
183 optional Vec3d destination = 3;
184 optional double rotation = 6;
133 optional AxisDirection gravity = 5 [default = Y_MINUS]; 185 optional AxisDirection gravity = 5 [default = Y_MINUS];
134 186
135 optional DoorIdentifier required_door = 4; 187 optional DoorIdentifier required_door = 4;
@@ -138,6 +190,13 @@ message HumanPort {
138message HumanKeyholder { 190message HumanKeyholder {
139 optional string name = 1; 191 optional string name = 1;
140 optional string path = 2; 192 optional string path = 2;
193
194 // If this is set, the keyholder will become a location when keyholder shuffle
195 // is enabled. This value specifies the key that is required to clear the
196 // location. It should be the same as the key needed for Green Ending. The
197 // only cases when this shouldn't be set is the two disappearing keyholders in
198 // The Congruent.
199 optional string key = 3;
141} 200}
142 201
143message HumanLetter { 202message HumanLetter {
@@ -161,6 +220,12 @@ message HumanRoom {
161 optional string name = 1; 220 optional string name = 1;
162 optional string display_name = 2; 221 optional string display_name = 2;
163 222
223 // This is used in panelsanity location names and location names for STANDARD
224 // doors generated from panels in the same area.
225 optional string panel_display_name = 10;
226
227 optional bool daedalus_only_allow = 11;
228
164 repeated HumanPanel panels = 3; 229 repeated HumanPanel panels = 3;
165 repeated HumanPainting paintings = 4; 230 repeated HumanPainting paintings = 4;
166 repeated HumanLetter letters = 5; 231 repeated HumanLetter letters = 5;
@@ -172,22 +237,69 @@ message HumanRoom {
172 237
173message HumanMap { 238message HumanMap {
174 optional string display_name = 1; 239 optional string display_name = 1;
240 optional MapType type = 4;
241
242 optional DaedalusOnlyMode daedalus_only_mode = 6;
243
244 optional PortIdentifier worldport_entrance = 3;
245 optional string rte_room = 7;
246 optional Vec3d rte_trigger_pos = 8;
247 optional Vec3d rte_trigger_scale = 9;
248
249 // These two fields are used by the validator and nothing else. excluded_nodes
250 // are objects in the tscn that are intentionally not mentioned in the txtpb.
251 // custom_nodes are the reverse of that; objects that are mentioned in the
252 // txtpb but not present in the tscn. These are generally created dynamically
253 // by the game mod, but may also be used for places where the validator is
254 // just wrong about the contents of the map file.
175 repeated string excluded_nodes = 2; 255 repeated string excluded_nodes = 2;
256 repeated string custom_nodes = 5;
257}
258
259message HumanProgressive {
260 optional string name = 1;
261 repeated DoorIdentifier doors = 2;
262}
263
264message HumanProgressives {
265 repeated HumanProgressive progressives = 1;
266}
267
268message HumanDoorGroup {
269 optional string name = 1;
270 optional DoorGroupType type = 2;
271 repeated DoorIdentifier doors = 3;
272
273 optional bool daedalus_only_always_item = 4;
274}
275
276message HumanDoorGroups {
277 repeated HumanDoorGroup door_groups = 1;
278}
279
280message HumanGlobalMetadata {
281 repeated string special_names = 1;
282 optional VersionNumber version = 2;
176} 283}
177 284
178message IdMappings { 285message IdMappings {
179 message RoomIds { 286 message RoomIds {
180 map<string, uint64> panels = 1; 287 map<string, uint64> panels = 1;
181 map<string, uint64> masteries = 2; 288 map<string, uint64> masteries = 2;
289 map<string, uint64> keyholders = 3;
290 map<string, uint64> ports = 4;
182 } 291 }
183 292
184 message MapIds { 293 message MapIds {
185 map<string, uint64> doors = 1; 294 map<string, uint64> doors = 1;
186 map<string, RoomIds> rooms = 2; 295 map<string, RoomIds> rooms = 2;
296 optional uint64 rte = 3;
187 } 297 }
188 298
189 map<string, MapIds> maps = 1; 299 map<string, MapIds> maps = 1;
190 map<string, uint64> special = 2; 300 map<string, uint64> special = 2;
191 map<string, uint64> letters = 3; 301 map<string, uint64> letters = 3;
192 map<string, uint64> endings = 4; 302 map<string, uint64> endings = 4;
303 map<string, uint64> progressives = 5;
304 map<string, uint64> door_groups = 6;
193} 305}