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)" | ||
