summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--data/connections.txtpb42
-rw-r--r--data/ids.txtpb465
-rw-r--r--data/maps/the_entry/connections.txtpb28
-rw-r--r--data/maps/the_entry/rooms/Composite Room Entrance.txtpb7
-rw-r--r--data/maps/the_entry/rooms/Daedalus Entrance.txtpb7
-rw-r--r--data/maps/the_entry/rooms/Digital Entrance.txtpb7
-rw-r--r--data/maps/the_entry/rooms/Repetitive Entrance.txtpb7
-rw-r--r--data/maps/the_entry/rooms/Starting Room.txtpb24
-rw-r--r--data/maps/the_great/rooms/East Landscape.txtpb2
-rw-r--r--data/maps/the_repetitive/connections.txtpb51
-rw-r--r--data/maps/the_repetitive/doors.txtpb196
-rw-r--r--data/maps/the_repetitive/metadata.txtpb9
-rw-r--r--data/maps/the_repetitive/rooms/Anti Room.txtpb47
-rw-r--r--data/maps/the_repetitive/rooms/Cyan Room.txtpb86
-rw-r--r--data/maps/the_repetitive/rooms/Dot Area.txtpb109
-rw-r--r--data/maps/the_repetitive/rooms/Entry Connector.txtpb7
-rw-r--r--data/maps/the_repetitive/rooms/Lime Room.txtpb87
-rw-r--r--data/maps/the_repetitive/rooms/Magenta Room.txtpb114
-rw-r--r--data/maps/the_repetitive/rooms/Main Room.txtpb144
-rw-r--r--data/maps/the_repetitive/rooms/Mastery Room.txtpb6
-rw-r--r--data/maps/the_repetitive/rooms/Plaza Connector.txtpb7
-rw-r--r--data/maps/the_repetitive/rooms/Yellow Room.txtpb91
-rw-r--r--tools/util/godot_scene.cpp80
-rw-r--r--tools/util/godot_scene.h58
-rw-r--r--tools/validator/godot_processor.cpp16
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
59connections { 61connections {
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}
950connections {
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}
966connections {
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}
5115maps {
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}
5115special { 5576special {
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}
5171letters { 5632letters {
5633 key: "h2"
5634 value: 1121
5635}
5636letters {
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}
161connections {
162 from_room: "Starting Room"
163 to_room: "Digital Entrance"
164 door { name: "Second Room Left Door" }
165 oneway: true
166}
167connections {
168 from_room: "Digital Entrance"
169 to_room: "Starting Room"
170 oneway: true
171}
172connections {
173 from_room: "Starting Room"
174 to_room: "Daedalus Entrance"
175 door { name: "Daedalus Entrance" }
176}
177connections {
178 from_room: "Starting Room"
179 to_room: "Composite Room Entrance"
180 door { name: "Composite Room Entrance" }
181}
182connections {
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 @@
1name: "Composite Room Entrance"
2display_name: "Starting Room"
3ports {
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 @@
1name: "Daedalus Entrance"
2display_name: "Starting Room"
3ports {
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 @@
1name: "Digital Entrance"
2display_name: "Starting Room"
3ports {
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 @@
1name: "Repetitive Entrance"
2display_name: "Starting Room"
3ports {
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}
80ports {
81 name: "DIGITAL"
82 path: "Components/Warps/worldport"
83 orientation: "west"
84 required_door { name: "Second Room Left Door" }
85}
86ports {
87 name: "DAEDALUS"
88 path: "Components/Warps/worldport6"
89 orientation: "west"
90 required_door { name: "Daedalus Entrance" }
91}
92ports {
93 name: "REPETITIVE"
94 path: "Components/Warps/worldport7"
95 orientation: "north"
96 required_door { name: "Repetitive Entrance" }
97}
98ports {
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 @@
1connections {
2 from_room: "Main Room"
3 to_room: "Entry Connector"
4 door { name: "Entry Entrance" }
5}
6connections {
7 from_room: "Main Room"
8 to_room: "Plaza Connector"
9 door { name: "Plaza Entrance" }
10 oneway: true
11}
12connections {
13 from_room: "Plaza Connector"
14 to_room: "Main Room"
15 oneway: true
16}
17connections {
18 from_room: "Main Room"
19 to_room: "Anti Room"
20 door { name: "Anti-Collectable Room" }
21}
22connections {
23 from_room: "Main Room"
24 to_room: "Dot Area"
25 door { name: "Dot Area Entrance" }
26}
27connections {
28 from_room: "Dot Area"
29 to_room: "Lime Room"
30 door { name: "Lime Door" }
31}
32connections {
33 from_room: "Dot Area"
34 to_room: "Cyan Room"
35 door { name: "Cyan Door" }
36}
37connections {
38 from_room: "Dot Area"
39 to_room: "Magenta Room"
40 door { name: "Magenta Door" }
41}
42connections {
43 from_room: "Dot Area"
44 to_room: "Yellow Room"
45 door { name: "Yellow Door" }
46}
47connections {
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 @@
1doors {
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}
8doors {
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}
15doors {
16 name: "Anti-Collectable Room"
17 type: ITEM_ONLY
18 receivers: "Components/Doors/Door"
19 rooms { name: "Main Room" }
20}
21doors {
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}
28doors {
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}
35doors {
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}
42doors {
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}
49doors {
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}
56doors {
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}
73doors {
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}
90doors {
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}
111doors {
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}
127doors {
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.
2excluded_nodes: "Components/Collectables/anticollectable"
3# These paintings are directly above/behind panels and thus can't be entered.
4excluded_nodes: "Meshes/eyeRed3"
5excluded_nodes: "Meshes/eyeRed4"
6# I do not know what this is.
7excluded_nodes: "Components/Doors/Door3/Hinge/panel_i"
8# This has something to do with the magenta room entrance proxy panel.
9excluded_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 @@
1name: "Anti Room"
2display_name: "Repetitive"
3# Ignore the collectible. The mod should remove it and the back wall too.
4panels {
5 name: "HA (1)"
6 path: "Panels/Entry/panel_7"
7 clue: "ha"
8 answer: "haha"
9}
10panels {
11 name: "HA (2)"
12 path: "Panels/Entry/panel_8"
13 clue: "ha"
14 answer: "hahaha"
15}
16panels {
17 name: "HA (3)"
18 path: "Panels/Entry/panel_12"
19 clue: "ha"
20 answer: "hahahaha"
21}
22panels {
23 name: "HA (4)"
24 path: "Panels/Entry/panel_13"
25 clue: "ha"
26 answer: "hahahahaha"
27}
28panels {
29 name: "HA (5)"
30 path: "Panels/Entry/panel_14"
31 clue: "ha"
32 answer: "hahahahahaha"
33}
34panels {
35 name: "TWO"
36 path: "Panels/Entry/panel3"
37 clue: "two"
38 answer: "digit"
39 symbols: "example"
40}
41panels {
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 @@
1name: "Cyan Room"
2display_name: "Repetitive"
3panels {
4 name: "ALFA"
5 path: "Panels/Lingo2/panel_3"
6 clue: "alfa"
7 answer: "alfalfa"
8 symbols: "sparkles"
9}
10panels {
11 name: "BACK"
12 path: "Panels/Lingo2/panel_6"
13 clue: "back"
14 answer: "backpack"
15 symbols: "sparkles"
16}
17panels {
18 name: "TEAM"
19 path: "Panels/Lingo2/panel_18"
20 clue: "team"
21 answer: "teammate"
22 symbols: "anagram"
23}
24panels {
25 name: "CRIB"
26 path: "Panels/Lingo2/panel_28"
27 clue: "crib"
28 answer: "cribbed"
29 symbols: "example"
30}
31panels {
32 name: "BLACK"
33 path: "Panels/Lingo2/panel_29"
34 clue: "black"
35 answer: "blackjack"
36 symbols: "zero"
37}
38panels {
39 name: "SEE"
40 path: "Panels/Lingo2/panel_19"
41 clue: "see"
42 answer: "seesaw"
43 symbols: "age"
44}
45panels {
46 name: "SIGHT"
47 path: "Panels/Lingo2/panel_20"
48 clue: "sight"
49 answer: "sightsee"
50 symbols: "sun"
51}
52panels {
53 name: "WHIP"
54 path: "Panels/Lingo2/panel_21"
55 clue: "whip"
56 answer: "whiplash"
57 symbols: "sun"
58}
59panels {
60 name: "GRAPE"
61 path: "Panels/Lingo2/panel_22"
62 clue: "grape"
63 answer: "grapefruit"
64 symbols: "example"
65}
66panels {
67 name: "BITTER"
68 path: "Panels/Lingo2/panel_23"
69 clue: "bitter"
70 answer: "bittersweet"
71 symbols: "sweet"
72}
73panels {
74 name: "ONTO"
75 path: "Panels/Lingo2/panel_24"
76 clue: "onto"
77 answer: "toon"
78 symbols: "sparkles"
79}
80panels {
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 @@
1name: "Dot Area"
2display_name: "Repetitive"
3panels {
4 name: "TUTU (1)"
5 path: "Panels/Lingo2/panel"
6 clue: "tutu"
7 answer: "two"
8 symbols: "zero"
9}
10panels {
11 name: "TO (1)"
12 path: "Panels/Lingo2/panel1"
13 clue: "to"
14 answer: "tutu"
15 symbols: "zero"
16}
17panels {
18 name: "TO (2)"
19 path: "Panels/Lingo2/panel2"
20 clue: "to"
21 answer: "toot"
22}
23panels {
24 name: "ON (1)"
25 path: "Panels/Lingo2/panel3"
26 clue: "on"
27 answer: "noon"
28}
29panels {
30 name: "ON (2)"
31 path: "Panels/Lingo2/panel4"
32 clue: "on"
33 answer: "onion"
34 symbols: "sparkles"
35}
36panels {
37 name: "RED (1)"
38 path: "Panels/Lingo2/panel7"
39 clue: "red"
40 answer: "redder"
41}
42panels {
43 name: "RED (2)"
44 path: "Panels/Lingo2/panel8"
45 clue: "red"
46 answer: "colored"
47 symbols: "sparkles"
48 symbols: "example"
49}
50panels {
51 name: "PARE (1)"
52 path: "Panels/Lingo2/panel9"
53 clue: "pare"
54 answer: "prepare"
55 symbols: "sparkles"
56}
57panels {
58 name: "PARE (2)"
59 path: "Panels/Lingo2/panel10"
60 clue: "pare"
61 answer: "reappear"
62 symbols: "zero"
63 symbols: "anagram"
64}
65panels {
66 name: "OUT (1)"
67 path: "Panels/Lingo2/panel5"
68 clue: "out"
69 answer: "output"
70 symbols: "sparkles"
71}
72panels {
73 name: "OUT (2)"
74 path: "Panels/Lingo2/panel6"
75 clue: "out"
76 answer: "cutout"
77 symbols: "sparkles"
78}
79panels {
80 name: "JOKE"
81 path: "Panels/Lingo2/panel_9"
82 clue: "joke"
83 answer: "knock"
84 symbols: "example"
85}
86panels {
87 name: "DO"
88 path: "Panels/Lingo2/panel_27"
89 clue: "do"
90 answer: "door"
91 symbols: "sparkles"
92}
93panels {
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}
102panels {
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 @@
1name: "Entry Connector"
2display_name: "Repetitive"
3ports {
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 @@
1name: "Lime Room"
2display_name: "Repetitive"
3panels {
4 name: "RAT"
5 path: "Panels/Lingo2/panel_1"
6 clue: "rat"
7 answer: "tartar"
8}
9panels {
10 name: "POMPOM"
11 path: "Panels/Lingo2/panel_2"
12 clue: "pompom"
13 answer: "mop"
14}
15panels {
16 name: "TWENTY"
17 path: "Panels/Lingo2/panel_7"
18 clue: "twenty"
19 answer: "blind"
20 symbols: "sun"
21}
22panels {
23 name: "EQUAL"
24 path: "Panels/Lingo2/panel_8"
25 clue: "equal"
26 answer: "fifty"
27 symbols: "sun"
28}
29panels {
30 name: "PIGEON"
31 path: "Panels/Lingo2/panel_10"
32 clue: "pigeon"
33 answer: "cuckoo"
34 symbols: "zero"
35 symbols: "sound"
36}
37panels {
38 name: "BIRD"
39 path: "Panels/Lingo2/panel_11"
40 clue: "bird"
41 answer: "do"
42 symbols: "example"
43}
44panels {
45 name: "MISTAKE"
46 path: "Panels/Lingo2/panel_12"
47 clue: "mistake"
48 answer: "ghost"
49 symbols: "sun"
50 symbols: "sound"
51}
52panels {
53 name: "INJURY"
54 path: "Panels/Lingo2/panel_26"
55 clue: "injury"
56 answer: "boo"
57 symbols: "pyramid"
58}
59panels {
60 name: "TRAIN"
61 path: "Panels/Lingo2/panel_13"
62 clue: "train"
63 answer: "chew"
64 symbols: "zero"
65 symbols: "sound"
66}
67panels {
68 name: "ELLIPSIS"
69 path: "Panels/Lingo2/panel_14"
70 clue: "ellipsis"
71 answer: "dot"
72 symbols: "sun"
73}
74panels {
75 name: "SLEEPER"
76 path: "Panels/Lingo2/panel_15"
77 clue: "sleeper"
78 answer: "z"
79 symbols: "sound"
80}
81panels {
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 @@
1name: "Magenta Room"
2display_name: "Repetitive"
3panels {
4 name: "WRITE"
5 path: "Panels/Eval/panel_9"
6 clue: "write"
7 answer: "write"
8 symbols: "eval"
9}
10panels {
11 name: "HEARD"
12 path: "Panels/Eval/panel_11"
13 clue: "heard"
14 answer: "herd"
15 symbols: "eval"
16}
17panels {
18 name: "HERE"
19 path: "Panels/Eval/panel_12"
20 clue: "here"
21 answer: "hear"
22 symbols: "eval"
23}
24panels {
25 name: "HALF"
26 path: "Panels/Eval/panel_13"
27 clue: "half"
28 answer: "haha"
29 symbols: "eval"
30}
31panels {
32 name: "NOT (1)"
33 path: "Panels/Eval/panel_14"
34 clue: "not"
35 answer: "no"
36 symbols: "eval"
37}
38panels {
39 name: "NOT (2)"
40 path: "Panels/Eval/panel_15"
41 clue: "not"
42 answer: "yes"
43 symbols: "eval"
44}
45panels {
46 name: "CLAMBERS (1)"
47 path: "Panels/Eval/panel_16"
48 clue: "clambers"
49 answer: "scramble"
50 symbols: "eval"
51}
52panels {
53 name: "CLAMBERS (2)"
54 path: "Panels/Eval/panel_17"
55 clue: "clambers"
56 answer: "scramble"
57 symbols: "anagram"
58}
59panels {
60 name: "PILFER"
61 path: "Panels/Eval/panel_18"
62 clue: "pilfer"
63 answer: "pilfer"
64 symbols: "eval"
65}
66panels {
67 name: "ANTONYM"
68 path: "Panels/Eval/panel_19"
69 clue: "antonym"
70 answer: "synonym"
71 symbols: "eval"
72}
73panels {
74 name: "RHYME"
75 path: "Panels/Eval/panel_20"
76 clue: "rhyme"
77 answer: "time"
78 symbols: "eval"
79}
80panels {
81 name: "PLURAL"
82 path: "Panels/Eval/panel_21"
83 clue: "plural"
84 answer: "plurals"
85 symbols: "eval"
86}
87panels {
88 name: "PANDA"
89 path: "Panels/Eval/panel_22"
90 clue: "panda"
91 answer: "papa"
92 symbols: "eval"
93}
94panels {
95 name: "CASE"
96 path: "Panels/Eval/panel_23"
97 clue: "case"
98 answer: "ease"
99 symbols: "eval"
100}
101panels {
102 name: "TEASER"
103 path: "Panels/Eval/panel_24"
104 clue: "teaser"
105 answer: "eraser"
106 symbols: "eval"
107}
108panels {
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 @@
1name: "Main Room"
2display_name: "Repetitive"
3panels {
4 name: "HOTS (2)"
5 path: "Panels/Entry/panel_3"
6 clue: "hots"
7 answer: "hotshots"
8}
9panels {
10 name: "HOTS (1)"
11 path: "Panels/Entry/panel_6"
12 clue: "hots"
13 answer: "hots"
14}
15panels {
16 name: "HEIGHT (2)"
17 path: "Panels/Entry/panel_4"
18 clue: "height"
19 answer: "eight"
20 symbols: "sparkles"
21}
22panels {
23 name: "HEIGHT (1)"
24 path: "Panels/Entry/panel_15"
25 clue: "height"
26 answer: "height"
27}
28panels {
29 name: "HEIGHT (3)"
30 path: "Panels/Entry/panel_5"
31 clue: "height"
32 answer: "high"
33 symbols: "sparkles"
34}
35panels {
36 name: "HEIGHT (4)"
37 path: "Panels/Entry/panel_9"
38 clue: "height"
39 answer: "hit"
40 symbols: "sparkles"
41}
42panels {
43 name: "HEIGHT (5)"
44 path: "Panels/Entry/panel_10"
45 clue: "height"
46 answer: "hi"
47 symbols: "sparkles"
48}
49panels {
50 name: "HEIGHT (6)"
51 path: "Panels/Entry/panel_11"
52 clue: "height"
53 answer: "i"
54 symbols: "sparkles"
55}
56panels {
57 name: "QUESTION"
58 path: "Panels/Entry/panel"
59 clue: "question"
60 answer: "which"
61 symbols: "example"
62}
63panels {
64 name: "INTUITION"
65 path: "Panels/Entry/panel2"
66 clue: "intuition"
67 answer: "hunch"
68 symbols: "sun"
69}
70panels {
71 name: "HI"
72 path: "Panels/Entry/panel5"
73 clue: "hi"
74 answer: "high"
75 symbols: "zero"
76}
77panels {
78 name: "I"
79 path: "Panels/Entry/panel6"
80 clue: "i"
81 answer: "eye"
82 symbols: "zero"
83}
84panels {
85 name: "?"
86 path: "Panels/Entry/panel_16"
87 clue: ""
88 answer: "wish"
89 symbols: "question"
90}
91panels {
92 name: "HAND"
93 path: "Panels/Entry/panel_17"
94 clue: "hand"
95 answer: "harm"
96 symbols: "boxes"
97 symbols: "eval"
98}
99panels {
100 name: "? HAND"
101 path: "Panels/Entry/panel_18"
102 clue: ""
103 answer: "warm"
104 symbols: "lingo"
105 symbols: "eval"
106}
107panels {
108 name: "RICHES"
109 path: "Panels/Entry/panel_19"
110 clue: "riches"
111 answer: "wealth"
112 symbols: "sun"
113}
114panels {
115 name: "? RICHES"
116 path: "Panels/Entry/panel_20"
117 clue: ""
118 answer: "health"
119 symbols: "lingo"
120 symbols: "eval"
121}
122panels {
123 name: "MISHMASH"
124 path: "Panels/Entry/panel_21"
125 clue: "mishmash"
126 answer: "hash"
127 symbols: "eval"
128}
129letters {
130 key: "h"
131 level2: true
132 path: "Components/Collectables/collectable"
133}
134paintings {
135 name: "EYERED2"
136 path: "Meshes/eyeRed2"
137 orientation: "east"
138 exit_only: true
139}
140ports {
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 @@
1name: "Mastery Room"
2display_name: "Repetitive"
3masteries {
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 @@
1name: "Plaza Connector"
2display_name: "Repetitive"
3ports {
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 @@
1name: "Yellow Room"
2display_name: "Repetitive"
3panels {
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}
12panels {
13 name: "ZEROING"
14 path: "Panels/Eval/panel_2"
15 clue: "zeroing"
16 answer: ""
17 symbols: "eval"
18}
19panels {
20 name: "ONESELF"
21 path: "Panels/Eval/panel_3"
22 clue: "oneself"
23 answer: "self"
24 symbols: "eval"
25}
26panels {
27 name: "DURING"
28 path: "Panels/Eval/panel_4"
29 clue: "during"
30 answer: "wondering"
31 symbols: "zero"
32 symbols: "eval"
33}
34panels {
35 name: "TUMOR"
36 path: "Panels/Eval/panel_5"
37 clue: "tumor"
38 answer: "murmur"
39 symbols: "zero"
40 symbols: "eval"
41}
42panels {
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}
51panels {
52 name: "3D"
53 path: "Panels/Eval/panel_26"
54 clue: "3d"
55 answer: "added"
56 symbols: "sparkles"
57 symbols: "eval"
58}
59panels {
60 name: "HEADED"
61 path: "Panels/Eval/panel_29"
62 clue: "headed"
63 answer: "heeded"
64 symbols: "sparkles"
65 symbols: "eval"
66}
67panels {
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}
76panels {
77 name: "ASSESSES"
78 path: "Panels/Eval/panel_28"
79 clue: "assesses"
80 answer: "fives"
81 symbols: "sparkles"
82 symbols: "eval"
83}
84panels {
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
11namespace { 12namespace {
12 13
13class 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
39struct Heading { 14struct 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
162void GodotNode::AddChild(GodotNode& child) {
163 children_[child.GetName()] = &child;
164 child.parent_ = this;
165}
166
167std::string GodotNode::GetPath() const { 137std::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
175const GodotNode* GodotNode::GetNode(absl::string_view path) const { 145GodotScene 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
192GodotNode* GodotNode::GetNode(absl::string_view path) {
193 return const_cast<GodotNode*>(
194 const_cast<const GodotNode*>(this)->GetNode(path));
195}
196
197std::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
12namespace com::fourisland::lingo2_archipelago { 11namespace com::fourisland::lingo2_archipelago {
13 12
@@ -22,45 +21,36 @@ struct GodotExtResourceRef {
22 21
23using GodotInstanceType = std::variant<std::monostate, GodotExtResourceRef>; 22using GodotInstanceType = std::variant<std::monostate, GodotExtResourceRef>;
24 23
25class GodotNode { 24struct 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
56class GodotScene { 32class 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
63std::unique_ptr<GodotScene> ReadGodotSceneFromFile(const std::string& path); 53GodotScene 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: