diff options
25 files changed, 1553 insertions, 144 deletions
diff --git a/data/connections.txtpb b/data/connections.txtpb index 8c25813..ac14ceb 100644 --- a/data/connections.txtpb +++ b/data/connections.txtpb | |||
@@ -4,6 +4,8 @@ | |||
4 | # the_entry/Lime Room/REVITALIZED | 4 | # the_entry/Lime Room/REVITALIZED |
5 | # the_entry/Shop Entrance/SHOP | 5 | # the_entry/Shop Entrance/SHOP |
6 | # the_entry/Link Area/PYRAMID | 6 | # the_entry/Link Area/PYRAMID |
7 | # the_entry/Daedalus Entrance/DAEDALUS | ||
8 | # the_entry/Composite Room Entrance/COMPOSITE | ||
7 | # four_rooms/Examples Room/DAEDALUS | 9 | # four_rooms/Examples Room/DAEDALUS |
8 | # control center -> the_ancient | 10 | # control center -> the_ancient |
9 | # the_bearer/Back Area/TREE | 11 | # the_bearer/Back Area/TREE |
@@ -51,11 +53,11 @@ | |||
51 | # the_partial/Control Center Entrance/CC | 53 | # the_partial/Control Center Entrance/CC |
52 | # the_perceptive/Main Area/CC | 54 | # the_perceptive/Main Area/CC |
53 | # the_plaza/Main Area/UNYIELDING | 55 | # the_plaza/Main Area/UNYIELDING |
54 | # the_plaza/Repetitive Entrance/REPETITIVE | ||
55 | # the_plaza/Symbolic Entrance/SYMBOLIC | 56 | # the_plaza/Symbolic Entrance/SYMBOLIC |
56 | # the_plaza/Sirenic Entrance/SIRENIC | 57 | # the_plaza/Sirenic Entrance/SIRENIC |
57 | # the_quiet/Main Area/DAEDALUS | 58 | # the_quiet/Main Area/DAEDALUS |
58 | # cc -> relentless (don't use port objects) | 59 | # cc -> relentless (don't use port objects) |
60 | # the_repetitive/Main Room/CC | ||
59 | connections { | 61 | connections { |
60 | from { | 62 | from { |
61 | port { | 63 | port { |
@@ -229,7 +231,7 @@ connections { | |||
229 | to { | 231 | to { |
230 | port { | 232 | port { |
231 | map: "the_entry" | 233 | map: "the_entry" |
232 | room: "Starting Room" | 234 | room: "Digital Entrance" |
233 | name: "DIGITAL" | 235 | name: "DIGITAL" |
234 | } | 236 | } |
235 | } | 237 | } |
@@ -245,7 +247,7 @@ connections { | |||
245 | to { | 247 | to { |
246 | port { | 248 | port { |
247 | map: "the_entry" | 249 | map: "the_entry" |
248 | room: "Starting Room" | 250 | room: "Digital Entrance" |
249 | name: "DIGITAL" | 251 | name: "DIGITAL" |
250 | } | 252 | } |
251 | } | 253 | } |
@@ -262,7 +264,7 @@ connections { | |||
262 | to { | 264 | to { |
263 | port { | 265 | port { |
264 | map: "the_entry" | 266 | map: "the_entry" |
265 | room: "Starting Room" | 267 | room: "Digital Entrance" |
266 | name: "DIGITAL" | 268 | name: "DIGITAL" |
267 | } | 269 | } |
268 | } | 270 | } |
@@ -945,3 +947,35 @@ connections { | |||
945 | } | 947 | } |
946 | } | 948 | } |
947 | } | 949 | } |
950 | connections { | ||
951 | from { | ||
952 | port { | ||
953 | map: "the_plaza" | ||
954 | room: "Repetitive Entrance" | ||
955 | name: "REPETITIVE" | ||
956 | } | ||
957 | } | ||
958 | to { | ||
959 | port { | ||
960 | map: "the_repetitive" | ||
961 | room: "Plaza Connector" | ||
962 | name: "PLAZA" | ||
963 | } | ||
964 | } | ||
965 | } | ||
966 | connections { | ||
967 | from { | ||
968 | port { | ||
969 | map: "the_entry" | ||
970 | room: "Repetitive Entrance" | ||
971 | name: "REPETITIVE" | ||
972 | } | ||
973 | } | ||
974 | to { | ||
975 | port { | ||
976 | map: "the_repetitive" | ||
977 | room: "Entry Connector" | ||
978 | name: "ENTRY" | ||
979 | } | ||
980 | } | ||
981 | } | ||
diff --git a/data/ids.txtpb b/data/ids.txtpb index 43ba64b..e4afdba 100644 --- a/data/ids.txtpb +++ b/data/ids.txtpb | |||
@@ -5112,6 +5112,467 @@ maps { | |||
5112 | } | 5112 | } |
5113 | } | 5113 | } |
5114 | } | 5114 | } |
5115 | maps { | ||
5116 | key: "the_repetitive" | ||
5117 | value { | ||
5118 | doors { | ||
5119 | key: "Anti-Collectable Room" | ||
5120 | value: 1031 | ||
5121 | } | ||
5122 | doors { | ||
5123 | key: "Cyan Door" | ||
5124 | value: 1034 | ||
5125 | } | ||
5126 | doors { | ||
5127 | key: "Cyan Puzzles" | ||
5128 | value: 1038 | ||
5129 | } | ||
5130 | doors { | ||
5131 | key: "Dot Area Entrance" | ||
5132 | value: 1032 | ||
5133 | } | ||
5134 | doors { | ||
5135 | key: "Entry Entrance" | ||
5136 | value: 1029 | ||
5137 | } | ||
5138 | doors { | ||
5139 | key: "Lime Door" | ||
5140 | value: 1033 | ||
5141 | } | ||
5142 | doors { | ||
5143 | key: "Lime Puzzles" | ||
5144 | value: 1037 | ||
5145 | } | ||
5146 | doors { | ||
5147 | key: "Magenta Door" | ||
5148 | value: 1035 | ||
5149 | } | ||
5150 | doors { | ||
5151 | key: "Magenta Puzzles" | ||
5152 | value: 1039 | ||
5153 | } | ||
5154 | doors { | ||
5155 | key: "Plaza Entrance" | ||
5156 | value: 1030 | ||
5157 | } | ||
5158 | doors { | ||
5159 | key: "Yellow Door" | ||
5160 | value: 1036 | ||
5161 | } | ||
5162 | doors { | ||
5163 | key: "Yellow Puzzles" | ||
5164 | value: 1040 | ||
5165 | } | ||
5166 | rooms { | ||
5167 | key: "Anti Room" | ||
5168 | value { | ||
5169 | panels { | ||
5170 | key: "EYE" | ||
5171 | value: 1047 | ||
5172 | } | ||
5173 | panels { | ||
5174 | key: "HA (1)" | ||
5175 | value: 1041 | ||
5176 | } | ||
5177 | panels { | ||
5178 | key: "HA (2)" | ||
5179 | value: 1042 | ||
5180 | } | ||
5181 | panels { | ||
5182 | key: "HA (3)" | ||
5183 | value: 1043 | ||
5184 | } | ||
5185 | panels { | ||
5186 | key: "HA (4)" | ||
5187 | value: 1044 | ||
5188 | } | ||
5189 | panels { | ||
5190 | key: "HA (5)" | ||
5191 | value: 1045 | ||
5192 | } | ||
5193 | panels { | ||
5194 | key: "TWO" | ||
5195 | value: 1046 | ||
5196 | } | ||
5197 | } | ||
5198 | } | ||
5199 | rooms { | ||
5200 | key: "Cyan Room" | ||
5201 | value { | ||
5202 | panels { | ||
5203 | key: "ALFA" | ||
5204 | value: 1048 | ||
5205 | } | ||
5206 | panels { | ||
5207 | key: "BACK" | ||
5208 | value: 1049 | ||
5209 | } | ||
5210 | panels { | ||
5211 | key: "BITTER" | ||
5212 | value: 1057 | ||
5213 | } | ||
5214 | panels { | ||
5215 | key: "BLACK" | ||
5216 | value: 1052 | ||
5217 | } | ||
5218 | panels { | ||
5219 | key: "CRIB" | ||
5220 | value: 1051 | ||
5221 | } | ||
5222 | panels { | ||
5223 | key: "GRAPE" | ||
5224 | value: 1056 | ||
5225 | } | ||
5226 | panels { | ||
5227 | key: "ONTO" | ||
5228 | value: 1058 | ||
5229 | } | ||
5230 | panels { | ||
5231 | key: "SEE" | ||
5232 | value: 1053 | ||
5233 | } | ||
5234 | panels { | ||
5235 | key: "SIGHT" | ||
5236 | value: 1054 | ||
5237 | } | ||
5238 | panels { | ||
5239 | key: "TEAM" | ||
5240 | value: 1050 | ||
5241 | } | ||
5242 | panels { | ||
5243 | key: "UPSET" | ||
5244 | value: 1059 | ||
5245 | } | ||
5246 | panels { | ||
5247 | key: "WHIP" | ||
5248 | value: 1055 | ||
5249 | } | ||
5250 | } | ||
5251 | } | ||
5252 | rooms { | ||
5253 | key: "Dot Area" | ||
5254 | value { | ||
5255 | panels { | ||
5256 | key: "DO" | ||
5257 | value: 1072 | ||
5258 | } | ||
5259 | panels { | ||
5260 | key: "DOOR" | ||
5261 | value: 1073 | ||
5262 | } | ||
5263 | panels { | ||
5264 | key: "JOKE" | ||
5265 | value: 1071 | ||
5266 | } | ||
5267 | panels { | ||
5268 | key: "ON (1)" | ||
5269 | value: 1063 | ||
5270 | } | ||
5271 | panels { | ||
5272 | key: "ON (2)" | ||
5273 | value: 1064 | ||
5274 | } | ||
5275 | panels { | ||
5276 | key: "OUT (1)" | ||
5277 | value: 1069 | ||
5278 | } | ||
5279 | panels { | ||
5280 | key: "OUT (2)" | ||
5281 | value: 1070 | ||
5282 | } | ||
5283 | panels { | ||
5284 | key: "PARE (1)" | ||
5285 | value: 1067 | ||
5286 | } | ||
5287 | panels { | ||
5288 | key: "PARE (2)" | ||
5289 | value: 1068 | ||
5290 | } | ||
5291 | panels { | ||
5292 | key: "RED (1)" | ||
5293 | value: 1065 | ||
5294 | } | ||
5295 | panels { | ||
5296 | key: "RED (2)" | ||
5297 | value: 1066 | ||
5298 | } | ||
5299 | panels { | ||
5300 | key: "TO (1)" | ||
5301 | value: 1061 | ||
5302 | } | ||
5303 | panels { | ||
5304 | key: "TO (2)" | ||
5305 | value: 1062 | ||
5306 | } | ||
5307 | panels { | ||
5308 | key: "TUTU (1)" | ||
5309 | value: 1060 | ||
5310 | } | ||
5311 | panels { | ||
5312 | key: "TUTU (2)" | ||
5313 | value: 1074 | ||
5314 | } | ||
5315 | } | ||
5316 | } | ||
5317 | rooms { | ||
5318 | key: "Lime Room" | ||
5319 | value { | ||
5320 | panels { | ||
5321 | key: "BIRD" | ||
5322 | value: 1080 | ||
5323 | } | ||
5324 | panels { | ||
5325 | key: "ELLIPSIS" | ||
5326 | value: 1084 | ||
5327 | } | ||
5328 | panels { | ||
5329 | key: "EQUAL" | ||
5330 | value: 1078 | ||
5331 | } | ||
5332 | panels { | ||
5333 | key: "INJURY" | ||
5334 | value: 1082 | ||
5335 | } | ||
5336 | panels { | ||
5337 | key: "MISTAKE" | ||
5338 | value: 1081 | ||
5339 | } | ||
5340 | panels { | ||
5341 | key: "OH" | ||
5342 | value: 1086 | ||
5343 | } | ||
5344 | panels { | ||
5345 | key: "PIGEON" | ||
5346 | value: 1079 | ||
5347 | } | ||
5348 | panels { | ||
5349 | key: "POMPOM" | ||
5350 | value: 1076 | ||
5351 | } | ||
5352 | panels { | ||
5353 | key: "RAT" | ||
5354 | value: 1075 | ||
5355 | } | ||
5356 | panels { | ||
5357 | key: "SLEEPER" | ||
5358 | value: 1085 | ||
5359 | } | ||
5360 | panels { | ||
5361 | key: "TRAIN" | ||
5362 | value: 1083 | ||
5363 | } | ||
5364 | panels { | ||
5365 | key: "TWENTY" | ||
5366 | value: 1077 | ||
5367 | } | ||
5368 | } | ||
5369 | } | ||
5370 | rooms { | ||
5371 | key: "Magenta Room" | ||
5372 | value { | ||
5373 | panels { | ||
5374 | key: "ANTONYM" | ||
5375 | value: 1096 | ||
5376 | } | ||
5377 | panels { | ||
5378 | key: "CASE" | ||
5379 | value: 1100 | ||
5380 | } | ||
5381 | panels { | ||
5382 | key: "CLAMBERS (1)" | ||
5383 | value: 1093 | ||
5384 | } | ||
5385 | panels { | ||
5386 | key: "CLAMBERS (2)" | ||
5387 | value: 1094 | ||
5388 | } | ||
5389 | panels { | ||
5390 | key: "HALF" | ||
5391 | value: 1090 | ||
5392 | } | ||
5393 | panels { | ||
5394 | key: "HEARD" | ||
5395 | value: 1088 | ||
5396 | } | ||
5397 | panels { | ||
5398 | key: "HERE" | ||
5399 | value: 1089 | ||
5400 | } | ||
5401 | panels { | ||
5402 | key: "NOT (1)" | ||
5403 | value: 1091 | ||
5404 | } | ||
5405 | panels { | ||
5406 | key: "NOT (2)" | ||
5407 | value: 1092 | ||
5408 | } | ||
5409 | panels { | ||
5410 | key: "PANDA" | ||
5411 | value: 1099 | ||
5412 | } | ||
5413 | panels { | ||
5414 | key: "PILFER" | ||
5415 | value: 1095 | ||
5416 | } | ||
5417 | panels { | ||
5418 | key: "PLURAL" | ||
5419 | value: 1098 | ||
5420 | } | ||
5421 | panels { | ||
5422 | key: "RESTORES" | ||
5423 | value: 1102 | ||
5424 | } | ||
5425 | panels { | ||
5426 | key: "RHYME" | ||
5427 | value: 1097 | ||
5428 | } | ||
5429 | panels { | ||
5430 | key: "TEASER" | ||
5431 | value: 1101 | ||
5432 | } | ||
5433 | panels { | ||
5434 | key: "WRITE" | ||
5435 | value: 1087 | ||
5436 | } | ||
5437 | } | ||
5438 | } | ||
5439 | rooms { | ||
5440 | key: "Main Room" | ||
5441 | value { | ||
5442 | panels { | ||
5443 | key: "?" | ||
5444 | value: 1115 | ||
5445 | } | ||
5446 | panels { | ||
5447 | key: "? HAND" | ||
5448 | value: 1117 | ||
5449 | } | ||
5450 | panels { | ||
5451 | key: "? RICHES" | ||
5452 | value: 1119 | ||
5453 | } | ||
5454 | panels { | ||
5455 | key: "HAND" | ||
5456 | value: 1116 | ||
5457 | } | ||
5458 | panels { | ||
5459 | key: "HEIGHT (1)" | ||
5460 | value: 1106 | ||
5461 | } | ||
5462 | panels { | ||
5463 | key: "HEIGHT (2)" | ||
5464 | value: 1105 | ||
5465 | } | ||
5466 | panels { | ||
5467 | key: "HEIGHT (3)" | ||
5468 | value: 1107 | ||
5469 | } | ||
5470 | panels { | ||
5471 | key: "HEIGHT (4)" | ||
5472 | value: 1108 | ||
5473 | } | ||
5474 | panels { | ||
5475 | key: "HEIGHT (5)" | ||
5476 | value: 1109 | ||
5477 | } | ||
5478 | panels { | ||
5479 | key: "HEIGHT (6)" | ||
5480 | value: 1110 | ||
5481 | } | ||
5482 | panels { | ||
5483 | key: "HI" | ||
5484 | value: 1113 | ||
5485 | } | ||
5486 | panels { | ||
5487 | key: "HOTS (1)" | ||
5488 | value: 1104 | ||
5489 | } | ||
5490 | panels { | ||
5491 | key: "HOTS (2)" | ||
5492 | value: 1103 | ||
5493 | } | ||
5494 | panels { | ||
5495 | key: "I" | ||
5496 | value: 1114 | ||
5497 | } | ||
5498 | panels { | ||
5499 | key: "INTUITION" | ||
5500 | value: 1112 | ||
5501 | } | ||
5502 | panels { | ||
5503 | key: "MISHMASH" | ||
5504 | value: 1120 | ||
5505 | } | ||
5506 | panels { | ||
5507 | key: "QUESTION" | ||
5508 | value: 1111 | ||
5509 | } | ||
5510 | panels { | ||
5511 | key: "RICHES" | ||
5512 | value: 1118 | ||
5513 | } | ||
5514 | } | ||
5515 | } | ||
5516 | rooms { | ||
5517 | key: "Mastery Room" | ||
5518 | value { | ||
5519 | masteries { | ||
5520 | key: "MASTERY" | ||
5521 | value: 1122 | ||
5522 | } | ||
5523 | } | ||
5524 | } | ||
5525 | rooms { | ||
5526 | key: "Yellow Room" | ||
5527 | value { | ||
5528 | panels { | ||
5529 | key: "3D" | ||
5530 | value: 1129 | ||
5531 | } | ||
5532 | panels { | ||
5533 | key: "ALABAMA" | ||
5534 | value: 1131 | ||
5535 | } | ||
5536 | panels { | ||
5537 | key: "ASSESSES" | ||
5538 | value: 1132 | ||
5539 | } | ||
5540 | panels { | ||
5541 | key: "DANCE" | ||
5542 | value: 1128 | ||
5543 | } | ||
5544 | panels { | ||
5545 | key: "DURING" | ||
5546 | value: 1126 | ||
5547 | } | ||
5548 | panels { | ||
5549 | key: "HEADED" | ||
5550 | value: 1130 | ||
5551 | } | ||
5552 | panels { | ||
5553 | key: "ONESELF" | ||
5554 | value: 1125 | ||
5555 | } | ||
5556 | panels { | ||
5557 | key: "TINTING" | ||
5558 | value: 1133 | ||
5559 | } | ||
5560 | panels { | ||
5561 | key: "TUMOR" | ||
5562 | value: 1127 | ||
5563 | } | ||
5564 | panels { | ||
5565 | key: "W" | ||
5566 | value: 1123 | ||
5567 | } | ||
5568 | panels { | ||
5569 | key: "ZEROING" | ||
5570 | value: 1124 | ||
5571 | } | ||
5572 | } | ||
5573 | } | ||
5574 | } | ||
5575 | } | ||
5115 | special { | 5576 | special { |
5116 | key: "Nothing" | 5577 | key: "Nothing" |
5117 | value: 975 | 5578 | value: 975 |
@@ -5169,6 +5630,10 @@ letters { | |||
5169 | value: 230 | 5630 | value: 230 |
5170 | } | 5631 | } |
5171 | letters { | 5632 | letters { |
5633 | key: "h2" | ||
5634 | value: 1121 | ||
5635 | } | ||
5636 | letters { | ||
5172 | key: "i1" | 5637 | key: "i1" |
5173 | value: 231 | 5638 | value: 231 |
5174 | } | 5639 | } |
diff --git a/data/maps/the_entry/connections.txtpb b/data/maps/the_entry/connections.txtpb index 5171a76..bec0642 100644 --- a/data/maps/the_entry/connections.txtpb +++ b/data/maps/the_entry/connections.txtpb | |||
@@ -157,4 +157,30 @@ connections { | |||
157 | from_room: "D Room" | 157 | from_room: "D Room" |
158 | to_room: "D Room Final" | 158 | to_room: "D Room Final" |
159 | door { name: "D Room Panels" } | 159 | door { name: "D Room Panels" } |
160 | } \ No newline at end of file | 160 | } |
161 | connections { | ||
162 | from_room: "Starting Room" | ||
163 | to_room: "Digital Entrance" | ||
164 | door { name: "Second Room Left Door" } | ||
165 | oneway: true | ||
166 | } | ||
167 | connections { | ||
168 | from_room: "Digital Entrance" | ||
169 | to_room: "Starting Room" | ||
170 | oneway: true | ||
171 | } | ||
172 | connections { | ||
173 | from_room: "Starting Room" | ||
174 | to_room: "Daedalus Entrance" | ||
175 | door { name: "Daedalus Entrance" } | ||
176 | } | ||
177 | connections { | ||
178 | from_room: "Starting Room" | ||
179 | to_room: "Composite Room Entrance" | ||
180 | door { name: "Composite Room Entrance" } | ||
181 | } | ||
182 | connections { | ||
183 | from_room: "Starting Room" | ||
184 | to_room: "Repetitive Entrance" | ||
185 | door { name: "Repetitive Entrance" } | ||
186 | } | ||
diff --git a/data/maps/the_entry/rooms/Composite Room Entrance.txtpb b/data/maps/the_entry/rooms/Composite Room Entrance.txtpb new file mode 100644 index 0000000..4c18625 --- /dev/null +++ b/data/maps/the_entry/rooms/Composite Room Entrance.txtpb | |||
@@ -0,0 +1,7 @@ | |||
1 | name: "Composite Room Entrance" | ||
2 | display_name: "Starting Room" | ||
3 | ports { | ||
4 | name: "COMPOSITE" | ||
5 | path: "Components/Warps/worldport12" | ||
6 | orientation: "east" | ||
7 | } | ||
diff --git a/data/maps/the_entry/rooms/Daedalus Entrance.txtpb b/data/maps/the_entry/rooms/Daedalus Entrance.txtpb new file mode 100644 index 0000000..60b41cb --- /dev/null +++ b/data/maps/the_entry/rooms/Daedalus Entrance.txtpb | |||
@@ -0,0 +1,7 @@ | |||
1 | name: "Daedalus Entrance" | ||
2 | display_name: "Starting Room" | ||
3 | ports { | ||
4 | name: "DAEDALUS" | ||
5 | path: "Components/Warps/worldport6" | ||
6 | orientation: "west" | ||
7 | } | ||
diff --git a/data/maps/the_entry/rooms/Digital Entrance.txtpb b/data/maps/the_entry/rooms/Digital Entrance.txtpb new file mode 100644 index 0000000..5713a8d --- /dev/null +++ b/data/maps/the_entry/rooms/Digital Entrance.txtpb | |||
@@ -0,0 +1,7 @@ | |||
1 | name: "Digital Entrance" | ||
2 | display_name: "Starting Room" | ||
3 | ports { | ||
4 | name: "DIGITAL" | ||
5 | path: "Components/Warps/worldport" | ||
6 | orientation: "west" | ||
7 | } | ||
diff --git a/data/maps/the_entry/rooms/Repetitive Entrance.txtpb b/data/maps/the_entry/rooms/Repetitive Entrance.txtpb new file mode 100644 index 0000000..982e3f3 --- /dev/null +++ b/data/maps/the_entry/rooms/Repetitive Entrance.txtpb | |||
@@ -0,0 +1,7 @@ | |||
1 | name: "Repetitive Entrance" | ||
2 | display_name: "Starting Room" | ||
3 | ports { | ||
4 | name: "REPETITIVE" | ||
5 | path: "Components/Warps/worldport7" | ||
6 | orientation: "north" | ||
7 | } | ||
diff --git a/data/maps/the_entry/rooms/Starting Room.txtpb b/data/maps/the_entry/rooms/Starting Room.txtpb index 93c9df5..0a7c222 100644 --- a/data/maps/the_entry/rooms/Starting Room.txtpb +++ b/data/maps/the_entry/rooms/Starting Room.txtpb | |||
@@ -77,27 +77,3 @@ paintings { | |||
77 | required_door { name: "Near D Room Painting" } | 77 | required_door { name: "Near D Room Painting" } |
78 | display_name: "Near D Room Painting" | 78 | display_name: "Near D Room Painting" |
79 | } | 79 | } |
80 | ports { | ||
81 | name: "DIGITAL" | ||
82 | path: "Components/Warps/worldport" | ||
83 | orientation: "west" | ||
84 | required_door { name: "Second Room Left Door" } | ||
85 | } | ||
86 | ports { | ||
87 | name: "DAEDALUS" | ||
88 | path: "Components/Warps/worldport6" | ||
89 | orientation: "west" | ||
90 | required_door { name: "Daedalus Entrance" } | ||
91 | } | ||
92 | ports { | ||
93 | name: "REPETITIVE" | ||
94 | path: "Components/Warps/worldport7" | ||
95 | orientation: "north" | ||
96 | required_door { name: "Repetitive Entrance" } | ||
97 | } | ||
98 | ports { | ||
99 | name: "COMPOSITE" | ||
100 | path: "Components/Warps/worldport12" | ||
101 | orientation: "east" | ||
102 | required_door { name: "Composite Room Entrance" } | ||
103 | } | ||
diff --git a/data/maps/the_great/rooms/East Landscape.txtpb b/data/maps/the_great/rooms/East Landscape.txtpb index 56700cc..b436b1e 100644 --- a/data/maps/the_great/rooms/East Landscape.txtpb +++ b/data/maps/the_great/rooms/East Landscape.txtpb | |||
@@ -12,5 +12,5 @@ panels { | |||
12 | path: "Panels/General/entry_13" | 12 | path: "Panels/General/entry_13" |
13 | clue: "mistreat" | 13 | clue: "mistreat" |
14 | answer: "ream" | 14 | answer: "ream" |
15 | symbols: "lingo" | 15 | symbols: "eval" |
16 | } | 16 | } |
diff --git a/data/maps/the_repetitive/connections.txtpb b/data/maps/the_repetitive/connections.txtpb new file mode 100644 index 0000000..2b115a9 --- /dev/null +++ b/data/maps/the_repetitive/connections.txtpb | |||
@@ -0,0 +1,51 @@ | |||
1 | connections { | ||
2 | from_room: "Main Room" | ||
3 | to_room: "Entry Connector" | ||
4 | door { name: "Entry Entrance" } | ||
5 | } | ||
6 | connections { | ||
7 | from_room: "Main Room" | ||
8 | to_room: "Plaza Connector" | ||
9 | door { name: "Plaza Entrance" } | ||
10 | oneway: true | ||
11 | } | ||
12 | connections { | ||
13 | from_room: "Plaza Connector" | ||
14 | to_room: "Main Room" | ||
15 | oneway: true | ||
16 | } | ||
17 | connections { | ||
18 | from_room: "Main Room" | ||
19 | to_room: "Anti Room" | ||
20 | door { name: "Anti-Collectable Room" } | ||
21 | } | ||
22 | connections { | ||
23 | from_room: "Main Room" | ||
24 | to_room: "Dot Area" | ||
25 | door { name: "Dot Area Entrance" } | ||
26 | } | ||
27 | connections { | ||
28 | from_room: "Dot Area" | ||
29 | to_room: "Lime Room" | ||
30 | door { name: "Lime Door" } | ||
31 | } | ||
32 | connections { | ||
33 | from_room: "Dot Area" | ||
34 | to_room: "Cyan Room" | ||
35 | door { name: "Cyan Door" } | ||
36 | } | ||
37 | connections { | ||
38 | from_room: "Dot Area" | ||
39 | to_room: "Magenta Room" | ||
40 | door { name: "Magenta Door" } | ||
41 | } | ||
42 | connections { | ||
43 | from_room: "Dot Area" | ||
44 | to_room: "Yellow Room" | ||
45 | door { name: "Yellow Door" } | ||
46 | } | ||
47 | connections { | ||
48 | from_room: "Dot Area" | ||
49 | to_room: "Mastery Room" | ||
50 | door { name: "Mastery Door" } | ||
51 | } | ||
diff --git a/data/maps/the_repetitive/doors.txtpb b/data/maps/the_repetitive/doors.txtpb new file mode 100644 index 0000000..9e63c1d --- /dev/null +++ b/data/maps/the_repetitive/doors.txtpb | |||
@@ -0,0 +1,196 @@ | |||
1 | doors { | ||
2 | name: "Entry Entrance" | ||
3 | type: STANDARD | ||
4 | receivers: "Components/Doors/Door6" | ||
5 | panels { room: "Main Room" name: "HI" } | ||
6 | location_room: "Main Room" | ||
7 | } | ||
8 | doors { | ||
9 | name: "Plaza Entrance" | ||
10 | type: STANDARD | ||
11 | receivers: "Components/Doors/Door12" | ||
12 | panels { room: "Main Room" name: "I" } | ||
13 | location_room: "Main Room" | ||
14 | } | ||
15 | doors { | ||
16 | name: "Anti-Collectable Room" | ||
17 | type: ITEM_ONLY | ||
18 | receivers: "Components/Doors/Door" | ||
19 | rooms { name: "Main Room" } | ||
20 | } | ||
21 | doors { | ||
22 | name: "Dot Area Entrance" | ||
23 | type: STANDARD | ||
24 | receivers: "Components/Doors/Door8" | ||
25 | panels { room: "Main Room" name: "HOTS (2)" } | ||
26 | location_room: "Main Room" | ||
27 | } | ||
28 | doors { | ||
29 | name: "Lime Door" | ||
30 | type: STANDARD | ||
31 | receivers: "Components/Doors/Door9" | ||
32 | panels { room: "Dot Area" name: "JOKE" } | ||
33 | location_room: "Dot Area" | ||
34 | } | ||
35 | doors { | ||
36 | name: "Cyan Door" | ||
37 | type: STANDARD | ||
38 | receivers: "Components/Doors/Door10" | ||
39 | panels { room: "Dot Area" name: "DO" } | ||
40 | location_room: "Dot Area" | ||
41 | } | ||
42 | doors { | ||
43 | name: "Magenta Door" | ||
44 | type: STANDARD | ||
45 | receivers: "Components/Doors/eval_2" | ||
46 | panels { room: "Dot Area" name: "DOOR" answer: "door" } | ||
47 | location_room: "Dot Area" | ||
48 | } | ||
49 | doors { | ||
50 | name: "Yellow Door" | ||
51 | type: STANDARD | ||
52 | receivers: "Components/Doors/Door11" | ||
53 | panels { room: "Dot Area" name: "TUTU (2)" } | ||
54 | location_room: "Dot Area" | ||
55 | } | ||
56 | doors { | ||
57 | name: "Lime Puzzles" | ||
58 | type: LOCATION_ONLY | ||
59 | panels { room: "Lime Room" name: "RAT" } | ||
60 | panels { room: "Lime Room" name: "POMPOM" } | ||
61 | panels { room: "Lime Room" name: "TWENTY" } | ||
62 | panels { room: "Lime Room" name: "EQUAL" } | ||
63 | panels { room: "Lime Room" name: "PIGEON" } | ||
64 | panels { room: "Lime Room" name: "BIRD" } | ||
65 | panels { room: "Lime Room" name: "MISTAKE" } | ||
66 | panels { room: "Lime Room" name: "INJURY" } | ||
67 | panels { room: "Lime Room" name: "TRAIN" } | ||
68 | panels { room: "Lime Room" name: "ELLIPSIS" } | ||
69 | panels { room: "Lime Room" name: "SLEEPER" } | ||
70 | panels { room: "Lime Room" name: "OH" } | ||
71 | location_room: "Lime Room" | ||
72 | } | ||
73 | doors { | ||
74 | name: "Cyan Puzzles" | ||
75 | type: LOCATION_ONLY | ||
76 | panels { room: "Cyan Room" name: "ALFA" } | ||
77 | panels { room: "Cyan Room" name: "BACK" } | ||
78 | panels { room: "Cyan Room" name: "TEAM" } | ||
79 | panels { room: "Cyan Room" name: "CRIB" } | ||
80 | panels { room: "Cyan Room" name: "BLACK" } | ||
81 | panels { room: "Cyan Room" name: "SEE" } | ||
82 | panels { room: "Cyan Room" name: "SIGHT" } | ||
83 | panels { room: "Cyan Room" name: "WHIP" } | ||
84 | panels { room: "Cyan Room" name: "GRAPE" } | ||
85 | panels { room: "Cyan Room" name: "BITTER" } | ||
86 | panels { room: "Cyan Room" name: "ONTO" } | ||
87 | panels { room: "Cyan Room" name: "UPSET" } | ||
88 | location_room: "Cyan Room" | ||
89 | } | ||
90 | doors { | ||
91 | name: "Magenta Puzzles" | ||
92 | type: LOCATION_ONLY | ||
93 | panels { room: "Magenta Room" name: "WRITE" } | ||
94 | panels { room: "Magenta Room" name: "HEARD" } | ||
95 | panels { room: "Magenta Room" name: "HERE" } | ||
96 | panels { room: "Magenta Room" name: "HALF" } | ||
97 | panels { room: "Magenta Room" name: "NOT (1)" } | ||
98 | panels { room: "Magenta Room" name: "NOT (2)" } | ||
99 | panels { room: "Magenta Room" name: "CLAMBERS (1)" } | ||
100 | panels { room: "Magenta Room" name: "CLAMBERS (2)" } | ||
101 | panels { room: "Magenta Room" name: "PILFER" } | ||
102 | panels { room: "Magenta Room" name: "ANTONYM" } | ||
103 | panels { room: "Magenta Room" name: "RHYME" } | ||
104 | panels { room: "Magenta Room" name: "PLURAL" } | ||
105 | panels { room: "Magenta Room" name: "PANDA" } | ||
106 | panels { room: "Magenta Room" name: "CASE" } | ||
107 | panels { room: "Magenta Room" name: "TEASER" } | ||
108 | panels { room: "Magenta Room" name: "RESTORES" } | ||
109 | location_room: "Magenta Room" | ||
110 | } | ||
111 | doors { | ||
112 | name: "Yellow Puzzles" | ||
113 | type: LOCATION_ONLY | ||
114 | panels { room: "Yellow Room" name: "W" } | ||
115 | panels { room: "Yellow Room" name: "ZEROING" } | ||
116 | panels { room: "Yellow Room" name: "ONESELF" } | ||
117 | panels { room: "Yellow Room" name: "DURING" } | ||
118 | panels { room: "Yellow Room" name: "TUMOR" } | ||
119 | panels { room: "Yellow Room" name: "DANCE" } | ||
120 | panels { room: "Yellow Room" name: "3D" } | ||
121 | panels { room: "Yellow Room" name: "HEADED" } | ||
122 | panels { room: "Yellow Room" name: "ALABAMA" } | ||
123 | panels { room: "Yellow Room" name: "ASSESSES" } | ||
124 | panels { room: "Yellow Room" name: "TINTING" } | ||
125 | location_room: "Yellow Room" | ||
126 | } | ||
127 | doors { | ||
128 | name: "Mastery Door" | ||
129 | type: EVENT | ||
130 | panels { room: "Dot Area" name: "DO" } | ||
131 | panels { room: "Dot Area" name: "DOOR" } | ||
132 | panels { room: "Dot Area" name: "TUTU (1)" } | ||
133 | panels { room: "Dot Area" name: "TUTU (2)" } | ||
134 | panels { room: "Dot Area" name: "TO (1)" } | ||
135 | panels { room: "Dot Area" name: "TO (2)" } | ||
136 | panels { room: "Dot Area" name: "ON (1)" } | ||
137 | panels { room: "Dot Area" name: "ON (2)" } | ||
138 | panels { room: "Dot Area" name: "RED (1)" } | ||
139 | panels { room: "Dot Area" name: "RED (2)" } | ||
140 | panels { room: "Dot Area" name: "PARE (1)" } | ||
141 | panels { room: "Dot Area" name: "PARE (2)" } | ||
142 | panels { room: "Dot Area" name: "OUT (1)" } | ||
143 | panels { room: "Dot Area" name: "OUT (2)" } | ||
144 | panels { room: "Dot Area" name: "JOKE" } | ||
145 | panels { room: "Lime Room" name: "RAT" } | ||
146 | panels { room: "Lime Room" name: "POMPOM" } | ||
147 | panels { room: "Lime Room" name: "TWENTY" } | ||
148 | panels { room: "Lime Room" name: "EQUAL" } | ||
149 | panels { room: "Lime Room" name: "PIGEON" } | ||
150 | panels { room: "Lime Room" name: "BIRD" } | ||
151 | panels { room: "Lime Room" name: "MISTAKE" } | ||
152 | panels { room: "Lime Room" name: "INJURY" } | ||
153 | panels { room: "Lime Room" name: "TRAIN" } | ||
154 | panels { room: "Lime Room" name: "ELLIPSIS" } | ||
155 | panels { room: "Lime Room" name: "SLEEPER" } | ||
156 | panels { room: "Lime Room" name: "OH" } | ||
157 | panels { room: "Cyan Room" name: "ALFA" } | ||
158 | panels { room: "Cyan Room" name: "BACK" } | ||
159 | panels { room: "Cyan Room" name: "TEAM" } | ||
160 | panels { room: "Cyan Room" name: "CRIB" } | ||
161 | panels { room: "Cyan Room" name: "BLACK" } | ||
162 | panels { room: "Cyan Room" name: "SEE" } | ||
163 | panels { room: "Cyan Room" name: "SIGHT" } | ||
164 | panels { room: "Cyan Room" name: "WHIP" } | ||
165 | panels { room: "Cyan Room" name: "GRAPE" } | ||
166 | panels { room: "Cyan Room" name: "BITTER" } | ||
167 | panels { room: "Cyan Room" name: "ONTO" } | ||
168 | panels { room: "Cyan Room" name: "UPSET" } | ||
169 | panels { room: "Magenta Room" name: "WRITE" } | ||
170 | panels { room: "Magenta Room" name: "HEARD" } | ||
171 | panels { room: "Magenta Room" name: "HERE" } | ||
172 | panels { room: "Magenta Room" name: "HALF" } | ||
173 | panels { room: "Magenta Room" name: "NOT (1)" } | ||
174 | panels { room: "Magenta Room" name: "NOT (2)" } | ||
175 | panels { room: "Magenta Room" name: "CLAMBERS (1)" } | ||
176 | panels { room: "Magenta Room" name: "CLAMBERS (2)" } | ||
177 | panels { room: "Magenta Room" name: "PILFER" } | ||
178 | panels { room: "Magenta Room" name: "ANTONYM" } | ||
179 | panels { room: "Magenta Room" name: "RHYME" } | ||
180 | panels { room: "Magenta Room" name: "PLURAL" } | ||
181 | panels { room: "Magenta Room" name: "PANDA" } | ||
182 | panels { room: "Magenta Room" name: "CASE" } | ||
183 | panels { room: "Magenta Room" name: "TEASER" } | ||
184 | panels { room: "Magenta Room" name: "RESTORES" } | ||
185 | panels { room: "Yellow Room" name: "W" } | ||
186 | panels { room: "Yellow Room" name: "ZEROING" } | ||
187 | panels { room: "Yellow Room" name: "ONESELF" } | ||
188 | panels { room: "Yellow Room" name: "DURING" } | ||
189 | panels { room: "Yellow Room" name: "TUMOR" } | ||
190 | panels { room: "Yellow Room" name: "DANCE" } | ||
191 | panels { room: "Yellow Room" name: "3D" } | ||
192 | panels { room: "Yellow Room" name: "HEADED" } | ||
193 | panels { room: "Yellow Room" name: "ALABAMA" } | ||
194 | panels { room: "Yellow Room" name: "ASSESSES" } | ||
195 | panels { room: "Yellow Room" name: "TINTING" } | ||
196 | } | ||
diff --git a/data/maps/the_repetitive/metadata.txtpb b/data/maps/the_repetitive/metadata.txtpb new file mode 100644 index 0000000..ba1da51 --- /dev/null +++ b/data/maps/the_repetitive/metadata.txtpb | |||
@@ -0,0 +1,9 @@ | |||
1 | # The anti-collectable doesn't fit into our system right now so let's ignore it. | ||
2 | excluded_nodes: "Components/Collectables/anticollectable" | ||
3 | # These paintings are directly above/behind panels and thus can't be entered. | ||
4 | excluded_nodes: "Meshes/eyeRed3" | ||
5 | excluded_nodes: "Meshes/eyeRed4" | ||
6 | # I do not know what this is. | ||
7 | excluded_nodes: "Components/Doors/Door3/Hinge/panel_i" | ||
8 | # This has something to do with the magenta room entrance proxy panel. | ||
9 | excluded_nodes: "Panels/Eval/panel_26_proxyied_fake" | ||
diff --git a/data/maps/the_repetitive/rooms/Anti Room.txtpb b/data/maps/the_repetitive/rooms/Anti Room.txtpb new file mode 100644 index 0000000..04b3139 --- /dev/null +++ b/data/maps/the_repetitive/rooms/Anti Room.txtpb | |||
@@ -0,0 +1,47 @@ | |||
1 | name: "Anti Room" | ||
2 | display_name: "Repetitive" | ||
3 | # Ignore the collectible. The mod should remove it and the back wall too. | ||
4 | panels { | ||
5 | name: "HA (1)" | ||
6 | path: "Panels/Entry/panel_7" | ||
7 | clue: "ha" | ||
8 | answer: "haha" | ||
9 | } | ||
10 | panels { | ||
11 | name: "HA (2)" | ||
12 | path: "Panels/Entry/panel_8" | ||
13 | clue: "ha" | ||
14 | answer: "hahaha" | ||
15 | } | ||
16 | panels { | ||
17 | name: "HA (3)" | ||
18 | path: "Panels/Entry/panel_12" | ||
19 | clue: "ha" | ||
20 | answer: "hahahaha" | ||
21 | } | ||
22 | panels { | ||
23 | name: "HA (4)" | ||
24 | path: "Panels/Entry/panel_13" | ||
25 | clue: "ha" | ||
26 | answer: "hahahahaha" | ||
27 | } | ||
28 | panels { | ||
29 | name: "HA (5)" | ||
30 | path: "Panels/Entry/panel_14" | ||
31 | clue: "ha" | ||
32 | answer: "hahahahahaha" | ||
33 | } | ||
34 | panels { | ||
35 | name: "TWO" | ||
36 | path: "Panels/Entry/panel3" | ||
37 | clue: "two" | ||
38 | answer: "digit" | ||
39 | symbols: "example" | ||
40 | } | ||
41 | panels { | ||
42 | name: "EYE" | ||
43 | path: "Panels/Entry/panel4" | ||
44 | clue: "eye" | ||
45 | answer: "iris" | ||
46 | symbols: "boxes" | ||
47 | } | ||
diff --git a/data/maps/the_repetitive/rooms/Cyan Room.txtpb b/data/maps/the_repetitive/rooms/Cyan Room.txtpb new file mode 100644 index 0000000..5c1485d --- /dev/null +++ b/data/maps/the_repetitive/rooms/Cyan Room.txtpb | |||
@@ -0,0 +1,86 @@ | |||
1 | name: "Cyan Room" | ||
2 | display_name: "Repetitive" | ||
3 | panels { | ||
4 | name: "ALFA" | ||
5 | path: "Panels/Lingo2/panel_3" | ||
6 | clue: "alfa" | ||
7 | answer: "alfalfa" | ||
8 | symbols: "sparkles" | ||
9 | } | ||
10 | panels { | ||
11 | name: "BACK" | ||
12 | path: "Panels/Lingo2/panel_6" | ||
13 | clue: "back" | ||
14 | answer: "backpack" | ||
15 | symbols: "sparkles" | ||
16 | } | ||
17 | panels { | ||
18 | name: "TEAM" | ||
19 | path: "Panels/Lingo2/panel_18" | ||
20 | clue: "team" | ||
21 | answer: "teammate" | ||
22 | symbols: "anagram" | ||
23 | } | ||
24 | panels { | ||
25 | name: "CRIB" | ||
26 | path: "Panels/Lingo2/panel_28" | ||
27 | clue: "crib" | ||
28 | answer: "cribbed" | ||
29 | symbols: "example" | ||
30 | } | ||
31 | panels { | ||
32 | name: "BLACK" | ||
33 | path: "Panels/Lingo2/panel_29" | ||
34 | clue: "black" | ||
35 | answer: "blackjack" | ||
36 | symbols: "zero" | ||
37 | } | ||
38 | panels { | ||
39 | name: "SEE" | ||
40 | path: "Panels/Lingo2/panel_19" | ||
41 | clue: "see" | ||
42 | answer: "seesaw" | ||
43 | symbols: "age" | ||
44 | } | ||
45 | panels { | ||
46 | name: "SIGHT" | ||
47 | path: "Panels/Lingo2/panel_20" | ||
48 | clue: "sight" | ||
49 | answer: "sightsee" | ||
50 | symbols: "sun" | ||
51 | } | ||
52 | panels { | ||
53 | name: "WHIP" | ||
54 | path: "Panels/Lingo2/panel_21" | ||
55 | clue: "whip" | ||
56 | answer: "whiplash" | ||
57 | symbols: "sun" | ||
58 | } | ||
59 | panels { | ||
60 | name: "GRAPE" | ||
61 | path: "Panels/Lingo2/panel_22" | ||
62 | clue: "grape" | ||
63 | answer: "grapefruit" | ||
64 | symbols: "example" | ||
65 | } | ||
66 | panels { | ||
67 | name: "BITTER" | ||
68 | path: "Panels/Lingo2/panel_23" | ||
69 | clue: "bitter" | ||
70 | answer: "bittersweet" | ||
71 | symbols: "sweet" | ||
72 | } | ||
73 | panels { | ||
74 | name: "ONTO" | ||
75 | path: "Panels/Lingo2/panel_24" | ||
76 | clue: "onto" | ||
77 | answer: "toon" | ||
78 | symbols: "sparkles" | ||
79 | } | ||
80 | panels { | ||
81 | name: "UPSET" | ||
82 | path: "Panels/Lingo2/panel_25" | ||
83 | clue: "upset" | ||
84 | answer: "setup" | ||
85 | symbols: "sparkles" | ||
86 | } | ||
diff --git a/data/maps/the_repetitive/rooms/Dot Area.txtpb b/data/maps/the_repetitive/rooms/Dot Area.txtpb new file mode 100644 index 0000000..ac77bce --- /dev/null +++ b/data/maps/the_repetitive/rooms/Dot Area.txtpb | |||
@@ -0,0 +1,109 @@ | |||
1 | name: "Dot Area" | ||
2 | display_name: "Repetitive" | ||
3 | panels { | ||
4 | name: "TUTU (1)" | ||
5 | path: "Panels/Lingo2/panel" | ||
6 | clue: "tutu" | ||
7 | answer: "two" | ||
8 | symbols: "zero" | ||
9 | } | ||
10 | panels { | ||
11 | name: "TO (1)" | ||
12 | path: "Panels/Lingo2/panel1" | ||
13 | clue: "to" | ||
14 | answer: "tutu" | ||
15 | symbols: "zero" | ||
16 | } | ||
17 | panels { | ||
18 | name: "TO (2)" | ||
19 | path: "Panels/Lingo2/panel2" | ||
20 | clue: "to" | ||
21 | answer: "toot" | ||
22 | } | ||
23 | panels { | ||
24 | name: "ON (1)" | ||
25 | path: "Panels/Lingo2/panel3" | ||
26 | clue: "on" | ||
27 | answer: "noon" | ||
28 | } | ||
29 | panels { | ||
30 | name: "ON (2)" | ||
31 | path: "Panels/Lingo2/panel4" | ||
32 | clue: "on" | ||
33 | answer: "onion" | ||
34 | symbols: "sparkles" | ||
35 | } | ||
36 | panels { | ||
37 | name: "RED (1)" | ||
38 | path: "Panels/Lingo2/panel7" | ||
39 | clue: "red" | ||
40 | answer: "redder" | ||
41 | } | ||
42 | panels { | ||
43 | name: "RED (2)" | ||
44 | path: "Panels/Lingo2/panel8" | ||
45 | clue: "red" | ||
46 | answer: "colored" | ||
47 | symbols: "sparkles" | ||
48 | symbols: "example" | ||
49 | } | ||
50 | panels { | ||
51 | name: "PARE (1)" | ||
52 | path: "Panels/Lingo2/panel9" | ||
53 | clue: "pare" | ||
54 | answer: "prepare" | ||
55 | symbols: "sparkles" | ||
56 | } | ||
57 | panels { | ||
58 | name: "PARE (2)" | ||
59 | path: "Panels/Lingo2/panel10" | ||
60 | clue: "pare" | ||
61 | answer: "reappear" | ||
62 | symbols: "zero" | ||
63 | symbols: "anagram" | ||
64 | } | ||
65 | panels { | ||
66 | name: "OUT (1)" | ||
67 | path: "Panels/Lingo2/panel5" | ||
68 | clue: "out" | ||
69 | answer: "output" | ||
70 | symbols: "sparkles" | ||
71 | } | ||
72 | panels { | ||
73 | name: "OUT (2)" | ||
74 | path: "Panels/Lingo2/panel6" | ||
75 | clue: "out" | ||
76 | answer: "cutout" | ||
77 | symbols: "sparkles" | ||
78 | } | ||
79 | panels { | ||
80 | name: "JOKE" | ||
81 | path: "Panels/Lingo2/panel_9" | ||
82 | clue: "joke" | ||
83 | answer: "knock" | ||
84 | symbols: "example" | ||
85 | } | ||
86 | panels { | ||
87 | name: "DO" | ||
88 | path: "Panels/Lingo2/panel_27" | ||
89 | clue: "do" | ||
90 | answer: "door" | ||
91 | symbols: "sparkles" | ||
92 | } | ||
93 | panels { | ||
94 | name: "DOOR" | ||
95 | path: "Panels/Eval/panel_26_proxying" | ||
96 | clue: "door" | ||
97 | answer: "door" | ||
98 | symbols: "eval" | ||
99 | #proxies { answer: "door" path: "Panels/Eval/panel_26_proxyied_1" } | ||
100 | proxies { answer: "do" path: "Panels/Eval/panel_26_proxyied_2" } | ||
101 | } | ||
102 | panels { | ||
103 | name: "TUTU (2)" | ||
104 | path: "Panels/Eval/panel_6" | ||
105 | clue: "tutu" | ||
106 | answer: "tutu" | ||
107 | symbols: "zero" | ||
108 | symbols: "eval" | ||
109 | } | ||
diff --git a/data/maps/the_repetitive/rooms/Entry Connector.txtpb b/data/maps/the_repetitive/rooms/Entry Connector.txtpb new file mode 100644 index 0000000..8addc7f --- /dev/null +++ b/data/maps/the_repetitive/rooms/Entry Connector.txtpb | |||
@@ -0,0 +1,7 @@ | |||
1 | name: "Entry Connector" | ||
2 | display_name: "Repetitive" | ||
3 | ports { | ||
4 | name: "ENTRY" | ||
5 | path: "Components/Warps/worldport2" | ||
6 | orientation: "south" | ||
7 | } | ||
diff --git a/data/maps/the_repetitive/rooms/Lime Room.txtpb b/data/maps/the_repetitive/rooms/Lime Room.txtpb new file mode 100644 index 0000000..0511447 --- /dev/null +++ b/data/maps/the_repetitive/rooms/Lime Room.txtpb | |||
@@ -0,0 +1,87 @@ | |||
1 | name: "Lime Room" | ||
2 | display_name: "Repetitive" | ||
3 | panels { | ||
4 | name: "RAT" | ||
5 | path: "Panels/Lingo2/panel_1" | ||
6 | clue: "rat" | ||
7 | answer: "tartar" | ||
8 | } | ||
9 | panels { | ||
10 | name: "POMPOM" | ||
11 | path: "Panels/Lingo2/panel_2" | ||
12 | clue: "pompom" | ||
13 | answer: "mop" | ||
14 | } | ||
15 | panels { | ||
16 | name: "TWENTY" | ||
17 | path: "Panels/Lingo2/panel_7" | ||
18 | clue: "twenty" | ||
19 | answer: "blind" | ||
20 | symbols: "sun" | ||
21 | } | ||
22 | panels { | ||
23 | name: "EQUAL" | ||
24 | path: "Panels/Lingo2/panel_8" | ||
25 | clue: "equal" | ||
26 | answer: "fifty" | ||
27 | symbols: "sun" | ||
28 | } | ||
29 | panels { | ||
30 | name: "PIGEON" | ||
31 | path: "Panels/Lingo2/panel_10" | ||
32 | clue: "pigeon" | ||
33 | answer: "cuckoo" | ||
34 | symbols: "zero" | ||
35 | symbols: "sound" | ||
36 | } | ||
37 | panels { | ||
38 | name: "BIRD" | ||
39 | path: "Panels/Lingo2/panel_11" | ||
40 | clue: "bird" | ||
41 | answer: "do" | ||
42 | symbols: "example" | ||
43 | } | ||
44 | panels { | ||
45 | name: "MISTAKE" | ||
46 | path: "Panels/Lingo2/panel_12" | ||
47 | clue: "mistake" | ||
48 | answer: "ghost" | ||
49 | symbols: "sun" | ||
50 | symbols: "sound" | ||
51 | } | ||
52 | panels { | ||
53 | name: "INJURY" | ||
54 | path: "Panels/Lingo2/panel_26" | ||
55 | clue: "injury" | ||
56 | answer: "boo" | ||
57 | symbols: "pyramid" | ||
58 | } | ||
59 | panels { | ||
60 | name: "TRAIN" | ||
61 | path: "Panels/Lingo2/panel_13" | ||
62 | clue: "train" | ||
63 | answer: "chew" | ||
64 | symbols: "zero" | ||
65 | symbols: "sound" | ||
66 | } | ||
67 | panels { | ||
68 | name: "ELLIPSIS" | ||
69 | path: "Panels/Lingo2/panel_14" | ||
70 | clue: "ellipsis" | ||
71 | answer: "dot" | ||
72 | symbols: "sun" | ||
73 | } | ||
74 | panels { | ||
75 | name: "SLEEPER" | ||
76 | path: "Panels/Lingo2/panel_15" | ||
77 | clue: "sleeper" | ||
78 | answer: "z" | ||
79 | symbols: "sound" | ||
80 | } | ||
81 | panels { | ||
82 | name: "OH" | ||
83 | path: "Panels/Lingo2/panel_16" | ||
84 | clue: "oh" | ||
85 | answer: "santa" | ||
86 | symbols: "sound" | ||
87 | } | ||
diff --git a/data/maps/the_repetitive/rooms/Magenta Room.txtpb b/data/maps/the_repetitive/rooms/Magenta Room.txtpb new file mode 100644 index 0000000..9bfd41f --- /dev/null +++ b/data/maps/the_repetitive/rooms/Magenta Room.txtpb | |||
@@ -0,0 +1,114 @@ | |||
1 | name: "Magenta Room" | ||
2 | display_name: "Repetitive" | ||
3 | panels { | ||
4 | name: "WRITE" | ||
5 | path: "Panels/Eval/panel_9" | ||
6 | clue: "write" | ||
7 | answer: "write" | ||
8 | symbols: "eval" | ||
9 | } | ||
10 | panels { | ||
11 | name: "HEARD" | ||
12 | path: "Panels/Eval/panel_11" | ||
13 | clue: "heard" | ||
14 | answer: "herd" | ||
15 | symbols: "eval" | ||
16 | } | ||
17 | panels { | ||
18 | name: "HERE" | ||
19 | path: "Panels/Eval/panel_12" | ||
20 | clue: "here" | ||
21 | answer: "hear" | ||
22 | symbols: "eval" | ||
23 | } | ||
24 | panels { | ||
25 | name: "HALF" | ||
26 | path: "Panels/Eval/panel_13" | ||
27 | clue: "half" | ||
28 | answer: "haha" | ||
29 | symbols: "eval" | ||
30 | } | ||
31 | panels { | ||
32 | name: "NOT (1)" | ||
33 | path: "Panels/Eval/panel_14" | ||
34 | clue: "not" | ||
35 | answer: "no" | ||
36 | symbols: "eval" | ||
37 | } | ||
38 | panels { | ||
39 | name: "NOT (2)" | ||
40 | path: "Panels/Eval/panel_15" | ||
41 | clue: "not" | ||
42 | answer: "yes" | ||
43 | symbols: "eval" | ||
44 | } | ||
45 | panels { | ||
46 | name: "CLAMBERS (1)" | ||
47 | path: "Panels/Eval/panel_16" | ||
48 | clue: "clambers" | ||
49 | answer: "scramble" | ||
50 | symbols: "eval" | ||
51 | } | ||
52 | panels { | ||
53 | name: "CLAMBERS (2)" | ||
54 | path: "Panels/Eval/panel_17" | ||
55 | clue: "clambers" | ||
56 | answer: "scramble" | ||
57 | symbols: "anagram" | ||
58 | } | ||
59 | panels { | ||
60 | name: "PILFER" | ||
61 | path: "Panels/Eval/panel_18" | ||
62 | clue: "pilfer" | ||
63 | answer: "pilfer" | ||
64 | symbols: "eval" | ||
65 | } | ||
66 | panels { | ||
67 | name: "ANTONYM" | ||
68 | path: "Panels/Eval/panel_19" | ||
69 | clue: "antonym" | ||
70 | answer: "synonym" | ||
71 | symbols: "eval" | ||
72 | } | ||
73 | panels { | ||
74 | name: "RHYME" | ||
75 | path: "Panels/Eval/panel_20" | ||
76 | clue: "rhyme" | ||
77 | answer: "time" | ||
78 | symbols: "eval" | ||
79 | } | ||
80 | panels { | ||
81 | name: "PLURAL" | ||
82 | path: "Panels/Eval/panel_21" | ||
83 | clue: "plural" | ||
84 | answer: "plurals" | ||
85 | symbols: "eval" | ||
86 | } | ||
87 | panels { | ||
88 | name: "PANDA" | ||
89 | path: "Panels/Eval/panel_22" | ||
90 | clue: "panda" | ||
91 | answer: "papa" | ||
92 | symbols: "eval" | ||
93 | } | ||
94 | panels { | ||
95 | name: "CASE" | ||
96 | path: "Panels/Eval/panel_23" | ||
97 | clue: "case" | ||
98 | answer: "ease" | ||
99 | symbols: "eval" | ||
100 | } | ||
101 | panels { | ||
102 | name: "TEASER" | ||
103 | path: "Panels/Eval/panel_24" | ||
104 | clue: "teaser" | ||
105 | answer: "eraser" | ||
106 | symbols: "eval" | ||
107 | } | ||
108 | panels { | ||
109 | name: "RESTORES" | ||
110 | path: "Panels/Eval/panel_25" | ||
111 | clue: "restores" | ||
112 | answer: "restores" | ||
113 | symbols: "eval" | ||
114 | } | ||
diff --git a/data/maps/the_repetitive/rooms/Main Room.txtpb b/data/maps/the_repetitive/rooms/Main Room.txtpb new file mode 100644 index 0000000..a6fb747 --- /dev/null +++ b/data/maps/the_repetitive/rooms/Main Room.txtpb | |||
@@ -0,0 +1,144 @@ | |||
1 | name: "Main Room" | ||
2 | display_name: "Repetitive" | ||
3 | panels { | ||
4 | name: "HOTS (2)" | ||
5 | path: "Panels/Entry/panel_3" | ||
6 | clue: "hots" | ||
7 | answer: "hotshots" | ||
8 | } | ||
9 | panels { | ||
10 | name: "HOTS (1)" | ||
11 | path: "Panels/Entry/panel_6" | ||
12 | clue: "hots" | ||
13 | answer: "hots" | ||
14 | } | ||
15 | panels { | ||
16 | name: "HEIGHT (2)" | ||
17 | path: "Panels/Entry/panel_4" | ||
18 | clue: "height" | ||
19 | answer: "eight" | ||
20 | symbols: "sparkles" | ||
21 | } | ||
22 | panels { | ||
23 | name: "HEIGHT (1)" | ||
24 | path: "Panels/Entry/panel_15" | ||
25 | clue: "height" | ||
26 | answer: "height" | ||
27 | } | ||
28 | panels { | ||
29 | name: "HEIGHT (3)" | ||
30 | path: "Panels/Entry/panel_5" | ||
31 | clue: "height" | ||
32 | answer: "high" | ||
33 | symbols: "sparkles" | ||
34 | } | ||
35 | panels { | ||
36 | name: "HEIGHT (4)" | ||
37 | path: "Panels/Entry/panel_9" | ||
38 | clue: "height" | ||
39 | answer: "hit" | ||
40 | symbols: "sparkles" | ||
41 | } | ||
42 | panels { | ||
43 | name: "HEIGHT (5)" | ||
44 | path: "Panels/Entry/panel_10" | ||
45 | clue: "height" | ||
46 | answer: "hi" | ||
47 | symbols: "sparkles" | ||
48 | } | ||
49 | panels { | ||
50 | name: "HEIGHT (6)" | ||
51 | path: "Panels/Entry/panel_11" | ||
52 | clue: "height" | ||
53 | answer: "i" | ||
54 | symbols: "sparkles" | ||
55 | } | ||
56 | panels { | ||
57 | name: "QUESTION" | ||
58 | path: "Panels/Entry/panel" | ||
59 | clue: "question" | ||
60 | answer: "which" | ||
61 | symbols: "example" | ||
62 | } | ||
63 | panels { | ||
64 | name: "INTUITION" | ||
65 | path: "Panels/Entry/panel2" | ||
66 | clue: "intuition" | ||
67 | answer: "hunch" | ||
68 | symbols: "sun" | ||
69 | } | ||
70 | panels { | ||
71 | name: "HI" | ||
72 | path: "Panels/Entry/panel5" | ||
73 | clue: "hi" | ||
74 | answer: "high" | ||
75 | symbols: "zero" | ||
76 | } | ||
77 | panels { | ||
78 | name: "I" | ||
79 | path: "Panels/Entry/panel6" | ||
80 | clue: "i" | ||
81 | answer: "eye" | ||
82 | symbols: "zero" | ||
83 | } | ||
84 | panels { | ||
85 | name: "?" | ||
86 | path: "Panels/Entry/panel_16" | ||
87 | clue: "" | ||
88 | answer: "wish" | ||
89 | symbols: "question" | ||
90 | } | ||
91 | panels { | ||
92 | name: "HAND" | ||
93 | path: "Panels/Entry/panel_17" | ||
94 | clue: "hand" | ||
95 | answer: "harm" | ||
96 | symbols: "boxes" | ||
97 | symbols: "eval" | ||
98 | } | ||
99 | panels { | ||
100 | name: "? HAND" | ||
101 | path: "Panels/Entry/panel_18" | ||
102 | clue: "" | ||
103 | answer: "warm" | ||
104 | symbols: "lingo" | ||
105 | symbols: "eval" | ||
106 | } | ||
107 | panels { | ||
108 | name: "RICHES" | ||
109 | path: "Panels/Entry/panel_19" | ||
110 | clue: "riches" | ||
111 | answer: "wealth" | ||
112 | symbols: "sun" | ||
113 | } | ||
114 | panels { | ||
115 | name: "? RICHES" | ||
116 | path: "Panels/Entry/panel_20" | ||
117 | clue: "" | ||
118 | answer: "health" | ||
119 | symbols: "lingo" | ||
120 | symbols: "eval" | ||
121 | } | ||
122 | panels { | ||
123 | name: "MISHMASH" | ||
124 | path: "Panels/Entry/panel_21" | ||
125 | clue: "mishmash" | ||
126 | answer: "hash" | ||
127 | symbols: "eval" | ||
128 | } | ||
129 | letters { | ||
130 | key: "h" | ||
131 | level2: true | ||
132 | path: "Components/Collectables/collectable" | ||
133 | } | ||
134 | paintings { | ||
135 | name: "EYERED2" | ||
136 | path: "Meshes/eyeRed2" | ||
137 | orientation: "east" | ||
138 | exit_only: true | ||
139 | } | ||
140 | ports { | ||
141 | name: "CC" | ||
142 | path: "Components/Warps/worldport3" | ||
143 | orientation: "east" | ||
144 | } | ||
diff --git a/data/maps/the_repetitive/rooms/Mastery Room.txtpb b/data/maps/the_repetitive/rooms/Mastery Room.txtpb new file mode 100644 index 0000000..074a825 --- /dev/null +++ b/data/maps/the_repetitive/rooms/Mastery Room.txtpb | |||
@@ -0,0 +1,6 @@ | |||
1 | name: "Mastery Room" | ||
2 | display_name: "Repetitive" | ||
3 | masteries { | ||
4 | name: "MASTERY" | ||
5 | path: "Components/Collectables/smiley" | ||
6 | } | ||
diff --git a/data/maps/the_repetitive/rooms/Plaza Connector.txtpb b/data/maps/the_repetitive/rooms/Plaza Connector.txtpb new file mode 100644 index 0000000..88f7fc4 --- /dev/null +++ b/data/maps/the_repetitive/rooms/Plaza Connector.txtpb | |||
@@ -0,0 +1,7 @@ | |||
1 | name: "Plaza Connector" | ||
2 | display_name: "Repetitive" | ||
3 | ports { | ||
4 | name: "PLAZA" | ||
5 | path: "Components/Warps/worldport" | ||
6 | orientation: "north" | ||
7 | } | ||
diff --git a/data/maps/the_repetitive/rooms/Yellow Room.txtpb b/data/maps/the_repetitive/rooms/Yellow Room.txtpb new file mode 100644 index 0000000..4260996 --- /dev/null +++ b/data/maps/the_repetitive/rooms/Yellow Room.txtpb | |||
@@ -0,0 +1,91 @@ | |||
1 | name: "Yellow Room" | ||
2 | display_name: "Repetitive" | ||
3 | panels { | ||
4 | name: "W" | ||
5 | path: "Panels/Eval/panel_1" | ||
6 | clue: "W" | ||
7 | answer: "meme" | ||
8 | symbols: "sun" | ||
9 | symbols: "zero" | ||
10 | symbols: "eval" | ||
11 | } | ||
12 | panels { | ||
13 | name: "ZEROING" | ||
14 | path: "Panels/Eval/panel_2" | ||
15 | clue: "zeroing" | ||
16 | answer: "" | ||
17 | symbols: "eval" | ||
18 | } | ||
19 | panels { | ||
20 | name: "ONESELF" | ||
21 | path: "Panels/Eval/panel_3" | ||
22 | clue: "oneself" | ||
23 | answer: "self" | ||
24 | symbols: "eval" | ||
25 | } | ||
26 | panels { | ||
27 | name: "DURING" | ||
28 | path: "Panels/Eval/panel_4" | ||
29 | clue: "during" | ||
30 | answer: "wondering" | ||
31 | symbols: "zero" | ||
32 | symbols: "eval" | ||
33 | } | ||
34 | panels { | ||
35 | name: "TUMOR" | ||
36 | path: "Panels/Eval/panel_5" | ||
37 | clue: "tumor" | ||
38 | answer: "murmur" | ||
39 | symbols: "zero" | ||
40 | symbols: "eval" | ||
41 | } | ||
42 | panels { | ||
43 | name: "DANCE" | ||
44 | path: "Panels/Eval/panel_7" | ||
45 | clue: "dance" | ||
46 | answer: "toucan" | ||
47 | symbols: "zero" | ||
48 | symbols: "example" | ||
49 | symbols: "eval" | ||
50 | } | ||
51 | panels { | ||
52 | name: "3D" | ||
53 | path: "Panels/Eval/panel_26" | ||
54 | clue: "3d" | ||
55 | answer: "added" | ||
56 | symbols: "sparkles" | ||
57 | symbols: "eval" | ||
58 | } | ||
59 | panels { | ||
60 | name: "HEADED" | ||
61 | path: "Panels/Eval/panel_29" | ||
62 | clue: "headed" | ||
63 | answer: "heeded" | ||
64 | symbols: "sparkles" | ||
65 | symbols: "eval" | ||
66 | } | ||
67 | panels { | ||
68 | name: "ALABAMA" | ||
69 | path: "Panels/Eval/panel_27" | ||
70 | clue: "alabama" | ||
71 | answer: "foray" | ||
72 | symbols: "sparkles" | ||
73 | symbols: "zero" | ||
74 | symbols: "eval" | ||
75 | } | ||
76 | panels { | ||
77 | name: "ASSESSES" | ||
78 | path: "Panels/Eval/panel_28" | ||
79 | clue: "assesses" | ||
80 | answer: "fives" | ||
81 | symbols: "sparkles" | ||
82 | symbols: "eval" | ||
83 | } | ||
84 | panels { | ||
85 | name: "TINTING" | ||
86 | path: "Panels/Eval/panel_8" | ||
87 | clue: "tinting" | ||
88 | answer: "can" | ||
89 | symbols: "sun" | ||
90 | symbols: "sparkles" | ||
91 | } | ||
diff --git a/tools/util/godot_scene.cpp b/tools/util/godot_scene.cpp index 272111d..1e77c9e 100644 --- a/tools/util/godot_scene.cpp +++ b/tools/util/godot_scene.cpp | |||
@@ -1,6 +1,7 @@ | |||
1 | #include "godot_scene.h" | 1 | #include "godot_scene.h" |
2 | 2 | ||
3 | #include <absl/strings/str_split.h> | 3 | #include <absl/strings/str_split.h> |
4 | #include <absl/strings/string_view.h> | ||
4 | 5 | ||
5 | #include <fstream> | 6 | #include <fstream> |
6 | #include <sstream> | 7 | #include <sstream> |
@@ -10,32 +11,6 @@ namespace com::fourisland::lingo2_archipelago { | |||
10 | 11 | ||
11 | namespace { | 12 | namespace { |
12 | 13 | ||
13 | class GodotSceneImpl : public GodotScene { | ||
14 | public: | ||
15 | GodotSceneImpl(std::map<std::string, GodotExtResource> ext_resources, | ||
16 | std::unique_ptr<GodotNode> root, | ||
17 | std::vector<std::unique_ptr<GodotNode>> descendents) | ||
18 | : ext_resources_(std::move(ext_resources)), | ||
19 | root_(std::move(root)), | ||
20 | descendents_(std::move(descendents)) {} | ||
21 | |||
22 | virtual const GodotExtResource* GetExtResource(const std::string& id) const { | ||
23 | auto it = ext_resources_.find(id); | ||
24 | if (it != ext_resources_.end()) { | ||
25 | return &it->second; | ||
26 | } else { | ||
27 | return nullptr; | ||
28 | } | ||
29 | } | ||
30 | |||
31 | virtual const GodotNode& GetRoot() const { return *root_; } | ||
32 | |||
33 | private: | ||
34 | std::map<std::string, GodotExtResource> ext_resources_; | ||
35 | std::unique_ptr<GodotNode> root_; | ||
36 | std::vector<std::unique_ptr<GodotNode>> descendents_; | ||
37 | }; | ||
38 | |||
39 | struct Heading { | 14 | struct Heading { |
40 | std::string type; | 15 | std::string type; |
41 | 16 | ||
@@ -159,45 +134,17 @@ Heading ParseTscnHeading(absl::string_view line) { | |||
159 | 134 | ||
160 | } // namespace | 135 | } // namespace |
161 | 136 | ||
162 | void GodotNode::AddChild(GodotNode& child) { | ||
163 | children_[child.GetName()] = &child; | ||
164 | child.parent_ = this; | ||
165 | } | ||
166 | |||
167 | std::string GodotNode::GetPath() const { | 137 | std::string GodotNode::GetPath() const { |
168 | if (parent_ == nullptr || parent_->GetName() == "") { | 138 | if (parent.empty() || parent == ".") { |
169 | return name_; | 139 | return name; |
170 | } else { | 140 | } else { |
171 | return parent_->GetPath() + "/" + name_; | 141 | return parent + "/" + name; |
172 | } | 142 | } |
173 | } | 143 | } |
174 | 144 | ||
175 | const GodotNode* GodotNode::GetNode(absl::string_view path) const { | 145 | GodotScene ReadGodotSceneFromFile(const std::string& path) { |
176 | std::vector<std::string> names = absl::StrSplit(path, "/"); | ||
177 | |||
178 | auto it = children_.find(names[0]); | ||
179 | if (it == children_.end()) { | ||
180 | return nullptr; | ||
181 | } else { | ||
182 | if (names.size() == 1) { | ||
183 | return it->second; | ||
184 | } else { | ||
185 | path.remove_prefix(names[0].size() + 1); | ||
186 | |||
187 | return it->second->GetNode(path); | ||
188 | } | ||
189 | } | ||
190 | } | ||
191 | |||
192 | GodotNode* GodotNode::GetNode(absl::string_view path) { | ||
193 | return const_cast<GodotNode*>( | ||
194 | const_cast<const GodotNode*>(this)->GetNode(path)); | ||
195 | } | ||
196 | |||
197 | std::unique_ptr<GodotScene> ReadGodotSceneFromFile(const std::string& path) { | ||
198 | std::map<std::string, GodotExtResource> ext_resources; | 146 | std::map<std::string, GodotExtResource> ext_resources; |
199 | auto root = std::make_unique<GodotNode>("", GodotInstanceType{}); | 147 | std::vector<GodotNode> nodes; |
200 | std::vector<std::unique_ptr<GodotNode>> descendents; | ||
201 | 148 | ||
202 | std::ifstream input(path); | 149 | std::ifstream input(path); |
203 | 150 | ||
@@ -235,15 +182,9 @@ std::unique_ptr<GodotScene> ReadGodotSceneFromFile(const std::string& path) { | |||
235 | ext_resources[heading.id] = ext_resource; | 182 | ext_resources[heading.id] = ext_resource; |
236 | } else if (heading.type == "node") { | 183 | } else if (heading.type == "node") { |
237 | if (heading.parent != "") { | 184 | if (heading.parent != "") { |
238 | descendents.push_back( | 185 | nodes.push_back(GodotNode{.name = heading.name, |
239 | std::make_unique<GodotNode>(heading.name, heading.instance_type)); | 186 | .parent = heading.parent, |
240 | GodotNode* child = descendents.back().get(); | 187 | .instance_type = heading.instance_type}); |
241 | |||
242 | if (heading.parent == ".") { | ||
243 | root->AddChild(*child); | ||
244 | } else { | ||
245 | root->GetNode(heading.parent)->AddChild(*child); | ||
246 | } | ||
247 | } | 188 | } |
248 | } else { | 189 | } else { |
249 | cur_heading = heading; | 190 | cur_heading = heading; |
@@ -262,8 +203,7 @@ std::unique_ptr<GodotScene> ReadGodotSceneFromFile(const std::string& path) { | |||
262 | handle_end_of_section(); | 203 | handle_end_of_section(); |
263 | } | 204 | } |
264 | 205 | ||
265 | return std::make_unique<GodotSceneImpl>( | 206 | return GodotScene(std::move(ext_resources), std::move(nodes)); |
266 | std::move(ext_resources), std::move(root), std::move(descendents)); | ||
267 | } | 207 | } |
268 | 208 | ||
269 | } // namespace com::fourisland::lingo2_archipelago | 209 | } // namespace com::fourisland::lingo2_archipelago |
diff --git a/tools/util/godot_scene.h b/tools/util/godot_scene.h index 529e38e..17f3f50 100644 --- a/tools/util/godot_scene.h +++ b/tools/util/godot_scene.h | |||
@@ -1,13 +1,12 @@ | |||
1 | #ifndef TOOLS_UTIL_TSCN_H_ | 1 | #ifndef TOOLS_UTIL_TSCN_H_ |
2 | #define TOOLS_UTIL_TSCN_H_ | 2 | #define TOOLS_UTIL_TSCN_H_ |
3 | 3 | ||
4 | #include <absl/strings/string_view.h> | ||
5 | |||
6 | #include <map> | 4 | #include <map> |
7 | #include <memory> | 5 | #include <memory> |
8 | #include <string> | 6 | #include <string> |
9 | #include <string_view> | 7 | #include <utility> |
10 | #include <variant> | 8 | #include <variant> |
9 | #include <vector> | ||
11 | 10 | ||
12 | namespace com::fourisland::lingo2_archipelago { | 11 | namespace com::fourisland::lingo2_archipelago { |
13 | 12 | ||
@@ -22,45 +21,36 @@ struct GodotExtResourceRef { | |||
22 | 21 | ||
23 | using GodotInstanceType = std::variant<std::monostate, GodotExtResourceRef>; | 22 | using GodotInstanceType = std::variant<std::monostate, GodotExtResourceRef>; |
24 | 23 | ||
25 | class GodotNode { | 24 | struct GodotNode { |
26 | public: | 25 | std::string name; |
27 | GodotNode(std::string name, GodotInstanceType instance_type) | 26 | std::string parent; |
28 | : name_(std::move(name)), instance_type_(std::move(instance_type)) {} | 27 | GodotInstanceType instance_type; |
29 | |||
30 | const std::string& GetName() const { return name_; } | ||
31 | |||
32 | const GodotInstanceType& GetInstanceType() const { return instance_type_; } | ||
33 | |||
34 | const GodotNode* GetParent() const { return parent_; } | ||
35 | GodotNode* GetParent() { return parent_; } | ||
36 | 28 | ||
37 | std::string GetPath() const; | 29 | std::string GetPath() const; |
38 | |||
39 | void AddChild(GodotNode& child); | ||
40 | |||
41 | const GodotNode* GetNode(absl::string_view path) const; | ||
42 | GodotNode* GetNode(absl::string_view path); | ||
43 | |||
44 | const std::map<std::string, GodotNode*> GetChildren() const { | ||
45 | return children_; | ||
46 | } | ||
47 | |||
48 | private: | ||
49 | std::string name_; | ||
50 | GodotInstanceType instance_type_; | ||
51 | |||
52 | GodotNode* parent_ = nullptr; | ||
53 | std::map<std::string, GodotNode*> children_; | ||
54 | }; | 30 | }; |
55 | 31 | ||
56 | class GodotScene { | 32 | class GodotScene { |
57 | public: | 33 | public: |
58 | virtual const GodotExtResource* GetExtResource( | 34 | GodotScene(std::map<std::string, GodotExtResource> ext_resources, |
59 | const std::string& id) const = 0; | 35 | std::vector<GodotNode> nodes) |
60 | virtual const GodotNode& GetRoot() const = 0; | 36 | : ext_resources_(std::move(ext_resources)), nodes_(std::move(nodes)) {} |
37 | |||
38 | const GodotExtResource* GetExtResource(const std::string& id) const { | ||
39 | auto it = ext_resources_.find(id); | ||
40 | if (it != ext_resources_.end()) { | ||
41 | return &it->second; | ||
42 | } else { | ||
43 | return nullptr; | ||
44 | } | ||
45 | } | ||
46 | const std::vector<GodotNode>& GetNodes() const { return nodes_; } | ||
47 | |||
48 | private: | ||
49 | std::map<std::string, GodotExtResource> ext_resources_; | ||
50 | std::vector<GodotNode> nodes_; | ||
61 | }; | 51 | }; |
62 | 52 | ||
63 | std::unique_ptr<GodotScene> ReadGodotSceneFromFile(const std::string& path); | 53 | GodotScene ReadGodotSceneFromFile(const std::string& path); |
64 | 54 | ||
65 | } // namespace com::fourisland::lingo2_archipelago | 55 | } // namespace com::fourisland::lingo2_archipelago |
66 | 56 | ||
diff --git a/tools/validator/godot_processor.cpp b/tools/validator/godot_processor.cpp index f345cff..ad2be78 100644 --- a/tools/validator/godot_processor.cpp +++ b/tools/validator/godot_processor.cpp | |||
@@ -35,17 +35,17 @@ class GodotProcessor { | |||
35 | std::string scene_path_str = scene_path.string(); | 35 | std::string scene_path_str = scene_path.string(); |
36 | std::cout << "Processing " << scene_path_str << std::endl; | 36 | std::cout << "Processing " << scene_path_str << std::endl; |
37 | 37 | ||
38 | std::unique_ptr<GodotScene> scene = | 38 | GodotScene scene = ReadGodotSceneFromFile(scene_path_str); |
39 | ReadGodotSceneFromFile(scene_path_str); | 39 | for (const GodotNode& node : scene.GetNodes()) { |
40 | 40 | ProcessMapNode(scene, node, map_info); | |
41 | ProcessMapNode(*scene, scene->GetRoot(), map_info); | 41 | } |
42 | } | 42 | } |
43 | 43 | ||
44 | void ProcessMapNode(const GodotScene& scene, const GodotNode& node, | 44 | void ProcessMapNode(const GodotScene& scene, const GodotNode& node, |
45 | MapInfo& map_info) { | 45 | MapInfo& map_info) { |
46 | if (std::holds_alternative<GodotExtResourceRef>(node.GetInstanceType())) { | 46 | if (std::holds_alternative<GodotExtResourceRef>(node.instance_type)) { |
47 | const GodotExtResourceRef& ext_resource_ref = | 47 | const GodotExtResourceRef& ext_resource_ref = |
48 | std::get<GodotExtResourceRef>(node.GetInstanceType()); | 48 | std::get<GodotExtResourceRef>(node.instance_type); |
49 | const GodotExtResource* ext_resource = | 49 | const GodotExtResource* ext_resource = |
50 | scene.GetExtResource(ext_resource_ref.id); | 50 | scene.GetExtResource(ext_resource_ref.id); |
51 | 51 | ||
@@ -55,10 +55,6 @@ class GodotProcessor { | |||
55 | map_info.game_nodes[node.GetPath()].defined = true; | 55 | map_info.game_nodes[node.GetPath()].defined = true; |
56 | } | 56 | } |
57 | } | 57 | } |
58 | |||
59 | for (const auto& [child_name, child_node] : node.GetChildren()) { | ||
60 | ProcessMapNode(scene, *child_node, map_info); | ||
61 | } | ||
62 | } | 58 | } |
63 | 59 | ||
64 | private: | 60 | private: |