diff options
-rw-r--r-- | LL1.yaml | 7505 | ||||
-rw-r--r-- | __init__.py | 112 | ||||
-rw-r--r-- | docs/en_Lingo.md | 42 | ||||
-rw-r--r-- | docs/setup_en.md | 45 | ||||
-rw-r--r-- | ids.yaml | 1449 | ||||
-rw-r--r-- | items.py | 106 | ||||
-rw-r--r-- | locations.py | 80 | ||||
-rw-r--r-- | options.py | 126 | ||||
-rw-r--r-- | player_logic.py | 298 | ||||
-rw-r--r-- | regions.py | 84 | ||||
-rw-r--r-- | rules.py | 104 | ||||
-rw-r--r-- | static_logic.py | 544 | ||||
-rw-r--r-- | test/TestDoors.py | 89 | ||||
-rw-r--r-- | test/TestMastery.py | 39 | ||||
-rw-r--r-- | test/TestOptions.py | 31 | ||||
-rw-r--r-- | test/TestOrangeTower.py | 175 | ||||
-rw-r--r-- | test/TestProgressive.py | 191 | ||||
-rw-r--r-- | test/__init__.py | 13 | ||||
-rw-r--r-- | testing.py | 2 | ||||
-rw-r--r-- | utils/assign_ids.rb | 178 | ||||
-rw-r--r-- | utils/validate_config.rb | 329 |
21 files changed, 11542 insertions, 0 deletions
diff --git a/LL1.yaml b/LL1.yaml new file mode 100644 index 0000000..7ae015d --- /dev/null +++ b/LL1.yaml | |||
@@ -0,0 +1,7505 @@ | |||
1 | --- | ||
2 | # This file is an associative array where the keys are region names. Rooms | ||
3 | # have four properties: entrances, panels, doors, and paintings. | ||
4 | # | ||
5 | # entrances is an array of regions from which this room can be accessed. The | ||
6 | # key of each entry is the room that can access this one. The value is a list | ||
7 | # of OR'd requirements for being able to access this room from the other one, | ||
8 | # although the list can be elided if there is only one requirement, and the | ||
9 | # value True can be used if there are no requirements (i.e. you always have | ||
10 | # access to this room if you have access to the other). Each requirement | ||
11 | # describes a door that must be opened in order to access this room from the | ||
12 | # other. The door is described by both the door's name and the name of the | ||
13 | # room that the door is in. The room name may be omitted if the door is | ||
14 | # located in the current room. | ||
15 | # | ||
16 | # panels is an array of panels in the room. The key of the array is an | ||
17 | # arbitrary name for the panel. Panels can have the following fields: | ||
18 | # - id: The internal ID of the panel in the LINGO map | ||
19 | # - required_room: In addition to having access to this room, the player must | ||
20 | # also have access to this other room in order to solve this | ||
21 | # panel. | ||
22 | # - required_door: In addition to having access to this room, the player must | ||
23 | # also have this door opened in order to solve this panel. | ||
24 | # - required_panel: In addition to having access to this room, the player must | ||
25 | # also be able to access this other panel in order to solve | ||
26 | # this panel. | ||
27 | # - colors: A list of colors that are required to be unlocked in order | ||
28 | # to solve this panel | ||
29 | # - check: A location check will be created for this individual panel. | ||
30 | # - exclude_reduce: Panel checks are assumed to be INCLUDED when reduce checks | ||
31 | # is on. This option excludes the check anyway. | ||
32 | # - tag: Label that describes how panel randomization should be | ||
33 | # done. In reorder mode, panels with the same tag can be | ||
34 | # shuffled amongst themselves. "forbid" is a special value | ||
35 | # meaning that no randomization should be done. This field is | ||
36 | # mandatory. | ||
37 | # - link: Panels with the same link label are randomized as a group. | ||
38 | # - subtag: Used to identify the separate parts of a linked group. | ||
39 | # - copy_to_sign: When randomizing this panel, the hint should be copied to | ||
40 | # the specified sign(s). | ||
41 | # - achievement: The name of the achievement that is received upon solving | ||
42 | # this panel. | ||
43 | # - non_counting: If True, this panel does not contribute to the total needed | ||
44 | # to unlock Level 2. | ||
45 | # | ||
46 | # doors is an array of doors associated with this room. When door | ||
47 | # randomization is enabled, each of these is an item. The key is a name that | ||
48 | # will be displayed as part of the item's name. Doors can have the following | ||
49 | # fields: | ||
50 | # - id: A string or list of internal door IDs from the LINGO map. | ||
51 | # In door shuffle mode, collecting the item generated for | ||
52 | # this door will open the doors listed here. | ||
53 | # - painting_id: An internal ID of a painting that should be moved upon | ||
54 | # receiving this door. | ||
55 | # - panels: These are the panels that canonically open this door. If | ||
56 | # there is only one panel for the door, then that panel is a | ||
57 | # check. If there is more than one panel, then that entire | ||
58 | # set of panels must be solved for a check. Panels can | ||
59 | # either be a string (representing a panel in this room) or | ||
60 | # a dict containing "room" and "panel". | ||
61 | # - item_name: Overrides the name of the item generated for this door. | ||
62 | # If not specified, the item name will be generated from | ||
63 | # the room name and the door name. | ||
64 | # - location_name: Overrides the name of the location generated for this | ||
65 | # door. If not specified, the location name will be | ||
66 | # generated using the names of the panels. | ||
67 | # - skip_location: If true, no location is generated for this door. | ||
68 | # - skip_item: If true, no item is generated for this door. | ||
69 | # - group: When simple doors is used, all doors with the same group | ||
70 | # will be covered by a single item. | ||
71 | # - include_reduce: Door checks are assumed to be EXCLUDED when reduce checks | ||
72 | # is on. This option includes the check anyway. | ||
73 | # - junk_item: If on, the item for this door will be considered a junk | ||
74 | # item instead of a progression item. Only use this for | ||
75 | # doors that could never gate progression regardless of | ||
76 | # options and state. | ||
77 | # - event: Denotes that the door is event only. This is similar to | ||
78 | # setting both skip_location and skip_item. | ||
79 | # | ||
80 | # paintings is an array of paintings in the room. This is used for painting | ||
81 | # shuffling. | ||
82 | # - id: The internal painting ID from the LINGO map. | ||
83 | # - enter_only: If true, painting shuffling will not place a warp exit on | ||
84 | # this painting. | ||
85 | # - exit_only: If true, painting shuffling will not place a warp entrance | ||
86 | # on this painting. | ||
87 | # - orientation: One of north/south/east/west. This is the direction that | ||
88 | # the player is facing when they are interacting with it, | ||
89 | # not the orientation of the painting itself. "North" is | ||
90 | # the direction the player faces at a new game, with the | ||
91 | # positive X axis to the right. | ||
92 | # - required_door: This door must be open for the painting to be usable as an | ||
93 | # entrance. If required_door is set, enter_only must be | ||
94 | # True. | ||
95 | # - required: Marks a painting as being the only entrance for a room, | ||
96 | # and thus it is required to be an exit when randomized. | ||
97 | # Use "required_when_no_doors" instead if it would be | ||
98 | # possible to enter the room without the painting in door | ||
99 | # shuffle mode. | ||
100 | # - move: Denotes that the painting is able to move. | ||
101 | Starting Room: | ||
102 | entrances: | ||
103 | Menu: True | ||
104 | panels: | ||
105 | HI: | ||
106 | id: Entry Room/Panel_hi_hi | ||
107 | tag: midwhite | ||
108 | HIDDEN: | ||
109 | id: Entry Room/Panel_hidden_hidden | ||
110 | tag: midwhite | ||
111 | TYPE: | ||
112 | id: Entry Room/Panel_type_type | ||
113 | tag: midwhite | ||
114 | THIS: | ||
115 | id: Entry Room/Panel_this_this | ||
116 | tag: midwhite | ||
117 | WRITE: | ||
118 | id: Entry Room/Panel_write_write | ||
119 | tag: midwhite | ||
120 | SAME: | ||
121 | id: Entry Room/Panel_same_same | ||
122 | tag: midwhite | ||
123 | doors: | ||
124 | Main Door: | ||
125 | event: True | ||
126 | panels: | ||
127 | - HI | ||
128 | Back Right Door: | ||
129 | id: Entry Room Area Doors/Door_hidden_hidden | ||
130 | include_reduce: True | ||
131 | panels: | ||
132 | - HIDDEN | ||
133 | Rhyme Room Entrance: | ||
134 | id: | ||
135 | - Palindrome Room Area Doors/Door_level_level_2 | ||
136 | - Palindrome Room Area Doors/Door_racecar_racecar_2 | ||
137 | - Palindrome Room Area Doors/Door_solos_solos_2 | ||
138 | skip_location: True | ||
139 | group: Rhyme Room Doors | ||
140 | panels: | ||
141 | - room: The Tenacious | ||
142 | panel: LEVEL (Black) | ||
143 | - room: The Tenacious | ||
144 | panel: RACECAR (Black) | ||
145 | - room: The Tenacious | ||
146 | panel: SOLOS (Black) | ||
147 | paintings: | ||
148 | - id: arrows_painting | ||
149 | exit_only: True | ||
150 | orientation: south | ||
151 | - id: arrows_painting2 | ||
152 | disable: True | ||
153 | move: True | ||
154 | - id: arrows_painting3 | ||
155 | disable: True | ||
156 | move: True | ||
157 | - id: garden_painting_tower2 | ||
158 | enter_only: True | ||
159 | orientation: north | ||
160 | move: True | ||
161 | required_door: | ||
162 | room: Hedge Maze | ||
163 | door: Painting Shortcut | ||
164 | - id: flower_painting_8 | ||
165 | enter_only: True | ||
166 | orientation: north | ||
167 | move: True | ||
168 | required_door: | ||
169 | room: Courtyard | ||
170 | door: Painting Shortcut | ||
171 | - id: symmetry_painting_a_starter | ||
172 | enter_only: True | ||
173 | orientation: west | ||
174 | move: True | ||
175 | required_door: | ||
176 | room: The Wondrous (Doorknob) | ||
177 | door: Painting Shortcut | ||
178 | - id: pencil_painting6 | ||
179 | enter_only: True | ||
180 | orientation: east | ||
181 | move: True | ||
182 | required_door: | ||
183 | room: Outside The Bold | ||
184 | door: Painting Shortcut | ||
185 | - id: blueman_painting_3 | ||
186 | enter_only: True | ||
187 | orientation: east | ||
188 | move: True | ||
189 | required_door: | ||
190 | room: Outside The Undeterred | ||
191 | door: Painting Shortcut | ||
192 | - id: eyes_yellow_painting2 | ||
193 | enter_only: True | ||
194 | orientation: west | ||
195 | move: True | ||
196 | required_door: | ||
197 | room: Outside The Agreeable | ||
198 | door: Painting Shortcut | ||
199 | Hidden Room: | ||
200 | entrances: | ||
201 | Starting Room: | ||
202 | room: Starting Room | ||
203 | door: Back Right Door | ||
204 | The Seeker: | ||
205 | door: Seeker Entrance | ||
206 | Dead End Area: | ||
207 | door: Dead End Door | ||
208 | Knight Night (Outer Ring): | ||
209 | door: Knight Night Entrance | ||
210 | panels: | ||
211 | DEAD END: | ||
212 | id: Appendix Room/Panel_deadend_deadened | ||
213 | check: True | ||
214 | exclude_reduce: True | ||
215 | tag: topwhite | ||
216 | OPEN: | ||
217 | id: Heteronym Room/Panel_entrance_entrance | ||
218 | tag: midwhite | ||
219 | LIES: | ||
220 | id: Appendix Room/Panel_lies_lies | ||
221 | tag: midwhite | ||
222 | doors: | ||
223 | Dead End Door: | ||
224 | id: Appendix Room Area Doors/Door_rat_tar_2 | ||
225 | skip_location: true | ||
226 | group: Dead End Area Access | ||
227 | panels: | ||
228 | - room: Hub Room | ||
229 | panel: RAT | ||
230 | Knight Night Entrance: | ||
231 | id: Appendix Room Area Doors/Door_rat_tar_4 | ||
232 | skip_location: true | ||
233 | panels: | ||
234 | - room: Hub Room | ||
235 | panel: RAT | ||
236 | Seeker Entrance: | ||
237 | id: Entry Room Area Doors/Door_entrance_entrance | ||
238 | item_name: The Seeker - Entrance | ||
239 | panels: | ||
240 | - OPEN | ||
241 | Rhyme Room Entrance: | ||
242 | id: | ||
243 | - Appendix Room Area Doors/Door_rat_tar_3 | ||
244 | - Double Room Area Doors/Door_room_entry_stairs | ||
245 | skip_location: True | ||
246 | group: Rhyme Room Doors | ||
247 | panels: | ||
248 | - room: The Tenacious | ||
249 | panel: LEVEL (Black) | ||
250 | - room: The Tenacious | ||
251 | panel: RACECAR (Black) | ||
252 | - room: The Tenacious | ||
253 | panel: SOLOS (Black) | ||
254 | - room: Hub Room | ||
255 | panel: RAT | ||
256 | paintings: | ||
257 | - id: owl_painting | ||
258 | orientation: north | ||
259 | The Seeker: | ||
260 | entrances: | ||
261 | Hidden Room: | ||
262 | room: Hidden Room | ||
263 | door: Seeker Entrance | ||
264 | Pilgrim Room: | ||
265 | room: Pilgrim Room | ||
266 | door: Shortcut to The Seeker | ||
267 | panels: | ||
268 | Achievement: | ||
269 | id: Countdown Panels/Panel_seeker_seeker | ||
270 | required_room: Hidden Room | ||
271 | tag: forbid | ||
272 | check: True | ||
273 | achievement: The Seeker | ||
274 | BEAR: | ||
275 | id: Heteronym Room/Panel_bear_bear | ||
276 | tag: midwhite | ||
277 | MINE: | ||
278 | id: Heteronym Room/Panel_mine_mine | ||
279 | tag: double midwhite | ||
280 | subtag: left | ||
281 | link: exact MINE | ||
282 | MINE (2): | ||
283 | id: Heteronym Room/Panel_mine_mine_2 | ||
284 | tag: double midwhite | ||
285 | subtag: right | ||
286 | link: exact MINE | ||
287 | BOW: | ||
288 | id: Heteronym Room/Panel_bow_bow | ||
289 | tag: midwhite | ||
290 | DOES: | ||
291 | id: Heteronym Room/Panel_does_does | ||
292 | tag: midwhite | ||
293 | MOBILE: | ||
294 | id: Heteronym Room/Panel_mobile_mobile | ||
295 | tag: double midwhite | ||
296 | subtag: left | ||
297 | link: exact MOBILE | ||
298 | MOBILE (2): | ||
299 | id: Heteronym Room/Panel_mobile_mobile_2 | ||
300 | tag: double midwhite | ||
301 | subtag: right | ||
302 | link: exact MOBILE | ||
303 | DESERT: | ||
304 | id: Heteronym Room/Panel_desert_desert | ||
305 | tag: topmid white stack | ||
306 | subtag: mid | ||
307 | link: topmid DESERT | ||
308 | DESSERT: | ||
309 | id: Heteronym Room/Panel_desert_dessert | ||
310 | tag: topmid white stack | ||
311 | subtag: top | ||
312 | link: topmid DESERT | ||
313 | SOW: | ||
314 | id: Heteronym Room/Panel_sow_sow | ||
315 | tag: topmid white stack | ||
316 | subtag: mid | ||
317 | link: topmid SOW | ||
318 | SEW: | ||
319 | id: Heteronym Room/Panel_sow_so | ||
320 | tag: topmid white stack | ||
321 | subtag: top | ||
322 | link: topmid SOW | ||
323 | TO: | ||
324 | id: Heteronym Room/Panel_two_to | ||
325 | tag: double topwhite | ||
326 | subtag: left | ||
327 | link: hp TWO | ||
328 | TOO: | ||
329 | id: Heteronym Room/Panel_two_too | ||
330 | tag: double topwhite | ||
331 | subtag: right | ||
332 | link: hp TWO | ||
333 | WRITE: | ||
334 | id: Heteronym Room/Panel_write_right | ||
335 | tag: topwhite | ||
336 | EWE: | ||
337 | id: Heteronym Room/Panel_you_ewe | ||
338 | tag: topwhite | ||
339 | KNOT: | ||
340 | id: Heteronym Room/Panel_not_knot | ||
341 | tag: double topwhite | ||
342 | subtag: left | ||
343 | link: hp NOT | ||
344 | NAUGHT: | ||
345 | id: Heteronym Room/Panel_not_naught | ||
346 | tag: double topwhite | ||
347 | subtag: right | ||
348 | link: hp NOT | ||
349 | BEAR (2): | ||
350 | id: Heteronym Room/Panel_bear_bare | ||
351 | tag: topwhite | ||
352 | Second Room: | ||
353 | entrances: | ||
354 | Starting Room: | ||
355 | room: Starting Room | ||
356 | door: Main Door | ||
357 | Hub Room: | ||
358 | door: Exit Door | ||
359 | panels: | ||
360 | HI: | ||
361 | id: Entry Room/Panel_hi_high | ||
362 | tag: topwhite | ||
363 | LOW: | ||
364 | id: Entry Room/Panel_low_low | ||
365 | tag: forbid # This is a midwhite pretending to be a botwhite | ||
366 | ANOTHER TRY: | ||
367 | id: Entry Room/Panel_advance | ||
368 | tag: topwhite | ||
369 | LEVEL 2: | ||
370 | # We will set up special rules for this in code. | ||
371 | id: EndPanel/Panel_level_2 | ||
372 | tag: forbid | ||
373 | non_counting: True | ||
374 | check: True | ||
375 | required_panel: | ||
376 | - panel: ANOTHER TRY | ||
377 | doors: | ||
378 | Exit Door: | ||
379 | id: Entry Room Area Doors/Door_hi_high | ||
380 | location_name: Second Room - Good Luck | ||
381 | include_reduce: True | ||
382 | panels: | ||
383 | - HI | ||
384 | - LOW | ||
385 | Hub Room: | ||
386 | entrances: | ||
387 | Second Room: | ||
388 | room: Second Room | ||
389 | door: Exit Door | ||
390 | Dead End Area: | ||
391 | door: Near RAT Door | ||
392 | Crossroads: | ||
393 | door: Crossroads Entrance | ||
394 | The Tenacious: | ||
395 | door: Tenacious Entrance | ||
396 | Warts Straw Area: | ||
397 | door: Symmetry Door | ||
398 | Hedge Maze: | ||
399 | door: Shortcut to Hedge Maze | ||
400 | Orange Tower First Floor: | ||
401 | room: Orange Tower First Floor | ||
402 | door: Shortcut to Hub Room | ||
403 | Owl Hallway: | ||
404 | painting: True | ||
405 | Outside The Initiated: | ||
406 | room: Outside The Initiated | ||
407 | door: Shortcut to Hub Room | ||
408 | The Traveled: | ||
409 | door: Traveled Entrance | ||
410 | Roof: True # through the sunwarp | ||
411 | Outside The Undeterred: # (NOTE: used in hardcoded pilgrimage) | ||
412 | room: Outside The Undeterred | ||
413 | door: Green Painting | ||
414 | painting: True | ||
415 | panels: | ||
416 | ORDER: | ||
417 | id: Shuffle Room/Panel_order_chaos | ||
418 | colors: black | ||
419 | tag: botblack | ||
420 | SLAUGHTER: | ||
421 | id: Palindrome Room/Panel_slaughter_laughter | ||
422 | colors: red | ||
423 | tag: midred | ||
424 | NEAR: | ||
425 | id: Symmetry Room/Panel_near_far | ||
426 | colors: black | ||
427 | tag: botblack | ||
428 | FAR: | ||
429 | id: Symmetry Room/Panel_far_near | ||
430 | colors: black | ||
431 | tag: botblack | ||
432 | TRACE: | ||
433 | id: Maze Room/Panel_trace_trace | ||
434 | tag: midwhite | ||
435 | RAT: | ||
436 | id: Appendix Room/Panel_rat_tar | ||
437 | colors: black | ||
438 | check: True | ||
439 | exclude_reduce: True | ||
440 | tag: midblack | ||
441 | OPEN: | ||
442 | id: Synonym Room/Panel_open_open | ||
443 | tag: midwhite | ||
444 | FOUR: | ||
445 | id: Backside Room/Panel_four_four_3 | ||
446 | tag: midwhite | ||
447 | required_door: | ||
448 | room: Outside The Undeterred | ||
449 | door: Fours | ||
450 | LOST: | ||
451 | id: Shuffle Room/Panel_lost_found | ||
452 | colors: black | ||
453 | tag: botblack | ||
454 | FORWARD: | ||
455 | id: Entry Room/Panel_forward_forward | ||
456 | tag: midwhite | ||
457 | BETWEEN: | ||
458 | id: Entry Room/Panel_between_between | ||
459 | tag: midwhite | ||
460 | BACKWARD: | ||
461 | id: Entry Room/Panel_backward_backward | ||
462 | tag: midwhite | ||
463 | doors: | ||
464 | Crossroads Entrance: | ||
465 | id: Shuffle Room Area Doors/Door_chaos | ||
466 | panels: | ||
467 | - ORDER | ||
468 | Tenacious Entrance: | ||
469 | id: Palindrome Room Area Doors/Door_slaughter_laughter | ||
470 | group: Entrances to The Tenacious | ||
471 | panels: | ||
472 | - SLAUGHTER | ||
473 | Symmetry Door: | ||
474 | id: | ||
475 | - Symmetry Room Area Doors/Door_near_far | ||
476 | - Symmetry Room Area Doors/Door_far_near | ||
477 | group: Symmetry Doors | ||
478 | panels: | ||
479 | - NEAR | ||
480 | - FAR | ||
481 | Shortcut to Hedge Maze: | ||
482 | id: Maze Area Doors/Door_trace_trace | ||
483 | group: Hedge Maze Doors | ||
484 | panels: | ||
485 | - TRACE | ||
486 | Near RAT Door: | ||
487 | id: Appendix Room Area Doors/Door_deadend_deadened | ||
488 | skip_location: True | ||
489 | group: Dead End Area Access | ||
490 | panels: | ||
491 | - room: Hidden Room | ||
492 | panel: DEAD END | ||
493 | Traveled Entrance: | ||
494 | id: Appendix Room Area Doors/Door_open_open | ||
495 | item_name: The Traveled - Entrance | ||
496 | group: Entrance to The Traveled | ||
497 | panels: | ||
498 | - OPEN | ||
499 | Lost Door: | ||
500 | id: Shuffle Room Area Doors/Door_lost_found | ||
501 | junk_item: True | ||
502 | panels: | ||
503 | - LOST | ||
504 | paintings: | ||
505 | - id: maze_painting | ||
506 | orientation: west | ||
507 | Dead End Area: | ||
508 | entrances: | ||
509 | Hidden Room: | ||
510 | room: Hidden Room | ||
511 | door: Dead End Door | ||
512 | Hub Room: | ||
513 | room: Hub Room | ||
514 | door: Near RAT Door | ||
515 | panels: | ||
516 | FOUR: | ||
517 | id: Backside Room/Panel_four_four_2 | ||
518 | tag: midwhite | ||
519 | required_door: | ||
520 | room: Outside The Undeterred | ||
521 | door: Fours | ||
522 | EIGHT: | ||
523 | id: Backside Room/Panel_eight_eight_8 | ||
524 | tag: midwhite | ||
525 | required_door: | ||
526 | room: Number Hunt | ||
527 | door: Eights | ||
528 | paintings: | ||
529 | - id: smile_painting_6 | ||
530 | orientation: north | ||
531 | Pilgrim Antechamber: | ||
532 | # Let's not shuffle the paintings yet. | ||
533 | entrances: | ||
534 | # The pilgrimage is hardcoded in rules.py | ||
535 | Starting Room: | ||
536 | door: Sun Painting | ||
537 | panels: | ||
538 | HOT CRUST: | ||
539 | id: Lingo Room/Panel_shortcut | ||
540 | colors: yellow | ||
541 | tag: midyellow | ||
542 | PILGRIMAGE: | ||
543 | id: Lingo Room/Panel_pilgrim | ||
544 | colors: blue | ||
545 | tag: midblue | ||
546 | MASTERY: | ||
547 | id: Master Room/Panel_mastery_mastery14 | ||
548 | tag: midwhite | ||
549 | required_door: | ||
550 | room: Orange Tower Seventh Floor | ||
551 | door: Mastery | ||
552 | doors: | ||
553 | Sun Painting: | ||
554 | item_name: Pilgrim Room - Sun Painting | ||
555 | location_name: Pilgrim Room - HOT CRUST | ||
556 | painting_id: pilgrim_painting2 | ||
557 | panels: | ||
558 | - HOT CRUST | ||
559 | Exit: | ||
560 | event: True | ||
561 | panels: | ||
562 | - PILGRIMAGE | ||
563 | Pilgrim Room: | ||
564 | entrances: | ||
565 | The Seeker: | ||
566 | door: Shortcut to The Seeker | ||
567 | Pilgrim Antechamber: | ||
568 | room: Pilgrim Antechamber | ||
569 | door: Exit | ||
570 | panels: | ||
571 | THIS: | ||
572 | id: Lingo Room/Panel_lingo_9 | ||
573 | colors: gray | ||
574 | tag: forbid | ||
575 | TIME ROOM: | ||
576 | id: Lingo Room/Panel_lingo_1 | ||
577 | colors: purple | ||
578 | tag: toppurp | ||
579 | SCIENCE ROOM: | ||
580 | id: Lingo Room/Panel_lingo_2 | ||
581 | tag: botwhite | ||
582 | SHINY ROCK ROOM: | ||
583 | id: Lingo Room/Panel_lingo_3 | ||
584 | tag: botwhite | ||
585 | ANGRY POWER: | ||
586 | id: Lingo Room/Panel_lingo_4 | ||
587 | colors: | ||
588 | - purple | ||
589 | tag: forbid | ||
590 | MICRO LEGION: | ||
591 | id: Lingo Room/Panel_lingo_5 | ||
592 | colors: yellow | ||
593 | tag: midyellow | ||
594 | LOSERS RELAX: | ||
595 | id: Lingo Room/Panel_lingo_6 | ||
596 | colors: | ||
597 | - black | ||
598 | tag: forbid | ||
599 | "906234": | ||
600 | id: Lingo Room/Panel_lingo_7 | ||
601 | colors: | ||
602 | - orange | ||
603 | - blue | ||
604 | tag: forbid | ||
605 | MOOR EMORDNILAP: | ||
606 | id: Lingo Room/Panel_lingo_8 | ||
607 | colors: black | ||
608 | tag: midblack | ||
609 | HALL ROOMMATE: | ||
610 | id: Lingo Room/Panel_lingo_10 | ||
611 | colors: | ||
612 | - red | ||
613 | - blue | ||
614 | tag: forbid | ||
615 | ALL GREY: | ||
616 | id: Lingo Room/Panel_lingo_11 | ||
617 | colors: yellow | ||
618 | tag: midyellow | ||
619 | PLUNDER ISLAND: | ||
620 | id: Lingo Room/Panel_lingo_12 | ||
621 | colors: | ||
622 | - purple | ||
623 | - red | ||
624 | tag: forbid | ||
625 | FLOSS PATHS: | ||
626 | id: Lingo Room/Panel_lingo_13 | ||
627 | colors: | ||
628 | - purple | ||
629 | - brown | ||
630 | tag: forbid | ||
631 | doors: | ||
632 | Shortcut to The Seeker: | ||
633 | id: Master Room Doors/Door_pilgrim_shortcut | ||
634 | include_reduce: True | ||
635 | panels: | ||
636 | - THIS | ||
637 | Crossroads: | ||
638 | entrances: | ||
639 | Hub Room: True # The sunwarp means that we never need the ORDER door | ||
640 | Color Hallways: True | ||
641 | The Tenacious: | ||
642 | door: Tenacious Entrance | ||
643 | Orange Tower Fourth Floor: True # through IRK HORN | ||
644 | Amen Name Area: | ||
645 | room: Lost Area | ||
646 | door: Exit | ||
647 | Roof: True # through the sunwarp | ||
648 | panels: | ||
649 | DECAY: | ||
650 | id: Palindrome Room/Panel_decay_day | ||
651 | colors: red | ||
652 | tag: midred | ||
653 | NOPE: | ||
654 | id: Sun Room/Panel_nope_open | ||
655 | colors: yellow | ||
656 | tag: midyellow | ||
657 | EIGHT: | ||
658 | id: Backside Room/Panel_eight_eight_5 | ||
659 | tag: midwhite | ||
660 | required_door: | ||
661 | room: Number Hunt | ||
662 | door: Eights | ||
663 | WE ROT: | ||
664 | id: Shuffle Room/Panel_tower | ||
665 | colors: yellow | ||
666 | tag: midyellow | ||
667 | WORDS: | ||
668 | id: Shuffle Room/Panel_words_sword | ||
669 | colors: yellow | ||
670 | tag: midyellow | ||
671 | SWORD: | ||
672 | id: Shuffle Room/Panel_sword_words | ||
673 | colors: yellow | ||
674 | tag: midyellow | ||
675 | TURN: | ||
676 | id: Shuffle Room/Panel_turn_runt | ||
677 | colors: yellow | ||
678 | tag: midyellow | ||
679 | BEND HI: | ||
680 | id: Shuffle Room/Panel_behind | ||
681 | colors: yellow | ||
682 | tag: midyellow | ||
683 | THE EYES: | ||
684 | id: Shuffle Room/Panel_eyes_see_shuffle | ||
685 | colors: yellow | ||
686 | check: True | ||
687 | exclude_reduce: True | ||
688 | required_door: | ||
689 | door: Hollow Hallway | ||
690 | tag: midyellow | ||
691 | CORNER: | ||
692 | id: Shuffle Room/Panel_corner_corner | ||
693 | required_door: | ||
694 | door: Hollow Hallway | ||
695 | tag: midwhite | ||
696 | HOLLOW: | ||
697 | id: Shuffle Room/Panel_hollow_hollow | ||
698 | required_door: | ||
699 | door: Hollow Hallway | ||
700 | tag: midwhite | ||
701 | SWAP: | ||
702 | id: Shuffle Room/Panel_swap_wasp | ||
703 | colors: yellow | ||
704 | tag: midyellow | ||
705 | GEL: | ||
706 | id: Shuffle Room/Panel_gel | ||
707 | colors: yellow | ||
708 | tag: topyellow | ||
709 | required_door: | ||
710 | door: Tower Entrance | ||
711 | THOUGH: | ||
712 | id: Shuffle Room/Panel_though | ||
713 | colors: yellow | ||
714 | tag: topyellow | ||
715 | required_door: | ||
716 | door: Tower Entrance | ||
717 | CROSSROADS: | ||
718 | id: Shuffle Room/Panel_crossroads_crossroads | ||
719 | tag: midwhite | ||
720 | doors: | ||
721 | Tenacious Entrance: | ||
722 | id: Palindrome Room Area Doors/Door_decay_day | ||
723 | group: Entrances to The Tenacious | ||
724 | panels: | ||
725 | - DECAY | ||
726 | Discerning Entrance: | ||
727 | id: Shuffle Room Area Doors/Door_nope_open | ||
728 | item_name: The Discerning - Entrance | ||
729 | panels: | ||
730 | - NOPE | ||
731 | Tower Entrance: | ||
732 | id: | ||
733 | - Shuffle Room Area Doors/Door_tower | ||
734 | - Shuffle Room Area Doors/Door_tower2 | ||
735 | - Shuffle Room Area Doors/Door_tower3 | ||
736 | - Shuffle Room Area Doors/Door_tower4 | ||
737 | group: Crossroads - Tower Entrances | ||
738 | panels: | ||
739 | - WE ROT | ||
740 | Tower Back Entrance: | ||
741 | id: Shuffle Room Area Doors/Door_runt | ||
742 | location_name: Crossroads - TURN/RUNT | ||
743 | group: Crossroads - Tower Entrances | ||
744 | panels: | ||
745 | - TURN | ||
746 | - room: Orange Tower Fourth Floor | ||
747 | panel: RUNT | ||
748 | Words Sword Door: | ||
749 | id: | ||
750 | - Shuffle Room Area Doors/Door_words_shuffle_3 | ||
751 | - Shuffle Room Area Doors/Door_words_shuffle_4 | ||
752 | group: Crossroads Doors | ||
753 | panels: | ||
754 | - WORDS | ||
755 | - SWORD | ||
756 | Eye Wall: | ||
757 | id: Shuffle Room Area Doors/Door_behind | ||
758 | junk_item: True | ||
759 | group: Crossroads Doors | ||
760 | panels: | ||
761 | - BEND HI | ||
762 | Hollow Hallway: | ||
763 | id: Shuffle Room Area Doors/Door_crossroads6 | ||
764 | skip_location: True | ||
765 | group: Crossroads Doors | ||
766 | panels: | ||
767 | - BEND HI | ||
768 | Roof Access: | ||
769 | id: Tower Room Area Doors/Door_level_6_2 | ||
770 | skip_location: True | ||
771 | panels: | ||
772 | - room: Orange Tower First Floor | ||
773 | panel: DADS + ALE | ||
774 | - room: Outside The Undeterred | ||
775 | panel: ART + ART | ||
776 | - room: Orange Tower Third Floor | ||
777 | panel: DEER + WREN | ||
778 | - room: Orange Tower Fourth Floor | ||
779 | panel: LEARNS + UNSEW | ||
780 | - room: Orange Tower Fifth Floor | ||
781 | panel: DRAWL + RUNS | ||
782 | - room: Owl Hallway | ||
783 | panel: READS + RUST | ||
784 | paintings: | ||
785 | - id: eye_painting | ||
786 | disable: True | ||
787 | orientation: east | ||
788 | move: True | ||
789 | required_door: | ||
790 | door: Eye Wall | ||
791 | - id: smile_painting_4 | ||
792 | orientation: south | ||
793 | Lost Area: | ||
794 | entrances: | ||
795 | Outside The Agreeable: | ||
796 | door: Exit | ||
797 | Crossroads: | ||
798 | room: Crossroads | ||
799 | door: Words Sword Door | ||
800 | panels: | ||
801 | LOST (1): | ||
802 | id: Shuffle Room/Panel_lost_lots | ||
803 | colors: yellow | ||
804 | tag: midyellow | ||
805 | LOST (2): | ||
806 | id: Shuffle Room/Panel_lost_slot | ||
807 | colors: yellow | ||
808 | tag: midyellow | ||
809 | doors: | ||
810 | Exit: | ||
811 | id: | ||
812 | - Shuffle Room Area Doors/Door_lost_shuffle_1 | ||
813 | - Shuffle Room Area Doors/Door_lost_shuffle_2 | ||
814 | location_name: Crossroads - LOST Pair | ||
815 | panels: | ||
816 | - LOST (1) | ||
817 | - LOST (2) | ||
818 | Amen Name Area: | ||
819 | entrances: | ||
820 | Crossroads: | ||
821 | room: Lost Area | ||
822 | door: Exit | ||
823 | Suits Area: | ||
824 | door: Exit | ||
825 | panels: | ||
826 | AMEN: | ||
827 | id: Shuffle Room/Panel_amen_mean | ||
828 | colors: yellow | ||
829 | tag: double midyellow | ||
830 | subtag: left | ||
831 | link: ana MEAN | ||
832 | NAME: | ||
833 | id: Shuffle Room/Panel_name_mean | ||
834 | colors: yellow | ||
835 | tag: double midyellow | ||
836 | subtag: right | ||
837 | link: ana MEAN | ||
838 | NINE: | ||
839 | id: Backside Room/Panel_nine_nine_3 | ||
840 | tag: midwhite | ||
841 | required_door: | ||
842 | room: Number Hunt | ||
843 | door: Nines | ||
844 | doors: | ||
845 | Exit: | ||
846 | id: Shuffle Room Area Doors/Door_mean | ||
847 | panels: | ||
848 | - AMEN | ||
849 | - NAME | ||
850 | Suits Area: | ||
851 | entrances: | ||
852 | Amen Name Area: | ||
853 | room: Amen Name Area | ||
854 | door: Exit | ||
855 | Roof: True | ||
856 | panels: | ||
857 | SPADES: | ||
858 | id: Cross Room/Panel_spades_spades | ||
859 | tag: midwhite | ||
860 | CLUBS: | ||
861 | id: Cross Room/Panel_clubs_clubs | ||
862 | tag: midwhite | ||
863 | HEARTS: | ||
864 | id: Cross Room/Panel_hearts_hearts | ||
865 | tag: midwhite | ||
866 | paintings: | ||
867 | - id: west_afar | ||
868 | orientation: south | ||
869 | The Tenacious: | ||
870 | entrances: | ||
871 | Hub Room: | ||
872 | - room: Hub Room | ||
873 | door: Tenacious Entrance | ||
874 | - door: Shortcut to Hub Room | ||
875 | Crossroads: | ||
876 | room: Crossroads | ||
877 | door: Tenacious Entrance | ||
878 | Outside The Agreeable: | ||
879 | room: Outside The Agreeable | ||
880 | door: Tenacious Entrance | ||
881 | Dread Hallway: | ||
882 | room: Dread Hallway | ||
883 | door: Tenacious Entrance | ||
884 | panels: | ||
885 | LEVEL (Black): | ||
886 | id: Palindrome Room/Panel_level_level | ||
887 | colors: black | ||
888 | tag: midblack | ||
889 | RACECAR (Black): | ||
890 | id: Palindrome Room/Panel_racecar_racecar | ||
891 | colors: black | ||
892 | tag: palindrome | ||
893 | copy_to_sign: sign4 | ||
894 | SOLOS (Black): | ||
895 | id: Palindrome Room/Panel_solos_solos | ||
896 | colors: black | ||
897 | tag: palindrome | ||
898 | copy_to_sign: | ||
899 | - sign5 | ||
900 | - sign6 | ||
901 | LEVEL (White): | ||
902 | id: Palindrome Room/Panel_level_level_2 | ||
903 | tag: midwhite | ||
904 | RACECAR (White): | ||
905 | id: Palindrome Room/Panel_racecar_racecar_2 | ||
906 | tag: midwhite | ||
907 | copy_to_sign: sign3 | ||
908 | SOLOS (White): | ||
909 | id: Palindrome Room/Panel_solos_solos_2 | ||
910 | tag: midwhite | ||
911 | copy_to_sign: | ||
912 | - sign1 | ||
913 | - sign2 | ||
914 | Achievement: | ||
915 | id: Countdown Panels/Panel_tenacious_tenacious | ||
916 | check: True | ||
917 | tag: forbid | ||
918 | required_panel: | ||
919 | - panel: LEVEL (Black) | ||
920 | - panel: RACECAR (Black) | ||
921 | - panel: SOLOS (Black) | ||
922 | - panel: LEVEL (White) | ||
923 | - panel: RACECAR (White) | ||
924 | - panel: SOLOS (White) | ||
925 | - room: Hub Room | ||
926 | panel: SLAUGHTER | ||
927 | - room: Crossroads | ||
928 | panel: DECAY | ||
929 | - room: Outside The Agreeable | ||
930 | panel: MASSACRED | ||
931 | - room: Dread Hallway | ||
932 | panel: DREAD | ||
933 | achievement: The Tenacious | ||
934 | doors: | ||
935 | Shortcut to Hub Room: | ||
936 | id: | ||
937 | - Palindrome Room Area Doors/Door_level_level_1 | ||
938 | - Palindrome Room Area Doors/Door_racecar_racecar_1 | ||
939 | - Palindrome Room Area Doors/Door_solos_solos_1 | ||
940 | location_name: The Tenacious - Palindromes | ||
941 | group: Entrances to The Tenacious | ||
942 | panels: | ||
943 | - LEVEL (Black) | ||
944 | - RACECAR (Black) | ||
945 | - SOLOS (Black) | ||
946 | White Palindromes: | ||
947 | location_name: The Tenacious - White Palindromes | ||
948 | skip_item: True | ||
949 | panels: | ||
950 | - LEVEL (White) | ||
951 | - RACECAR (White) | ||
952 | - SOLOS (White) | ||
953 | Warts Straw Area: | ||
954 | entrances: | ||
955 | Hub Room: | ||
956 | room: Hub Room | ||
957 | door: Symmetry Door | ||
958 | Leaf Feel Area: | ||
959 | door: Door | ||
960 | panels: | ||
961 | WARTS: | ||
962 | id: Symmetry Room/Panel_warts_straw | ||
963 | colors: black | ||
964 | tag: midblack | ||
965 | STRAW: | ||
966 | id: Symmetry Room/Panel_straw_warts | ||
967 | colors: black | ||
968 | tag: midblack | ||
969 | doors: | ||
970 | Door: | ||
971 | id: | ||
972 | - Symmetry Room Area Doors/Door_warts_straw | ||
973 | - Symmetry Room Area Doors/Door_straw_warts | ||
974 | group: Symmetry Doors | ||
975 | panels: | ||
976 | - WARTS | ||
977 | - STRAW | ||
978 | Leaf Feel Area: | ||
979 | entrances: | ||
980 | Warts Straw Area: | ||
981 | room: Warts Straw Area | ||
982 | door: Door | ||
983 | Outside The Agreeable: | ||
984 | door: Door | ||
985 | panels: | ||
986 | LEAF: | ||
987 | id: Symmetry Room/Panel_leaf_feel | ||
988 | colors: black | ||
989 | tag: topblack | ||
990 | FEEL: | ||
991 | id: Symmetry Room/Panel_feel_leaf | ||
992 | colors: black | ||
993 | tag: topblack | ||
994 | doors: | ||
995 | Door: | ||
996 | id: | ||
997 | - Symmetry Room Area Doors/Door_leaf_feel | ||
998 | - Symmetry Room Area Doors/Door_feel_leaf | ||
999 | group: Symmetry Doors | ||
1000 | panels: | ||
1001 | - LEAF | ||
1002 | - FEEL | ||
1003 | Outside The Agreeable: | ||
1004 | # Let's ignore the blue warp thing for now because the lookout is a dead | ||
1005 | # end. Later on it could be filler checks. | ||
1006 | entrances: | ||
1007 | # We don't have to list Lost Area because of Crossroads. | ||
1008 | Crossroads: True | ||
1009 | The Tenacious: | ||
1010 | door: Tenacious Entrance | ||
1011 | The Agreeable: | ||
1012 | door: Agreeable Entrance | ||
1013 | Dread Hallway: | ||
1014 | door: Black Door | ||
1015 | Leaf Feel Area: | ||
1016 | room: Leaf Feel Area | ||
1017 | door: Door | ||
1018 | Starting Room: | ||
1019 | door: Painting Shortcut | ||
1020 | painting: True | ||
1021 | Hallway Room (2): True | ||
1022 | Hallway Room (3): True | ||
1023 | Hallway Room (4): True | ||
1024 | Hedge Maze: True # through the door to the sectioned-off part of the hedge maze | ||
1025 | panels: | ||
1026 | MASSACRED: | ||
1027 | id: Palindrome Room/Panel_massacred_sacred | ||
1028 | colors: red | ||
1029 | tag: midred | ||
1030 | BLACK: | ||
1031 | id: Symmetry Room/Panel_black_white | ||
1032 | colors: black | ||
1033 | tag: botblack | ||
1034 | CLOSE: | ||
1035 | id: Antonym Room/Panel_close_open | ||
1036 | colors: black | ||
1037 | tag: botblack | ||
1038 | LEFT: | ||
1039 | id: Symmetry Room/Panel_left_right | ||
1040 | colors: black | ||
1041 | tag: botblack | ||
1042 | LEFT (2): | ||
1043 | id: Symmetry Room/Panel_left_wrong | ||
1044 | colors: black | ||
1045 | tag: bot black black | ||
1046 | RIGHT: | ||
1047 | id: Symmetry Room/Panel_right_left | ||
1048 | colors: black | ||
1049 | tag: botblack | ||
1050 | PURPLE: | ||
1051 | id: Color Arrow Room/Panel_purple_afar | ||
1052 | tag: midwhite | ||
1053 | required_door: | ||
1054 | door: Purple Barrier | ||
1055 | FIVE (1): | ||
1056 | id: Backside Room/Panel_five_five_5 | ||
1057 | tag: midwhite | ||
1058 | required_door: | ||
1059 | room: Outside The Undeterred | ||
1060 | door: Fives | ||
1061 | FIVE (2): | ||
1062 | id: Backside Room/Panel_five_five_4 | ||
1063 | tag: midwhite | ||
1064 | required_door: | ||
1065 | room: Outside The Undeterred | ||
1066 | door: Fives | ||
1067 | OUT: | ||
1068 | id: Hallway Room/Panel_out_out | ||
1069 | check: True | ||
1070 | exclude_reduce: True | ||
1071 | tag: midwhite | ||
1072 | HIDE: | ||
1073 | id: Maze Room/Panel_hide_seek_4 | ||
1074 | colors: black | ||
1075 | tag: botblack | ||
1076 | DAZE: | ||
1077 | id: Maze Room/Panel_daze_maze | ||
1078 | colors: purple | ||
1079 | tag: midpurp | ||
1080 | WALL: | ||
1081 | id: Hallway Room/Panel_castle_1 | ||
1082 | colors: blue | ||
1083 | tag: quad bot blue | ||
1084 | link: qbb CASTLE | ||
1085 | KEEP: | ||
1086 | id: Hallway Room/Panel_castle_2 | ||
1087 | colors: blue | ||
1088 | tag: quad bot blue | ||
1089 | link: qbb CASTLE | ||
1090 | BAILEY: | ||
1091 | id: Hallway Room/Panel_castle_3 | ||
1092 | colors: blue | ||
1093 | tag: quad bot blue | ||
1094 | link: qbb CASTLE | ||
1095 | TOWER: | ||
1096 | id: Hallway Room/Panel_castle_4 | ||
1097 | colors: blue | ||
1098 | tag: quad bot blue | ||
1099 | link: qbb CASTLE | ||
1100 | NORTH: | ||
1101 | id: Cross Room/Panel_north_missing | ||
1102 | colors: green | ||
1103 | tag: forbid | ||
1104 | required_room: Outside The Bold | ||
1105 | DIAMONDS: | ||
1106 | id: Cross Room/Panel_diamonds_missing | ||
1107 | colors: green | ||
1108 | tag: forbid | ||
1109 | required_room: Suits Area | ||
1110 | FIRE: | ||
1111 | id: Cross Room/Panel_fire_missing | ||
1112 | colors: green | ||
1113 | tag: forbid | ||
1114 | required_room: Elements Area | ||
1115 | WINTER: | ||
1116 | id: Cross Room/Panel_winter_missing | ||
1117 | colors: green | ||
1118 | tag: forbid | ||
1119 | required_room: Orange Tower Fifth Floor | ||
1120 | doors: | ||
1121 | Tenacious Entrance: | ||
1122 | id: Palindrome Room Area Doors/Door_massacred_sacred | ||
1123 | group: Entrances to The Tenacious | ||
1124 | panels: | ||
1125 | - MASSACRED | ||
1126 | Black Door: | ||
1127 | id: Symmetry Room Area Doors/Door_black_white | ||
1128 | group: Entrances to The Tenacious | ||
1129 | panels: | ||
1130 | - BLACK | ||
1131 | Agreeable Entrance: | ||
1132 | id: Symmetry Room Area Doors/Door_close_open | ||
1133 | item_name: The Agreeable - Entrance | ||
1134 | panels: | ||
1135 | - CLOSE | ||
1136 | Painting Shortcut: | ||
1137 | item_name: Starting Room - Street Painting | ||
1138 | painting_id: eyes_yellow_painting2 | ||
1139 | panels: | ||
1140 | - RIGHT | ||
1141 | Purple Barrier: | ||
1142 | id: Color Arrow Room Doors/Door_purple_3 | ||
1143 | group: Color Hunt Barriers | ||
1144 | skip_location: True | ||
1145 | panels: | ||
1146 | - room: Champion's Rest | ||
1147 | panel: PURPLE | ||
1148 | Hallway Door: | ||
1149 | id: Red Blue Purple Room Area Doors/Door_room_2 | ||
1150 | group: Hallway Room Doors | ||
1151 | location_name: Hallway Room - First Room | ||
1152 | panels: | ||
1153 | - WALL | ||
1154 | - KEEP | ||
1155 | - BAILEY | ||
1156 | - TOWER | ||
1157 | paintings: | ||
1158 | - id: panda_painting | ||
1159 | orientation: south | ||
1160 | - id: eyes_yellow_painting | ||
1161 | orientation: east | ||
1162 | progression: | ||
1163 | Progressive Hallway Room: | ||
1164 | - Hallway Door | ||
1165 | - room: Hallway Room (2) | ||
1166 | door: Exit | ||
1167 | - room: Hallway Room (3) | ||
1168 | door: Exit | ||
1169 | - room: Hallway Room (4) | ||
1170 | door: Exit | ||
1171 | Dread Hallway: | ||
1172 | entrances: | ||
1173 | Outside The Agreeable: | ||
1174 | room: Outside The Agreeable | ||
1175 | door: Black Door | ||
1176 | The Tenacious: | ||
1177 | door: Tenacious Entrance | ||
1178 | panels: | ||
1179 | DREAD: | ||
1180 | id: Palindrome Room/Panel_dread_dead | ||
1181 | colors: red | ||
1182 | tag: midred | ||
1183 | doors: | ||
1184 | Tenacious Entrance: | ||
1185 | id: Palindrome Room Area Doors/Door_dread_dead | ||
1186 | group: Entrances to The Tenacious | ||
1187 | panels: | ||
1188 | - DREAD | ||
1189 | The Agreeable: | ||
1190 | entrances: | ||
1191 | Outside The Agreeable: | ||
1192 | room: Outside The Agreeable | ||
1193 | door: Agreeable Entrance | ||
1194 | Hedge Maze: | ||
1195 | door: Shortcut to Hedge Maze | ||
1196 | panels: | ||
1197 | Achievement: | ||
1198 | id: Countdown Panels/Panel_disagreeable_agreeable | ||
1199 | colors: black | ||
1200 | tag: forbid | ||
1201 | required_room: Outside The Agreeable | ||
1202 | check: True | ||
1203 | achievement: The Agreeable | ||
1204 | BYE: | ||
1205 | id: Antonym Room/Panel_bye_hi | ||
1206 | colors: black | ||
1207 | tag: botblack | ||
1208 | RETOOL: | ||
1209 | id: Antonym Room/Panel_retool_looter | ||
1210 | colors: black | ||
1211 | tag: midblack | ||
1212 | DRAWER: | ||
1213 | id: Antonym Room/Panel_drawer_reward | ||
1214 | colors: black | ||
1215 | tag: midblack | ||
1216 | READ: | ||
1217 | id: Antonym Room/Panel_read_write | ||
1218 | colors: black | ||
1219 | tag: botblack | ||
1220 | DIFFERENT: | ||
1221 | id: Antonym Room/Panel_different_same | ||
1222 | colors: black | ||
1223 | tag: botblack | ||
1224 | LOW: | ||
1225 | id: Antonym Room/Panel_low_high | ||
1226 | colors: black | ||
1227 | tag: botblack | ||
1228 | ALIVE: | ||
1229 | id: Antonym Room/Panel_alive_dead | ||
1230 | colors: black | ||
1231 | tag: botblack | ||
1232 | THAT: | ||
1233 | id: Antonym Room/Panel_that_this | ||
1234 | colors: black | ||
1235 | tag: botblack | ||
1236 | STRESSED: | ||
1237 | id: Antonym Room/Panel_stressed_desserts | ||
1238 | colors: black | ||
1239 | tag: midblack | ||
1240 | STAR: | ||
1241 | id: Antonym Room/Panel_star_rats | ||
1242 | colors: black | ||
1243 | tag: midblack | ||
1244 | TAME: | ||
1245 | id: Antonym Room/Panel_tame_mate | ||
1246 | colors: black | ||
1247 | tag: topblack | ||
1248 | CAT: | ||
1249 | id: Antonym Room/Panel_cat_tack | ||
1250 | colors: black | ||
1251 | tag: topblack | ||
1252 | doors: | ||
1253 | Shortcut to Hedge Maze: | ||
1254 | id: Symmetry Room Area Doors/Door_bye_hi | ||
1255 | group: Hedge Maze Doors | ||
1256 | panels: | ||
1257 | - BYE | ||
1258 | Hedge Maze: | ||
1259 | entrances: | ||
1260 | Hub Room: | ||
1261 | room: Hub Room | ||
1262 | door: Shortcut to Hedge Maze | ||
1263 | Color Hallways: True | ||
1264 | The Agreeable: | ||
1265 | room: The Agreeable | ||
1266 | door: Shortcut to Hedge Maze | ||
1267 | The Perceptive: True | ||
1268 | The Observant: | ||
1269 | door: Observant Entrance | ||
1270 | Owl Hallway: | ||
1271 | room: Owl Hallway | ||
1272 | door: Shortcut to Hedge Maze | ||
1273 | Roof: True | ||
1274 | panels: | ||
1275 | DOWN: | ||
1276 | id: Maze Room/Panel_down_up | ||
1277 | colors: black | ||
1278 | tag: botblack | ||
1279 | HIDE (1): | ||
1280 | id: Maze Room/Panel_hide_seek | ||
1281 | colors: black | ||
1282 | tag: botblack | ||
1283 | HIDE (2): | ||
1284 | id: Maze Room/Panel_hide_seek_2 | ||
1285 | colors: black | ||
1286 | tag: botblack | ||
1287 | HIDE (3): | ||
1288 | id: Maze Room/Panel_hide_seek_3 | ||
1289 | colors: black | ||
1290 | tag: botblack | ||
1291 | MASTERY (1): | ||
1292 | id: Master Room/Panel_mastery_mastery5 | ||
1293 | tag: midwhite | ||
1294 | required_door: | ||
1295 | room: Orange Tower Seventh Floor | ||
1296 | door: Mastery | ||
1297 | MASTERY (2): | ||
1298 | id: Master Room/Panel_mastery_mastery9 | ||
1299 | tag: midwhite | ||
1300 | required_door: | ||
1301 | room: Orange Tower Seventh Floor | ||
1302 | door: Mastery | ||
1303 | PATH (1): | ||
1304 | id: Maze Room/Panel_path_lock | ||
1305 | colors: green | ||
1306 | tag: forbid | ||
1307 | PATH (2): | ||
1308 | id: Maze Room/Panel_path_knot | ||
1309 | colors: green | ||
1310 | tag: forbid | ||
1311 | PATH (3): | ||
1312 | id: Maze Room/Panel_path_lost | ||
1313 | colors: green | ||
1314 | tag: forbid | ||
1315 | PATH (4): | ||
1316 | id: Maze Room/Panel_path_open | ||
1317 | colors: green | ||
1318 | tag: forbid | ||
1319 | PATH (5): | ||
1320 | id: Maze Room/Panel_path_help | ||
1321 | colors: green | ||
1322 | tag: forbid | ||
1323 | PATH (6): | ||
1324 | id: Maze Room/Panel_path_hunt | ||
1325 | colors: green | ||
1326 | tag: forbid | ||
1327 | PATH (7): | ||
1328 | id: Maze Room/Panel_path_nest | ||
1329 | colors: green | ||
1330 | tag: forbid | ||
1331 | PATH (8): | ||
1332 | id: Maze Room/Panel_path_look | ||
1333 | colors: green | ||
1334 | tag: forbid | ||
1335 | REFLOW: | ||
1336 | id: Maze Room/Panel_reflow_flower | ||
1337 | colors: yellow | ||
1338 | tag: midyellow | ||
1339 | LEAP: | ||
1340 | id: Maze Room/Panel_leap_jump | ||
1341 | tag: botwhite | ||
1342 | doors: | ||
1343 | Perceptive Entrance: | ||
1344 | id: Maze Area Doors/Door_maze_maze | ||
1345 | item_name: The Perceptive - Entrance | ||
1346 | group: Hedge Maze Doors | ||
1347 | panels: | ||
1348 | - DOWN | ||
1349 | Painting Shortcut: | ||
1350 | painting_id: garden_painting_tower2 | ||
1351 | item_name: Starting Room - Hedge Maze Painting | ||
1352 | skip_location: True | ||
1353 | panels: | ||
1354 | - DOWN | ||
1355 | Observant Entrance: | ||
1356 | id: | ||
1357 | - Maze Area Doors/Door_look_room_1 | ||
1358 | - Maze Area Doors/Door_look_room_2 | ||
1359 | - Maze Area Doors/Door_look_room_3 | ||
1360 | skip_location: True | ||
1361 | item_name: The Observant - Entrance | ||
1362 | group: Observant Doors | ||
1363 | panels: | ||
1364 | - room: The Perceptive | ||
1365 | panel: GAZE | ||
1366 | Hide and Seek: | ||
1367 | skip_item: True | ||
1368 | location_name: Hedge Maze - Hide and Seek | ||
1369 | include_reduce: True | ||
1370 | panels: | ||
1371 | - HIDE (1) | ||
1372 | - HIDE (2) | ||
1373 | - HIDE (3) | ||
1374 | - room: Outside The Agreeable | ||
1375 | panel: HIDE | ||
1376 | The Perceptive: | ||
1377 | entrances: | ||
1378 | Starting Room: | ||
1379 | room: Hedge Maze | ||
1380 | door: Painting Shortcut | ||
1381 | painting: True | ||
1382 | Hedge Maze: | ||
1383 | room: Hedge Maze | ||
1384 | door: Perceptive Entrance | ||
1385 | panels: | ||
1386 | Achievement: | ||
1387 | id: Countdown Panels/Panel_perceptive_perceptive | ||
1388 | colors: green | ||
1389 | tag: forbid | ||
1390 | check: True | ||
1391 | achievement: The Perceptive | ||
1392 | GAZE: | ||
1393 | id: Maze Room/Panel_look_look | ||
1394 | check: True | ||
1395 | exclude_reduce: True | ||
1396 | tag: botwhite | ||
1397 | paintings: | ||
1398 | - id: garden_painting_tower | ||
1399 | orientation: north | ||
1400 | The Fearless (First Floor): | ||
1401 | entrances: | ||
1402 | The Perceptive: True | ||
1403 | panels: | ||
1404 | NAPS: | ||
1405 | id: Naps Room/Panel_naps_span | ||
1406 | colors: black | ||
1407 | tag: midblack | ||
1408 | TEAM: | ||
1409 | id: Naps Room/Panel_team_meet | ||
1410 | colors: black | ||
1411 | tag: topblack | ||
1412 | TEEM: | ||
1413 | id: Naps Room/Panel_teem_meat | ||
1414 | colors: black | ||
1415 | tag: topblack | ||
1416 | IMPATIENT: | ||
1417 | id: Naps Room/Panel_impatient_doctor | ||
1418 | colors: black | ||
1419 | tag: bot black black | ||
1420 | EAT: | ||
1421 | id: Naps Room/Panel_eat_tea | ||
1422 | colors: black | ||
1423 | tag: topblack | ||
1424 | doors: | ||
1425 | Second Floor: | ||
1426 | id: Naps Room Doors/Door_hider_5 | ||
1427 | location_name: The Fearless - First Floor Puzzles | ||
1428 | group: Fearless Doors | ||
1429 | panels: | ||
1430 | - NAPS | ||
1431 | - TEAM | ||
1432 | - TEEM | ||
1433 | - IMPATIENT | ||
1434 | - EAT | ||
1435 | progression: | ||
1436 | Progressive Fearless: | ||
1437 | - Second Floor | ||
1438 | - room: The Fearless (Second Floor) | ||
1439 | door: Third Floor | ||
1440 | The Fearless (Second Floor): | ||
1441 | entrances: | ||
1442 | The Fearless (First Floor): | ||
1443 | room: The Fearless (First Floor) | ||
1444 | door: Second Floor | ||
1445 | panels: | ||
1446 | NONE: | ||
1447 | id: Naps Room/Panel_one_many | ||
1448 | colors: black | ||
1449 | tag: bot black top white | ||
1450 | SUM: | ||
1451 | id: Naps Room/Panel_one_none | ||
1452 | colors: black | ||
1453 | tag: top white bot black | ||
1454 | FUNNY: | ||
1455 | id: Naps Room/Panel_funny_enough | ||
1456 | colors: black | ||
1457 | tag: topblack | ||
1458 | MIGHT: | ||
1459 | id: Naps Room/Panel_might_time | ||
1460 | colors: black | ||
1461 | tag: topblack | ||
1462 | SAFE: | ||
1463 | id: Naps Room/Panel_safe_face | ||
1464 | colors: black | ||
1465 | tag: topblack | ||
1466 | SAME: | ||
1467 | id: Naps Room/Panel_same_mace | ||
1468 | colors: black | ||
1469 | tag: topblack | ||
1470 | CAME: | ||
1471 | id: Naps Room/Panel_came_make | ||
1472 | colors: black | ||
1473 | tag: topblack | ||
1474 | doors: | ||
1475 | Third Floor: | ||
1476 | id: | ||
1477 | - Naps Room Doors/Door_hider_1b2 | ||
1478 | - Naps Room Doors/Door_hider_new1 | ||
1479 | location_name: The Fearless - Second Floor Puzzles | ||
1480 | group: Fearless Doors | ||
1481 | panels: | ||
1482 | - NONE | ||
1483 | - SUM | ||
1484 | - FUNNY | ||
1485 | - MIGHT | ||
1486 | - SAFE | ||
1487 | - SAME | ||
1488 | - CAME | ||
1489 | The Fearless: | ||
1490 | entrances: | ||
1491 | The Fearless (First Floor): | ||
1492 | room: The Fearless (Second Floor) | ||
1493 | door: Third Floor | ||
1494 | panels: | ||
1495 | Achievement: | ||
1496 | id: Countdown Panels/Panel_fearless_fearless | ||
1497 | colors: black | ||
1498 | tag: forbid | ||
1499 | check: True | ||
1500 | achievement: The Fearless | ||
1501 | EASY: | ||
1502 | id: Naps Room/Panel_easy_soft | ||
1503 | colors: black | ||
1504 | tag: bot black black | ||
1505 | SOMETIMES: | ||
1506 | id: Naps Room/Panel_sometimes_always | ||
1507 | colors: black | ||
1508 | tag: bot black black | ||
1509 | DARK: | ||
1510 | id: Naps Room/Panel_dark_extinguish | ||
1511 | colors: black | ||
1512 | tag: bot black black | ||
1513 | EVEN: | ||
1514 | id: Naps Room/Panel_even_ordinary | ||
1515 | colors: black | ||
1516 | tag: bot black black | ||
1517 | The Observant: | ||
1518 | entrances: | ||
1519 | Hedge Maze: | ||
1520 | room: Hedge Maze | ||
1521 | door: Observant Entrance | ||
1522 | The Incomparable: True | ||
1523 | panels: | ||
1524 | Achievement: | ||
1525 | id: Countdown Panels/Panel_observant_observant | ||
1526 | colors: green | ||
1527 | check: True | ||
1528 | tag: forbid | ||
1529 | required_door: | ||
1530 | door: Stairs | ||
1531 | achievement: The Observant | ||
1532 | BACK: | ||
1533 | id: Look Room/Panel_four_back | ||
1534 | colors: green | ||
1535 | tag: forbid | ||
1536 | SIDE: | ||
1537 | id: Look Room/Panel_four_side | ||
1538 | colors: green | ||
1539 | tag: forbid | ||
1540 | BACKSIDE: | ||
1541 | id: Backside Room/Panel_backside_2 | ||
1542 | tag: midwhite | ||
1543 | required_door: | ||
1544 | door: Backside Door | ||
1545 | STAIRS: | ||
1546 | id: Look Room/Panel_six_stairs | ||
1547 | colors: green | ||
1548 | tag: forbid | ||
1549 | WAYS: | ||
1550 | id: Look Room/Panel_four_ways | ||
1551 | colors: green | ||
1552 | tag: forbid | ||
1553 | "ON": | ||
1554 | id: Look Room/Panel_two_on | ||
1555 | colors: green | ||
1556 | tag: forbid | ||
1557 | UP: | ||
1558 | id: Look Room/Panel_two_up | ||
1559 | colors: green | ||
1560 | tag: forbid | ||
1561 | SWIMS: | ||
1562 | id: Look Room/Panel_five_swims | ||
1563 | colors: green | ||
1564 | tag: forbid | ||
1565 | UPSTAIRS: | ||
1566 | id: Look Room/Panel_eight_upstairs | ||
1567 | colors: green | ||
1568 | tag: forbid | ||
1569 | required_door: | ||
1570 | door: Stairs | ||
1571 | TOIL: | ||
1572 | id: Look Room/Panel_blue_toil | ||
1573 | colors: green | ||
1574 | tag: forbid | ||
1575 | required_door: | ||
1576 | door: Stairs | ||
1577 | STOP: | ||
1578 | id: Look Room/Panel_four_stop | ||
1579 | colors: green | ||
1580 | tag: forbid | ||
1581 | required_door: | ||
1582 | door: Stairs | ||
1583 | TOP: | ||
1584 | id: Look Room/Panel_aqua_top | ||
1585 | colors: green | ||
1586 | tag: forbid | ||
1587 | required_door: | ||
1588 | door: Stairs | ||
1589 | HI: | ||
1590 | id: Look Room/Panel_blue_hi | ||
1591 | colors: green | ||
1592 | tag: forbid | ||
1593 | required_door: | ||
1594 | door: Stairs | ||
1595 | HI (2): | ||
1596 | id: Look Room/Panel_blue_hi2 | ||
1597 | colors: green | ||
1598 | tag: forbid | ||
1599 | required_door: | ||
1600 | door: Stairs | ||
1601 | "31": | ||
1602 | id: Look Room/Panel_numbers_31 | ||
1603 | colors: green | ||
1604 | tag: forbid | ||
1605 | required_door: | ||
1606 | door: Stairs | ||
1607 | "52": | ||
1608 | id: Look Room/Panel_numbers_52 | ||
1609 | colors: green | ||
1610 | tag: forbid | ||
1611 | required_door: | ||
1612 | door: Stairs | ||
1613 | OIL: | ||
1614 | id: Look Room/Panel_aqua_oil | ||
1615 | colors: green | ||
1616 | tag: forbid | ||
1617 | required_door: | ||
1618 | door: Stairs | ||
1619 | BACKSIDE (GREEN): | ||
1620 | id: Look Room/Panel_eight_backside | ||
1621 | colors: green | ||
1622 | tag: forbid | ||
1623 | required_door: | ||
1624 | door: Stairs | ||
1625 | SIDEWAYS: | ||
1626 | id: Look Room/Panel_eight_sideways | ||
1627 | colors: green | ||
1628 | tag: forbid | ||
1629 | required_door: | ||
1630 | door: Stairs | ||
1631 | doors: | ||
1632 | Backside Door: | ||
1633 | id: Maze Area Doors/Door_backside | ||
1634 | group: Backside Doors | ||
1635 | panels: | ||
1636 | - BACK | ||
1637 | - SIDE | ||
1638 | Stairs: | ||
1639 | id: Maze Area Doors/Door_stairs | ||
1640 | group: Observant Doors | ||
1641 | panels: | ||
1642 | - STAIRS | ||
1643 | The Incomparable: | ||
1644 | entrances: | ||
1645 | The Observant: True # Assuming that access to The Observant includes access to the right entrance | ||
1646 | Eight Room: True | ||
1647 | Eight Alcove: | ||
1648 | door: Eight Painting | ||
1649 | panels: | ||
1650 | Achievement: | ||
1651 | id: Countdown Panels/Panel_incomparable_incomparable | ||
1652 | colors: blue | ||
1653 | check: True | ||
1654 | tag: forbid | ||
1655 | required_room: | ||
1656 | - Elements Area | ||
1657 | - Courtyard | ||
1658 | - Eight Room | ||
1659 | achievement: The Incomparable | ||
1660 | A (One): | ||
1661 | id: Strand Room/Panel_blank_a | ||
1662 | colors: blue | ||
1663 | tag: forbid | ||
1664 | A (Two): | ||
1665 | id: Strand Room/Panel_a_an | ||
1666 | colors: blue | ||
1667 | tag: forbid | ||
1668 | A (Three): | ||
1669 | id: Strand Room/Panel_a_and | ||
1670 | colors: blue | ||
1671 | tag: forbid | ||
1672 | A (Four): | ||
1673 | id: Strand Room/Panel_a_sand | ||
1674 | colors: blue | ||
1675 | tag: forbid | ||
1676 | A (Five): | ||
1677 | id: Strand Room/Panel_a_stand | ||
1678 | colors: blue | ||
1679 | tag: forbid | ||
1680 | A (Six): | ||
1681 | id: Strand Room/Panel_a_strand | ||
1682 | colors: blue | ||
1683 | tag: forbid | ||
1684 | I (One): | ||
1685 | id: Strand Room/Panel_blank_i | ||
1686 | colors: blue | ||
1687 | tag: forbid | ||
1688 | I (Two): | ||
1689 | id: Strand Room/Panel_i_in | ||
1690 | colors: blue | ||
1691 | tag: forbid | ||
1692 | I (Three): | ||
1693 | id: Strand Room/Panel_i_sin | ||
1694 | colors: blue | ||
1695 | tag: forbid | ||
1696 | I (Four): | ||
1697 | id: Strand Room/Panel_i_sing | ||
1698 | colors: blue | ||
1699 | tag: forbid | ||
1700 | I (Five): | ||
1701 | id: Strand Room/Panel_i_sting | ||
1702 | colors: blue | ||
1703 | tag: forbid | ||
1704 | I (Six): | ||
1705 | id: Strand Room/Panel_i_string | ||
1706 | colors: blue | ||
1707 | tag: forbid | ||
1708 | I (Seven): | ||
1709 | id: Strand Room/Panel_i_strings | ||
1710 | colors: blue | ||
1711 | tag: forbid | ||
1712 | doors: | ||
1713 | Eight Painting: | ||
1714 | id: Red Blue Purple Room Area Doors/Door_a_strands | ||
1715 | location_name: Giant Sevens | ||
1716 | group: Observant Doors | ||
1717 | panels: | ||
1718 | - I (Seven) | ||
1719 | - room: Courtyard | ||
1720 | panel: I | ||
1721 | - room: Elements Area | ||
1722 | panel: A | ||
1723 | Eight Alcove: | ||
1724 | entrances: | ||
1725 | The Incomparable: | ||
1726 | room: The Incomparable | ||
1727 | door: Eight Painting | ||
1728 | paintings: | ||
1729 | - id: eight_painting2 | ||
1730 | orientation: north | ||
1731 | Eight Room: | ||
1732 | entrances: | ||
1733 | Eight Alcove: | ||
1734 | painting: True | ||
1735 | panels: | ||
1736 | Eight Back: | ||
1737 | id: Strand Room/Panel_i_starling | ||
1738 | colors: blue | ||
1739 | tag: forbid | ||
1740 | Eight Front: | ||
1741 | id: Strand Room/Panel_i_starting | ||
1742 | colors: blue | ||
1743 | tag: forbid | ||
1744 | Nine: | ||
1745 | id: Strand Room/Panel_i_startling | ||
1746 | colors: blue | ||
1747 | tag: forbid | ||
1748 | paintings: | ||
1749 | - id: eight_painting | ||
1750 | orientation: south | ||
1751 | exit_only: True | ||
1752 | required: True | ||
1753 | Orange Tower: | ||
1754 | # This is a special, meta-ish room. | ||
1755 | entrances: | ||
1756 | Menu: True | ||
1757 | doors: | ||
1758 | Second Floor: | ||
1759 | id: Tower Room Area Doors/Door_level_1 | ||
1760 | skip_location: True | ||
1761 | panels: | ||
1762 | - room: Orange Tower First Floor | ||
1763 | panel: DADS + ALE | ||
1764 | Third Floor: | ||
1765 | id: Tower Room Area Doors/Door_level_2 | ||
1766 | skip_location: True | ||
1767 | panels: | ||
1768 | - room: Orange Tower First Floor | ||
1769 | panel: DADS + ALE | ||
1770 | - room: Outside The Undeterred | ||
1771 | panel: ART + ART | ||
1772 | Fourth Floor: | ||
1773 | id: Tower Room Area Doors/Door_level_3 | ||
1774 | skip_location: True | ||
1775 | panels: | ||
1776 | - room: Orange Tower First Floor | ||
1777 | panel: DADS + ALE | ||
1778 | - room: Outside The Undeterred | ||
1779 | panel: ART + ART | ||
1780 | - room: Orange Tower Third Floor | ||
1781 | panel: DEER + WREN | ||
1782 | Fifth Floor: | ||
1783 | id: Tower Room Area Doors/Door_level_4 | ||
1784 | skip_location: True | ||
1785 | panels: | ||
1786 | - room: Orange Tower First Floor | ||
1787 | panel: DADS + ALE | ||
1788 | - room: Outside The Undeterred | ||
1789 | panel: ART + ART | ||
1790 | - room: Orange Tower Third Floor | ||
1791 | panel: DEER + WREN | ||
1792 | - room: Orange Tower Fourth Floor | ||
1793 | panel: LEARNS + UNSEW | ||
1794 | Sixth Floor: | ||
1795 | id: Tower Room Area Doors/Door_level_5 | ||
1796 | skip_location: True | ||
1797 | panels: | ||
1798 | - room: Orange Tower First Floor | ||
1799 | panel: DADS + ALE | ||
1800 | - room: Outside The Undeterred | ||
1801 | panel: ART + ART | ||
1802 | - room: Orange Tower Third Floor | ||
1803 | panel: DEER + WREN | ||
1804 | - room: Orange Tower Fourth Floor | ||
1805 | panel: LEARNS + UNSEW | ||
1806 | - room: Orange Tower Fifth Floor | ||
1807 | panel: DRAWL + RUNS | ||
1808 | Seventh Floor: | ||
1809 | id: Tower Room Area Doors/Door_level_6 | ||
1810 | skip_location: True | ||
1811 | panels: | ||
1812 | - room: Orange Tower First Floor | ||
1813 | panel: DADS + ALE | ||
1814 | - room: Outside The Undeterred | ||
1815 | panel: ART + ART | ||
1816 | - room: Orange Tower Third Floor | ||
1817 | panel: DEER + WREN | ||
1818 | - room: Orange Tower Fourth Floor | ||
1819 | panel: LEARNS + UNSEW | ||
1820 | - room: Orange Tower Fifth Floor | ||
1821 | panel: DRAWL + RUNS | ||
1822 | - room: Owl Hallway | ||
1823 | panel: READS + RUST | ||
1824 | progression: | ||
1825 | Progressive Orange Tower: | ||
1826 | - Second Floor | ||
1827 | - Third Floor | ||
1828 | - Fourth Floor | ||
1829 | - Fifth Floor | ||
1830 | - Sixth Floor | ||
1831 | - Seventh Floor | ||
1832 | Orange Tower First Floor: | ||
1833 | entrances: | ||
1834 | Hub Room: | ||
1835 | door: Shortcut to Hub Room | ||
1836 | Outside The Wanderer: | ||
1837 | room: Outside The Wanderer | ||
1838 | door: Tower Entrance | ||
1839 | Orange Tower Second Floor: | ||
1840 | room: Orange Tower | ||
1841 | door: Second Floor | ||
1842 | Directional Gallery: | ||
1843 | door: Salt Pepper Door | ||
1844 | Roof: True # through the sunwarp | ||
1845 | panels: | ||
1846 | SECRET: | ||
1847 | id: Shuffle Room/Panel_secret_secret | ||
1848 | tag: midwhite | ||
1849 | DADS + ALE: | ||
1850 | id: Tower Room/Panel_dads_ale_dead_1 | ||
1851 | colors: orange | ||
1852 | check: True | ||
1853 | tag: midorange | ||
1854 | SALT: | ||
1855 | id: Backside Room/Panel_salt_pepper | ||
1856 | colors: black | ||
1857 | tag: botblack | ||
1858 | doors: | ||
1859 | Shortcut to Hub Room: | ||
1860 | id: Shuffle Room Area Doors/Door_secret_secret | ||
1861 | group: Orange Tower First Floor - Shortcuts | ||
1862 | panels: | ||
1863 | - SECRET | ||
1864 | Salt Pepper Door: | ||
1865 | id: Count Up Room Area Doors/Door_salt_pepper | ||
1866 | location_name: Orange Tower First Floor - Salt Pepper Door | ||
1867 | group: Orange Tower First Floor - Shortcuts | ||
1868 | panels: | ||
1869 | - SALT | ||
1870 | - room: Directional Gallery | ||
1871 | panel: PEPPER | ||
1872 | Orange Tower Second Floor: | ||
1873 | entrances: | ||
1874 | Orange Tower First Floor: | ||
1875 | room: Orange Tower | ||
1876 | door: Second Floor | ||
1877 | Orange Tower Third Floor: | ||
1878 | room: Orange Tower | ||
1879 | door: Third Floor | ||
1880 | Outside The Undeterred: True | ||
1881 | Orange Tower Third Floor: | ||
1882 | entrances: | ||
1883 | Knight Night Exit: | ||
1884 | room: Knight Night (Final) | ||
1885 | door: Exit | ||
1886 | Orange Tower Second Floor: | ||
1887 | room: Orange Tower | ||
1888 | door: Third Floor | ||
1889 | Orange Tower Fourth Floor: | ||
1890 | room: Orange Tower | ||
1891 | door: Fourth Floor | ||
1892 | Hot Crusts Area: True # sunwarp | ||
1893 | Bearer Side Area: # This is complicated because of The Bearer's topology | ||
1894 | room: Bearer Side Area | ||
1895 | door: Shortcut to Tower | ||
1896 | Rhyme Room (Smiley): | ||
1897 | door: Rhyme Room Entrance | ||
1898 | panels: | ||
1899 | RED: | ||
1900 | id: Color Arrow Room/Panel_red_afar | ||
1901 | tag: midwhite | ||
1902 | required_door: | ||
1903 | door: Red Barrier | ||
1904 | DEER + WREN: | ||
1905 | id: Tower Room/Panel_deer_wren_rats_3 | ||
1906 | colors: orange | ||
1907 | check: True | ||
1908 | tag: midorange | ||
1909 | doors: | ||
1910 | Red Barrier: | ||
1911 | id: Color Arrow Room Doors/Door_red_6 | ||
1912 | group: Color Hunt Barriers | ||
1913 | skip_location: True | ||
1914 | panels: | ||
1915 | - room: Champion's Rest | ||
1916 | panel: RED | ||
1917 | Rhyme Room Entrance: | ||
1918 | id: Double Room Area Doors/Door_room_entry_stairs2 | ||
1919 | skip_location: True | ||
1920 | group: Rhyme Room Doors | ||
1921 | panels: | ||
1922 | - room: The Tenacious | ||
1923 | panel: LEVEL (Black) | ||
1924 | - room: The Tenacious | ||
1925 | panel: RACECAR (Black) | ||
1926 | - room: The Tenacious | ||
1927 | panel: SOLOS (Black) | ||
1928 | Orange Barrier: # see note in Outside The Initiated | ||
1929 | id: | ||
1930 | - Color Arrow Room Doors/Door_orange_hider_1 | ||
1931 | - Color Arrow Room Doors/Door_orange_hider_2 | ||
1932 | - Color Arrow Room Doors/Door_orange_hider_3 | ||
1933 | location_name: Color Hunt - RED and YELLOW | ||
1934 | group: Champion's Rest - Color Barriers | ||
1935 | item_name: Champion's Rest - Orange Barrier | ||
1936 | panels: | ||
1937 | - RED | ||
1938 | - room: Directional Gallery | ||
1939 | panel: YELLOW | ||
1940 | paintings: | ||
1941 | - id: arrows_painting_6 | ||
1942 | orientation: east | ||
1943 | - id: flower_painting_5 | ||
1944 | orientation: south | ||
1945 | Orange Tower Fourth Floor: | ||
1946 | entrances: | ||
1947 | Orange Tower Third Floor: | ||
1948 | room: Orange Tower | ||
1949 | door: Fourth Floor | ||
1950 | Orange Tower Fifth Floor: | ||
1951 | room: Orange Tower | ||
1952 | door: Fifth Floor | ||
1953 | Hot Crusts Area: | ||
1954 | door: Hot Crusts Door | ||
1955 | Crossroads: | ||
1956 | - room: Crossroads | ||
1957 | door: Tower Entrance | ||
1958 | - room: Crossroads | ||
1959 | door: Tower Back Entrance | ||
1960 | Courtyard: True | ||
1961 | Roof: True # through the sunwarp | ||
1962 | panels: | ||
1963 | RUNT: | ||
1964 | id: Shuffle Room/Panel_turn_runt2 | ||
1965 | colors: yellow | ||
1966 | tag: midyellow | ||
1967 | RUNT (2): | ||
1968 | id: Shuffle Room/Panel_runt3 | ||
1969 | colors: | ||
1970 | - yellow | ||
1971 | - blue | ||
1972 | tag: mid yellow blue | ||
1973 | LEARNS + UNSEW: | ||
1974 | id: Tower Room/Panel_learns_unsew_unrest_4 | ||
1975 | colors: orange | ||
1976 | check: True | ||
1977 | tag: midorange | ||
1978 | HOT CRUSTS: | ||
1979 | id: Shuffle Room/Panel_shortcuts | ||
1980 | colors: yellow | ||
1981 | tag: midyellow | ||
1982 | IRK HORN: | ||
1983 | id: Shuffle Room/Panel_corner | ||
1984 | colors: yellow | ||
1985 | check: True | ||
1986 | exclude_reduce: True | ||
1987 | tag: topyellow | ||
1988 | doors: | ||
1989 | Hot Crusts Door: | ||
1990 | id: Shuffle Room Area Doors/Door_hotcrust_shortcuts | ||
1991 | panels: | ||
1992 | - HOT CRUSTS | ||
1993 | Hot Crusts Area: | ||
1994 | entrances: | ||
1995 | Orange Tower Fourth Floor: | ||
1996 | room: Orange Tower Fourth Floor | ||
1997 | door: Hot Crusts Door | ||
1998 | Roof: True # through the sunwarp | ||
1999 | panels: | ||
2000 | EIGHT: | ||
2001 | id: Backside Room/Panel_eight_eight_3 | ||
2002 | tag: midwhite | ||
2003 | required_door: | ||
2004 | room: Number Hunt | ||
2005 | door: Eights | ||
2006 | paintings: | ||
2007 | - id: smile_painting_8 | ||
2008 | orientation: north | ||
2009 | Orange Tower Fifth Floor: | ||
2010 | entrances: | ||
2011 | Orange Tower Fourth Floor: | ||
2012 | room: Orange Tower | ||
2013 | door: Fifth Floor | ||
2014 | Orange Tower Sixth Floor: | ||
2015 | room: Orange Tower | ||
2016 | door: Sixth Floor | ||
2017 | Cellar: | ||
2018 | room: Room Room | ||
2019 | door: Shortcut to Fifth Floor | ||
2020 | Welcome Back Area: | ||
2021 | door: Welcome Back | ||
2022 | Art Gallery: | ||
2023 | room: Art Gallery | ||
2024 | door: Exit | ||
2025 | The Bearer: | ||
2026 | room: Art Gallery | ||
2027 | door: Exit | ||
2028 | Outside The Initiated: | ||
2029 | room: Art Gallery | ||
2030 | door: Exit | ||
2031 | panels: | ||
2032 | SIZE (Small): | ||
2033 | id: Entry Room/Panel_size_small | ||
2034 | colors: gray | ||
2035 | tag: forbid | ||
2036 | SIZE (Big): | ||
2037 | id: Entry Room/Panel_size_big | ||
2038 | colors: gray | ||
2039 | tag: forbid | ||
2040 | DRAWL + RUNS: | ||
2041 | id: Tower Room/Panel_drawl_runs_enter_5 | ||
2042 | colors: orange | ||
2043 | check: True | ||
2044 | tag: midorange | ||
2045 | NINE: | ||
2046 | id: Backside Room/Panel_nine_nine_2 | ||
2047 | tag: midwhite | ||
2048 | required_door: | ||
2049 | room: Number Hunt | ||
2050 | door: Nines | ||
2051 | SUMMER: | ||
2052 | id: Entry Room/Panel_summer_summer | ||
2053 | tag: midwhite | ||
2054 | AUTUMN: | ||
2055 | id: Entry Room/Panel_autumn_autumn | ||
2056 | tag: midwhite | ||
2057 | SPRING: | ||
2058 | id: Entry Room/Panel_spring_spring | ||
2059 | tag: midwhite | ||
2060 | PAINTING (1): | ||
2061 | id: Panel Room/Panel_painting_flower | ||
2062 | colors: green | ||
2063 | tag: forbid | ||
2064 | required_room: Cellar | ||
2065 | PAINTING (2): | ||
2066 | id: Panel Room/Panel_painting_eye | ||
2067 | colors: green | ||
2068 | tag: forbid | ||
2069 | required_room: Cellar | ||
2070 | PAINTING (3): | ||
2071 | id: Panel Room/Panel_painting_snowman | ||
2072 | colors: green | ||
2073 | tag: forbid | ||
2074 | required_room: Cellar | ||
2075 | PAINTING (4): | ||
2076 | id: Panel Room/Panel_painting_owl | ||
2077 | colors: green | ||
2078 | tag: forbid | ||
2079 | required_room: Cellar | ||
2080 | PAINTING (5): | ||
2081 | id: Panel Room/Panel_painting_panda | ||
2082 | colors: green | ||
2083 | tag: forbid | ||
2084 | required_room: Cellar | ||
2085 | ROOM: | ||
2086 | id: Panel Room/Panel_room_stairs | ||
2087 | colors: gray | ||
2088 | tag: forbid | ||
2089 | required_room: Cellar | ||
2090 | doors: | ||
2091 | Welcome Back: | ||
2092 | id: Entry Room Area Doors/Door_sizes | ||
2093 | group: Welcome Back Doors | ||
2094 | panels: | ||
2095 | - SIZE (Small) | ||
2096 | - SIZE (Big) | ||
2097 | paintings: | ||
2098 | - id: hi_solved_painting3 | ||
2099 | orientation: south | ||
2100 | - id: hi_solved_painting2 | ||
2101 | orientation: south | ||
2102 | - id: east_afar | ||
2103 | orientation: north | ||
2104 | Orange Tower Sixth Floor: | ||
2105 | entrances: | ||
2106 | Orange Tower Fifth Floor: | ||
2107 | room: Orange Tower | ||
2108 | door: Sixth Floor | ||
2109 | The Scientific: | ||
2110 | painting: True | ||
2111 | paintings: | ||
2112 | - id: arrows_painting_10 | ||
2113 | orientation: east | ||
2114 | - id: owl_painting_3 | ||
2115 | orientation: north | ||
2116 | - id: clock_painting | ||
2117 | orientation: west | ||
2118 | - id: scenery_painting_5d_2 | ||
2119 | orientation: south | ||
2120 | - id: symmetry_painting_b_7 | ||
2121 | orientation: north | ||
2122 | - id: panda_painting_2 | ||
2123 | orientation: south | ||
2124 | - id: pencil_painting | ||
2125 | orientation: north | ||
2126 | - id: colors_painting2 | ||
2127 | orientation: south | ||
2128 | - id: cherry_painting2 | ||
2129 | orientation: east | ||
2130 | - id: hi_solved_painting | ||
2131 | orientation: west | ||
2132 | Orange Tower Seventh Floor: | ||
2133 | entrances: | ||
2134 | Orange Tower Sixth Floor: | ||
2135 | room: Orange Tower | ||
2136 | door: Seventh Floor | ||
2137 | panels: | ||
2138 | THE END: | ||
2139 | id: EndPanel/Panel_end_end | ||
2140 | check: True | ||
2141 | tag: forbid | ||
2142 | non_counting: True | ||
2143 | THE MASTER: | ||
2144 | # We will set up special rules for this in code. | ||
2145 | id: Countdown Panels/Panel_master_master | ||
2146 | check: True | ||
2147 | tag: forbid | ||
2148 | MASTERY: | ||
2149 | # This is the MASTERY on the other side of THE FEARLESS. It can only be | ||
2150 | # accessed by jumping from the top of the tower. | ||
2151 | id: Master Room/Panel_mastery_mastery8 | ||
2152 | tag: midwhite | ||
2153 | required_door: | ||
2154 | door: Mastery | ||
2155 | doors: | ||
2156 | Mastery: | ||
2157 | id: | ||
2158 | - Master Room Doors/Door_tower_down | ||
2159 | - Master Room Doors/Door_master_master | ||
2160 | - Master Room Doors/Door_master_master_2 | ||
2161 | - Master Room Doors/Door_master_master_3 | ||
2162 | - Master Room Doors/Door_master_master_4 | ||
2163 | - Master Room Doors/Door_master_master_5 | ||
2164 | - Master Room Doors/Door_master_master_6 | ||
2165 | - Master Room Doors/Door_master_master_10 | ||
2166 | - Master Room Doors/Door_master_master_11 | ||
2167 | - Master Room Doors/Door_master_master_12 | ||
2168 | - Master Room Doors/Door_master_master_13 | ||
2169 | - Master Room Doors/Door_master_master_14 | ||
2170 | - Master Room Doors/Door_master_master_15 | ||
2171 | - Master Room Doors/Door_master_down | ||
2172 | - Master Room Doors/Door_master_down2 | ||
2173 | skip_location: True | ||
2174 | panels: | ||
2175 | - THE MASTER | ||
2176 | Mastery Panels: | ||
2177 | skip_item: True | ||
2178 | location_name: Mastery Panels | ||
2179 | panels: | ||
2180 | - room: Room Room | ||
2181 | panel: MASTERY | ||
2182 | - room: The Steady (Topaz) | ||
2183 | panel: MASTERY | ||
2184 | - room: Orange Tower Basement | ||
2185 | panel: MASTERY | ||
2186 | - room: Arrow Garden | ||
2187 | panel: MASTERY | ||
2188 | - room: Hedge Maze | ||
2189 | panel: MASTERY (1) | ||
2190 | - room: Roof | ||
2191 | panel: MASTERY (1) | ||
2192 | - room: Roof | ||
2193 | panel: MASTERY (2) | ||
2194 | - MASTERY | ||
2195 | - room: Hedge Maze | ||
2196 | panel: MASTERY (2) | ||
2197 | - room: Roof | ||
2198 | panel: MASTERY (3) | ||
2199 | - room: Roof | ||
2200 | panel: MASTERY (4) | ||
2201 | - room: Roof | ||
2202 | panel: MASTERY (5) | ||
2203 | - room: Elements Area | ||
2204 | panel: MASTERY | ||
2205 | - room: Pilgrim Antechamber | ||
2206 | panel: MASTERY | ||
2207 | - room: Roof | ||
2208 | panel: MASTERY (6) | ||
2209 | paintings: | ||
2210 | - id: map_painting2 | ||
2211 | orientation: north | ||
2212 | enter_only: True # otherwise you might just skip the whole game! | ||
2213 | Roof: | ||
2214 | entrances: | ||
2215 | Orange Tower Seventh Floor: True | ||
2216 | Crossroads: | ||
2217 | room: Crossroads | ||
2218 | door: Roof Access | ||
2219 | panels: | ||
2220 | MASTERY (1): | ||
2221 | id: Master Room/Panel_mastery_mastery6 | ||
2222 | tag: midwhite | ||
2223 | required_door: | ||
2224 | room: Orange Tower Seventh Floor | ||
2225 | door: Mastery | ||
2226 | MASTERY (2): | ||
2227 | id: Master Room/Panel_mastery_mastery7 | ||
2228 | tag: midwhite | ||
2229 | required_door: | ||
2230 | room: Orange Tower Seventh Floor | ||
2231 | door: Mastery | ||
2232 | MASTERY (3): | ||
2233 | id: Master Room/Panel_mastery_mastery10 | ||
2234 | tag: midwhite | ||
2235 | required_door: | ||
2236 | room: Orange Tower Seventh Floor | ||
2237 | door: Mastery | ||
2238 | MASTERY (4): | ||
2239 | id: Master Room/Panel_mastery_mastery11 | ||
2240 | tag: midwhite | ||
2241 | required_door: | ||
2242 | room: Orange Tower Seventh Floor | ||
2243 | door: Mastery | ||
2244 | MASTERY (5): | ||
2245 | id: Master Room/Panel_mastery_mastery12 | ||
2246 | tag: midwhite | ||
2247 | required_door: | ||
2248 | room: Orange Tower Seventh Floor | ||
2249 | door: Mastery | ||
2250 | MASTERY (6): | ||
2251 | id: Master Room/Panel_mastery_mastery15 | ||
2252 | tag: midwhite | ||
2253 | required_door: | ||
2254 | room: Orange Tower Seventh Floor | ||
2255 | door: Mastery | ||
2256 | STAIRCASE: | ||
2257 | id: Open Areas/Panel_staircase | ||
2258 | tag: midwhite | ||
2259 | Orange Tower Basement: | ||
2260 | entrances: | ||
2261 | Orange Tower Sixth Floor: | ||
2262 | room: Orange Tower Seventh Floor | ||
2263 | door: Mastery | ||
2264 | panels: | ||
2265 | MASTERY: | ||
2266 | id: Master Room/Panel_mastery_mastery3 | ||
2267 | tag: midwhite | ||
2268 | required_door: | ||
2269 | room: Orange Tower Seventh Floor | ||
2270 | door: Mastery | ||
2271 | THE LIBRARY: | ||
2272 | id: EndPanel/Panel_library | ||
2273 | check: True | ||
2274 | tag: forbid | ||
2275 | non_counting: True | ||
2276 | paintings: | ||
2277 | - id: arrows_painting_11 | ||
2278 | orientation: east | ||
2279 | Courtyard: | ||
2280 | entrances: | ||
2281 | Roof: True | ||
2282 | Orange Tower Fourth Floor: True | ||
2283 | Arrow Garden: | ||
2284 | painting: True | ||
2285 | Starting Room: | ||
2286 | door: Painting Shortcut | ||
2287 | painting: True | ||
2288 | Yellow Backside Area: | ||
2289 | room: First Second Third Fourth | ||
2290 | door: Backside Door | ||
2291 | The Colorful (White): True | ||
2292 | panels: | ||
2293 | I: | ||
2294 | id: Strand Room/Panel_i_staring | ||
2295 | colors: blue | ||
2296 | tag: forbid | ||
2297 | GREEN: | ||
2298 | id: Color Arrow Room/Panel_green_afar | ||
2299 | tag: midwhite | ||
2300 | required_door: | ||
2301 | door: Green Barrier | ||
2302 | PINECONE: | ||
2303 | id: Shuffle Room/Panel_pinecone_pine | ||
2304 | colors: brown | ||
2305 | tag: botbrown | ||
2306 | ACORN: | ||
2307 | id: Shuffle Room/Panel_acorn_oak | ||
2308 | colors: brown | ||
2309 | tag: botbrown | ||
2310 | doors: | ||
2311 | Painting Shortcut: | ||
2312 | painting_id: flower_painting_8 | ||
2313 | item_name: Starting Room - Flower Painting | ||
2314 | skip_location: True | ||
2315 | panels: | ||
2316 | - room: First Second Third Fourth | ||
2317 | panel: FIRST | ||
2318 | - room: First Second Third Fourth | ||
2319 | panel: SECOND | ||
2320 | - room: First Second Third Fourth | ||
2321 | panel: THIRD | ||
2322 | - room: First Second Third Fourth | ||
2323 | panel: FOURTH | ||
2324 | Green Barrier: | ||
2325 | id: Color Arrow Room Doors/Door_green_5 | ||
2326 | group: Color Hunt Barriers | ||
2327 | skip_location: True | ||
2328 | panels: | ||
2329 | - room: Champion's Rest | ||
2330 | panel: GREEN | ||
2331 | paintings: | ||
2332 | - id: flower_painting_7 | ||
2333 | orientation: north | ||
2334 | Yellow Backside Area: | ||
2335 | entrances: | ||
2336 | Courtyard: | ||
2337 | room: First Second Third Fourth | ||
2338 | door: Backside Door | ||
2339 | Roof: True | ||
2340 | panels: | ||
2341 | BACKSIDE: | ||
2342 | id: Backside Room/Panel_backside_3 | ||
2343 | tag: midwhite | ||
2344 | NINE: | ||
2345 | id: Backside Room/Panel_nine_nine_8 | ||
2346 | tag: midwhite | ||
2347 | required_door: | ||
2348 | room: Number Hunt | ||
2349 | door: Nines | ||
2350 | paintings: | ||
2351 | - id: blueman_painting | ||
2352 | orientation: east | ||
2353 | First Second Third Fourth: | ||
2354 | # We are separating this door + its panels into its own room because they | ||
2355 | # are accessible from two distinct regions (Courtyard and Yellow Backside | ||
2356 | # Area). We need to do this because painting shuffle makes it possible to | ||
2357 | # have access to Yellow Backside Area without having access to Courtyard, | ||
2358 | # and we want it to still be in logic to solve these panels. | ||
2359 | entrances: | ||
2360 | Courtyard: True | ||
2361 | Yellow Backside Area: True | ||
2362 | panels: | ||
2363 | FIRST: | ||
2364 | id: Backside Room/Panel_first_first | ||
2365 | tag: midwhite | ||
2366 | SECOND: | ||
2367 | id: Backside Room/Panel_second_second | ||
2368 | tag: midwhite | ||
2369 | THIRD: | ||
2370 | id: Backside Room/Panel_third_third | ||
2371 | tag: midwhite | ||
2372 | FOURTH: | ||
2373 | id: Backside Room/Panel_fourth_fourth | ||
2374 | tag: midwhite | ||
2375 | doors: | ||
2376 | Backside Door: | ||
2377 | id: Count Up Room Area Doors/Door_yellow_backside | ||
2378 | group: Backside Doors | ||
2379 | location_name: Courtyard - FIRST, SECOND, THIRD, FOURTH | ||
2380 | item_name: Courtyard - Backside Door | ||
2381 | panels: | ||
2382 | - FIRST | ||
2383 | - SECOND | ||
2384 | - THIRD | ||
2385 | - FOURTH | ||
2386 | The Colorful (White): | ||
2387 | entrances: | ||
2388 | Courtyard: True | ||
2389 | The Colorful (Black): | ||
2390 | door: Progress Door | ||
2391 | panels: | ||
2392 | BEGIN: | ||
2393 | id: Doorways Room/Panel_begin_start | ||
2394 | tag: botwhite | ||
2395 | doors: | ||
2396 | Progress Door: | ||
2397 | id: Doorway Room Doors/Door_white | ||
2398 | item_name: The Colorful - White Door | ||
2399 | group: Colorful Doors | ||
2400 | location_name: The Colorful - White | ||
2401 | panels: | ||
2402 | - BEGIN | ||
2403 | The Colorful (Black): | ||
2404 | entrances: | ||
2405 | The Colorful (White): | ||
2406 | room: The Colorful (White) | ||
2407 | door: Progress Door | ||
2408 | The Colorful (Red): | ||
2409 | door: Progress Door | ||
2410 | panels: | ||
2411 | FOUND: | ||
2412 | id: Doorways Room/Panel_found_lost | ||
2413 | colors: black | ||
2414 | tag: botblack | ||
2415 | doors: | ||
2416 | Progress Door: | ||
2417 | id: Doorway Room Doors/Door_black | ||
2418 | item_name: The Colorful - Black Door | ||
2419 | location_name: The Colorful - Black | ||
2420 | group: Colorful Doors | ||
2421 | panels: | ||
2422 | - FOUND | ||
2423 | The Colorful (Red): | ||
2424 | entrances: | ||
2425 | The Colorful (Black): | ||
2426 | room: The Colorful (Black) | ||
2427 | door: Progress Door | ||
2428 | The Colorful (Yellow): | ||
2429 | door: Progress Door | ||
2430 | panels: | ||
2431 | LOAF: | ||
2432 | id: Doorways Room/Panel_loaf_crust | ||
2433 | colors: red | ||
2434 | tag: botred | ||
2435 | doors: | ||
2436 | Progress Door: | ||
2437 | id: Doorway Room Doors/Door_red | ||
2438 | item_name: The Colorful - Red Door | ||
2439 | location_name: The Colorful - Red | ||
2440 | group: Colorful Doors | ||
2441 | panels: | ||
2442 | - LOAF | ||
2443 | The Colorful (Yellow): | ||
2444 | entrances: | ||
2445 | The Colorful (Red): | ||
2446 | room: The Colorful (Red) | ||
2447 | door: Progress Door | ||
2448 | The Colorful (Blue): | ||
2449 | door: Progress Door | ||
2450 | panels: | ||
2451 | CREAM: | ||
2452 | id: Doorways Room/Panel_eggs_breakfast | ||
2453 | colors: yellow | ||
2454 | tag: botyellow | ||
2455 | doors: | ||
2456 | Progress Door: | ||
2457 | id: Doorway Room Doors/Door_yellow | ||
2458 | item_name: The Colorful - Yellow Door | ||
2459 | location_name: The Colorful - Yellow | ||
2460 | group: Colorful Doors | ||
2461 | panels: | ||
2462 | - CREAM | ||
2463 | The Colorful (Blue): | ||
2464 | entrances: | ||
2465 | The Colorful (Yellow): | ||
2466 | room: The Colorful (Yellow) | ||
2467 | door: Progress Door | ||
2468 | The Colorful (Purple): | ||
2469 | door: Progress Door | ||
2470 | panels: | ||
2471 | SUN: | ||
2472 | id: Doorways Room/Panel_sun_sky | ||
2473 | colors: blue | ||
2474 | tag: botblue | ||
2475 | doors: | ||
2476 | Progress Door: | ||
2477 | id: Doorway Room Doors/Door_blue | ||
2478 | item_name: The Colorful - Blue Door | ||
2479 | location_name: The Colorful - Blue | ||
2480 | group: Colorful Doors | ||
2481 | panels: | ||
2482 | - SUN | ||
2483 | The Colorful (Purple): | ||
2484 | entrances: | ||
2485 | The Colorful (Blue): | ||
2486 | room: The Colorful (Blue) | ||
2487 | door: Progress Door | ||
2488 | The Colorful (Orange): | ||
2489 | door: Progress Door | ||
2490 | panels: | ||
2491 | SPOON: | ||
2492 | id: Doorways Room/Panel_teacher_substitute | ||
2493 | colors: purple | ||
2494 | tag: botpurple | ||
2495 | doors: | ||
2496 | Progress Door: | ||
2497 | id: Doorway Room Doors/Door_purple | ||
2498 | item_name: The Colorful - Purple Door | ||
2499 | location_name: The Colorful - Purple | ||
2500 | group: Colorful Doors | ||
2501 | panels: | ||
2502 | - SPOON | ||
2503 | The Colorful (Orange): | ||
2504 | entrances: | ||
2505 | The Colorful (Purple): | ||
2506 | room: The Colorful (Purple) | ||
2507 | door: Progress Door | ||
2508 | The Colorful (Green): | ||
2509 | door: Progress Door | ||
2510 | panels: | ||
2511 | LETTERS: | ||
2512 | id: Doorways Room/Panel_walnuts_orange | ||
2513 | colors: orange | ||
2514 | tag: botorange | ||
2515 | doors: | ||
2516 | Progress Door: | ||
2517 | id: Doorway Room Doors/Door_orange | ||
2518 | item_name: The Colorful - Orange Door | ||
2519 | location_name: The Colorful - Orange | ||
2520 | group: Colorful Doors | ||
2521 | panels: | ||
2522 | - LETTERS | ||
2523 | The Colorful (Green): | ||
2524 | entrances: | ||
2525 | The Colorful (Orange): | ||
2526 | room: The Colorful (Orange) | ||
2527 | door: Progress Door | ||
2528 | The Colorful (Brown): | ||
2529 | door: Progress Door | ||
2530 | panels: | ||
2531 | WALLS: | ||
2532 | id: Doorways Room/Panel_path_i | ||
2533 | colors: green | ||
2534 | tag: forbid | ||
2535 | doors: | ||
2536 | Progress Door: | ||
2537 | id: Doorway Room Doors/Door_green | ||
2538 | item_name: The Colorful - Green Door | ||
2539 | location_name: The Colorful - Green | ||
2540 | group: Colorful Doors | ||
2541 | panels: | ||
2542 | - WALLS | ||
2543 | The Colorful (Brown): | ||
2544 | entrances: | ||
2545 | The Colorful (Green): | ||
2546 | room: The Colorful (Green) | ||
2547 | door: Progress Door | ||
2548 | The Colorful (Gray): | ||
2549 | door: Progress Door | ||
2550 | panels: | ||
2551 | IRON: | ||
2552 | id: Doorways Room/Panel_iron_rust | ||
2553 | colors: brown | ||
2554 | tag: botbrown | ||
2555 | doors: | ||
2556 | Progress Door: | ||
2557 | id: Doorway Room Doors/Door_brown | ||
2558 | item_name: The Colorful - Brown Door | ||
2559 | location_name: The Colorful - Brown | ||
2560 | group: Colorful Doors | ||
2561 | panels: | ||
2562 | - IRON | ||
2563 | The Colorful (Gray): | ||
2564 | entrances: | ||
2565 | The Colorful (Brown): | ||
2566 | room: The Colorful (Brown) | ||
2567 | door: Progress Door | ||
2568 | The Colorful: | ||
2569 | door: Progress Door | ||
2570 | panels: | ||
2571 | OBSTACLE: | ||
2572 | id: Doorways Room/Panel_obstacle_door | ||
2573 | colors: gray | ||
2574 | tag: forbid | ||
2575 | doors: | ||
2576 | Progress Door: | ||
2577 | id: | ||
2578 | - Doorway Room Doors/Door_gray | ||
2579 | - Doorway Room Doors/Door_gray2 # See comment below | ||
2580 | item_name: The Colorful - Gray Door | ||
2581 | location_name: The Colorful - Gray | ||
2582 | group: Colorful Doors | ||
2583 | panels: | ||
2584 | - OBSTACLE | ||
2585 | The Colorful: | ||
2586 | # The set of required_doors in the achievement panel should prevent | ||
2587 | # generation from asking you to solve The Colorful before opening all of the | ||
2588 | # doors. Access from the roof is included so that the painting here could be | ||
2589 | # an entrance. The client will have to be hardcoded to not open the door to | ||
2590 | # the achievement until all of the doors are open, whether by solving the | ||
2591 | # panels or through receiving items. | ||
2592 | entrances: | ||
2593 | The Colorful (Gray): | ||
2594 | room: The Colorful (Gray) | ||
2595 | door: Progress Door | ||
2596 | Roof: True | ||
2597 | panels: | ||
2598 | Achievement: | ||
2599 | id: Countdown Panels/Panel_colorful_colorful | ||
2600 | check: True | ||
2601 | tag: forbid | ||
2602 | required_door: | ||
2603 | - room: The Colorful (White) | ||
2604 | door: Progress Door | ||
2605 | - room: The Colorful (Black) | ||
2606 | door: Progress Door | ||
2607 | - room: The Colorful (Red) | ||
2608 | door: Progress Door | ||
2609 | - room: The Colorful (Yellow) | ||
2610 | door: Progress Door | ||
2611 | - room: The Colorful (Blue) | ||
2612 | door: Progress Door | ||
2613 | - room: The Colorful (Purple) | ||
2614 | door: Progress Door | ||
2615 | - room: The Colorful (Orange) | ||
2616 | door: Progress Door | ||
2617 | - room: The Colorful (Green) | ||
2618 | door: Progress Door | ||
2619 | - room: The Colorful (Brown) | ||
2620 | door: Progress Door | ||
2621 | - room: The Colorful (Gray) | ||
2622 | door: Progress Door | ||
2623 | achievement: The Colorful | ||
2624 | paintings: | ||
2625 | - id: arrows_painting_12 | ||
2626 | orientation: north | ||
2627 | Welcome Back Area: | ||
2628 | entrances: | ||
2629 | Starting Room: | ||
2630 | door: Shortcut to Starting Room | ||
2631 | Hub Room: True | ||
2632 | Outside The Wondrous: True | ||
2633 | Outside The Undeterred: True | ||
2634 | Outside The Initiated: True | ||
2635 | Outside The Agreeable: True | ||
2636 | Outside The Wanderer: True | ||
2637 | Eight Alcove: True | ||
2638 | Orange Tower Fifth Floor: | ||
2639 | room: Orange Tower Fifth Floor | ||
2640 | door: Welcome Back | ||
2641 | Challenge Room: | ||
2642 | room: Challenge Room | ||
2643 | door: Welcome Door | ||
2644 | panels: | ||
2645 | WELCOME BACK: | ||
2646 | id: Entry Room/Panel_return_return | ||
2647 | tag: midwhite | ||
2648 | SECRET: | ||
2649 | id: Entry Room/Panel_secret_secret | ||
2650 | tag: midwhite | ||
2651 | CLOCKWISE: | ||
2652 | id: Shuffle Room/Panel_clockwise_counterclockwise | ||
2653 | colors: black | ||
2654 | check: True | ||
2655 | exclude_reduce: True | ||
2656 | tag: botblack | ||
2657 | doors: | ||
2658 | Shortcut to Starting Room: | ||
2659 | id: Entry Room Area Doors/Door_return_return | ||
2660 | group: Welcome Back Doors | ||
2661 | include_reduce: True | ||
2662 | panels: | ||
2663 | - WELCOME BACK | ||
2664 | Owl Hallway: | ||
2665 | entrances: | ||
2666 | Hidden Room: | ||
2667 | painting: True | ||
2668 | Hedge Maze: | ||
2669 | door: Shortcut to Hedge Maze | ||
2670 | Orange Tower Sixth Floor: | ||
2671 | painting: True | ||
2672 | panels: | ||
2673 | STRAYS: | ||
2674 | id: Maze Room/Panel_strays_maze | ||
2675 | colors: purple | ||
2676 | tag: toppurp | ||
2677 | READS + RUST: | ||
2678 | id: Tower Room/Panel_reads_rust_lawns_6 | ||
2679 | colors: orange | ||
2680 | check: True | ||
2681 | tag: midorange | ||
2682 | doors: | ||
2683 | Shortcut to Hedge Maze: | ||
2684 | id: Maze Area Doors/Door_strays_maze | ||
2685 | group: Hedge Maze Doors | ||
2686 | panels: | ||
2687 | - STRAYS | ||
2688 | paintings: | ||
2689 | - id: arrows_painting_8 | ||
2690 | orientation: south | ||
2691 | - id: maze_painting_2 | ||
2692 | orientation: north | ||
2693 | - id: owl_painting_2 | ||
2694 | orientation: south | ||
2695 | required_when_no_doors: True | ||
2696 | - id: clock_painting_4 | ||
2697 | orientation: north | ||
2698 | Outside The Initiated: | ||
2699 | entrances: | ||
2700 | Hub Room: | ||
2701 | door: Shortcut to Hub Room | ||
2702 | Knight Night Exit: | ||
2703 | room: Knight Night (Final) | ||
2704 | door: Exit | ||
2705 | Orange Tower Third Floor: True # sunwarp | ||
2706 | Orange Tower Fifth Floor: | ||
2707 | room: Art Gallery | ||
2708 | door: Exit | ||
2709 | panels: | ||
2710 | SEVEN (1): | ||
2711 | id: Backside Room/Panel_seven_seven_5 | ||
2712 | tag: midwhite | ||
2713 | required_door: | ||
2714 | room: Number Hunt | ||
2715 | door: Sevens | ||
2716 | SEVEN (2): | ||
2717 | id: Backside Room/Panel_seven_seven_6 | ||
2718 | tag: midwhite | ||
2719 | required_door: | ||
2720 | room: Number Hunt | ||
2721 | door: Sevens | ||
2722 | EIGHT: | ||
2723 | id: Backside Room/Panel_eight_eight_7 | ||
2724 | tag: midwhite | ||
2725 | required_door: | ||
2726 | room: Number Hunt | ||
2727 | door: Eights | ||
2728 | NINE: | ||
2729 | id: Backside Room/Panel_nine_nine_4 | ||
2730 | tag: midwhite | ||
2731 | required_door: | ||
2732 | room: Number Hunt | ||
2733 | door: Nines | ||
2734 | BLUE: | ||
2735 | id: Color Arrow Room/Panel_blue_afar | ||
2736 | tag: midwhite | ||
2737 | required_door: | ||
2738 | door: Blue Barrier | ||
2739 | ORANGE: | ||
2740 | id: Color Arrow Room/Panel_orange_afar | ||
2741 | tag: midwhite | ||
2742 | required_door: | ||
2743 | door: Orange Barrier | ||
2744 | UNCOVER: | ||
2745 | id: Appendix Room/Panel_discover_recover | ||
2746 | colors: purple | ||
2747 | tag: midpurp | ||
2748 | OXEN: | ||
2749 | id: Rhyme Room/Panel_locked_knocked | ||
2750 | colors: purple | ||
2751 | tag: midpurp | ||
2752 | BACKSIDE: | ||
2753 | id: Backside Room/Panel_backside_1 | ||
2754 | tag: midwhite | ||
2755 | The Optimistic: | ||
2756 | id: Countdown Panels/Panel_optimistic_optimistic | ||
2757 | check: True | ||
2758 | tag: forbid | ||
2759 | required_door: | ||
2760 | door: Backsides | ||
2761 | achievement: The Optimistic | ||
2762 | PAST: | ||
2763 | id: Shuffle Room/Panel_past_present | ||
2764 | colors: brown | ||
2765 | tag: botbrown | ||
2766 | FUTURE: | ||
2767 | id: Shuffle Room/Panel_future_present | ||
2768 | colors: | ||
2769 | - brown | ||
2770 | - black | ||
2771 | tag: bot brown black | ||
2772 | FUTURE (2): | ||
2773 | id: Shuffle Room/Panel_future_past | ||
2774 | colors: black | ||
2775 | tag: botblack | ||
2776 | PAST (2): | ||
2777 | id: Shuffle Room/Panel_past_future | ||
2778 | colors: black | ||
2779 | tag: botblack | ||
2780 | PRESENT: | ||
2781 | id: Shuffle Room/Panel_past_past | ||
2782 | colors: | ||
2783 | - brown | ||
2784 | - black | ||
2785 | tag: bot brown black | ||
2786 | SMILE: | ||
2787 | id: Open Areas/Panel_smile_smile | ||
2788 | tag: midwhite | ||
2789 | ANGERED: | ||
2790 | id: Open Areas/Panel_angered_enraged | ||
2791 | colors: | ||
2792 | - yellow | ||
2793 | tag: syn anagram | ||
2794 | copy_to_sign: sign18 | ||
2795 | VOTE: | ||
2796 | id: Open Areas/Panel_vote_veto | ||
2797 | colors: | ||
2798 | - yellow | ||
2799 | - black | ||
2800 | tag: ant anagram | ||
2801 | copy_to_sign: sign17 | ||
2802 | doors: | ||
2803 | Shortcut to Hub Room: | ||
2804 | id: Appendix Room Area Doors/Door_recover_discover | ||
2805 | panels: | ||
2806 | - UNCOVER | ||
2807 | Blue Barrier: | ||
2808 | id: Color Arrow Room Doors/Door_blue_3 | ||
2809 | group: Color Hunt Barriers | ||
2810 | skip_location: True | ||
2811 | panels: | ||
2812 | - room: Champion's Rest | ||
2813 | panel: BLUE | ||
2814 | Orange Barrier: | ||
2815 | id: Color Arrow Room Doors/Door_orange_3 | ||
2816 | group: Color Hunt Barriers | ||
2817 | skip_location: True | ||
2818 | panels: | ||
2819 | - room: Champion's Rest | ||
2820 | panel: ORANGE | ||
2821 | Initiated Entrance: | ||
2822 | id: Red Blue Purple Room Area Doors/Door_locked_knocked | ||
2823 | item_name: The Initiated - Entrance | ||
2824 | panels: | ||
2825 | - OXEN | ||
2826 | # These would be more appropriate in Champion's Rest, but as currently | ||
2827 | # implemented, locations need to include at least one panel from the | ||
2828 | # containing region. | ||
2829 | Green Barrier: | ||
2830 | id: Color Arrow Room Doors/Door_green_hider_1 | ||
2831 | location_name: Color Hunt - BLUE and YELLOW | ||
2832 | item_name: Champion's Rest - Green Barrier | ||
2833 | group: Champion's Rest - Color Barriers | ||
2834 | panels: | ||
2835 | - BLUE | ||
2836 | - room: Directional Gallery | ||
2837 | panel: YELLOW | ||
2838 | Purple Barrier: | ||
2839 | id: | ||
2840 | - Color Arrow Room Doors/Door_purple_hider_1 | ||
2841 | - Color Arrow Room Doors/Door_purple_hider_2 | ||
2842 | - Color Arrow Room Doors/Door_purple_hider_3 | ||
2843 | location_name: Color Hunt - RED and BLUE | ||
2844 | item_name: Champion's Rest - Purple Barrier | ||
2845 | group: Champion's Rest - Color Barriers | ||
2846 | panels: | ||
2847 | - BLUE | ||
2848 | - room: Orange Tower Third Floor | ||
2849 | panel: RED | ||
2850 | Entrance: | ||
2851 | id: | ||
2852 | - Color Arrow Room Doors/Door_all_hider_1 | ||
2853 | - Color Arrow Room Doors/Door_all_hider_2 | ||
2854 | - Color Arrow Room Doors/Door_all_hider_3 | ||
2855 | location_name: Color Hunt - GREEN, ORANGE and PURPLE | ||
2856 | item_name: Champion's Rest - Entrance | ||
2857 | panels: | ||
2858 | - ORANGE | ||
2859 | - room: Courtyard | ||
2860 | panel: GREEN | ||
2861 | - room: Outside The Agreeable | ||
2862 | panel: PURPLE | ||
2863 | Backsides: | ||
2864 | event: True | ||
2865 | panels: | ||
2866 | - room: The Observant | ||
2867 | panel: BACKSIDE | ||
2868 | - room: Yellow Backside Area | ||
2869 | panel: BACKSIDE | ||
2870 | - room: Directional Gallery | ||
2871 | panel: BACKSIDE | ||
2872 | - room: The Bearer | ||
2873 | panel: BACKSIDE | ||
2874 | paintings: | ||
2875 | - id: clock_painting_5 | ||
2876 | orientation: east | ||
2877 | - id: smile_painting_1 | ||
2878 | orientation: north | ||
2879 | The Initiated: | ||
2880 | entrances: | ||
2881 | Outside The Initiated: | ||
2882 | room: Outside The Initiated | ||
2883 | door: Initiated Entrance | ||
2884 | panels: | ||
2885 | Achievement: | ||
2886 | id: Countdown Panels/Panel_illuminated_initiated | ||
2887 | colors: purple | ||
2888 | tag: forbid | ||
2889 | check: True | ||
2890 | achievement: The Initiated | ||
2891 | DAUGHTER: | ||
2892 | id: Rhyme Room/Panel_daughter_laughter | ||
2893 | colors: purple | ||
2894 | tag: midpurp | ||
2895 | START: | ||
2896 | id: Rhyme Room/Panel_move_love | ||
2897 | colors: purple | ||
2898 | tag: double midpurp | ||
2899 | subtag: left | ||
2900 | link: change STARS | ||
2901 | STARE: | ||
2902 | id: Rhyme Room/Panel_stove_love | ||
2903 | colors: purple | ||
2904 | tag: double midpurp | ||
2905 | subtag: right | ||
2906 | link: change STARS | ||
2907 | HYPE: | ||
2908 | id: Rhyme Room/Panel_scope_type | ||
2909 | colors: purple | ||
2910 | tag: midpurp and rhyme | ||
2911 | copy_to_sign: sign16 | ||
2912 | ABYSS: | ||
2913 | id: Rhyme Room/Panel_abyss_this | ||
2914 | colors: purple | ||
2915 | tag: toppurp | ||
2916 | SWEAT: | ||
2917 | id: Rhyme Room/Panel_sweat_great | ||
2918 | colors: purple | ||
2919 | tag: double midpurp | ||
2920 | subtag: left | ||
2921 | link: change GREAT | ||
2922 | BEAT: | ||
2923 | id: Rhyme Room/Panel_beat_great | ||
2924 | colors: purple | ||
2925 | tag: double midpurp | ||
2926 | subtag: right | ||
2927 | link: change GREAT | ||
2928 | ALUMNI: | ||
2929 | id: Rhyme Room/Panel_alumni_hi | ||
2930 | colors: purple | ||
2931 | tag: midpurp and rhyme | ||
2932 | copy_to_sign: sign14 | ||
2933 | PATS: | ||
2934 | id: Rhyme Room/Panel_wrath_path | ||
2935 | colors: purple | ||
2936 | tag: midpurp and rhyme | ||
2937 | copy_to_sign: sign15 | ||
2938 | KNIGHT: | ||
2939 | id: Rhyme Room/Panel_knight_write | ||
2940 | colors: purple | ||
2941 | tag: double toppurp | ||
2942 | subtag: left | ||
2943 | link: change WRITE | ||
2944 | BYTE: | ||
2945 | id: Rhyme Room/Panel_byte_write | ||
2946 | colors: purple | ||
2947 | tag: double toppurp | ||
2948 | subtag: right | ||
2949 | link: change WRITE | ||
2950 | MAIM: | ||
2951 | id: Rhyme Room/Panel_maim_same | ||
2952 | colors: purple | ||
2953 | tag: toppurp | ||
2954 | MORGUE: | ||
2955 | id: Rhyme Room/Panel_chair_bear | ||
2956 | colors: purple | ||
2957 | tag: purple rhyme change stack | ||
2958 | subtag: top | ||
2959 | link: prcs CYBORG | ||
2960 | CHAIR: | ||
2961 | id: Rhyme Room/Panel_bare_bear | ||
2962 | colors: purple | ||
2963 | tag: toppurp | ||
2964 | HUMAN: | ||
2965 | id: Rhyme Room/Panel_cost_most | ||
2966 | colors: purple | ||
2967 | tag: purple rhyme change stack | ||
2968 | subtag: bot | ||
2969 | link: prcs CYBORG | ||
2970 | BED: | ||
2971 | id: Rhyme Room/Panel_bed_dead | ||
2972 | colors: purple | ||
2973 | tag: toppurp | ||
2974 | The Traveled: | ||
2975 | entrances: | ||
2976 | Hub Room: | ||
2977 | room: Hub Room | ||
2978 | door: Traveled Entrance | ||
2979 | Color Hallways: | ||
2980 | door: Color Hallways Entrance | ||
2981 | panels: | ||
2982 | Achievement: | ||
2983 | id: Countdown Panels/Panel_traveled_traveled | ||
2984 | required_room: Hub Room | ||
2985 | tag: forbid | ||
2986 | check: True | ||
2987 | achievement: The Traveled | ||
2988 | CLOSE: | ||
2989 | id: Synonym Room/Panel_close_near | ||
2990 | tag: botwhite | ||
2991 | COMPOSE: | ||
2992 | id: Synonym Room/Panel_compose_write | ||
2993 | tag: double botwhite | ||
2994 | subtag: left | ||
2995 | link: syn WRITE | ||
2996 | RECORD: | ||
2997 | id: Synonym Room/Panel_record_write | ||
2998 | tag: double botwhite | ||
2999 | subtag: right | ||
3000 | link: syn WRITE | ||
3001 | CATEGORY: | ||
3002 | id: Synonym Room/Panel_category_type | ||
3003 | tag: botwhite | ||
3004 | HELLO: | ||
3005 | id: Synonym Room/Panel_hello_hi | ||
3006 | tag: botwhite | ||
3007 | DUPLICATE: | ||
3008 | id: Synonym Room/Panel_duplicate_same | ||
3009 | tag: double botwhite | ||
3010 | subtag: left | ||
3011 | link: syn SAME | ||
3012 | IDENTICAL: | ||
3013 | id: Synonym Room/Panel_identical_same | ||
3014 | tag: double botwhite | ||
3015 | subtag: right | ||
3016 | link: syn SAME | ||
3017 | DISTANT: | ||
3018 | id: Synonym Room/Panel_distant_far | ||
3019 | tag: botwhite | ||
3020 | HAY: | ||
3021 | id: Synonym Room/Panel_hay_straw | ||
3022 | tag: botwhite | ||
3023 | GIGGLE: | ||
3024 | id: Synonym Room/Panel_giggle_laugh | ||
3025 | tag: double botwhite | ||
3026 | subtag: left | ||
3027 | link: syn LAUGH | ||
3028 | CHUCKLE: | ||
3029 | id: Synonym Room/Panel_chuckle_laugh | ||
3030 | tag: double botwhite | ||
3031 | subtag: right | ||
3032 | link: syn LAUGH | ||
3033 | SNITCH: | ||
3034 | id: Synonym Room/Panel_snitch_rat | ||
3035 | tag: botwhite | ||
3036 | CONCEALED: | ||
3037 | id: Synonym Room/Panel_concealed_hidden | ||
3038 | tag: botwhite | ||
3039 | PLUNGE: | ||
3040 | id: Synonym Room/Panel_plunge_fall | ||
3041 | tag: double botwhite | ||
3042 | subtag: left | ||
3043 | link: syn FALL | ||
3044 | AUTUMN: | ||
3045 | id: Synonym Room/Panel_autumn_fall | ||
3046 | tag: double botwhite | ||
3047 | subtag: right | ||
3048 | link: syn FALL | ||
3049 | ROAD: | ||
3050 | id: Synonym Room/Panel_growths_warts | ||
3051 | tag: botwhite | ||
3052 | FOUR: | ||
3053 | id: Backside Room/Panel_four_four_4 | ||
3054 | tag: midwhite | ||
3055 | required_door: | ||
3056 | room: Outside The Undeterred | ||
3057 | door: Fours | ||
3058 | doors: | ||
3059 | Color Hallways Entrance: | ||
3060 | id: Appendix Room Area Doors/Door_hello_hi | ||
3061 | group: Entrance to The Traveled | ||
3062 | panels: | ||
3063 | - HELLO | ||
3064 | Color Hallways: | ||
3065 | entrances: | ||
3066 | The Traveled: | ||
3067 | room: The Traveled | ||
3068 | door: Color Hallways Entrance | ||
3069 | Outside The Bold: True | ||
3070 | Outside The Undeterred: True | ||
3071 | Crossroads: True | ||
3072 | Hedge Maze: True | ||
3073 | Outside The Initiated: True # backside | ||
3074 | Directional Gallery: True # backside | ||
3075 | Yellow Backside Area: True | ||
3076 | The Bearer: | ||
3077 | room: The Bearer | ||
3078 | door: Backside Door | ||
3079 | The Observant: | ||
3080 | room: The Observant | ||
3081 | door: Backside Door | ||
3082 | Outside The Bold: | ||
3083 | entrances: | ||
3084 | Color Hallways: True | ||
3085 | Champion's Rest: | ||
3086 | room: Champion's Rest | ||
3087 | door: Shortcut to The Steady | ||
3088 | The Bearer: | ||
3089 | room: The Bearer | ||
3090 | door: Shortcut to The Bold | ||
3091 | Directional Gallery: | ||
3092 | # There is a painting warp here from the Directional Gallery, but it | ||
3093 | # only appears when the sixes are revealed. It could be its own item if | ||
3094 | # we wanted. | ||
3095 | room: Number Hunt | ||
3096 | door: Sixes | ||
3097 | painting: True | ||
3098 | Starting Room: | ||
3099 | door: Painting Shortcut | ||
3100 | painting: True | ||
3101 | Room Room: True # trapdoor | ||
3102 | panels: | ||
3103 | UNOPEN: | ||
3104 | id: Truncate Room/Panel_unopened_open | ||
3105 | colors: red | ||
3106 | tag: midred | ||
3107 | BEGIN: | ||
3108 | id: Rock Room/Panel_begin_begin | ||
3109 | tag: midwhite | ||
3110 | SIX: | ||
3111 | id: Backside Room/Panel_six_six_4 | ||
3112 | tag: midwhite | ||
3113 | required_door: | ||
3114 | room: Number Hunt | ||
3115 | door: Sixes | ||
3116 | NINE: | ||
3117 | id: Backside Room/Panel_nine_nine_5 | ||
3118 | tag: midwhite | ||
3119 | required_door: | ||
3120 | room: Number Hunt | ||
3121 | door: Nines | ||
3122 | LEFT: | ||
3123 | id: Shuffle Room/Panel_left_left_2 | ||
3124 | tag: midwhite | ||
3125 | RIGHT: | ||
3126 | id: Shuffle Room/Panel_right_right_2 | ||
3127 | tag: midwhite | ||
3128 | RISE (Horizon): | ||
3129 | id: Open Areas/Panel_rise_horizon | ||
3130 | colors: blue | ||
3131 | tag: double topblue | ||
3132 | subtag: left | ||
3133 | link: expand HORIZON | ||
3134 | RISE (Sunrise): | ||
3135 | id: Open Areas/Panel_rise_sunrise | ||
3136 | colors: blue | ||
3137 | tag: double topblue | ||
3138 | subtag: left | ||
3139 | link: expand SUNRISE | ||
3140 | ZEN: | ||
3141 | id: Open Areas/Panel_son_horizon | ||
3142 | colors: blue | ||
3143 | tag: double topblue | ||
3144 | subtag: right | ||
3145 | link: expand HORIZON | ||
3146 | SON: | ||
3147 | id: Open Areas/Panel_son_sunrise | ||
3148 | colors: blue | ||
3149 | tag: double topblue | ||
3150 | subtag: right | ||
3151 | link: expand SUNRISE | ||
3152 | STARGAZER: | ||
3153 | id: Open Areas/Panel_stargazer_stargazer | ||
3154 | tag: midwhite | ||
3155 | required_door: | ||
3156 | door: Stargazer Door | ||
3157 | MOUTH: | ||
3158 | id: Cross Room/Panel_mouth_south | ||
3159 | colors: purple | ||
3160 | tag: midpurp | ||
3161 | YEAST: | ||
3162 | id: Cross Room/Panel_yeast_east | ||
3163 | colors: red | ||
3164 | tag: midred | ||
3165 | WET: | ||
3166 | id: Cross Room/Panel_wet_west | ||
3167 | colors: blue | ||
3168 | tag: midblue | ||
3169 | doors: | ||
3170 | Bold Entrance: | ||
3171 | id: Red Blue Purple Room Area Doors/Door_unopened_open | ||
3172 | item_name: The Bold - Entrance | ||
3173 | panels: | ||
3174 | - UNOPEN | ||
3175 | Painting Shortcut: | ||
3176 | painting_id: pencil_painting6 | ||
3177 | skip_location: True | ||
3178 | item_name: Starting Room - Pencil Painting | ||
3179 | panels: | ||
3180 | - UNOPEN | ||
3181 | Steady Entrance: | ||
3182 | id: Rock Room Doors/Door_2 | ||
3183 | item_name: The Steady - Entrance | ||
3184 | panels: | ||
3185 | - BEGIN | ||
3186 | Lilac Entrance: | ||
3187 | event: True | ||
3188 | panels: | ||
3189 | - room: The Steady (Rose) | ||
3190 | panel: SOAR | ||
3191 | Stargazer Door: | ||
3192 | event: True | ||
3193 | panels: | ||
3194 | - RISE (Horizon) | ||
3195 | - RISE (Sunrise) | ||
3196 | - ZEN | ||
3197 | - SON | ||
3198 | paintings: | ||
3199 | - id: pencil_painting2 | ||
3200 | orientation: west | ||
3201 | - id: north_missing2 | ||
3202 | orientation: north | ||
3203 | The Bold: | ||
3204 | entrances: | ||
3205 | Outside The Bold: | ||
3206 | room: Outside The Bold | ||
3207 | door: Bold Entrance | ||
3208 | panels: | ||
3209 | Achievement: | ||
3210 | id: Countdown Panels/Panel_emboldened_bold | ||
3211 | colors: red | ||
3212 | tag: forbid | ||
3213 | check: True | ||
3214 | achievement: The Bold | ||
3215 | FOOT: | ||
3216 | id: Truncate Room/Panel_foot_toe | ||
3217 | colors: red | ||
3218 | tag: botred | ||
3219 | NEEDLE: | ||
3220 | id: Truncate Room/Panel_needle_eye | ||
3221 | colors: red | ||
3222 | tag: double botred | ||
3223 | subtag: left | ||
3224 | link: mero EYE | ||
3225 | FACE: | ||
3226 | id: Truncate Room/Panel_face_eye | ||
3227 | colors: red | ||
3228 | tag: double botred | ||
3229 | subtag: right | ||
3230 | link: mero EYE | ||
3231 | SIGN: | ||
3232 | id: Truncate Room/Panel_sign_sigh | ||
3233 | colors: red | ||
3234 | tag: topred | ||
3235 | HEARTBREAK: | ||
3236 | id: Truncate Room/Panel_heartbreak_brake | ||
3237 | colors: red | ||
3238 | tag: topred | ||
3239 | UNDEAD: | ||
3240 | id: Truncate Room/Panel_undead_dead | ||
3241 | colors: red | ||
3242 | tag: double midred | ||
3243 | subtag: left | ||
3244 | link: trunc DEAD | ||
3245 | DEADLINE: | ||
3246 | id: Truncate Room/Panel_deadline_dead | ||
3247 | colors: red | ||
3248 | tag: double midred | ||
3249 | subtag: right | ||
3250 | link: trunc DEAD | ||
3251 | SUSHI: | ||
3252 | id: Truncate Room/Panel_sushi_hi | ||
3253 | colors: red | ||
3254 | tag: midred | ||
3255 | THISTLE: | ||
3256 | id: Truncate Room/Panel_thistle_this | ||
3257 | colors: red | ||
3258 | tag: midred | ||
3259 | LANDMASS: | ||
3260 | id: Truncate Room/Panel_landmass_mass | ||
3261 | colors: red | ||
3262 | tag: double midred | ||
3263 | subtag: left | ||
3264 | link: trunc MASS | ||
3265 | MASSACRED: | ||
3266 | id: Truncate Room/Panel_massacred_mass | ||
3267 | colors: red | ||
3268 | tag: double midred | ||
3269 | subtag: right | ||
3270 | link: trunc MASS | ||
3271 | AIRPLANE: | ||
3272 | id: Truncate Room/Panel_airplane_plain | ||
3273 | colors: red | ||
3274 | tag: topred | ||
3275 | NIGHTMARE: | ||
3276 | id: Truncate Room/Panel_nightmare_knight | ||
3277 | colors: red | ||
3278 | tag: topred | ||
3279 | MOUTH: | ||
3280 | id: Truncate Room/Panel_mouth_teeth | ||
3281 | colors: red | ||
3282 | tag: double botred | ||
3283 | subtag: left | ||
3284 | link: mero TEETH | ||
3285 | SAW: | ||
3286 | id: Truncate Room/Panel_saw_teeth | ||
3287 | colors: red | ||
3288 | tag: double botred | ||
3289 | subtag: right | ||
3290 | link: mero TEETH | ||
3291 | HAND: | ||
3292 | id: Truncate Room/Panel_hand_finger | ||
3293 | colors: red | ||
3294 | tag: botred | ||
3295 | Outside The Undeterred: | ||
3296 | entrances: | ||
3297 | Color Hallways: True | ||
3298 | Orange Tower First Floor: True # sunwarp | ||
3299 | Orange Tower Second Floor: True | ||
3300 | The Artistic (Smiley): True | ||
3301 | The Artistic (Panda): True | ||
3302 | The Artistic (Apple): True | ||
3303 | The Artistic (Lattice): True | ||
3304 | Yellow Backside Area: | ||
3305 | painting: True | ||
3306 | Number Hunt: | ||
3307 | door: Number Hunt | ||
3308 | Directional Gallery: | ||
3309 | room: Directional Gallery | ||
3310 | door: Shortcut to The Undeterred | ||
3311 | Starting Room: | ||
3312 | door: Painting Shortcut | ||
3313 | painting: True | ||
3314 | panels: | ||
3315 | HOLLOW: | ||
3316 | id: Hallway Room/Panel_hollow_hollow | ||
3317 | tag: midwhite | ||
3318 | ART + ART: | ||
3319 | id: Tower Room/Panel_art_art_eat_2 | ||
3320 | colors: orange | ||
3321 | check: True | ||
3322 | tag: midorange | ||
3323 | PEN: | ||
3324 | id: Blue Room/Panel_pen_open | ||
3325 | colors: blue | ||
3326 | tag: midblue | ||
3327 | HUSTLING: | ||
3328 | id: Open Areas/Panel_hustling_sunlight | ||
3329 | colors: yellow | ||
3330 | tag: midyellow | ||
3331 | SUNLIGHT: | ||
3332 | id: Open Areas/Panel_sunlight_light | ||
3333 | colors: red | ||
3334 | tag: midred | ||
3335 | required_panel: | ||
3336 | panel: HUSTLING | ||
3337 | LIGHT: | ||
3338 | id: Open Areas/Panel_light_bright | ||
3339 | colors: purple | ||
3340 | tag: midpurp | ||
3341 | required_panel: | ||
3342 | panel: SUNLIGHT | ||
3343 | BRIGHT: | ||
3344 | id: Open Areas/Panel_bright_sunny | ||
3345 | tag: botwhite | ||
3346 | required_panel: | ||
3347 | panel: LIGHT | ||
3348 | SUNNY: | ||
3349 | id: Open Areas/Panel_sunny_rainy | ||
3350 | colors: black | ||
3351 | tag: botblack | ||
3352 | required_panel: | ||
3353 | panel: BRIGHT | ||
3354 | RAINY: | ||
3355 | id: Open Areas/Panel_rainy_rainbow | ||
3356 | colors: brown | ||
3357 | tag: botbrown | ||
3358 | required_panel: | ||
3359 | panel: SUNNY | ||
3360 | check: True | ||
3361 | ZERO: | ||
3362 | id: Backside Room/Panel_zero_zero | ||
3363 | tag: midwhite | ||
3364 | required_door: | ||
3365 | room: Number Hunt | ||
3366 | door: Zero Door | ||
3367 | ONE: | ||
3368 | id: Backside Room/Panel_one_one | ||
3369 | tag: midwhite | ||
3370 | TWO (1): | ||
3371 | id: Backside Room/Panel_two_two | ||
3372 | tag: midwhite | ||
3373 | required_door: | ||
3374 | door: Twos | ||
3375 | TWO (2): | ||
3376 | id: Backside Room/Panel_two_two_2 | ||
3377 | tag: midwhite | ||
3378 | required_door: | ||
3379 | door: Twos | ||
3380 | THREE (1): | ||
3381 | id: Backside Room/Panel_three_three | ||
3382 | tag: midwhite | ||
3383 | required_door: | ||
3384 | door: Threes | ||
3385 | THREE (2): | ||
3386 | id: Backside Room/Panel_three_three_2 | ||
3387 | tag: midwhite | ||
3388 | required_door: | ||
3389 | door: Threes | ||
3390 | THREE (3): | ||
3391 | id: Backside Room/Panel_three_three_3 | ||
3392 | tag: midwhite | ||
3393 | required_door: | ||
3394 | door: Threes | ||
3395 | FOUR: | ||
3396 | id: Backside Room/Panel_four_four | ||
3397 | tag: midwhite | ||
3398 | required_door: | ||
3399 | door: Fours | ||
3400 | doors: | ||
3401 | Undeterred Entrance: | ||
3402 | id: Red Blue Purple Room Area Doors/Door_pen_open | ||
3403 | item_name: The Undeterred - Entrance | ||
3404 | panels: | ||
3405 | - PEN | ||
3406 | Painting Shortcut: | ||
3407 | painting_id: | ||
3408 | - blueman_painting_3 | ||
3409 | - arrows_painting3 | ||
3410 | skip_location: True | ||
3411 | item_name: Starting Room - Blue Painting | ||
3412 | panels: | ||
3413 | - PEN | ||
3414 | Green Painting: | ||
3415 | painting_id: maze_painting_3 | ||
3416 | skip_location: True | ||
3417 | panels: | ||
3418 | - FOUR | ||
3419 | Twos: | ||
3420 | id: | ||
3421 | - Count Up Room Area Doors/Door_two_hider | ||
3422 | - Count Up Room Area Doors/Door_two_hider_2 | ||
3423 | include_reduce: True | ||
3424 | panels: | ||
3425 | - ONE | ||
3426 | Threes: | ||
3427 | id: | ||
3428 | - Count Up Room Area Doors/Door_three_hider | ||
3429 | - Count Up Room Area Doors/Door_three_hider_2 | ||
3430 | - Count Up Room Area Doors/Door_three_hider_3 | ||
3431 | location_name: Twos | ||
3432 | include_reduce: True | ||
3433 | panels: | ||
3434 | - TWO (1) | ||
3435 | - TWO (2) | ||
3436 | Number Hunt: | ||
3437 | id: Count Up Room Area Doors/Door_three_unlocked | ||
3438 | location_name: Threes | ||
3439 | include_reduce: True | ||
3440 | panels: | ||
3441 | - THREE (1) | ||
3442 | - THREE (2) | ||
3443 | - THREE (3) | ||
3444 | Fours: | ||
3445 | id: | ||
3446 | - Count Up Room Area Doors/Door_four_hider | ||
3447 | - Count Up Room Area Doors/Door_four_hider_2 | ||
3448 | - Count Up Room Area Doors/Door_four_hider_3 | ||
3449 | - Count Up Room Area Doors/Door_four_hider_4 | ||
3450 | skip_location: True | ||
3451 | panels: | ||
3452 | - THREE (1) | ||
3453 | - THREE (2) | ||
3454 | - THREE (3) | ||
3455 | Fives: | ||
3456 | id: | ||
3457 | - Count Up Room Area Doors/Door_five_hider | ||
3458 | - Count Up Room Area Doors/Door_five_hider_4 | ||
3459 | - Count Up Room Area Doors/Door_five_hider_5 | ||
3460 | location_name: Fours | ||
3461 | item_name: Number Hunt - Fives | ||
3462 | include_reduce: True | ||
3463 | panels: | ||
3464 | - FOUR | ||
3465 | - room: Hub Room | ||
3466 | panel: FOUR | ||
3467 | - room: Dead End Area | ||
3468 | panel: FOUR | ||
3469 | - room: The Traveled | ||
3470 | panel: FOUR | ||
3471 | Challenge Entrance: | ||
3472 | id: Count Up Room Area Doors/Door_zero_unlocked | ||
3473 | item_name: Number Hunt - Challenge Entrance | ||
3474 | panels: | ||
3475 | - ZERO | ||
3476 | paintings: | ||
3477 | - id: maze_painting_3 | ||
3478 | enter_only: True | ||
3479 | orientation: north | ||
3480 | move: True | ||
3481 | required_door: | ||
3482 | door: Green Painting | ||
3483 | - id: blueman_painting_2 | ||
3484 | orientation: east | ||
3485 | The Undeterred: | ||
3486 | entrances: | ||
3487 | Outside The Undeterred: | ||
3488 | room: Outside The Undeterred | ||
3489 | door: Undeterred Entrance | ||
3490 | panels: | ||
3491 | Achievement: | ||
3492 | id: Countdown Panels/Panel_deterred_undeterred | ||
3493 | colors: blue | ||
3494 | tag: forbid | ||
3495 | check: True | ||
3496 | achievement: The Undeterred | ||
3497 | BONE: | ||
3498 | id: Blue Room/Panel_bone_skeleton | ||
3499 | colors: blue | ||
3500 | tag: botblue | ||
3501 | EYE: | ||
3502 | id: Blue Room/Panel_mouth_face | ||
3503 | colors: blue | ||
3504 | tag: double botblue | ||
3505 | subtag: left | ||
3506 | link: holo FACE | ||
3507 | MOUTH: | ||
3508 | id: Blue Room/Panel_eye_face | ||
3509 | colors: blue | ||
3510 | tag: double botblue | ||
3511 | subtag: right | ||
3512 | link: holo FACE | ||
3513 | IRIS: | ||
3514 | id: Blue Room/Panel_toucan_bird | ||
3515 | colors: blue | ||
3516 | tag: botblue | ||
3517 | EYE (2): | ||
3518 | id: Blue Room/Panel_two_toucan | ||
3519 | colors: blue | ||
3520 | tag: topblue | ||
3521 | ICE: | ||
3522 | id: Blue Room/Panel_ice_eyesight | ||
3523 | colors: blue | ||
3524 | tag: double topblue | ||
3525 | subtag: left | ||
3526 | link: hex EYESIGHT | ||
3527 | HEIGHT: | ||
3528 | id: Blue Room/Panel_height_eyesight | ||
3529 | colors: blue | ||
3530 | tag: double topblue | ||
3531 | subtag: right | ||
3532 | link: hex EYESIGHT | ||
3533 | EYE (3): | ||
3534 | id: Blue Room/Panel_eye_hi | ||
3535 | colors: blue | ||
3536 | tag: topblue | ||
3537 | NOT: | ||
3538 | id: Blue Room/Panel_not_notice | ||
3539 | colors: blue | ||
3540 | tag: midblue | ||
3541 | JUST: | ||
3542 | id: Blue Room/Panel_just_readjust | ||
3543 | colors: blue | ||
3544 | tag: double midblue | ||
3545 | subtag: left | ||
3546 | link: exp READJUST | ||
3547 | READ: | ||
3548 | id: Blue Room/Panel_read_readjust | ||
3549 | colors: blue | ||
3550 | tag: double midblue | ||
3551 | subtag: right | ||
3552 | link: exp READJUST | ||
3553 | FATHER: | ||
3554 | id: Blue Room/Panel_ate_primate | ||
3555 | colors: blue | ||
3556 | tag: midblue | ||
3557 | FEATHER: | ||
3558 | id: Blue Room/Panel_primate_mammal | ||
3559 | colors: blue | ||
3560 | tag: botblue | ||
3561 | CONTINENT: | ||
3562 | id: Blue Room/Panel_continent_planet | ||
3563 | colors: blue | ||
3564 | tag: double botblue | ||
3565 | subtag: left | ||
3566 | link: holo PLANET | ||
3567 | OCEAN: | ||
3568 | id: Blue Room/Panel_ocean_planet | ||
3569 | colors: blue | ||
3570 | tag: double botblue | ||
3571 | subtag: right | ||
3572 | link: holo PLANET | ||
3573 | WALL: | ||
3574 | id: Blue Room/Panel_wall_room | ||
3575 | colors: blue | ||
3576 | tag: botblue | ||
3577 | Number Hunt: | ||
3578 | # This works a little differently than in the base game. The door to the | ||
3579 | # initial number in each set opens at the same time as the rest of the doors | ||
3580 | # in that set. | ||
3581 | entrances: | ||
3582 | Outside The Undeterred: | ||
3583 | room: Outside The Undeterred | ||
3584 | door: Number Hunt | ||
3585 | Directional Gallery: | ||
3586 | door: Door to Directional Gallery | ||
3587 | Challenge Room: | ||
3588 | room: Outside The Undeterred | ||
3589 | door: Challenge Entrance | ||
3590 | panels: | ||
3591 | FIVE: | ||
3592 | id: Backside Room/Panel_five_five | ||
3593 | tag: midwhite | ||
3594 | required_door: | ||
3595 | room: Outside The Undeterred | ||
3596 | door: Fives | ||
3597 | SIX: | ||
3598 | id: Backside Room/Panel_six_six | ||
3599 | tag: midwhite | ||
3600 | required_door: | ||
3601 | door: Sixes | ||
3602 | SEVEN: | ||
3603 | id: Backside Room/Panel_seven_seven | ||
3604 | tag: midwhite | ||
3605 | required_door: | ||
3606 | door: Sevens | ||
3607 | EIGHT: | ||
3608 | id: Backside Room/Panel_eight_eight | ||
3609 | tag: midwhite | ||
3610 | required_door: | ||
3611 | door: Eights | ||
3612 | NINE: | ||
3613 | id: Backside Room/Panel_nine_nine | ||
3614 | tag: midwhite | ||
3615 | required_door: | ||
3616 | door: Nines | ||
3617 | doors: | ||
3618 | Door to Directional Gallery: | ||
3619 | id: Count Up Room Area Doors/Door_five_unlocked | ||
3620 | group: Directional Gallery Doors | ||
3621 | skip_location: True | ||
3622 | panels: | ||
3623 | - FIVE | ||
3624 | Sixes: | ||
3625 | id: | ||
3626 | - Count Up Room Area Doors/Door_six_hider | ||
3627 | - Count Up Room Area Doors/Door_six_hider_2 | ||
3628 | - Count Up Room Area Doors/Door_six_hider_3 | ||
3629 | - Count Up Room Area Doors/Door_six_hider_4 | ||
3630 | - Count Up Room Area Doors/Door_six_hider_5 | ||
3631 | - Count Up Room Area Doors/Door_six_hider_6 | ||
3632 | painting_id: pencil_painting3 # See note in Outside The Bold | ||
3633 | location_name: Fives | ||
3634 | include_reduce: True | ||
3635 | panels: | ||
3636 | - FIVE | ||
3637 | - room: Outside The Agreeable | ||
3638 | panel: FIVE (1) | ||
3639 | - room: Outside The Agreeable | ||
3640 | panel: FIVE (2) | ||
3641 | - room: Directional Gallery | ||
3642 | panel: FIVE (1) | ||
3643 | - room: Directional Gallery | ||
3644 | panel: FIVE (2) | ||
3645 | Sevens: | ||
3646 | id: | ||
3647 | - Count Up Room Area Doors/Door_seven_hider | ||
3648 | - Count Up Room Area Doors/Door_seven_unlocked | ||
3649 | - Count Up Room Area Doors/Door_seven_hider_2 | ||
3650 | - Count Up Room Area Doors/Door_seven_hider_3 | ||
3651 | - Count Up Room Area Doors/Door_seven_hider_4 | ||
3652 | - Count Up Room Area Doors/Door_seven_hider_5 | ||
3653 | - Count Up Room Area Doors/Door_seven_hider_6 | ||
3654 | - Count Up Room Area Doors/Door_seven_hider_7 | ||
3655 | location_name: Sixes | ||
3656 | include_reduce: True | ||
3657 | panels: | ||
3658 | - SIX | ||
3659 | - room: Outside The Bold | ||
3660 | panel: SIX | ||
3661 | - room: Directional Gallery | ||
3662 | panel: SIX (1) | ||
3663 | - room: Directional Gallery | ||
3664 | panel: SIX (2) | ||
3665 | - room: The Bearer (East) | ||
3666 | panel: SIX | ||
3667 | - room: The Bearer (South) | ||
3668 | panel: SIX | ||
3669 | Eights: | ||
3670 | id: | ||
3671 | - Count Up Room Area Doors/Door_eight_hider | ||
3672 | - Count Up Room Area Doors/Door_eight_unlocked | ||
3673 | - Count Up Room Area Doors/Door_eight_hider_2 | ||
3674 | - Count Up Room Area Doors/Door_eight_hider_3 | ||
3675 | - Count Up Room Area Doors/Door_eight_hider_4 | ||
3676 | - Count Up Room Area Doors/Door_eight_hider_5 | ||
3677 | - Count Up Room Area Doors/Door_eight_hider_6 | ||
3678 | - Count Up Room Area Doors/Door_eight_hider_7 | ||
3679 | - Count Up Room Area Doors/Door_eight_hider_8 | ||
3680 | location_name: Sevens | ||
3681 | include_reduce: True | ||
3682 | panels: | ||
3683 | - SEVEN | ||
3684 | - room: Directional Gallery | ||
3685 | panel: SEVEN | ||
3686 | - room: Knight Night Exit | ||
3687 | panel: SEVEN (1) | ||
3688 | - room: Knight Night Exit | ||
3689 | panel: SEVEN (2) | ||
3690 | - room: Knight Night Exit | ||
3691 | panel: SEVEN (3) | ||
3692 | - room: Outside The Initiated | ||
3693 | panel: SEVEN (1) | ||
3694 | - room: Outside The Initiated | ||
3695 | panel: SEVEN (2) | ||
3696 | Nines: | ||
3697 | id: | ||
3698 | - Count Up Room Area Doors/Door_nine_hider | ||
3699 | - Count Up Room Area Doors/Door_nine_hider_2 | ||
3700 | - Count Up Room Area Doors/Door_nine_hider_3 | ||
3701 | - Count Up Room Area Doors/Door_nine_hider_4 | ||
3702 | - Count Up Room Area Doors/Door_nine_hider_5 | ||
3703 | - Count Up Room Area Doors/Door_nine_hider_6 | ||
3704 | - Count Up Room Area Doors/Door_nine_hider_7 | ||
3705 | - Count Up Room Area Doors/Door_nine_hider_8 | ||
3706 | - Count Up Room Area Doors/Door_nine_hider_9 | ||
3707 | location_name: Eights | ||
3708 | include_reduce: True | ||
3709 | panels: | ||
3710 | - EIGHT | ||
3711 | - room: Directional Gallery | ||
3712 | panel: EIGHT | ||
3713 | - room: The Eyes They See | ||
3714 | panel: EIGHT | ||
3715 | - room: Dead End Area | ||
3716 | panel: EIGHT | ||
3717 | - room: Crossroads | ||
3718 | panel: EIGHT | ||
3719 | - room: Hot Crusts Area | ||
3720 | panel: EIGHT | ||
3721 | - room: Art Gallery | ||
3722 | panel: EIGHT | ||
3723 | - room: Outside The Initiated | ||
3724 | panel: EIGHT | ||
3725 | Zero Door: | ||
3726 | # The black wall isn't a door, so we can't ever hide it. | ||
3727 | id: Count Up Room Area Doors/Door_zero_hider_2 | ||
3728 | location_name: Nines | ||
3729 | item_name: Outside The Undeterred - Zero Door | ||
3730 | include_reduce: True | ||
3731 | panels: | ||
3732 | - NINE | ||
3733 | - room: Directional Gallery | ||
3734 | panel: NINE | ||
3735 | - room: Amen Name Area | ||
3736 | panel: NINE | ||
3737 | - room: Yellow Backside Area | ||
3738 | panel: NINE | ||
3739 | - room: Outside The Initiated | ||
3740 | panel: NINE | ||
3741 | - room: Outside The Bold | ||
3742 | panel: NINE | ||
3743 | - room: Rhyme Room (Cross) | ||
3744 | panel: NINE | ||
3745 | - room: Orange Tower Fifth Floor | ||
3746 | panel: NINE | ||
3747 | - room: Elements Area | ||
3748 | panel: NINE | ||
3749 | paintings: | ||
3750 | - id: smile_painting_5 | ||
3751 | enter_only: True | ||
3752 | orientation: east | ||
3753 | required_door: | ||
3754 | door: Eights | ||
3755 | Directional Gallery: | ||
3756 | entrances: | ||
3757 | Outside The Agreeable: True # sunwarp | ||
3758 | Orange Tower First Floor: | ||
3759 | room: Orange Tower First Floor | ||
3760 | door: Salt Pepper Door | ||
3761 | Outside The Undeterred: | ||
3762 | door: Shortcut to The Undeterred | ||
3763 | Number Hunt: | ||
3764 | room: Number Hunt | ||
3765 | door: Door to Directional Gallery | ||
3766 | panels: | ||
3767 | PEPPER: | ||
3768 | id: Backside Room/Panel_pepper_salt | ||
3769 | colors: black | ||
3770 | tag: botblack | ||
3771 | TURN: | ||
3772 | id: Backside Room/Panel_turn_return | ||
3773 | colors: blue | ||
3774 | tag: midblue | ||
3775 | LEARN: | ||
3776 | id: Backside Room/Panel_learn_return | ||
3777 | colors: purple | ||
3778 | tag: midpurp | ||
3779 | FIVE (1): | ||
3780 | id: Backside Room/Panel_five_five_3 | ||
3781 | tag: midwhite | ||
3782 | required_panel: | ||
3783 | panel: LIGHT | ||
3784 | FIVE (2): | ||
3785 | id: Backside Room/Panel_five_five_2 | ||
3786 | tag: midwhite | ||
3787 | required_panel: | ||
3788 | panel: WARD | ||
3789 | SIX (1): | ||
3790 | id: Backside Room/Panel_six_six_3 | ||
3791 | tag: midwhite | ||
3792 | required_door: | ||
3793 | room: Number Hunt | ||
3794 | door: Sixes | ||
3795 | SIX (2): | ||
3796 | id: Backside Room/Panel_six_six_2 | ||
3797 | tag: midwhite | ||
3798 | required_door: | ||
3799 | room: Number Hunt | ||
3800 | door: Sixes | ||
3801 | SEVEN: | ||
3802 | id: Backside Room/Panel_seven_seven_2 | ||
3803 | tag: midwhite | ||
3804 | required_door: | ||
3805 | room: Number Hunt | ||
3806 | door: Sevens | ||
3807 | EIGHT: | ||
3808 | id: Backside Room/Panel_eight_eight_2 | ||
3809 | tag: midwhite | ||
3810 | required_door: | ||
3811 | room: Number Hunt | ||
3812 | door: Eights | ||
3813 | NINE: | ||
3814 | id: Backside Room/Panel_nine_nine_6 | ||
3815 | tag: midwhite | ||
3816 | required_door: | ||
3817 | room: Number Hunt | ||
3818 | door: Nines | ||
3819 | BACKSIDE: | ||
3820 | id: Backside Room/Panel_backside_4 | ||
3821 | tag: midwhite | ||
3822 | "834283054": | ||
3823 | id: Tower Room/Panel_834283054_undaunted | ||
3824 | colors: orange | ||
3825 | check: True | ||
3826 | exclude_reduce: True | ||
3827 | tag: midorange | ||
3828 | required_door: | ||
3829 | room: Number Hunt | ||
3830 | door: Sixes | ||
3831 | PARANOID: | ||
3832 | id: Backside Room/Panel_paranoid_paranoid | ||
3833 | tag: midwhite | ||
3834 | check: True | ||
3835 | exclude_reduce: True | ||
3836 | required_door: | ||
3837 | room: Number Hunt | ||
3838 | door: Sixes | ||
3839 | YELLOW: | ||
3840 | id: Color Arrow Room/Panel_yellow_afar | ||
3841 | tag: midwhite | ||
3842 | required_door: | ||
3843 | door: Yellow Barrier | ||
3844 | WADED + WEE: | ||
3845 | id: Tower Room/Panel_waded_wee_warts_7 | ||
3846 | colors: orange | ||
3847 | check: True | ||
3848 | exclude_reduce: True | ||
3849 | tag: midorange | ||
3850 | THE EYES: | ||
3851 | id: Shuffle Room/Panel_theeyes_theeyes | ||
3852 | tag: midwhite | ||
3853 | LEFT: | ||
3854 | id: Shuffle Room/Panel_left_left | ||
3855 | tag: midwhite | ||
3856 | RIGHT: | ||
3857 | id: Shuffle Room/Panel_right_right | ||
3858 | tag: midwhite | ||
3859 | MIDDLE: | ||
3860 | id: Shuffle Room/Panel_middle_middle | ||
3861 | tag: midwhite | ||
3862 | WARD: | ||
3863 | id: Backside Room/Panel_ward_forward | ||
3864 | colors: blue | ||
3865 | tag: midblue | ||
3866 | HIND: | ||
3867 | id: Backside Room/Panel_hind_behind | ||
3868 | colors: blue | ||
3869 | tag: midblue | ||
3870 | RIG: | ||
3871 | id: Backside Room/Panel_rig_right | ||
3872 | colors: blue | ||
3873 | tag: midblue | ||
3874 | WINDWARD: | ||
3875 | id: Backside Room/Panel_windward_forward | ||
3876 | colors: purple | ||
3877 | tag: midpurp | ||
3878 | LIGHT: | ||
3879 | id: Backside Room/Panel_light_right | ||
3880 | colors: purple | ||
3881 | tag: midpurp | ||
3882 | REWIND: | ||
3883 | id: Backside Room/Panel_rewind_behind | ||
3884 | colors: purple | ||
3885 | tag: midpurp | ||
3886 | doors: | ||
3887 | Shortcut to The Undeterred: | ||
3888 | id: Count Up Room Area Doors/Door_return_double | ||
3889 | group: Directional Gallery Doors | ||
3890 | panels: | ||
3891 | - TURN | ||
3892 | - LEARN | ||
3893 | Yellow Barrier: | ||
3894 | id: Color Arrow Room Doors/Door_yellow_4 | ||
3895 | group: Color Hunt Barriers | ||
3896 | skip_location: True | ||
3897 | panels: | ||
3898 | - room: Champion's Rest | ||
3899 | panel: YELLOW | ||
3900 | paintings: | ||
3901 | - id: smile_painting_7 | ||
3902 | orientation: south | ||
3903 | - id: flower_painting_4 | ||
3904 | orientation: south | ||
3905 | - id: pencil_painting3 | ||
3906 | enter_only: True | ||
3907 | orientation: east | ||
3908 | move: True | ||
3909 | required_door: | ||
3910 | room: Number Hunt | ||
3911 | door: Sixes | ||
3912 | - id: boxes_painting | ||
3913 | orientation: south | ||
3914 | - id: cherry_painting | ||
3915 | orientation: east | ||
3916 | Champion's Rest: | ||
3917 | entrances: | ||
3918 | Outside The Bold: | ||
3919 | door: Shortcut to The Steady | ||
3920 | Orange Tower Fourth Floor: True # sunwarp | ||
3921 | Roof: True # through ceiling of sunwarp | ||
3922 | panels: | ||
3923 | EXIT: | ||
3924 | id: Rock Room/Panel_red_red | ||
3925 | tag: midwhite | ||
3926 | HUES: | ||
3927 | id: Color Arrow Room/Panel_hues_colors | ||
3928 | tag: botwhite | ||
3929 | RED: | ||
3930 | id: Color Arrow Room/Panel_red_near | ||
3931 | check: True | ||
3932 | tag: midwhite | ||
3933 | BLUE: | ||
3934 | id: Color Arrow Room/Panel_blue_near | ||
3935 | check: True | ||
3936 | tag: midwhite | ||
3937 | YELLOW: | ||
3938 | id: Color Arrow Room/Panel_yellow_near | ||
3939 | check: True | ||
3940 | tag: midwhite | ||
3941 | GREEN: | ||
3942 | id: Color Arrow Room/Panel_green_near | ||
3943 | check: True | ||
3944 | tag: midwhite | ||
3945 | required_door: | ||
3946 | room: Outside The Initiated | ||
3947 | door: Green Barrier | ||
3948 | PURPLE: | ||
3949 | id: Color Arrow Room/Panel_purple_near | ||
3950 | check: True | ||
3951 | tag: midwhite | ||
3952 | required_door: | ||
3953 | room: Outside The Initiated | ||
3954 | door: Purple Barrier | ||
3955 | ORANGE: | ||
3956 | id: Color Arrow Room/Panel_orange_near | ||
3957 | check: True | ||
3958 | tag: midwhite | ||
3959 | required_door: | ||
3960 | room: Orange Tower Third Floor | ||
3961 | door: Orange Barrier | ||
3962 | YOU: | ||
3963 | id: Color Arrow Room/Panel_you | ||
3964 | required_door: | ||
3965 | room: Outside The Initiated | ||
3966 | door: Entrance | ||
3967 | check: True | ||
3968 | colors: gray | ||
3969 | tag: forbid | ||
3970 | ME: | ||
3971 | id: Color Arrow Room/Panel_me | ||
3972 | colors: gray | ||
3973 | tag: forbid | ||
3974 | required_door: | ||
3975 | room: Outside The Initiated | ||
3976 | door: Entrance | ||
3977 | SECRET BLUE: | ||
3978 | # Pretend this and the other two are white, because they are snipes. | ||
3979 | # TODO: Extract them and randomize them? | ||
3980 | id: Color Arrow Room/Panel_secret_blue | ||
3981 | tag: forbid | ||
3982 | required_door: | ||
3983 | room: Outside The Initiated | ||
3984 | door: Entrance | ||
3985 | SECRET YELLOW: | ||
3986 | id: Color Arrow Room/Panel_secret_yellow | ||
3987 | tag: forbid | ||
3988 | required_door: | ||
3989 | room: Outside The Initiated | ||
3990 | door: Entrance | ||
3991 | SECRET RED: | ||
3992 | id: Color Arrow Room/Panel_secret_red | ||
3993 | tag: forbid | ||
3994 | required_door: | ||
3995 | room: Outside The Initiated | ||
3996 | door: Entrance | ||
3997 | doors: | ||
3998 | Shortcut to The Steady: | ||
3999 | id: Rock Room Doors/Door_hint | ||
4000 | panels: | ||
4001 | - EXIT | ||
4002 | paintings: | ||
4003 | - id: arrows_painting_7 | ||
4004 | orientation: east | ||
4005 | - id: fruitbowl_painting3 | ||
4006 | orientation: west | ||
4007 | enter_only: True | ||
4008 | required_door: | ||
4009 | room: Outside The Initiated | ||
4010 | door: Entrance | ||
4011 | - id: colors_painting | ||
4012 | orientation: south | ||
4013 | enter_only: True | ||
4014 | required_door: | ||
4015 | room: Outside The Initiated | ||
4016 | door: Entrance | ||
4017 | The Bearer: | ||
4018 | entrances: | ||
4019 | Outside The Bold: | ||
4020 | door: Shortcut to The Bold | ||
4021 | Orange Tower Fifth Floor: | ||
4022 | room: Art Gallery | ||
4023 | door: Exit | ||
4024 | The Bearer (East): True | ||
4025 | The Bearer (North): True | ||
4026 | The Bearer (South): True | ||
4027 | The Bearer (West): True | ||
4028 | Roof: True | ||
4029 | panels: | ||
4030 | Achievement: | ||
4031 | id: Countdown Panels/Panel_bearer_bearer | ||
4032 | check: True | ||
4033 | tag: forbid | ||
4034 | required_panel: | ||
4035 | - panel: PART | ||
4036 | - panel: HEART | ||
4037 | - room: Cross Tower (East) | ||
4038 | panel: WINTER | ||
4039 | - room: The Bearer (East) | ||
4040 | panel: PEACE | ||
4041 | - room: Cross Tower (North) | ||
4042 | panel: NORTH | ||
4043 | - room: The Bearer (North) | ||
4044 | panel: SILENT (1) | ||
4045 | - room: The Bearer (North) | ||
4046 | panel: SILENT (2) | ||
4047 | - room: The Bearer (North) | ||
4048 | panel: SPACE | ||
4049 | - room: The Bearer (North) | ||
4050 | panel: WARTS | ||
4051 | - room: Cross Tower (South) | ||
4052 | panel: FIRE | ||
4053 | - room: The Bearer (South) | ||
4054 | panel: TENT | ||
4055 | - room: The Bearer (South) | ||
4056 | panel: BOWL | ||
4057 | - room: Cross Tower (West) | ||
4058 | panel: DIAMONDS | ||
4059 | - room: The Bearer (West) | ||
4060 | panel: SNOW | ||
4061 | - room: The Bearer (West) | ||
4062 | panel: SMILE | ||
4063 | - room: Bearer Side Area | ||
4064 | panel: SHORTCUT | ||
4065 | - room: Bearer Side Area | ||
4066 | panel: POTS | ||
4067 | achievement: The Bearer | ||
4068 | MIDDLE: | ||
4069 | id: Shuffle Room/Panel_middle_middle_2 | ||
4070 | tag: midwhite | ||
4071 | FARTHER: | ||
4072 | id: Backside Room/Panel_farther_far | ||
4073 | colors: red | ||
4074 | tag: midred | ||
4075 | BACKSIDE: | ||
4076 | id: Backside Room/Panel_backside_5 | ||
4077 | tag: midwhite | ||
4078 | required_door: | ||
4079 | door: Backside Door | ||
4080 | PART: | ||
4081 | id: Cross Room/Panel_part_rap | ||
4082 | colors: | ||
4083 | - red | ||
4084 | - yellow | ||
4085 | tag: mid red yellow | ||
4086 | required_panel: | ||
4087 | room: The Bearer (East) | ||
4088 | panel: PEACE | ||
4089 | HEART: | ||
4090 | id: Cross Room/Panel_heart_tar | ||
4091 | colors: | ||
4092 | - red | ||
4093 | - yellow | ||
4094 | tag: mid red yellow | ||
4095 | doors: | ||
4096 | Shortcut to The Bold: | ||
4097 | id: Red Blue Purple Room Area Doors/Door_middle_middle | ||
4098 | panels: | ||
4099 | - MIDDLE | ||
4100 | Backside Door: | ||
4101 | id: Red Blue Purple Room Area Doors/Door_locked_knocked2 # yeah... | ||
4102 | group: Backside Doors | ||
4103 | panels: | ||
4104 | - FARTHER | ||
4105 | East Entrance: | ||
4106 | event: True | ||
4107 | panels: | ||
4108 | - HEART | ||
4109 | The Bearer (East): | ||
4110 | entrances: | ||
4111 | Cross Tower (East): True | ||
4112 | Bearer Side Area: | ||
4113 | door: Side Area Access | ||
4114 | Roof: True | ||
4115 | panels: | ||
4116 | SIX: | ||
4117 | id: Backside Room/Panel_six_six_5 | ||
4118 | tag: midwhite | ||
4119 | colors: | ||
4120 | - red | ||
4121 | - yellow | ||
4122 | required_door: | ||
4123 | room: Number Hunt | ||
4124 | door: Sixes | ||
4125 | PEACE: | ||
4126 | id: Cross Room/Panel_peace_ape | ||
4127 | colors: | ||
4128 | - red | ||
4129 | - yellow | ||
4130 | tag: mid red yellow | ||
4131 | doors: | ||
4132 | North Entrance: | ||
4133 | event: True | ||
4134 | panels: | ||
4135 | - room: The Bearer | ||
4136 | panel: PART | ||
4137 | Side Area Access: | ||
4138 | event: True | ||
4139 | panels: | ||
4140 | - room: The Bearer (North) | ||
4141 | panel: SPACE | ||
4142 | The Bearer (North): | ||
4143 | entrances: | ||
4144 | Cross Tower (East): True | ||
4145 | Roof: True | ||
4146 | panels: | ||
4147 | SILENT (1): | ||
4148 | id: Cross Room/Panel_silent_list | ||
4149 | colors: | ||
4150 | - red | ||
4151 | - yellow | ||
4152 | tag: mid red yellow | ||
4153 | required_panel: | ||
4154 | room: The Bearer (West) | ||
4155 | panel: SMILE | ||
4156 | SILENT (2): | ||
4157 | id: Cross Room/Panel_silent_list_2 | ||
4158 | colors: | ||
4159 | - red | ||
4160 | - yellow | ||
4161 | tag: mid yellow red | ||
4162 | required_panel: | ||
4163 | room: The Bearer (West) | ||
4164 | panel: SMILE | ||
4165 | SPACE: | ||
4166 | id: Cross Room/Panel_space_cape | ||
4167 | colors: | ||
4168 | - red | ||
4169 | - yellow | ||
4170 | tag: mid red yellow | ||
4171 | WARTS: | ||
4172 | id: Cross Room/Panel_warts_star | ||
4173 | colors: | ||
4174 | - red | ||
4175 | - yellow | ||
4176 | tag: mid red yellow | ||
4177 | required_panel: | ||
4178 | room: The Bearer (West) | ||
4179 | panel: SNOW | ||
4180 | doors: | ||
4181 | South Entrance: | ||
4182 | event: True | ||
4183 | panels: | ||
4184 | - room: Bearer Side Area | ||
4185 | panel: POTS | ||
4186 | The Bearer (South): | ||
4187 | entrances: | ||
4188 | Cross Tower (North): True | ||
4189 | Bearer Side Area: | ||
4190 | door: Side Area Shortcut | ||
4191 | Roof: True | ||
4192 | panels: | ||
4193 | SIX: | ||
4194 | id: Backside Room/Panel_six_six_6 | ||
4195 | tag: midwhite | ||
4196 | colors: | ||
4197 | - red | ||
4198 | - yellow | ||
4199 | required_door: | ||
4200 | room: Number Hunt | ||
4201 | door: Sixes | ||
4202 | TENT: | ||
4203 | id: Cross Room/Panel_tent_net | ||
4204 | colors: | ||
4205 | - red | ||
4206 | - yellow | ||
4207 | tag: mid red yellow | ||
4208 | BOWL: | ||
4209 | id: Cross Room/Panel_bowl_low | ||
4210 | colors: | ||
4211 | - red | ||
4212 | - yellow | ||
4213 | tag: mid red yellow | ||
4214 | required_panel: | ||
4215 | panel: TENT | ||
4216 | doors: | ||
4217 | Side Area Shortcut: | ||
4218 | event: True | ||
4219 | panels: | ||
4220 | - room: The Bearer (North) | ||
4221 | panel: SILENT (1) | ||
4222 | The Bearer (West): | ||
4223 | entrances: | ||
4224 | Cross Tower (West): True | ||
4225 | Bearer Side Area: | ||
4226 | door: Side Area Shortcut | ||
4227 | Roof: True | ||
4228 | panels: | ||
4229 | SNOW: | ||
4230 | id: Cross Room/Panel_smile_lime | ||
4231 | colors: | ||
4232 | - red | ||
4233 | - yellow | ||
4234 | tag: mid yellow red | ||
4235 | SMILE: | ||
4236 | id: Cross Room/Panel_snow_won | ||
4237 | colors: | ||
4238 | - red | ||
4239 | - yellow | ||
4240 | tag: mid red yellow | ||
4241 | required_panel: | ||
4242 | room: The Bearer (North) | ||
4243 | panel: WARTS | ||
4244 | doors: | ||
4245 | Side Area Shortcut: | ||
4246 | event: True | ||
4247 | panels: | ||
4248 | - room: Cross Tower (East) | ||
4249 | panel: WINTER | ||
4250 | - room: Cross Tower (North) | ||
4251 | panel: NORTH | ||
4252 | - room: Cross Tower (South) | ||
4253 | panel: FIRE | ||
4254 | - room: Cross Tower (West) | ||
4255 | panel: DIAMONDS | ||
4256 | Bearer Side Area: | ||
4257 | entrances: | ||
4258 | The Bearer (East): | ||
4259 | room: The Bearer (East) | ||
4260 | door: Side Area Access | ||
4261 | The Bearer (South): | ||
4262 | room: The Bearer (South) | ||
4263 | door: Side Area Shortcut | ||
4264 | The Bearer (West): | ||
4265 | room: The Bearer (West) | ||
4266 | door: Side Area Shortcut | ||
4267 | Orange Tower Third Floor: | ||
4268 | door: Shortcut to Tower | ||
4269 | Roof: True | ||
4270 | panels: | ||
4271 | SHORTCUT: | ||
4272 | id: Cross Room/Panel_shortcut_shortcut | ||
4273 | tag: midwhite | ||
4274 | POTS: | ||
4275 | id: Cross Room/Panel_pots_top | ||
4276 | colors: | ||
4277 | - red | ||
4278 | - yellow | ||
4279 | tag: mid yellow red | ||
4280 | doors: | ||
4281 | Shortcut to Tower: | ||
4282 | id: Cross Room Doors/Door_shortcut | ||
4283 | item_name: The Bearer - Shortcut to Tower | ||
4284 | location_name: The Bearer - SHORTCUT | ||
4285 | panels: | ||
4286 | - SHORTCUT | ||
4287 | West Entrance: | ||
4288 | event: True | ||
4289 | panels: | ||
4290 | - room: The Bearer (South) | ||
4291 | panel: BOWL | ||
4292 | Cross Tower (East): | ||
4293 | entrances: | ||
4294 | The Bearer: | ||
4295 | room: The Bearer | ||
4296 | door: East Entrance | ||
4297 | Roof: True | ||
4298 | panels: | ||
4299 | WINTER: | ||
4300 | id: Cross Room/Panel_winter_winter | ||
4301 | colors: blue | ||
4302 | tag: forbid | ||
4303 | required_panel: | ||
4304 | room: The Bearer (North) | ||
4305 | panel: SPACE | ||
4306 | required_room: Orange Tower Fifth Floor | ||
4307 | Cross Tower (North): | ||
4308 | entrances: | ||
4309 | The Bearer (East): | ||
4310 | room: The Bearer (East) | ||
4311 | door: North Entrance | ||
4312 | Roof: True | ||
4313 | panels: | ||
4314 | NORTH: | ||
4315 | id: Cross Room/Panel_north_north | ||
4316 | colors: blue | ||
4317 | tag: forbid | ||
4318 | required_panel: | ||
4319 | room: The Bearer (West) | ||
4320 | panel: SMILE | ||
4321 | required_room: Outside The Bold | ||
4322 | Cross Tower (South): | ||
4323 | entrances: # No roof access | ||
4324 | The Bearer (North): | ||
4325 | room: The Bearer (North) | ||
4326 | door: South Entrance | ||
4327 | panels: | ||
4328 | FIRE: | ||
4329 | id: Cross Room/Panel_fire_fire | ||
4330 | colors: blue | ||
4331 | tag: forbid | ||
4332 | required_panel: | ||
4333 | room: The Bearer (North) | ||
4334 | panel: SILENT (1) | ||
4335 | required_room: Elements Area | ||
4336 | Cross Tower (West): | ||
4337 | entrances: | ||
4338 | Bearer Side Area: | ||
4339 | room: Bearer Side Area | ||
4340 | door: West Entrance | ||
4341 | Roof: True | ||
4342 | panels: | ||
4343 | DIAMONDS: | ||
4344 | id: Cross Room/Panel_diamonds_diamonds | ||
4345 | colors: blue | ||
4346 | tag: forbid | ||
4347 | required_panel: | ||
4348 | room: The Bearer (North) | ||
4349 | panel: WARTS | ||
4350 | required_room: Suits Area | ||
4351 | The Steady (Rose): | ||
4352 | entrances: | ||
4353 | Outside The Bold: | ||
4354 | room: Outside The Bold | ||
4355 | door: Steady Entrance | ||
4356 | The Steady (Lilac): | ||
4357 | room: The Steady | ||
4358 | door: Reveal | ||
4359 | The Steady (Ruby): | ||
4360 | door: Forward Exit | ||
4361 | The Steady (Carnation): | ||
4362 | door: Right Exit | ||
4363 | panels: | ||
4364 | SOAR: | ||
4365 | id: Rock Room/Panel_soar_rose | ||
4366 | colors: black | ||
4367 | tag: topblack | ||
4368 | doors: | ||
4369 | Forward Exit: | ||
4370 | event: True | ||
4371 | panels: | ||
4372 | - SOAR | ||
4373 | Right Exit: | ||
4374 | event: True | ||
4375 | panels: | ||
4376 | - room: The Steady (Lilac) | ||
4377 | panel: LIE LACK | ||
4378 | The Steady (Ruby): | ||
4379 | entrances: | ||
4380 | The Steady (Rose): | ||
4381 | room: The Steady (Rose) | ||
4382 | door: Forward Exit | ||
4383 | The Steady (Amethyst): | ||
4384 | room: The Steady | ||
4385 | door: Reveal | ||
4386 | The Steady (Cherry): | ||
4387 | door: Forward Exit | ||
4388 | The Steady (Amber): | ||
4389 | door: Right Exit | ||
4390 | panels: | ||
4391 | BURY: | ||
4392 | id: Rock Room/Panel_bury_ruby | ||
4393 | colors: yellow | ||
4394 | tag: midyellow | ||
4395 | doors: | ||
4396 | Forward Exit: | ||
4397 | event: True | ||
4398 | panels: | ||
4399 | - room: The Steady (Lime) | ||
4400 | panel: LIMELIGHT | ||
4401 | Right Exit: | ||
4402 | event: True | ||
4403 | panels: | ||
4404 | - room: The Steady (Carnation) | ||
4405 | panel: INCARNATION | ||
4406 | The Steady (Carnation): | ||
4407 | entrances: | ||
4408 | The Steady (Rose): | ||
4409 | room: The Steady (Rose) | ||
4410 | door: Right Exit | ||
4411 | Outside The Bold: | ||
4412 | room: The Steady | ||
4413 | door: Reveal | ||
4414 | The Steady (Amber): | ||
4415 | room: The Steady | ||
4416 | door: Reveal | ||
4417 | The Steady (Sunflower): | ||
4418 | door: Right Exit | ||
4419 | panels: | ||
4420 | INCARNATION: | ||
4421 | id: Rock Room/Panel_incarnation_carnation | ||
4422 | colors: red | ||
4423 | tag: midred | ||
4424 | doors: | ||
4425 | Right Exit: | ||
4426 | event: True | ||
4427 | panels: | ||
4428 | - room: The Steady (Amethyst) | ||
4429 | panel: PACIFIST | ||
4430 | The Steady (Sunflower): | ||
4431 | entrances: | ||
4432 | The Steady (Carnation): | ||
4433 | room: The Steady (Carnation) | ||
4434 | door: Right Exit | ||
4435 | The Steady (Topaz): | ||
4436 | room: The Steady (Topaz) | ||
4437 | door: Back Exit | ||
4438 | panels: | ||
4439 | SUN: | ||
4440 | id: Rock Room/Panel_sun_sunflower | ||
4441 | colors: blue | ||
4442 | tag: midblue | ||
4443 | doors: | ||
4444 | Back Exit: | ||
4445 | event: True | ||
4446 | panels: | ||
4447 | - SUN | ||
4448 | The Steady (Plum): | ||
4449 | entrances: | ||
4450 | The Steady (Amethyst): | ||
4451 | room: The Steady | ||
4452 | door: Reveal | ||
4453 | The Steady (Blueberry): | ||
4454 | room: The Steady | ||
4455 | door: Reveal | ||
4456 | The Steady (Cherry): | ||
4457 | room: The Steady (Cherry) | ||
4458 | door: Left Exit | ||
4459 | panels: | ||
4460 | LUMP: | ||
4461 | id: Rock Room/Panel_lump_plum | ||
4462 | colors: yellow | ||
4463 | tag: midyellow | ||
4464 | The Steady (Lime): | ||
4465 | entrances: | ||
4466 | The Steady (Sunflower): True | ||
4467 | The Steady (Emerald): | ||
4468 | room: The Steady | ||
4469 | door: Reveal | ||
4470 | The Steady (Blueberry): | ||
4471 | door: Right Exit | ||
4472 | panels: | ||
4473 | LIMELIGHT: | ||
4474 | id: Rock Room/Panel_limelight_lime | ||
4475 | colors: red | ||
4476 | tag: midred | ||
4477 | doors: | ||
4478 | Right Exit: | ||
4479 | event: True | ||
4480 | panels: | ||
4481 | - room: The Steady (Amber) | ||
4482 | panel: ANTECHAMBER | ||
4483 | paintings: | ||
4484 | - id: pencil_painting5 | ||
4485 | orientation: south | ||
4486 | The Steady (Lemon): | ||
4487 | entrances: | ||
4488 | The Steady (Emerald): True | ||
4489 | The Steady (Orange): | ||
4490 | room: The Steady | ||
4491 | door: Reveal | ||
4492 | The Steady (Topaz): | ||
4493 | door: Back Exit | ||
4494 | panels: | ||
4495 | MELON: | ||
4496 | id: Rock Room/Panel_melon_lemon | ||
4497 | colors: yellow | ||
4498 | tag: midyellow | ||
4499 | doors: | ||
4500 | Back Exit: | ||
4501 | event: True | ||
4502 | panels: | ||
4503 | - MELON | ||
4504 | paintings: | ||
4505 | - id: pencil_painting4 | ||
4506 | orientation: south | ||
4507 | The Steady (Topaz): | ||
4508 | entrances: | ||
4509 | The Steady (Lemon): | ||
4510 | room: The Steady (Lemon) | ||
4511 | door: Back Exit | ||
4512 | The Steady (Amber): | ||
4513 | room: The Steady | ||
4514 | door: Reveal | ||
4515 | The Steady (Sunflower): | ||
4516 | door: Back Exit | ||
4517 | panels: | ||
4518 | TOP: | ||
4519 | id: Rock Room/Panel_top_topaz | ||
4520 | colors: blue | ||
4521 | tag: midblue | ||
4522 | MASTERY: | ||
4523 | id: Master Room/Panel_mastery_mastery2 | ||
4524 | tag: midwhite | ||
4525 | required_door: | ||
4526 | room: Orange Tower Seventh Floor | ||
4527 | door: Mastery | ||
4528 | doors: | ||
4529 | Back Exit: | ||
4530 | event: True | ||
4531 | panels: | ||
4532 | - TOP | ||
4533 | The Steady (Orange): | ||
4534 | entrances: | ||
4535 | The Steady (Cherry): | ||
4536 | room: The Steady | ||
4537 | door: Reveal | ||
4538 | The Steady (Lemon): | ||
4539 | room: The Steady | ||
4540 | door: Reveal | ||
4541 | The Steady (Amber): | ||
4542 | room: The Steady (Amber) | ||
4543 | door: Forward Exit | ||
4544 | panels: | ||
4545 | BLUE: | ||
4546 | id: Rock Room/Panel_blue_orange | ||
4547 | colors: black | ||
4548 | tag: botblack | ||
4549 | The Steady (Sapphire): | ||
4550 | entrances: | ||
4551 | The Steady (Emerald): | ||
4552 | door: Left Exit | ||
4553 | The Steady (Blueberry): | ||
4554 | room: The Steady | ||
4555 | door: Reveal | ||
4556 | The Steady (Amethyst): | ||
4557 | room: The Steady (Amethyst) | ||
4558 | door: Left Exit | ||
4559 | panels: | ||
4560 | SAP: | ||
4561 | id: Rock Room/Panel_sap_sapphire | ||
4562 | colors: blue | ||
4563 | tag: midblue | ||
4564 | doors: | ||
4565 | Left Exit: | ||
4566 | event: True | ||
4567 | panels: | ||
4568 | - room: The Steady (Plum) | ||
4569 | panel: LUMP | ||
4570 | - room: The Steady (Orange) | ||
4571 | panel: BLUE | ||
4572 | The Steady (Blueberry): | ||
4573 | entrances: | ||
4574 | The Steady (Lime): | ||
4575 | room: The Steady (Lime) | ||
4576 | door: Right Exit | ||
4577 | The Steady (Sapphire): | ||
4578 | room: The Steady | ||
4579 | door: Reveal | ||
4580 | The Steady (Plum): | ||
4581 | room: The Steady | ||
4582 | door: Reveal | ||
4583 | panels: | ||
4584 | BLUE: | ||
4585 | id: Rock Room/Panel_blue_blueberry | ||
4586 | colors: blue | ||
4587 | tag: midblue | ||
4588 | The Steady (Amber): | ||
4589 | entrances: | ||
4590 | The Steady (Ruby): | ||
4591 | room: The Steady (Ruby) | ||
4592 | door: Right Exit | ||
4593 | The Steady (Carnation): | ||
4594 | room: The Steady | ||
4595 | door: Reveal | ||
4596 | The Steady (Orange): | ||
4597 | door: Forward Exit | ||
4598 | The Steady (Topaz): | ||
4599 | room: The Steady | ||
4600 | door: Reveal | ||
4601 | panels: | ||
4602 | ANTECHAMBER: | ||
4603 | id: Rock Room/Panel_antechamber_amber | ||
4604 | colors: red | ||
4605 | tag: midred | ||
4606 | doors: | ||
4607 | Forward Exit: | ||
4608 | event: True | ||
4609 | panels: | ||
4610 | - room: The Steady (Blueberry) | ||
4611 | panel: BLUE | ||
4612 | The Steady (Emerald): | ||
4613 | entrances: | ||
4614 | The Steady (Sapphire): | ||
4615 | room: The Steady (Sapphire) | ||
4616 | door: Left Exit | ||
4617 | The Steady (Lime): | ||
4618 | room: The Steady | ||
4619 | door: Reveal | ||
4620 | panels: | ||
4621 | HERALD: | ||
4622 | id: Rock Room/Panel_herald_emerald | ||
4623 | colors: purple | ||
4624 | tag: midpurp | ||
4625 | The Steady (Amethyst): | ||
4626 | entrances: | ||
4627 | The Steady (Lilac): | ||
4628 | room: The Steady (Lilac) | ||
4629 | door: Forward Exit | ||
4630 | The Steady (Sapphire): | ||
4631 | door: Left Exit | ||
4632 | The Steady (Plum): | ||
4633 | room: The Steady | ||
4634 | door: Reveal | ||
4635 | The Steady (Ruby): | ||
4636 | room: The Steady | ||
4637 | door: Reveal | ||
4638 | panels: | ||
4639 | PACIFIST: | ||
4640 | id: Rock Room/Panel_thistle_amethyst | ||
4641 | colors: purple | ||
4642 | tag: toppurp | ||
4643 | doors: | ||
4644 | Left Exit: | ||
4645 | event: True | ||
4646 | panels: | ||
4647 | - room: The Steady (Sunflower) | ||
4648 | panel: SUN | ||
4649 | The Steady (Lilac): | ||
4650 | entrances: | ||
4651 | Outside The Bold: | ||
4652 | room: Outside The Bold | ||
4653 | door: Lilac Entrance | ||
4654 | The Steady (Amethyst): | ||
4655 | door: Forward Exit | ||
4656 | The Steady (Rose): | ||
4657 | room: The Steady | ||
4658 | door: Reveal | ||
4659 | panels: | ||
4660 | LIE LACK: | ||
4661 | id: Rock Room/Panel_lielack_lilac | ||
4662 | tag: topwhite | ||
4663 | doors: | ||
4664 | Forward Exit: | ||
4665 | event: True | ||
4666 | panels: | ||
4667 | - room: The Steady (Ruby) | ||
4668 | panel: BURY | ||
4669 | The Steady (Cherry): | ||
4670 | entrances: | ||
4671 | The Steady (Plum): | ||
4672 | door: Left Exit | ||
4673 | The Steady (Orange): | ||
4674 | room: The Steady | ||
4675 | door: Reveal | ||
4676 | The Steady (Ruby): | ||
4677 | room: The Steady (Ruby) | ||
4678 | door: Forward Exit | ||
4679 | panels: | ||
4680 | HAIRY: | ||
4681 | id: Rock Room/Panel_hairy_cherry | ||
4682 | colors: blue | ||
4683 | tag: topblue | ||
4684 | doors: | ||
4685 | Left Exit: | ||
4686 | event: True | ||
4687 | panels: | ||
4688 | - room: The Steady (Sapphire) | ||
4689 | panel: SAP | ||
4690 | The Steady: | ||
4691 | entrances: | ||
4692 | The Steady (Sunflower): | ||
4693 | room: The Steady (Sunflower) | ||
4694 | door: Back Exit | ||
4695 | panels: | ||
4696 | Achievement: | ||
4697 | id: Countdown Panels/Panel_steady_steady | ||
4698 | required_panel: | ||
4699 | - room: The Steady (Rose) | ||
4700 | panel: SOAR | ||
4701 | - room: The Steady (Carnation) | ||
4702 | panel: INCARNATION | ||
4703 | - room: The Steady (Sunflower) | ||
4704 | panel: SUN | ||
4705 | - room: The Steady (Ruby) | ||
4706 | panel: BURY | ||
4707 | - room: The Steady (Plum) | ||
4708 | panel: LUMP | ||
4709 | - room: The Steady (Lime) | ||
4710 | panel: LIMELIGHT | ||
4711 | - room: The Steady (Lemon) | ||
4712 | panel: MELON | ||
4713 | - room: The Steady (Topaz) | ||
4714 | panel: TOP | ||
4715 | - room: The Steady (Orange) | ||
4716 | panel: BLUE | ||
4717 | - room: The Steady (Sapphire) | ||
4718 | panel: SAP | ||
4719 | - room: The Steady (Blueberry) | ||
4720 | panel: BLUE | ||
4721 | - room: The Steady (Amber) | ||
4722 | panel: ANTECHAMBER | ||
4723 | - room: The Steady (Emerald) | ||
4724 | panel: HERALD | ||
4725 | - room: The Steady (Amethyst) | ||
4726 | panel: PACIFIST | ||
4727 | - room: The Steady (Lilac) | ||
4728 | panel: LIE LACK | ||
4729 | - room: The Steady (Cherry) | ||
4730 | panel: HAIRY | ||
4731 | tag: forbid | ||
4732 | check: True | ||
4733 | achievement: The Steady | ||
4734 | doors: | ||
4735 | Reveal: | ||
4736 | event: True | ||
4737 | panels: | ||
4738 | - Achievement | ||
4739 | Knight Night (Outer Ring): | ||
4740 | entrances: | ||
4741 | Hidden Room: | ||
4742 | room: Hidden Room | ||
4743 | door: Knight Night Entrance | ||
4744 | Knight Night Exit: True | ||
4745 | panels: | ||
4746 | NIGHT: | ||
4747 | id: Appendix Room/Panel_night_knight | ||
4748 | colors: blue | ||
4749 | tag: homophone midblue | ||
4750 | copy_to_sign: sign7 | ||
4751 | KNIGHT: | ||
4752 | id: Appendix Room/Panel_knight_night | ||
4753 | colors: red | ||
4754 | tag: homophone midred | ||
4755 | copy_to_sign: sign8 | ||
4756 | BEE: | ||
4757 | id: Appendix Room/Panel_bee_be | ||
4758 | colors: red | ||
4759 | tag: homophone midred | ||
4760 | copy_to_sign: sign9 | ||
4761 | NEW: | ||
4762 | id: Appendix Room/Panel_new_knew | ||
4763 | colors: blue | ||
4764 | tag: homophone midblue | ||
4765 | copy_to_sign: sign11 | ||
4766 | FORE: | ||
4767 | id: Appendix Room/Panel_fore_for | ||
4768 | colors: red | ||
4769 | tag: homophone midred | ||
4770 | copy_to_sign: sign10 | ||
4771 | TRUSTED (1): | ||
4772 | id: Appendix Room/Panel_trusted_trust | ||
4773 | colors: red | ||
4774 | tag: midred | ||
4775 | required_panel: | ||
4776 | room: Knight Night (Right Lower Segment) | ||
4777 | panel: BEFORE | ||
4778 | TRUSTED (2): | ||
4779 | id: Appendix Room/Panel_trusted_rusted | ||
4780 | colors: red | ||
4781 | tag: midred | ||
4782 | required_panel: | ||
4783 | room: Knight Night (Right Lower Segment) | ||
4784 | panel: BEFORE | ||
4785 | ENCRUSTED: | ||
4786 | id: Appendix Room/Panel_encrusted_rust | ||
4787 | colors: red | ||
4788 | tag: midred | ||
4789 | required_panel: | ||
4790 | - panel: TRUSTED (1) | ||
4791 | - panel: TRUSTED (2) | ||
4792 | ADJUST (1): | ||
4793 | id: Appendix Room/Panel_adjust_readjust | ||
4794 | colors: blue | ||
4795 | tag: midblue and phone | ||
4796 | required_panel: | ||
4797 | room: Knight Night (Right Lower Segment) | ||
4798 | panel: BE | ||
4799 | ADJUST (2): | ||
4800 | id: Appendix Room/Panel_adjust_adjusted | ||
4801 | colors: blue | ||
4802 | tag: midblue and phone | ||
4803 | required_panel: | ||
4804 | room: Knight Night (Right Lower Segment) | ||
4805 | panel: BE | ||
4806 | RIGHT: | ||
4807 | id: Appendix Room/Panel_right_right | ||
4808 | tag: midwhite | ||
4809 | required_panel: | ||
4810 | room: Knight Night (Right Lower Segment) | ||
4811 | panel: ADJUST | ||
4812 | TRUST: | ||
4813 | id: Appendix Room/Panel_trust_crust | ||
4814 | colors: | ||
4815 | - red | ||
4816 | - blue | ||
4817 | tag: mid red blue | ||
4818 | required_panel: | ||
4819 | - room: Knight Night (Right Lower Segment) | ||
4820 | panel: ADJUST | ||
4821 | - room: Knight Night (Right Lower Segment) | ||
4822 | panel: LEFT | ||
4823 | doors: | ||
4824 | Fore Door: | ||
4825 | event: True | ||
4826 | panels: | ||
4827 | - FORE | ||
4828 | New Door: | ||
4829 | event: True | ||
4830 | panels: | ||
4831 | - NEW | ||
4832 | To End: | ||
4833 | event: True | ||
4834 | panels: | ||
4835 | - RIGHT | ||
4836 | - room: Knight Night (Right Lower Segment) | ||
4837 | panel: LEFT | ||
4838 | Knight Night (Right Upper Segment): | ||
4839 | entrances: | ||
4840 | Knight Night Exit: True | ||
4841 | Knight Night (Outer Ring): | ||
4842 | room: Knight Night (Outer Ring) | ||
4843 | door: Fore Door | ||
4844 | Knight Night (Right Lower Segment): | ||
4845 | door: Segment Door | ||
4846 | panels: | ||
4847 | RUST (1): | ||
4848 | id: Appendix Room/Panel_rust_trust | ||
4849 | colors: blue | ||
4850 | tag: midblue | ||
4851 | required_panel: | ||
4852 | room: Knight Night (Outer Ring) | ||
4853 | panel: BEE | ||
4854 | RUST (2): | ||
4855 | id: Appendix Room/Panel_rust_crust | ||
4856 | colors: blue | ||
4857 | tag: midblue | ||
4858 | required_panel: | ||
4859 | room: Knight Night (Outer Ring) | ||
4860 | panel: BEE | ||
4861 | doors: | ||
4862 | Segment Door: | ||
4863 | event: True | ||
4864 | panels: | ||
4865 | - RUST (2) | ||
4866 | - room: Knight Night (Right Lower Segment) | ||
4867 | panel: BEFORE | ||
4868 | Knight Night (Right Lower Segment): | ||
4869 | entrances: | ||
4870 | Knight Night Exit: True | ||
4871 | Knight Night (Right Upper Segment): | ||
4872 | room: Knight Night (Right Upper Segment) | ||
4873 | door: Segment Door | ||
4874 | Knight Night (Outer Ring): | ||
4875 | room: Knight Night (Outer Ring) | ||
4876 | door: New Door | ||
4877 | panels: | ||
4878 | ADJUST: | ||
4879 | id: Appendix Room/Panel_adjust_readjusted | ||
4880 | colors: blue | ||
4881 | tag: midblue | ||
4882 | required_panel: | ||
4883 | - room: Knight Night (Outer Ring) | ||
4884 | panel: ADJUST (1) | ||
4885 | - room: Knight Night (Outer Ring) | ||
4886 | panel: ADJUST (2) | ||
4887 | BEFORE: | ||
4888 | id: Appendix Room/Panel_before_fore | ||
4889 | colors: red | ||
4890 | tag: midred and phone | ||
4891 | required_panel: | ||
4892 | room: Knight Night (Right Upper Segment) | ||
4893 | panel: RUST (1) | ||
4894 | BE: | ||
4895 | id: Appendix Room/Panel_be_before | ||
4896 | colors: blue | ||
4897 | tag: midblue and phone | ||
4898 | required_panel: | ||
4899 | room: Knight Night (Right Upper Segment) | ||
4900 | panel: RUST (1) | ||
4901 | LEFT: | ||
4902 | id: Appendix Room/Panel_left_left | ||
4903 | tag: midwhite | ||
4904 | required_panel: | ||
4905 | room: Knight Night (Outer Ring) | ||
4906 | panel: ENCRUSTED | ||
4907 | TRUST: | ||
4908 | id: Appendix Room/Panel_trust_crust_2 | ||
4909 | colors: purple | ||
4910 | tag: midpurp | ||
4911 | required_panel: | ||
4912 | - room: Knight Night (Outer Ring) | ||
4913 | panel: ENCRUSTED | ||
4914 | - room: Knight Night (Outer Ring) | ||
4915 | panel: RIGHT | ||
4916 | Knight Night (Final): | ||
4917 | entrances: | ||
4918 | Knight Night Exit: True | ||
4919 | Knight Night (Outer Ring): | ||
4920 | room: Knight Night (Outer Ring) | ||
4921 | door: To End | ||
4922 | Knight Night (Right Upper Segment): | ||
4923 | room: Knight Night (Outer Ring) | ||
4924 | door: To End | ||
4925 | panels: | ||
4926 | TRUSTED: | ||
4927 | id: Appendix Room/Panel_trusted_readjusted | ||
4928 | colors: purple | ||
4929 | tag: midpurp | ||
4930 | doors: | ||
4931 | Exit: | ||
4932 | id: | ||
4933 | - Appendix Room Area Doors/Door_trusted_readjusted | ||
4934 | - Appendix Room Area Doors/Door_trusted_readjusted2 | ||
4935 | - Appendix Room Area Doors/Door_trusted_readjusted3 | ||
4936 | - Appendix Room Area Doors/Door_trusted_readjusted4 | ||
4937 | - Appendix Room Area Doors/Door_trusted_readjusted5 | ||
4938 | - Appendix Room Area Doors/Door_trusted_readjusted6 | ||
4939 | - Appendix Room Area Doors/Door_trusted_readjusted7 | ||
4940 | - Appendix Room Area Doors/Door_trusted_readjusted8 | ||
4941 | - Appendix Room Area Doors/Door_trusted_readjusted9 | ||
4942 | - Appendix Room Area Doors/Door_trusted_readjusted10 | ||
4943 | - Appendix Room Area Doors/Door_trusted_readjusted11 | ||
4944 | - Appendix Room Area Doors/Door_trusted_readjusted12 | ||
4945 | - Appendix Room Area Doors/Door_trusted_readjusted13 | ||
4946 | include_reduce: True | ||
4947 | location_name: Knight Night Room - TRUSTED | ||
4948 | item_name: Knight Night Room - Exit | ||
4949 | panels: | ||
4950 | - TRUSTED | ||
4951 | Knight Night Exit: | ||
4952 | entrances: | ||
4953 | Knight Night (Outer Ring): | ||
4954 | room: Knight Night (Final) | ||
4955 | door: Exit | ||
4956 | Orange Tower Third Floor: | ||
4957 | room: Knight Night (Final) | ||
4958 | door: Exit | ||
4959 | Outside The Initiated: | ||
4960 | room: Knight Night (Final) | ||
4961 | door: Exit | ||
4962 | panels: | ||
4963 | SEVEN (1): | ||
4964 | id: Backside Room/Panel_seven_seven_7 | ||
4965 | tag: midwhite | ||
4966 | required_door: | ||
4967 | - room: Number Hunt | ||
4968 | door: Sevens | ||
4969 | SEVEN (2): | ||
4970 | id: Backside Room/Panel_seven_seven_3 | ||
4971 | tag: midwhite | ||
4972 | required_door: | ||
4973 | - room: Number Hunt | ||
4974 | door: Sevens | ||
4975 | SEVEN (3): | ||
4976 | id: Backside Room/Panel_seven_seven_4 | ||
4977 | tag: midwhite | ||
4978 | required_door: | ||
4979 | - room: Number Hunt | ||
4980 | door: Sevens | ||
4981 | DEAD END: | ||
4982 | id: Appendix Room/Panel_deadend_deadend | ||
4983 | tag: midwhite | ||
4984 | WARNER: | ||
4985 | id: Appendix Room/Panel_warner_corner | ||
4986 | colors: purple | ||
4987 | tag: toppurp | ||
4988 | The Artistic (Smiley): | ||
4989 | entrances: | ||
4990 | Dead End Area: | ||
4991 | painting: True | ||
4992 | Crossroads: | ||
4993 | painting: True | ||
4994 | Hot Crusts Area: | ||
4995 | painting: True | ||
4996 | Outside The Initiated: | ||
4997 | painting: True | ||
4998 | Directional Gallery: | ||
4999 | painting: True | ||
5000 | Number Hunt: | ||
5001 | room: Number Hunt | ||
5002 | door: Eights | ||
5003 | painting: True | ||
5004 | Art Gallery: | ||
5005 | painting: True | ||
5006 | The Eyes They See: | ||
5007 | painting: True | ||
5008 | The Artistic (Panda): | ||
5009 | door: Door to Panda | ||
5010 | The Artistic (Apple): | ||
5011 | room: The Artistic (Apple) | ||
5012 | door: Door to Smiley | ||
5013 | Elements Area: | ||
5014 | room: Hallway Room (4) | ||
5015 | door: Exit | ||
5016 | panels: | ||
5017 | Achievement: | ||
5018 | id: Countdown Panels/Panel_artistic_artistic | ||
5019 | colors: | ||
5020 | - red | ||
5021 | - black | ||
5022 | - yellow | ||
5023 | - blue | ||
5024 | tag: forbid | ||
5025 | required_room: | ||
5026 | - The Artistic (Panda) | ||
5027 | - The Artistic (Apple) | ||
5028 | - The Artistic (Lattice) | ||
5029 | check: True | ||
5030 | achievement: The Artistic | ||
5031 | FINE: | ||
5032 | id: Ceiling Room/Panel_yellow_top_5 | ||
5033 | colors: | ||
5034 | - yellow | ||
5035 | - blue | ||
5036 | tag: yellow top blue bot | ||
5037 | subtag: top | ||
5038 | link: yxu KNIFE | ||
5039 | BLADE: | ||
5040 | id: Ceiling Room/Panel_blue_bot_5 | ||
5041 | colors: | ||
5042 | - blue | ||
5043 | - yellow | ||
5044 | tag: yellow top blue bot | ||
5045 | subtag: bot | ||
5046 | link: yxu KNIFE | ||
5047 | RED: | ||
5048 | id: Ceiling Room/Panel_blue_top_6 | ||
5049 | colors: | ||
5050 | - blue | ||
5051 | - yellow | ||
5052 | tag: blue top yellow mid | ||
5053 | subtag: top | ||
5054 | link: uyx BREAD | ||
5055 | BEARD: | ||
5056 | id: Ceiling Room/Panel_yellow_mid_6 | ||
5057 | colors: | ||
5058 | - yellow | ||
5059 | - blue | ||
5060 | tag: blue top yellow mid | ||
5061 | subtag: mid | ||
5062 | link: uyx BREAD | ||
5063 | ICE: | ||
5064 | id: Ceiling Room/Panel_blue_mid_7 | ||
5065 | colors: | ||
5066 | - blue | ||
5067 | - yellow | ||
5068 | tag: blue mid yellow bot | ||
5069 | subtag: mid | ||
5070 | link: xuy SPICE | ||
5071 | ROOT: | ||
5072 | id: Ceiling Room/Panel_yellow_bot_7 | ||
5073 | colors: | ||
5074 | - yellow | ||
5075 | - blue | ||
5076 | tag: blue mid yellow bot | ||
5077 | subtag: bot | ||
5078 | link: xuy SPICE | ||
5079 | doors: | ||
5080 | Door to Panda: | ||
5081 | id: | ||
5082 | - Ceiling Room Doors/Door_blue | ||
5083 | - Ceiling Room Doors/Door_blue2 | ||
5084 | location_name: The Artistic - Smiley and Panda | ||
5085 | group: Artistic Doors | ||
5086 | panels: | ||
5087 | - FINE | ||
5088 | - BLADE | ||
5089 | - RED | ||
5090 | - BEARD | ||
5091 | - ICE | ||
5092 | - ROOT | ||
5093 | - room: The Artistic (Panda) | ||
5094 | panel: EYE (Top) | ||
5095 | - room: The Artistic (Panda) | ||
5096 | panel: EYE (Bottom) | ||
5097 | - room: The Artistic (Panda) | ||
5098 | panel: LADYLIKE | ||
5099 | - room: The Artistic (Panda) | ||
5100 | panel: WATER | ||
5101 | - room: The Artistic (Panda) | ||
5102 | panel: OURS | ||
5103 | - room: The Artistic (Panda) | ||
5104 | panel: DAYS | ||
5105 | - room: The Artistic (Panda) | ||
5106 | panel: NIGHTTIME | ||
5107 | - room: The Artistic (Panda) | ||
5108 | panel: NIGHT | ||
5109 | paintings: | ||
5110 | - id: smile_painting_9 | ||
5111 | orientation: north | ||
5112 | exit_only: True | ||
5113 | The Artistic (Panda): | ||
5114 | entrances: | ||
5115 | Orange Tower Sixth Floor: | ||
5116 | painting: True | ||
5117 | Outside The Agreeable: | ||
5118 | painting: True | ||
5119 | The Artistic (Smiley): | ||
5120 | room: The Artistic (Smiley) | ||
5121 | door: Door to Panda | ||
5122 | The Artistic (Lattice): | ||
5123 | door: Door to Lattice | ||
5124 | panels: | ||
5125 | EYE (Top): | ||
5126 | id: Ceiling Room/Panel_blue_top_1 | ||
5127 | colors: | ||
5128 | - blue | ||
5129 | - red | ||
5130 | tag: blue top red bot | ||
5131 | subtag: top | ||
5132 | link: uxr IRIS | ||
5133 | EYE (Bottom): | ||
5134 | id: Ceiling Room/Panel_red_bot_1 | ||
5135 | colors: | ||
5136 | - red | ||
5137 | - blue | ||
5138 | tag: blue top red bot | ||
5139 | subtag: bot | ||
5140 | link: uxr IRIS | ||
5141 | LADYLIKE: | ||
5142 | id: Ceiling Room/Panel_red_mid_2 | ||
5143 | colors: | ||
5144 | - red | ||
5145 | - blue | ||
5146 | tag: red mid blue bot | ||
5147 | subtag: mid | ||
5148 | link: xru LAKE | ||
5149 | WATER: | ||
5150 | id: Ceiling Room/Panel_blue_bot_2 | ||
5151 | colors: | ||
5152 | - blue | ||
5153 | - red | ||
5154 | tag: red mid blue bot | ||
5155 | subtag: bot | ||
5156 | link: xru LAKE | ||
5157 | OURS: | ||
5158 | id: Ceiling Room/Panel_blue_mid_3 | ||
5159 | colors: | ||
5160 | - blue | ||
5161 | - red | ||
5162 | tag: blue mid red bot | ||
5163 | subtag: mid | ||
5164 | link: xur HOURS | ||
5165 | DAYS: | ||
5166 | id: Ceiling Room/Panel_red_bot_3 | ||
5167 | colors: | ||
5168 | - red | ||
5169 | - blue | ||
5170 | tag: blue mid red bot | ||
5171 | subtag: bot | ||
5172 | link: xur HOURS | ||
5173 | NIGHTTIME: | ||
5174 | id: Ceiling Room/Panel_red_top_4 | ||
5175 | colors: | ||
5176 | - red | ||
5177 | - blue | ||
5178 | tag: red top mid blue | ||
5179 | subtag: top | ||
5180 | link: rux KNIGHT | ||
5181 | NIGHT: | ||
5182 | id: Ceiling Room/Panel_blue_mid_4 | ||
5183 | colors: | ||
5184 | - blue | ||
5185 | - red | ||
5186 | tag: red top mid blue | ||
5187 | subtag: mid | ||
5188 | link: rux KNIGHT | ||
5189 | doors: | ||
5190 | Door to Lattice: | ||
5191 | id: | ||
5192 | - Ceiling Room Doors/Door_red | ||
5193 | - Ceiling Room Doors/Door_red2 | ||
5194 | location_name: The Artistic - Panda and Lattice | ||
5195 | group: Artistic Doors | ||
5196 | panels: | ||
5197 | - EYE (Top) | ||
5198 | - EYE (Bottom) | ||
5199 | - LADYLIKE | ||
5200 | - WATER | ||
5201 | - OURS | ||
5202 | - DAYS | ||
5203 | - NIGHTTIME | ||
5204 | - NIGHT | ||
5205 | - room: The Artistic (Lattice) | ||
5206 | panel: POSH | ||
5207 | - room: The Artistic (Lattice) | ||
5208 | panel: MALL | ||
5209 | - room: The Artistic (Lattice) | ||
5210 | panel: DEICIDE | ||
5211 | - room: The Artistic (Lattice) | ||
5212 | panel: WAVER | ||
5213 | - room: The Artistic (Lattice) | ||
5214 | panel: REPAID | ||
5215 | - room: The Artistic (Lattice) | ||
5216 | panel: BABY | ||
5217 | - room: The Artistic (Lattice) | ||
5218 | panel: LOBE | ||
5219 | - room: The Artistic (Lattice) | ||
5220 | panel: BOWELS | ||
5221 | paintings: | ||
5222 | - id: panda_painting_3 | ||
5223 | exit_only: True | ||
5224 | orientation: south | ||
5225 | required_when_no_doors: True | ||
5226 | The Artistic (Lattice): | ||
5227 | entrances: | ||
5228 | Directional Gallery: | ||
5229 | painting: True | ||
5230 | The Artistic (Panda): | ||
5231 | room: The Artistic (Panda) | ||
5232 | door: Door to Lattice | ||
5233 | The Artistic (Apple): | ||
5234 | door: Door to Apple | ||
5235 | panels: | ||
5236 | POSH: | ||
5237 | id: Ceiling Room/Panel_black_top_12 | ||
5238 | colors: | ||
5239 | - black | ||
5240 | - red | ||
5241 | tag: black top red bot | ||
5242 | subtag: top | ||
5243 | link: bxr SHOP | ||
5244 | MALL: | ||
5245 | id: Ceiling Room/Panel_red_bot_12 | ||
5246 | colors: | ||
5247 | - red | ||
5248 | - black | ||
5249 | tag: black top red bot | ||
5250 | subtag: bot | ||
5251 | link: bxr SHOP | ||
5252 | DEICIDE: | ||
5253 | id: Ceiling Room/Panel_red_top_13 | ||
5254 | colors: | ||
5255 | - red | ||
5256 | - black | ||
5257 | tag: red top black bot | ||
5258 | subtag: top | ||
5259 | link: rxb DECIDE | ||
5260 | WAVER: | ||
5261 | id: Ceiling Room/Panel_black_bot_13 | ||
5262 | colors: | ||
5263 | - black | ||
5264 | - red | ||
5265 | tag: red top black bot | ||
5266 | subtag: bot | ||
5267 | link: rxb DECIDE | ||
5268 | REPAID: | ||
5269 | id: Ceiling Room/Panel_black_mid_14 | ||
5270 | colors: | ||
5271 | - black | ||
5272 | - red | ||
5273 | tag: black mid red bot | ||
5274 | subtag: mid | ||
5275 | link: xbr DIAPER | ||
5276 | BABY: | ||
5277 | id: Ceiling Room/Panel_red_bot_14 | ||
5278 | colors: | ||
5279 | - red | ||
5280 | - black | ||
5281 | tag: black mid red bot | ||
5282 | subtag: bot | ||
5283 | link: xbr DIAPER | ||
5284 | LOBE: | ||
5285 | id: Ceiling Room/Panel_black_top_15 | ||
5286 | colors: | ||
5287 | - black | ||
5288 | - red | ||
5289 | tag: black top red mid | ||
5290 | subtag: top | ||
5291 | link: brx BOWL | ||
5292 | BOWELS: | ||
5293 | id: Ceiling Room/Panel_red_mid_15 | ||
5294 | colors: | ||
5295 | - red | ||
5296 | - black | ||
5297 | tag: black top red mid | ||
5298 | subtag: mid | ||
5299 | link: brx BOWL | ||
5300 | doors: | ||
5301 | Door to Apple: | ||
5302 | id: | ||
5303 | - Ceiling Room Doors/Door_black | ||
5304 | - Ceiling Room Doors/Door_black2 | ||
5305 | location_name: The Artistic - Lattice and Apple | ||
5306 | group: Artistic Doors | ||
5307 | panels: | ||
5308 | - POSH | ||
5309 | - MALL | ||
5310 | - DEICIDE | ||
5311 | - WAVER | ||
5312 | - REPAID | ||
5313 | - BABY | ||
5314 | - LOBE | ||
5315 | - BOWELS | ||
5316 | - room: The Artistic (Apple) | ||
5317 | panel: SPRIG | ||
5318 | - room: The Artistic (Apple) | ||
5319 | panel: RELEASES | ||
5320 | - room: The Artistic (Apple) | ||
5321 | panel: MUCH | ||
5322 | - room: The Artistic (Apple) | ||
5323 | panel: FISH | ||
5324 | - room: The Artistic (Apple) | ||
5325 | panel: MASK | ||
5326 | - room: The Artistic (Apple) | ||
5327 | panel: HILL | ||
5328 | - room: The Artistic (Apple) | ||
5329 | panel: TINE | ||
5330 | - room: The Artistic (Apple) | ||
5331 | panel: THING | ||
5332 | paintings: | ||
5333 | - id: boxes_painting2 | ||
5334 | orientation: south | ||
5335 | exit_only: True | ||
5336 | required_when_no_doors: True | ||
5337 | The Artistic (Apple): | ||
5338 | entrances: | ||
5339 | Orange Tower Sixth Floor: | ||
5340 | painting: True | ||
5341 | Directional Gallery: | ||
5342 | painting: True | ||
5343 | The Artistic (Lattice): | ||
5344 | room: The Artistic (Lattice) | ||
5345 | door: Door to Apple | ||
5346 | The Artistic (Smiley): | ||
5347 | door: Door to Smiley | ||
5348 | panels: | ||
5349 | SPRIG: | ||
5350 | id: Ceiling Room/Panel_yellow_mid_8 | ||
5351 | colors: | ||
5352 | - yellow | ||
5353 | - black | ||
5354 | tag: yellow mid black bot | ||
5355 | subtag: mid | ||
5356 | link: xyb GRIPS | ||
5357 | RELEASES: | ||
5358 | id: Ceiling Room/Panel_black_bot_8 | ||
5359 | colors: | ||
5360 | - black | ||
5361 | - yellow | ||
5362 | tag: yellow mid black bot | ||
5363 | subtag: bot | ||
5364 | link: xyb GRIPS | ||
5365 | MUCH: | ||
5366 | id: Ceiling Room/Panel_black_top_9 | ||
5367 | colors: | ||
5368 | - black | ||
5369 | - yellow | ||
5370 | tag: black top yellow bot | ||
5371 | subtag: top | ||
5372 | link: bxy CHUM | ||
5373 | FISH: | ||
5374 | id: Ceiling Room/Panel_yellow_bot_9 | ||
5375 | colors: | ||
5376 | - yellow | ||
5377 | - black | ||
5378 | tag: black top yellow bot | ||
5379 | subtag: bot | ||
5380 | link: bxy CHUM | ||
5381 | MASK: | ||
5382 | id: Ceiling Room/Panel_yellow_top_10 | ||
5383 | colors: | ||
5384 | - yellow | ||
5385 | - black | ||
5386 | tag: yellow top black bot | ||
5387 | subtag: top | ||
5388 | link: yxb CHASM | ||
5389 | HILL: | ||
5390 | id: Ceiling Room/Panel_black_bot_10 | ||
5391 | colors: | ||
5392 | - black | ||
5393 | - yellow | ||
5394 | tag: yellow top black bot | ||
5395 | subtag: bot | ||
5396 | link: yxb CHASM | ||
5397 | TINE: | ||
5398 | id: Ceiling Room/Panel_black_top_11 | ||
5399 | colors: | ||
5400 | - black | ||
5401 | - yellow | ||
5402 | tag: black top yellow mid | ||
5403 | subtag: top | ||
5404 | link: byx NIGHT | ||
5405 | THING: | ||
5406 | id: Ceiling Room/Panel_yellow_mid_11 | ||
5407 | colors: | ||
5408 | - yellow | ||
5409 | - black | ||
5410 | tag: black top yellow mid | ||
5411 | subtag: mid | ||
5412 | link: byx NIGHT | ||
5413 | doors: | ||
5414 | Door to Smiley: | ||
5415 | id: | ||
5416 | - Ceiling Room Doors/Door_yellow | ||
5417 | - Ceiling Room Doors/Door_yellow2 | ||
5418 | location_name: The Artistic - Apple and Smiley | ||
5419 | group: Artistic Doors | ||
5420 | panels: | ||
5421 | - SPRIG | ||
5422 | - RELEASES | ||
5423 | - MUCH | ||
5424 | - FISH | ||
5425 | - MASK | ||
5426 | - HILL | ||
5427 | - TINE | ||
5428 | - THING | ||
5429 | - room: The Artistic (Smiley) | ||
5430 | panel: FINE | ||
5431 | - room: The Artistic (Smiley) | ||
5432 | panel: BLADE | ||
5433 | - room: The Artistic (Smiley) | ||
5434 | panel: RED | ||
5435 | - room: The Artistic (Smiley) | ||
5436 | panel: BEARD | ||
5437 | - room: The Artistic (Smiley) | ||
5438 | panel: ICE | ||
5439 | - room: The Artistic (Smiley) | ||
5440 | panel: ROOT | ||
5441 | paintings: | ||
5442 | - id: cherry_painting3 | ||
5443 | orientation: north | ||
5444 | exit_only: True | ||
5445 | required_when_no_doors: True | ||
5446 | The Artistic (Hint Room): | ||
5447 | entrances: | ||
5448 | The Artistic (Lattice): | ||
5449 | room: The Artistic (Lattice) | ||
5450 | door: Door to Apple | ||
5451 | panels: | ||
5452 | THEME: | ||
5453 | id: Ceiling Room/Panel_answer_1 | ||
5454 | colors: red | ||
5455 | tag: midred | ||
5456 | PAINTS: | ||
5457 | id: Ceiling Room/Panel_answer_2 | ||
5458 | colors: yellow | ||
5459 | tag: botyellow | ||
5460 | I: | ||
5461 | id: Ceiling Room/Panel_answer_3 | ||
5462 | colors: blue | ||
5463 | tag: midblue | ||
5464 | KIT: | ||
5465 | id: Ceiling Room/Panel_answer_4 | ||
5466 | colors: black | ||
5467 | tag: topblack | ||
5468 | The Discerning: | ||
5469 | entrances: | ||
5470 | Crossroads: | ||
5471 | room: Crossroads | ||
5472 | door: Discerning Entrance | ||
5473 | panels: | ||
5474 | Achievement: | ||
5475 | id: Countdown Panels/Panel_discerning_scramble | ||
5476 | colors: yellow | ||
5477 | tag: forbid | ||
5478 | check: True | ||
5479 | achievement: The Discerning | ||
5480 | HITS: | ||
5481 | id: Sun Room/Panel_hits_this | ||
5482 | colors: yellow | ||
5483 | tag: midyellow | ||
5484 | WARRED: | ||
5485 | id: Sun Room/Panel_warred_drawer | ||
5486 | colors: yellow | ||
5487 | tag: double midyellow | ||
5488 | subtag: left | ||
5489 | link: ana DRAWER | ||
5490 | REDRAW: | ||
5491 | id: Sun Room/Panel_redraw_drawer | ||
5492 | colors: yellow | ||
5493 | tag: double midyellow | ||
5494 | subtag: right | ||
5495 | link: ana DRAWER | ||
5496 | ADDER: | ||
5497 | id: Sun Room/Panel_adder_dread | ||
5498 | colors: yellow | ||
5499 | tag: midyellow | ||
5500 | LAUGHTERS: | ||
5501 | id: Sun Room/Panel_laughters_slaughter | ||
5502 | colors: yellow | ||
5503 | tag: midyellow | ||
5504 | STONE: | ||
5505 | id: Sun Room/Panel_stone_notes | ||
5506 | colors: yellow | ||
5507 | tag: double midyellow | ||
5508 | subtag: left | ||
5509 | link: ana NOTES | ||
5510 | ONSET: | ||
5511 | id: Sun Room/Panel_onset_notes | ||
5512 | colors: yellow | ||
5513 | tag: double midyellow | ||
5514 | subtag: right | ||
5515 | link: ana NOTES | ||
5516 | RAT: | ||
5517 | id: Sun Room/Panel_rat_art | ||
5518 | colors: yellow | ||
5519 | tag: midyellow | ||
5520 | DUSTY: | ||
5521 | id: Sun Room/Panel_dusty_study | ||
5522 | colors: yellow | ||
5523 | tag: midyellow | ||
5524 | ARTS: | ||
5525 | id: Sun Room/Panel_arts_star | ||
5526 | colors: yellow | ||
5527 | tag: double midyellow | ||
5528 | subtag: left | ||
5529 | link: ana STAR | ||
5530 | TSAR: | ||
5531 | id: Sun Room/Panel_tsar_star | ||
5532 | colors: yellow | ||
5533 | tag: double midyellow | ||
5534 | subtag: right | ||
5535 | link: ana STAR | ||
5536 | STATE: | ||
5537 | id: Sun Room/Panel_state_taste | ||
5538 | colors: yellow | ||
5539 | tag: midyellow | ||
5540 | REACT: | ||
5541 | id: Sun Room/Panel_react_trace | ||
5542 | colors: yellow | ||
5543 | tag: midyellow | ||
5544 | DEAR: | ||
5545 | id: Sun Room/Panel_dear_read | ||
5546 | colors: yellow | ||
5547 | tag: double midyellow | ||
5548 | subtag: left | ||
5549 | link: ana READ | ||
5550 | DARE: | ||
5551 | id: Sun Room/Panel_dare_read | ||
5552 | colors: yellow | ||
5553 | tag: double midyellow | ||
5554 | subtag: right | ||
5555 | link: ana READ | ||
5556 | SEAM: | ||
5557 | id: Sun Room/Panel_seam_same | ||
5558 | colors: yellow | ||
5559 | tag: midyellow | ||
5560 | The Eyes They See: | ||
5561 | entrances: | ||
5562 | Crossroads: | ||
5563 | room: Crossroads | ||
5564 | door: Eye Wall | ||
5565 | painting: True | ||
5566 | Wondrous Lobby: | ||
5567 | door: Exit | ||
5568 | Directional Gallery: True | ||
5569 | panels: | ||
5570 | NEAR: | ||
5571 | id: Shuffle Room/Panel_near_near | ||
5572 | tag: midwhite | ||
5573 | EIGHT: | ||
5574 | id: Backside Room/Panel_eight_eight_4 | ||
5575 | tag: midwhite | ||
5576 | required_door: | ||
5577 | room: Number Hunt | ||
5578 | door: Eights | ||
5579 | doors: | ||
5580 | Exit: | ||
5581 | id: Count Up Room Area Doors/Door_near_near | ||
5582 | group: Crossroads Doors | ||
5583 | panels: | ||
5584 | - NEAR | ||
5585 | paintings: | ||
5586 | - id: eye_painting_2 | ||
5587 | orientation: west | ||
5588 | - id: smile_painting_2 | ||
5589 | orientation: north | ||
5590 | Far Window: | ||
5591 | entrances: | ||
5592 | Crossroads: | ||
5593 | room: Crossroads | ||
5594 | door: Eye Wall | ||
5595 | The Eyes They See: True | ||
5596 | panels: | ||
5597 | FAR: | ||
5598 | id: Shuffle Room/Panel_far_far | ||
5599 | tag: midwhite | ||
5600 | Wondrous Lobby: | ||
5601 | entrances: | ||
5602 | Directional Gallery: True | ||
5603 | The Eyes They See: | ||
5604 | room: The Eyes They See | ||
5605 | door: Exit | ||
5606 | paintings: | ||
5607 | - id: arrows_painting_5 | ||
5608 | orientation: east | ||
5609 | Outside The Wondrous: | ||
5610 | entrances: | ||
5611 | Wondrous Lobby: True | ||
5612 | The Wondrous (Doorknob): | ||
5613 | door: Wondrous Entrance | ||
5614 | The Wondrous (Window): True | ||
5615 | panels: | ||
5616 | SHRINK: | ||
5617 | id: Wonderland Room/Panel_shrink_shrink | ||
5618 | tag: midwhite | ||
5619 | doors: | ||
5620 | Wondrous Entrance: | ||
5621 | id: Red Blue Purple Room Area Doors/Door_wonderland | ||
5622 | item_name: The Wondrous - Entrance | ||
5623 | panels: | ||
5624 | - SHRINK | ||
5625 | The Wondrous (Doorknob): | ||
5626 | entrances: | ||
5627 | Outside The Wondrous: | ||
5628 | room: Outside The Wondrous | ||
5629 | door: Wondrous Entrance | ||
5630 | Starting Room: | ||
5631 | door: Painting Shortcut | ||
5632 | painting: True | ||
5633 | The Wondrous (Chandelier): | ||
5634 | painting: True | ||
5635 | The Wondrous (Table): True # There is a way that doesn't use the painting | ||
5636 | doors: | ||
5637 | Painting Shortcut: | ||
5638 | painting_id: | ||
5639 | - symmetry_painting_a_starter | ||
5640 | - arrows_painting2 | ||
5641 | skip_location: True | ||
5642 | item_name: Starting Room - Symmetry Painting | ||
5643 | panels: | ||
5644 | - room: Outside The Wondrous | ||
5645 | panel: SHRINK | ||
5646 | paintings: | ||
5647 | - id: symmetry_painting_a_1 | ||
5648 | orientation: east | ||
5649 | exit_only: True | ||
5650 | - id: symmetry_painting_b_1 | ||
5651 | orientation: south | ||
5652 | The Wondrous (Bookcase): | ||
5653 | entrances: | ||
5654 | The Wondrous (Doorknob): True | ||
5655 | panels: | ||
5656 | CASE: | ||
5657 | id: Wonderland Room/Panel_case_bookcase | ||
5658 | colors: blue | ||
5659 | tag: midblue | ||
5660 | paintings: | ||
5661 | - id: symmetry_painting_a_3 | ||
5662 | orientation: west | ||
5663 | exit_only: True | ||
5664 | - id: symmetry_painting_b_3 | ||
5665 | disable: True | ||
5666 | The Wondrous (Chandelier): | ||
5667 | entrances: | ||
5668 | The Wondrous (Bookcase): True | ||
5669 | panels: | ||
5670 | CANDLE HEIR: | ||
5671 | id: Wonderland Room/Panel_candleheir_chandelier | ||
5672 | colors: yellow | ||
5673 | tag: midyellow | ||
5674 | paintings: | ||
5675 | - id: symmetry_painting_a_5 | ||
5676 | orientation: east | ||
5677 | - id: symmetry_painting_a_5 | ||
5678 | disable: True | ||
5679 | The Wondrous (Window): | ||
5680 | entrances: | ||
5681 | The Wondrous (Bookcase): True | ||
5682 | panels: | ||
5683 | GLASS: | ||
5684 | id: Wonderland Room/Panel_glass_window | ||
5685 | colors: brown | ||
5686 | tag: botbrown | ||
5687 | paintings: | ||
5688 | - id: symmetry_painting_b_4 | ||
5689 | orientation: north | ||
5690 | exit_only: True | ||
5691 | - id: symmetry_painting_a_4 | ||
5692 | disable: True | ||
5693 | The Wondrous (Table): | ||
5694 | entrances: | ||
5695 | The Wondrous (Doorknob): | ||
5696 | painting: True | ||
5697 | The Wondrous: | ||
5698 | painting: True | ||
5699 | panels: | ||
5700 | WOOD: | ||
5701 | id: Wonderland Room/Panel_wood_table | ||
5702 | colors: brown | ||
5703 | tag: botbrown | ||
5704 | BROOK NOD: | ||
5705 | # This panel, while physically being in the first room, is facing upward | ||
5706 | # and is only really solvable while standing on the windowsill, which is | ||
5707 | # a location you can only get to from Table. | ||
5708 | id: Wonderland Room/Panel_brooknod_doorknob | ||
5709 | colors: yellow | ||
5710 | tag: midyellow | ||
5711 | paintings: | ||
5712 | - id: symmetry_painting_a_2 | ||
5713 | orientation: west | ||
5714 | - id: symmetry_painting_b_2 | ||
5715 | orientation: south | ||
5716 | exit_only: True | ||
5717 | required: True | ||
5718 | The Wondrous: | ||
5719 | entrances: | ||
5720 | The Wondrous (Table): True | ||
5721 | Arrow Garden: | ||
5722 | door: Exit | ||
5723 | panels: | ||
5724 | FIREPLACE: | ||
5725 | id: Wonderland Room/Panel_fireplace_fire | ||
5726 | colors: red | ||
5727 | tag: midred | ||
5728 | Achievement: | ||
5729 | id: Countdown Panels/Panel_wondrous_wondrous | ||
5730 | required_panel: | ||
5731 | - panel: FIREPLACE | ||
5732 | - room: The Wondrous (Table) | ||
5733 | panel: BROOK NOD | ||
5734 | - room: The Wondrous (Bookcase) | ||
5735 | panel: CASE | ||
5736 | - room: The Wondrous (Chandelier) | ||
5737 | panel: CANDLE HEIR | ||
5738 | - room: The Wondrous (Window) | ||
5739 | panel: GLASS | ||
5740 | - room: The Wondrous (Table) | ||
5741 | panel: WOOD | ||
5742 | tag: forbid | ||
5743 | achievement: The Wondrous | ||
5744 | doors: | ||
5745 | Exit: | ||
5746 | id: Red Blue Purple Room Area Doors/Door_wonderland_exit | ||
5747 | painting_id: arrows_painting_9 | ||
5748 | include_reduce: True | ||
5749 | panels: | ||
5750 | - Achievement | ||
5751 | paintings: | ||
5752 | - id: arrows_painting_9 | ||
5753 | enter_only: True | ||
5754 | orientation: south | ||
5755 | move: True | ||
5756 | required_door: | ||
5757 | door: Exit | ||
5758 | - id: symmetry_painting_a_6 | ||
5759 | orientation: west | ||
5760 | exit_only: True | ||
5761 | - id: symmetry_painting_b_6 | ||
5762 | orientation: north | ||
5763 | Arrow Garden: | ||
5764 | entrances: | ||
5765 | The Wondrous: | ||
5766 | room: The Wondrous | ||
5767 | door: Exit | ||
5768 | Roof: True | ||
5769 | panels: | ||
5770 | MASTERY: | ||
5771 | id: Master Room/Panel_mastery_mastery4 | ||
5772 | tag: midwhite | ||
5773 | required_door: | ||
5774 | room: Orange Tower Seventh Floor | ||
5775 | door: Mastery | ||
5776 | SHARP: | ||
5777 | id: Open Areas/Panel_rainy_rainbow2 | ||
5778 | tag: midwhite | ||
5779 | paintings: | ||
5780 | - id: flower_painting_6 | ||
5781 | orientation: south | ||
5782 | Hallway Room (2): | ||
5783 | entrances: | ||
5784 | Outside The Agreeable: | ||
5785 | room: Outside The Agreeable | ||
5786 | door: Hallway Door | ||
5787 | Elements Area: True | ||
5788 | panels: | ||
5789 | WISE: | ||
5790 | id: Hallway Room/Panel_counterclockwise_1 | ||
5791 | colors: blue | ||
5792 | tag: quad mid blue | ||
5793 | link: qmb COUNTERCLOCKWISE | ||
5794 | CLOCK: | ||
5795 | id: Hallway Room/Panel_counterclockwise_2 | ||
5796 | colors: blue | ||
5797 | tag: quad mid blue | ||
5798 | link: qmb COUNTERCLOCKWISE | ||
5799 | ER: | ||
5800 | id: Hallway Room/Panel_counterclockwise_3 | ||
5801 | colors: blue | ||
5802 | tag: quad mid blue | ||
5803 | link: qmb COUNTERCLOCKWISE | ||
5804 | COUNT: | ||
5805 | id: Hallway Room/Panel_counterclockwise_4 | ||
5806 | colors: blue | ||
5807 | tag: quad mid blue | ||
5808 | link: qmb COUNTERCLOCKWISE | ||
5809 | doors: | ||
5810 | Exit: | ||
5811 | id: Red Blue Purple Room Area Doors/Door_room_3 | ||
5812 | location_name: Hallway Room - Second Room | ||
5813 | group: Hallway Room Doors | ||
5814 | panels: | ||
5815 | - WISE | ||
5816 | - CLOCK | ||
5817 | - ER | ||
5818 | - COUNT | ||
5819 | Hallway Room (3): | ||
5820 | entrances: | ||
5821 | Hallway Room (2): | ||
5822 | room: Hallway Room (2) | ||
5823 | door: Exit | ||
5824 | # No entrance from Elements Area. The winding hallway does not connect. | ||
5825 | panels: | ||
5826 | TRANCE: | ||
5827 | id: Hallway Room/Panel_transformation_1 | ||
5828 | colors: blue | ||
5829 | tag: quad top blue | ||
5830 | link: qtb TRANSFORMATION | ||
5831 | FORM: | ||
5832 | id: Hallway Room/Panel_transformation_2 | ||
5833 | colors: blue | ||
5834 | tag: quad top blue | ||
5835 | link: qtb TRANSFORMATION | ||
5836 | A: | ||
5837 | id: Hallway Room/Panel_transformation_3 | ||
5838 | colors: blue | ||
5839 | tag: quad top blue | ||
5840 | link: qtb TRANSFORMATION | ||
5841 | SHUN: | ||
5842 | id: Hallway Room/Panel_transformation_4 | ||
5843 | colors: blue | ||
5844 | tag: quad top blue | ||
5845 | link: qtb TRANSFORMATION | ||
5846 | doors: | ||
5847 | Exit: | ||
5848 | id: Red Blue Purple Room Area Doors/Door_room_4 | ||
5849 | location_name: Hallway Room - Third Room | ||
5850 | group: Hallway Room Doors | ||
5851 | panels: | ||
5852 | - TRANCE | ||
5853 | - FORM | ||
5854 | - A | ||
5855 | - SHUN | ||
5856 | Hallway Room (4): | ||
5857 | entrances: | ||
5858 | Hallway Room (3): | ||
5859 | room: Hallway Room (3) | ||
5860 | door: Exit | ||
5861 | Elements Area: True | ||
5862 | panels: | ||
5863 | WHEEL: | ||
5864 | id: Hallway Room/Panel_room_5 | ||
5865 | colors: blue | ||
5866 | tag: full stack blue | ||
5867 | doors: | ||
5868 | Exit: | ||
5869 | id: | ||
5870 | - Red Blue Purple Room Area Doors/Door_room_5 | ||
5871 | - Red Blue Purple Room Area Doors/Door_room_6 # this is the connection to The Artistic | ||
5872 | group: Hallway Room Doors | ||
5873 | location_name: Hallway Room - Fourth Room | ||
5874 | panels: | ||
5875 | - WHEEL | ||
5876 | include_reduce: True | ||
5877 | Elements Area: | ||
5878 | entrances: | ||
5879 | Roof: True | ||
5880 | Hallway Room (4): | ||
5881 | room: Hallway Room (4) | ||
5882 | door: Exit | ||
5883 | The Artistic (Smiley): | ||
5884 | room: Hallway Room (4) | ||
5885 | door: Exit | ||
5886 | panels: | ||
5887 | A: | ||
5888 | id: Strand Room/Panel_a_strands | ||
5889 | colors: blue | ||
5890 | tag: forbid | ||
5891 | NINE: | ||
5892 | id: Backside Room/Panel_nine_nine_7 | ||
5893 | tag: midwhite | ||
5894 | required_door: | ||
5895 | room: Number Hunt | ||
5896 | door: Nines | ||
5897 | UNDISTRACTED: | ||
5898 | id: Open Areas/Panel_undistracted | ||
5899 | check: True | ||
5900 | exclude_reduce: True | ||
5901 | tag: midwhite | ||
5902 | MASTERY: | ||
5903 | id: Master Room/Panel_mastery_mastery13 | ||
5904 | tag: midwhite | ||
5905 | required_door: | ||
5906 | room: Orange Tower Seventh Floor | ||
5907 | door: Mastery | ||
5908 | EARTH: | ||
5909 | id: Cross Room/Panel_earth_earth | ||
5910 | tag: midwhite | ||
5911 | WATER: | ||
5912 | id: Cross Room/Panel_water_water | ||
5913 | tag: midwhite | ||
5914 | AIR: | ||
5915 | id: Cross Room/Panel_air_air | ||
5916 | tag: midwhite | ||
5917 | paintings: | ||
5918 | - id: south_afar | ||
5919 | orientation: south | ||
5920 | Outside The Wanderer: | ||
5921 | entrances: | ||
5922 | Orange Tower First Floor: | ||
5923 | door: Tower Entrance | ||
5924 | Rhyme Room (Cross): | ||
5925 | room: Rhyme Room (Cross) | ||
5926 | door: Exit | ||
5927 | Roof: True | ||
5928 | panels: | ||
5929 | WANDERLUST: | ||
5930 | id: Tower Room/Panel_wanderlust_1234567890 | ||
5931 | colors: orange | ||
5932 | tag: midorange | ||
5933 | doors: | ||
5934 | Wanderer Entrance: | ||
5935 | id: Tower Room Area Doors/Door_wanderer_entrance | ||
5936 | item_name: The Wanderer - Entrance | ||
5937 | panels: | ||
5938 | - WANDERLUST | ||
5939 | Tower Entrance: | ||
5940 | id: Tower Room Area Doors/Door_wanderlust_start | ||
5941 | skip_location: True | ||
5942 | panels: | ||
5943 | - room: The Wanderer | ||
5944 | panel: Achievement | ||
5945 | The Wanderer: | ||
5946 | entrances: | ||
5947 | Outside The Wanderer: | ||
5948 | room: Outside The Wanderer | ||
5949 | door: Wanderer Entrance | ||
5950 | panels: | ||
5951 | Achievement: | ||
5952 | id: Countdown Panels/Panel_1234567890_wanderlust | ||
5953 | colors: orange | ||
5954 | check: True | ||
5955 | tag: forbid | ||
5956 | achievement: The Wanderer | ||
5957 | "7890": | ||
5958 | id: Orange Room/Panel_lust | ||
5959 | colors: orange | ||
5960 | tag: midorange | ||
5961 | "6524": | ||
5962 | id: Orange Room/Panel_read | ||
5963 | colors: orange | ||
5964 | tag: midorange | ||
5965 | "951": | ||
5966 | id: Orange Room/Panel_sew | ||
5967 | colors: orange | ||
5968 | tag: midorange | ||
5969 | "4524": | ||
5970 | id: Orange Room/Panel_dead | ||
5971 | colors: orange | ||
5972 | tag: midorange | ||
5973 | LEARN: | ||
5974 | id: Orange Room/Panel_learn | ||
5975 | colors: orange | ||
5976 | tag: midorange | ||
5977 | DUST: | ||
5978 | id: Orange Room/Panel_dust | ||
5979 | colors: orange | ||
5980 | tag: midorange | ||
5981 | STAR: | ||
5982 | id: Orange Room/Panel_star | ||
5983 | colors: orange | ||
5984 | tag: midorange | ||
5985 | WANDER: | ||
5986 | id: Orange Room/Panel_wander | ||
5987 | colors: orange | ||
5988 | tag: midorange | ||
5989 | Art Gallery: | ||
5990 | entrances: | ||
5991 | Orange Tower Third Floor: True | ||
5992 | Art Gallery (Second Floor): True | ||
5993 | Art Gallery (Third Floor): True | ||
5994 | Art Gallery (Fourth Floor): True | ||
5995 | Orange Tower Fifth Floor: | ||
5996 | door: Exit | ||
5997 | panels: | ||
5998 | EIGHT: | ||
5999 | id: Backside Room/Panel_eight_eight_6 | ||
6000 | tag: midwhite | ||
6001 | required_door: | ||
6002 | room: Number Hunt | ||
6003 | door: Eights | ||
6004 | EON: | ||
6005 | id: Painting Room/Panel_eon_one | ||
6006 | colors: yellow | ||
6007 | tag: midyellow | ||
6008 | TRUSTWORTHY: | ||
6009 | id: Painting Room/Panel_to_two | ||
6010 | colors: red | ||
6011 | tag: midred | ||
6012 | FREE: | ||
6013 | id: Painting Room/Panel_free_three | ||
6014 | colors: purple | ||
6015 | tag: midpurp | ||
6016 | OUR: | ||
6017 | id: Painting Room/Panel_our_four | ||
6018 | colors: blue | ||
6019 | tag: midblue | ||
6020 | ONE ROAD MANY TURNS: | ||
6021 | id: Painting Room/Panel_order_onepathmanyturns | ||
6022 | tag: forbid | ||
6023 | colors: | ||
6024 | - yellow | ||
6025 | - blue | ||
6026 | - gray | ||
6027 | - brown | ||
6028 | - orange | ||
6029 | required_door: | ||
6030 | door: Fifth Floor | ||
6031 | doors: | ||
6032 | Second Floor: | ||
6033 | painting_id: | ||
6034 | - scenery_painting_2b | ||
6035 | - scenery_painting_2c | ||
6036 | skip_location: True | ||
6037 | panels: | ||
6038 | - EON | ||
6039 | First Floor Puzzles: | ||
6040 | skip_item: True | ||
6041 | location_name: Art Gallery - First Floor Puzzles | ||
6042 | panels: | ||
6043 | - EON | ||
6044 | - TRUSTWORTHY | ||
6045 | - FREE | ||
6046 | - OUR | ||
6047 | Third Floor: | ||
6048 | painting_id: | ||
6049 | - scenery_painting_3b | ||
6050 | - scenery_painting_3c | ||
6051 | skip_location: True | ||
6052 | panels: | ||
6053 | - room: Art Gallery (Second Floor) | ||
6054 | panel: PATH | ||
6055 | Fourth Floor: | ||
6056 | painting_id: | ||
6057 | - scenery_painting_4b | ||
6058 | - scenery_painting_4c | ||
6059 | skip_location: True | ||
6060 | panels: | ||
6061 | - room: Art Gallery (Third Floor) | ||
6062 | panel: ANY | ||
6063 | Fifth Floor: | ||
6064 | id: Tower Room Area Doors/Door_painting_backroom | ||
6065 | painting_id: | ||
6066 | - scenery_painting_5b | ||
6067 | - scenery_painting_5c | ||
6068 | skip_location: True | ||
6069 | panels: | ||
6070 | - room: Art Gallery (Fourth Floor) | ||
6071 | panel: SEND - USE | ||
6072 | Exit: | ||
6073 | id: Tower Room Area Doors/Door_painting_exit | ||
6074 | include_reduce: True | ||
6075 | panels: | ||
6076 | - ONE ROAD MANY TURNS | ||
6077 | paintings: | ||
6078 | - id: smile_painting_3 | ||
6079 | orientation: west | ||
6080 | - id: flower_painting_2 | ||
6081 | orientation: east | ||
6082 | - id: scenery_painting_0a | ||
6083 | orientation: north | ||
6084 | - id: map_painting | ||
6085 | orientation: east | ||
6086 | - id: fruitbowl_painting4 | ||
6087 | orientation: south | ||
6088 | progression: | ||
6089 | Progressive Art Gallery: | ||
6090 | - Second Floor | ||
6091 | - Third Floor | ||
6092 | - Fourth Floor | ||
6093 | - Fifth Floor | ||
6094 | - Exit | ||
6095 | Art Gallery (Second Floor): | ||
6096 | entrances: | ||
6097 | Art Gallery: | ||
6098 | room: Art Gallery | ||
6099 | door: Second Floor | ||
6100 | panels: | ||
6101 | HOUSE: | ||
6102 | id: Painting Room/Panel_house_neighborhood | ||
6103 | colors: blue | ||
6104 | tag: botblue | ||
6105 | PATH: | ||
6106 | id: Painting Room/Panel_path_road | ||
6107 | colors: brown | ||
6108 | tag: botbrown | ||
6109 | PARK: | ||
6110 | id: Painting Room/Panel_park_drive | ||
6111 | colors: black | ||
6112 | tag: botblack | ||
6113 | CARRIAGE: | ||
6114 | id: Painting Room/Panel_carriage_horse | ||
6115 | colors: red | ||
6116 | tag: botred | ||
6117 | doors: | ||
6118 | Puzzles: | ||
6119 | skip_item: True | ||
6120 | location_name: Art Gallery - Second Floor Puzzles | ||
6121 | panels: | ||
6122 | - HOUSE | ||
6123 | - PATH | ||
6124 | - PARK | ||
6125 | - CARRIAGE | ||
6126 | Art Gallery (Third Floor): | ||
6127 | entrances: | ||
6128 | Art Gallery: | ||
6129 | room: Art Gallery | ||
6130 | door: Third Floor | ||
6131 | panels: | ||
6132 | AN: | ||
6133 | id: Painting Room/Panel_an_many | ||
6134 | colors: blue | ||
6135 | tag: midblue | ||
6136 | MAY: | ||
6137 | id: Painting Room/Panel_may_many | ||
6138 | colors: blue | ||
6139 | tag: midblue | ||
6140 | ANY: | ||
6141 | id: Painting Room/Panel_any_many | ||
6142 | colors: blue | ||
6143 | tag: midblue | ||
6144 | MAN: | ||
6145 | id: Painting Room/Panel_man_many | ||
6146 | colors: blue | ||
6147 | tag: midblue | ||
6148 | doors: | ||
6149 | Puzzles: | ||
6150 | skip_item: True | ||
6151 | location_name: Art Gallery - Third Floor Puzzles | ||
6152 | panels: | ||
6153 | - AN | ||
6154 | - MAY | ||
6155 | - ANY | ||
6156 | - MAN | ||
6157 | Art Gallery (Fourth Floor): | ||
6158 | entrances: | ||
6159 | Art Gallery: | ||
6160 | room: Art Gallery | ||
6161 | door: Fourth Floor | ||
6162 | panels: | ||
6163 | URNS: | ||
6164 | id: Painting Room/Panel_urns_turns | ||
6165 | colors: blue | ||
6166 | tag: midblue | ||
6167 | LEARNS: | ||
6168 | id: Painting Room/Panel_learns_turns | ||
6169 | colors: purple | ||
6170 | tag: midpurp | ||
6171 | RUNTS: | ||
6172 | id: Painting Room/Panel_runts_turns | ||
6173 | colors: yellow | ||
6174 | tag: midyellow | ||
6175 | SEND - USE: | ||
6176 | id: Painting Room/Panel_send_use_turns | ||
6177 | colors: orange | ||
6178 | tag: midorange | ||
6179 | TRUST: | ||
6180 | id: Painting Room/Panel_trust_06890 | ||
6181 | colors: orange | ||
6182 | tag: midorange | ||
6183 | "062459": | ||
6184 | id: Painting Room/Panel_06890_trust | ||
6185 | colors: orange | ||
6186 | tag: midorange | ||
6187 | doors: | ||
6188 | Puzzles: | ||
6189 | skip_item: True | ||
6190 | location_name: Art Gallery - Fourth Floor Puzzles | ||
6191 | panels: | ||
6192 | - URNS | ||
6193 | - LEARNS | ||
6194 | - RUNTS | ||
6195 | - SEND - USE | ||
6196 | - TRUST | ||
6197 | - "062459" | ||
6198 | Rhyme Room (Smiley): | ||
6199 | entrances: | ||
6200 | Orange Tower Third Floor: | ||
6201 | room: Orange Tower Third Floor | ||
6202 | door: Rhyme Room Entrance | ||
6203 | Rhyme Room (Circle): | ||
6204 | room: Rhyme Room (Circle) | ||
6205 | door: Door to Smiley | ||
6206 | Rhyme Room (Cross): True # one-way | ||
6207 | panels: | ||
6208 | LOANS: | ||
6209 | id: Double Room/Panel_bones_rhyme | ||
6210 | colors: purple | ||
6211 | tag: syn rhyme | ||
6212 | subtag: top | ||
6213 | link: rhyme BONES | ||
6214 | SKELETON: | ||
6215 | id: Double Room/Panel_bones_syn | ||
6216 | tag: syn rhyme | ||
6217 | subtag: bot | ||
6218 | link: rhyme BONES | ||
6219 | REPENTANCE: | ||
6220 | id: Double Room/Panel_sentence_rhyme | ||
6221 | colors: purple | ||
6222 | tag: whole rhyme | ||
6223 | subtag: top | ||
6224 | link: rhyme SENTENCE | ||
6225 | WORD: | ||
6226 | id: Double Room/Panel_sentence_whole | ||
6227 | colors: blue | ||
6228 | tag: whole rhyme | ||
6229 | subtag: bot | ||
6230 | link: rhyme SENTENCE | ||
6231 | SCHEME: | ||
6232 | id: Double Room/Panel_dream_rhyme | ||
6233 | colors: purple | ||
6234 | tag: syn rhyme | ||
6235 | subtag: top | ||
6236 | link: rhyme DREAM | ||
6237 | FANTASY: | ||
6238 | id: Double Room/Panel_dream_syn | ||
6239 | tag: syn rhyme | ||
6240 | subtag: bot | ||
6241 | link: rhyme DREAM | ||
6242 | HISTORY: | ||
6243 | id: Double Room/Panel_mystery_rhyme | ||
6244 | colors: purple | ||
6245 | tag: syn rhyme | ||
6246 | subtag: top | ||
6247 | link: rhyme MYSTERY | ||
6248 | SECRET: | ||
6249 | id: Double Room/Panel_mystery_syn | ||
6250 | tag: syn rhyme | ||
6251 | subtag: bot | ||
6252 | link: rhyme MYSTERY | ||
6253 | doors: | ||
6254 | # This is complicated. I want the location in here to just be the four | ||
6255 | # panels against the wall toward Target. But in vanilla, you also need to | ||
6256 | # solve the panels in Circle that are against the Smiley wall. Logic needs | ||
6257 | # to know this so that it can handle no door shuffle properly. So we split | ||
6258 | # the item and location up. | ||
6259 | Door to Target: | ||
6260 | id: | ||
6261 | - Double Room Area Doors/Door_room_3a | ||
6262 | - Double Room Area Doors/Door_room_3bc | ||
6263 | skip_location: True | ||
6264 | group: Rhyme Room Doors | ||
6265 | panels: | ||
6266 | - SCHEME | ||
6267 | - FANTASY | ||
6268 | - HISTORY | ||
6269 | - SECRET | ||
6270 | - room: Rhyme Room (Circle) | ||
6271 | panel: BIRD | ||
6272 | - room: Rhyme Room (Circle) | ||
6273 | panel: LETTER | ||
6274 | - room: Rhyme Room (Circle) | ||
6275 | panel: VIOLENT | ||
6276 | - room: Rhyme Room (Circle) | ||
6277 | panel: MUTE | ||
6278 | Door to Target (Location): | ||
6279 | location_name: Rhyme Room (Smiley) - Puzzles Toward Target | ||
6280 | skip_item: True | ||
6281 | panels: | ||
6282 | - SCHEME | ||
6283 | - FANTASY | ||
6284 | - HISTORY | ||
6285 | - SECRET | ||
6286 | Rhyme Room (Cross): | ||
6287 | entrances: | ||
6288 | Rhyme Room (Target): # one-way | ||
6289 | room: Rhyme Room (Target) | ||
6290 | door: Door to Cross | ||
6291 | Rhyme Room (Looped Square): | ||
6292 | room: Rhyme Room (Looped Square) | ||
6293 | door: Door to Cross | ||
6294 | panels: | ||
6295 | NINE: | ||
6296 | id: Backside Room/Panel_nine_nine_9 | ||
6297 | tag: midwhite | ||
6298 | required_door: | ||
6299 | room: Number Hunt | ||
6300 | door: Nines | ||
6301 | FERN: | ||
6302 | id: Double Room/Panel_return_rhyme | ||
6303 | colors: purple | ||
6304 | tag: ant rhyme | ||
6305 | subtag: top | ||
6306 | link: rhyme RETURN | ||
6307 | STAY: | ||
6308 | id: Double Room/Panel_return_ant | ||
6309 | colors: black | ||
6310 | tag: ant rhyme | ||
6311 | subtag: bot | ||
6312 | link: rhyme RETURN | ||
6313 | FRIEND: | ||
6314 | id: Double Room/Panel_descend_rhyme | ||
6315 | colors: purple | ||
6316 | tag: ant rhyme | ||
6317 | subtag: top | ||
6318 | link: rhyme DESCEND | ||
6319 | RISE: | ||
6320 | id: Double Room/Panel_descend_ant | ||
6321 | colors: black | ||
6322 | tag: ant rhyme | ||
6323 | subtag: bot | ||
6324 | link: rhyme DESCEND | ||
6325 | PLUMP: | ||
6326 | id: Double Room/Panel_jump_rhyme | ||
6327 | colors: purple | ||
6328 | tag: syn rhyme | ||
6329 | subtag: top | ||
6330 | link: rhyme JUMP | ||
6331 | BOUNCE: | ||
6332 | id: Double Room/Panel_jump_syn | ||
6333 | tag: syn rhyme | ||
6334 | subtag: bot | ||
6335 | link: rhyme JUMP | ||
6336 | SCRAWL: | ||
6337 | id: Double Room/Panel_fall_rhyme | ||
6338 | colors: purple | ||
6339 | tag: syn rhyme | ||
6340 | subtag: top | ||
6341 | link: rhyme FALL | ||
6342 | PLUNGE: | ||
6343 | id: Double Room/Panel_fall_syn | ||
6344 | tag: syn rhyme | ||
6345 | subtag: bot | ||
6346 | link: rhyme FALL | ||
6347 | LEAP: | ||
6348 | id: Double Room/Panel_leap_leap | ||
6349 | tag: midwhite | ||
6350 | doors: | ||
6351 | Exit: | ||
6352 | id: Double Room Area Doors/Door_room_exit | ||
6353 | location_name: Rhyme Room (Cross) - Exit Puzzles | ||
6354 | group: Rhyme Room Doors | ||
6355 | panels: | ||
6356 | - PLUMP | ||
6357 | - BOUNCE | ||
6358 | - SCRAWL | ||
6359 | - PLUNGE | ||
6360 | Rhyme Room (Circle): | ||
6361 | entrances: | ||
6362 | Rhyme Room (Looped Square): | ||
6363 | room: Rhyme Room (Looped Square) | ||
6364 | door: Door to Circle | ||
6365 | Hidden Room: | ||
6366 | room: Hidden Room | ||
6367 | door: Rhyme Room Entrance | ||
6368 | Rhyme Room (Smiley): | ||
6369 | door: Door to Smiley | ||
6370 | panels: | ||
6371 | BIRD: | ||
6372 | id: Double Room/Panel_word_rhyme | ||
6373 | colors: purple | ||
6374 | tag: whole rhyme | ||
6375 | subtag: top | ||
6376 | link: rhyme WORD | ||
6377 | LETTER: | ||
6378 | id: Double Room/Panel_word_whole | ||
6379 | colors: blue | ||
6380 | tag: whole rhyme | ||
6381 | subtag: bot | ||
6382 | link: rhyme WORD | ||
6383 | FORBIDDEN: | ||
6384 | id: Double Room/Panel_hidden_rhyme | ||
6385 | colors: purple | ||
6386 | tag: syn rhyme | ||
6387 | subtag: top | ||
6388 | link: rhyme HIDDEN | ||
6389 | CONCEALED: | ||
6390 | id: Double Room/Panel_hidden_syn | ||
6391 | tag: syn rhyme | ||
6392 | subtag: bot | ||
6393 | link: rhyme HIDDEN | ||
6394 | VIOLENT: | ||
6395 | id: Double Room/Panel_silent_rhyme | ||
6396 | colors: purple | ||
6397 | tag: syn rhyme | ||
6398 | subtag: top | ||
6399 | link: rhyme SILENT | ||
6400 | MUTE: | ||
6401 | id: Double Room/Panel_silent_syn | ||
6402 | tag: syn rhyme | ||
6403 | subtag: bot | ||
6404 | link: rhyme SILENT | ||
6405 | doors: | ||
6406 | Door to Smiley: | ||
6407 | id: | ||
6408 | - Double Room Area Doors/Door_room_2b | ||
6409 | - Double Room Area Doors/Door_room_3b | ||
6410 | location_name: Rhyme Room - Circle/Smiley Wall | ||
6411 | group: Rhyme Room Doors | ||
6412 | panels: | ||
6413 | - BIRD | ||
6414 | - LETTER | ||
6415 | - VIOLENT | ||
6416 | - MUTE | ||
6417 | - room: Rhyme Room (Smiley) | ||
6418 | panel: LOANS | ||
6419 | - room: Rhyme Room (Smiley) | ||
6420 | panel: SKELETON | ||
6421 | - room: Rhyme Room (Smiley) | ||
6422 | panel: REPENTANCE | ||
6423 | - room: Rhyme Room (Smiley) | ||
6424 | panel: WORD | ||
6425 | paintings: | ||
6426 | - id: arrows_painting_3 | ||
6427 | orientation: north | ||
6428 | Rhyme Room (Looped Square): | ||
6429 | entrances: | ||
6430 | Starting Room: | ||
6431 | room: Starting Room | ||
6432 | door: Rhyme Room Entrance | ||
6433 | Rhyme Room (Circle): | ||
6434 | door: Door to Circle | ||
6435 | Rhyme Room (Cross): | ||
6436 | door: Door to Cross | ||
6437 | Rhyme Room (Target): | ||
6438 | door: Door to Target | ||
6439 | panels: | ||
6440 | WALKED: | ||
6441 | id: Double Room/Panel_blocked_rhyme | ||
6442 | colors: purple | ||
6443 | tag: syn rhyme | ||
6444 | subtag: top | ||
6445 | link: rhyme BLOCKED | ||
6446 | OBSTRUCTED: | ||
6447 | id: Double Room/Panel_blocked_syn | ||
6448 | tag: syn rhyme | ||
6449 | subtag: bot | ||
6450 | link: rhyme BLOCKED | ||
6451 | SKIES: | ||
6452 | id: Double Room/Panel_rise_rhyme | ||
6453 | colors: purple | ||
6454 | tag: syn rhyme | ||
6455 | subtag: top | ||
6456 | link: rhyme RISE | ||
6457 | SWELL: | ||
6458 | id: Double Room/Panel_rise_syn | ||
6459 | tag: syn rhyme | ||
6460 | subtag: bot | ||
6461 | link: rhyme RISE | ||
6462 | PENNED: | ||
6463 | id: Double Room/Panel_ascend_rhyme | ||
6464 | colors: purple | ||
6465 | tag: syn rhyme | ||
6466 | subtag: top | ||
6467 | link: rhyme ASCEND | ||
6468 | CLIMB: | ||
6469 | id: Double Room/Panel_ascend_syn | ||
6470 | tag: syn rhyme | ||
6471 | subtag: bot | ||
6472 | link: rhyme ASCEND | ||
6473 | TROUBLE: | ||
6474 | id: Double Room/Panel_double_rhyme | ||
6475 | colors: purple | ||
6476 | tag: syn rhyme | ||
6477 | subtag: top | ||
6478 | link: rhyme DOUBLE | ||
6479 | DUPLICATE: | ||
6480 | id: Double Room/Panel_double_syn | ||
6481 | tag: syn rhyme | ||
6482 | subtag: bot | ||
6483 | link: rhyme DOUBLE | ||
6484 | doors: | ||
6485 | Door to Circle: | ||
6486 | id: | ||
6487 | - Double Room Area Doors/Door_room_2a | ||
6488 | - Double Room Area Doors/Door_room_1c | ||
6489 | location_name: Rhyme Room - Circle/Looped Square Wall | ||
6490 | group: Rhyme Room Doors | ||
6491 | panels: | ||
6492 | - WALKED | ||
6493 | - OBSTRUCTED | ||
6494 | - SKIES | ||
6495 | - SWELL | ||
6496 | - room: Rhyme Room (Circle) | ||
6497 | panel: BIRD | ||
6498 | - room: Rhyme Room (Circle) | ||
6499 | panel: LETTER | ||
6500 | - room: Rhyme Room (Circle) | ||
6501 | panel: FORBIDDEN | ||
6502 | - room: Rhyme Room (Circle) | ||
6503 | panel: CONCEALED | ||
6504 | Door to Cross: | ||
6505 | id: | ||
6506 | - Double Room Area Doors/Door_room_1a | ||
6507 | - Double Room Area Doors/Door_room_5a | ||
6508 | location_name: Rhyme Room - Cross/Looped Square Wall | ||
6509 | group: Rhyme Room Doors | ||
6510 | panels: | ||
6511 | - SKIES | ||
6512 | - SWELL | ||
6513 | - PENNED | ||
6514 | - CLIMB | ||
6515 | - room: Rhyme Room (Cross) | ||
6516 | panel: FERN | ||
6517 | - room: Rhyme Room (Cross) | ||
6518 | panel: STAY | ||
6519 | - room: Rhyme Room (Cross) | ||
6520 | panel: FRIEND | ||
6521 | - room: Rhyme Room (Cross) | ||
6522 | panel: RISE | ||
6523 | Door to Target: | ||
6524 | id: | ||
6525 | - Double Room Area Doors/Door_room_1b | ||
6526 | - Double Room Area Doors/Door_room_4b | ||
6527 | location_name: Rhyme Room - Target/Looped Square Wall | ||
6528 | group: Rhyme Room Doors | ||
6529 | panels: | ||
6530 | - PENNED | ||
6531 | - CLIMB | ||
6532 | - TROUBLE | ||
6533 | - DUPLICATE | ||
6534 | - room: Rhyme Room (Target) | ||
6535 | panel: WILD | ||
6536 | - room: Rhyme Room (Target) | ||
6537 | panel: KID | ||
6538 | - room: Rhyme Room (Target) | ||
6539 | panel: PISTOL | ||
6540 | - room: Rhyme Room (Target) | ||
6541 | panel: QUARTZ | ||
6542 | Rhyme Room (Target): | ||
6543 | entrances: | ||
6544 | Rhyme Room (Smiley): # one-way | ||
6545 | room: Rhyme Room (Smiley) | ||
6546 | door: Door to Target | ||
6547 | Rhyme Room (Looped Square): | ||
6548 | room: Rhyme Room (Looped Square) | ||
6549 | door: Door to Target | ||
6550 | panels: | ||
6551 | WILD: | ||
6552 | id: Double Room/Panel_child_rhyme | ||
6553 | colors: purple | ||
6554 | tag: syn rhyme | ||
6555 | subtag: top | ||
6556 | link: rhyme CHILD | ||
6557 | KID: | ||
6558 | id: Double Room/Panel_child_syn | ||
6559 | tag: syn rhyme | ||
6560 | subtag: bot | ||
6561 | link: rhyme CHILD | ||
6562 | PISTOL: | ||
6563 | id: Double Room/Panel_crystal_rhyme | ||
6564 | colors: purple | ||
6565 | tag: syn rhyme | ||
6566 | subtag: top | ||
6567 | link: rhyme CRYSTAL | ||
6568 | QUARTZ: | ||
6569 | id: Double Room/Panel_crystal_syn | ||
6570 | tag: syn rhyme | ||
6571 | subtag: bot | ||
6572 | link: rhyme CRYSTAL | ||
6573 | INNOVATIVE (Top): | ||
6574 | id: Double Room/Panel_creative_rhyme | ||
6575 | colors: purple | ||
6576 | tag: syn rhyme | ||
6577 | subtag: top | ||
6578 | link: rhyme CREATIVE | ||
6579 | INNOVATIVE (Bottom): | ||
6580 | id: Double Room/Panel_creative_syn | ||
6581 | tag: syn rhyme | ||
6582 | subtag: bot | ||
6583 | link: rhyme CREATIVE | ||
6584 | doors: | ||
6585 | Door to Cross: | ||
6586 | id: Double Room Area Doors/Door_room_4a | ||
6587 | location_name: Rhyme Room (Target) - Puzzles Toward Cross | ||
6588 | group: Rhyme Room Doors | ||
6589 | panels: | ||
6590 | - PISTOL | ||
6591 | - QUARTZ | ||
6592 | - INNOVATIVE (Top) | ||
6593 | - INNOVATIVE (Bottom) | ||
6594 | paintings: | ||
6595 | - id: arrows_painting_4 | ||
6596 | orientation: north | ||
6597 | Room Room: | ||
6598 | # This is a bit of a weird room. You can't really get to it from the roof. | ||
6599 | # And even if you were to go through the shortcut on the fifth floor into | ||
6600 | # the basement and up the stairs, you'd be blocked by the backsides of the | ||
6601 | # ROOM panels, which isn't ideal. So we will, at least for now, say that | ||
6602 | # this room is vanilla. | ||
6603 | # | ||
6604 | # For pretty much the same reason, I don't want to shuffle the paintings in | ||
6605 | # here. | ||
6606 | entrances: | ||
6607 | Orange Tower Fourth Floor: True | ||
6608 | panels: | ||
6609 | DOOR (1): | ||
6610 | id: Panel Room/Panel_room_door_1 | ||
6611 | colors: gray | ||
6612 | tag: forbid | ||
6613 | DOOR (2): | ||
6614 | id: Panel Room/Panel_room_door_2 | ||
6615 | colors: gray | ||
6616 | tag: forbid | ||
6617 | WINDOW: | ||
6618 | id: Panel Room/Panel_room_window_1 | ||
6619 | colors: gray | ||
6620 | tag: forbid | ||
6621 | STAIRS: | ||
6622 | id: Panel Room/Panel_room_stairs_1 | ||
6623 | colors: gray | ||
6624 | tag: forbid | ||
6625 | PAINTING: | ||
6626 | id: Panel Room/Panel_room_painting_1 | ||
6627 | colors: gray | ||
6628 | tag: forbid | ||
6629 | FLOOR (1): | ||
6630 | id: Panel Room/Panel_room_floor_1 | ||
6631 | colors: gray | ||
6632 | tag: forbid | ||
6633 | FLOOR (2): | ||
6634 | id: Panel Room/Panel_room_floor_2 | ||
6635 | colors: gray | ||
6636 | tag: forbid | ||
6637 | FLOOR (3): | ||
6638 | id: Panel Room/Panel_room_floor_3 | ||
6639 | colors: gray | ||
6640 | tag: forbid | ||
6641 | FLOOR (4): | ||
6642 | id: Panel Room/Panel_room_floor_4 | ||
6643 | colors: gray | ||
6644 | tag: forbid | ||
6645 | FLOOR (5): | ||
6646 | id: Panel Room/Panel_room_floor_5 | ||
6647 | colors: gray | ||
6648 | tag: forbid | ||
6649 | FLOOR (7): | ||
6650 | id: Panel Room/Panel_room_floor_7 | ||
6651 | colors: gray | ||
6652 | tag: forbid | ||
6653 | FLOOR (8): | ||
6654 | id: Panel Room/Panel_room_floor_8 | ||
6655 | colors: gray | ||
6656 | tag: forbid | ||
6657 | FLOOR (9): | ||
6658 | id: Panel Room/Panel_room_floor_9 | ||
6659 | colors: gray | ||
6660 | tag: forbid | ||
6661 | FLOOR (10): | ||
6662 | id: Panel Room/Panel_room_floor_10 | ||
6663 | colors: gray | ||
6664 | tag: forbid | ||
6665 | CEILING (1): | ||
6666 | id: Panel Room/Panel_room_ceiling_1 | ||
6667 | colors: gray | ||
6668 | tag: forbid | ||
6669 | CEILING (2): | ||
6670 | id: Panel Room/Panel_room_ceiling_2 | ||
6671 | colors: gray | ||
6672 | tag: forbid | ||
6673 | CEILING (3): | ||
6674 | id: Panel Room/Panel_room_ceiling_3 | ||
6675 | colors: gray | ||
6676 | tag: forbid | ||
6677 | CEILING (4): | ||
6678 | id: Panel Room/Panel_room_ceiling_4 | ||
6679 | colors: gray | ||
6680 | tag: forbid | ||
6681 | CEILING (5): | ||
6682 | id: Panel Room/Panel_room_ceiling_5 | ||
6683 | colors: gray | ||
6684 | tag: forbid | ||
6685 | WALL (1): | ||
6686 | id: Panel Room/Panel_room_wall_1 | ||
6687 | colors: gray | ||
6688 | tag: forbid | ||
6689 | WALL (2): | ||
6690 | id: Panel Room/Panel_room_wall_2 | ||
6691 | colors: gray | ||
6692 | tag: forbid | ||
6693 | WALL (3): | ||
6694 | id: Panel Room/Panel_room_wall_3 | ||
6695 | colors: gray | ||
6696 | tag: forbid | ||
6697 | WALL (4): | ||
6698 | id: Panel Room/Panel_room_wall_4 | ||
6699 | colors: gray | ||
6700 | tag: forbid | ||
6701 | WALL (5): | ||
6702 | id: Panel Room/Panel_room_wall_5 | ||
6703 | colors: gray | ||
6704 | tag: forbid | ||
6705 | WALL (6): | ||
6706 | id: Panel Room/Panel_room_wall_6 | ||
6707 | colors: gray | ||
6708 | tag: forbid | ||
6709 | WALL (7): | ||
6710 | id: Panel Room/Panel_room_wall_7 | ||
6711 | colors: gray | ||
6712 | tag: forbid | ||
6713 | WALL (8): | ||
6714 | id: Panel Room/Panel_room_wall_8 | ||
6715 | colors: gray | ||
6716 | tag: forbid | ||
6717 | WALL (9): | ||
6718 | id: Panel Room/Panel_room_wall_9 | ||
6719 | colors: gray | ||
6720 | tag: forbid | ||
6721 | WALL (10): | ||
6722 | id: Panel Room/Panel_room_wall_10 | ||
6723 | colors: gray | ||
6724 | tag: forbid | ||
6725 | WALL (11): | ||
6726 | id: Panel Room/Panel_room_wall_11 | ||
6727 | colors: gray | ||
6728 | tag: forbid | ||
6729 | WALL (12): | ||
6730 | id: Panel Room/Panel_room_wall_12 | ||
6731 | colors: gray | ||
6732 | tag: forbid | ||
6733 | WALL (13): | ||
6734 | id: Panel Room/Panel_room_wall_13 | ||
6735 | colors: gray | ||
6736 | tag: forbid | ||
6737 | WALL (14): | ||
6738 | id: Panel Room/Panel_room_wall_14 | ||
6739 | colors: gray | ||
6740 | tag: forbid | ||
6741 | WALL (15): | ||
6742 | id: Panel Room/Panel_room_wall_15 | ||
6743 | colors: gray | ||
6744 | tag: forbid | ||
6745 | WALL (16): | ||
6746 | id: Panel Room/Panel_room_wall_16 | ||
6747 | colors: gray | ||
6748 | tag: forbid | ||
6749 | WALL (17): | ||
6750 | id: Panel Room/Panel_room_wall_17 | ||
6751 | colors: gray | ||
6752 | tag: forbid | ||
6753 | WALL (18): | ||
6754 | id: Panel Room/Panel_room_wall_18 | ||
6755 | colors: gray | ||
6756 | tag: forbid | ||
6757 | WALL (19): | ||
6758 | id: Panel Room/Panel_room_wall_19 | ||
6759 | colors: gray | ||
6760 | tag: forbid | ||
6761 | WALL (20): | ||
6762 | id: Panel Room/Panel_room_wall_20 | ||
6763 | colors: gray | ||
6764 | tag: forbid | ||
6765 | WALL (21): | ||
6766 | id: Panel Room/Panel_room_wall_21 | ||
6767 | colors: gray | ||
6768 | tag: forbid | ||
6769 | BROOMED: | ||
6770 | id: Panel Room/Panel_broomed_bedroom | ||
6771 | colors: yellow | ||
6772 | tag: midyellow | ||
6773 | required_door: | ||
6774 | door: Excavation | ||
6775 | LAYS: | ||
6776 | id: Panel Room/Panel_lays_maze | ||
6777 | colors: purple | ||
6778 | tag: toppurp | ||
6779 | required_panel: | ||
6780 | panel: BROOMED | ||
6781 | BASE: | ||
6782 | id: Panel Room/Panel_base_basement | ||
6783 | colors: blue | ||
6784 | tag: midblue | ||
6785 | required_panel: | ||
6786 | panel: LAYS | ||
6787 | MASTERY: | ||
6788 | id: Master Room/Panel_mastery_mastery | ||
6789 | tag: midwhite | ||
6790 | colors: gray | ||
6791 | required_door: | ||
6792 | room: Orange Tower Seventh Floor | ||
6793 | door: Mastery | ||
6794 | doors: | ||
6795 | Excavation: | ||
6796 | event: True | ||
6797 | panels: | ||
6798 | - WALL (1) | ||
6799 | Shortcut to Fifth Floor: | ||
6800 | id: | ||
6801 | - Tower Room Area Doors/Door_panel_basement | ||
6802 | - Tower Room Area Doors/Door_panel_basement2 | ||
6803 | panels: | ||
6804 | - BASE | ||
6805 | Cellar: | ||
6806 | entrances: | ||
6807 | Room Room: | ||
6808 | room: Room Room | ||
6809 | door: Excavation | ||
6810 | Orange Tower Fifth Floor: | ||
6811 | room: Room Room | ||
6812 | door: Shortcut to Fifth Floor | ||
6813 | Outside The Wise: | ||
6814 | entrances: | ||
6815 | Orange Tower Sixth Floor: | ||
6816 | painting: True | ||
6817 | Outside The Initiated: | ||
6818 | painting: True | ||
6819 | panels: | ||
6820 | KITTEN: | ||
6821 | id: Clock Room/Panel_kitten_cat | ||
6822 | colors: brown | ||
6823 | tag: botbrown | ||
6824 | CAT: | ||
6825 | id: Clock Room/Panel_cat_kitten | ||
6826 | tag: bot brown black | ||
6827 | colors: | ||
6828 | - brown | ||
6829 | - black | ||
6830 | doors: | ||
6831 | Wise Entrance: | ||
6832 | id: Clock Room Area Doors/Door_time_start | ||
6833 | item_name: The Wise - Entrance | ||
6834 | panels: | ||
6835 | - KITTEN | ||
6836 | - CAT | ||
6837 | paintings: | ||
6838 | - id: arrows_painting_2 | ||
6839 | orientation: east | ||
6840 | - id: clock_painting_2 | ||
6841 | orientation: east | ||
6842 | exit_only: True | ||
6843 | required: True | ||
6844 | The Wise: | ||
6845 | entrances: | ||
6846 | Outside The Wise: | ||
6847 | room: Outside The Wise | ||
6848 | door: Wise Entrance | ||
6849 | panels: | ||
6850 | Achievement: | ||
6851 | id: Countdown Panels/Panel_intelligent_wise | ||
6852 | colors: | ||
6853 | - brown | ||
6854 | - black | ||
6855 | tag: forbid | ||
6856 | check: True | ||
6857 | achievement: The Wise | ||
6858 | PUPPY: | ||
6859 | id: Clock Room/Panel_puppy_dog | ||
6860 | colors: brown | ||
6861 | tag: botbrown | ||
6862 | ADULT: | ||
6863 | id: Clock Room/Panel_adult_child | ||
6864 | colors: | ||
6865 | - brown | ||
6866 | - black | ||
6867 | tag: bot brown black | ||
6868 | BREAD: | ||
6869 | id: Clock Room/Panel_bread_mold | ||
6870 | colors: brown | ||
6871 | tag: botbrown | ||
6872 | DINOSAUR: | ||
6873 | id: Clock Room/Panel_dinosaur_fossil | ||
6874 | colors: brown | ||
6875 | tag: botbrown | ||
6876 | OAK: | ||
6877 | id: Clock Room/Panel_oak_acorn | ||
6878 | colors: | ||
6879 | - brown | ||
6880 | - black | ||
6881 | tag: bot brown black | ||
6882 | CORPSE: | ||
6883 | id: Clock Room/Panel_corpse_skeleton | ||
6884 | colors: brown | ||
6885 | tag: botbrown | ||
6886 | BEFORE: | ||
6887 | id: Clock Room/Panel_before_ere | ||
6888 | colors: | ||
6889 | - brown | ||
6890 | - black | ||
6891 | tag: mid brown black | ||
6892 | YOUR: | ||
6893 | id: Clock Room/Panel_your_thy | ||
6894 | colors: | ||
6895 | - brown | ||
6896 | - black | ||
6897 | tag: mid brown black | ||
6898 | BETWIXT: | ||
6899 | id: Clock Room/Panel_betwixt_between | ||
6900 | colors: brown | ||
6901 | tag: midbrown | ||
6902 | NIGH: | ||
6903 | id: Clock Room/Panel_nigh_near | ||
6904 | colors: brown | ||
6905 | tag: midbrown | ||
6906 | CONNEXION: | ||
6907 | id: Clock Room/Panel_connexion_connection | ||
6908 | colors: brown | ||
6909 | tag: midbrown | ||
6910 | THOU: | ||
6911 | id: Clock Room/Panel_thou_you | ||
6912 | colors: brown | ||
6913 | tag: midbrown | ||
6914 | paintings: | ||
6915 | - id: clock_painting_3 | ||
6916 | orientation: east | ||
6917 | The Red: | ||
6918 | entrances: | ||
6919 | Roof: True | ||
6920 | panels: | ||
6921 | Achievement: | ||
6922 | id: Countdown Panels/Panel_grandfathered_red | ||
6923 | colors: red | ||
6924 | tag: forbid | ||
6925 | check: True | ||
6926 | achievement: The Red | ||
6927 | PANDEMIC (1): | ||
6928 | id: Hangry Room/Panel_red_top_1 | ||
6929 | colors: red | ||
6930 | tag: topred | ||
6931 | TRINITY: | ||
6932 | id: Hangry Room/Panel_red_top_2 | ||
6933 | colors: red | ||
6934 | tag: topred | ||
6935 | CHEMISTRY: | ||
6936 | id: Hangry Room/Panel_red_top_3 | ||
6937 | colors: red | ||
6938 | tag: topred | ||
6939 | FLUMMOXED: | ||
6940 | id: Hangry Room/Panel_red_top_4 | ||
6941 | colors: red | ||
6942 | tag: topred | ||
6943 | PANDEMIC (2): | ||
6944 | id: Hangry Room/Panel_red_mid_1 | ||
6945 | colors: red | ||
6946 | tag: midred | ||
6947 | COUNTERCLOCKWISE: | ||
6948 | id: Hangry Room/Panel_red_mid_2 | ||
6949 | colors: red | ||
6950 | tag: red top red mid black bot | ||
6951 | FEARLESS: | ||
6952 | id: Hangry Room/Panel_red_mid_3 | ||
6953 | colors: red | ||
6954 | tag: midred | ||
6955 | DEFORESTATION: | ||
6956 | id: Hangry Room/Panel_red_mid_4 | ||
6957 | colors: red | ||
6958 | tag: red mid bot | ||
6959 | subtag: mid | ||
6960 | link: rmb FORE | ||
6961 | CRAFTSMANSHIP: | ||
6962 | id: Hangry Room/Panel_red_mid_5 | ||
6963 | colors: red | ||
6964 | tag: red mid bot | ||
6965 | subtag: mid | ||
6966 | link: rmb AFT | ||
6967 | CAMEL: | ||
6968 | id: Hangry Room/Panel_red_bot_1 | ||
6969 | colors: red | ||
6970 | tag: botred | ||
6971 | LION: | ||
6972 | id: Hangry Room/Panel_red_bot_2 | ||
6973 | colors: red | ||
6974 | tag: botred | ||
6975 | TIGER: | ||
6976 | id: Hangry Room/Panel_red_bot_3 | ||
6977 | colors: red | ||
6978 | tag: botred | ||
6979 | SHIP (1): | ||
6980 | id: Hangry Room/Panel_red_bot_4 | ||
6981 | colors: red | ||
6982 | tag: red mid bot | ||
6983 | subtag: bot | ||
6984 | link: rmb FORE | ||
6985 | SHIP (2): | ||
6986 | id: Hangry Room/Panel_red_bot_5 | ||
6987 | colors: red | ||
6988 | tag: red mid bot | ||
6989 | subtag: bot | ||
6990 | link: rmb AFT | ||
6991 | GIRAFFE: | ||
6992 | id: Hangry Room/Panel_red_bot_6 | ||
6993 | colors: red | ||
6994 | tag: botred | ||
6995 | The Ecstatic: | ||
6996 | entrances: | ||
6997 | Roof: True | ||
6998 | panels: | ||
6999 | Achievement: | ||
7000 | id: Countdown Panels/Panel_ecstatic_ecstatic | ||
7001 | colors: yellow | ||
7002 | tag: forbid | ||
7003 | check: True | ||
7004 | achievement: The Ecstatic | ||
7005 | FORM (1): | ||
7006 | id: Smiley Room/Panel_soundgram_1 | ||
7007 | colors: yellow | ||
7008 | tag: yellow top bot | ||
7009 | subtag: bottom | ||
7010 | link: ytb FORM | ||
7011 | WIND: | ||
7012 | id: Smiley Room/Panel_soundgram_2 | ||
7013 | colors: yellow | ||
7014 | tag: botyellow | ||
7015 | EGGS: | ||
7016 | id: Smiley Room/Panel_scrambled_1 | ||
7017 | colors: yellow | ||
7018 | tag: botyellow | ||
7019 | VEGETABLES: | ||
7020 | id: Smiley Room/Panel_scrambled_2 | ||
7021 | colors: yellow | ||
7022 | tag: botyellow | ||
7023 | WATER: | ||
7024 | id: Smiley Room/Panel_anagram_6_1 | ||
7025 | colors: yellow | ||
7026 | tag: botyellow | ||
7027 | FRUITS: | ||
7028 | id: Smiley Room/Panel_anagram_6_2 | ||
7029 | colors: yellow | ||
7030 | tag: botyellow | ||
7031 | LEAVES: | ||
7032 | id: Smiley Room/Panel_anagram_7_1 | ||
7033 | colors: yellow | ||
7034 | tag: topyellow | ||
7035 | VINES: | ||
7036 | id: Smiley Room/Panel_anagram_7_2 | ||
7037 | colors: yellow | ||
7038 | tag: topyellow | ||
7039 | ICE: | ||
7040 | id: Smiley Room/Panel_anagram_7_3 | ||
7041 | colors: yellow | ||
7042 | tag: topyellow | ||
7043 | STYLE: | ||
7044 | id: Smiley Room/Panel_anagram_7_4 | ||
7045 | colors: yellow | ||
7046 | tag: topyellow | ||
7047 | FIR: | ||
7048 | id: Smiley Room/Panel_anagram_8_1 | ||
7049 | colors: yellow | ||
7050 | tag: topyellow | ||
7051 | REEF: | ||
7052 | id: Smiley Room/Panel_anagram_8_2 | ||
7053 | colors: yellow | ||
7054 | tag: topyellow | ||
7055 | ROTS: | ||
7056 | id: Smiley Room/Panel_anagram_8_3 | ||
7057 | colors: yellow | ||
7058 | tag: topyellow | ||
7059 | FORM (2): | ||
7060 | id: Smiley Room/Panel_anagram_9_1 | ||
7061 | colors: yellow | ||
7062 | tag: yellow top bot | ||
7063 | subtag: top | ||
7064 | link: ytb FORM | ||
7065 | Outside The Scientific: | ||
7066 | entrances: | ||
7067 | Roof: True | ||
7068 | The Scientific: | ||
7069 | door: Scientific Entrance | ||
7070 | panels: | ||
7071 | OPEN: | ||
7072 | id: Chemistry Room/Panel_open | ||
7073 | tag: midwhite | ||
7074 | CLOSE: | ||
7075 | id: Chemistry Room/Panel_close | ||
7076 | colors: black | ||
7077 | tag: botblack | ||
7078 | AHEAD: | ||
7079 | id: Chemistry Room/Panel_ahead | ||
7080 | colors: black | ||
7081 | tag: botblack | ||
7082 | doors: | ||
7083 | Scientific Entrance: | ||
7084 | id: Red Blue Purple Room Area Doors/Door_chemistry_lab | ||
7085 | item_name: The Scientific - Entrance | ||
7086 | panels: | ||
7087 | - OPEN | ||
7088 | The Scientific: | ||
7089 | entrances: | ||
7090 | Outside The Scientific: | ||
7091 | room: Outside The Scientific | ||
7092 | door: Scientific Entrance | ||
7093 | panels: | ||
7094 | Achievement: | ||
7095 | id: Countdown Panels/Panel_scientific_scientific | ||
7096 | colors: | ||
7097 | - yellow | ||
7098 | - red | ||
7099 | - blue | ||
7100 | - brown | ||
7101 | - black | ||
7102 | - purple | ||
7103 | tag: forbid | ||
7104 | check: True | ||
7105 | achievement: The Scientific | ||
7106 | HYDROGEN (1): | ||
7107 | id: Chemistry Room/Panel_blue_bot_3 | ||
7108 | colors: blue | ||
7109 | tag: tri botblue | ||
7110 | link: tbb WATER | ||
7111 | OXYGEN: | ||
7112 | id: Chemistry Room/Panel_blue_bot_2 | ||
7113 | colors: blue | ||
7114 | tag: tri botblue | ||
7115 | link: tbb WATER | ||
7116 | HYDROGEN (2): | ||
7117 | id: Chemistry Room/Panel_blue_bot_4 | ||
7118 | colors: blue | ||
7119 | tag: tri botblue | ||
7120 | link: tbb WATER | ||
7121 | SUGAR (1): | ||
7122 | id: Chemistry Room/Panel_sugar_1 | ||
7123 | colors: red | ||
7124 | tag: botred | ||
7125 | SUGAR (2): | ||
7126 | id: Chemistry Room/Panel_sugar_2 | ||
7127 | colors: red | ||
7128 | tag: botred | ||
7129 | SUGAR (3): | ||
7130 | id: Chemistry Room/Panel_sugar_3 | ||
7131 | colors: red | ||
7132 | tag: botred | ||
7133 | CHLORINE: | ||
7134 | id: Chemistry Room/Panel_blue_bot_5 | ||
7135 | colors: blue | ||
7136 | tag: double botblue | ||
7137 | subtag: left | ||
7138 | link: holo SALT | ||
7139 | SODIUM: | ||
7140 | id: Chemistry Room/Panel_blue_bot_6 | ||
7141 | colors: blue | ||
7142 | tag: double botblue | ||
7143 | subtag: right | ||
7144 | link: holo SALT | ||
7145 | FOREST: | ||
7146 | id: Chemistry Room/Panel_long_bot_1 | ||
7147 | colors: | ||
7148 | - red | ||
7149 | - blue | ||
7150 | tag: chain red bot blue top | ||
7151 | POUND: | ||
7152 | id: Chemistry Room/Panel_long_top_1 | ||
7153 | colors: | ||
7154 | - red | ||
7155 | - blue | ||
7156 | tag: chain blue mid red bot | ||
7157 | ICE: | ||
7158 | id: Chemistry Room/Panel_brown_bot_1 | ||
7159 | colors: brown | ||
7160 | tag: botbrown | ||
7161 | FISSION: | ||
7162 | id: Chemistry Room/Panel_black_bot_1 | ||
7163 | colors: black | ||
7164 | tag: botblack | ||
7165 | FUSION: | ||
7166 | id: Chemistry Room/Panel_black_bot_2 | ||
7167 | colors: black | ||
7168 | tag: botblack | ||
7169 | MISS: | ||
7170 | id: Chemistry Room/Panel_blue_top_1 | ||
7171 | colors: blue | ||
7172 | tag: double topblue | ||
7173 | subtag: left | ||
7174 | link: exp CHEMISTRY | ||
7175 | TREE (1): | ||
7176 | id: Chemistry Room/Panel_blue_top_2 | ||
7177 | colors: blue | ||
7178 | tag: double topblue | ||
7179 | subtag: right | ||
7180 | link: exp CHEMISTRY | ||
7181 | BIOGRAPHY: | ||
7182 | id: Chemistry Room/Panel_biology_9 | ||
7183 | colors: purple | ||
7184 | tag: midpurp | ||
7185 | CACTUS: | ||
7186 | id: Chemistry Room/Panel_biology_4 | ||
7187 | colors: red | ||
7188 | tag: double botred | ||
7189 | subtag: right | ||
7190 | link: mero SPINE | ||
7191 | VERTEBRATE: | ||
7192 | id: Chemistry Room/Panel_biology_8 | ||
7193 | colors: red | ||
7194 | tag: double botred | ||
7195 | subtag: left | ||
7196 | link: mero SPINE | ||
7197 | ROSE: | ||
7198 | id: Chemistry Room/Panel_biology_2 | ||
7199 | colors: red | ||
7200 | tag: botred | ||
7201 | TREE (2): | ||
7202 | id: Chemistry Room/Panel_biology_3 | ||
7203 | colors: red | ||
7204 | tag: botred | ||
7205 | FRUIT: | ||
7206 | id: Chemistry Room/Panel_biology_1 | ||
7207 | colors: red | ||
7208 | tag: botred | ||
7209 | MAMMAL: | ||
7210 | id: Chemistry Room/Panel_biology_5 | ||
7211 | colors: red | ||
7212 | tag: botred | ||
7213 | BIRD: | ||
7214 | id: Chemistry Room/Panel_biology_6 | ||
7215 | colors: red | ||
7216 | tag: botred | ||
7217 | FISH: | ||
7218 | id: Chemistry Room/Panel_biology_7 | ||
7219 | colors: red | ||
7220 | tag: botred | ||
7221 | GRAVELY: | ||
7222 | id: Chemistry Room/Panel_physics_9 | ||
7223 | colors: purple | ||
7224 | tag: double midpurp | ||
7225 | subtag: left | ||
7226 | link: change GRAVITY | ||
7227 | BREVITY: | ||
7228 | id: Chemistry Room/Panel_biology_10 | ||
7229 | colors: purple | ||
7230 | tag: double midpurp | ||
7231 | subtag: right | ||
7232 | link: change GRAVITY | ||
7233 | PART: | ||
7234 | id: Chemistry Room/Panel_physics_2 | ||
7235 | colors: blue | ||
7236 | tag: blue mid red bot | ||
7237 | subtag: mid | ||
7238 | link: xur PARTICLE | ||
7239 | MATTER: | ||
7240 | id: Chemistry Room/Panel_physics_1 | ||
7241 | colors: red | ||
7242 | tag: blue mid red bot | ||
7243 | subtag: bot | ||
7244 | link: xur PARTICLE | ||
7245 | ELECTRIC: | ||
7246 | id: Chemistry Room/Panel_physics_6 | ||
7247 | colors: purple | ||
7248 | tag: purple mid red bot | ||
7249 | subtag: mid | ||
7250 | link: xpr ELECTRON | ||
7251 | ATOM (1): | ||
7252 | id: Chemistry Room/Panel_physics_3 | ||
7253 | colors: red | ||
7254 | tag: purple mid red bot | ||
7255 | subtag: bot | ||
7256 | link: xpr ELECTRON | ||
7257 | NEUTRAL: | ||
7258 | id: Chemistry Room/Panel_physics_7 | ||
7259 | colors: purple | ||
7260 | tag: purple mid red bot | ||
7261 | subtag: mid | ||
7262 | link: xpr NEUTRON | ||
7263 | ATOM (2): | ||
7264 | id: Chemistry Room/Panel_physics_4 | ||
7265 | colors: red | ||
7266 | tag: purple mid red bot | ||
7267 | subtag: bot | ||
7268 | link: xpr NEUTRON | ||
7269 | PROPEL: | ||
7270 | id: Chemistry Room/Panel_physics_8 | ||
7271 | colors: purple | ||
7272 | tag: purple mid red bot | ||
7273 | subtag: mid | ||
7274 | link: xpr PROTON | ||
7275 | ATOM (3): | ||
7276 | id: Chemistry Room/Panel_physics_5 | ||
7277 | colors: red | ||
7278 | tag: purple mid red bot | ||
7279 | subtag: bot | ||
7280 | link: xpr PROTON | ||
7281 | ORDER: | ||
7282 | id: Chemistry Room/Panel_physics_11 | ||
7283 | colors: brown | ||
7284 | tag: botbrown | ||
7285 | OPTICS: | ||
7286 | id: Chemistry Room/Panel_physics_10 | ||
7287 | colors: yellow | ||
7288 | tag: midyellow | ||
7289 | GRAPHITE: | ||
7290 | id: Chemistry Room/Panel_yellow_bot_1 | ||
7291 | colors: yellow | ||
7292 | tag: botyellow | ||
7293 | HOT RYE: | ||
7294 | id: Chemistry Room/Panel_anagram_1 | ||
7295 | colors: yellow | ||
7296 | tag: midyellow | ||
7297 | SIT SHY HOPE: | ||
7298 | id: Chemistry Room/Panel_anagram_2 | ||
7299 | colors: yellow | ||
7300 | tag: midyellow | ||
7301 | ME NEXT PIER: | ||
7302 | id: Chemistry Room/Panel_anagram_3 | ||
7303 | colors: yellow | ||
7304 | tag: midyellow | ||
7305 | RUT LESS: | ||
7306 | id: Chemistry Room/Panel_anagram_4 | ||
7307 | colors: yellow | ||
7308 | tag: midyellow | ||
7309 | SON COUNCIL: | ||
7310 | id: Chemistry Room/Panel_anagram_5 | ||
7311 | colors: yellow | ||
7312 | tag: midyellow | ||
7313 | doors: | ||
7314 | Chemistry Puzzles: | ||
7315 | skip_item: True | ||
7316 | location_name: The Scientific - Chemistry Puzzles | ||
7317 | panels: | ||
7318 | - HYDROGEN (1) | ||
7319 | - OXYGEN | ||
7320 | - HYDROGEN (2) | ||
7321 | - SUGAR (1) | ||
7322 | - SUGAR (2) | ||
7323 | - SUGAR (3) | ||
7324 | - CHLORINE | ||
7325 | - SODIUM | ||
7326 | - FOREST | ||
7327 | - POUND | ||
7328 | - ICE | ||
7329 | - FISSION | ||
7330 | - FUSION | ||
7331 | - MISS | ||
7332 | - TREE (1) | ||
7333 | Biology Puzzles: | ||
7334 | skip_item: True | ||
7335 | location_name: The Scientific - Biology Puzzles | ||
7336 | panels: | ||
7337 | - BIOGRAPHY | ||
7338 | - CACTUS | ||
7339 | - VERTEBRATE | ||
7340 | - ROSE | ||
7341 | - TREE (2) | ||
7342 | - FRUIT | ||
7343 | - MAMMAL | ||
7344 | - BIRD | ||
7345 | - FISH | ||
7346 | Physics Puzzles: | ||
7347 | skip_item: True | ||
7348 | location_name: The Scientific - Physics Puzzles | ||
7349 | panels: | ||
7350 | - GRAVELY | ||
7351 | - BREVITY | ||
7352 | - PART | ||
7353 | - MATTER | ||
7354 | - ELECTRIC | ||
7355 | - ATOM (1) | ||
7356 | - NEUTRAL | ||
7357 | - ATOM (2) | ||
7358 | - PROPEL | ||
7359 | - ATOM (3) | ||
7360 | - ORDER | ||
7361 | - OPTICS | ||
7362 | paintings: | ||
7363 | - id: hi_solved_painting4 | ||
7364 | orientation: south | ||
7365 | Challenge Room: | ||
7366 | entrances: | ||
7367 | Welcome Back Area: | ||
7368 | door: Welcome Door | ||
7369 | Number Hunt: | ||
7370 | room: Outside The Undeterred | ||
7371 | door: Challenge Entrance | ||
7372 | panels: | ||
7373 | WELCOME: | ||
7374 | id: Challenge Room/Panel_welcome_welcome | ||
7375 | tag: midwhite | ||
7376 | CHALLENGE: | ||
7377 | id: Challenge Room/Panel_challenge_challenge | ||
7378 | tag: midwhite | ||
7379 | Achievement: | ||
7380 | id: Countdown Panels/Panel_challenged_unchallenged | ||
7381 | check: True | ||
7382 | colors: | ||
7383 | - black | ||
7384 | - gray | ||
7385 | - red | ||
7386 | - blue | ||
7387 | - yellow | ||
7388 | - purple | ||
7389 | - brown | ||
7390 | - orange | ||
7391 | tag: forbid | ||
7392 | achievement: The Unchallenged | ||
7393 | OPEN: | ||
7394 | id: Challenge Room/Panel_open_nepotism | ||
7395 | colors: | ||
7396 | - black | ||
7397 | - blue | ||
7398 | tag: chain mid black !!! blue | ||
7399 | SINGED: | ||
7400 | id: Challenge Room/Panel_singed_singsong | ||
7401 | colors: | ||
7402 | - red | ||
7403 | - blue | ||
7404 | tag: chain mid red blue | ||
7405 | NEVER TRUSTED: | ||
7406 | id: Challenge Room/Panel_nevertrusted_maladjusted | ||
7407 | colors: purple | ||
7408 | tag: midpurp | ||
7409 | CORNER: | ||
7410 | id: Challenge Room/Panel_corner_corn | ||
7411 | colors: red | ||
7412 | tag: midred | ||
7413 | STRAWBERRIES: | ||
7414 | id: Challenge Room/Panel_strawberries_mold | ||
7415 | colors: brown | ||
7416 | tag: double botbrown | ||
7417 | subtag: left | ||
7418 | link: time MOLD | ||
7419 | GRUB: | ||
7420 | id: Challenge Room/Panel_grub_burger | ||
7421 | colors: | ||
7422 | - black | ||
7423 | - blue | ||
7424 | tag: chain mid black blue | ||
7425 | BREAD: | ||
7426 | id: Challenge Room/Panel_bread_mold | ||
7427 | colors: brown | ||
7428 | tag: double botbrown | ||
7429 | subtag: right | ||
7430 | link: time MOLD | ||
7431 | COLOR: | ||
7432 | id: Challenge Room/Panel_color_gray | ||
7433 | colors: gray | ||
7434 | tag: forbid | ||
7435 | WRITER: | ||
7436 | id: Challenge Room/Panel_writer_songwriter | ||
7437 | colors: blue | ||
7438 | tag: midblue | ||
7439 | "02759": | ||
7440 | id: Challenge Room/Panel_tales_stale | ||
7441 | colors: | ||
7442 | - orange | ||
7443 | - yellow | ||
7444 | tag: chain mid orange yellow | ||
7445 | REAL EYES: | ||
7446 | id: Challenge Room/Panel_realeyes_realize | ||
7447 | tag: topwhite | ||
7448 | LOBS: | ||
7449 | id: Challenge Room/Panel_lobs_lobster | ||
7450 | colors: blue | ||
7451 | tag: midblue | ||
7452 | PEST ALLY: | ||
7453 | id: Challenge Room/Panel_double_anagram_1 | ||
7454 | colors: yellow | ||
7455 | tag: midyellow | ||
7456 | GENIAL HALO: | ||
7457 | id: Challenge Room/Panel_double_anagram_2 | ||
7458 | colors: yellow | ||
7459 | tag: midyellow | ||
7460 | DUCK LOGO: | ||
7461 | id: Challenge Room/Panel_double_anagram_3 | ||
7462 | colors: yellow | ||
7463 | tag: midyellow | ||
7464 | AVIAN GREEN: | ||
7465 | id: Challenge Room/Panel_double_anagram_4 | ||
7466 | colors: yellow | ||
7467 | tag: midyellow | ||
7468 | FEVER TEAR: | ||
7469 | id: Challenge Room/Panel_double_anagram_5 | ||
7470 | colors: yellow | ||
7471 | tag: midyellow | ||
7472 | FACTS: | ||
7473 | id: Challenge Room/Panel_facts | ||
7474 | colors: | ||
7475 | - red | ||
7476 | - blue | ||
7477 | tag: forbid | ||
7478 | FACTS (1): | ||
7479 | id: Challenge Room/Panel_facts2 | ||
7480 | colors: red | ||
7481 | tag: forbid | ||
7482 | FACTS (3): | ||
7483 | id: Challenge Room/Panel_facts3 | ||
7484 | tag: forbid | ||
7485 | FACTS (4): | ||
7486 | id: Challenge Room/Panel_facts4 | ||
7487 | colors: blue | ||
7488 | tag: forbid | ||
7489 | FACTS (5): | ||
7490 | id: Challenge Room/Panel_facts5 | ||
7491 | colors: blue | ||
7492 | tag: forbid | ||
7493 | FACTS (6): | ||
7494 | id: Challenge Room/Panel_facts6 | ||
7495 | colors: blue | ||
7496 | tag: forbid | ||
7497 | LAPEL SHEEP: | ||
7498 | id: Challenge Room/Panel_double_anagram_6 | ||
7499 | colors: yellow | ||
7500 | tag: midyellow | ||
7501 | doors: | ||
7502 | Welcome Door: | ||
7503 | id: Entry Room Area Doors/Door_challenge_challenge | ||
7504 | panels: | ||
7505 | - WELCOME | ||
diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..1f426c9 --- /dev/null +++ b/__init__.py | |||
@@ -0,0 +1,112 @@ | |||
1 | """ | ||
2 | Archipelago init file for Lingo | ||
3 | """ | ||
4 | from BaseClasses import Item, Tutorial | ||
5 | from worlds.AutoWorld import WebWorld, World | ||
6 | from .items import ALL_ITEM_TABLE, LingoItem | ||
7 | from .locations import ALL_LOCATION_TABLE | ||
8 | from .options import LingoOptions | ||
9 | from .player_logic import LingoPlayerLogic | ||
10 | from .regions import create_regions | ||
11 | from .static_logic import Room, RoomEntrance | ||
12 | from .testing import LingoTestOptions | ||
13 | |||
14 | |||
15 | class LingoWebWorld(WebWorld): | ||
16 | theme = "grass" | ||
17 | tutorials = [Tutorial( | ||
18 | "Multiworld Setup Guide", | ||
19 | "A guide to playing Lingo with Archipelago.", | ||
20 | "English", | ||
21 | "setup_en.md", | ||
22 | "setup/en", | ||
23 | ["hatkirby"] | ||
24 | )] | ||
25 | |||
26 | |||
27 | class LingoWorld(World): | ||
28 | """ | ||
29 | Lingo is a first person indie puzzle game in the vein of The Witness. You find yourself in a mazelike, non-Euclidean | ||
30 | world filled with 800 word puzzles that use a variety of different mechanics. | ||
31 | """ | ||
32 | game = "Lingo" | ||
33 | web = LingoWebWorld() | ||
34 | |||
35 | base_id = 444400 | ||
36 | topology_present = True | ||
37 | data_version = 1 | ||
38 | |||
39 | options_dataclass = LingoOptions | ||
40 | options: LingoOptions | ||
41 | |||
42 | item_name_to_id = { | ||
43 | name: data.code for name, data in ALL_ITEM_TABLE.items() | ||
44 | } | ||
45 | location_name_to_id = { | ||
46 | name: data.code for name, data in ALL_LOCATION_TABLE.items() | ||
47 | } | ||
48 | |||
49 | player_logic: LingoPlayerLogic | ||
50 | |||
51 | def generate_early(self): | ||
52 | self.player_logic = LingoPlayerLogic(self) | ||
53 | |||
54 | def create_regions(self): | ||
55 | create_regions(self, self.player_logic) | ||
56 | |||
57 | def create_items(self): | ||
58 | pool = [self.create_item(name) for name in self.player_logic.REAL_ITEMS] | ||
59 | |||
60 | if self.player_logic.FORCED_GOOD_ITEM != "": | ||
61 | new_item = self.create_item(self.player_logic.FORCED_GOOD_ITEM) | ||
62 | location_obj = self.multiworld.get_location("Second Room - Good Luck", self.player) | ||
63 | location_obj.place_locked_item(new_item) | ||
64 | |||
65 | item_difference = len(self.player_logic.REAL_LOCATIONS) - len(pool) | ||
66 | if item_difference: | ||
67 | trap_percentage = self.options.trap_percentage | ||
68 | traps = int(item_difference * trap_percentage / 100.0) | ||
69 | non_traps = item_difference - traps | ||
70 | |||
71 | if non_traps: | ||
72 | skip_percentage = self.options.puzzle_skip_percentage | ||
73 | skips = int(non_traps * skip_percentage / 100.0) | ||
74 | non_skips = non_traps - skips | ||
75 | |||
76 | filler_list = [":)", "The Feeling of Being Lost", "Wanderlust", "Empty White Hallways"] | ||
77 | for i in range(0, non_skips): | ||
78 | pool.append(self.create_item(filler_list[i % len(filler_list)])) | ||
79 | |||
80 | for i in range(0, skips): | ||
81 | pool.append(self.create_item("Puzzle Skip")) | ||
82 | |||
83 | if traps: | ||
84 | traps_list = ["Slowness Trap", "Iceland Trap", "Atbash Trap"] | ||
85 | |||
86 | for i in range(0, traps): | ||
87 | pool.append(self.create_item(traps_list[i % len(traps_list)])) | ||
88 | |||
89 | self.multiworld.itempool += pool | ||
90 | |||
91 | def create_item(self, name: str) -> Item: | ||
92 | item = ALL_ITEM_TABLE[name] | ||
93 | return LingoItem(name, item.classification, item.code, self.player) | ||
94 | |||
95 | def set_rules(self): | ||
96 | self.multiworld.completion_condition[self.player] = lambda state: state.has("Victory", self.player) | ||
97 | |||
98 | def fill_slot_data(self): | ||
99 | slot_options = [ | ||
100 | "death_link", "victory_condition", "shuffle_colors", "shuffle_doors", "shuffle_paintings", "shuffle_panels", | ||
101 | "mastery_achievements", "level_2_requirement", "location_checks", "early_color_hallways" | ||
102 | ] | ||
103 | |||
104 | slot_data = { | ||
105 | "seed": self.random.randint(0, 1000000), | ||
106 | **self.options.as_dict(*slot_options), | ||
107 | } | ||
108 | |||
109 | if self.options.shuffle_paintings: | ||
110 | slot_data["painting_entrance_to_exit"] = self.player_logic.PAINTING_MAPPING | ||
111 | |||
112 | return slot_data | ||
diff --git a/docs/en_Lingo.md b/docs/en_Lingo.md new file mode 100644 index 0000000..cff0581 --- /dev/null +++ b/docs/en_Lingo.md | |||
@@ -0,0 +1,42 @@ | |||
1 | # Lingo | ||
2 | |||
3 | ## Where is the settings page? | ||
4 | |||
5 | The [player settings page for this game](../player-settings) contains all the options you need to configure and export a | ||
6 | config file. | ||
7 | |||
8 | ## What does randomization do to this game? | ||
9 | |||
10 | There are a couple of modes of randomization currently available, and you can pick and choose which ones you would like | ||
11 | to use. | ||
12 | |||
13 | * **Door shuffle**: There are many doors in the game, which are opened by completing a set of panels. With door shuffle | ||
14 | on, the doors become items and only open up once you receive the corresponding item. The panel sets that would | ||
15 | ordinarily open the doors become locations. | ||
16 | |||
17 | * **Color shuffle**: There are ten different colors of puzzle in the game, each representing a different mechanic. With | ||
18 | color shuffle on, you would start with only access to white puzzles. Puzzles of other colors will require you to | ||
19 | receive an item in order to solve them (e.g. you can't solve any red puzzles until you receive the "Red" item). | ||
20 | |||
21 | * **Panel shuffle**: Panel shuffling replaces the puzzles on each panel with different ones. So far, the only mode of | ||
22 | panel shuffling is "rearrange" mode, which simply shuffles the already-existing puzzles from the base game onto | ||
23 | different panels. | ||
24 | |||
25 | * **Painting shuffle**: This randomizes the appearance of the paintings in the game, as well as which of them are warps, | ||
26 | and the locations that they warp you to. It is the equivalent of an entrance randomizer in another game. | ||
27 | |||
28 | ## What is a "check" in this game? | ||
29 | |||
30 | Most panels / panel sets that open a door are now location checks, even if door shuffle is not enabled. Various other | ||
31 | puzzles are also location checks, including the achievement panels for each area. | ||
32 | |||
33 | ## What about wall snipes? | ||
34 | |||
35 | "Wall sniping" refers to the fact that you are able to solve puzzles on the other side of opaque walls. This randomizer | ||
36 | does not change how wall snipes work, but it will never require the use of them. There are three puzzles from the base | ||
37 | game that you would ordinarily be expected to wall snipe. The randomizer moves these panels out of the wall or otherwise | ||
38 | reveals them so that a snipe is not necessary. | ||
39 | |||
40 | Because of this, all wall snipes are considered out of logic. This includes sniping The Bearer's MIDDLE while standing | ||
41 | outside The Bold, sniping The Colorful without opening all of the color doors, and sniping WELCOME from next to WELCOME | ||
42 | BACK. | ||
diff --git a/docs/setup_en.md b/docs/setup_en.md new file mode 100644 index 0000000..97f3ce5 --- /dev/null +++ b/docs/setup_en.md | |||
@@ -0,0 +1,45 @@ | |||
1 | # Lingo Randomizer Setup | ||
2 | |||
3 | ## Required Software | ||
4 | |||
5 | - [Lingo](https://store.steampowered.com/app/1814170/Lingo/) | ||
6 | - [Lingo Archipelago Randomizer](https://code.fourisland.com/lingo-archipelago/about/CHANGELOG.md) | ||
7 | |||
8 | ## Optional Software | ||
9 | |||
10 | - [Archipelago Text Client](https://github.com/ArchipelagoMW/Archipelago/releases) | ||
11 | - [Lingo AP Tracker](https://code.fourisland.com/lingo-ap-tracker/about/CHANGELOG.md) | ||
12 | |||
13 | ## Installation | ||
14 | |||
15 | 1. Download the Lingo Archipelago Randomizer from the above link. | ||
16 | 2. Open up Lingo, go to settings, and click View Game Data. This should open up | ||
17 | a folder in Windows Explorer. | ||
18 | 3. Unzip the contents of the randomizer into the "maps" folder. You may need to | ||
19 | create the "maps" folder if you have not played a custom Lingo map before. | ||
20 | 4. Installation complete! You may have to click Return to go back to the main | ||
21 | menu and then click Settings again in order to get the randomizer to show up | ||
22 | in the level selection list. | ||
23 | |||
24 | ## Joining a Multiworld game | ||
25 | |||
26 | 1. Launch Lingo | ||
27 | 2. Click on Settings, and then Level. Choose Archipelago from the list. | ||
28 | 3. Start a new game. Leave the name field blank (anything you type in will be | ||
29 | ignored). | ||
30 | 4. Enter the Archipelago address, slot name, and password into the fields. | ||
31 | 5. Press Connect. | ||
32 | 6. Enjoy! | ||
33 | |||
34 | To continue an earlier game, you can perform the exact same steps as above. You | ||
35 | do not have to re-select Archipelago in the level selection screen if you were | ||
36 | using Archipelago the last time you launched the game. | ||
37 | |||
38 | In order to play the base game again, simply return to the level selection | ||
39 | screen and choose Level 1 (or whatever else you want to play). The randomizer | ||
40 | will not affect gameplay unless you launch it by starting a new game while it is | ||
41 | selected in the level selection screen, so it is safe to play the game normally | ||
42 | while the client is installed. | ||
43 | |||
44 | **Note**: Running the randomizer modifies the game's memory. If you want to play | ||
45 | the base game after playing the randomizer, you need to restart Lingo first. | ||
diff --git a/ids.yaml b/ids.yaml new file mode 100644 index 0000000..f48858a --- /dev/null +++ b/ids.yaml | |||
@@ -0,0 +1,1449 @@ | |||
1 | --- | ||
2 | special_items: | ||
3 | Black: 444400 | ||
4 | Red: 444401 | ||
5 | Blue: 444402 | ||
6 | Yellow: 444403 | ||
7 | Green: 444404 | ||
8 | Orange: 444405 | ||
9 | Gray: 444406 | ||
10 | Brown: 444407 | ||
11 | Purple: 444408 | ||
12 | ":)": 444409 | ||
13 | The Feeling of Being Lost: 444575 | ||
14 | Wanderlust: 444576 | ||
15 | Empty White Hallways: 444577 | ||
16 | Slowness Trap: 444410 | ||
17 | Iceland Trap: 444411 | ||
18 | Atbash Trap: 444412 | ||
19 | Puzzle Skip: 444413 | ||
20 | panels: | ||
21 | Starting Room: | ||
22 | HI: 444400 | ||
23 | HIDDEN: 444401 | ||
24 | TYPE: 444402 | ||
25 | THIS: 444403 | ||
26 | WRITE: 444404 | ||
27 | SAME: 444405 | ||
28 | Hidden Room: | ||
29 | DEAD END: 444406 | ||
30 | OPEN: 444407 | ||
31 | LIES: 444408 | ||
32 | The Seeker: | ||
33 | Achievement: 444409 | ||
34 | BEAR: 444410 | ||
35 | MINE: 444411 | ||
36 | MINE (2): 444412 | ||
37 | BOW: 444413 | ||
38 | DOES: 444414 | ||
39 | MOBILE: 444415 | ||
40 | MOBILE (2): 444416 | ||
41 | DESERT: 444417 | ||
42 | DESSERT: 444418 | ||
43 | SOW: 444419 | ||
44 | SEW: 444420 | ||
45 | TO: 444421 | ||
46 | TOO: 444422 | ||
47 | WRITE: 444423 | ||
48 | EWE: 444424 | ||
49 | KNOT: 444425 | ||
50 | NAUGHT: 444426 | ||
51 | BEAR (2): 444427 | ||
52 | Second Room: | ||
53 | HI: 444428 | ||
54 | LOW: 444429 | ||
55 | ANOTHER TRY: 444430 | ||
56 | LEVEL 2: 444431 | ||
57 | Hub Room: | ||
58 | ORDER: 444432 | ||
59 | SLAUGHTER: 444433 | ||
60 | NEAR: 444434 | ||
61 | FAR: 444435 | ||
62 | TRACE: 444436 | ||
63 | RAT: 444437 | ||
64 | OPEN: 444438 | ||
65 | FOUR: 444439 | ||
66 | LOST: 444440 | ||
67 | FORWARD: 444441 | ||
68 | BETWEEN: 444442 | ||
69 | BACKWARD: 444443 | ||
70 | Dead End Area: | ||
71 | FOUR: 444444 | ||
72 | EIGHT: 444445 | ||
73 | Pilgrim Antechamber: | ||
74 | HOT CRUST: 444446 | ||
75 | PILGRIMAGE: 444447 | ||
76 | MASTERY: 444448 | ||
77 | Pilgrim Room: | ||
78 | THIS: 444449 | ||
79 | TIME ROOM: 444450 | ||
80 | SCIENCE ROOM: 444451 | ||
81 | SHINY ROCK ROOM: 444452 | ||
82 | ANGRY POWER: 444453 | ||
83 | MICRO LEGION: 444454 | ||
84 | LOSERS RELAX: 444455 | ||
85 | '906234': 444456 | ||
86 | MOOR EMORDNILAP: 444457 | ||
87 | HALL ROOMMATE: 444458 | ||
88 | ALL GREY: 444459 | ||
89 | PLUNDER ISLAND: 444460 | ||
90 | FLOSS PATHS: 444461 | ||
91 | Crossroads: | ||
92 | DECAY: 444462 | ||
93 | NOPE: 444463 | ||
94 | EIGHT: 444464 | ||
95 | WE ROT: 444465 | ||
96 | WORDS: 444466 | ||
97 | SWORD: 444467 | ||
98 | TURN: 444468 | ||
99 | BEND HI: 444469 | ||
100 | THE EYES: 444470 | ||
101 | CORNER: 444471 | ||
102 | HOLLOW: 444472 | ||
103 | SWAP: 444473 | ||
104 | GEL: 444474 | ||
105 | THOUGH: 444475 | ||
106 | CROSSROADS: 444476 | ||
107 | Lost Area: | ||
108 | LOST (1): 444477 | ||
109 | LOST (2): 444478 | ||
110 | Amen Name Area: | ||
111 | AMEN: 444479 | ||
112 | NAME: 444480 | ||
113 | NINE: 444481 | ||
114 | Suits Area: | ||
115 | SPADES: 444482 | ||
116 | CLUBS: 444483 | ||
117 | HEARTS: 444484 | ||
118 | The Tenacious: | ||
119 | LEVEL (Black): 444485 | ||
120 | RACECAR (Black): 444486 | ||
121 | SOLOS (Black): 444487 | ||
122 | LEVEL (White): 444488 | ||
123 | RACECAR (White): 444489 | ||
124 | SOLOS (White): 444490 | ||
125 | Achievement: 444491 | ||
126 | Warts Straw Area: | ||
127 | WARTS: 444492 | ||
128 | STRAW: 444493 | ||
129 | Leaf Feel Area: | ||
130 | LEAF: 444494 | ||
131 | FEEL: 444495 | ||
132 | Outside The Agreeable: | ||
133 | MASSACRED: 444496 | ||
134 | BLACK: 444497 | ||
135 | CLOSE: 444498 | ||
136 | LEFT: 444499 | ||
137 | LEFT (2): 444500 | ||
138 | RIGHT: 444501 | ||
139 | PURPLE: 444502 | ||
140 | FIVE (1): 444503 | ||
141 | FIVE (2): 444504 | ||
142 | OUT: 444505 | ||
143 | HIDE: 444506 | ||
144 | DAZE: 444507 | ||
145 | WALL: 444508 | ||
146 | KEEP: 444509 | ||
147 | BAILEY: 444510 | ||
148 | TOWER: 444511 | ||
149 | NORTH: 444512 | ||
150 | DIAMONDS: 444513 | ||
151 | FIRE: 444514 | ||
152 | WINTER: 444515 | ||
153 | Dread Hallway: | ||
154 | DREAD: 444516 | ||
155 | The Agreeable: | ||
156 | Achievement: 444517 | ||
157 | BYE: 444518 | ||
158 | RETOOL: 444519 | ||
159 | DRAWER: 444520 | ||
160 | READ: 444521 | ||
161 | DIFFERENT: 444522 | ||
162 | LOW: 444523 | ||
163 | ALIVE: 444524 | ||
164 | THAT: 444525 | ||
165 | STRESSED: 444526 | ||
166 | STAR: 444527 | ||
167 | TAME: 444528 | ||
168 | CAT: 444529 | ||
169 | Hedge Maze: | ||
170 | DOWN: 444530 | ||
171 | HIDE (1): 444531 | ||
172 | HIDE (2): 444532 | ||
173 | HIDE (3): 444533 | ||
174 | MASTERY (1): 444534 | ||
175 | MASTERY (2): 444535 | ||
176 | PATH (1): 444536 | ||
177 | PATH (2): 444537 | ||
178 | PATH (3): 444538 | ||
179 | PATH (4): 444539 | ||
180 | PATH (5): 444540 | ||
181 | PATH (6): 444541 | ||
182 | PATH (7): 444542 | ||
183 | PATH (8): 444543 | ||
184 | REFLOW: 444544 | ||
185 | LEAP: 444545 | ||
186 | The Perceptive: | ||
187 | Achievement: 444546 | ||
188 | GAZE: 444547 | ||
189 | The Fearless (First Floor): | ||
190 | NAPS: 444548 | ||
191 | TEAM: 444549 | ||
192 | TEEM: 444550 | ||
193 | IMPATIENT: 444551 | ||
194 | EAT: 444552 | ||
195 | The Fearless (Second Floor): | ||
196 | NONE: 444553 | ||
197 | SUM: 444554 | ||
198 | FUNNY: 444555 | ||
199 | MIGHT: 444556 | ||
200 | SAFE: 444557 | ||
201 | SAME: 444558 | ||
202 | CAME: 444559 | ||
203 | The Fearless: | ||
204 | Achievement: 444560 | ||
205 | EASY: 444561 | ||
206 | SOMETIMES: 444562 | ||
207 | DARK: 444563 | ||
208 | EVEN: 444564 | ||
209 | The Observant: | ||
210 | Achievement: 444565 | ||
211 | BACK: 444566 | ||
212 | SIDE: 444567 | ||
213 | BACKSIDE: 444568 | ||
214 | STAIRS: 444569 | ||
215 | WAYS: 444570 | ||
216 | 'ON': 444571 | ||
217 | UP: 444572 | ||
218 | SWIMS: 444573 | ||
219 | UPSTAIRS: 444574 | ||
220 | TOIL: 444575 | ||
221 | STOP: 444576 | ||
222 | TOP: 444577 | ||
223 | HI: 444578 | ||
224 | HI (2): 444579 | ||
225 | '31': 444580 | ||
226 | '52': 444581 | ||
227 | OIL: 444582 | ||
228 | BACKSIDE (GREEN): 444583 | ||
229 | SIDEWAYS: 444584 | ||
230 | The Incomparable: | ||
231 | Achievement: 444585 | ||
232 | A (One): 444586 | ||
233 | A (Two): 444587 | ||
234 | A (Three): 444588 | ||
235 | A (Four): 444589 | ||
236 | A (Five): 444590 | ||
237 | A (Six): 444591 | ||
238 | I (One): 444592 | ||
239 | I (Two): 444593 | ||
240 | I (Three): 444594 | ||
241 | I (Four): 444595 | ||
242 | I (Five): 444596 | ||
243 | I (Six): 444597 | ||
244 | I (Seven): 444598 | ||
245 | Eight Room: | ||
246 | Eight Back: 444599 | ||
247 | Eight Front: 444600 | ||
248 | Nine: 444601 | ||
249 | Orange Tower First Floor: | ||
250 | SECRET: 444602 | ||
251 | DADS + ALE: 444603 | ||
252 | SALT: 444604 | ||
253 | Orange Tower Third Floor: | ||
254 | RED: 444605 | ||
255 | DEER + WREN: 444606 | ||
256 | Orange Tower Fourth Floor: | ||
257 | RUNT: 444607 | ||
258 | RUNT (2): 444608 | ||
259 | LEARNS + UNSEW: 444609 | ||
260 | HOT CRUSTS: 444610 | ||
261 | IRK HORN: 444611 | ||
262 | Hot Crusts Area: | ||
263 | EIGHT: 444612 | ||
264 | Orange Tower Fifth Floor: | ||
265 | SIZE (Small): 444613 | ||
266 | SIZE (Big): 444614 | ||
267 | DRAWL + RUNS: 444615 | ||
268 | NINE: 444616 | ||
269 | SUMMER: 444617 | ||
270 | AUTUMN: 444618 | ||
271 | SPRING: 444619 | ||
272 | PAINTING (1): 445078 | ||
273 | PAINTING (2): 445079 | ||
274 | PAINTING (3): 445080 | ||
275 | PAINTING (4): 445081 | ||
276 | PAINTING (5): 445082 | ||
277 | ROOM: 445083 | ||
278 | Orange Tower Seventh Floor: | ||
279 | THE END: 444620 | ||
280 | THE MASTER: 444621 | ||
281 | MASTERY: 444622 | ||
282 | Roof: | ||
283 | MASTERY (1): 444623 | ||
284 | MASTERY (2): 444624 | ||
285 | MASTERY (3): 444625 | ||
286 | MASTERY (4): 444626 | ||
287 | MASTERY (5): 444627 | ||
288 | MASTERY (6): 444628 | ||
289 | STAIRCASE: 444629 | ||
290 | Orange Tower Basement: | ||
291 | MASTERY: 444630 | ||
292 | THE LIBRARY: 444631 | ||
293 | Courtyard: | ||
294 | I: 444632 | ||
295 | GREEN: 444633 | ||
296 | PINECONE: 444634 | ||
297 | ACORN: 444635 | ||
298 | Yellow Backside Area: | ||
299 | BACKSIDE: 444636 | ||
300 | NINE: 444637 | ||
301 | First Second Third Fourth: | ||
302 | FIRST: 444638 | ||
303 | SECOND: 444639 | ||
304 | THIRD: 444640 | ||
305 | FOURTH: 444641 | ||
306 | The Colorful (White): | ||
307 | BEGIN: 444642 | ||
308 | The Colorful (Black): | ||
309 | FOUND: 444643 | ||
310 | The Colorful (Red): | ||
311 | LOAF: 444644 | ||
312 | The Colorful (Yellow): | ||
313 | CREAM: 444645 | ||
314 | The Colorful (Blue): | ||
315 | SUN: 444646 | ||
316 | The Colorful (Purple): | ||
317 | SPOON: 444647 | ||
318 | The Colorful (Orange): | ||
319 | LETTERS: 444648 | ||
320 | The Colorful (Green): | ||
321 | WALLS: 444649 | ||
322 | The Colorful (Brown): | ||
323 | IRON: 444650 | ||
324 | The Colorful (Gray): | ||
325 | OBSTACLE: 444651 | ||
326 | The Colorful: | ||
327 | Achievement: 444652 | ||
328 | Welcome Back Area: | ||
329 | WELCOME BACK: 444653 | ||
330 | SECRET: 444654 | ||
331 | CLOCKWISE: 444655 | ||
332 | Owl Hallway: | ||
333 | STRAYS: 444656 | ||
334 | READS + RUST: 444657 | ||
335 | Outside The Initiated: | ||
336 | SEVEN (1): 444658 | ||
337 | SEVEN (2): 444659 | ||
338 | EIGHT: 444660 | ||
339 | NINE: 444661 | ||
340 | BLUE: 444662 | ||
341 | ORANGE: 444663 | ||
342 | UNCOVER: 444664 | ||
343 | OXEN: 444665 | ||
344 | BACKSIDE: 444666 | ||
345 | The Optimistic: 444667 | ||
346 | PAST: 444668 | ||
347 | FUTURE: 444669 | ||
348 | FUTURE (2): 444670 | ||
349 | PAST (2): 444671 | ||
350 | PRESENT: 444672 | ||
351 | SMILE: 444673 | ||
352 | ANGERED: 444674 | ||
353 | VOTE: 444675 | ||
354 | The Initiated: | ||
355 | Achievement: 444676 | ||
356 | DAUGHTER: 444677 | ||
357 | START: 444678 | ||
358 | STARE: 444679 | ||
359 | HYPE: 444680 | ||
360 | ABYSS: 444681 | ||
361 | SWEAT: 444682 | ||
362 | BEAT: 444683 | ||
363 | ALUMNI: 444684 | ||
364 | PATS: 444685 | ||
365 | KNIGHT: 444686 | ||
366 | BYTE: 444687 | ||
367 | MAIM: 444688 | ||
368 | MORGUE: 444689 | ||
369 | CHAIR: 444690 | ||
370 | HUMAN: 444691 | ||
371 | BED: 444692 | ||
372 | The Traveled: | ||
373 | Achievement: 444693 | ||
374 | CLOSE: 444694 | ||
375 | COMPOSE: 444695 | ||
376 | RECORD: 444696 | ||
377 | CATEGORY: 444697 | ||
378 | HELLO: 444698 | ||
379 | DUPLICATE: 444699 | ||
380 | IDENTICAL: 444700 | ||
381 | DISTANT: 444701 | ||
382 | HAY: 444702 | ||
383 | GIGGLE: 444703 | ||
384 | CHUCKLE: 444704 | ||
385 | SNITCH: 444705 | ||
386 | CONCEALED: 444706 | ||
387 | PLUNGE: 444707 | ||
388 | AUTUMN: 444708 | ||
389 | ROAD: 444709 | ||
390 | FOUR: 444710 | ||
391 | Outside The Bold: | ||
392 | UNOPEN: 444711 | ||
393 | BEGIN: 444712 | ||
394 | SIX: 444713 | ||
395 | NINE: 444714 | ||
396 | LEFT: 444715 | ||
397 | RIGHT: 444716 | ||
398 | RISE (Horizon): 444717 | ||
399 | RISE (Sunrise): 444718 | ||
400 | ZEN: 444719 | ||
401 | SON: 444720 | ||
402 | STARGAZER: 444721 | ||
403 | MOUTH: 444722 | ||
404 | YEAST: 444723 | ||
405 | WET: 444724 | ||
406 | The Bold: | ||
407 | Achievement: 444725 | ||
408 | FOOT: 444726 | ||
409 | NEEDLE: 444727 | ||
410 | FACE: 444728 | ||
411 | SIGN: 444729 | ||
412 | HEARTBREAK: 444730 | ||
413 | UNDEAD: 444731 | ||
414 | DEADLINE: 444732 | ||
415 | SUSHI: 444733 | ||
416 | THISTLE: 444734 | ||
417 | LANDMASS: 444735 | ||
418 | MASSACRED: 444736 | ||
419 | AIRPLANE: 444737 | ||
420 | NIGHTMARE: 444738 | ||
421 | MOUTH: 444739 | ||
422 | SAW: 444740 | ||
423 | HAND: 444741 | ||
424 | Outside The Undeterred: | ||
425 | HOLLOW: 444742 | ||
426 | ART + ART: 444743 | ||
427 | PEN: 444744 | ||
428 | HUSTLING: 444745 | ||
429 | SUNLIGHT: 444746 | ||
430 | LIGHT: 444747 | ||
431 | BRIGHT: 444748 | ||
432 | SUNNY: 444749 | ||
433 | RAINY: 444750 | ||
434 | ZERO: 444751 | ||
435 | ONE: 444752 | ||
436 | TWO (1): 444753 | ||
437 | TWO (2): 444754 | ||
438 | THREE (1): 444755 | ||
439 | THREE (2): 444756 | ||
440 | THREE (3): 444757 | ||
441 | FOUR: 444758 | ||
442 | The Undeterred: | ||
443 | Achievement: 444759 | ||
444 | BONE: 444760 | ||
445 | EYE: 444761 | ||
446 | MOUTH: 444762 | ||
447 | IRIS: 444763 | ||
448 | EYE (2): 444764 | ||
449 | ICE: 444765 | ||
450 | HEIGHT: 444766 | ||
451 | EYE (3): 444767 | ||
452 | NOT: 444768 | ||
453 | JUST: 444769 | ||
454 | READ: 444770 | ||
455 | FATHER: 444771 | ||
456 | FEATHER: 444772 | ||
457 | CONTINENT: 444773 | ||
458 | OCEAN: 444774 | ||
459 | WALL: 444775 | ||
460 | Number Hunt: | ||
461 | FIVE: 444776 | ||
462 | SIX: 444777 | ||
463 | SEVEN: 444778 | ||
464 | EIGHT: 444779 | ||
465 | NINE: 444780 | ||
466 | Directional Gallery: | ||
467 | PEPPER: 444781 | ||
468 | TURN: 444782 | ||
469 | LEARN: 444783 | ||
470 | FIVE (1): 444784 | ||
471 | FIVE (2): 444785 | ||
472 | SIX (1): 444786 | ||
473 | SIX (2): 444787 | ||
474 | SEVEN: 444788 | ||
475 | EIGHT: 444789 | ||
476 | NINE: 444790 | ||
477 | BACKSIDE: 444791 | ||
478 | '834283054': 444792 | ||
479 | PARANOID: 444793 | ||
480 | YELLOW: 444794 | ||
481 | WADED + WEE: 444795 | ||
482 | THE EYES: 444796 | ||
483 | LEFT: 444797 | ||
484 | RIGHT: 444798 | ||
485 | MIDDLE: 444799 | ||
486 | WARD: 444800 | ||
487 | HIND: 444801 | ||
488 | RIG: 444802 | ||
489 | WINDWARD: 444803 | ||
490 | LIGHT: 444804 | ||
491 | REWIND: 444805 | ||
492 | Champion's Rest: | ||
493 | EXIT: 444806 | ||
494 | HUES: 444807 | ||
495 | RED: 444808 | ||
496 | BLUE: 444809 | ||
497 | YELLOW: 444810 | ||
498 | GREEN: 444811 | ||
499 | PURPLE: 444812 | ||
500 | ORANGE: 444813 | ||
501 | YOU: 444814 | ||
502 | ME: 444815 | ||
503 | SECRET BLUE: 444816 | ||
504 | SECRET YELLOW: 444817 | ||
505 | SECRET RED: 444818 | ||
506 | The Bearer: | ||
507 | Achievement: 444819 | ||
508 | MIDDLE: 444820 | ||
509 | FARTHER: 444821 | ||
510 | BACKSIDE: 444822 | ||
511 | PART: 444823 | ||
512 | HEART: 444824 | ||
513 | The Bearer (East): | ||
514 | SIX: 444825 | ||
515 | PEACE: 444826 | ||
516 | The Bearer (North): | ||
517 | SILENT (1): 444827 | ||
518 | SILENT (2): 444828 | ||
519 | SPACE: 444829 | ||
520 | WARTS: 444830 | ||
521 | The Bearer (South): | ||
522 | SIX: 444831 | ||
523 | TENT: 444832 | ||
524 | BOWL: 444833 | ||
525 | The Bearer (West): | ||
526 | SNOW: 444834 | ||
527 | SMILE: 444835 | ||
528 | Bearer Side Area: | ||
529 | SHORTCUT: 444836 | ||
530 | POTS: 444837 | ||
531 | Cross Tower (East): | ||
532 | WINTER: 444838 | ||
533 | Cross Tower (North): | ||
534 | NORTH: 444839 | ||
535 | Cross Tower (South): | ||
536 | FIRE: 444840 | ||
537 | Cross Tower (West): | ||
538 | DIAMONDS: 444841 | ||
539 | The Steady (Rose): | ||
540 | SOAR: 444842 | ||
541 | The Steady (Ruby): | ||
542 | BURY: 444843 | ||
543 | The Steady (Carnation): | ||
544 | INCARNATION: 444844 | ||
545 | The Steady (Sunflower): | ||
546 | SUN: 444845 | ||
547 | The Steady (Plum): | ||
548 | LUMP: 444846 | ||
549 | The Steady (Lime): | ||
550 | LIMELIGHT: 444847 | ||
551 | The Steady (Lemon): | ||
552 | MELON: 444848 | ||
553 | The Steady (Topaz): | ||
554 | TOP: 444849 | ||
555 | MASTERY: 444850 | ||
556 | The Steady (Orange): | ||
557 | BLUE: 444851 | ||
558 | The Steady (Sapphire): | ||
559 | SAP: 444852 | ||
560 | The Steady (Blueberry): | ||
561 | BLUE: 444853 | ||
562 | The Steady (Amber): | ||
563 | ANTECHAMBER: 444854 | ||
564 | The Steady (Emerald): | ||
565 | HERALD: 444855 | ||
566 | The Steady (Amethyst): | ||
567 | PACIFIST: 444856 | ||
568 | The Steady (Lilac): | ||
569 | LIE LACK: 444857 | ||
570 | The Steady (Cherry): | ||
571 | HAIRY: 444858 | ||
572 | The Steady: | ||
573 | Achievement: 444859 | ||
574 | Knight Night (Outer Ring): | ||
575 | NIGHT: 444860 | ||
576 | KNIGHT: 444861 | ||
577 | BEE: 444862 | ||
578 | NEW: 444863 | ||
579 | FORE: 444864 | ||
580 | TRUSTED (1): 444865 | ||
581 | TRUSTED (2): 444866 | ||
582 | ENCRUSTED: 444867 | ||
583 | ADJUST (1): 444868 | ||
584 | ADJUST (2): 444869 | ||
585 | RIGHT: 444870 | ||
586 | TRUST: 444871 | ||
587 | Knight Night (Right Upper Segment): | ||
588 | RUST (1): 444872 | ||
589 | RUST (2): 444873 | ||
590 | Knight Night (Right Lower Segment): | ||
591 | ADJUST: 444874 | ||
592 | BEFORE: 444875 | ||
593 | BE: 444876 | ||
594 | LEFT: 444877 | ||
595 | TRUST: 444878 | ||
596 | Knight Night (Final): | ||
597 | TRUSTED: 444879 | ||
598 | Knight Night Exit: | ||
599 | SEVEN (1): 444880 | ||
600 | SEVEN (2): 444881 | ||
601 | SEVEN (3): 444882 | ||
602 | DEAD END: 444883 | ||
603 | WARNER: 444884 | ||
604 | The Artistic (Smiley): | ||
605 | Achievement: 444885 | ||
606 | FINE: 444886 | ||
607 | BLADE: 444887 | ||
608 | RED: 444888 | ||
609 | BEARD: 444889 | ||
610 | ICE: 444890 | ||
611 | ROOT: 444891 | ||
612 | The Artistic (Panda): | ||
613 | EYE (Top): 444892 | ||
614 | EYE (Bottom): 444893 | ||
615 | LADYLIKE: 444894 | ||
616 | WATER: 444895 | ||
617 | OURS: 444896 | ||
618 | DAYS: 444897 | ||
619 | NIGHTTIME: 444898 | ||
620 | NIGHT: 444899 | ||
621 | The Artistic (Lattice): | ||
622 | POSH: 444900 | ||
623 | MALL: 444901 | ||
624 | DEICIDE: 444902 | ||
625 | WAVER: 444903 | ||
626 | REPAID: 444904 | ||
627 | BABY: 444905 | ||
628 | LOBE: 444906 | ||
629 | BOWELS: 444907 | ||
630 | The Artistic (Apple): | ||
631 | SPRIG: 444908 | ||
632 | RELEASES: 444909 | ||
633 | MUCH: 444910 | ||
634 | FISH: 444911 | ||
635 | MASK: 444912 | ||
636 | HILL: 444913 | ||
637 | TINE: 444914 | ||
638 | THING: 444915 | ||
639 | The Artistic (Hint Room): | ||
640 | THEME: 444916 | ||
641 | PAINTS: 444917 | ||
642 | I: 444918 | ||
643 | KIT: 444919 | ||
644 | The Discerning: | ||
645 | Achievement: 444920 | ||
646 | HITS: 444921 | ||
647 | WARRED: 444922 | ||
648 | REDRAW: 444923 | ||
649 | ADDER: 444924 | ||
650 | LAUGHTERS: 444925 | ||
651 | STONE: 444926 | ||
652 | ONSET: 444927 | ||
653 | RAT: 444928 | ||
654 | DUSTY: 444929 | ||
655 | ARTS: 444930 | ||
656 | TSAR: 444931 | ||
657 | STATE: 444932 | ||
658 | REACT: 444933 | ||
659 | DEAR: 444934 | ||
660 | DARE: 444935 | ||
661 | SEAM: 444936 | ||
662 | The Eyes They See: | ||
663 | NEAR: 444937 | ||
664 | EIGHT: 444938 | ||
665 | Far Window: | ||
666 | FAR: 444939 | ||
667 | Outside The Wondrous: | ||
668 | SHRINK: 444940 | ||
669 | The Wondrous (Bookcase): | ||
670 | CASE: 444941 | ||
671 | The Wondrous (Chandelier): | ||
672 | CANDLE HEIR: 444942 | ||
673 | The Wondrous (Window): | ||
674 | GLASS: 444943 | ||
675 | The Wondrous (Table): | ||
676 | WOOD: 444944 | ||
677 | BROOK NOD: 444945 | ||
678 | The Wondrous: | ||
679 | FIREPLACE: 444946 | ||
680 | Achievement: 444947 | ||
681 | Arrow Garden: | ||
682 | MASTERY: 444948 | ||
683 | SHARP: 444949 | ||
684 | Hallway Room (2): | ||
685 | WISE: 444950 | ||
686 | CLOCK: 444951 | ||
687 | ER: 444952 | ||
688 | COUNT: 444953 | ||
689 | Hallway Room (3): | ||
690 | TRANCE: 444954 | ||
691 | FORM: 444955 | ||
692 | A: 444956 | ||
693 | SHUN: 444957 | ||
694 | Hallway Room (4): | ||
695 | WHEEL: 444958 | ||
696 | Elements Area: | ||
697 | A: 444959 | ||
698 | NINE: 444960 | ||
699 | UNDISTRACTED: 444961 | ||
700 | MASTERY: 444962 | ||
701 | EARTH: 444963 | ||
702 | WATER: 444964 | ||
703 | AIR: 444965 | ||
704 | Outside The Wanderer: | ||
705 | WANDERLUST: 444966 | ||
706 | The Wanderer: | ||
707 | Achievement: 444967 | ||
708 | '7890': 444968 | ||
709 | '6524': 444969 | ||
710 | '951': 444970 | ||
711 | '4524': 444971 | ||
712 | LEARN: 444972 | ||
713 | DUST: 444973 | ||
714 | STAR: 444974 | ||
715 | WANDER: 444975 | ||
716 | Art Gallery: | ||
717 | EIGHT: 444976 | ||
718 | EON: 444977 | ||
719 | TRUSTWORTHY: 444978 | ||
720 | FREE: 444979 | ||
721 | OUR: 444980 | ||
722 | ONE ROAD MANY TURNS: 444981 | ||
723 | Art Gallery (Second Floor): | ||
724 | HOUSE: 444982 | ||
725 | PATH: 444983 | ||
726 | PARK: 444984 | ||
727 | CARRIAGE: 444985 | ||
728 | Art Gallery (Third Floor): | ||
729 | AN: 444986 | ||
730 | MAY: 444987 | ||
731 | ANY: 444988 | ||
732 | MAN: 444989 | ||
733 | Art Gallery (Fourth Floor): | ||
734 | URNS: 444990 | ||
735 | LEARNS: 444991 | ||
736 | RUNTS: 444992 | ||
737 | SEND - USE: 444993 | ||
738 | TRUST: 444994 | ||
739 | '062459': 444995 | ||
740 | Rhyme Room (Smiley): | ||
741 | LOANS: 444996 | ||
742 | SKELETON: 444997 | ||
743 | REPENTANCE: 444998 | ||
744 | WORD: 444999 | ||
745 | SCHEME: 445000 | ||
746 | FANTASY: 445001 | ||
747 | HISTORY: 445002 | ||
748 | SECRET: 445003 | ||
749 | Rhyme Room (Cross): | ||
750 | NINE: 445004 | ||
751 | FERN: 445005 | ||
752 | STAY: 445006 | ||
753 | FRIEND: 445007 | ||
754 | RISE: 445008 | ||
755 | PLUMP: 445009 | ||
756 | BOUNCE: 445010 | ||
757 | SCRAWL: 445011 | ||
758 | PLUNGE: 445012 | ||
759 | LEAP: 445013 | ||
760 | Rhyme Room (Circle): | ||
761 | BIRD: 445014 | ||
762 | LETTER: 445015 | ||
763 | FORBIDDEN: 445016 | ||
764 | CONCEALED: 445017 | ||
765 | VIOLENT: 445018 | ||
766 | MUTE: 445019 | ||
767 | Rhyme Room (Looped Square): | ||
768 | WALKED: 445020 | ||
769 | OBSTRUCTED: 445021 | ||
770 | SKIES: 445022 | ||
771 | SWELL: 445023 | ||
772 | PENNED: 445024 | ||
773 | CLIMB: 445025 | ||
774 | TROUBLE: 445026 | ||
775 | DUPLICATE: 445027 | ||
776 | Rhyme Room (Target): | ||
777 | WILD: 445028 | ||
778 | KID: 445029 | ||
779 | PISTOL: 445030 | ||
780 | QUARTZ: 445031 | ||
781 | INNOVATIVE (Top): 445032 | ||
782 | INNOVATIVE (Bottom): 445033 | ||
783 | Room Room: | ||
784 | DOOR (1): 445034 | ||
785 | DOOR (2): 445035 | ||
786 | WINDOW: 445036 | ||
787 | STAIRS: 445037 | ||
788 | PAINTING: 445038 | ||
789 | FLOOR (1): 445039 | ||
790 | FLOOR (2): 445040 | ||
791 | FLOOR (3): 445041 | ||
792 | FLOOR (4): 445042 | ||
793 | FLOOR (5): 445043 | ||
794 | FLOOR (7): 445044 | ||
795 | FLOOR (8): 445045 | ||
796 | FLOOR (9): 445046 | ||
797 | FLOOR (10): 445047 | ||
798 | CEILING (1): 445048 | ||
799 | CEILING (2): 445049 | ||
800 | CEILING (3): 445050 | ||
801 | CEILING (4): 445051 | ||
802 | CEILING (5): 445052 | ||
803 | WALL (1): 445053 | ||
804 | WALL (2): 445054 | ||
805 | WALL (3): 445055 | ||
806 | WALL (4): 445056 | ||
807 | WALL (5): 445057 | ||
808 | WALL (6): 445058 | ||
809 | WALL (7): 445059 | ||
810 | WALL (8): 445060 | ||
811 | WALL (9): 445061 | ||
812 | WALL (10): 445062 | ||
813 | WALL (11): 445063 | ||
814 | WALL (12): 445064 | ||
815 | WALL (13): 445065 | ||
816 | WALL (14): 445066 | ||
817 | WALL (15): 445067 | ||
818 | WALL (16): 445068 | ||
819 | WALL (17): 445069 | ||
820 | WALL (18): 445070 | ||
821 | WALL (19): 445071 | ||
822 | WALL (20): 445072 | ||
823 | WALL (21): 445073 | ||
824 | BROOMED: 445074 | ||
825 | LAYS: 445075 | ||
826 | BASE: 445076 | ||
827 | MASTERY: 445077 | ||
828 | Outside The Wise: | ||
829 | KITTEN: 445084 | ||
830 | CAT: 445085 | ||
831 | The Wise: | ||
832 | Achievement: 445086 | ||
833 | PUPPY: 445087 | ||
834 | ADULT: 445088 | ||
835 | BREAD: 445089 | ||
836 | DINOSAUR: 445090 | ||
837 | OAK: 445091 | ||
838 | CORPSE: 445092 | ||
839 | BEFORE: 445093 | ||
840 | YOUR: 445094 | ||
841 | BETWIXT: 445095 | ||
842 | NIGH: 445096 | ||
843 | CONNEXION: 445097 | ||
844 | THOU: 445098 | ||
845 | The Red: | ||
846 | Achievement: 445099 | ||
847 | PANDEMIC (1): 445100 | ||
848 | TRINITY: 445101 | ||
849 | CHEMISTRY: 445102 | ||
850 | FLUMMOXED: 445103 | ||
851 | PANDEMIC (2): 445104 | ||
852 | COUNTERCLOCKWISE: 445105 | ||
853 | FEARLESS: 445106 | ||
854 | DEFORESTATION: 445107 | ||
855 | CRAFTSMANSHIP: 445108 | ||
856 | CAMEL: 445109 | ||
857 | LION: 445110 | ||
858 | TIGER: 445111 | ||
859 | SHIP (1): 445112 | ||
860 | SHIP (2): 445113 | ||
861 | GIRAFFE: 445114 | ||
862 | The Ecstatic: | ||
863 | Achievement: 445115 | ||
864 | FORM (1): 445116 | ||
865 | WIND: 445117 | ||
866 | EGGS: 445118 | ||
867 | VEGETABLES: 445119 | ||
868 | WATER: 445120 | ||
869 | FRUITS: 445121 | ||
870 | LEAVES: 445122 | ||
871 | VINES: 445123 | ||
872 | ICE: 445124 | ||
873 | STYLE: 445125 | ||
874 | FIR: 445126 | ||
875 | REEF: 445127 | ||
876 | ROTS: 445128 | ||
877 | FORM (2): 445129 | ||
878 | Outside The Scientific: | ||
879 | OPEN: 445130 | ||
880 | CLOSE: 445131 | ||
881 | AHEAD: 445132 | ||
882 | The Scientific: | ||
883 | Achievement: 445133 | ||
884 | HYDROGEN (1): 445134 | ||
885 | OXYGEN: 445135 | ||
886 | HYDROGEN (2): 445136 | ||
887 | SUGAR (1): 445137 | ||
888 | SUGAR (2): 445138 | ||
889 | SUGAR (3): 445139 | ||
890 | CHLORINE: 445140 | ||
891 | SODIUM: 445141 | ||
892 | FOREST: 445142 | ||
893 | POUND: 445143 | ||
894 | ICE: 445144 | ||
895 | FISSION: 445145 | ||
896 | FUSION: 445146 | ||
897 | MISS: 445147 | ||
898 | TREE (1): 445148 | ||
899 | BIOGRAPHY: 445149 | ||
900 | CACTUS: 445150 | ||
901 | VERTEBRATE: 445151 | ||
902 | ROSE: 445152 | ||
903 | TREE (2): 445153 | ||
904 | FRUIT: 445154 | ||
905 | MAMMAL: 445155 | ||
906 | BIRD: 445156 | ||
907 | FISH: 445157 | ||
908 | GRAVELY: 445158 | ||
909 | BREVITY: 445159 | ||
910 | PART: 445160 | ||
911 | MATTER: 445161 | ||
912 | ELECTRIC: 445162 | ||
913 | ATOM (1): 445163 | ||
914 | NEUTRAL: 445164 | ||
915 | ATOM (2): 445165 | ||
916 | PROPEL: 445166 | ||
917 | ATOM (3): 445167 | ||
918 | ORDER: 445168 | ||
919 | OPTICS: 445169 | ||
920 | GRAPHITE: 445170 | ||
921 | HOT RYE: 445171 | ||
922 | SIT SHY HOPE: 445172 | ||
923 | ME NEXT PIER: 445173 | ||
924 | RUT LESS: 445174 | ||
925 | SON COUNCIL: 445175 | ||
926 | Challenge Room: | ||
927 | WELCOME: 445176 | ||
928 | CHALLENGE: 445177 | ||
929 | Achievement: 445178 | ||
930 | OPEN: 445179 | ||
931 | SINGED: 445180 | ||
932 | NEVER TRUSTED: 445181 | ||
933 | CORNER: 445182 | ||
934 | STRAWBERRIES: 445183 | ||
935 | GRUB: 445184 | ||
936 | BREAD: 445185 | ||
937 | COLOR: 445186 | ||
938 | WRITER: 445187 | ||
939 | '02759': 445188 | ||
940 | REAL EYES: 445189 | ||
941 | LOBS: 445190 | ||
942 | PEST ALLY: 445191 | ||
943 | GENIAL HALO: 445192 | ||
944 | DUCK LOGO: 445193 | ||
945 | AVIAN GREEN: 445194 | ||
946 | FEVER TEAR: 445195 | ||
947 | FACTS: 445196 | ||
948 | FACTS (1): 445197 | ||
949 | FACTS (3): 445198 | ||
950 | FACTS (4): 445199 | ||
951 | FACTS (5): 445200 | ||
952 | FACTS (6): 445201 | ||
953 | LAPEL SHEEP: 445202 | ||
954 | doors: | ||
955 | Starting Room: | ||
956 | Back Right Door: | ||
957 | item: 444416 | ||
958 | location: 444401 | ||
959 | Rhyme Room Entrance: | ||
960 | item: 444417 | ||
961 | Hidden Room: | ||
962 | Dead End Door: | ||
963 | item: 444419 | ||
964 | Knight Night Entrance: | ||
965 | item: 444421 | ||
966 | Seeker Entrance: | ||
967 | item: 444422 | ||
968 | location: 444407 | ||
969 | Rhyme Room Entrance: | ||
970 | item: 444423 | ||
971 | Second Room: | ||
972 | Exit Door: | ||
973 | item: 444424 | ||
974 | location: 445203 | ||
975 | Hub Room: | ||
976 | Crossroads Entrance: | ||
977 | item: 444425 | ||
978 | location: 444432 | ||
979 | Tenacious Entrance: | ||
980 | item: 444426 | ||
981 | location: 444433 | ||
982 | Symmetry Door: | ||
983 | item: 444428 | ||
984 | location: 445204 | ||
985 | Shortcut to Hedge Maze: | ||
986 | item: 444430 | ||
987 | location: 444436 | ||
988 | Near RAT Door: | ||
989 | item: 444432 | ||
990 | Traveled Entrance: | ||
991 | item: 444433 | ||
992 | location: 444438 | ||
993 | Lost Door: | ||
994 | item: 444435 | ||
995 | location: 444440 | ||
996 | Pilgrim Antechamber: | ||
997 | Sun Painting: | ||
998 | item: 444436 | ||
999 | location: 445205 | ||
1000 | Pilgrim Room: | ||
1001 | Shortcut to The Seeker: | ||
1002 | item: 444437 | ||
1003 | location: 444449 | ||
1004 | Crossroads: | ||
1005 | Tenacious Entrance: | ||
1006 | item: 444438 | ||
1007 | location: 444462 | ||
1008 | Discerning Entrance: | ||
1009 | item: 444439 | ||
1010 | location: 444463 | ||
1011 | Tower Entrance: | ||
1012 | item: 444440 | ||
1013 | location: 444465 | ||
1014 | Tower Back Entrance: | ||
1015 | item: 444442 | ||
1016 | location: 445206 | ||
1017 | Words Sword Door: | ||
1018 | item: 444443 | ||
1019 | location: 445207 | ||
1020 | Eye Wall: | ||
1021 | item: 444445 | ||
1022 | location: 444469 | ||
1023 | Hollow Hallway: | ||
1024 | item: 444446 | ||
1025 | Roof Access: | ||
1026 | item: 444447 | ||
1027 | Lost Area: | ||
1028 | Exit: | ||
1029 | item: 444448 | ||
1030 | location: 445208 | ||
1031 | Amen Name Area: | ||
1032 | Exit: | ||
1033 | item: 444449 | ||
1034 | location: 445209 | ||
1035 | The Tenacious: | ||
1036 | Shortcut to Hub Room: | ||
1037 | item: 444450 | ||
1038 | location: 445210 | ||
1039 | White Palindromes: | ||
1040 | location: 445211 | ||
1041 | Warts Straw Area: | ||
1042 | Door: | ||
1043 | item: 444451 | ||
1044 | location: 445212 | ||
1045 | Leaf Feel Area: | ||
1046 | Door: | ||
1047 | item: 444452 | ||
1048 | location: 445213 | ||
1049 | Outside The Agreeable: | ||
1050 | Tenacious Entrance: | ||
1051 | item: 444453 | ||
1052 | location: 444496 | ||
1053 | Black Door: | ||
1054 | item: 444454 | ||
1055 | location: 444497 | ||
1056 | Agreeable Entrance: | ||
1057 | item: 444455 | ||
1058 | location: 444498 | ||
1059 | Painting Shortcut: | ||
1060 | item: 444456 | ||
1061 | location: 444501 | ||
1062 | Purple Barrier: | ||
1063 | item: 444457 | ||
1064 | Hallway Door: | ||
1065 | item: 444459 | ||
1066 | location: 445214 | ||
1067 | Dread Hallway: | ||
1068 | Tenacious Entrance: | ||
1069 | item: 444462 | ||
1070 | location: 444516 | ||
1071 | The Agreeable: | ||
1072 | Shortcut to Hedge Maze: | ||
1073 | item: 444463 | ||
1074 | location: 444518 | ||
1075 | Hedge Maze: | ||
1076 | Perceptive Entrance: | ||
1077 | item: 444464 | ||
1078 | location: 444530 | ||
1079 | Painting Shortcut: | ||
1080 | item: 444465 | ||
1081 | Observant Entrance: | ||
1082 | item: 444466 | ||
1083 | Hide and Seek: | ||
1084 | location: 445215 | ||
1085 | The Fearless (First Floor): | ||
1086 | Second Floor: | ||
1087 | item: 444468 | ||
1088 | location: 445216 | ||
1089 | The Fearless (Second Floor): | ||
1090 | Third Floor: | ||
1091 | item: 444471 | ||
1092 | location: 445217 | ||
1093 | The Observant: | ||
1094 | Backside Door: | ||
1095 | item: 444472 | ||
1096 | location: 445218 | ||
1097 | Stairs: | ||
1098 | item: 444474 | ||
1099 | location: 444569 | ||
1100 | The Incomparable: | ||
1101 | Eight Painting: | ||
1102 | item: 444475 | ||
1103 | location: 445219 | ||
1104 | Orange Tower: | ||
1105 | Second Floor: | ||
1106 | item: 444476 | ||
1107 | Third Floor: | ||
1108 | item: 444477 | ||
1109 | Fourth Floor: | ||
1110 | item: 444478 | ||
1111 | Fifth Floor: | ||
1112 | item: 444479 | ||
1113 | Sixth Floor: | ||
1114 | item: 444480 | ||
1115 | Seventh Floor: | ||
1116 | item: 444481 | ||
1117 | Orange Tower First Floor: | ||
1118 | Shortcut to Hub Room: | ||
1119 | item: 444483 | ||
1120 | location: 444602 | ||
1121 | Salt Pepper Door: | ||
1122 | item: 444485 | ||
1123 | location: 445220 | ||
1124 | Orange Tower Third Floor: | ||
1125 | Red Barrier: | ||
1126 | item: 444486 | ||
1127 | Rhyme Room Entrance: | ||
1128 | item: 444487 | ||
1129 | Orange Barrier: | ||
1130 | item: 444488 | ||
1131 | location: 445221 | ||
1132 | Orange Tower Fourth Floor: | ||
1133 | Hot Crusts Door: | ||
1134 | item: 444490 | ||
1135 | location: 444610 | ||
1136 | Orange Tower Fifth Floor: | ||
1137 | Welcome Back: | ||
1138 | item: 444491 | ||
1139 | location: 445222 | ||
1140 | Orange Tower Seventh Floor: | ||
1141 | Mastery: | ||
1142 | item: 444493 | ||
1143 | Mastery Panels: | ||
1144 | location: 445223 | ||
1145 | Courtyard: | ||
1146 | Painting Shortcut: | ||
1147 | item: 444494 | ||
1148 | Green Barrier: | ||
1149 | item: 444495 | ||
1150 | First Second Third Fourth: | ||
1151 | Backside Door: | ||
1152 | item: 444496 | ||
1153 | location: 445224 | ||
1154 | The Colorful (White): | ||
1155 | Progress Door: | ||
1156 | item: 444497 | ||
1157 | location: 445225 | ||
1158 | The Colorful (Black): | ||
1159 | Progress Door: | ||
1160 | item: 444499 | ||
1161 | location: 445226 | ||
1162 | The Colorful (Red): | ||
1163 | Progress Door: | ||
1164 | item: 444500 | ||
1165 | location: 445227 | ||
1166 | The Colorful (Yellow): | ||
1167 | Progress Door: | ||
1168 | item: 444501 | ||
1169 | location: 445228 | ||
1170 | The Colorful (Blue): | ||
1171 | Progress Door: | ||
1172 | item: 444502 | ||
1173 | location: 445229 | ||
1174 | The Colorful (Purple): | ||
1175 | Progress Door: | ||
1176 | item: 444503 | ||
1177 | location: 445230 | ||
1178 | The Colorful (Orange): | ||
1179 | Progress Door: | ||
1180 | item: 444504 | ||
1181 | location: 445231 | ||
1182 | The Colorful (Green): | ||
1183 | Progress Door: | ||
1184 | item: 444505 | ||
1185 | location: 445232 | ||
1186 | The Colorful (Brown): | ||
1187 | Progress Door: | ||
1188 | item: 444506 | ||
1189 | location: 445233 | ||
1190 | The Colorful (Gray): | ||
1191 | Progress Door: | ||
1192 | item: 444507 | ||
1193 | location: 445234 | ||
1194 | Welcome Back Area: | ||
1195 | Shortcut to Starting Room: | ||
1196 | item: 444508 | ||
1197 | location: 444653 | ||
1198 | Owl Hallway: | ||
1199 | Shortcut to Hedge Maze: | ||
1200 | item: 444509 | ||
1201 | location: 444656 | ||
1202 | Outside The Initiated: | ||
1203 | Shortcut to Hub Room: | ||
1204 | item: 444510 | ||
1205 | location: 444664 | ||
1206 | Blue Barrier: | ||
1207 | item: 444511 | ||
1208 | Orange Barrier: | ||
1209 | item: 444512 | ||
1210 | Initiated Entrance: | ||
1211 | item: 444513 | ||
1212 | location: 444665 | ||
1213 | Green Barrier: | ||
1214 | item: 444514 | ||
1215 | location: 445235 | ||
1216 | Purple Barrier: | ||
1217 | item: 444515 | ||
1218 | location: 445236 | ||
1219 | Entrance: | ||
1220 | item: 444516 | ||
1221 | location: 445237 | ||
1222 | The Traveled: | ||
1223 | Color Hallways Entrance: | ||
1224 | item: 444517 | ||
1225 | location: 444698 | ||
1226 | Outside The Bold: | ||
1227 | Bold Entrance: | ||
1228 | item: 444518 | ||
1229 | location: 444711 | ||
1230 | Painting Shortcut: | ||
1231 | item: 444519 | ||
1232 | Steady Entrance: | ||
1233 | item: 444520 | ||
1234 | location: 444712 | ||
1235 | Outside The Undeterred: | ||
1236 | Undeterred Entrance: | ||
1237 | item: 444521 | ||
1238 | location: 444744 | ||
1239 | Painting Shortcut: | ||
1240 | item: 444522 | ||
1241 | Green Painting: | ||
1242 | item: 444523 | ||
1243 | Twos: | ||
1244 | item: 444524 | ||
1245 | location: 444752 | ||
1246 | Threes: | ||
1247 | item: 444525 | ||
1248 | location: 445238 | ||
1249 | Number Hunt: | ||
1250 | item: 444526 | ||
1251 | location: 445239 | ||
1252 | Fours: | ||
1253 | item: 444527 | ||
1254 | Fives: | ||
1255 | item: 444528 | ||
1256 | location: 445240 | ||
1257 | Challenge Entrance: | ||
1258 | item: 444529 | ||
1259 | location: 444751 | ||
1260 | Number Hunt: | ||
1261 | Door to Directional Gallery: | ||
1262 | item: 444530 | ||
1263 | Sixes: | ||
1264 | item: 444532 | ||
1265 | location: 445241 | ||
1266 | Sevens: | ||
1267 | item: 444533 | ||
1268 | location: 445242 | ||
1269 | Eights: | ||
1270 | item: 444534 | ||
1271 | location: 445243 | ||
1272 | Nines: | ||
1273 | item: 444535 | ||
1274 | location: 445244 | ||
1275 | Zero Door: | ||
1276 | item: 444536 | ||
1277 | location: 445245 | ||
1278 | Directional Gallery: | ||
1279 | Shortcut to The Undeterred: | ||
1280 | item: 444537 | ||
1281 | location: 445246 | ||
1282 | Yellow Barrier: | ||
1283 | item: 444538 | ||
1284 | Champion's Rest: | ||
1285 | Shortcut to The Steady: | ||
1286 | item: 444539 | ||
1287 | location: 444806 | ||
1288 | The Bearer: | ||
1289 | Shortcut to The Bold: | ||
1290 | item: 444540 | ||
1291 | location: 444820 | ||
1292 | Backside Door: | ||
1293 | item: 444541 | ||
1294 | location: 444821 | ||
1295 | Bearer Side Area: | ||
1296 | Shortcut to Tower: | ||
1297 | item: 444542 | ||
1298 | location: 445247 | ||
1299 | Knight Night (Final): | ||
1300 | Exit: | ||
1301 | item: 444543 | ||
1302 | location: 445248 | ||
1303 | The Artistic (Smiley): | ||
1304 | Door to Panda: | ||
1305 | item: 444544 | ||
1306 | location: 445249 | ||
1307 | The Artistic (Panda): | ||
1308 | Door to Lattice: | ||
1309 | item: 444546 | ||
1310 | location: 445250 | ||
1311 | The Artistic (Lattice): | ||
1312 | Door to Apple: | ||
1313 | item: 444547 | ||
1314 | location: 445251 | ||
1315 | The Artistic (Apple): | ||
1316 | Door to Smiley: | ||
1317 | item: 444548 | ||
1318 | location: 445252 | ||
1319 | The Eyes They See: | ||
1320 | Exit: | ||
1321 | item: 444549 | ||
1322 | location: 444937 | ||
1323 | Outside The Wondrous: | ||
1324 | Wondrous Entrance: | ||
1325 | item: 444550 | ||
1326 | location: 444940 | ||
1327 | The Wondrous (Doorknob): | ||
1328 | Painting Shortcut: | ||
1329 | item: 444551 | ||
1330 | The Wondrous: | ||
1331 | Exit: | ||
1332 | item: 444552 | ||
1333 | location: 444947 | ||
1334 | Hallway Room (2): | ||
1335 | Exit: | ||
1336 | item: 444553 | ||
1337 | location: 445253 | ||
1338 | Hallway Room (3): | ||
1339 | Exit: | ||
1340 | item: 444554 | ||
1341 | location: 445254 | ||
1342 | Hallway Room (4): | ||
1343 | Exit: | ||
1344 | item: 444555 | ||
1345 | location: 445255 | ||
1346 | Outside The Wanderer: | ||
1347 | Wanderer Entrance: | ||
1348 | item: 444556 | ||
1349 | location: 444966 | ||
1350 | Tower Entrance: | ||
1351 | item: 444557 | ||
1352 | Art Gallery: | ||
1353 | Second Floor: | ||
1354 | item: 444558 | ||
1355 | First Floor Puzzles: | ||
1356 | location: 445256 | ||
1357 | Third Floor: | ||
1358 | item: 444559 | ||
1359 | Fourth Floor: | ||
1360 | item: 444560 | ||
1361 | Fifth Floor: | ||
1362 | item: 444561 | ||
1363 | Exit: | ||
1364 | item: 444562 | ||
1365 | location: 444981 | ||
1366 | Art Gallery (Second Floor): | ||
1367 | Puzzles: | ||
1368 | location: 445257 | ||
1369 | Art Gallery (Third Floor): | ||
1370 | Puzzles: | ||
1371 | location: 445258 | ||
1372 | Art Gallery (Fourth Floor): | ||
1373 | Puzzles: | ||
1374 | location: 445259 | ||
1375 | Rhyme Room (Smiley): | ||
1376 | Door to Target: | ||
1377 | item: 444564 | ||
1378 | Door to Target (Location): | ||
1379 | location: 445260 | ||
1380 | Rhyme Room (Cross): | ||
1381 | Exit: | ||
1382 | item: 444565 | ||
1383 | location: 445261 | ||
1384 | Rhyme Room (Circle): | ||
1385 | Door to Smiley: | ||
1386 | item: 444566 | ||
1387 | location: 445262 | ||
1388 | Rhyme Room (Looped Square): | ||
1389 | Door to Circle: | ||
1390 | item: 444567 | ||
1391 | location: 445263 | ||
1392 | Door to Cross: | ||
1393 | item: 444568 | ||
1394 | location: 445264 | ||
1395 | Door to Target: | ||
1396 | item: 444569 | ||
1397 | location: 445265 | ||
1398 | Rhyme Room (Target): | ||
1399 | Door to Cross: | ||
1400 | item: 444570 | ||
1401 | location: 445266 | ||
1402 | Room Room: | ||
1403 | Shortcut to Fifth Floor: | ||
1404 | item: 444571 | ||
1405 | location: 445076 | ||
1406 | Outside The Wise: | ||
1407 | Wise Entrance: | ||
1408 | item: 444572 | ||
1409 | location: 445267 | ||
1410 | Outside The Scientific: | ||
1411 | Scientific Entrance: | ||
1412 | item: 444573 | ||
1413 | location: 445130 | ||
1414 | The Scientific: | ||
1415 | Chemistry Puzzles: | ||
1416 | location: 445268 | ||
1417 | Biology Puzzles: | ||
1418 | location: 445269 | ||
1419 | Physics Puzzles: | ||
1420 | location: 445270 | ||
1421 | Challenge Room: | ||
1422 | Welcome Door: | ||
1423 | item: 444574 | ||
1424 | location: 445176 | ||
1425 | door_groups: | ||
1426 | Rhyme Room Doors: 444418 | ||
1427 | Dead End Area Access: 444420 | ||
1428 | Entrances to The Tenacious: 444427 | ||
1429 | Symmetry Doors: 444429 | ||
1430 | Hedge Maze Doors: 444431 | ||
1431 | Entrance to The Traveled: 444434 | ||
1432 | Crossroads - Tower Entrances: 444441 | ||
1433 | Crossroads Doors: 444444 | ||
1434 | Color Hunt Barriers: 444458 | ||
1435 | Hallway Room Doors: 444460 | ||
1436 | Observant Doors: 444467 | ||
1437 | Fearless Doors: 444469 | ||
1438 | Backside Doors: 444473 | ||
1439 | Orange Tower First Floor - Shortcuts: 444484 | ||
1440 | Champion's Rest - Color Barriers: 444489 | ||
1441 | Welcome Back Doors: 444492 | ||
1442 | Colorful Doors: 444498 | ||
1443 | Directional Gallery Doors: 444531 | ||
1444 | Artistic Doors: 444545 | ||
1445 | progression: | ||
1446 | Progressive Hallway Room: 444461 | ||
1447 | Progressive Fearless: 444470 | ||
1448 | Progressive Orange Tower: 444482 | ||
1449 | Progressive Art Gallery: 444563 | ||
diff --git a/items.py b/items.py new file mode 100644 index 0000000..af24570 --- /dev/null +++ b/items.py | |||
@@ -0,0 +1,106 @@ | |||
1 | from typing import Dict, List, NamedTuple, Optional, TYPE_CHECKING | ||
2 | |||
3 | from BaseClasses import Item, ItemClassification | ||
4 | from .options import ShuffleDoors | ||
5 | from .static_logic import DOORS_BY_ROOM, PROGRESSION_BY_ROOM, PROGRESSIVE_ITEMS, get_door_group_item_id, \ | ||
6 | get_door_item_id, get_progressive_item_id, get_special_item_id | ||
7 | |||
8 | if TYPE_CHECKING: | ||
9 | from . import LingoWorld | ||
10 | |||
11 | |||
12 | class ItemData(NamedTuple): | ||
13 | """ | ||
14 | ItemData for an item in Lingo | ||
15 | """ | ||
16 | code: int | ||
17 | classification: ItemClassification | ||
18 | mode: Optional[str] | ||
19 | door_ids: List[str] | ||
20 | painting_ids: List[str] | ||
21 | |||
22 | def should_include(self, world: "LingoWorld") -> bool: | ||
23 | if self.mode == "colors": | ||
24 | return world.options.shuffle_colors > 0 | ||
25 | elif self.mode == "doors": | ||
26 | return world.options.shuffle_doors != ShuffleDoors.option_none | ||
27 | elif self.mode == "orange tower": | ||
28 | # door shuffle is on and tower isn't progressive | ||
29 | return world.options.shuffle_doors != ShuffleDoors.option_none \ | ||
30 | and not world.options.progressive_orange_tower | ||
31 | elif self.mode == "complex door": | ||
32 | return world.options.shuffle_doors == ShuffleDoors.option_complex | ||
33 | elif self.mode == "door group": | ||
34 | return world.options.shuffle_doors == ShuffleDoors.option_simple | ||
35 | elif self.mode == "special": | ||
36 | return False | ||
37 | else: | ||
38 | return True | ||
39 | |||
40 | |||
41 | class LingoItem(Item): | ||
42 | """ | ||
43 | Item from the game Lingo | ||
44 | """ | ||
45 | game: str = "Lingo" | ||
46 | |||
47 | |||
48 | ALL_ITEM_TABLE: Dict[str, ItemData] = {} | ||
49 | |||
50 | |||
51 | def load_item_data(): | ||
52 | global ALL_ITEM_TABLE | ||
53 | |||
54 | for color in ["Black", "Red", "Blue", "Yellow", "Green", "Orange", "Gray", "Brown", "Purple"]: | ||
55 | ALL_ITEM_TABLE[color] = ItemData(get_special_item_id(color), ItemClassification.progression, | ||
56 | "colors", [], []) | ||
57 | |||
58 | door_groups: Dict[str, List[str]] = {} | ||
59 | for room_name, doors in DOORS_BY_ROOM.items(): | ||
60 | for door_name, door in doors.items(): | ||
61 | if door.skip_item is True or door.event is True: | ||
62 | continue | ||
63 | |||
64 | if door.group is None: | ||
65 | door_mode = "doors" | ||
66 | else: | ||
67 | door_mode = "complex door" | ||
68 | door_groups.setdefault(door.group, []).extend(door.door_ids) | ||
69 | |||
70 | if room_name in PROGRESSION_BY_ROOM and door_name in PROGRESSION_BY_ROOM[room_name]: | ||
71 | if room_name == "Orange Tower": | ||
72 | door_mode = "orange tower" | ||
73 | else: | ||
74 | door_mode = "special" | ||
75 | |||
76 | ALL_ITEM_TABLE[door.item_name] = \ | ||
77 | ItemData(get_door_item_id(room_name, door_name), | ||
78 | ItemClassification.filler if door.junk_item else ItemClassification.progression, door_mode, | ||
79 | door.door_ids, door.painting_ids) | ||
80 | |||
81 | for group, group_door_ids in door_groups.items(): | ||
82 | ALL_ITEM_TABLE[group] = ItemData(get_door_group_item_id(group), | ||
83 | ItemClassification.progression, "door group", group_door_ids, []) | ||
84 | |||
85 | special_items: Dict[str, ItemClassification] = { | ||
86 | ":)": ItemClassification.filler, | ||
87 | "The Feeling of Being Lost": ItemClassification.filler, | ||
88 | "Wanderlust": ItemClassification.filler, | ||
89 | "Empty White Hallways": ItemClassification.filler, | ||
90 | "Slowness Trap": ItemClassification.trap, | ||
91 | "Iceland Trap": ItemClassification.trap, | ||
92 | "Atbash Trap": ItemClassification.trap, | ||
93 | "Puzzle Skip": ItemClassification.useful, | ||
94 | } | ||
95 | |||
96 | for item_name, classification in special_items.items(): | ||
97 | ALL_ITEM_TABLE[item_name] = ItemData(get_special_item_id(item_name), classification, | ||
98 | "special", [], []) | ||
99 | |||
100 | for item_name in PROGRESSIVE_ITEMS: | ||
101 | ALL_ITEM_TABLE[item_name] = ItemData(get_progressive_item_id(item_name), | ||
102 | ItemClassification.progression, "special", [], []) | ||
103 | |||
104 | |||
105 | # Initialize the item data at module scope. | ||
106 | load_item_data() | ||
diff --git a/locations.py b/locations.py new file mode 100644 index 0000000..5903d60 --- /dev/null +++ b/locations.py | |||
@@ -0,0 +1,80 @@ | |||
1 | from enum import Flag, auto | ||
2 | from typing import Dict, List, NamedTuple | ||
3 | |||
4 | from BaseClasses import Location | ||
5 | from .static_logic import DOORS_BY_ROOM, PANELS_BY_ROOM, RoomAndPanel, get_door_location_id, get_panel_location_id | ||
6 | |||
7 | |||
8 | class LocationClassification(Flag): | ||
9 | normal = auto() | ||
10 | reduced = auto() | ||
11 | insanity = auto() | ||
12 | |||
13 | |||
14 | class LocationData(NamedTuple): | ||
15 | """ | ||
16 | LocationData for a location in Lingo | ||
17 | """ | ||
18 | code: int | ||
19 | room: str | ||
20 | panels: List[RoomAndPanel] | ||
21 | classification: LocationClassification | ||
22 | |||
23 | def panel_ids(self): | ||
24 | ids = set() | ||
25 | for panel in self.panels: | ||
26 | effective_room = self.room if panel.room is None else panel.room | ||
27 | panel_data = PANELS_BY_ROOM[effective_room][panel.panel] | ||
28 | ids = ids | set(panel_data.internal_ids) | ||
29 | return ids | ||
30 | |||
31 | |||
32 | class LingoLocation(Location): | ||
33 | """ | ||
34 | Location from the game Lingo | ||
35 | """ | ||
36 | game: str = "Lingo" | ||
37 | |||
38 | |||
39 | ALL_LOCATION_TABLE: Dict[str, LocationData] = {} | ||
40 | |||
41 | |||
42 | def load_location_data(): | ||
43 | global ALL_LOCATION_TABLE | ||
44 | |||
45 | for room_name, panels in PANELS_BY_ROOM.items(): | ||
46 | for panel_name, panel in panels.items(): | ||
47 | location_name = f"{room_name} - {panel_name}" | ||
48 | |||
49 | classification = LocationClassification.insanity | ||
50 | if panel.check: | ||
51 | classification |= LocationClassification.normal | ||
52 | |||
53 | if not panel.exclude_reduce: | ||
54 | classification |= LocationClassification.reduced | ||
55 | |||
56 | ALL_LOCATION_TABLE[location_name] = \ | ||
57 | LocationData(get_panel_location_id(room_name, panel_name), room_name, | ||
58 | [RoomAndPanel(None, panel_name)], classification) | ||
59 | |||
60 | for room_name, doors in DOORS_BY_ROOM.items(): | ||
61 | for door_name, door in doors.items(): | ||
62 | if door.skip_location or door.event or door.panels is None: | ||
63 | continue | ||
64 | |||
65 | location_name = door.location_name | ||
66 | classification = LocationClassification.normal | ||
67 | if door.include_reduce: | ||
68 | classification |= LocationClassification.reduced | ||
69 | |||
70 | if location_name in ALL_LOCATION_TABLE: | ||
71 | new_id = ALL_LOCATION_TABLE[location_name].code | ||
72 | classification |= ALL_LOCATION_TABLE[location_name].classification | ||
73 | else: | ||
74 | new_id = get_door_location_id(room_name, door_name) | ||
75 | |||
76 | ALL_LOCATION_TABLE[location_name] = LocationData(new_id, room_name, door.panels, classification) | ||
77 | |||
78 | |||
79 | # Initialize location data on the module scope. | ||
80 | load_location_data() | ||
diff --git a/options.py b/options.py new file mode 100644 index 0000000..7dc6a13 --- /dev/null +++ b/options.py | |||
@@ -0,0 +1,126 @@ | |||
1 | from dataclasses import dataclass | ||
2 | |||
3 | from Options import Toggle, Choice, DefaultOnToggle, Range, PerGameCommonOptions | ||
4 | |||
5 | |||
6 | class ShuffleDoors(Choice): | ||
7 | """If on, opening doors will require their respective "keys". | ||
8 | In "simple", doors are sorted into logical groups, which are all opened by receiving an item. | ||
9 | In "complex", the items are much more granular, and will usually only open a single door each.""" | ||
10 | display_name = "Shuffle Doors" | ||
11 | option_none = 0 | ||
12 | option_simple = 1 | ||
13 | option_complex = 2 | ||
14 | |||
15 | |||
16 | class ProgressiveOrangeTower(DefaultOnToggle): | ||
17 | """When "Shuffle Doors" is on, this setting governs the manner in which the Orange Tower floors open up. | ||
18 | If off, there is an item for each floor of the tower, and each floor's item is the only one needed to access that floor. | ||
19 | If on, there are six progressive items, which open up the tower from the bottom floor upward. | ||
20 | """ | ||
21 | display_name = "Progressive Orange Tower" | ||
22 | |||
23 | |||
24 | class LocationChecks(Choice): | ||
25 | """On "normal", there will be a location check for each panel set that would ordinarily open a door, as well as for | ||
26 | achievement panels and a small handful of other panels. | ||
27 | On "reduced", many of the locations that are associated with opening doors are removed. | ||
28 | On "insanity", every individual panel in the game is a location check.""" | ||
29 | display_name = "Location Checks" | ||
30 | option_normal = 0 | ||
31 | option_reduced = 1 | ||
32 | option_insanity = 2 | ||
33 | |||
34 | |||
35 | class ShuffleColors(Toggle): | ||
36 | """If on, an item is added to the pool for every puzzle color (besides White). | ||
37 | You will need to unlock the requisite colors in order to be able to solve puzzles of that color.""" | ||
38 | display_name = "Shuffle Colors" | ||
39 | |||
40 | |||
41 | class ShufflePanels(Choice): | ||
42 | """If on, the puzzles on each panel are randomized. | ||
43 | On "rearrange", the puzzles are the same as the ones in the base game, but are placed in different areas.""" | ||
44 | display_name = "Shuffle Panels" | ||
45 | option_none = 0 | ||
46 | option_rearrange = 1 | ||
47 | |||
48 | |||
49 | class ShufflePaintings(Toggle): | ||
50 | """If on, the destination, location, and appearance of the painting warps in the game will be randomized.""" | ||
51 | display_name = "Shuffle Paintings" | ||
52 | |||
53 | |||
54 | class VictoryCondition(Choice): | ||
55 | """Change the victory condition.""" | ||
56 | display_name = "Victory Condition" | ||
57 | option_the_end = 0 | ||
58 | option_the_master = 1 | ||
59 | option_level_2 = 2 | ||
60 | |||
61 | |||
62 | class MasteryAchievements(Range): | ||
63 | """The number of achievements required to unlock THE MASTER. | ||
64 | In the base game, 21 achievements are needed. | ||
65 | If you include The Scientific and The Unchallenged, which are in the base game but are not counted for mastery, 23 would be required. | ||
66 | If you include the custom achievement (The Wanderer), 24 would be required. | ||
67 | """ | ||
68 | display_name = "Mastery Achievements" | ||
69 | range_start = 1 | ||
70 | range_end = 24 | ||
71 | default = 21 | ||
72 | |||
73 | |||
74 | class Level2Requirement(Range): | ||
75 | """The number of panel solves required to unlock LEVEL 2. | ||
76 | In the base game, 223 are needed. | ||
77 | Note that this count includes ANOTHER TRY. | ||
78 | """ | ||
79 | display_name = "Level 2 Requirement" | ||
80 | range_start = 2 | ||
81 | range_end = 800 | ||
82 | default = 223 | ||
83 | |||
84 | |||
85 | class EarlyColorHallways(Toggle): | ||
86 | """When on, a painting warp to the color hallways area will appear in the starting room. | ||
87 | This lets you avoid being trapped in the starting room for long periods of time when door shuffle is on.""" | ||
88 | display_name = "Early Color Hallways" | ||
89 | |||
90 | |||
91 | class TrapPercentage(Range): | ||
92 | """Replaces junk items with traps, at the specified rate.""" | ||
93 | display_name = "Trap Percentage" | ||
94 | range_start = 0 | ||
95 | range_end = 100 | ||
96 | default = 20 | ||
97 | |||
98 | |||
99 | class PuzzleSkipPercentage(Range): | ||
100 | """Replaces junk items with puzzle skips, at the specified rate.""" | ||
101 | display_name = "Puzzle Skip Percentage" | ||
102 | range_start = 0 | ||
103 | range_end = 100 | ||
104 | default = 20 | ||
105 | |||
106 | |||
107 | class DeathLink(Toggle): | ||
108 | """If on: Whenever another player on death link dies, you will be returned to the starting room.""" | ||
109 | display_name = "Death Link" | ||
110 | |||
111 | |||
112 | @dataclass | ||
113 | class LingoOptions(PerGameCommonOptions): | ||
114 | shuffle_doors: ShuffleDoors | ||
115 | progressive_orange_tower: ProgressiveOrangeTower | ||
116 | location_checks: LocationChecks | ||
117 | shuffle_colors: ShuffleColors | ||
118 | shuffle_panels: ShufflePanels | ||
119 | shuffle_paintings: ShufflePaintings | ||
120 | victory_condition: VictoryCondition | ||
121 | mastery_achievements: MasteryAchievements | ||
122 | level_2_requirement: Level2Requirement | ||
123 | early_color_hallways: EarlyColorHallways | ||
124 | trap_percentage: TrapPercentage | ||
125 | puzzle_skip_percentage: PuzzleSkipPercentage | ||
126 | death_link: DeathLink | ||
diff --git a/player_logic.py b/player_logic.py new file mode 100644 index 0000000..217ad91 --- /dev/null +++ b/player_logic.py | |||
@@ -0,0 +1,298 @@ | |||
1 | from typing import Dict, List, NamedTuple, Optional, TYPE_CHECKING | ||
2 | |||
3 | from .items import ALL_ITEM_TABLE | ||
4 | from .locations import ALL_LOCATION_TABLE, LocationClassification | ||
5 | from .options import LocationChecks, ShuffleDoors, VictoryCondition | ||
6 | from .static_logic import DOORS_BY_ROOM, Door, PAINTINGS, PAINTINGS_BY_ROOM, PAINTING_ENTRANCES, PAINTING_EXITS, \ | ||
7 | PANELS_BY_ROOM, PROGRESSION_BY_ROOM, REQUIRED_PAINTING_ROOMS, REQUIRED_PAINTING_WHEN_NO_DOORS_ROOMS, ROOMS, \ | ||
8 | RoomAndPanel | ||
9 | from .testing import LingoTestOptions | ||
10 | |||
11 | if TYPE_CHECKING: | ||
12 | from . import LingoWorld | ||
13 | |||
14 | |||
15 | class PlayerLocation(NamedTuple): | ||
16 | name: str | ||
17 | code: Optional[int] = None | ||
18 | panels: List[RoomAndPanel] = [] | ||
19 | |||
20 | |||
21 | class LingoPlayerLogic: | ||
22 | """ | ||
23 | Defines logic after a player's options have been applied | ||
24 | """ | ||
25 | |||
26 | ITEM_BY_DOOR: Dict[str, Dict[str, str]] | ||
27 | |||
28 | LOCATIONS_BY_ROOM: Dict[str, List[PlayerLocation]] | ||
29 | REAL_LOCATIONS: List[str] | ||
30 | |||
31 | EVENT_LOC_TO_ITEM: Dict[str, str] | ||
32 | REAL_ITEMS: List[str] | ||
33 | |||
34 | VICTORY_CONDITION: str | ||
35 | MASTERY_LOCATION: str | ||
36 | LEVEL_2_LOCATION: str | ||
37 | |||
38 | PAINTING_MAPPING: Dict[str, str] | ||
39 | |||
40 | FORCED_GOOD_ITEM: str | ||
41 | |||
42 | def add_location(self, room: str, loc: PlayerLocation): | ||
43 | self.LOCATIONS_BY_ROOM.setdefault(room, []).append(loc) | ||
44 | |||
45 | def set_door_item(self, room: str, door: str, item: str): | ||
46 | self.ITEM_BY_DOOR.setdefault(room, {})[door] = item | ||
47 | |||
48 | def handle_non_grouped_door(self, room_name: str, door_data: Door, world: "LingoWorld"): | ||
49 | if room_name in PROGRESSION_BY_ROOM and door_data.name in PROGRESSION_BY_ROOM[room_name]: | ||
50 | if room_name == "Orange Tower" and not world.options.progressive_orange_tower: | ||
51 | self.set_door_item(room_name, door_data.name, door_data.item_name) | ||
52 | else: | ||
53 | progressive_item_name = PROGRESSION_BY_ROOM[room_name][door_data.name].item_name | ||
54 | self.set_door_item(room_name, door_data.name, progressive_item_name) | ||
55 | self.REAL_ITEMS.append(progressive_item_name) | ||
56 | else: | ||
57 | self.set_door_item(room_name, door_data.name, door_data.item_name) | ||
58 | |||
59 | def __init__(self, world: "LingoWorld"): | ||
60 | self.ITEM_BY_DOOR = {} | ||
61 | self.LOCATIONS_BY_ROOM = {} | ||
62 | self.REAL_LOCATIONS = [] | ||
63 | self.EVENT_LOC_TO_ITEM = {} | ||
64 | self.REAL_ITEMS = [] | ||
65 | self.VICTORY_CONDITION = "" | ||
66 | self.MASTERY_LOCATION = "" | ||
67 | self.LEVEL_2_LOCATION = "" | ||
68 | self.PAINTING_MAPPING = {} | ||
69 | self.FORCED_GOOD_ITEM = "" | ||
70 | |||
71 | door_shuffle = world.options.shuffle_doors | ||
72 | color_shuffle = world.options.shuffle_colors | ||
73 | painting_shuffle = world.options.shuffle_paintings | ||
74 | location_checks = world.options.location_checks | ||
75 | victory_condition = world.options.victory_condition | ||
76 | early_color_hallways = world.options.early_color_hallways | ||
77 | |||
78 | if location_checks == LocationChecks.option_reduced and door_shuffle != ShuffleDoors.option_none: | ||
79 | raise Exception("You cannot have reduced location checks when door shuffle is on, because there would not " | ||
80 | "be enough locations for all of the door items.") | ||
81 | |||
82 | # Create an event for every room that represents being able to reach that room. | ||
83 | for room_name in ROOMS.keys(): | ||
84 | roomloc_name = f"{room_name} (Reached)" | ||
85 | self.add_location(room_name, PlayerLocation(roomloc_name, None, [])) | ||
86 | self.EVENT_LOC_TO_ITEM[roomloc_name] = roomloc_name | ||
87 | |||
88 | # Create an event for every door, representing whether that door has been opened. Also create event items for | ||
89 | # doors that are event-only. | ||
90 | for room_name, room_data in DOORS_BY_ROOM.items(): | ||
91 | for door_name, door_data in room_data.items(): | ||
92 | if door_shuffle == ShuffleDoors.option_none: | ||
93 | itemloc_name = f"{room_name} - {door_name} (Opened)" | ||
94 | self.add_location(room_name, PlayerLocation(itemloc_name, None, door_data.panels)) | ||
95 | self.EVENT_LOC_TO_ITEM[itemloc_name] = itemloc_name | ||
96 | self.set_door_item(room_name, door_name, itemloc_name) | ||
97 | else: | ||
98 | # This line is duplicated from StaticLingoItems | ||
99 | if door_data.skip_item is False and door_data.event is False: | ||
100 | if door_data.group is not None and door_shuffle == ShuffleDoors.option_simple: | ||
101 | # Grouped doors are handled differently if shuffle doors is on simple. | ||
102 | self.set_door_item(room_name, door_name, door_data.group) | ||
103 | else: | ||
104 | self.handle_non_grouped_door(room_name, door_data, world) | ||
105 | |||
106 | if door_data.event: | ||
107 | self.add_location(room_name, PlayerLocation(door_data.item_name, None, door_data.panels)) | ||
108 | self.EVENT_LOC_TO_ITEM[door_data.item_name] = door_data.item_name + " (Opened)" | ||
109 | self.set_door_item(room_name, door_name, door_data.item_name + " (Opened)") | ||
110 | |||
111 | # Create events for each achievement panel, so that we can determine when THE MASTER is accessible. We also | ||
112 | # create events for each counting panel, so that we can determine when LEVEL 2 is accessible. | ||
113 | for room_name, room_data in PANELS_BY_ROOM.items(): | ||
114 | for panel_name, panel_data in room_data.items(): | ||
115 | if panel_data.achievement: | ||
116 | event_name = room_name + " - " + panel_name + " (Achieved)" | ||
117 | self.add_location(room_name, PlayerLocation(event_name, None, | ||
118 | [RoomAndPanel(room_name, panel_name)])) | ||
119 | self.EVENT_LOC_TO_ITEM[event_name] = "Mastery Achievement" | ||
120 | |||
121 | if not panel_data.non_counting and victory_condition == VictoryCondition.option_level_2: | ||
122 | event_name = room_name + " - " + panel_name + " (Counted)" | ||
123 | self.add_location(room_name, PlayerLocation(event_name, None, | ||
124 | [RoomAndPanel(room_name, panel_name)])) | ||
125 | self.EVENT_LOC_TO_ITEM[event_name] = "Counting Panel Solved" | ||
126 | |||
127 | # Handle the victory condition. Victory conditions other than the chosen one become regular checks, so we need | ||
128 | # to prevent the actual victory condition from becoming a check. | ||
129 | self.MASTERY_LOCATION = "Orange Tower Seventh Floor - THE MASTER" | ||
130 | self.LEVEL_2_LOCATION = "N/A" | ||
131 | |||
132 | if victory_condition == VictoryCondition.option_the_end: | ||
133 | self.VICTORY_CONDITION = "Orange Tower Seventh Floor - THE END" | ||
134 | self.add_location("Orange Tower Seventh Floor", PlayerLocation("The End (Solved)")) | ||
135 | self.EVENT_LOC_TO_ITEM["The End (Solved)"] = "Victory" | ||
136 | elif victory_condition == VictoryCondition.option_the_master: | ||
137 | self.VICTORY_CONDITION = "Orange Tower Seventh Floor - THE MASTER" | ||
138 | self.MASTERY_LOCATION = "Orange Tower Seventh Floor - Mastery Achievements" | ||
139 | |||
140 | self.add_location("Orange Tower Seventh Floor", PlayerLocation(self.MASTERY_LOCATION, None, [])) | ||
141 | self.EVENT_LOC_TO_ITEM[self.MASTERY_LOCATION] = "Victory" | ||
142 | elif victory_condition == VictoryCondition.option_level_2: | ||
143 | self.VICTORY_CONDITION = "Second Room - LEVEL 2" | ||
144 | self.LEVEL_2_LOCATION = "Second Room - Unlock Level 2" | ||
145 | |||
146 | self.add_location("Second Room", PlayerLocation(self.LEVEL_2_LOCATION, None, | ||
147 | [RoomAndPanel("Second Room", "LEVEL 2")])) | ||
148 | self.EVENT_LOC_TO_ITEM[self.LEVEL_2_LOCATION] = "Victory" | ||
149 | |||
150 | # Instantiate all real locations. | ||
151 | location_classification = LocationClassification.normal | ||
152 | if location_checks == LocationChecks.option_reduced: | ||
153 | location_classification = LocationClassification.reduced | ||
154 | elif location_checks == LocationChecks.option_insanity: | ||
155 | location_classification = LocationClassification.insanity | ||
156 | |||
157 | for location_name, location_data in ALL_LOCATION_TABLE.items(): | ||
158 | if location_name != self.VICTORY_CONDITION: | ||
159 | if location_classification not in location_data.classification: | ||
160 | continue | ||
161 | |||
162 | self.add_location(location_data.room, PlayerLocation(location_name, location_data.code, | ||
163 | location_data.panels)) | ||
164 | self.REAL_LOCATIONS.append(location_name) | ||
165 | |||
166 | # Instantiate all real items. | ||
167 | for name, item in ALL_ITEM_TABLE.items(): | ||
168 | if item.should_include(world): | ||
169 | self.REAL_ITEMS.append(name) | ||
170 | |||
171 | # Create the paintings mapping, if painting shuffle is on. | ||
172 | if painting_shuffle: | ||
173 | # Shuffle paintings until we get something workable. | ||
174 | workable_paintings = False | ||
175 | for i in range(0, 20): | ||
176 | workable_paintings = self.randomize_paintings(world) | ||
177 | if workable_paintings: | ||
178 | break | ||
179 | |||
180 | if not workable_paintings: | ||
181 | raise Exception("This Lingo world was unable to generate a workable painting mapping after 20 " | ||
182 | "iterations. This is very unlikely to happen on its own, and probably indicates some " | ||
183 | "kind of logic error.") | ||
184 | |||
185 | if door_shuffle != ShuffleDoors.option_none and location_classification != LocationClassification.insanity \ | ||
186 | and not early_color_hallways and LingoTestOptions.disable_forced_good_item is False: | ||
187 | # If shuffle doors is on, force a useful item onto the HI panel. This may not necessarily get you out of BK, | ||
188 | # but the goal is to allow you to reach at least one more check. The non-painting ones are hardcoded right | ||
189 | # now. We only allow the entrance to the Pilgrim Room if color shuffle is off, because otherwise there are | ||
190 | # no extra checks in there. We only include the entrance to the Rhyme Room when color shuffle is off and | ||
191 | # door shuffle is on simple, because otherwise there are no extra checks in there. | ||
192 | good_item_options: List[str] = ["Starting Room - Back Right Door", "Second Room - Exit Door"] | ||
193 | |||
194 | if not color_shuffle: | ||
195 | good_item_options.append("Pilgrim Room - Sun Painting") | ||
196 | |||
197 | if door_shuffle == ShuffleDoors.option_simple: | ||
198 | good_item_options += ["Welcome Back Doors"] | ||
199 | |||
200 | if not color_shuffle: | ||
201 | good_item_options.append("Rhyme Room Doors") | ||
202 | else: | ||
203 | good_item_options += ["Welcome Back Area - Shortcut to Starting Room"] | ||
204 | |||
205 | for painting_obj in PAINTINGS_BY_ROOM["Starting Room"]: | ||
206 | if not painting_obj.enter_only or painting_obj.required_door is None: | ||
207 | continue | ||
208 | |||
209 | # If painting shuffle is on, we only want to consider paintings that actually go somewhere. | ||
210 | if painting_shuffle and painting_obj.id not in self.PAINTING_MAPPING.keys(): | ||
211 | continue | ||
212 | |||
213 | pdoor = DOORS_BY_ROOM[painting_obj.required_door.room][painting_obj.required_door.door] | ||
214 | good_item_options.append(pdoor.item_name) | ||
215 | |||
216 | # Copied from The Witness -- remove any plandoed items from the possible good items set. | ||
217 | for v in world.multiworld.plando_items[world.player]: | ||
218 | if v.get("from_pool", True): | ||
219 | for item_key in {"item", "items"}: | ||
220 | if item_key in v: | ||
221 | if type(v[item_key]) is str: | ||
222 | if v[item_key] in good_item_options: | ||
223 | good_item_options.remove(v[item_key]) | ||
224 | elif type(v[item_key]) is dict: | ||
225 | for item, weight in v[item_key].items(): | ||
226 | if weight and item in good_item_options: | ||
227 | good_item_options.remove(item) | ||
228 | else: | ||
229 | # Other type of iterable | ||
230 | for item in v[item_key]: | ||
231 | if item in good_item_options: | ||
232 | good_item_options.remove(item) | ||
233 | |||
234 | if len(good_item_options) > 0: | ||
235 | self.FORCED_GOOD_ITEM = world.random.choice(good_item_options) | ||
236 | self.REAL_ITEMS.remove(self.FORCED_GOOD_ITEM) | ||
237 | self.REAL_LOCATIONS.remove("Second Room - Good Luck") | ||
238 | |||
239 | def randomize_paintings(self, world: "LingoWorld") -> bool: | ||
240 | self.PAINTING_MAPPING.clear() | ||
241 | |||
242 | door_shuffle = world.options.shuffle_doors | ||
243 | |||
244 | # Determine the set of exit paintings. All required-exit paintings are included, as are all | ||
245 | # required-when-no-doors paintings if door shuffle is off. We then fill the set with random other paintings. | ||
246 | chosen_exits = [] | ||
247 | if door_shuffle == ShuffleDoors.option_none: | ||
248 | chosen_exits = [painting_id for painting_id, painting in PAINTINGS.items() | ||
249 | if painting.required_when_no_doors] | ||
250 | chosen_exits += [painting_id for painting_id, painting in PAINTINGS.items() | ||
251 | if painting.exit_only and painting.required] | ||
252 | exitable = [painting_id for painting_id, painting in PAINTINGS.items() | ||
253 | if not painting.enter_only and not painting.disable and not painting.required] | ||
254 | chosen_exits += world.random.sample(exitable, PAINTING_EXITS - len(chosen_exits)) | ||
255 | |||
256 | # Determine the set of entrance paintings. | ||
257 | enterable = [painting_id for painting_id, painting in PAINTINGS.items() | ||
258 | if not painting.exit_only and not painting.disable and painting_id not in chosen_exits] | ||
259 | chosen_entrances = world.random.sample(enterable, PAINTING_ENTRANCES) | ||
260 | |||
261 | # Create a mapping from entrances to exits. | ||
262 | for warp_exit in chosen_exits: | ||
263 | warp_enter = world.random.choice(chosen_entrances) | ||
264 | |||
265 | # Check whether this is a warp from a required painting room to another (or the same) required painting | ||
266 | # room. This could cause a cycle that would make certain regions inaccessible. | ||
267 | warp_exit_room = PAINTINGS[warp_exit].room | ||
268 | warp_enter_room = PAINTINGS[warp_enter].room | ||
269 | |||
270 | required_painting_rooms = REQUIRED_PAINTING_ROOMS | ||
271 | if door_shuffle == ShuffleDoors.option_none: | ||
272 | required_painting_rooms += REQUIRED_PAINTING_WHEN_NO_DOORS_ROOMS | ||
273 | |||
274 | if warp_exit_room in required_painting_rooms and warp_enter_room in required_painting_rooms: | ||
275 | # This shuffling is non-workable. Start over. | ||
276 | return False | ||
277 | |||
278 | chosen_entrances.remove(warp_enter) | ||
279 | self.PAINTING_MAPPING[warp_enter] = warp_exit | ||
280 | |||
281 | for warp_enter in chosen_entrances: | ||
282 | warp_exit = world.random.choice(chosen_exits) | ||
283 | self.PAINTING_MAPPING[warp_enter] = warp_exit | ||
284 | |||
285 | # The Eye Wall painting is unique in that it is both double-sided and also enter only (because it moves). | ||
286 | # There is only one eligible double-sided exit painting, which is the vanilla exit for this warp. If the | ||
287 | # exit painting is an entrance in the shuffle, we will disable the Eye Wall painting. Otherwise, Eye Wall | ||
288 | # is forced to point to the vanilla exit. | ||
289 | if "eye_painting_2" not in self.PAINTING_MAPPING.keys(): | ||
290 | self.PAINTING_MAPPING["eye_painting"] = "eye_painting_2" | ||
291 | |||
292 | # Just for sanity's sake, ensure that all required painting rooms are accessed. | ||
293 | for painting_id, painting in PAINTINGS.items(): | ||
294 | if painting_id not in self.PAINTING_MAPPING.values() \ | ||
295 | and (painting.required or (painting.required_when_no_doors and door_shuffle == 0)): | ||
296 | return False | ||
297 | |||
298 | return True | ||
diff --git a/regions.py b/regions.py new file mode 100644 index 0000000..c75cf49 --- /dev/null +++ b/regions.py | |||
@@ -0,0 +1,84 @@ | |||
1 | from typing import Dict, TYPE_CHECKING | ||
2 | |||
3 | from BaseClasses import ItemClassification, Region | ||
4 | from .items import LingoItem | ||
5 | from .locations import LingoLocation | ||
6 | from .player_logic import LingoPlayerLogic | ||
7 | from .rules import lingo_can_use_entrance, lingo_can_use_pilgrimage, make_location_lambda | ||
8 | from .static_logic import ALL_ROOMS, PAINTINGS, Room | ||
9 | |||
10 | if TYPE_CHECKING: | ||
11 | from . import LingoWorld | ||
12 | |||
13 | |||
14 | def create_region(room: Room, world: "LingoWorld", player_logic: LingoPlayerLogic) -> Region: | ||
15 | new_region = Region(room.name, world.player, world.multiworld) | ||
16 | for location in player_logic.LOCATIONS_BY_ROOM.get(room.name, {}): | ||
17 | new_location = LingoLocation(world.player, location.name, location.code, new_region) | ||
18 | new_location.access_rule = make_location_lambda(location, room.name, world, player_logic) | ||
19 | new_region.locations.append(new_location) | ||
20 | if location.name in player_logic.EVENT_LOC_TO_ITEM: | ||
21 | event_name = player_logic.EVENT_LOC_TO_ITEM[location.name] | ||
22 | event_item = LingoItem(event_name, ItemClassification.progression, None, world.player) | ||
23 | new_location.place_locked_item(event_item) | ||
24 | |||
25 | return new_region | ||
26 | |||
27 | |||
28 | def handle_pilgrim_room(regions: Dict[str, Region], world: "LingoWorld", player_logic: LingoPlayerLogic) -> None: | ||
29 | target_region = regions["Pilgrim Antechamber"] | ||
30 | source_region = regions["Outside The Agreeable"] | ||
31 | source_region.connect( | ||
32 | target_region, | ||
33 | "Pilgrimage", | ||
34 | lambda state: lingo_can_use_pilgrimage(state, world.player, player_logic)) | ||
35 | |||
36 | |||
37 | def connect_painting(regions: Dict[str, Region], warp_enter: str, warp_exit: str, world: "LingoWorld", | ||
38 | player_logic: LingoPlayerLogic) -> None: | ||
39 | source_painting = PAINTINGS[warp_enter] | ||
40 | target_painting = PAINTINGS[warp_exit] | ||
41 | |||
42 | target_region = regions[target_painting.room] | ||
43 | source_region = regions[source_painting.room] | ||
44 | source_region.connect( | ||
45 | target_region, | ||
46 | f"{source_painting.room} to {target_painting.room} (Painting)", | ||
47 | lambda state: lingo_can_use_entrance(state, target_painting.room, source_painting.required_door, world.player, | ||
48 | player_logic)) | ||
49 | |||
50 | |||
51 | def create_regions(world: "LingoWorld", player_logic: LingoPlayerLogic) -> None: | ||
52 | regions = { | ||
53 | "Menu": Region("Menu", world.player, world.multiworld) | ||
54 | } | ||
55 | |||
56 | painting_shuffle = world.options.shuffle_paintings | ||
57 | early_color_hallways = world.options.early_color_hallways | ||
58 | |||
59 | # Instantiate all rooms as regions with their locations first. | ||
60 | for room in ALL_ROOMS: | ||
61 | regions[room.name] = create_region(room, world, player_logic) | ||
62 | |||
63 | # Connect all created regions now that they exist. | ||
64 | for room in ALL_ROOMS: | ||
65 | for entrance in room.entrances: | ||
66 | # Don't use the vanilla painting connections if we are shuffling paintings. | ||
67 | if entrance.painting and painting_shuffle: | ||
68 | continue | ||
69 | |||
70 | regions[entrance.room].connect( | ||
71 | regions[room.name], | ||
72 | f"{entrance.room} to {room.name}", | ||
73 | lambda state, r=room, e=entrance: lingo_can_use_entrance(state, r.name, e.door, world.player, player_logic)) | ||
74 | |||
75 | handle_pilgrim_room(regions, world, player_logic) | ||
76 | |||
77 | if early_color_hallways: | ||
78 | regions["Starting Room"].connect(regions["Outside The Undeterred"], "Early Color Hallways") | ||
79 | |||
80 | if painting_shuffle: | ||
81 | for warp_enter, warp_exit in player_logic.PAINTING_MAPPING.items(): | ||
82 | connect_painting(regions, warp_enter, warp_exit, world, player_logic) | ||
83 | |||
84 | world.multiworld.regions += regions.values() | ||
diff --git a/rules.py b/rules.py new file mode 100644 index 0000000..90c889b --- /dev/null +++ b/rules.py | |||
@@ -0,0 +1,104 @@ | |||
1 | from typing import TYPE_CHECKING | ||
2 | |||
3 | from BaseClasses import CollectionState | ||
4 | from .options import VictoryCondition | ||
5 | from .player_logic import LingoPlayerLogic, PlayerLocation | ||
6 | from .static_logic import PANELS_BY_ROOM, PROGRESSION_BY_ROOM, PROGRESSIVE_ITEMS, RoomAndDoor | ||
7 | |||
8 | if TYPE_CHECKING: | ||
9 | from . import LingoWorld | ||
10 | |||
11 | |||
12 | def lingo_can_use_entrance(state: CollectionState, room: str, door: RoomAndDoor, player: int, | ||
13 | player_logic: LingoPlayerLogic): | ||
14 | if door is None: | ||
15 | return True | ||
16 | |||
17 | return _lingo_can_open_door(state, room, room if door.room is None else door.room, door.door, player, player_logic) | ||
18 | |||
19 | |||
20 | def lingo_can_use_pilgrimage(state: CollectionState, player: int, player_logic: LingoPlayerLogic): | ||
21 | fake_pilgrimage = [ | ||
22 | ["Second Room", "Exit Door"], ["Crossroads", "Tower Entrance"], | ||
23 | ["Orange Tower Fourth Floor", "Hot Crusts Door"], ["Outside The Initiated", "Shortcut to Hub Room"], | ||
24 | ["Orange Tower First Floor", "Shortcut to Hub Room"], ["Directional Gallery", "Shortcut to The Undeterred"], | ||
25 | ["Orange Tower First Floor", "Salt Pepper Door"], ["Hub Room", "Crossroads Entrance"], | ||
26 | ["Champion's Rest", "Shortcut to The Steady"], ["The Bearer", "Shortcut to The Bold"], | ||
27 | ["Art Gallery", "Exit"], ["The Tenacious", "Shortcut to Hub Room"], | ||
28 | ["Outside The Agreeable", "Tenacious Entrance"] | ||
29 | ] | ||
30 | for entrance in fake_pilgrimage: | ||
31 | if not state.has(player_logic.ITEM_BY_DOOR[entrance[0]][entrance[1]], player): | ||
32 | return False | ||
33 | |||
34 | return True | ||
35 | |||
36 | |||
37 | def lingo_can_use_location(state: CollectionState, location: PlayerLocation, room_name: str, world: "LingoWorld", | ||
38 | player_logic: LingoPlayerLogic): | ||
39 | for panel in location.panels: | ||
40 | panel_room = room_name if panel.room is None else panel.room | ||
41 | if not _lingo_can_solve_panel(state, room_name, panel_room, panel.panel, world, player_logic): | ||
42 | return False | ||
43 | |||
44 | return True | ||
45 | |||
46 | |||
47 | def lingo_can_use_mastery_location(state: CollectionState, world: "LingoWorld"): | ||
48 | return state.has("Mastery Achievement", world.player, world.options.mastery_achievements.value) | ||
49 | |||
50 | |||
51 | def _lingo_can_open_door(state: CollectionState, start_room: str, room: str, door: str, player: int, | ||
52 | player_logic: LingoPlayerLogic): | ||
53 | """ | ||
54 | Determines whether a door can be opened | ||
55 | """ | ||
56 | item_name = player_logic.ITEM_BY_DOOR[room][door] | ||
57 | if item_name in PROGRESSIVE_ITEMS: | ||
58 | progression = PROGRESSION_BY_ROOM[room][door] | ||
59 | return state.has(item_name, player, progression.index) | ||
60 | |||
61 | return state.has(item_name, player) | ||
62 | |||
63 | |||
64 | def _lingo_can_solve_panel(state: CollectionState, start_room: str, room: str, panel: str, world: "LingoWorld", | ||
65 | player_logic: LingoPlayerLogic): | ||
66 | """ | ||
67 | Determines whether a panel can be solved | ||
68 | """ | ||
69 | if start_room != room and not state.has(f"{room} (Reached)", world.player): | ||
70 | return False | ||
71 | |||
72 | if room == "Second Room" and panel == "ANOTHER TRY" \ | ||
73 | and world.options.victory_condition == VictoryCondition.option_level_2 \ | ||
74 | and not state.has("Counting Panel Solved", world.player, world.options.level_2_requirement.value - 1): | ||
75 | return False | ||
76 | |||
77 | panel_object = PANELS_BY_ROOM[room][panel] | ||
78 | for req_room in panel_object.required_rooms: | ||
79 | if not state.has(f"{req_room} (Reached)", world.player): | ||
80 | return False | ||
81 | |||
82 | for req_door in panel_object.required_doors: | ||
83 | if not _lingo_can_open_door(state, start_room, room if req_door.room is None else req_door.room, | ||
84 | req_door.door, world.player, player_logic): | ||
85 | return False | ||
86 | |||
87 | for req_panel in panel_object.required_panels: | ||
88 | if not _lingo_can_solve_panel(state, start_room, room if req_panel.room is None else req_panel.room, | ||
89 | req_panel.panel, world, player_logic): | ||
90 | return False | ||
91 | |||
92 | if len(panel_object.colors) > 0 and world.options.shuffle_colors: | ||
93 | for color in panel_object.colors: | ||
94 | if not state.has(color.capitalize(), world.player): | ||
95 | return False | ||
96 | |||
97 | return True | ||
98 | |||
99 | |||
100 | def make_location_lambda(location: PlayerLocation, room_name: str, world: "LingoWorld", player_logic: LingoPlayerLogic): | ||
101 | if location.name == player_logic.MASTERY_LOCATION: | ||
102 | return lambda state: lingo_can_use_mastery_location(state, world) | ||
103 | |||
104 | return lambda state: lingo_can_use_location(state, location, room_name, world, player_logic) | ||
diff --git a/static_logic.py b/static_logic.py new file mode 100644 index 0000000..d122169 --- /dev/null +++ b/static_logic.py | |||
@@ -0,0 +1,544 @@ | |||
1 | from typing import Dict, List, NamedTuple, Optional, Set | ||
2 | |||
3 | import yaml | ||
4 | |||
5 | |||
6 | class RoomAndDoor(NamedTuple): | ||
7 | room: Optional[str] | ||
8 | door: str | ||
9 | |||
10 | |||
11 | class RoomAndPanel(NamedTuple): | ||
12 | room: Optional[str] | ||
13 | panel: str | ||
14 | |||
15 | |||
16 | class RoomEntrance(NamedTuple): | ||
17 | room: str # source room | ||
18 | door: Optional[RoomAndDoor] | ||
19 | painting: bool | ||
20 | |||
21 | |||
22 | class Room(NamedTuple): | ||
23 | name: str | ||
24 | entrances: List[RoomEntrance] | ||
25 | |||
26 | |||
27 | class Door(NamedTuple): | ||
28 | name: str | ||
29 | item_name: str | ||
30 | location_name: Optional[str] | ||
31 | panels: Optional[List[RoomAndPanel]] | ||
32 | skip_location: bool | ||
33 | skip_item: bool | ||
34 | door_ids: List[str] | ||
35 | painting_ids: List[str] | ||
36 | event: bool | ||
37 | group: Optional[str] | ||
38 | include_reduce: bool | ||
39 | junk_item: bool | ||
40 | |||
41 | |||
42 | class Panel(NamedTuple): | ||
43 | required_rooms: List[str] | ||
44 | required_doors: List[RoomAndDoor] | ||
45 | required_panels: List[RoomAndPanel] | ||
46 | colors: List[str] | ||
47 | check: bool | ||
48 | event: bool | ||
49 | internal_ids: List[str] | ||
50 | exclude_reduce: bool | ||
51 | achievement: bool | ||
52 | non_counting: bool | ||
53 | |||
54 | |||
55 | class Painting(NamedTuple): | ||
56 | id: str | ||
57 | room: str | ||
58 | enter_only: bool | ||
59 | exit_only: bool | ||
60 | orientation: str | ||
61 | required: bool | ||
62 | required_when_no_doors: bool | ||
63 | required_door: Optional[RoomAndDoor] | ||
64 | disable: bool | ||
65 | move: bool | ||
66 | |||
67 | |||
68 | class Progression(NamedTuple): | ||
69 | item_name: str | ||
70 | index: int | ||
71 | |||
72 | |||
73 | ROOMS: Dict[str, Room] = {} | ||
74 | PANELS: Dict[str, Panel] = {} | ||
75 | DOORS: Dict[str, Door] = {} | ||
76 | PAINTINGS: Dict[str, Painting] = {} | ||
77 | |||
78 | ALL_ROOMS: List[Room] = [] | ||
79 | DOORS_BY_ROOM: Dict[str, Dict[str, Door]] = {} | ||
80 | PANELS_BY_ROOM: Dict[str, Dict[str, Panel]] = {} | ||
81 | PAINTINGS_BY_ROOM: Dict[str, List[Painting]] = {} | ||
82 | |||
83 | PROGRESSIVE_ITEMS: List[str] = [] | ||
84 | PROGRESSION_BY_ROOM: Dict[str, Dict[str, Progression]] = {} | ||
85 | |||
86 | PAINTING_ENTRANCES: int = 0 | ||
87 | PAINTING_EXIT_ROOMS: Set[str] = set() | ||
88 | PAINTING_EXITS: int = 0 | ||
89 | REQUIRED_PAINTING_ROOMS: List[str] = [] | ||
90 | REQUIRED_PAINTING_WHEN_NO_DOORS_ROOMS: List[str] = [] | ||
91 | |||
92 | SPECIAL_ITEM_IDS: Dict[str, int] = {} | ||
93 | PANEL_LOCATION_IDS: Dict[str, Dict[str, int]] = {} | ||
94 | DOOR_LOCATION_IDS: Dict[str, Dict[str, int]] = {} | ||
95 | DOOR_ITEM_IDS: Dict[str, Dict[str, int]] = {} | ||
96 | DOOR_GROUP_ITEM_IDS: Dict[str, int] = {} | ||
97 | PROGRESSIVE_ITEM_IDS: Dict[str, int] = {} | ||
98 | |||
99 | |||
100 | def load_static_data(): | ||
101 | global PAINTING_EXITS, SPECIAL_ITEM_IDS, PANEL_LOCATION_IDS, DOOR_LOCATION_IDS, DOOR_ITEM_IDS, \ | ||
102 | DOOR_GROUP_ITEM_IDS, PROGRESSIVE_ITEM_IDS | ||
103 | |||
104 | try: | ||
105 | from importlib.resources import files | ||
106 | except ImportError: | ||
107 | from importlib_resources import files | ||
108 | |||
109 | # Load in all item and location IDs. These are broken up into groups based on the type of item/location. | ||
110 | with files("worlds.lingo").joinpath("ids.yaml").open() as file: | ||
111 | config = yaml.load(file, Loader=yaml.Loader) | ||
112 | |||
113 | if "special_items" in config: | ||
114 | for item_name, item_id in config["special_items"].items(): | ||
115 | SPECIAL_ITEM_IDS[item_name] = item_id | ||
116 | |||
117 | if "panels" in config: | ||
118 | for room_name in config["panels"].keys(): | ||
119 | PANEL_LOCATION_IDS[room_name] = {} | ||
120 | |||
121 | for panel_name, location_id in config["panels"][room_name].items(): | ||
122 | PANEL_LOCATION_IDS[room_name][panel_name] = location_id | ||
123 | |||
124 | if "doors" in config: | ||
125 | for room_name in config["doors"].keys(): | ||
126 | DOOR_LOCATION_IDS[room_name] = {} | ||
127 | DOOR_ITEM_IDS[room_name] = {} | ||
128 | |||
129 | for door_name, door_data in config["doors"][room_name].items(): | ||
130 | if "location" in door_data: | ||
131 | DOOR_LOCATION_IDS[room_name][door_name] = door_data["location"] | ||
132 | |||
133 | if "item" in door_data: | ||
134 | DOOR_ITEM_IDS[room_name][door_name] = door_data["item"] | ||
135 | |||
136 | if "door_groups" in config: | ||
137 | for item_name, item_id in config["door_groups"].items(): | ||
138 | DOOR_GROUP_ITEM_IDS[item_name] = item_id | ||
139 | |||
140 | if "progression" in config: | ||
141 | for item_name, item_id in config["progression"].items(): | ||
142 | PROGRESSIVE_ITEM_IDS[item_name] = item_id | ||
143 | |||
144 | # Process the main world file. | ||
145 | with files("worlds.lingo").joinpath("LL1.yaml").open() as file: | ||
146 | config = yaml.load(file, Loader=yaml.Loader) | ||
147 | |||
148 | for room_name, room_data in config.items(): | ||
149 | process_room(room_name, room_data) | ||
150 | |||
151 | PAINTING_EXITS = len(PAINTING_EXIT_ROOMS) | ||
152 | |||
153 | |||
154 | def get_special_item_id(name: str): | ||
155 | if name not in SPECIAL_ITEM_IDS: | ||
156 | raise Exception(f"Item ID for special item {name} not found in ids.yaml.") | ||
157 | |||
158 | return SPECIAL_ITEM_IDS[name] | ||
159 | |||
160 | |||
161 | def get_panel_location_id(room: str, name: str): | ||
162 | if room not in PANEL_LOCATION_IDS or name not in PANEL_LOCATION_IDS[room]: | ||
163 | raise Exception(f"Location ID for panel {room} - {name} not found in ids.yaml.") | ||
164 | |||
165 | return PANEL_LOCATION_IDS[room][name] | ||
166 | |||
167 | |||
168 | def get_door_location_id(room: str, name: str): | ||
169 | if room not in DOOR_LOCATION_IDS or name not in DOOR_LOCATION_IDS[room]: | ||
170 | raise Exception(f"Location ID for door {room} - {name} not found in ids.yaml.") | ||
171 | |||
172 | return DOOR_LOCATION_IDS[room][name] | ||
173 | |||
174 | |||
175 | def get_door_item_id(room: str, name: str): | ||
176 | if room not in DOOR_ITEM_IDS or name not in DOOR_ITEM_IDS[room]: | ||
177 | raise Exception(f"Item ID for door {room} - {name} not found in ids.yaml.") | ||
178 | |||
179 | return DOOR_ITEM_IDS[room][name] | ||
180 | |||
181 | |||
182 | def get_door_group_item_id(name: str): | ||
183 | if name not in DOOR_GROUP_ITEM_IDS: | ||
184 | raise Exception(f"Item ID for door group {name} not found in ids.yaml.") | ||
185 | |||
186 | return DOOR_GROUP_ITEM_IDS[name] | ||
187 | |||
188 | |||
189 | def get_progressive_item_id(name: str): | ||
190 | if name not in PROGRESSIVE_ITEM_IDS: | ||
191 | raise Exception(f"Item ID for progressive item {name} not found in ids.yaml.") | ||
192 | |||
193 | return PROGRESSIVE_ITEM_IDS[name] | ||
194 | |||
195 | |||
196 | def process_entrance(source_room, doors, room_obj): | ||
197 | global PAINTING_ENTRANCES, PAINTING_EXIT_ROOMS | ||
198 | |||
199 | # If the value of an entrance is just True, that means that the entrance is always accessible. | ||
200 | if doors is True: | ||
201 | room_obj.entrances.append(RoomEntrance(source_room, None, False)) | ||
202 | elif isinstance(doors, dict): | ||
203 | # If the value of an entrance is a dictionary, that means the entrance requires a door to be accessible, is a | ||
204 | # painting-based entrance, or both. | ||
205 | if "painting" in doors and "door" not in doors: | ||
206 | PAINTING_EXIT_ROOMS.add(room_obj.name) | ||
207 | PAINTING_ENTRANCES += 1 | ||
208 | |||
209 | room_obj.entrances.append(RoomEntrance(source_room, None, True)) | ||
210 | else: | ||
211 | if "painting" in doors and doors["painting"]: | ||
212 | PAINTING_EXIT_ROOMS.add(room_obj.name) | ||
213 | PAINTING_ENTRANCES += 1 | ||
214 | |||
215 | room_obj.entrances.append(RoomEntrance(source_room, RoomAndDoor( | ||
216 | doors["room"] if "room" in doors else None, | ||
217 | doors["door"] | ||
218 | ), doors["painting"] if "painting" in doors else False)) | ||
219 | else: | ||
220 | # If the value of an entrance is a list, then there are multiple possible doors that can give access to the | ||
221 | # entrance. | ||
222 | for door in doors: | ||
223 | if "painting" in door and door["painting"]: | ||
224 | PAINTING_EXIT_ROOMS.add(room_obj.name) | ||
225 | PAINTING_ENTRANCES += 1 | ||
226 | |||
227 | room_obj.entrances.append(RoomEntrance(source_room, RoomAndDoor( | ||
228 | door["room"] if "room" in door else None, | ||
229 | door["door"] | ||
230 | ), door["painting"] if "painting" in door else False)) | ||
231 | |||
232 | |||
233 | def process_panel(room_name, panel_name, panel_data): | ||
234 | global PANELS, PANELS_BY_ROOM | ||
235 | |||
236 | full_name = f"{room_name} - {panel_name}" | ||
237 | |||
238 | # required_room can either be a single room or a list of rooms. | ||
239 | if "required_room" in panel_data: | ||
240 | if isinstance(panel_data["required_room"], list): | ||
241 | required_rooms = panel_data["required_room"] | ||
242 | else: | ||
243 | required_rooms = [panel_data["required_room"]] | ||
244 | else: | ||
245 | required_rooms = [] | ||
246 | |||
247 | # required_door can either be a single door or a list of doors. For convenience, the room key for each door does not | ||
248 | # need to be specified if the door is in this room. | ||
249 | required_doors = list() | ||
250 | if "required_door" in panel_data: | ||
251 | if isinstance(panel_data["required_door"], dict): | ||
252 | door = panel_data["required_door"] | ||
253 | required_doors.append(RoomAndDoor( | ||
254 | door["room"] if "room" in door else None, | ||
255 | door["door"] | ||
256 | )) | ||
257 | else: | ||
258 | for door in panel_data["required_door"]: | ||
259 | required_doors.append(RoomAndDoor( | ||
260 | door["room"] if "room" in door else None, | ||
261 | door["door"] | ||
262 | )) | ||
263 | |||
264 | # required_panel can either be a single panel or a list of panels. For convenience, the room key for each panel does | ||
265 | # not need to be specified if the panel is in this room. | ||
266 | required_panels = list() | ||
267 | if "required_panel" in panel_data: | ||
268 | if isinstance(panel_data["required_panel"], dict): | ||
269 | other_panel = panel_data["required_panel"] | ||
270 | required_panels.append(RoomAndPanel( | ||
271 | other_panel["room"] if "room" in other_panel else None, | ||
272 | other_panel["panel"] | ||
273 | )) | ||
274 | else: | ||
275 | for other_panel in panel_data["required_panel"]: | ||
276 | required_panels.append(RoomAndPanel( | ||
277 | other_panel["room"] if "room" in other_panel else None, | ||
278 | other_panel["panel"] | ||
279 | )) | ||
280 | |||
281 | # colors can either be a single color or a list of colors. | ||
282 | if "colors" in panel_data: | ||
283 | if isinstance(panel_data["colors"], list): | ||
284 | colors = panel_data["colors"] | ||
285 | else: | ||
286 | colors = [panel_data["colors"]] | ||
287 | else: | ||
288 | colors = [] | ||
289 | |||
290 | if "check" in panel_data: | ||
291 | check = panel_data["check"] | ||
292 | else: | ||
293 | check = False | ||
294 | |||
295 | if "event" in panel_data: | ||
296 | event = panel_data["event"] | ||
297 | else: | ||
298 | event = False | ||
299 | |||
300 | if "achievement" in panel_data: | ||
301 | achievement = True | ||
302 | else: | ||
303 | achievement = False | ||
304 | |||
305 | if "exclude_reduce" in panel_data: | ||
306 | exclude_reduce = panel_data["exclude_reduce"] | ||
307 | else: | ||
308 | exclude_reduce = False | ||
309 | |||
310 | if "non_counting" in panel_data: | ||
311 | non_counting = panel_data["non_counting"] | ||
312 | else: | ||
313 | non_counting = False | ||
314 | |||
315 | if "id" in panel_data: | ||
316 | if isinstance(panel_data["id"], list): | ||
317 | internal_ids = panel_data["id"] | ||
318 | else: | ||
319 | internal_ids = [panel_data["id"]] | ||
320 | else: | ||
321 | internal_ids = [] | ||
322 | |||
323 | panel_obj = Panel(required_rooms, required_doors, required_panels, colors, check, event, internal_ids, | ||
324 | exclude_reduce, achievement, non_counting) | ||
325 | PANELS[full_name] = panel_obj | ||
326 | PANELS_BY_ROOM[room_name][panel_name] = panel_obj | ||
327 | |||
328 | |||
329 | def process_door(room_name, door_name, door_data): | ||
330 | global DOORS, DOORS_BY_ROOM | ||
331 | |||
332 | # The item name associated with a door can be explicitly specified in the configuration. If it is not, it is | ||
333 | # generated from the room and door name. | ||
334 | if "item_name" in door_data: | ||
335 | item_name = door_data["item_name"] | ||
336 | else: | ||
337 | item_name = f"{room_name} - {door_name}" | ||
338 | |||
339 | if "skip_location" in door_data: | ||
340 | skip_location = door_data["skip_location"] | ||
341 | else: | ||
342 | skip_location = False | ||
343 | |||
344 | if "skip_item" in door_data: | ||
345 | skip_item = door_data["skip_item"] | ||
346 | else: | ||
347 | skip_item = False | ||
348 | |||
349 | if "event" in door_data: | ||
350 | event = door_data["event"] | ||
351 | else: | ||
352 | event = False | ||
353 | |||
354 | if "include_reduce" in door_data: | ||
355 | include_reduce = door_data["include_reduce"] | ||
356 | else: | ||
357 | include_reduce = False | ||
358 | |||
359 | if "junk_item" in door_data: | ||
360 | junk_item = door_data["junk_item"] | ||
361 | else: | ||
362 | junk_item = False | ||
363 | |||
364 | if "group" in door_data: | ||
365 | group = door_data["group"] | ||
366 | else: | ||
367 | group = None | ||
368 | |||
369 | # panels is a list of panels. Each panel can either be a simple string (the name of a panel in the current room) or | ||
370 | # a dictionary specifying a panel in a different room. | ||
371 | if "panels" in door_data: | ||
372 | panels = list() | ||
373 | for panel in door_data["panels"]: | ||
374 | if isinstance(panel, dict): | ||
375 | panels.append(RoomAndPanel(panel["room"], panel["panel"])) | ||
376 | else: | ||
377 | panels.append(RoomAndPanel(None, panel)) | ||
378 | else: | ||
379 | skip_location = True | ||
380 | panels = None | ||
381 | |||
382 | # The location name associated with a door can be explicitly specified in the configuration. If it is not, then the | ||
383 | # name is generated using a combination of all of the panels that would ordinarily open the door. This can get quite | ||
384 | # messy if there are a lot of panels, especially if panels from multiple rooms are involved, so in these cases it | ||
385 | # would be better to specify a name. | ||
386 | if "location_name" in door_data: | ||
387 | location_name = door_data["location_name"] | ||
388 | elif skip_location is False: | ||
389 | panel_per_room = dict() | ||
390 | for panel in panels: | ||
391 | panel_room_name = room_name if panel.room is None else panel.room | ||
392 | panel_per_room.setdefault(panel_room_name, []).append(panel.panel) | ||
393 | |||
394 | room_strs = list() | ||
395 | for door_room_str, door_panels_str in panel_per_room.items(): | ||
396 | room_strs.append(door_room_str + " - " + ", ".join(door_panels_str)) | ||
397 | |||
398 | location_name = " and ".join(room_strs) | ||
399 | else: | ||
400 | location_name = None | ||
401 | |||
402 | # The id field can be a single item, or a list of door IDs, in the event that the item for this logical door should | ||
403 | # open more than one actual in-game door. | ||
404 | if "id" in door_data: | ||
405 | if isinstance(door_data["id"], list): | ||
406 | door_ids = door_data["id"] | ||
407 | else: | ||
408 | door_ids = [door_data["id"]] | ||
409 | else: | ||
410 | door_ids = [] | ||
411 | |||
412 | # The painting_id field can be a single item, or a list of painting IDs, in the event that the item for this logical | ||
413 | # door should move more than one actual in-game painting. | ||
414 | if "painting_id" in door_data: | ||
415 | if isinstance(door_data["painting_id"], list): | ||
416 | painting_ids = door_data["painting_id"] | ||
417 | else: | ||
418 | painting_ids = [door_data["painting_id"]] | ||
419 | else: | ||
420 | painting_ids = [] | ||
421 | |||
422 | door_obj = Door(door_name, item_name, location_name, panels, skip_location, skip_item, door_ids, | ||
423 | painting_ids, event, group, include_reduce, junk_item) | ||
424 | |||
425 | DOORS[door_obj.item_name] = door_obj | ||
426 | DOORS_BY_ROOM[room_name][door_name] = door_obj | ||
427 | |||
428 | |||
429 | def process_painting(room_name, painting_data): | ||
430 | global PAINTINGS, PAINTINGS_BY_ROOM, REQUIRED_PAINTING_ROOMS, REQUIRED_PAINTING_WHEN_NO_DOORS_ROOMS | ||
431 | |||
432 | # Read in information about this painting and store it in an object. | ||
433 | painting_id = painting_data["id"] | ||
434 | |||
435 | if "orientation" in painting_data: | ||
436 | orientation = painting_data["orientation"] | ||
437 | else: | ||
438 | orientation = "" | ||
439 | |||
440 | if "disable" in painting_data: | ||
441 | disable_painting = painting_data["disable"] | ||
442 | else: | ||
443 | disable_painting = False | ||
444 | |||
445 | if "required" in painting_data: | ||
446 | required_painting = painting_data["required"] | ||
447 | if required_painting: | ||
448 | REQUIRED_PAINTING_ROOMS.append(room_name) | ||
449 | else: | ||
450 | required_painting = False | ||
451 | |||
452 | if "move" in painting_data: | ||
453 | move_painting = painting_data["move"] | ||
454 | else: | ||
455 | move_painting = False | ||
456 | |||
457 | if "required_when_no_doors" in painting_data: | ||
458 | rwnd = painting_data["required_when_no_doors"] | ||
459 | if rwnd: | ||
460 | REQUIRED_PAINTING_WHEN_NO_DOORS_ROOMS.append(room_name) | ||
461 | else: | ||
462 | rwnd = False | ||
463 | |||
464 | if "exit_only" in painting_data: | ||
465 | exit_only = painting_data["exit_only"] | ||
466 | else: | ||
467 | exit_only = False | ||
468 | |||
469 | if "enter_only" in painting_data: | ||
470 | enter_only = painting_data["enter_only"] | ||
471 | else: | ||
472 | enter_only = False | ||
473 | |||
474 | required_door = None | ||
475 | if "required_door" in painting_data: | ||
476 | door = painting_data["required_door"] | ||
477 | required_door = RoomAndDoor( | ||
478 | door["room"] if "room" in door else room_name, | ||
479 | door["door"] | ||
480 | ) | ||
481 | |||
482 | painting_obj = Painting(painting_id, room_name, enter_only, exit_only, orientation, | ||
483 | required_painting, rwnd, required_door, disable_painting, move_painting) | ||
484 | PAINTINGS[painting_id] = painting_obj | ||
485 | PAINTINGS_BY_ROOM[room_name].append(painting_obj) | ||
486 | |||
487 | |||
488 | def process_progression(room_name, progression_name, progression_doors): | ||
489 | global PROGRESSIVE_ITEMS, PROGRESSION_BY_ROOM | ||
490 | |||
491 | # Progressive items are configured as a list of doors. | ||
492 | PROGRESSIVE_ITEMS.append(progression_name) | ||
493 | |||
494 | progression_index = 1 | ||
495 | for door in progression_doors: | ||
496 | if isinstance(door, Dict): | ||
497 | door_room = door["room"] | ||
498 | door_door = door["door"] | ||
499 | else: | ||
500 | door_room = room_name | ||
501 | door_door = door | ||
502 | |||
503 | room_progressions = PROGRESSION_BY_ROOM.setdefault(door_room, {}) | ||
504 | room_progressions[door_door] = Progression(progression_name, progression_index) | ||
505 | progression_index += 1 | ||
506 | |||
507 | |||
508 | def process_room(room_name, room_data): | ||
509 | global ROOMS, ALL_ROOMS | ||
510 | |||
511 | room_obj = Room(room_name, []) | ||
512 | |||
513 | if "entrances" in room_data: | ||
514 | for source_room, doors in room_data["entrances"].items(): | ||
515 | process_entrance(source_room, doors, room_obj) | ||
516 | |||
517 | if "panels" in room_data: | ||
518 | PANELS_BY_ROOM[room_name] = dict() | ||
519 | |||
520 | for panel_name, panel_data in room_data["panels"].items(): | ||
521 | process_panel(room_name, panel_name, panel_data) | ||
522 | |||
523 | if "doors" in room_data: | ||
524 | DOORS_BY_ROOM[room_name] = dict() | ||
525 | |||
526 | for door_name, door_data in room_data["doors"].items(): | ||
527 | process_door(room_name, door_name, door_data) | ||
528 | |||
529 | if "paintings" in room_data: | ||
530 | PAINTINGS_BY_ROOM[room_name] = [] | ||
531 | |||
532 | for painting_data in room_data["paintings"]: | ||
533 | process_painting(room_name, painting_data) | ||
534 | |||
535 | if "progression" in room_data: | ||
536 | for progression_name, progression_doors in room_data["progression"].items(): | ||
537 | process_progression(room_name, progression_name, progression_doors) | ||
538 | |||
539 | ROOMS[room_name] = room_obj | ||
540 | ALL_ROOMS.append(room_obj) | ||
541 | |||
542 | |||
543 | # Initialize the static data at module scope. | ||
544 | load_static_data() | ||
diff --git a/test/TestDoors.py b/test/TestDoors.py new file mode 100644 index 0000000..5dc989a --- /dev/null +++ b/test/TestDoors.py | |||
@@ -0,0 +1,89 @@ | |||
1 | from . import LingoTestBase | ||
2 | |||
3 | |||
4 | class TestRequiredRoomLogic(LingoTestBase): | ||
5 | options = { | ||
6 | "shuffle_doors": "complex" | ||
7 | } | ||
8 | |||
9 | def test_pilgrim_first(self) -> None: | ||
10 | self.assertFalse(self.multiworld.state.can_reach("The Seeker", "Region", self.player)) | ||
11 | self.assertFalse(self.multiworld.state.can_reach("Pilgrim Antechamber", "Region", self.player)) | ||
12 | self.assertFalse(self.multiworld.state.can_reach("Pilgrim Room", "Region", self.player)) | ||
13 | self.assertFalse(self.can_reach_location("The Seeker - Achievement")) | ||
14 | |||
15 | self.collect_by_name("Pilgrim Room - Sun Painting") | ||
16 | self.assertFalse(self.multiworld.state.can_reach("The Seeker", "Region", self.player)) | ||
17 | self.assertTrue(self.multiworld.state.can_reach("Pilgrim Antechamber", "Region", self.player)) | ||
18 | self.assertTrue(self.multiworld.state.can_reach("Pilgrim Room", "Region", self.player)) | ||
19 | self.assertFalse(self.can_reach_location("The Seeker - Achievement")) | ||
20 | |||
21 | self.collect_by_name("Pilgrim Room - Shortcut to The Seeker") | ||
22 | self.assertTrue(self.multiworld.state.can_reach("The Seeker", "Region", self.player)) | ||
23 | self.assertTrue(self.multiworld.state.can_reach("Pilgrim Room", "Region", self.player)) | ||
24 | self.assertFalse(self.can_reach_location("The Seeker - Achievement")) | ||
25 | |||
26 | self.collect_by_name("Starting Room - Back Right Door") | ||
27 | self.assertTrue(self.can_reach_location("The Seeker - Achievement")) | ||
28 | |||
29 | def test_hidden_first(self) -> None: | ||
30 | self.assertFalse(self.multiworld.state.can_reach("The Seeker", "Region", self.player)) | ||
31 | self.assertFalse(self.multiworld.state.can_reach("Pilgrim Room", "Region", self.player)) | ||
32 | self.assertFalse(self.can_reach_location("The Seeker - Achievement")) | ||
33 | |||
34 | self.collect_by_name("Starting Room - Back Right Door") | ||
35 | self.assertFalse(self.multiworld.state.can_reach("The Seeker", "Region", self.player)) | ||
36 | self.assertFalse(self.multiworld.state.can_reach("Pilgrim Room", "Region", self.player)) | ||
37 | self.assertFalse(self.can_reach_location("The Seeker - Achievement")) | ||
38 | |||
39 | self.collect_by_name("Pilgrim Room - Shortcut to The Seeker") | ||
40 | self.assertFalse(self.multiworld.state.can_reach("The Seeker", "Region", self.player)) | ||
41 | self.assertFalse(self.multiworld.state.can_reach("Pilgrim Room", "Region", self.player)) | ||
42 | self.assertFalse(self.can_reach_location("The Seeker - Achievement")) | ||
43 | |||
44 | self.collect_by_name("Pilgrim Room - Sun Painting") | ||
45 | self.assertTrue(self.multiworld.state.can_reach("The Seeker", "Region", self.player)) | ||
46 | self.assertTrue(self.multiworld.state.can_reach("Pilgrim Room", "Region", self.player)) | ||
47 | self.assertTrue(self.can_reach_location("The Seeker - Achievement")) | ||
48 | |||
49 | |||
50 | class TestRequiredDoorLogic(LingoTestBase): | ||
51 | options = { | ||
52 | "shuffle_doors": "complex" | ||
53 | } | ||
54 | |||
55 | def test_through_rhyme(self) -> None: | ||
56 | self.assertFalse(self.can_reach_location("Rhyme Room - Circle/Looped Square Wall")) | ||
57 | |||
58 | self.collect_by_name("Starting Room - Rhyme Room Entrance") | ||
59 | self.assertFalse(self.can_reach_location("Rhyme Room - Circle/Looped Square Wall")) | ||
60 | |||
61 | self.collect_by_name("Rhyme Room (Looped Square) - Door to Circle") | ||
62 | self.assertTrue(self.can_reach_location("Rhyme Room - Circle/Looped Square Wall")) | ||
63 | |||
64 | def test_through_hidden(self) -> None: | ||
65 | self.assertFalse(self.can_reach_location("Rhyme Room - Circle/Looped Square Wall")) | ||
66 | |||
67 | self.collect_by_name("Starting Room - Rhyme Room Entrance") | ||
68 | self.assertFalse(self.can_reach_location("Rhyme Room - Circle/Looped Square Wall")) | ||
69 | |||
70 | self.collect_by_name("Starting Room - Back Right Door") | ||
71 | self.assertFalse(self.can_reach_location("Rhyme Room - Circle/Looped Square Wall")) | ||
72 | |||
73 | self.collect_by_name("Hidden Room - Rhyme Room Entrance") | ||
74 | self.assertTrue(self.can_reach_location("Rhyme Room - Circle/Looped Square Wall")) | ||
75 | |||
76 | |||
77 | class TestSimpleDoors(LingoTestBase): | ||
78 | options = { | ||
79 | "shuffle_doors": "simple" | ||
80 | } | ||
81 | |||
82 | def test_requirement(self): | ||
83 | self.assertFalse(self.multiworld.state.can_reach("Outside The Wanderer", "Region", self.player)) | ||
84 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Third Floor", "Region", self.player)) | ||
85 | |||
86 | self.collect_by_name("Rhyme Room Doors") | ||
87 | self.assertTrue(self.multiworld.state.can_reach("Outside The Wanderer", "Region", self.player)) | ||
88 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Third Floor", "Region", self.player)) | ||
89 | |||
diff --git a/test/TestMastery.py b/test/TestMastery.py new file mode 100644 index 0000000..3fb3c95 --- /dev/null +++ b/test/TestMastery.py | |||
@@ -0,0 +1,39 @@ | |||
1 | from . import LingoTestBase | ||
2 | |||
3 | |||
4 | class TestMasteryWhenVictoryIsTheEnd(LingoTestBase): | ||
5 | options = { | ||
6 | "mastery_achievements": "22", | ||
7 | "victory_condition": "the_end", | ||
8 | "shuffle_colors": "true" | ||
9 | } | ||
10 | |||
11 | def test_requirement(self): | ||
12 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Seventh Floor", "Region", self.player)) | ||
13 | |||
14 | self.collect_by_name(["Red", "Blue", "Black", "Purple", "Orange"]) | ||
15 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Seventh Floor", "Region", self.player)) | ||
16 | self.assertTrue(self.can_reach_location("The End (Solved)")) | ||
17 | self.assertFalse(self.can_reach_location("Orange Tower Seventh Floor - THE MASTER")) | ||
18 | |||
19 | self.collect_by_name(["Green", "Brown", "Yellow"]) | ||
20 | self.assertTrue(self.can_reach_location("Orange Tower Seventh Floor - THE MASTER")) | ||
21 | |||
22 | |||
23 | class TestMasteryWhenVictoryIsTheMaster(LingoTestBase): | ||
24 | options = { | ||
25 | "mastery_achievements": "24", | ||
26 | "victory_condition": "the_master", | ||
27 | "shuffle_colors": "true" | ||
28 | } | ||
29 | |||
30 | def test_requirement(self): | ||
31 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Seventh Floor", "Region", self.player)) | ||
32 | |||
33 | self.collect_by_name(["Red", "Blue", "Black", "Purple", "Orange"]) | ||
34 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Seventh Floor", "Region", self.player)) | ||
35 | self.assertTrue(self.can_reach_location("Orange Tower Seventh Floor - THE END")) | ||
36 | self.assertFalse(self.can_reach_location("Orange Tower Seventh Floor - Mastery Achievements")) | ||
37 | |||
38 | self.collect_by_name(["Green", "Gray", "Brown", "Yellow"]) | ||
39 | self.assertTrue(self.can_reach_location("Orange Tower Seventh Floor - Mastery Achievements")) \ No newline at end of file | ||
diff --git a/test/TestOptions.py b/test/TestOptions.py new file mode 100644 index 0000000..1769677 --- /dev/null +++ b/test/TestOptions.py | |||
@@ -0,0 +1,31 @@ | |||
1 | from . import LingoTestBase | ||
2 | |||
3 | |||
4 | class TestMultiShuffleOptions(LingoTestBase): | ||
5 | options = { | ||
6 | "shuffle_doors": "complex", | ||
7 | "progressive_orange_tower": "true", | ||
8 | "shuffle_colors": "true", | ||
9 | "shuffle_paintings": "true", | ||
10 | "early_color_hallways": "true" | ||
11 | } | ||
12 | |||
13 | |||
14 | class TestPanelsanity(LingoTestBase): | ||
15 | options = { | ||
16 | "shuffle_doors": "complex", | ||
17 | "progressive_orange_tower": "true", | ||
18 | "location_checks": "insanity", | ||
19 | "shuffle_colors": "true" | ||
20 | } | ||
21 | |||
22 | |||
23 | class TestAllPanelHunt(LingoTestBase): | ||
24 | options = { | ||
25 | "shuffle_doors": "complex", | ||
26 | "progressive_orange_tower": "true", | ||
27 | "shuffle_colors": "true", | ||
28 | "victory_condition": "level_2", | ||
29 | "level_2_requirement": "800", | ||
30 | "early_color_hallways": "true" | ||
31 | } | ||
diff --git a/test/TestOrangeTower.py b/test/TestOrangeTower.py new file mode 100644 index 0000000..7b0c3bb --- /dev/null +++ b/test/TestOrangeTower.py | |||
@@ -0,0 +1,175 @@ | |||
1 | from . import LingoTestBase | ||
2 | |||
3 | |||
4 | class TestProgressiveOrangeTower(LingoTestBase): | ||
5 | options = { | ||
6 | "shuffle_doors": "complex", | ||
7 | "progressive_orange_tower": "true" | ||
8 | } | ||
9 | |||
10 | def test_from_welcome_back(self) -> None: | ||
11 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower First Floor", "Region", self.player)) | ||
12 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Second Floor", "Region", self.player)) | ||
13 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Third Floor", "Region", self.player)) | ||
14 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fourth Floor", "Region", self.player)) | ||
15 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) | ||
16 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Sixth Floor", "Region", self.player)) | ||
17 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Seventh Floor", "Region", self.player)) | ||
18 | |||
19 | self.collect_by_name("Welcome Back Area - Shortcut to Starting Room") | ||
20 | self.collect_by_name("Orange Tower Fifth Floor - Welcome Back") | ||
21 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower First Floor", "Region", self.player)) | ||
22 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Second Floor", "Region", self.player)) | ||
23 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Third Floor", "Region", self.player)) | ||
24 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fourth Floor", "Region", self.player)) | ||
25 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) | ||
26 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Sixth Floor", "Region", self.player)) | ||
27 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Seventh Floor", "Region", self.player)) | ||
28 | |||
29 | progressive_tower = self.get_items_by_name("Progressive Orange Tower") | ||
30 | |||
31 | self.collect(progressive_tower[0]) | ||
32 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower First Floor", "Region", self.player)) | ||
33 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Second Floor", "Region", self.player)) | ||
34 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Third Floor", "Region", self.player)) | ||
35 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fourth Floor", "Region", self.player)) | ||
36 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) | ||
37 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Sixth Floor", "Region", self.player)) | ||
38 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Seventh Floor", "Region", self.player)) | ||
39 | |||
40 | self.collect(progressive_tower[1]) | ||
41 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower First Floor", "Region", self.player)) | ||
42 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Second Floor", "Region", self.player)) | ||
43 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Third Floor", "Region", self.player)) | ||
44 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fourth Floor", "Region", self.player)) | ||
45 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) | ||
46 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Sixth Floor", "Region", self.player)) | ||
47 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Seventh Floor", "Region", self.player)) | ||
48 | |||
49 | self.collect(progressive_tower[2]) | ||
50 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower First Floor", "Region", self.player)) | ||
51 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Second Floor", "Region", self.player)) | ||
52 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Third Floor", "Region", self.player)) | ||
53 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fourth Floor", "Region", self.player)) | ||
54 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) | ||
55 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Sixth Floor", "Region", self.player)) | ||
56 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Seventh Floor", "Region", self.player)) | ||
57 | |||
58 | self.collect(progressive_tower[3]) | ||
59 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower First Floor", "Region", self.player)) | ||
60 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Second Floor", "Region", self.player)) | ||
61 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Third Floor", "Region", self.player)) | ||
62 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Fourth Floor", "Region", self.player)) | ||
63 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) | ||
64 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Sixth Floor", "Region", self.player)) | ||
65 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Seventh Floor", "Region", self.player)) | ||
66 | |||
67 | self.collect(progressive_tower[4]) | ||
68 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower First Floor", "Region", self.player)) | ||
69 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Second Floor", "Region", self.player)) | ||
70 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Third Floor", "Region", self.player)) | ||
71 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Fourth Floor", "Region", self.player)) | ||
72 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) | ||
73 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Sixth Floor", "Region", self.player)) | ||
74 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Seventh Floor", "Region", self.player)) | ||
75 | |||
76 | self.collect(progressive_tower[5]) | ||
77 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower First Floor", "Region", self.player)) | ||
78 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Second Floor", "Region", self.player)) | ||
79 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Third Floor", "Region", self.player)) | ||
80 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Fourth Floor", "Region", self.player)) | ||
81 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) | ||
82 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Sixth Floor", "Region", self.player)) | ||
83 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Seventh Floor", "Region", self.player)) | ||
84 | |||
85 | def test_from_hub_room(self) -> None: | ||
86 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower First Floor", "Region", self.player)) | ||
87 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Second Floor", "Region", self.player)) | ||
88 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Third Floor", "Region", self.player)) | ||
89 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fourth Floor", "Region", self.player)) | ||
90 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) | ||
91 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Sixth Floor", "Region", self.player)) | ||
92 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Seventh Floor", "Region", self.player)) | ||
93 | |||
94 | self.collect_by_name("Second Room - Exit Door") | ||
95 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower First Floor", "Region", self.player)) | ||
96 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Second Floor", "Region", self.player)) | ||
97 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Third Floor", "Region", self.player)) | ||
98 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fourth Floor", "Region", self.player)) | ||
99 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) | ||
100 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Sixth Floor", "Region", self.player)) | ||
101 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Seventh Floor", "Region", self.player)) | ||
102 | |||
103 | self.collect_by_name("Orange Tower First Floor - Shortcut to Hub Room") | ||
104 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower First Floor", "Region", self.player)) | ||
105 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Second Floor", "Region", self.player)) | ||
106 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Third Floor", "Region", self.player)) | ||
107 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fourth Floor", "Region", self.player)) | ||
108 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) | ||
109 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Sixth Floor", "Region", self.player)) | ||
110 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Seventh Floor", "Region", self.player)) | ||
111 | |||
112 | progressive_tower = self.get_items_by_name("Progressive Orange Tower") | ||
113 | |||
114 | self.collect(progressive_tower[0]) | ||
115 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower First Floor", "Region", self.player)) | ||
116 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Second Floor", "Region", self.player)) | ||
117 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Third Floor", "Region", self.player)) | ||
118 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fourth Floor", "Region", self.player)) | ||
119 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) | ||
120 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Sixth Floor", "Region", self.player)) | ||
121 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Seventh Floor", "Region", self.player)) | ||
122 | |||
123 | self.remove(self.get_item_by_name("Orange Tower First Floor - Shortcut to Hub Room")) | ||
124 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower First Floor", "Region", self.player)) | ||
125 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Second Floor", "Region", self.player)) | ||
126 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Third Floor", "Region", self.player)) | ||
127 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fourth Floor", "Region", self.player)) | ||
128 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) | ||
129 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Sixth Floor", "Region", self.player)) | ||
130 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Seventh Floor", "Region", self.player)) | ||
131 | |||
132 | self.collect(progressive_tower[1]) | ||
133 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower First Floor", "Region", self.player)) | ||
134 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Second Floor", "Region", self.player)) | ||
135 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Third Floor", "Region", self.player)) | ||
136 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fourth Floor", "Region", self.player)) | ||
137 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) | ||
138 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Sixth Floor", "Region", self.player)) | ||
139 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Seventh Floor", "Region", self.player)) | ||
140 | |||
141 | self.collect(progressive_tower[2]) | ||
142 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower First Floor", "Region", self.player)) | ||
143 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Second Floor", "Region", self.player)) | ||
144 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Third Floor", "Region", self.player)) | ||
145 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Fourth Floor", "Region", self.player)) | ||
146 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) | ||
147 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Sixth Floor", "Region", self.player)) | ||
148 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Seventh Floor", "Region", self.player)) | ||
149 | |||
150 | self.collect(progressive_tower[3]) | ||
151 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower First Floor", "Region", self.player)) | ||
152 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Second Floor", "Region", self.player)) | ||
153 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Third Floor", "Region", self.player)) | ||
154 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Fourth Floor", "Region", self.player)) | ||
155 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) | ||
156 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Sixth Floor", "Region", self.player)) | ||
157 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Seventh Floor", "Region", self.player)) | ||
158 | |||
159 | self.collect(progressive_tower[4]) | ||
160 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower First Floor", "Region", self.player)) | ||
161 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Second Floor", "Region", self.player)) | ||
162 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Third Floor", "Region", self.player)) | ||
163 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Fourth Floor", "Region", self.player)) | ||
164 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) | ||
165 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Sixth Floor", "Region", self.player)) | ||
166 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Seventh Floor", "Region", self.player)) | ||
167 | |||
168 | self.collect(progressive_tower[5]) | ||
169 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower First Floor", "Region", self.player)) | ||
170 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Second Floor", "Region", self.player)) | ||
171 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Third Floor", "Region", self.player)) | ||
172 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Fourth Floor", "Region", self.player)) | ||
173 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) | ||
174 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Sixth Floor", "Region", self.player)) | ||
175 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Seventh Floor", "Region", self.player)) | ||
diff --git a/test/TestProgressive.py b/test/TestProgressive.py new file mode 100644 index 0000000..026971c --- /dev/null +++ b/test/TestProgressive.py | |||
@@ -0,0 +1,191 @@ | |||
1 | from . import LingoTestBase | ||
2 | |||
3 | |||
4 | class TestComplexProgressiveHallwayRoom(LingoTestBase): | ||
5 | options = { | ||
6 | "shuffle_doors": "complex" | ||
7 | } | ||
8 | |||
9 | def test_item(self): | ||
10 | self.assertFalse(self.multiworld.state.can_reach("Outside The Agreeable", "Region", self.player)) | ||
11 | self.assertFalse(self.multiworld.state.can_reach("Hallway Room (2)", "Region", self.player)) | ||
12 | self.assertFalse(self.multiworld.state.can_reach("Hallway Room (3)", "Region", self.player)) | ||
13 | self.assertFalse(self.multiworld.state.can_reach("Hallway Room (4)", "Region", self.player)) | ||
14 | self.assertFalse(self.multiworld.state.can_reach("Elements Area", "Region", self.player)) | ||
15 | |||
16 | self.collect_by_name(["Second Room - Exit Door", "The Tenacious - Shortcut to Hub Room", | ||
17 | "Outside The Agreeable - Tenacious Entrance"]) | ||
18 | self.assertTrue(self.multiworld.state.can_reach("Outside The Agreeable", "Region", self.player)) | ||
19 | self.assertFalse(self.multiworld.state.can_reach("Hallway Room (2)", "Region", self.player)) | ||
20 | self.assertFalse(self.multiworld.state.can_reach("Hallway Room (3)", "Region", self.player)) | ||
21 | self.assertFalse(self.multiworld.state.can_reach("Hallway Room (4)", "Region", self.player)) | ||
22 | self.assertFalse(self.multiworld.state.can_reach("Elements Area", "Region", self.player)) | ||
23 | |||
24 | progressive_hallway_room = self.get_items_by_name("Progressive Hallway Room") | ||
25 | |||
26 | self.collect(progressive_hallway_room[0]) | ||
27 | self.assertTrue(self.multiworld.state.can_reach("Outside The Agreeable", "Region", self.player)) | ||
28 | self.assertTrue(self.multiworld.state.can_reach("Hallway Room (2)", "Region", self.player)) | ||
29 | self.assertFalse(self.multiworld.state.can_reach("Hallway Room (3)", "Region", self.player)) | ||
30 | self.assertFalse(self.multiworld.state.can_reach("Hallway Room (4)", "Region", self.player)) | ||
31 | self.assertFalse(self.multiworld.state.can_reach("Elements Area", "Region", self.player)) | ||
32 | |||
33 | self.collect(progressive_hallway_room[1]) | ||
34 | self.assertTrue(self.multiworld.state.can_reach("Outside The Agreeable", "Region", self.player)) | ||
35 | self.assertTrue(self.multiworld.state.can_reach("Hallway Room (2)", "Region", self.player)) | ||
36 | self.assertTrue(self.multiworld.state.can_reach("Hallway Room (3)", "Region", self.player)) | ||
37 | self.assertFalse(self.multiworld.state.can_reach("Hallway Room (4)", "Region", self.player)) | ||
38 | self.assertFalse(self.multiworld.state.can_reach("Elements Area", "Region", self.player)) | ||
39 | |||
40 | self.collect(progressive_hallway_room[2]) | ||
41 | self.assertTrue(self.multiworld.state.can_reach("Outside The Agreeable", "Region", self.player)) | ||
42 | self.assertTrue(self.multiworld.state.can_reach("Hallway Room (2)", "Region", self.player)) | ||
43 | self.assertTrue(self.multiworld.state.can_reach("Hallway Room (3)", "Region", self.player)) | ||
44 | self.assertTrue(self.multiworld.state.can_reach("Hallway Room (4)", "Region", self.player)) | ||
45 | self.assertFalse(self.multiworld.state.can_reach("Elements Area", "Region", self.player)) | ||
46 | |||
47 | self.collect(progressive_hallway_room[3]) | ||
48 | self.assertTrue(self.multiworld.state.can_reach("Outside The Agreeable", "Region", self.player)) | ||
49 | self.assertTrue(self.multiworld.state.can_reach("Hallway Room (2)", "Region", self.player)) | ||
50 | self.assertTrue(self.multiworld.state.can_reach("Hallway Room (3)", "Region", self.player)) | ||
51 | self.assertTrue(self.multiworld.state.can_reach("Hallway Room (4)", "Region", self.player)) | ||
52 | self.assertTrue(self.multiworld.state.can_reach("Elements Area", "Region", self.player)) | ||
53 | |||
54 | |||
55 | class TestSimpleHallwayRoom(LingoTestBase): | ||
56 | options = { | ||
57 | "shuffle_doors": "simple" | ||
58 | } | ||
59 | |||
60 | def test_item(self): | ||
61 | self.assertFalse(self.multiworld.state.can_reach("Outside The Agreeable", "Region", self.player)) | ||
62 | self.assertFalse(self.multiworld.state.can_reach("Hallway Room (2)", "Region", self.player)) | ||
63 | self.assertFalse(self.multiworld.state.can_reach("Hallway Room (3)", "Region", self.player)) | ||
64 | self.assertFalse(self.multiworld.state.can_reach("Hallway Room (4)", "Region", self.player)) | ||
65 | self.assertFalse(self.multiworld.state.can_reach("Elements Area", "Region", self.player)) | ||
66 | |||
67 | self.collect_by_name(["Second Room - Exit Door", "Entrances to The Tenacious"]) | ||
68 | self.assertTrue(self.multiworld.state.can_reach("Outside The Agreeable", "Region", self.player)) | ||
69 | self.assertFalse(self.multiworld.state.can_reach("Hallway Room (2)", "Region", self.player)) | ||
70 | self.assertFalse(self.multiworld.state.can_reach("Hallway Room (3)", "Region", self.player)) | ||
71 | self.assertFalse(self.multiworld.state.can_reach("Hallway Room (4)", "Region", self.player)) | ||
72 | self.assertFalse(self.multiworld.state.can_reach("Elements Area", "Region", self.player)) | ||
73 | |||
74 | self.collect_by_name("Hallway Room Doors") | ||
75 | self.assertTrue(self.multiworld.state.can_reach("Outside The Agreeable", "Region", self.player)) | ||
76 | self.assertTrue(self.multiworld.state.can_reach("Hallway Room (2)", "Region", self.player)) | ||
77 | self.assertTrue(self.multiworld.state.can_reach("Hallway Room (3)", "Region", self.player)) | ||
78 | self.assertTrue(self.multiworld.state.can_reach("Hallway Room (4)", "Region", self.player)) | ||
79 | self.assertTrue(self.multiworld.state.can_reach("Elements Area", "Region", self.player)) | ||
80 | |||
81 | |||
82 | class TestProgressiveArtGallery(LingoTestBase): | ||
83 | options = { | ||
84 | "shuffle_doors": "complex" | ||
85 | } | ||
86 | |||
87 | def test_item(self): | ||
88 | self.assertFalse(self.multiworld.state.can_reach("Art Gallery", "Region", self.player)) | ||
89 | self.assertFalse(self.multiworld.state.can_reach("Art Gallery (Second Floor)", "Region", self.player)) | ||
90 | self.assertFalse(self.multiworld.state.can_reach("Art Gallery (Third Floor)", "Region", self.player)) | ||
91 | self.assertFalse(self.multiworld.state.can_reach("Art Gallery (Fourth Floor)", "Region", self.player)) | ||
92 | self.assertFalse(self.can_reach_location("Art Gallery - ONE ROAD MANY TURNS")) | ||
93 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) | ||
94 | |||
95 | self.collect_by_name(["Second Room - Exit Door", "Crossroads - Tower Entrance", | ||
96 | "Orange Tower Fourth Floor - Hot Crusts Door"]) | ||
97 | self.assertTrue(self.multiworld.state.can_reach("Art Gallery", "Region", self.player)) | ||
98 | self.assertFalse(self.multiworld.state.can_reach("Art Gallery (Second Floor)", "Region", self.player)) | ||
99 | self.assertFalse(self.multiworld.state.can_reach("Art Gallery (Third Floor)", "Region", self.player)) | ||
100 | self.assertFalse(self.multiworld.state.can_reach("Art Gallery (Fourth Floor)", "Region", self.player)) | ||
101 | self.assertFalse(self.can_reach_location("Art Gallery - ONE ROAD MANY TURNS")) | ||
102 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) | ||
103 | |||
104 | progressive_gallery_room = self.get_items_by_name("Progressive Art Gallery") | ||
105 | |||
106 | self.collect(progressive_gallery_room[0]) | ||
107 | self.assertTrue(self.multiworld.state.can_reach("Art Gallery", "Region", self.player)) | ||
108 | self.assertTrue(self.multiworld.state.can_reach("Art Gallery (Second Floor)", "Region", self.player)) | ||
109 | self.assertFalse(self.multiworld.state.can_reach("Art Gallery (Third Floor)", "Region", self.player)) | ||
110 | self.assertFalse(self.multiworld.state.can_reach("Art Gallery (Fourth Floor)", "Region", self.player)) | ||
111 | self.assertFalse(self.can_reach_location("Art Gallery - ONE ROAD MANY TURNS")) | ||
112 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) | ||
113 | |||
114 | self.collect(progressive_gallery_room[1]) | ||
115 | self.assertTrue(self.multiworld.state.can_reach("Art Gallery", "Region", self.player)) | ||
116 | self.assertTrue(self.multiworld.state.can_reach("Art Gallery (Second Floor)", "Region", self.player)) | ||
117 | self.assertTrue(self.multiworld.state.can_reach("Art Gallery (Third Floor)", "Region", self.player)) | ||
118 | self.assertFalse(self.multiworld.state.can_reach("Art Gallery (Fourth Floor)", "Region", self.player)) | ||
119 | self.assertFalse(self.can_reach_location("Art Gallery - ONE ROAD MANY TURNS")) | ||
120 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) | ||
121 | |||
122 | self.collect(progressive_gallery_room[2]) | ||
123 | self.assertTrue(self.multiworld.state.can_reach("Art Gallery", "Region", self.player)) | ||
124 | self.assertTrue(self.multiworld.state.can_reach("Art Gallery (Second Floor)", "Region", self.player)) | ||
125 | self.assertTrue(self.multiworld.state.can_reach("Art Gallery (Third Floor)", "Region", self.player)) | ||
126 | self.assertTrue(self.multiworld.state.can_reach("Art Gallery (Fourth Floor)", "Region", self.player)) | ||
127 | self.assertFalse(self.can_reach_location("Art Gallery - ONE ROAD MANY TURNS")) | ||
128 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) | ||
129 | |||
130 | self.collect(progressive_gallery_room[3]) | ||
131 | self.assertTrue(self.multiworld.state.can_reach("Art Gallery", "Region", self.player)) | ||
132 | self.assertTrue(self.multiworld.state.can_reach("Art Gallery (Second Floor)", "Region", self.player)) | ||
133 | self.assertTrue(self.multiworld.state.can_reach("Art Gallery (Third Floor)", "Region", self.player)) | ||
134 | self.assertTrue(self.multiworld.state.can_reach("Art Gallery (Fourth Floor)", "Region", self.player)) | ||
135 | self.assertTrue(self.can_reach_location("Art Gallery - ONE ROAD MANY TURNS")) | ||
136 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) | ||
137 | |||
138 | self.collect(progressive_gallery_room[4]) | ||
139 | self.assertTrue(self.multiworld.state.can_reach("Art Gallery", "Region", self.player)) | ||
140 | self.assertTrue(self.multiworld.state.can_reach("Art Gallery (Second Floor)", "Region", self.player)) | ||
141 | self.assertTrue(self.multiworld.state.can_reach("Art Gallery (Third Floor)", "Region", self.player)) | ||
142 | self.assertTrue(self.multiworld.state.can_reach("Art Gallery (Fourth Floor)", "Region", self.player)) | ||
143 | self.assertTrue(self.can_reach_location("Art Gallery - ONE ROAD MANY TURNS")) | ||
144 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) | ||
145 | |||
146 | |||
147 | class TestNoDoorsArtGallery(LingoTestBase): | ||
148 | options = { | ||
149 | "shuffle_doors": "none", | ||
150 | "shuffle_colors": "true" | ||
151 | } | ||
152 | |||
153 | def test_item(self): | ||
154 | self.assertFalse(self.multiworld.state.can_reach("Art Gallery", "Region", self.player)) | ||
155 | self.assertFalse(self.multiworld.state.can_reach("Art Gallery (Second Floor)", "Region", self.player)) | ||
156 | self.assertFalse(self.multiworld.state.can_reach("Art Gallery (Third Floor)", "Region", self.player)) | ||
157 | self.assertFalse(self.multiworld.state.can_reach("Art Gallery (Fourth Floor)", "Region", self.player)) | ||
158 | self.assertFalse(self.can_reach_location("Art Gallery - ONE ROAD MANY TURNS")) | ||
159 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) | ||
160 | |||
161 | self.collect_by_name("Yellow") | ||
162 | self.assertTrue(self.multiworld.state.can_reach("Art Gallery", "Region", self.player)) | ||
163 | self.assertTrue(self.multiworld.state.can_reach("Art Gallery (Second Floor)", "Region", self.player)) | ||
164 | self.assertFalse(self.multiworld.state.can_reach("Art Gallery (Third Floor)", "Region", self.player)) | ||
165 | self.assertFalse(self.multiworld.state.can_reach("Art Gallery (Fourth Floor)", "Region", self.player)) | ||
166 | self.assertFalse(self.can_reach_location("Art Gallery - ONE ROAD MANY TURNS")) | ||
167 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) | ||
168 | |||
169 | self.collect_by_name("Brown") | ||
170 | self.assertTrue(self.multiworld.state.can_reach("Art Gallery", "Region", self.player)) | ||
171 | self.assertTrue(self.multiworld.state.can_reach("Art Gallery (Second Floor)", "Region", self.player)) | ||
172 | self.assertTrue(self.multiworld.state.can_reach("Art Gallery (Third Floor)", "Region", self.player)) | ||
173 | self.assertFalse(self.multiworld.state.can_reach("Art Gallery (Fourth Floor)", "Region", self.player)) | ||
174 | self.assertFalse(self.can_reach_location("Art Gallery - ONE ROAD MANY TURNS")) | ||
175 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) | ||
176 | |||
177 | self.collect_by_name("Blue") | ||
178 | self.assertTrue(self.multiworld.state.can_reach("Art Gallery", "Region", self.player)) | ||
179 | self.assertTrue(self.multiworld.state.can_reach("Art Gallery (Second Floor)", "Region", self.player)) | ||
180 | self.assertTrue(self.multiworld.state.can_reach("Art Gallery (Third Floor)", "Region", self.player)) | ||
181 | self.assertTrue(self.multiworld.state.can_reach("Art Gallery (Fourth Floor)", "Region", self.player)) | ||
182 | self.assertFalse(self.can_reach_location("Art Gallery - ONE ROAD MANY TURNS")) | ||
183 | self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) | ||
184 | |||
185 | self.collect_by_name(["Orange", "Gray"]) | ||
186 | self.assertTrue(self.multiworld.state.can_reach("Art Gallery", "Region", self.player)) | ||
187 | self.assertTrue(self.multiworld.state.can_reach("Art Gallery (Second Floor)", "Region", self.player)) | ||
188 | self.assertTrue(self.multiworld.state.can_reach("Art Gallery (Third Floor)", "Region", self.player)) | ||
189 | self.assertTrue(self.multiworld.state.can_reach("Art Gallery (Fourth Floor)", "Region", self.player)) | ||
190 | self.assertTrue(self.can_reach_location("Art Gallery - ONE ROAD MANY TURNS")) | ||
191 | self.assertTrue(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) | ||
diff --git a/test/__init__.py b/test/__init__.py new file mode 100644 index 0000000..ffbf903 --- /dev/null +++ b/test/__init__.py | |||
@@ -0,0 +1,13 @@ | |||
1 | from typing import ClassVar | ||
2 | |||
3 | from test.bases import WorldTestBase | ||
4 | from .. import LingoTestOptions | ||
5 | |||
6 | |||
7 | class LingoTestBase(WorldTestBase): | ||
8 | game = "Lingo" | ||
9 | player: ClassVar[int] = 1 | ||
10 | |||
11 | def world_setup(self, *args, **kwargs): | ||
12 | LingoTestOptions.disable_forced_good_item = True | ||
13 | super().world_setup(*args, **kwargs) | ||
diff --git a/testing.py b/testing.py new file mode 100644 index 0000000..22fafea --- /dev/null +++ b/testing.py | |||
@@ -0,0 +1,2 @@ | |||
1 | class LingoTestOptions: | ||
2 | disable_forced_good_item: bool = False | ||
diff --git a/utils/assign_ids.rb b/utils/assign_ids.rb new file mode 100644 index 0000000..9e1ce67 --- /dev/null +++ b/utils/assign_ids.rb | |||
@@ -0,0 +1,178 @@ | |||
1 | # This utility goes through the provided Lingo config and assigns item and | ||
2 | # location IDs to entities that require them (such as doors and panels). These | ||
3 | # IDs are output in a separate yaml file. If the output file already exists, | ||
4 | # then it will be updated with any newly assigned IDs rather than overwritten. | ||
5 | # In this event, all new IDs will be greater than any already existing IDs, | ||
6 | # even if there are gaps in the ID space; this is to prevent collision when IDs | ||
7 | # are retired. | ||
8 | # | ||
9 | # This utility should be run whenever logically new items or locations are | ||
10 | # required. If an item or location is created that is logically equivalent to | ||
11 | # one that used to exist, this utility should not be used, and instead the ID | ||
12 | # file should be manually edited so that the old ID can be reused. | ||
13 | |||
14 | require 'set' | ||
15 | require 'yaml' | ||
16 | |||
17 | configpath = ARGV[0] | ||
18 | outputpath = ARGV[1] | ||
19 | |||
20 | next_item_id = 444400 | ||
21 | next_location_id = 444400 | ||
22 | |||
23 | location_id_by_name = {} | ||
24 | |||
25 | old_generated = YAML.load_file(outputpath) | ||
26 | File.write(outputpath + ".old", old_generated.to_yaml) | ||
27 | |||
28 | if old_generated.include? "special_items" then | ||
29 | old_generated["special_items"].each do |name, id| | ||
30 | if id >= next_item_id then | ||
31 | next_item_id = id + 1 | ||
32 | end | ||
33 | end | ||
34 | end | ||
35 | if old_generated.include? "special_locations" then | ||
36 | old_generated["special_locations"].each do |name, id| | ||
37 | if id >= next_location_id then | ||
38 | next_location_id = id + 1 | ||
39 | end | ||
40 | end | ||
41 | end | ||
42 | if old_generated.include? "panels" then | ||
43 | old_generated["panels"].each do |room, panels| | ||
44 | panels.each do |name, id| | ||
45 | if id >= next_location_id then | ||
46 | next_location_id = id + 1 | ||
47 | end | ||
48 | location_name = "#{room} - #{name}" | ||
49 | location_id_by_name[location_name] = id | ||
50 | end | ||
51 | end | ||
52 | end | ||
53 | if old_generated.include? "doors" then | ||
54 | old_generated["doors"].each do |room, doors| | ||
55 | doors.each do |name, ids| | ||
56 | if ids.include? "location" then | ||
57 | if ids["location"] >= next_location_id then | ||
58 | next_location_id = ids["location"] + 1 | ||
59 | end | ||
60 | end | ||
61 | if ids.include? "item" then | ||
62 | if ids["item"] >= next_item_id then | ||
63 | next_item_id = ids["item"] + 1 | ||
64 | end | ||
65 | end | ||
66 | end | ||
67 | end | ||
68 | end | ||
69 | if old_generated.include? "door_groups" then | ||
70 | old_generated["door_groups"].each do |name, id| | ||
71 | if id >= next_item_id then | ||
72 | next_item_id = id + 1 | ||
73 | end | ||
74 | end | ||
75 | end | ||
76 | if old_generated.include? "progression" then | ||
77 | old_generated["progression"].each do |name, id| | ||
78 | if id >= next_item_id then | ||
79 | next_item_id = id + 1 | ||
80 | end | ||
81 | end | ||
82 | end | ||
83 | |||
84 | door_groups = Set[] | ||
85 | |||
86 | config = YAML.load_file(configpath) | ||
87 | config.each do |room_name, room_data| | ||
88 | if room_data.include? "panels" | ||
89 | room_data["panels"].each do |panel_name, panel| | ||
90 | unless old_generated.include? "panels" and old_generated["panels"].include? room_name and old_generated["panels"][room_name].include? panel_name then | ||
91 | old_generated["panels"] ||= {} | ||
92 | old_generated["panels"][room_name] ||= {} | ||
93 | old_generated["panels"][room_name][panel_name] = next_location_id | ||
94 | |||
95 | location_name = "#{room_name} - #{panel_name}" | ||
96 | location_id_by_name[location_name] = next_location_id | ||
97 | |||
98 | next_location_id += 1 | ||
99 | end | ||
100 | end | ||
101 | end | ||
102 | end | ||
103 | |||
104 | config.each do |room_name, room_data| | ||
105 | if room_data.include? "doors" | ||
106 | room_data["doors"].each do |door_name, door| | ||
107 | if door.include? "event" and door["event"] then | ||
108 | next | ||
109 | end | ||
110 | |||
111 | unless door.include? "skip_item" and door["skip_item"] then | ||
112 | unless old_generated.include? "doors" and old_generated["doors"].include? room_name and old_generated["doors"][room_name].include? door_name and old_generated["doors"][room_name][door_name].include? "item" then | ||
113 | old_generated["doors"] ||= {} | ||
114 | old_generated["doors"][room_name] ||= {} | ||
115 | old_generated["doors"][room_name][door_name] ||= {} | ||
116 | old_generated["doors"][room_name][door_name]["item"] = next_item_id | ||
117 | |||
118 | next_item_id += 1 | ||
119 | end | ||
120 | |||
121 | if door.include? "group" and not door_groups.include? door["group"] then | ||
122 | door_groups.add(door["group"]) | ||
123 | |||
124 | unless old_generated.include? "door_groups" and old_generated["door_groups"].include? door["group"] then | ||
125 | old_generated["door_groups"] ||= {} | ||
126 | old_generated["door_groups"][door["group"]] = next_item_id | ||
127 | |||
128 | next_item_id += 1 | ||
129 | end | ||
130 | end | ||
131 | end | ||
132 | |||
133 | unless door.include? "skip_location" and door["skip_location"] then | ||
134 | location_name = "" | ||
135 | if door.include? "location_name" then | ||
136 | location_name = door["location_name"] | ||
137 | elsif door.include? "panels" then | ||
138 | location_name = door["panels"].map do |panel| | ||
139 | if panel.kind_of? Hash then | ||
140 | panel | ||
141 | else | ||
142 | {"room" => room_name, "panel" => panel} | ||
143 | end | ||
144 | end.sort_by {|panel| panel["room"]}.chunk {|panel| panel["room"]}.map do |room_panels| | ||
145 | room_panels[0] + " - " + room_panels[1].map{|panel| panel["panel"]}.join(", ") | ||
146 | end.join(" and ") | ||
147 | end | ||
148 | |||
149 | if location_id_by_name.has_key? location_name then | ||
150 | old_generated["doors"] ||= {} | ||
151 | old_generated["doors"][room_name] ||= {} | ||
152 | old_generated["doors"][room_name][door_name] ||= {} | ||
153 | old_generated["doors"][room_name][door_name]["location"] = location_id_by_name[location_name] | ||
154 | elsif not (old_generated.include? "doors" and old_generated["doors"].include? room_name and old_generated["doors"][room_name].include? door_name and old_generated["doors"][room_name][door_name].include? "location") then | ||
155 | old_generated["doors"] ||= {} | ||
156 | old_generated["doors"][room_name] ||= {} | ||
157 | old_generated["doors"][room_name][door_name] ||= {} | ||
158 | old_generated["doors"][room_name][door_name]["location"] = next_location_id | ||
159 | |||
160 | next_location_id += 1 | ||
161 | end | ||
162 | end | ||
163 | end | ||
164 | end | ||
165 | |||
166 | if room_data.include? "progression" | ||
167 | room_data["progression"].each do |progression_name, pdata| | ||
168 | unless old_generated.include? "progression" and old_generated["progression"].include? progression_name then | ||
169 | old_generated["progression"] ||= {} | ||
170 | old_generated["progression"][progression_name] = next_item_id | ||
171 | |||
172 | next_item_id += 1 | ||
173 | end | ||
174 | end | ||
175 | end | ||
176 | end | ||
177 | |||
178 | File.write(outputpath, old_generated.to_yaml) | ||
diff --git a/utils/validate_config.rb b/utils/validate_config.rb new file mode 100644 index 0000000..ed2e905 --- /dev/null +++ b/utils/validate_config.rb | |||
@@ -0,0 +1,329 @@ | |||
1 | # Script to validate a level config file. This checks that the names used within | ||
2 | # the file are consistent. It also checks that the panel and door IDs mentioned | ||
3 | # all exist in the map file. | ||
4 | # | ||
5 | # Usage: validate_config.rb [config file] [map file] | ||
6 | |||
7 | require 'set' | ||
8 | require 'yaml' | ||
9 | |||
10 | configpath = ARGV[0] | ||
11 | mappath = ARGV[1] | ||
12 | |||
13 | panels = Set["Countdown Panels/Panel_1234567890_wanderlust"] | ||
14 | doors = Set["Naps Room Doors/Door_hider_new1", "Tower Room Area Doors/Door_wanderer_entrance"] | ||
15 | paintings = Set[] | ||
16 | |||
17 | File.readlines(mappath).each do |line| | ||
18 | line.match(/node name=\"(.*)\" parent=\"Panels\/(.*)\" instance/) do |m| | ||
19 | panels.add(m[2] + "/" + m[1]) | ||
20 | end | ||
21 | line.match(/node name=\"(.*)\" parent=\"Doors\/(.*)\" instance/) do |m| | ||
22 | doors.add(m[2] + "/" + m[1]) | ||
23 | end | ||
24 | line.match(/node name=\"(.*)\" parent=\"Decorations\/Paintings\" instance/) do |m| | ||
25 | paintings.add(m[1]) | ||
26 | end | ||
27 | line.match(/node name=\"(.*)\" parent=\"Decorations\/EndPanel\" instance/) do |m| | ||
28 | panels.add("EndPanel/" + m[1]) | ||
29 | end | ||
30 | end | ||
31 | |||
32 | configured_rooms = Set["Menu"] | ||
33 | configured_doors = Set[] | ||
34 | configured_panels = Set[] | ||
35 | |||
36 | mentioned_rooms = Set[] | ||
37 | mentioned_doors = Set[] | ||
38 | mentioned_panels = Set[] | ||
39 | |||
40 | door_groups = {} | ||
41 | |||
42 | directives = Set["entrances", "panels", "doors", "paintings", "progression"] | ||
43 | panel_directives = Set["id", "required_room", "required_door", "required_panel", "colors", "check", "exclude_reduce", "tag", "link", "subtag", "achievement", "copy_to_sign", "non_counting"] | ||
44 | door_directives = Set["id", "painting_id", "panels", "item_name", "location_name", "skip_location", "skip_item", "group", "include_reduce", "junk_item", "event"] | ||
45 | painting_directives = Set["id", "enter_only", "exit_only", "orientation", "required_door", "required", "required_when_no_doors", "move"] | ||
46 | |||
47 | non_counting = 0 | ||
48 | |||
49 | config = YAML.load_file(configpath) | ||
50 | config.each do |room_name, room| | ||
51 | configured_rooms.add(room_name) | ||
52 | |||
53 | used_directives = Set[] | ||
54 | room.each_key do |key| | ||
55 | used_directives.add(key) | ||
56 | end | ||
57 | diff_directives = used_directives - directives | ||
58 | unless diff_directives.empty? then | ||
59 | puts("#{room_name} has the following invalid top-level directives: #{diff_directives.to_s}") | ||
60 | end | ||
61 | |||
62 | (room["entrances"] || {}).each do |source_room, entrance| | ||
63 | mentioned_rooms.add(source_room) | ||
64 | |||
65 | entrances = [] | ||
66 | if entrance.kind_of? Hash | ||
67 | if entrance.keys() != ["painting"] then | ||
68 | entrances = [entrance] | ||
69 | end | ||
70 | elsif entrance.kind_of? Array | ||
71 | entrances = entrance | ||
72 | end | ||
73 | |||
74 | entrances.each do |e| | ||
75 | entrance_room = e.include?("room") ? e["room"] : room_name | ||
76 | mentioned_rooms.add(entrance_room) | ||
77 | mentioned_doors.add(entrance_room + " - " + e["door"]) | ||
78 | end | ||
79 | end | ||
80 | |||
81 | (room["panels"] || {}).each do |panel_name, panel| | ||
82 | unless panel_name.kind_of? String then | ||
83 | puts "#{room_name} has an invalid panel name" | ||
84 | end | ||
85 | |||
86 | configured_panels.add(room_name + " - " + panel_name) | ||
87 | |||
88 | if panel.include?("id") | ||
89 | panel_ids = [] | ||
90 | if panel["id"].kind_of? Array | ||
91 | panel_ids = panel["id"] | ||
92 | else | ||
93 | panel_ids = [panel["id"]] | ||
94 | end | ||
95 | |||
96 | panel_ids.each do |panel_id| | ||
97 | unless panels.include? panel_id then | ||
98 | puts "#{room_name} - #{panel_name} :::: Invalid Panel ID #{panel_id}" | ||
99 | end | ||
100 | end | ||
101 | else | ||
102 | puts "#{room_name} - #{panel_name} :::: Panel is missing an ID" | ||
103 | end | ||
104 | |||
105 | if panel.include?("required_room") | ||
106 | required_rooms = [] | ||
107 | if panel["required_room"].kind_of? Array | ||
108 | required_rooms = panel["required_room"] | ||
109 | else | ||
110 | required_rooms = [panel["required_room"]] | ||
111 | end | ||
112 | |||
113 | required_rooms.each do |required_room| | ||
114 | mentioned_rooms.add(required_room) | ||
115 | end | ||
116 | end | ||
117 | |||
118 | if panel.include?("required_door") | ||
119 | required_doors = [] | ||
120 | if panel["required_door"].kind_of? Array | ||
121 | required_doors = panel["required_door"] | ||
122 | else | ||
123 | required_doors = [panel["required_door"]] | ||
124 | end | ||
125 | |||
126 | required_doors.each do |required_door| | ||
127 | other_room = required_door.include?("room") ? required_door["room"] : room_name | ||
128 | mentioned_rooms.add(other_room) | ||
129 | mentioned_doors.add("#{other_room} - #{required_door["door"]}") | ||
130 | end | ||
131 | end | ||
132 | |||
133 | if panel.include?("required_panel") | ||
134 | required_panels = [] | ||
135 | if panel["required_panel"].kind_of? Array | ||
136 | required_panels = panel["required_panel"] | ||
137 | else | ||
138 | required_panels = [panel["required_panel"]] | ||
139 | end | ||
140 | |||
141 | required_panels.each do |required_panel| | ||
142 | other_room = required_panel.include?("room") ? required_panel["room"] : room_name | ||
143 | mentioned_rooms.add(other_room) | ||
144 | mentioned_panels.add("#{other_room} - #{required_panel["panel"]}") | ||
145 | end | ||
146 | end | ||
147 | |||
148 | unless panel.include?("tag") then | ||
149 | puts "#{room_name} - #{panel_name} :::: Panel is missing a tag" | ||
150 | end | ||
151 | |||
152 | if panel.include?("non_counting") then | ||
153 | non_counting += 1 | ||
154 | end | ||
155 | |||
156 | bad_subdirectives = [] | ||
157 | panel.keys.each do |key| | ||
158 | unless panel_directives.include?(key) then | ||
159 | bad_subdirectives << key | ||
160 | end | ||
161 | end | ||
162 | unless bad_subdirectives.empty? then | ||
163 | puts "#{room_name} - #{panel_name} :::: Panel has the following invalid subdirectives: #{bad_subdirectives.join(", ")}" | ||
164 | end | ||
165 | end | ||
166 | |||
167 | (room["doors"] || {}).each do |door_name, door| | ||
168 | configured_doors.add("#{room_name} - #{door_name}") | ||
169 | |||
170 | if door.include?("id") | ||
171 | door_ids = [] | ||
172 | if door["id"].kind_of? Array | ||
173 | door_ids = door["id"] | ||
174 | else | ||
175 | door_ids = [door["id"]] | ||
176 | end | ||
177 | |||
178 | door_ids.each do |door_id| | ||
179 | unless doors.include? door_id then | ||
180 | puts "#{room_name} - #{door_name} :::: Invalid Door ID #{door_id}" | ||
181 | end | ||
182 | end | ||
183 | end | ||
184 | |||
185 | if door.include?("painting_id") | ||
186 | painting_ids = [] | ||
187 | if door["painting_id"].kind_of? Array | ||
188 | painting_ids = door["painting_id"] | ||
189 | else | ||
190 | painting_ids = [door["painting_id"]] | ||
191 | end | ||
192 | |||
193 | painting_ids.each do |painting_id| | ||
194 | unless paintings.include? painting_id then | ||
195 | puts "#{room_name} - #{door_name} :::: Invalid Painting ID #{painting_id}" | ||
196 | end | ||
197 | end | ||
198 | end | ||
199 | |||
200 | if not door.include?("id") and not door.include?("painting_id") and not door["skip_item"] and not door["event"] then | ||
201 | puts "#{room_name} - #{door_name} :::: Should be marked skip_item or event if there are no doors or paintings" | ||
202 | end | ||
203 | |||
204 | if door.include?("panels") | ||
205 | door["panels"].each do |panel| | ||
206 | if panel.kind_of? Hash then | ||
207 | other_room = panel.include?("room") ? panel["room"] : room_name | ||
208 | mentioned_panels.add("#{other_room} - #{panel["panel"]}") | ||
209 | else | ||
210 | other_room = panel.include?("room") ? panel["room"] : room_name | ||
211 | mentioned_panels.add("#{room_name} - #{panel}") | ||
212 | end | ||
213 | end | ||
214 | elsif not door["skip_location"] | ||
215 | puts "#{room_name} - #{door_name} :::: Should be marked skip_location if there are no panels" | ||
216 | end | ||
217 | |||
218 | if door.include?("group") | ||
219 | door_groups[door["group"]] ||= 0 | ||
220 | door_groups[door["group"]] += 1 | ||
221 | end | ||
222 | |||
223 | bad_subdirectives = [] | ||
224 | door.keys.each do |key| | ||
225 | unless door_directives.include?(key) then | ||
226 | bad_subdirectives << key | ||
227 | end | ||
228 | end | ||
229 | unless bad_subdirectives.empty? then | ||
230 | puts "#{room_name} - #{door_name} :::: Door has the following invalid subdirectives: #{bad_subdirectives.join(", ")}" | ||
231 | end | ||
232 | end | ||
233 | |||
234 | (room["paintings"] || []).each do |painting| | ||
235 | if painting.include?("id") and painting["id"].kind_of? String then | ||
236 | unless paintings.include? painting["id"] then | ||
237 | puts "#{room_name} :::: Invalid Painting ID #{painting["id"]}" | ||
238 | end | ||
239 | else | ||
240 | puts "#{room_name} :::: Painting is missing an ID" | ||
241 | end | ||
242 | |||
243 | if painting["disable"] then | ||
244 | # We're good. | ||
245 | next | ||
246 | end | ||
247 | |||
248 | if painting.include?("orientation") then | ||
249 | unless ["north", "south", "east", "west"].include? painting["orientation"] then | ||
250 | puts "#{room_name} - #{painting["id"] || "painting"} :::: Invalid orientation #{painting["orientation"]}" | ||
251 | end | ||
252 | else | ||
253 | puts "#{room_name} :::: Painting is missing an orientation" | ||
254 | end | ||
255 | |||
256 | if painting.include?("required_door") | ||
257 | other_room = painting["required_door"].include?("room") ? painting["required_door"]["room"] : room_name | ||
258 | mentioned_doors.add("#{other_room} - #{painting["required_door"]["door"]}") | ||
259 | |||
260 | unless painting["enter_only"] then | ||
261 | puts "#{room_name} - #{painting["id"] || "painting"} :::: Should be marked enter_only if there is a required_door" | ||
262 | end | ||
263 | end | ||
264 | |||
265 | bad_subdirectives = [] | ||
266 | painting.keys.each do |key| | ||
267 | unless painting_directives.include?(key) then | ||
268 | bad_subdirectives << key | ||
269 | end | ||
270 | end | ||
271 | unless bad_subdirectives.empty? then | ||
272 | puts "#{room_name} - #{painting["id"] || "painting"} :::: Painting has the following invalid subdirectives: #{bad_subdirectives.join(", ")}" | ||
273 | end | ||
274 | end | ||
275 | |||
276 | (room["progression"] || {}).each do |progression_name, door_list| | ||
277 | door_list.each do |door| | ||
278 | if door.kind_of? Hash then | ||
279 | mentioned_doors.add("#{door["room"]} - #{door["door"]}") | ||
280 | else | ||
281 | mentioned_doors.add("#{room_name} - #{door}") | ||
282 | end | ||
283 | end | ||
284 | end | ||
285 | end | ||
286 | |||
287 | errored_rooms = mentioned_rooms - configured_rooms | ||
288 | unless errored_rooms.empty? then | ||
289 | puts "The folloring rooms are mentioned but do not exist: " + errored_rooms.to_s | ||
290 | end | ||
291 | |||
292 | errored_panels = mentioned_panels - configured_panels | ||
293 | unless errored_panels.empty? then | ||
294 | puts "The folloring panels are mentioned but do not exist: " + errored_panels.to_s | ||
295 | end | ||
296 | |||
297 | errored_doors = mentioned_doors - configured_doors | ||
298 | unless errored_doors.empty? then | ||
299 | puts "The folloring doors are mentioned but do not exist: " + errored_doors.to_s | ||
300 | end | ||
301 | |||
302 | door_groups.each do |group,num| | ||
303 | if num == 1 then | ||
304 | puts "Door group \"#{group}\" only has one door in it" | ||
305 | end | ||
306 | end | ||
307 | |||
308 | slashed_rooms = configured_rooms.select do |room| | ||
309 | room.include? "/" | ||
310 | end | ||
311 | unless slashed_rooms.empty? then | ||
312 | puts "The following rooms have slashes in their names: " + slashed_rooms.to_s | ||
313 | end | ||
314 | |||
315 | slashed_panels = configured_panels.select do |panel| | ||
316 | panel.include? "/" | ||
317 | end | ||
318 | unless slashed_panels.empty? then | ||
319 | puts "The following panels have slashes in their names: " + slashed_panels.to_s | ||
320 | end | ||
321 | |||
322 | slashed_doors = configured_doors.select do |door| | ||
323 | door.include? "/" | ||
324 | end | ||
325 | unless slashed_doors.empty? then | ||
326 | puts "The following doors have slashes in their names: " + slashed_doors.to_s | ||
327 | end | ||
328 | |||
329 | puts "#{configured_panels.size} panels (#{non_counting} non counting)" | ||