The Witness: v4 Content Update (#1338)

## New Features:

- EP Shuffle (Individual or Obelisk Sides, with varying difficulty levels)
- Ability to play without Puzzle Randomization (I.e. vanilla + AP layer)
- Pet the Dog to get a Puzzle Skip :) (No, really.)

## Changes:

- Starting inventory behavior improved (Consider starting items like doors and lasers logically even if they aren't part of the mode)
- Audio Log hint system improved (On low hint counts, you will no longer get the same locations hinted every time, i.e. always hints are shuffled)

## Fixes:

- Many fixes to symbol requirements
- Fixes to "shuffle_postgame" (What checks are evaluated as "postgame" in specific modes)
- Logically irrelevant doors are now "useful" instead of "progression"
This commit is contained in:
NewSoupVi 2023-02-01 21:18:07 +01:00 committed by GitHub
parent 3cef39a387
commit 4de7ebd8b0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
22 changed files with 2557 additions and 297 deletions

View File

@ -58,6 +58,31 @@ class ShuffleVaultBoxes(Toggle):
display_name = "Shuffle Vault Boxes"
class ShuffleEnvironmentalPuzzles(Choice):
"""
Add Environmental/Obelisk Puzzles into the location pool.
In "individual", every Environmental Puzzle sends an item.
In "obelisk_sides", completing every puzzle on one side of an Obelisk sends an item.
"""
display_name = "Shuffle Environmental Puzzles"
option_off = 0
option_individual = 1
option_obelisk_sides = 2
class ShuffleDog(Toggle):
"""Add petting the Town dog into the location pool."""
display_name = "Pet the Dog"
class EnvironmentalPuzzlesDifficulty(Choice):
display_name = "Environmental Puzzles Difficulty"
option_normal = 0
option_tedious = 1
option_eclipse = 2
class ShufflePostgame(Toggle):
"""Adds locations into the pool that are guaranteed to become accessible after or at the same time as your goal.
Use this if you don't play with release on victory. IMPORTANT NOTE: The possibility of your second
@ -81,6 +106,7 @@ class PuzzleRandomization(Choice):
display_name = "Puzzle Randomization"
option_sigma_normal = 0
option_sigma_expert = 1
option_none = 2
class MountainLasers(Range):
@ -133,6 +159,8 @@ the_witness_options: Dict[str, type] = {
"disable_non_randomized_puzzles": DisableNonRandomizedPuzzles,
"shuffle_discarded_panels": ShuffleDiscardedPanels,
"shuffle_vault_boxes": ShuffleVaultBoxes,
"shuffle_EPs": ShuffleEnvironmentalPuzzles,
"EP_difficulty": EnvironmentalPuzzlesDifficulty,
"shuffle_postgame": ShufflePostgame,
"victory_condition": VictoryCondition,
"mountain_lasers": MountainLasers,

View File

@ -1,6 +1,11 @@
First Hallway (First Hallway) - Entry - True - Tutorial - 0x00182:
Entry (Entry):
First Hallway (First Hallway) - Entry - True - First Hallway Room - 0x00064:
158000 - 0x00064 (Straight) - True - True
158001 - 0x00182 (Bend) - 0x00064 - True
159510 - 0x01848 (EP) - 0x00064 - True
First Hallway Room (First Hallway) - Tutorial - 0x00182:
158001 - 0x00182 (Bend) - True - True
Tutorial (Tutorial) - Outside Tutorial - 0x03629:
158002 - 0x00293 (Front Center) - True - True
@ -10,8 +15,11 @@ Tutorial (Tutorial) - Outside Tutorial - 0x03629:
158006 - 0x0A3B2 (Back Right) - True - True
158007 - 0x03629 (Gate Open) - 0x002C2 & 0x0A3B5 & 0x0A3B2 - True
158008 - 0x03505 (Gate Close) - 0x2FAF6 - True
158009 - 0x0C335 (Pillar) - True - Triangles - True
158009 - 0x0C335 (Pillar) - True - Triangles
158010 - 0x0C373 (Patio Floor) - 0x0C335 - Dots
159512 - 0x33530 (Cloud EP) - True - True
159513 - 0x33600 (Patio Flowers EP) - 0x0C373 - True
159517 - 0x3352F (Gate EP) - 0x03505 - True
Outside Tutorial (Outside Tutorial) - Outside Tutorial Path To Outpost - 0x03BA2:
158650 - 0x033D4 (Vault) - True - Dots & Black/White Squares
@ -31,6 +39,10 @@ Outside Tutorial (Outside Tutorial) - Outside Tutorial Path To Outpost - 0x03BA2
158025 - 0x00020 (Tree Row 8) - 0x0001F - Black/White Squares
158026 - 0x00021 (Tree Row 9) - 0x00020 - Black/White Squares
Door - 0x03BA2 (Outpost Path) - 0x0A3B5
159511 - 0x03D06 (Garden EP) - True - True
159514 - 0x28A2F (Town Sewer EP) - True - True
159516 - 0x334A3 (Path EP) - True - True
159500 - 0x035C7 (Tractor EP) - True - True
Outside Tutorial Path To Outpost (Outside Tutorial) - Outside Tutorial Outpost - 0x0A170:
158011 - 0x0A171 (Outpost Entry Panel) - True - Dots & Full Dots
@ -41,12 +53,14 @@ Outside Tutorial Outpost (Outside Tutorial) - Outside Tutorial - 0x04CA3:
Door - 0x04CA3 (Outpost Exit) - 0x04CA4
158600 - 0x17CFB (Discard) - True - Triangles
Main Island () - Outside Tutorial - True:
Main Island (Main Island) - Outside Tutorial - True:
159550 - 0x28B91 (Thundercloud EP) - 0x09F98 & 0x012FB - True
Outside Glass Factory (Glass Factory) - Main Island - True - Inside Glass Factory - 0x01A29:
158027 - 0x01A54 (Entry Panel) - True - Symmetry
Door - 0x01A29 (Entry) - 0x01A54
158601 - 0x3C12B (Discard) - True - Triangles
159002 - 0x28B8A (Vase EP) - 0x01A54 - True
Inside Glass Factory (Glass Factory) - Inside Glass Factory Behind Back Wall - 0x0D7ED:
158028 - 0x00086 (Back Wall 1) - True - Symmetry
@ -95,6 +109,7 @@ Symmetry Island Lower (Symmetry Island) - Symmetry Island Upper - 0x18269:
158063 - 0x00B8D (Scenery Outlines 5) - 0x00B53 - Symmetry
158064 - 0x1C349 (Upper Panel) - 0x00076 - Symmetry & Dots
Door - 0x18269 (Upper) - 0x1C349
159000 - 0x0332B (Glass Factory Black Line Reflection EP) - True - True
Symmetry Island Upper (Symmetry Island):
158065 - 0x00A52 (Yellow 1) - True - Symmetry & Colored Dots
@ -104,7 +119,8 @@ Symmetry Island Upper (Symmetry Island):
158069 - 0x00A64 (Blue 2) - 0x00A61 & 0x00A52 - Symmetry & Colored Dots
158070 - 0x00A68 (Blue 3) - 0x00A64 & 0x00A57 - Symmetry & Colored Dots
158700 - 0x0360D (Laser Panel) - 0x00A68 - True
Laser - 0x00509 (Laser) - 0x0360D - True
Laser - 0x00509 (Laser) - 0x0360D
159001 - 0x03367 (Glass Factory Black Line EP) - True - True
Orchard (Orchard) - Main Island - True - Orchard Beyond First Gate - 0x03307:
158071 - 0x00143 (Apple Tree 1) - True - True
@ -134,9 +150,18 @@ Desert Outside (Desert) - Main Island - True - Desert Floodlight Room - 0x09FEE:
158084 - 0x09F94 (Surface 8) - 0x0A053 & 0x09F86 - True
158085 - 0x09F86 (Surface 8 Control) - 0x0A053 - True
158086 - 0x0C339 (Light Room Entry Panel) - 0x09F94 - True
Door - 0x09FEE (Light Room Entry) - 0x0C339 - True
Door - 0x09FEE (Light Room Entry) - 0x0C339
158701 - 0x03608 (Laser Panel) - 0x012D7 & 0x0A15F - True
Laser - 0x012FB (Laser) - 0x03608
159020 - 0x3351D (Sand Snake EP) - True - True
159030 - 0x0053C (Facade Right EP) - True - True
159031 - 0x00771 (Facade Left EP) - True - True
159032 - 0x335C8 (Stairs Left EP) - True - True
159033 - 0x335C9 (Stairs Right EP) - True - True
159036 - 0x220E4 (Broken Wall Straight EP) - True - True
159037 - 0x220E5 (Broken Wall Bend EP) - True - True
159040 - 0x334B9 (Shore EP) - True - True
159041 - 0x334BC (Island EP) - True - True
Desert Floodlight Room (Desert) - Desert Pond Room - 0x0C2C3:
158087 - 0x09FAA (Light Control) - True - True
@ -153,6 +178,8 @@ Desert Pond Room (Desert) - Desert Water Levels Room - 0x0A24B:
158095 - 0x18313 (Pond Room 5) - 0x0078D - True
158096 - 0x0A249 (Flood Room Entry Panel) - 0x18313 - True
Door - 0x0A24B (Flood Room Entry) - 0x0A249
159043 - 0x0A14C (Pond Room Near Reflection EP) - True - True
159044 - 0x0A14D (Pond Room Far Reflection EP) - True - True
Desert Water Levels Room (Desert) - Desert Elevator Room - 0x0C316:
158097 - 0x1C2DF (Reduce Water Level Far Left) - True - True
@ -170,6 +197,7 @@ Desert Water Levels Room (Desert) - Desert Elevator Room - 0x0C316:
158109 - 0x17ECA (Flood Room 5) - 0x0117A & 0x1C260 & 0x1831C - True
158110 - 0x18076 (Flood Room 6) - 0x17ECA & 0x1C260 & 0x1831C - True
Door - 0x0C316 (Elevator Room Entry) - 0x18076
159034 - 0x337F8 (Flood Room EP) - 0x1C2DF - True
Desert Elevator Room (Desert) - Desert Lowest Level Inbetween Shortcuts - 0x012FB:
158111 - 0x17C31 (Final Transparent) - True - True
@ -178,22 +206,31 @@ Desert Elevator Room (Desert) - Desert Lowest Level Inbetween Shortcuts - 0x012F
158115 - 0x0A15C (Final Bent 1) - True - True
158116 - 0x09FFF (Final Bent 2) - 0x0A15C - True
158117 - 0x0A15F (Final Bent 3) - 0x09FFF - True
159035 - 0x037BB (Elevator EP) - 0x012FB - True
Desert Lowest Level Inbetween Shortcuts (Desert):
Outside Quarry (Quarry) - Main Island - True - Quarry Between Entrys - 0x09D6F:
Outside Quarry (Quarry) - Main Island - True - Quarry Between Entrys - 0x09D6F - Quarry Elevator - TrueOneWay:
158118 - 0x09E57 (Entry 1 Panel) - True - Black/White Squares
158120 - 0x17CC4 (Elevator Control) - 0x0367C - Dots & Eraser
158603 - 0x17CF0 (Discard) - True - Triangles
158702 - 0x03612 (Laser Panel) - 0x0A3D0 & 0x0367C - Eraser & Shapers
Laser - 0x01539 (Laser) - 0x03612
Door - 0x09D6F (Entry 1) - 0x09E57
159404 - 0x28A4A (Shore EP) - True - True
159410 - 0x334B6 (Entrance Pipe EP) - True - True
159412 - 0x28A4C (Sand Pile EP) - True - True
159420 - 0x289CF (Rock Line EP) - True - True
159421 - 0x289D1 (Rock Line Reflection EP) - True - True
Quarry Elevator (Quarry):
158120 - 0x17CC4 (Elevator Control) - 0x0367C - Dots & Eraser
159403 - 0x17CB9 (Railroad EP) - 0x17CC4 - True
Quarry Between Entrys (Quarry) - Quarry - 0x17C07:
158119 - 0x17C09 (Entry 2 Panel) - True - Shapers
Door - 0x17C07 (Entry 2) - 0x17C09
Quarry (Quarry) - Quarry Mill Ground Floor - 0x02010:
Quarry (Quarry) - Quarry Mill Ground Floor - 0x02010 - Quarry Elevator - 0x17CC4:
158121 - 0x01E5A (Mill Entry Left Panel) - True - Black/White Squares
158122 - 0x01E59 (Mill Entry Right Panel) - True - Dots
Door - 0x02010 (Mill Entry) - 0x01E59 & 0x01E5A
@ -229,6 +266,8 @@ Quarry Mill Upper Floor (Quarry Mill) - Quarry Mill Middle Floor - 0x03676 & 0x0
Door - 0x0368A (Stairs) - 0x03677
158143 - 0x3C125 (Control Room Left) - 0x0367C - Black/White Squares & Dots & Eraser
158144 - 0x0367C (Control Room Right) - 0x014E9 - Colored Squares & Dots & Eraser
159411 - 0x0069D (Ramp EP) - 0x03676 & 0x275FF - True
159413 - 0x00614 (Lift EP) - 0x275FF & 0x03675 - True
Quarry Boathouse (Quarry Boathouse) - Quarry - True - Quarry Boathouse Upper Front - 0x03852 - Quarry Boathouse Behind Staircase - 0x2769B:
158146 - 0x034D4 (Intro Left) - True - Stars
@ -250,6 +289,7 @@ Door - 0x17C50 (First Barrier) - 0x021AE
Quarry Boathouse Upper Middle (Quarry Boathouse) - Quarry Boathouse Upper Back - 0x03858:
158154 - 0x03858 (Ramp Horizontal Control) - True - Shapers & Eraser
159402 - 0x00859 (Moving Ramp EP) - 0x03858 & 0x03852 & 0x3865F - True
Quarry Boathouse Upper Back (Quarry Boathouse) - Quarry Boathouse Upper Middle - 0x3865F:
158155 - 0x38663 (Second Barrier Panel) - True - True
@ -267,6 +307,7 @@ Door - 0x3865F (Second Barrier) - 0x38663
158167 - 0x0A3CB (Back Second Row 1) - 0x09DB4 - Stars & Eraser & Shapers
158168 - 0x0A3CC (Back Second Row 2) - 0x0A3CB - Stars & Eraser & Shapers
158169 - 0x0A3D0 (Back Second Row 3) - 0x0A3CC - Stars & Eraser & Shapers
159401 - 0x005F6 (Hook EP) - 0x275FA & 0x03852 & 0x3865F - True
Shadows (Shadows) - Main Island - True - Shadows Ledge - 0x19B24 - Shadows Laser Room - 0x194B2 & 0x19665:
158170 - 0x334DB (Door Timer Outside) - True - True
@ -289,6 +330,7 @@ Door - 0x194B2 (Laser Entry Right) - 0x1972F
158185 - 0x197E8 (Near 4) - 0x197E0 - True
158186 - 0x197E5 (Near 5) - 0x197E8 - True
Door - 0x19665 (Laser Entry Left) - 0x197E5
159400 - 0x28A7B (Quarry Mill Rooftop Vent EP) - True - True
Shadows Ledge (Shadows) - Shadows - 0x1855B - Quarry - 0x19865 & 0x0A2DF:
158187 - 0x334DC (Door Timer Inside) - True - True
@ -306,12 +348,19 @@ Shadows Laser Room (Shadows):
158703 - 0x19650 (Laser Panel) - True - True
Laser - 0x181B3 (Laser) - 0x19650
Treehouse Beach (Treehouse Beach) - Main Island - True:
159200 - 0x0053D (Rock Shadow EP) - True - True
159201 - 0x0053E (Sand Shadow EP) - True - True
159212 - 0x220BD (Both Orange Bridges EP) - 0x17DA2 & 0x17DDB - True
Keep (Keep) - Main Island - True - Keep 2nd Maze - 0x01954 - Keep 2nd Pressure Plate - 0x01BEC:
158193 - 0x00139 (Hedge Maze 1) - True - True
158197 - 0x0A3A8 (Reset Pressure Plates 1) - True - True
158198 - 0x033EA (Pressure Plates 1) - 0x0A3A8 - Dots
Door - 0x01954 (Hedge Maze 1 Exit) - 0x00139
Door - 0x01BEC (Pressure Plates 1 Exit) - 0x033EA
159430 - 0x03E77 (Red Flowers EP) - True - True
159431 - 0x03E7C (Purple Flowers EP) - True - True
Keep 2nd Maze (Keep) - Keep - 0x018CE - Keep 3rd Maze - 0x019D8:
Door - 0x018CE (Hedge Maze 2 Shortcut) - 0x00139
@ -350,6 +399,13 @@ Shipwreck (Shipwreck) - Keep 3rd Pressure Plate - True:
158654 - 0x00AFB (Vault) - True - Symmetry & Sound Dots & Colored Dots
158655 - 0x03535 (Vault Box) - 0x00AFB - True
158605 - 0x17D28 (Discard) - True - Triangles
159220 - 0x03B22 (Circle Far EP) - True - True
159221 - 0x03B23 (Circle Left EP) - True - True
159222 - 0x03B24 (Circle Near EP) - True - True
159224 - 0x03A79 (Stern EP) - True - True
159225 - 0x28ABD (Rope Inner EP) - True - True
159226 - 0x28ABE (Rope Outer EP) - True - True
159230 - 0x3388F (Couch EP) - 0x17CDF | 0x0A054 - True
Keep Tower (Keep) - Keep - 0x04F8F:
158206 - 0x0361B (Tower Shortcut Panel) - True - True
@ -357,6 +413,13 @@ Door - 0x04F8F (Tower Shortcut) - 0x0361B
158704 - 0x0360E (Laser Panel Hedges) - 0x01A0F & 0x019E7 & 0x019DC & 0x00139 - True
158705 - 0x03317 (Laser Panel Pressure Plates) - 0x01D3F - Shapers & Black/White Squares & Colored Squares & Stars & Stars + Same Colored Symbol & Dots
Laser - 0x014BB (Laser) - 0x0360E | 0x03317
159240 - 0x033BE (Pressure Plates 1 EP) - 0x033EA - True
159241 - 0x033BF (Pressure Plates 2 EP) - 0x01BE9 - True
159242 - 0x033DD (Pressure Plates 3 EP) - 0x01CD3 & 0x01CD5 - True
159243 - 0x033E5 (Pressure Plates 4 Left Exit EP) - 0x01D3F - True
159244 - 0x018B6 (Pressure Plates 4 Right Exit EP) - 0x01D3F - True
159250 - 0x28AE9 (Path EP) - True - True
159251 - 0x3348F (Hedges EP) - True - True
Outside Monastery (Monastery) - Main Island - True - Inside Monastery - 0x0C128 & 0x0C153 - Monastery Garden - 0x03750:
158207 - 0x03713 (Shortcut Panel) - True - True
@ -371,6 +434,13 @@ Door - 0x0C153 (Entry Outer) - 0x00C92
Door - 0x03750 (Garden Entry) - 0x00037
158706 - 0x17CA4 (Laser Panel) - 0x193A6 - True
Laser - 0x17C65 (Laser) - 0x17CA4
159130 - 0x006E5 (Facade Left Near EP) - True - True
159131 - 0x006E6 (Facade Left Far Short EP) - True - True
159132 - 0x006E7 (Facade Left Far Long EP) - True - True
159136 - 0x03DAB (Facade Right Near EP) - True - True
159137 - 0x03DAC (Facade Left Stairs EP) - True - True
159138 - 0x03DAD (Facade Right Stairs EP) - True - True
159140 - 0x03E01 (Grass Stairs EP) - True - True
Inside Monastery (Monastery):
158213 - 0x09D9B (Shutters Control) - True - Dots
@ -378,6 +448,9 @@ Inside Monastery (Monastery):
158215 - 0x193AA (Inside 2) - 0x193A7 - True
158216 - 0x193AB (Inside 3) - 0x193AA - True
158217 - 0x193A6 (Inside 4) - 0x193AB - True
159133 - 0x034A7 (Left Shutter EP) - 0x09D9B - True
159134 - 0x034AD (Middle Shutter EP) - 0x09D9B - True
159135 - 0x034AF (Right Shutter EP) - 0x09D9B - True
Monastery Garden (Monastery):
@ -404,12 +477,24 @@ Door - 0x03BB0 (Church Entry) - 0x28A0D
Door - 0x28AA2 (Maze Stairs) - 0x28A79
158241 - 0x17F5F (Windmill Entry Panel) - True - Dots
Door - 0x1845B (Windmill Entry) - 0x17F5F
159010 - 0x037B6 (Windmill First Blade EP) - 0x17D02 - True
159011 - 0x037B2 (Windmill Second Blade EP) - 0x17D02 - True
159012 - 0x000F7 (Windmill Third Blade EP) - 0x17D02 - True
159540 - 0x03335 (Tower Underside First EP) - True - True
159541 - 0x03412 (Tower Underside Second EP) - True - True
159542 - 0x038A6 (Tower Underside Third EP) - True - True
159543 - 0x038AA (Tower Underside Fourth EP) - True - True
159545 - 0x03E40 (RGB House Green EP) - 0x334D8 - True
159546 - 0x28B8E (Maze Bridge Underside EP) - 0x2896A - True
159552 - 0x03BCF (Black Line Redirect EP) - True - True
159800 - 0xFFF80 (Pet the Dog) - True - True
Town Inside Cargo Box (Town):
158606 - 0x17D01 (Cargo Box Discard) - True - Triangles
Town Maze Rooftop (Town) - Town Red Rooftop - 0x2896A:
158229 - 0x2896A (Maze Rooftop Bridge Control) - True - Shapers
159544 - 0x03E3F (RGB House Red EP) - 0x334D8 - True
Town Red Rooftop (Town):
158607 - 0x17C71 (Rooftop Discard) - True - Triangles
@ -425,6 +510,7 @@ Town Wooden Rooftop (Town):
Town Church (Town):
158227 - 0x28A69 (Church Lattice) - 0x03BB0 - True
159553 - 0x03BD1 (Black Line Church EP) - True - True
RGB House (Town) - RGB Room - 0x2897B:
158242 - 0x034E4 (Sound Room Left) - True - True
@ -445,6 +531,8 @@ Door - 0x2779A (Fourth Door) - 0x28B39
Town Tower Top (Town):
158708 - 0x032F5 (Laser Panel) - True - True
Laser - 0x032F9 (Laser) - 0x032F5
159422 - 0x33692 (Brown Bridge EP) - True - True
159551 - 0x03BCE (Black Line Tower EP) - True - True
Windmill Interior (Windmill) - Theater - 0x17F88:
158247 - 0x17D02 (Turn Control) - True - Dots
@ -464,6 +552,10 @@ Theater (Theater) - Town - 0x0A16D | 0x3CCDF:
Door - 0x0A16D (Exit Left) - 0x0A168
Door - 0x3CCDF (Exit Right) - 0x33AB2
158608 - 0x17CF7 (Discard) - True - Triangles
159554 - 0x339B6 (Eclipse EP) - 0x03549 & 0x0A16D & 0x3CCDF - True
159555 - 0x33A29 (Window EP) - 0x03553 - True
159556 - 0x33A2A (Door EP) - 0x03553 - True
159558 - 0x33B06 (Church EP) - 0x0354E - True
Jungle (Jungle) - Main Island - True - Outside Jungle River - 0x3873B - Boat - 0x17CDF:
158251 - 0x17CDF (Shore Boat Spawn) - True - Boat
@ -487,12 +579,24 @@ Door - 0x1475B (Popup Wall) - 0x17CAB
Laser - 0x00274 (Laser) - 0x03616
158266 - 0x337FA (Laser Shortcut Panel) - True - True
Door - 0x3873B (Laser Shortcut) - 0x337FA
159100 - 0x03ABC (Long Arch Moss EP) - True - True
159101 - 0x03ABE (Straight Left Moss EP) - True - True
159102 - 0x03AC0 (Pop-up Wall Moss EP) - True - True
159103 - 0x03AC4 (Short Arch Moss EP) - True - True
159150 - 0x289F4 (Entrance EP) - True - True
159151 - 0x289F5 (Tree Halo EP) - True - True
159350 - 0x035CB (Bamboo CCW EP) - True - True
159351 - 0x035CF (Bamboo CW EP) - True - True
Outside Jungle River (River) - Main Island - True - Monastery Garden - 0x0CF2A:
158267 - 0x17CAA (Monastery Shortcut Panel) - True - True
Door - 0x0CF2A (Monastery Shortcut) - 0x17CAA
158663 - 0x15ADD (Vault) - True - Black/White Squares & Dots
158664 - 0x03702 (Vault Box) - 0x15ADD - True
159110 - 0x03AC5 (Green Leaf Moss EP) - True - True
159120 - 0x03BE2 (Monastery Garden Left EP) - 0x03750 - True
159121 - 0x03BE3 (Monastery Garden Right EP) - True - True
159122 - 0x0A409 (Monastery Wall EP) - True - True
Outside Bunker (Bunker) - Main Island - True - Bunker - 0x0C2A4:
158268 - 0x17C2E (Entry Panel) - True - Black/White Squares & Colored Squares
@ -524,16 +628,25 @@ Bunker Ultraviolet Room (Bunker) - Bunker Elevator Section - 0x0A08D:
158285 - 0x17E67 (UV Room 2) - 0x17E63 & 0x34BC6 - Colored Squares & Black/White Squares
Door - 0x0A08D (Elevator Room Entry) - 0x17E67
Bunker Elevator Section (Bunker) - Bunker Laser Platform - 0x0A079:
Bunker Elevator Section (Bunker) - Bunker Elevator - TrueOneWay:
159311 - 0x035F5 (Tinted Door EP) - 0x17C79 - True
Bunker Elevator (Bunker) - Bunker Laser Platform - 0x0A079 - Bunker Green Room - 0x0A079 - Bunker Laser Platform - 0x0A079 - Outside Bunker - 0x0A079:
158286 - 0x0A079 (Elevator Control) - True - Colored Squares & Black/White Squares
Bunker Laser Platform (Bunker):
Bunker Green Room (Bunker) - Bunker Elevator - TrueOneWay:
159310 - 0x000D3 (Green Room Flowers EP) - True - True
Bunker Laser Platform (Bunker) - Bunker Elevator - TrueOneWay:
158710 - 0x09DE0 (Laser Panel) - True - True
Laser - 0x0C2B2 (Laser) - 0x09DE0
Outside Swamp (Swamp) - Swamp Entry Area - 0x00C1C - Main Island - True:
158287 - 0x0056E (Entry Panel) - True - Shapers
Door - 0x00C1C (Entry) - 0x0056E
159321 - 0x03603 (Purple Sand Middle EP) - 0x17E2B - True
159322 - 0x03601 (Purple Sand Top EP) - 0x17E2B - True
159327 - 0x035DE (Purple Sand Bottom EP) - True - True
Swamp Entry Area (Swamp) - Swamp Sliding Bridge - TrueOneWay:
158288 - 0x00469 (Intro Front 1) - True - Shapers
@ -553,6 +666,8 @@ Swamp Entry Area (Swamp) - Swamp Sliding Bridge - TrueOneWay:
Swamp Sliding Bridge (Swamp) - Swamp Entry Area - 0x00609 - Swamp Near Platform - 0x00609:
158302 - 0x00609 (Sliding Bridge) - True - Shapers
159342 - 0x0105D (Sliding Bridge Left EP) - 0x00609 - True
159343 - 0x0A304 (Sliding Bridge Right EP) - 0x00609 - True
Swamp Near Platform (Swamp) - Swamp Cyan Underwater - 0x04B7F - Swamp Near Boat - 0x38AE6 - Swamp Between Bridges Near - 0x184B7 - Swamp Sliding Bridge - TrueOneWay:
158313 - 0x00982 (Platform Row 1) - True - Shapers
@ -572,6 +687,7 @@ Swamp Cyan Underwater (Swamp):
158310 - 0x013E6 (Cyan Underwater 4) - 0x00005 - Shapers & Negative Shapers
158311 - 0x00596 (Cyan Underwater 5) - 0x013E6 - Shapers & Negative Shapers
158312 - 0x18488 (Cyan Underwater Sliding Bridge Control) - True - Shapers
159340 - 0x03AA6 (Cyan Underwater Sliding Bridge EP) - 0x18488 - True
Swamp Between Bridges Near (Swamp) - Swamp Between Bridges Far - 0x18507:
158303 - 0x00999 (Between Bridges Near Row 1) - 0x00990 - Shapers
@ -596,6 +712,8 @@ Door - 0x305D5 (Red Underwater Exit) - 0x014D1
Swamp Rotating Bridge (Swamp) - Swamp Between Bridges Far - 0x181F5 - Swamp Near Boat - 0x181F5 - Swamp Purple Area - 0x181F5:
158327 - 0x181F5 (Rotating Bridge) - True - Rotated Shapers & Shapers
159331 - 0x016B2 (Rotating Bridge CCW EP) - 0x181F5 - True
159334 - 0x036CE (Rotating Bridge CW EP) - 0x181F5 - True
Swamp Near Boat (Swamp) - Swamp Rotating Bridge - TrueOneWay - Swamp Blue Underwater - 0x18482:
158328 - 0x09DB8 (Boat Spawn) - True - Boat
@ -605,12 +723,16 @@ Swamp Near Boat (Swamp) - Swamp Rotating Bridge - TrueOneWay - Swamp Blue Underw
158332 - 0x00E3A (Beyond Rotating Bridge 4) - 0x00C2E - Rotated Shapers
158339 - 0x17E2B (Long Bridge Control) - True - Rotated Shapers & Shapers
Door - 0x18482 (Blue Water Pump) - 0x00E3A
159332 - 0x3365F (Boat EP) - 0x09DB8 - True
159333 - 0x03731 (Long Bridge Side EP) - 0x17E2B - True
Swamp Purple Area (Swamp) - Swamp Rotating Bridge - TrueOneWay - Swamp Purple Underwater - 0x0A1D6:
Door - 0x0A1D6 (Purple Water Pump) - 0x00E3A
Swamp Purple Underwater (Swamp):
158333 - 0x009A6 (Purple Underwater) - True - Shapers
159330 - 0x03A9E (Purple Underwater Right EP) - True - True
159336 - 0x03A93 (Purple Underwater Left EP) - True - True
Swamp Blue Underwater (Swamp):
158334 - 0x009AB (Blue Underwater 1) - True - Shapers & Negative Shapers
@ -634,6 +756,7 @@ Treehouse Entry Area (Treehouse) - Treehouse Between Doors - 0x0C309:
158343 - 0x17C95 (Boat Spawn) - True - Boat
158344 - 0x0288C (First Door Panel) - True - Stars
Door - 0x0C309 (First Door) - 0x0288C
159210 - 0x33721 (Buoy EP) - 0x17C95 - True
Treehouse Between Doors (Treehouse) - Treehouse Yellow Bridge - 0x0C310:
158345 - 0x02886 (Second Door Panel) - True - Stars
@ -691,7 +814,7 @@ Treehouse Second Purple Bridge (Treehouse) - Treehouse Left Orange Bridge - 0x17
158367 - 0x17D91 (Second Purple Bridge 6) - 0x17BDF - Stars & Colored Squares
158368 - 0x17DC6 (Second Purple Bridge 7) - 0x17D91 - Stars & Colored Squares
Treehouse Left Orange Bridge (Treehouse) - Treehouse Laser Room Front Platform - 0x17DDB - Treehouse Laser Room Back Platform - 0x17DDB:
Treehouse Left Orange Bridge (Treehouse) - Treehouse Laser Room Front Platform - 0x17DDB - Treehouse Laser Room Back Platform - 0x17DDB - Treehouse Burned House - 0x17DDB:
158376 - 0x17DB3 (Left Orange Bridge 1) - True - Stars & Black/White Squares & Stars + Same Colored Symbol
158377 - 0x17DB5 (Left Orange Bridge 2) - 0x17DB3 - Stars & Black/White Squares & Stars + Same Colored Symbol
158378 - 0x17DB6 (Left Orange Bridge 3) - 0x17DB5 - Stars & Black/White Squares & Stars + Same Colored Symbol
@ -708,7 +831,7 @@ Treehouse Left Orange Bridge (Treehouse) - Treehouse Laser Room Front Platform -
158389 - 0x17DB0 (Left Orange Bridge 14) - 0x17DAE - Stars & Black/White Squares & Stars + Same Colored Symbol
158390 - 0x17DDB (Left Orange Bridge 15) - 0x17DB0 - Stars & Black/White Squares & Stars + Same Colored Symbol
Treehouse Green Bridge (Treehouse):
Treehouse Green Bridge (Treehouse) - Treehouse Green Bridge Front House - 0x17E61 - Treehouse Green Bridge Left House - 0x17E61:
158369 - 0x17E3C (Green Bridge 1) - True - Stars & Shapers
158370 - 0x17E4D (Green Bridge 2) - 0x17E3C - Stars & Shapers
158371 - 0x17E4F (Green Bridge 3) - 0x17E4D - Stars & Shapers & Rotated Shapers
@ -716,7 +839,12 @@ Treehouse Green Bridge (Treehouse):
158373 - 0x17E5B (Green Bridge 5) - 0x17E52 - Stars & Shapers & Stars + Same Colored Symbol
158374 - 0x17E5F (Green Bridge 6) - 0x17E5B - Stars & Shapers & Negative Shapers & Stars + Same Colored Symbol
158375 - 0x17E61 (Green Bridge 7) - 0x17E5F - Stars & Shapers & Rotated Shapers
158610 - 0x17FA9 (Green Bridge Discard) - 0x17E61 - Triangles
Treehouse Green Bridge Front House (Treehouse):
158610 - 0x17FA9 (Green Bridge Discard) - True - Triangles
Treehouse Green Bridge Left House (Treehouse):
159211 - 0x220A7 (Right Orange Bridge EP) - 0x17DA2 - True
Treehouse Laser Room Front Platform (Treehouse) - Treehouse Laser Room - 0x0C323:
Door - 0x0C323 (Laser House Entry) - 0x17DA2 & 0x2700B & 0x17DDB
@ -724,6 +852,9 @@ Door - 0x0C323 (Laser House Entry) - 0x17DA2 & 0x2700B & 0x17DDB
Treehouse Laser Room Back Platform (Treehouse):
158611 - 0x17FA0 (Laser Discard) - True - Triangles
Treehouse Burned House (Treehouse):
159202 - 0x00769 (Burned House Beach EP) - True - True
Treehouse Laser Room (Treehouse):
158712 - 0x03613 (Laser Panel) - True - True
158403 - 0x17CBC (Laser House Door Timer Inside) - True - True
@ -733,12 +864,19 @@ Mountainside (Mountainside) - Main Island - True - Mountaintop - True:
158612 - 0x17C42 (Discard) - True - Triangles
158665 - 0x002A6 (Vault) - True - Symmetry & Colored Dots & Black/White Squares & Dots
158666 - 0x03542 (Vault Box) - 0x002A6 - True
159301 - 0x335AE (Cloud Cycle EP) - True - True
159325 - 0x33505 (Bush EP) - True - True
159335 - 0x03C07 (Apparent River EP) - True - True
Mountaintop (Mountaintop) - Mountain Top Layer - 0x17C34:
158405 - 0x0042D (River Shape) - True - True
158406 - 0x09F7F (Box Short) - 7 Lasers - True
158407 - 0x17C34 (Trap Door Triple Exit) - 0x09F7F - Stars & Black/White Squares & Stars + Same Colored Symbol
158800 - 0xFFF00 (Box Long) - 7 Lasers & 11 Lasers & 0x17C34 - True
159300 - 0x001A3 (River Shape EP) - True - True
159320 - 0x3370E (Arch Black EP) - True - True
159324 - 0x336C8 (Arch White Right EP) - True - True
159326 - 0x3369A (Arch White Left EP) - True - True
Mountain Top Layer (Mountain Floor 1) - Mountain Top Layer Bridge - 0x09E39:
158408 - 0x09E39 (Light Bridge Controller) - True - Black/White Squares & Colored Squares & Eraser
@ -763,7 +901,7 @@ Mountain Top Layer Bridge (Mountain Floor 1) - Mountain Floor 2 - 0x09E54:
158425 - 0x09EAF (Trash Pillar 2) - 0x09EAD - Black/White Squares & Shapers
Door - 0x09E54 (Exit) - 0x09EAF & 0x09F6E & 0x09E6B & 0x09E7B
Mountain Floor 2 (Mountain Floor 2) - Mountain Floor 2 Light Bridge Room Near - 0x09FFB - Mountain Floor 2 Blue Bridge - 0x09E86:
Mountain Floor 2 (Mountain Floor 2) - Mountain Floor 2 Light Bridge Room Near - 0x09FFB - Mountain Floor 2 Blue Bridge - 0x09E86 - Mountain Pink Bridge EP - TrueOneWay:
158426 - 0x09FD3 (Near Row 1) - True - Stars & Colored Squares & Stars + Same Colored Symbol
158427 - 0x09FD4 (Near Row 2) - 0x09FD3 - Stars & Colored Squares & Stars + Same Colored Symbol
158428 - 0x09FD6 (Near Row 3) - 0x09FD4 - Stars & Colored Squares & Stars + Same Colored Symbol
@ -779,7 +917,7 @@ Door - 0x09EDD (Elevator Room Entry) - 0x09ED8 & 0x09E86
Mountain Floor 2 Light Bridge Room Near (Mountain Floor 2):
158431 - 0x09E86 (Light Bridge Controller Near) - True - Stars & Stars + Same Colored Symbol & Rotated Shapers & Eraser
Mountain Floor 2 Beyond Bridge (Mountain Floor 2) - Mountain Floor 2 Light Bridge Room Far - 0x09E07:
Mountain Floor 2 Beyond Bridge (Mountain Floor 2) - Mountain Floor 2 Light Bridge Room Far - 0x09E07 - Mountain Pink Bridge EP - TrueOneWay:
158432 - 0x09FCC (Far Row 1) - True - Dots
158433 - 0x09FCE (Far Row 2) - 0x09FCC - Black/White Squares
158434 - 0x09FCF (Far Row 3) - 0x09FCE - Stars
@ -805,14 +943,19 @@ Mountain Third Layer (Mountain Bottom Floor) - Mountain Floor 2 Elevator - TrueO
158444 - 0x09FDA (Giant Puzzle) - 0x09FC1 & 0x09F8E & 0x09F01 & 0x09EFF - Shapers & Symmetry
Door - 0x09F89 (Exit) - 0x09FDA
Mountain Bottom Floor (Mountain Bottom Floor) - Mountain Bottom Floor Rock - 0x17FA2 - Final Room - 0x0C141:
Mountain Bottom Floor (Mountain Bottom Floor) - Mountain Bottom Floor Rock - 0x17FA2 - Final Room - 0x0C141 - Mountain Pink Bridge EP - TrueOneWay:
158614 - 0x17FA2 (Discard) - 0xFFF00 - Triangles
158445 - 0x01983 (Final Room Entry Left) - True - Shapers & Stars
158446 - 0x01987 (Final Room Entry Right) - True - Colored Squares & Dots
Door - 0x0C141 (Final Room Entry) - 0x01983 & 0x01987
159313 - 0x09D5D (Yellow Bridge EP) - 0x09E86 & 0x09ED8 - True
159314 - 0x09D5E (Blue Bridge EP) - 0x09E86 & 0x09ED8 - True
Mountain Pink Bridge EP (Mountain Floor 2):
159312 - 0x09D63 (Pink Bridge EP) - 0x09E39 - True
Mountain Bottom Floor Rock (Mountain Bottom Floor) - Mountain Bottom Floor - 0x17F33 - Mountain Path to Caves - 0x17F33:
Door - 0x17F33 (Rock Open) - True
Door - 0x17F33 (Rock Open) - True - True
Mountain Path to Caves (Mountain Bottom Floor) - Mountain Bottom Floor Rock - 0x334E1 - Caves - 0x2D77D:
158447 - 0x00FF8 (Caves Entry Panel) - True - Triangles & Black/White Squares
@ -872,6 +1015,7 @@ Door - 0x019A5 (Pillar Door) - 0x09DD5
Door - 0x2D73F (Mountain Shortcut Door) - 0x021D7
158450 - 0x17CF2 (Swamp Shortcut Panel) - True - Triangles
Door - 0x2D859 (Swamp Shortcut Door) - 0x17CF2
159341 - 0x3397C (Skylight EP) - True - True
Path to Challenge (Caves) - Challenge - 0x0A19A:
158477 - 0x0A16E (Challenge Entry Panel) - True - Stars & Shapers & Stars + Same Colored Symbol
@ -900,6 +1044,7 @@ Challenge (Challenge) - Tunnels - 0x0348A:
158667 - 0x0356B (Vault Box) - 0x1C31A & 0x1C319 - True
158518 - 0x039B4 (Tunnels Entry Panel) - True - Triangles
Door - 0x0348A (Tunnels Entry) - 0x039B4
159530 - 0x28B30 (Water EP) - True - True
Tunnels (Tunnels) - Windmill Interior - 0x27739 - Desert Lowest Level Inbetween Shortcuts - 0x27263 - Town - 0x09E87:
158668 - 0x2FAF6 (Vault Box) - True - True
@ -909,6 +1054,7 @@ Door - 0x27739 (Theater Shortcut) - 0x27732
Door - 0x27263 (Desert Shortcut) - 0x2773D
158521 - 0x09E85 (Town Shortcut Panel) - True - Triangles
Door - 0x09E87 (Town Shortcut) - 0x09E85
159557 - 0x33A20 (Theater Flowers EP) - 0x03553 & Theater to Tunnels - True
Final Room (Mountain Final Room) - Elevator - 0x339BB & 0x33961:
158522 - 0x0383A (Right Pillar 1) - True - Stars
@ -930,3 +1076,50 @@ Elevator (Mountain Final Room):
158536 - 0x3D9A9 (Elevator Start) - 0x3D9AA & 7 Lasers | 0x3D9A8 & 7 Lasers - True
Boat (Boat) - Main Island - TrueOneWay - Swamp Near Boat - TrueOneWay - Treehouse Entry Area - TrueOneWay - Quarry Boathouse Behind Staircase - TrueOneWay - Inside Glass Factory Behind Back Wall - TrueOneWay:
159042 - 0x22106 (Desert EP) - True - True
159223 - 0x03B25 (Shipwreck CCW Underside EP) - True - True
159231 - 0x28B29 (Shipwreck Green EP) - True - True
159232 - 0x28B2A (Shipwreck CW Underside EP) - True - True
159323 - 0x03D0D (Bunker Yellow Line EP) - True - True
159515 - 0x28A37 (Town Long Sewer EP) - True - True
159520 - 0x33857 (Tutorial EP) - True - True
159521 - 0x33879 (Tutorial Reflection EP) - True - True
159522 - 0x03C19 (Tutorial Moss EP) - True - True
159531 - 0x035C9 (Cargo Box EP) - 0x0A0C9 - True
Obelisks (EPs) - Entry - True:
159700 - 0xFFE00 (Desert Obelisk Side 1) - 0x0332B & 0x03367 & 0x28B8A - True
159701 - 0xFFE01 (Desert Obelisk Side 2) - 0x037B6 & 0x037B2 & 0x000F7 - True
159702 - 0xFFE02 (Desert Obelisk Side 3) - 0x3351D - True
159703 - 0xFFE03 (Desert Obelisk Side 4) - 0x0053C & 0x00771 & 0x335C8 & 0x335C9 & 0x337F8 & 0x037BB & 0x220E4 & 0x220E5 - True
159704 - 0xFFE04 (Desert Obelisk Side 5) - 0x334B9 & 0x334BC & 0x22106 & 0x0A14C & 0x0A14D - True
159710 - 0xFFE10 (Monastery Obelisk Side 1) - 0x03ABC & 0x03ABE & 0x03AC0 & 0x03AC4 - True
159711 - 0xFFE11 (Monastery Obelisk Side 2) - 0x03AC5 - True
159712 - 0xFFE12 (Monastery Obelisk Side 3) - 0x03BE2 & 0x03BE3 & 0x0A409 - True
159713 - 0xFFE13 (Monastery Obelisk Side 4) - 0x006E5 & 0x006E6 & 0x006E7 & 0x034A7 & 0x034AD & 0x034AF & 0x03DAB & 0x03DAC & 0x03DAD - True
159714 - 0xFFE14 (Monastery Obelisk Side 5) - 0x03E01 - True
159715 - 0xFFE15 (Monastery Obelisk Side 6) - 0x289F4 & 0x289F5 - True
159720 - 0xFFE20 (Treehouse Obelisk Side 1) - 0x0053D & 0x0053E & 0x00769 - True
159721 - 0xFFE21 (Treehouse Obelisk Side 2) - 0x33721 & 0x220A7 & 0x220BD - True
159722 - 0xFFE22 (Treehouse Obelisk Side 3) - 0x03B22 & 0x03B23 & 0x03B24 & 0x03B25 & 0x03A79 & 0x28ABD & 0x28ABE - True
159723 - 0xFFE23 (Treehouse Obelisk Side 4) - 0x3388F & 0x28B29 & 0x28B2A - True
159724 - 0xFFE24 (Treehouse Obelisk Side 5) - 0x018B6 & 0x033BE & 0x033BF & 0x033DD & 0x033E5 - True
159725 - 0xFFE25 (Treehouse Obelisk Side 6) - 0x28AE9 & 0x3348F - True
159730 - 0xFFE30 (River Obelisk Side 1) - 0x001A3 & 0x335AE - True
159731 - 0xFFE31 (River Obelisk Side 2) - 0x000D3 & 0x035F5 & 0x09D5D & 0x09D5E & 0x09D63 - True
159732 - 0xFFE32 (River Obelisk Side 3) - 0x3370E & 0x035DE & 0x03601 & 0x03603 & 0x03D0D & 0x3369A & 0x336C8 & 0x33505 - True
159733 - 0xFFE33 (River Obelisk Side 4) - 0x03A9E & 0x016B2 & 0x3365F & 0x03731 & 0x036CE & 0x03C07 & 0x03A93 - True
159734 - 0xFFE34 (River Obelisk Side 5) - 0x03AA6 & 0x3397C & 0x0105D & 0x0A304 - True
159735 - 0xFFE35 (River Obelisk Side 6) - 0x035CB & 0x035CF - True
159740 - 0xFFE40 (Quarry Obelisk Side 1) - 0x28A7B & 0x005F6 & 0x00859 & 0x17CB9 & 0x28A4A - True
159741 - 0xFFE41 (Quarry Obelisk Side 2) - 0x334B6 & 0x00614 & 0x0069D & 0x28A4C - True
159742 - 0xFFE42 (Quarry Obelisk Side 3) - 0x289CF & 0x289D1 & 0x33692 - True
159743 - 0xFFE43 (Quarry Obelisk Side 4) - 0x03E77 & 0x03E7C - True
159750 - 0xFFE50 (Town Obelisk Side 1) - 0x035C7 - True
159751 - 0xFFE51 (Town Obelisk Side 2) - 0x01848 & 0x03D06 & 0x33530 & 0x33600 & 0x28A2F & 0x28A37 & 0x334A3 & 0x3352F - True
159752 - 0xFFE52 (Town Obelisk Side 3) - 0x33857 & 0x33879 & 0x03C19 - True
159753 - 0xFFE53 (Town Obelisk Side 4) - 0x28B30 & 0x035C9 - True
159754 - 0xFFE54 (Town Obelisk Side 5) - 0x03335 & 0x03412 & 0x038A6 & 0x038AA & 0x03E3F & 0x03E40 & 0x28B8E - True
159755 - 0xFFE55 (Town Obelisk Side 6) - 0x28B91 & 0x03BCE & 0x03BCF & 0x03BD1 & 0x339B6 & 0x33A20 & 0x33A29 & 0x33A2A & 0x33B06 - True
Lasers (Lasers) - Entry - True:

View File

@ -1,6 +1,11 @@
First Hallway (First Hallway) - Entry - True - Tutorial - 0x00182:
Entry (Entry):
First Hallway (First Hallway) - Entry - True - First Hallway Room - 0x00064:
158000 - 0x00064 (Straight) - True - True
158001 - 0x00182 (Bend) - 0x00064 - True
159510 - 0x01848 (EP) - 0x00064 - True
First Hallway Room (First Hallway) - Tutorial - 0x00182:
158001 - 0x00182 (Bend) - True - True
Tutorial (Tutorial) - Outside Tutorial - True:
158002 - 0x00293 (Front Center) - True - Dots
@ -10,8 +15,11 @@ Tutorial (Tutorial) - Outside Tutorial - True:
158006 - 0x0A3B2 (Back Right) - True - Dots & Full Dots
158007 - 0x03629 (Gate Open) - 0x002C2 - Symmetry & Dots
158008 - 0x03505 (Gate Close) - 0x2FAF6 - False
158009 - 0x0C335 (Pillar) - True - Triangles - True
158009 - 0x0C335 (Pillar) - True - Triangles
158010 - 0x0C373 (Patio Floor) - 0x0C335 - Dots
159512 - 0x33530 (Cloud EP) - True - True
159513 - 0x33600 (Patio Flowers EP) - 0x0C373 - True
159517 - 0x3352F (Gate EP) - 0x03505 - True
Outside Tutorial (Outside Tutorial) - Outside Tutorial Path To Outpost - 0x03BA2:
158650 - 0x033D4 (Vault) - True - Dots & Full Dots & Squares & Black/White Squares
@ -31,6 +39,10 @@ Outside Tutorial (Outside Tutorial) - Outside Tutorial Path To Outpost - 0x03BA2
158025 - 0x00020 (Tree Row 8) - 0x0001F - Squares & Black/White Squares & Dots & Full Dots
158026 - 0x00021 (Tree Row 9) - 0x00020 - Squares & Black/White Squares & Dots & Full Dots
Door - 0x03BA2 (Outpost Path) - 0x0A3B5
159511 - 0x03D06 (Garden EP) - True - True
159514 - 0x28A2F (Town Sewer EP) - True - True
159516 - 0x334A3 (Path EP) - True - True
159500 - 0x035C7 (Tractor EP) - True - True
Outside Tutorial Path To Outpost (Outside Tutorial) - Outside Tutorial Outpost - 0x0A170:
158011 - 0x0A171 (Outpost Entry Panel) - True - Dots & Full Dots & Triangles
@ -41,12 +53,14 @@ Outside Tutorial Outpost (Outside Tutorial) - Outside Tutorial - 0x04CA3:
Door - 0x04CA3 (Outpost Exit) - 0x04CA4
158600 - 0x17CFB (Discard) - True - Arrows
Main Island () - Outside Tutorial - True:
Main Island (Main Island) - Outside Tutorial - True:
159550 - 0x28B91 (Thundercloud EP) - 0x09F98 & 0x012FB - True
Outside Glass Factory (Glass Factory) - Main Island - True - Inside Glass Factory - 0x01A29:
158027 - 0x01A54 (Entry Panel) - True - Symmetry
Door - 0x01A29 (Entry) - 0x01A54
158601 - 0x3C12B (Discard) - True - Arrows
159002 - 0x28B8A (Vase EP) - 0x01A54 - True
Inside Glass Factory (Glass Factory) - Inside Glass Factory Behind Back Wall - 0x0D7ED:
158028 - 0x00086 (Back Wall 1) - True - Symmetry & Dots
@ -88,13 +102,14 @@ Symmetry Island Lower (Symmetry Island) - Symmetry Island Upper - 0x18269:
158056 - 0x00070 (Left 5) - 0x0006F - Symmetry & Colored Dots & Triangles
158057 - 0x00071 (Left 6) - 0x00070 - Symmetry & Triangles
158058 - 0x00076 (Left 7) - 0x00071 - Symmetry & Triangles
158059 - 0x009B8 (Scenery Outlines 1) - True - Symmetry & Environment
158060 - 0x003E8 (Scenery Outlines 2) - 0x009B8 - Symmetry & Environment
158061 - 0x00A15 (Scenery Outlines 3) - 0x003E8 - Symmetry & Environment
158062 - 0x00B53 (Scenery Outlines 4) - 0x00A15 - Symmetry & Environment
158063 - 0x00B8D (Scenery Outlines 5) - 0x00B53 - Symmetry & Environment
158059 - 0x009B8 (Scenery Outlines 1) - True - Symmetry
158060 - 0x003E8 (Scenery Outlines 2) - 0x009B8 - Symmetry
158061 - 0x00A15 (Scenery Outlines 3) - 0x003E8 - Symmetry
158062 - 0x00B53 (Scenery Outlines 4) - 0x00A15 - Symmetry
158063 - 0x00B8D (Scenery Outlines 5) - 0x00B53 - Symmetry
158064 - 0x1C349 (Upper Panel) - 0x00076 - Symmetry & Triangles
Door - 0x18269 (Upper) - 0x1C349
159000 - 0x0332B (Glass Factory Black Line Reflection EP) - True - True
Symmetry Island Upper (Symmetry Island):
158065 - 0x00A52 (Yellow 1) - True - Symmetry & Colored Dots
@ -104,17 +119,18 @@ Symmetry Island Upper (Symmetry Island):
158069 - 0x00A64 (Blue 2) - 0x00A61 & 0x00A52 - Symmetry & Colored Dots
158070 - 0x00A68 (Blue 3) - 0x00A64 & 0x00A57 - Symmetry & Colored Dots
158700 - 0x0360D (Laser Panel) - 0x00A68 - True
Laser - 0x00509 (Laser) - 0x0360D - True
Laser - 0x00509 (Laser) - 0x0360D
159001 - 0x03367 (Glass Factory Black Line EP) - True - True
Orchard (Orchard) - Main Island - True - Orchard Beyond First Gate - 0x03307:
158071 - 0x00143 (Apple Tree 1) - True - Environment
158072 - 0x0003B (Apple Tree 2) - 0x00143 - Environment
158073 - 0x00055 (Apple Tree 3) - 0x0003B - Environment
158071 - 0x00143 (Apple Tree 1) - True - True
158072 - 0x0003B (Apple Tree 2) - 0x00143 - True
158073 - 0x00055 (Apple Tree 3) - 0x0003B - True
Door - 0x03307 (First Gate) - 0x00055
Orchard Beyond First Gate (Orchard) - Orchard End - 0x03313:
158074 - 0x032F7 (Apple Tree 4) - 0x00055 - Environment
158075 - 0x032FF (Apple Tree 5) - 0x032F7 - Environment
158074 - 0x032F7 (Apple Tree 4) - 0x00055 - True
158075 - 0x032FF (Apple Tree 5) - 0x032F7 - True
Door - 0x03313 (Second Gate) - 0x032FF
Orchard End (Orchard):
@ -123,36 +139,47 @@ Desert Outside (Desert) - Main Island - True - Desert Floodlight Room - 0x09FEE:
158652 - 0x0CC7B (Vault) - True - Dots & Full Dots & Stars & Stars + Same Colored Symbol & Eraser & Triangles & Shapers & Negative Shapers & Colored Squares
158653 - 0x0339E (Vault Box) - 0x0CC7B - True
158602 - 0x17CE7 (Discard) - True - Arrows
158076 - 0x00698 (Surface 1) - True - Reflection
158077 - 0x0048F (Surface 2) - 0x00698 - Reflection
158078 - 0x09F92 (Surface 3) - 0x0048F & 0x09FA0 - Reflection
158076 - 0x00698 (Surface 1) - True - True
158077 - 0x0048F (Surface 2) - 0x00698 - True
158078 - 0x09F92 (Surface 3) - 0x0048F & 0x09FA0 - True
158079 - 0x09FA0 (Surface 3 Control) - 0x0048F - True
158080 - 0x0A036 (Surface 4) - 0x09F92 - Reflection
158081 - 0x09DA6 (Surface 5) - 0x09F92 - Reflection
158082 - 0x0A049 (Surface 6) - 0x09F92 - Reflection
158083 - 0x0A053 (Surface 7) - 0x0A036 & 0x09DA6 & 0x0A049 - Reflection
158084 - 0x09F94 (Surface 8) - 0x0A053 & 0x09F86 - Reflection
158080 - 0x0A036 (Surface 4) - 0x09F92 - True
158081 - 0x09DA6 (Surface 5) - 0x09F92 - True
158082 - 0x0A049 (Surface 6) - 0x09F92 - True
158083 - 0x0A053 (Surface 7) - 0x0A036 & 0x09DA6 & 0x0A049 - True
158084 - 0x09F94 (Surface 8) - 0x0A053 & 0x09F86 - True
158085 - 0x09F86 (Surface 8 Control) - 0x0A053 - True
158086 - 0x0C339 (Light Room Entry Panel) - 0x09F94 - True
Door - 0x09FEE (Light Room Entry) - 0x0C339 - True
Door - 0x09FEE (Light Room Entry) - 0x0C339
158701 - 0x03608 (Laser Panel) - 0x012D7 & 0x0A15F - True
Laser - 0x012FB (Laser) - 0x03608
159020 - 0x3351D (Sand Snake EP) - True - True
159030 - 0x0053C (Facade Right EP) - True - True
159031 - 0x00771 (Facade Left EP) - True - True
159032 - 0x335C8 (Stairs Left EP) - True - True
159033 - 0x335C9 (Stairs Right EP) - True - True
159036 - 0x220E4 (Broken Wall Straight EP) - True - True
159037 - 0x220E5 (Broken Wall Bend EP) - True - True
159040 - 0x334B9 (Shore EP) - True - True
159041 - 0x334BC (Island EP) - True - True
Desert Floodlight Room (Desert) - Desert Pond Room - 0x0C2C3:
158087 - 0x09FAA (Light Control) - True - True
158088 - 0x00422 (Light Room 1) - 0x09FAA - Reflection
158089 - 0x006E3 (Light Room 2) - 0x09FAA - Reflection
158090 - 0x0A02D (Light Room 3) - 0x09FAA & 0x00422 & 0x006E3 - Reflection
158088 - 0x00422 (Light Room 1) - 0x09FAA - True
158089 - 0x006E3 (Light Room 2) - 0x09FAA - True
158090 - 0x0A02D (Light Room 3) - 0x09FAA & 0x00422 & 0x006E3 - True
Door - 0x0C2C3 (Pond Room Entry) - 0x0A02D
Desert Pond Room (Desert) - Desert Water Levels Room - 0x0A24B:
158091 - 0x00C72 (Pond Room 1) - True - Reflection
158092 - 0x0129D (Pond Room 2) - 0x00C72 - Reflection
158093 - 0x008BB (Pond Room 3) - 0x0129D - Reflection
158094 - 0x0078D (Pond Room 4) - 0x008BB - Reflection
158095 - 0x18313 (Pond Room 5) - 0x0078D - Reflection
158096 - 0x0A249 (Flood Room Entry Panel) - 0x18313 - Reflection
158091 - 0x00C72 (Pond Room 1) - True - True
158092 - 0x0129D (Pond Room 2) - 0x00C72 - True
158093 - 0x008BB (Pond Room 3) - 0x0129D - True
158094 - 0x0078D (Pond Room 4) - 0x008BB - True
158095 - 0x18313 (Pond Room 5) - 0x0078D - True
158096 - 0x0A249 (Flood Room Entry Panel) - 0x18313 - True
Door - 0x0A24B (Flood Room Entry) - 0x0A249
159043 - 0x0A14C (Pond Room Near Reflection EP) - True - True
159044 - 0x0A14D (Pond Room Far Reflection EP) - True - True
Desert Water Levels Room (Desert) - Desert Elevator Room - 0x0C316:
158097 - 0x1C2DF (Reduce Water Level Far Left) - True - True
@ -163,37 +190,47 @@ Desert Water Levels Room (Desert) - Desert Elevator Room - 0x0C316:
158102 - 0x1831D (Raise Water Level Far Right) - True - True
158103 - 0x1C2B1 (Raise Water Level Near Left) - True - True
158104 - 0x1831B (Raise Water Level Near Right) - True - True
158105 - 0x04D18 (Flood Room 1) - 0x1C260 & 0x1831C - Reflection
158106 - 0x01205 (Flood Room 2) - 0x04D18 & 0x1C260 & 0x1831C - Reflection
158107 - 0x181AB (Flood Room 3) - 0x01205 & 0x1C260 & 0x1831C - Reflection
158108 - 0x0117A (Flood Room 4) - 0x181AB & 0x1C260 & 0x1831C - Reflection
158109 - 0x17ECA (Flood Room 5) - 0x0117A & 0x1C260 & 0x1831C - Reflection
158110 - 0x18076 (Flood Room 6) - 0x17ECA & 0x1C260 & 0x1831C - Reflection
158105 - 0x04D18 (Flood Room 1) - 0x1C260 & 0x1831C - True
158106 - 0x01205 (Flood Room 2) - 0x04D18 & 0x1C260 & 0x1831C - True
158107 - 0x181AB (Flood Room 3) - 0x01205 & 0x1C260 & 0x1831C - True
158108 - 0x0117A (Flood Room 4) - 0x181AB & 0x1C260 & 0x1831C - True
158109 - 0x17ECA (Flood Room 5) - 0x0117A & 0x1C260 & 0x1831C - True
158110 - 0x18076 (Flood Room 6) - 0x17ECA & 0x1C260 & 0x1831C - True
Door - 0x0C316 (Elevator Room Entry) - 0x18076
159034 - 0x337F8 (Flood Room EP) - 0x1C2DF - True
Desert Elevator Room (Desert) - Desert Lowest Level Inbetween Shortcuts - 0x012FB:
158111 - 0x17C31 (Final Transparent) - True - Reflection
158113 - 0x012D7 (Final Hexagonal) - 0x17C31 & 0x0A015 - Reflection
158111 - 0x17C31 (Final Transparent) - True - True
158113 - 0x012D7 (Final Hexagonal) - 0x17C31 & 0x0A015 - True
158114 - 0x0A015 (Final Hexagonal Control) - 0x17C31 - True
158115 - 0x0A15C (Final Bent 1) - True - Reflection
158116 - 0x09FFF (Final Bent 2) - 0x0A15C - Reflection
158117 - 0x0A15F (Final Bent 3) - 0x09FFF - Reflection
158115 - 0x0A15C (Final Bent 1) - True - True
158116 - 0x09FFF (Final Bent 2) - 0x0A15C - True
158117 - 0x0A15F (Final Bent 3) - 0x09FFF - True
159035 - 0x037BB (Elevator EP) - 0x012FB - True
Desert Lowest Level Inbetween Shortcuts (Desert):
Outside Quarry (Quarry) - Main Island - True - Quarry Between Entrys - 0x09D6F:
Outside Quarry (Quarry) - Main Island - True - Quarry Between Entrys - 0x09D6F - Quarry Elevator - TrueOneWay:
158118 - 0x09E57 (Entry 1 Panel) - True - Squares & Black/White Squares & Triangles
158120 - 0x17CC4 (Elevator Control) - 0x0367C - Dots & Eraser
158603 - 0x17CF0 (Discard) - True - Arrows
158702 - 0x03612 (Laser Panel) - 0x0A3D0 & 0x0367C - Eraser & Triangles & Stars & Stars + Same Colored Symbol
Laser - 0x01539 (Laser) - 0x03612
Door - 0x09D6F (Entry 1) - 0x09E57
159404 - 0x28A4A (Shore EP) - True - True
159410 - 0x334B6 (Entrance Pipe EP) - True - True
159412 - 0x28A4C (Sand Pile EP) - True - True
159420 - 0x289CF (Rock Line EP) - True - True
159421 - 0x289D1 (Rock Line Reflection EP) - True - True
Quarry Elevator (Quarry):
158120 - 0x17CC4 (Elevator Control) - 0x0367C - Dots & Eraser
159403 - 0x17CB9 (Railroad EP) - 0x17CC4 - True
Quarry Between Entrys (Quarry) - Quarry - 0x17C07:
158119 - 0x17C09 (Entry 2 Panel) - True - Shapers & Triangles
Door - 0x17C07 (Entry 2) - 0x17C09
Quarry (Quarry) - Quarry Mill Ground Floor - 0x02010:
Quarry (Quarry) - Quarry Mill Ground Floor - 0x02010 - Quarry Elevator - 0x17CC4:
158121 - 0x01E5A (Mill Entry Left Panel) - True - Squares & Black/White Squares & Stars & Stars + Same Colored Symbol
158122 - 0x01E59 (Mill Entry Right Panel) - True - Triangles
Door - 0x02010 (Mill Entry) - 0x01E59 & 0x01E5A
@ -229,6 +266,8 @@ Quarry Mill Upper Floor (Quarry Mill) - Quarry Mill Middle Floor - 0x03676 & 0x0
Door - 0x0368A (Stairs) - 0x03677
158143 - 0x3C125 (Control Room Left) - 0x0367C - Squares & Black/White Squares & Dots & Full Dots & Eraser
158144 - 0x0367C (Control Room Right) - 0x014E9 - Squares & Colored Squares & Triangles & Eraser & Stars & Stars + Same Colored Symbol
159411 - 0x0069D (Ramp EP) - 0x03676 & 0x275FF - True
159413 - 0x00614 (Lift EP) - 0x275FF & 0x03675 - True
Quarry Boathouse (Quarry Boathouse) - Quarry - True - Quarry Boathouse Upper Front - 0x03852 - Quarry Boathouse Behind Staircase - 0x2769B:
158146 - 0x034D4 (Intro Left) - True - Stars & Eraser
@ -250,6 +289,7 @@ Door - 0x17C50 (First Barrier) - 0x021AE
Quarry Boathouse Upper Middle (Quarry Boathouse) - Quarry Boathouse Upper Back - 0x03858:
158154 - 0x03858 (Ramp Horizontal Control) - True - Shapers & Eraser
159402 - 0x00859 (Moving Ramp EP) - 0x03858 & 0x03852 & 0x3865F - True
Quarry Boathouse Upper Back (Quarry Boathouse) - Quarry Boathouse Upper Middle - 0x3865F:
158155 - 0x38663 (Second Barrier Panel) - True - True
@ -267,96 +307,119 @@ Door - 0x3865F (Second Barrier) - 0x38663
158167 - 0x0A3CB (Back Second Row 1) - 0x09DB4 - Stars & Eraser & Shapers & Negative Shapers & Stars + Same Colored Symbol
158168 - 0x0A3CC (Back Second Row 2) - 0x0A3CB - Stars & Eraser & Shapers & Negative Shapers & Stars + Same Colored Symbol
158169 - 0x0A3D0 (Back Second Row 3) - 0x0A3CC - Stars & Eraser & Shapers & Negative Shapers & Stars + Same Colored Symbol
159401 - 0x005F6 (Hook EP) - 0x275FA & 0x03852 & 0x3865F - True
Shadows (Shadows) - Main Island - True - Shadows Ledge - 0x19B24 - Shadows Laser Room - 0x194B2 & 0x19665:
158170 - 0x334DB (Door Timer Outside) - True - True
Door - 0x19B24 (Timed Door) - 0x334DB
158171 - 0x0AC74 (Intro 6) - 0x0A8DC - Shadows Avoid
158172 - 0x0AC7A (Intro 7) - 0x0AC74 - Shadows Avoid
158173 - 0x0A8E0 (Intro 8) - 0x0AC7A - Shadows Avoid
158174 - 0x386FA (Far 1) - 0x0A8E0 - Shadows Avoid & Environment
158175 - 0x1C33F (Far 2) - 0x386FA - Shadows Avoid & Environment
158176 - 0x196E2 (Far 3) - 0x1C33F - Shadows Avoid & Environment
158177 - 0x1972A (Far 4) - 0x196E2 - Shadows Avoid & Environment
158178 - 0x19809 (Far 5) - 0x1972A - Shadows Avoid & Environment
158179 - 0x19806 (Far 6) - 0x19809 - Shadows Avoid & Environment
158180 - 0x196F8 (Far 7) - 0x19806 - Shadows Avoid & Environment
158181 - 0x1972F (Far 8) - 0x196F8 - Shadows Avoid & Environment
158171 - 0x0AC74 (Intro 6) - 0x0A8DC - True
158172 - 0x0AC7A (Intro 7) - 0x0AC74 - True
158173 - 0x0A8E0 (Intro 8) - 0x0AC7A - True
158174 - 0x386FA (Far 1) - 0x0A8E0 - True
158175 - 0x1C33F (Far 2) - 0x386FA - True
158176 - 0x196E2 (Far 3) - 0x1C33F - True
158177 - 0x1972A (Far 4) - 0x196E2 - True
158178 - 0x19809 (Far 5) - 0x1972A - True
158179 - 0x19806 (Far 6) - 0x19809 - True
158180 - 0x196F8 (Far 7) - 0x19806 - True
158181 - 0x1972F (Far 8) - 0x196F8 - True
Door - 0x194B2 (Laser Entry Right) - 0x1972F
158182 - 0x19797 (Near 1) - 0x0A8E0 - Shadows Follow
158183 - 0x1979A (Near 2) - 0x19797 - Shadows Follow
158184 - 0x197E0 (Near 3) - 0x1979A - Shadows Follow
158185 - 0x197E8 (Near 4) - 0x197E0 - Shadows Follow
158186 - 0x197E5 (Near 5) - 0x197E8 - Shadows Follow
158182 - 0x19797 (Near 1) - 0x0A8E0 - True
158183 - 0x1979A (Near 2) - 0x19797 - True
158184 - 0x197E0 (Near 3) - 0x1979A - True
158185 - 0x197E8 (Near 4) - 0x197E0 - True
158186 - 0x197E5 (Near 5) - 0x197E8 - True
Door - 0x19665 (Laser Entry Left) - 0x197E5
159400 - 0x28A7B (Quarry Mill Rooftop Vent EP) - True - True
Shadows Ledge (Shadows) - Shadows - 0x1855B - Quarry - 0x19865 & 0x0A2DF:
158187 - 0x334DC (Door Timer Inside) - True - True
158188 - 0x198B5 (Intro 1) - True - Shadows Avoid
158189 - 0x198BD (Intro 2) - 0x198B5 - Shadows Avoid
158190 - 0x198BF (Intro 3) - 0x198BD & 0x334DC & 0x19B24 - Shadows Avoid
158188 - 0x198B5 (Intro 1) - True - True
158189 - 0x198BD (Intro 2) - 0x198B5 - True
158190 - 0x198BF (Intro 3) - 0x198BD & 0x334DC & 0x19B24 - True
Door - 0x19865 (Quarry Barrier) - 0x198BF
Door - 0x0A2DF (Quarry Barrier 2) - 0x198BF
158191 - 0x19771 (Intro 4) - 0x198BF - Shadows Avoid
158192 - 0x0A8DC (Intro 5) - 0x19771 - Shadows Avoid
158191 - 0x19771 (Intro 4) - 0x198BF - True
158192 - 0x0A8DC (Intro 5) - 0x19771 - True
Door - 0x1855B (Ledge Barrier) - 0x0A8DC
Door - 0x19ADE (Ledge Barrier 2) - 0x0A8DC
Shadows Laser Room (Shadows):
158703 - 0x19650 (Laser Panel) - True - Shadows Avoid & Shadows Follow
158703 - 0x19650 (Laser Panel) - True - True
Laser - 0x181B3 (Laser) - 0x19650
Treehouse Beach (Treehouse Beach) - Main Island - True:
159200 - 0x0053D (Rock Shadow EP) - True - True
159201 - 0x0053E (Sand Shadow EP) - True - True
159212 - 0x220BD (Both Orange Bridges EP) - 0x17DA2 & 0x17DDB - True
Keep (Keep) - Main Island - True - Keep 2nd Maze - 0x01954 - Keep 2nd Pressure Plate - 0x01BEC:
158193 - 0x00139 (Hedge Maze 1) - True - Environment
158193 - 0x00139 (Hedge Maze 1) - True - True
158197 - 0x0A3A8 (Reset Pressure Plates 1) - True - True
158198 - 0x033EA (Pressure Plates 1) - 0x0A3A8 - Pressure Plates & Colored Squares & Triangles & Stars & Stars + Same Colored Symbol
158198 - 0x033EA (Pressure Plates 1) - 0x0A3A8 - Colored Squares & Triangles & Stars & Stars + Same Colored Symbol
Door - 0x01954 (Hedge Maze 1 Exit) - 0x00139
Door - 0x01BEC (Pressure Plates 1 Exit) - 0x033EA
159430 - 0x03E77 (Red Flowers EP) - True - True
159431 - 0x03E7C (Purple Flowers EP) - True - True
Keep 2nd Maze (Keep) - Keep - 0x018CE - Keep 3rd Maze - 0x019D8:
Door - 0x018CE (Hedge Maze 2 Shortcut) - 0x00139
158194 - 0x019DC (Hedge Maze 2) - True - Environment
158194 - 0x019DC (Hedge Maze 2) - True - True
Door - 0x019D8 (Hedge Maze 2 Exit) - 0x019DC
Keep 3rd Maze (Keep) - Keep - 0x019B5 - Keep 4th Maze - 0x019E6:
Door - 0x019B5 (Hedge Maze 3 Shortcut) - 0x019DC
158195 - 0x019E7 (Hedge Maze 3) - True - Environment & Sound
158195 - 0x019E7 (Hedge Maze 3) - True - True
Door - 0x019E6 (Hedge Maze 3 Exit) - 0x019E7
Keep 4th Maze (Keep) - Keep - 0x0199A - Keep Tower - 0x01A0E:
Door - 0x0199A (Hedge Maze 4 Shortcut) - 0x019E7
158196 - 0x01A0F (Hedge Maze 4) - True - Environment
158196 - 0x01A0F (Hedge Maze 4) - True - True
Door - 0x01A0E (Hedge Maze 4 Exit) - 0x01A0F
Keep 2nd Pressure Plate (Keep) - Keep 3rd Pressure Plate - True:
158199 - 0x0A3B9 (Reset Pressure Plates 2) - True - True
158200 - 0x01BE9 (Pressure Plates 2) - PP2 Weirdness - Pressure Plates & Stars & Stars + Same Colored Symbol & Squares & Black/White Squares & Shapers & Rotated Shapers
158200 - 0x01BE9 (Pressure Plates 2) - PP2 Weirdness - Stars & Stars + Same Colored Symbol & Squares & Black/White Squares & Shapers & Rotated Shapers
Door - 0x01BEA (Pressure Plates 2 Exit) - 0x01BE9
Keep 3rd Pressure Plate (Keep) - Keep 4th Pressure Plate - 0x01CD5:
158201 - 0x0A3BB (Reset Pressure Plates 3) - True - True
158202 - 0x01CD3 (Pressure Plates 3) - 0x0A3BB - Pressure Plates & Black/White Squares & Triangles & Shapers & Rotated Shapers
158202 - 0x01CD3 (Pressure Plates 3) - 0x0A3BB - Black/White Squares & Triangles & Shapers & Rotated Shapers
Door - 0x01CD5 (Pressure Plates 3 Exit) - 0x01CD3
Keep 4th Pressure Plate (Keep) - Shadows - 0x09E3D - Keep Tower - 0x01D40:
158203 - 0x0A3AD (Reset Pressure Plates 4) - True - True
158204 - 0x01D3F (Pressure Plates 4) - 0x0A3AD - Pressure Plates & Shapers & Triangles & Stars & Stars + Same Colored Symbol
158204 - 0x01D3F (Pressure Plates 4) - 0x0A3AD - Shapers & Triangles & Stars & Stars + Same Colored Symbol
Door - 0x01D40 (Pressure Plates 4 Exit) - 0x01D3F
158604 - 0x17D27 (Discard) - True - Arrows
158205 - 0x09E49 (Shadows Shortcut Panel) - True - True
Door - 0x09E3D (Shadows Shortcut) - 0x09E49
Shipwreck (Shipwreck) - Keep 3rd Pressure Plate - True:
158654 - 0x00AFB (Vault) - True - Symmetry & Sound & Sound Dots & Colored Dots
158654 - 0x00AFB (Vault) - True - Symmetry & Sound Dots & Colored Dots
158655 - 0x03535 (Vault Box) - 0x00AFB - True
158605 - 0x17D28 (Discard) - True - Arrows
159220 - 0x03B22 (Circle Far EP) - True - True
159221 - 0x03B23 (Circle Left EP) - True - True
159222 - 0x03B24 (Circle Near EP) - True - True
159224 - 0x03A79 (Stern EP) - True - True
159225 - 0x28ABD (Rope Inner EP) - True - True
159226 - 0x28ABE (Rope Outer EP) - True - True
159230 - 0x3388F (Couch EP) - 0x17CDF | 0x0A054 - True
Keep Tower (Keep) - Keep - 0x04F8F:
158206 - 0x0361B (Tower Shortcut Panel) - True - True
Door - 0x04F8F (Tower Shortcut) - 0x0361B
158704 - 0x0360E (Laser Panel Hedges) - 0x01A0F & 0x019E7 & 0x019DC & 0x00139 - Environment & Sound
158704 - 0x0360E (Laser Panel Hedges) - 0x01A0F & 0x019E7 & 0x019DC & 0x00139 - True
158705 - 0x03317 (Laser Panel Pressure Plates) - 0x01BE9 - Shapers & Rotated Shapers & Triangles & Stars & Stars + Same Colored Symbol & Colored Squares & Black/White Squares
Laser - 0x014BB (Laser) - 0x0360E | 0x03317
159240 - 0x033BE (Pressure Plates 1 EP) - 0x033EA - True
159241 - 0x033BF (Pressure Plates 2 EP) - 0x01BE9 - True
159242 - 0x033DD (Pressure Plates 3 EP) - 0x01CD3 & 0x01CD5 - True
159243 - 0x033E5 (Pressure Plates 4 Left Exit EP) - 0x01D3F - True
159244 - 0x018B6 (Pressure Plates 4 Right Exit EP) - 0x01D3F - True
159250 - 0x28AE9 (Path EP) - True - True
159251 - 0x3348F (Hedges EP) - True - True
Outside Monastery (Monastery) - Main Island - True - Inside Monastery - 0x0C128 & 0x0C153 - Monastery Garden - 0x03750:
158207 - 0x03713 (Shortcut Panel) - True - True
@ -365,19 +428,29 @@ Door - 0x0364E (Shortcut) - 0x03713
158209 - 0x00C92 (Entry Right) - True - True
Door - 0x0C128 (Entry Inner) - 0x00B10
Door - 0x0C153 (Entry Outer) - 0x00C92
158210 - 0x00290 (Outside 1) - 0x09D9B - Environment
158211 - 0x00038 (Outside 2) - 0x09D9B & 0x00290 - Environment
158212 - 0x00037 (Outside 3) - 0x09D9B & 0x00038 - Environment
158210 - 0x00290 (Outside 1) - 0x09D9B - True
158211 - 0x00038 (Outside 2) - 0x09D9B & 0x00290 - True
158212 - 0x00037 (Outside 3) - 0x09D9B & 0x00038 - True
Door - 0x03750 (Garden Entry) - 0x00037
158706 - 0x17CA4 (Laser Panel) - 0x193A6 - True
Laser - 0x17C65 (Laser) - 0x17CA4
159130 - 0x006E5 (Facade Left Near EP) - True - True
159131 - 0x006E6 (Facade Left Far Short EP) - True - True
159132 - 0x006E7 (Facade Left Far Long EP) - True - True
159136 - 0x03DAB (Facade Right Near EP) - True - True
159137 - 0x03DAC (Facade Left Stairs EP) - True - True
159138 - 0x03DAD (Facade Right Stairs EP) - True - True
159140 - 0x03E01 (Grass Stairs EP) - True - True
Inside Monastery (Monastery):
158213 - 0x09D9B (Shutters Control) - True - Dots
158214 - 0x193A7 (Inside 1) - 0x00037 - Environment
158215 - 0x193AA (Inside 2) - 0x193A7 - Environment
158216 - 0x193AB (Inside 3) - 0x193AA - Environment
158217 - 0x193A6 (Inside 4) - 0x193AB - Environment
158214 - 0x193A7 (Inside 1) - 0x00037 - True
158215 - 0x193AA (Inside 2) - 0x193A7 - True
158216 - 0x193AB (Inside 3) - 0x193AA - True
158217 - 0x193A6 (Inside 4) - 0x193AB - True
159133 - 0x034A7 (Left Shutter EP) - 0x09D9B - True
159134 - 0x034AD (Middle Shutter EP) - 0x09D9B - True
159135 - 0x034AF (Right Shutter EP) - 0x09D9B - True
Monastery Garden (Monastery):
@ -386,10 +459,10 @@ Town (Town) - Main Island - True - Boat - 0x0A054 - Town Maze Rooftop - 0x28AA2
158219 - 0x0A0C8 (Cargo Box Entry Panel) - True - Squares & Black/White Squares & Shapers & Triangles
Door - 0x0A0C9 (Cargo Box Entry) - 0x0A0C8
158707 - 0x09F98 (Desert Laser Redirect) - True - True
158220 - 0x18590 (Transparent) - True - Symmetry & Environment
158221 - 0x28AE3 (Vines) - 0x18590 - Shadows Follow & Environment
158222 - 0x28938 (Apple Tree) - 0x28AE3 - Environment
158223 - 0x079DF (Triple Exit) - 0x28938 - Shadows Avoid & Environment & Reflection
158220 - 0x18590 (Transparent) - True - Symmetry
158221 - 0x28AE3 (Vines) - 0x18590 - True
158222 - 0x28938 (Apple Tree) - 0x28AE3 - True
158223 - 0x079DF (Triple Exit) - 0x28938 - True
158235 - 0x2899C (Wooden Roof Lower Row 1) - True - Triangles & Dots & Full Dots
158236 - 0x28A33 (Wooden Roof Lower Row 2) - 0x2899C - Triangles & Dots & Full Dots
158237 - 0x28ABF (Wooden Roof Lower Row 3) - 0x28A33 - Triangles & Dots & Full Dots
@ -398,18 +471,30 @@ Door - 0x0A0C9 (Cargo Box Entry) - 0x0A0C8
Door - 0x034F5 (Wooden Roof Stairs) - 0x28AC1
158225 - 0x28998 (Tinted Glass Door Panel) - True - Stars & Rotated Shapers & Stars + Same Colored Symbol
Door - 0x28A61 (Tinted Glass Door) - 0x28A0D
158226 - 0x28A0D (Church Entry Panel) - 0x28998 - Stars & RGB & Environment
158226 - 0x28A0D (Church Entry Panel) - 0x28998 - Stars
Door - 0x03BB0 (Church Entry) - 0x03C08
158228 - 0x28A79 (Maze Stair Control) - True - Environment
158228 - 0x28A79 (Maze Stair Control) - True - True
Door - 0x28AA2 (Maze Stairs) - 0x28A79
158241 - 0x17F5F (Windmill Entry Panel) - True - Dots
Door - 0x1845B (Windmill Entry) - 0x17F5F
159010 - 0x037B6 (Windmill First Blade EP) - 0x17D02 - True
159011 - 0x037B2 (Windmill Second Blade EP) - 0x17D02 - True
159012 - 0x000F7 (Windmill Third Blade EP) - 0x17D02 - True
159540 - 0x03335 (Tower Underside First EP) - True - True
159541 - 0x03412 (Tower Underside Second EP) - True - True
159542 - 0x038A6 (Tower Underside Third EP) - True - True
159543 - 0x038AA (Tower Underside Fourth EP) - True - True
159545 - 0x03E40 (RGB House Green EP) - 0x334D8 & 0x03C0C & 0x03C08 - True
159546 - 0x28B8E (Maze Bridge Underside EP) - 0x2896A - True
159552 - 0x03BCF (Black Line Redirect EP) - True - True
159800 - 0xFFF80 (Pet the Dog) - True - True
Town Inside Cargo Box (Town):
158606 - 0x17D01 (Cargo Box Discard) - True - Arrows
Town Maze Rooftop (Town) - Town Red Rooftop - 0x2896A:
158229 - 0x2896A (Maze Rooftop Bridge Control) - True - Shapers
159544 - 0x03E3F (RGB House Red EP) - 0x334D8 & 0x03C0C & 0x03C08 - True
Town Red Rooftop (Town):
158607 - 0x17C71 (Rooftop Discard) - True - Arrows
@ -418,23 +503,24 @@ Town Red Rooftop (Town):
158232 - 0x28ACA (Red Rooftop 3) - 0x28AC8 - Symmetry & Shapers
158233 - 0x28ACB (Red Rooftop 4) - 0x28ACA - Symmetry & Shapers
158234 - 0x28ACC (Red Rooftop 5) - 0x28ACB - Symmetry & Shapers
158224 - 0x28B39 (Tall Hexagonal) - 0x079DF - Reflection
158224 - 0x28B39 (Tall Hexagonal) - 0x079DF - True
Town Wooden Rooftop (Town):
158240 - 0x28AD9 (Wooden Rooftop) - 0x28AC1 - Triangles & Dots & Full Dots & Eraser
Town Church (Town):
158227 - 0x28A69 (Church Lattice) - 0x03BB0 - Environment
158227 - 0x28A69 (Church Lattice) - 0x03BB0 - True
159553 - 0x03BD1 (Black Line Church EP) - True - True
RGB House (Town) - RGB Room - 0x2897B:
158242 - 0x034E4 (Sound Room Left) - True - Sound
158243 - 0x034E3 (Sound Room Right) - True - Sound & Sound Dots
158242 - 0x034E4 (Sound Room Left) - True - True
158243 - 0x034E3 (Sound Room Right) - True - Sound Dots
Door - 0x2897B (RGB House Stairs) - 0x034E4 & 0x034E3
RGB Room (Town):
158244 - 0x334D8 (RGB Control) - True - Rotated Shapers & RGB & Squares & Colored Squares & Triangles
158245 - 0x03C0C (RGB Room Left) - 0x334D8 - RGB & Squares & Colored Squares & Black/White Squares & Eraser
158246 - 0x03C08 (RGB Room Right) - 0x334D8 & 0x03C0C - RGB & Symmetry & Dots & Colored Dots & Triangles
158244 - 0x334D8 (RGB Control) - True - Rotated Shapers & Squares & Colored Squares & Triangles
158245 - 0x03C0C (RGB Room Left) - 0x334D8 - Squares & Colored Squares & Black/White Squares & Eraser
158246 - 0x03C08 (RGB Room Right) - 0x334D8 & 0x03C0C - Symmetry & Dots & Colored Dots & Triangles
Town Tower (Town Tower) - Town - True - Town Tower Top - 0x27798 & 0x27799 & 0x2779A & 0x2779C:
Door - 0x27798 (First Door) - 0x28ACC
@ -445,6 +531,8 @@ Door - 0x2779A (Fourth Door) - 0x28B39
Town Tower Top (Town):
158708 - 0x032F5 (Laser Panel) - True - True
Laser - 0x032F9 (Laser) - 0x032F5
159422 - 0x33692 (Brown Bridge EP) - True - True
159551 - 0x03BCE (Black Line Tower EP) - True - True
Windmill Interior (Windmill) - Theater - 0x17F88:
158247 - 0x17D02 (Turn Control) - True - Dots
@ -464,35 +552,51 @@ Theater (Theater) - Town - 0x0A16D | 0x3CCDF:
Door - 0x0A16D (Exit Left) - 0x0A168
Door - 0x3CCDF (Exit Right) - 0x33AB2
158608 - 0x17CF7 (Discard) - True - Arrows
159554 - 0x339B6 (Eclipse EP) - 0x03549 & 0x0A16D & 0x3CCDF - True
159555 - 0x33A29 (Window EP) - 0x03553 - True
159556 - 0x33A2A (Door EP) - 0x03553 - True
159558 - 0x33B06 (Church EP) - 0x0354E - True
Jungle (Jungle) - Main Island - True - Outside Jungle River - 0x3873B - Boat - 0x17CDF:
158251 - 0x17CDF (Shore Boat Spawn) - True - Boat
158609 - 0x17F9B (Discard) - True - Arrows
158252 - 0x002C4 (First Row 1) - True - Sound
158253 - 0x00767 (First Row 2) - 0x002C4 - Sound
158254 - 0x002C6 (First Row 3) - 0x00767 - Sound
158255 - 0x0070E (Second Row 1) - 0x002C6 - Sound
158256 - 0x0070F (Second Row 2) - 0x0070E - Sound
158257 - 0x0087D (Second Row 3) - 0x0070F - Sound
158258 - 0x002C7 (Second Row 4) - 0x0087D - Sound
158252 - 0x002C4 (First Row 1) - True - True
158253 - 0x00767 (First Row 2) - 0x002C4 - True
158254 - 0x002C6 (First Row 3) - 0x00767 - True
158255 - 0x0070E (Second Row 1) - 0x002C6 - True
158256 - 0x0070F (Second Row 2) - 0x0070E - True
158257 - 0x0087D (Second Row 3) - 0x0070F - True
158258 - 0x002C7 (Second Row 4) - 0x0087D - True
158259 - 0x17CAB (Popup Wall Control) - 0x002C7 - True
Door - 0x1475B (Popup Wall) - 0x17CAB
158260 - 0x0026D (Popup Wall 1) - 0x1475B - Sound & Sound Dots & Symmetry
158261 - 0x0026E (Popup Wall 2) - 0x0026D - Sound & Sound Dots & Symmetry
158262 - 0x0026F (Popup Wall 3) - 0x0026E - Sound & Sound Dots & Symmetry
158263 - 0x00C3F (Popup Wall 4) - 0x0026F - Sound & Sound Dots & Symmetry
158264 - 0x00C41 (Popup Wall 5) - 0x00C3F - Sound & Sound Dots & Symmetry
158265 - 0x014B2 (Popup Wall 6) - 0x00C41 - Sound & Sound Dots & Symmetry
158260 - 0x0026D (Popup Wall 1) - 0x1475B - Sound Dots & Symmetry
158261 - 0x0026E (Popup Wall 2) - 0x0026D - Sound Dots & Symmetry
158262 - 0x0026F (Popup Wall 3) - 0x0026E - Sound Dots & Symmetry
158263 - 0x00C3F (Popup Wall 4) - 0x0026F - Sound Dots & Symmetry
158264 - 0x00C41 (Popup Wall 5) - 0x00C3F - Sound Dots & Symmetry
158265 - 0x014B2 (Popup Wall 6) - 0x00C41 - Sound Dots & Symmetry
158709 - 0x03616 (Laser Panel) - 0x014B2 - True
Laser - 0x00274 (Laser) - 0x03616
158266 - 0x337FA (Laser Shortcut Panel) - True - True
Door - 0x3873B (Laser Shortcut) - 0x337FA
159100 - 0x03ABC (Long Arch Moss EP) - True - True
159101 - 0x03ABE (Straight Left Moss EP) - True - True
159102 - 0x03AC0 (Pop-up Wall Moss EP) - True - True
159103 - 0x03AC4 (Short Arch Moss EP) - True - True
159150 - 0x289F4 (Entrance EP) - True - True
159151 - 0x289F5 (Tree Halo EP) - True - True
159350 - 0x035CB (Bamboo CCW EP) - True - True
159351 - 0x035CF (Bamboo CW EP) - True - True
Outside Jungle River (River) - Main Island - True - Monastery Garden - 0x0CF2A:
158267 - 0x17CAA (Monastery Shortcut Panel) - True - Environment
158267 - 0x17CAA (Monastery Shortcut Panel) - True - True
Door - 0x0CF2A (Monastery Shortcut) - 0x17CAA
158663 - 0x15ADD (Vault) - True - Environment & Black/White Squares & Dots
158663 - 0x15ADD (Vault) - True - Black/White Squares & Dots
158664 - 0x03702 (Vault Box) - 0x15ADD - True
159110 - 0x03AC5 (Green Leaf Moss EP) - True - True
159120 - 0x03BE2 (Monastery Garden Left EP) - 0x03750 - True
159121 - 0x03BE3 (Monastery Garden Right EP) - True - True
159122 - 0x0A409 (Monastery Wall EP) - True - True
Outside Bunker (Bunker) - Main Island - True - Bunker - 0x0C2A4:
158268 - 0x17C2E (Entry Panel) - True - Squares & Black/White Squares & Colored Squares
@ -512,28 +616,37 @@ Bunker (Bunker) - Bunker Glass Room - 0x17C79:
Door - 0x17C79 (Tinted Glass Door) - 0x0A099
Bunker Glass Room (Bunker) - Bunker Ultraviolet Room - 0x0C2A3:
158279 - 0x0A010 (Glass Room 1) - True - Squares & Colored Squares & RGB & Environment
158280 - 0x0A01B (Glass Room 2) - 0x0A010 - Squares & Colored Squares & Black/White Squares & RGB & Environment
158281 - 0x0A01F (Glass Room 3) - 0x0A01B - Squares & Colored Squares & Black/White Squares & RGB & Environment
158279 - 0x0A010 (Glass Room 1) - True - Squares & Colored Squares
158280 - 0x0A01B (Glass Room 2) - 0x0A010 - Squares & Colored Squares & Black/White Squares
158281 - 0x0A01F (Glass Room 3) - 0x0A01B - Squares & Colored Squares & Black/White Squares
Door - 0x0C2A3 (UV Room Entry) - 0x0A01F
Bunker Ultraviolet Room (Bunker) - Bunker Elevator Section - 0x0A08D:
158282 - 0x34BC5 (Drop-Down Door Open) - True - True
158283 - 0x34BC6 (Drop-Down Door Close) - 0x34BC5 - True
158284 - 0x17E63 (UV Room 1) - 0x34BC5 - Squares & Colored Squares & RGB & Environment
158285 - 0x17E67 (UV Room 2) - 0x17E63 & 0x34BC6 - Squares & Colored Squares & Black/White Squares & RGB
158284 - 0x17E63 (UV Room 1) - 0x34BC5 - Squares & Colored Squares
158285 - 0x17E67 (UV Room 2) - 0x17E63 & 0x34BC6 - Squares & Colored Squares & Black/White Squares
Door - 0x0A08D (Elevator Room Entry) - 0x17E67
Bunker Elevator Section (Bunker) - Bunker Laser Platform - 0x0A079:
158286 - 0x0A079 (Elevator Control) - True - Squares & Colored Squares & Black/White Squares & RGB
Bunker Elevator Section (Bunker) - Bunker Elevator - TrueOneWay:
159311 - 0x035F5 (Tinted Door EP) - 0x17C79 - True
Bunker Laser Platform (Bunker):
Bunker Elevator (Bunker) - Bunker Laser Platform - 0x0A079 - Bunker Green Room - 0x0A079 - Bunker Laser Platform - 0x0A079 - Outside Bunker - 0x0A079:
158286 - 0x0A079 (Elevator Control) - True - Colored Squares & Black/White Squares
Bunker Green Room (Bunker) - Bunker Elevator - TrueOneWay:
159310 - 0x000D3 (Green Room Flowers EP) - True - True
Bunker Laser Platform (Bunker) - Bunker Elevator - TrueOneWay:
158710 - 0x09DE0 (Laser Panel) - True - True
Laser - 0x0C2B2 (Laser) - 0x09DE0
Outside Swamp (Swamp) - Swamp Entry Area - 0x00C1C - Main Island - True:
158287 - 0x0056E (Entry Panel) - True - Rotated Shapers & Black/White Squares & Triangles
Door - 0x00C1C (Entry) - 0x0056E
159321 - 0x03603 (Purple Sand Middle EP) - 0x17E2B - True
159322 - 0x03601 (Purple Sand Top EP) - 0x17E2B - True
159327 - 0x035DE (Purple Sand Bottom EP) - True - True
Swamp Entry Area (Swamp) - Swamp Sliding Bridge - TrueOneWay:
158288 - 0x00469 (Intro Front 1) - True - Black/White Squares & Shapers
@ -553,6 +666,8 @@ Swamp Entry Area (Swamp) - Swamp Sliding Bridge - TrueOneWay:
Swamp Sliding Bridge (Swamp) - Swamp Entry Area - 0x00609 - Swamp Near Platform - 0x00609:
158302 - 0x00609 (Sliding Bridge) - True - Shapers & Black/White Squares
159342 - 0x0105D (Sliding Bridge Left EP) - 0x00609 - True
159343 - 0x0A304 (Sliding Bridge Right EP) - 0x00609 - True
Swamp Near Platform (Swamp) - Swamp Cyan Underwater - 0x04B7F - Swamp Near Boat - 0x38AE6 - Swamp Between Bridges Near - 0x184B7 - Swamp Sliding Bridge - TrueOneWay:
158313 - 0x00982 (Platform Row 1) - True - Rotated Shapers
@ -572,6 +687,7 @@ Swamp Cyan Underwater (Swamp):
158310 - 0x013E6 (Cyan Underwater 4) - 0x00005 - Shapers & Negative Shapers & Triangles & Black/White Squares
158311 - 0x00596 (Cyan Underwater 5) - 0x013E6 - Shapers & Negative Shapers & Triangles & Black/White Squares
158312 - 0x18488 (Cyan Underwater Sliding Bridge Control) - True - Shapers
159340 - 0x03AA6 (Cyan Underwater Sliding Bridge EP) - 0x18488 - True
Swamp Between Bridges Near (Swamp) - Swamp Between Bridges Far - 0x18507:
158303 - 0x00999 (Between Bridges Near Row 1) - 0x00990 - Rotated Shapers
@ -596,6 +712,8 @@ Door - 0x305D5 (Red Underwater Exit) - 0x014D1
Swamp Rotating Bridge (Swamp) - Swamp Between Bridges Far - 0x181F5 - Swamp Near Boat - 0x181F5 - Swamp Purple Area - 0x181F5:
158327 - 0x181F5 (Rotating Bridge) - True - Rotated Shapers & Shapers & Stars & Colored Squares & Triangles & Stars + Same Colored Symbol
159331 - 0x016B2 (Rotating Bridge CCW EP) - 0x181F5 - True
159334 - 0x036CE (Rotating Bridge CW EP) - 0x181F5 - True
Swamp Near Boat (Swamp) - Swamp Rotating Bridge - TrueOneWay - Swamp Blue Underwater - 0x18482:
158328 - 0x09DB8 (Boat Spawn) - True - Boat
@ -605,12 +723,16 @@ Swamp Near Boat (Swamp) - Swamp Rotating Bridge - TrueOneWay - Swamp Blue Underw
158332 - 0x00E3A (Beyond Rotating Bridge 4) - 0x00C2E - Shapers & Dots & Full Dots
158339 - 0x17E2B (Long Bridge Control) - True - Rotated Shapers & Shapers
Door - 0x18482 (Blue Water Pump) - 0x00E3A
159332 - 0x3365F (Boat EP) - 0x09DB8 - True
159333 - 0x03731 (Long Bridge Side EP) - 0x17E2B - True
Swamp Purple Area (Swamp) - Swamp Rotating Bridge - TrueOneWay - Swamp Purple Underwater - 0x0A1D6:
Door - 0x0A1D6 (Purple Water Pump) - 0x00E3A
Swamp Purple Underwater (Swamp):
158333 - 0x009A6 (Purple Underwater) - True - Shapers & Triangles & Black/White Squares & Rotated Shapers & Dots & Full Dots
159330 - 0x03A9E (Purple Underwater Right EP) - True - True
159336 - 0x03A93 (Purple Underwater Left EP) - True - True
Swamp Blue Underwater (Swamp):
158334 - 0x009AB (Blue Underwater 1) - True - Shapers & Negative Shapers
@ -620,8 +742,8 @@ Swamp Blue Underwater (Swamp):
158338 - 0x00006 (Blue Underwater 5) - 0x009AF - Shapers & Negative Shapers
Swamp Maze (Swamp) - Swamp Laser Area - 0x17C0A & 0x17E07:
158340 - 0x17C0A (Maze Control) - True - Shapers & Negative Shapers & Rotated Shapers & Environment
158112 - 0x17E07 (Maze Control Other Side) - True - Shapers & Negative Shapers & Rotated Shapers & Environment
158340 - 0x17C0A (Maze Control) - True - Shapers & Negative Shapers & Rotated Shapers
158112 - 0x17E07 (Maze Control Other Side) - True - Shapers & Negative Shapers & Rotated Shapers
Swamp Laser Area (Swamp) - Outside Swamp - 0x2D880:
158711 - 0x03615 (Laser Panel) - True - True
@ -634,6 +756,7 @@ Treehouse Entry Area (Treehouse) - Treehouse Between Doors - 0x0C309:
158343 - 0x17C95 (Boat Spawn) - True - Boat
158344 - 0x0288C (First Door Panel) - True - Stars & Stars + Same Colored Symbol & Triangles
Door - 0x0C309 (First Door) - 0x0288C
159210 - 0x33721 (Buoy EP) - 0x17C95 - True
Treehouse Between Doors (Treehouse) - Treehouse Yellow Bridge - 0x0C310:
158345 - 0x02886 (Second Door Panel) - True - Stars & Stars + Same Colored Symbol & Triangles
@ -691,7 +814,7 @@ Treehouse Second Purple Bridge (Treehouse) - Treehouse Left Orange Bridge - 0x17
158367 - 0x17D91 (Second Purple Bridge 6) - 0x17BDF - Stars & Colored Squares & Triangles & Stars + Same Colored Symbol
158368 - 0x17DC6 (Second Purple Bridge 7) - 0x17D91 - Stars & Colored Squares & Triangles & Stars + Same Colored Symbol
Treehouse Left Orange Bridge (Treehouse) - Treehouse Laser Room Front Platform - 0x17DDE - Treehouse Laser Room Back Platform - 0x17DDB:
Treehouse Left Orange Bridge (Treehouse) - Treehouse Laser Room Front Platform - 0x17DDE - Treehouse Laser Room Back Platform - 0x17DDB - Treehouse Burned House - 0x17DDB:
158376 - 0x17DB3 (Left Orange Bridge 1) - True - Stars & Black/White Squares & Stars + Same Colored Symbol & Shapers & Rotated Shapers
158377 - 0x17DB5 (Left Orange Bridge 2) - 0x17DB3 - Stars & Black/White Squares & Stars + Same Colored Symbol & Shapers & Rotated Shapers
158378 - 0x17DB6 (Left Orange Bridge 3) - 0x17DB5 - Stars & Black/White Squares & Stars + Same Colored Symbol & Shapers & Rotated Shapers
@ -708,7 +831,7 @@ Treehouse Left Orange Bridge (Treehouse) - Treehouse Laser Room Front Platform -
158389 - 0x17DB0 (Left Orange Bridge 14) - 0x17DAE - Stars & Black/White Squares & Stars + Same Colored Symbol
158390 - 0x17DDB (Left Orange Bridge 15) - 0x17DB0 - Stars & Black/White Squares & Stars + Same Colored Symbol
Treehouse Green Bridge (Treehouse):
Treehouse Green Bridge (Treehouse) - Treehouse Green Bridge Front House - 0x17E61 - Treehouse Green Bridge Left House - 0x17E61:
158369 - 0x17E3C (Green Bridge 1) - True - Stars & Shapers & Negative Shapers & Stars + Same Colored Symbol
158370 - 0x17E4D (Green Bridge 2) - 0x17E3C - Stars & Shapers & Negative Shapers & Stars + Same Colored Symbol
158371 - 0x17E4F (Green Bridge 3) - 0x17E4D - Stars & Shapers & Negative Shapers & Stars + Same Colored Symbol
@ -716,7 +839,12 @@ Treehouse Green Bridge (Treehouse):
158373 - 0x17E5B (Green Bridge 5) - 0x17E52 - Stars & Shapers & Negative Shapers & Stars + Same Colored Symbol
158374 - 0x17E5F (Green Bridge 6) - 0x17E5B - Stars & Shapers & Negative Shapers & Stars + Same Colored Symbol & Triangles
158375 - 0x17E61 (Green Bridge 7) - 0x17E5F - Stars & Shapers & Negative Shapers & Stars + Same Colored Symbol & Triangles
158610 - 0x17FA9 (Green Bridge Discard) - 0x17E61 - Arrows
Treehouse Green Bridge Front House (Treehouse):
158610 - 0x17FA9 (Green Bridge Discard) - True - Arrows
Treehouse Green Bridge Left House (Treehouse):
159211 - 0x220A7 (Right Orange Bridge EP) - 0x17DA2 - True
Treehouse Laser Room Front Platform (Treehouse) - Treehouse Laser Room - 0x0C323:
Door - 0x0C323 (Laser House Entry) - 0x17DA2 & 0x2700B & 0x17DEC
@ -724,6 +852,9 @@ Door - 0x0C323 (Laser House Entry) - 0x17DA2 & 0x2700B & 0x17DEC
Treehouse Laser Room Back Platform (Treehouse):
158611 - 0x17FA0 (Laser Discard) - True - Arrows
Treehouse Burned House (Treehouse):
159202 - 0x00769 (Burned House Beach EP) - True - True
Treehouse Laser Room (Treehouse):
158712 - 0x03613 (Laser Panel) - True - True
158403 - 0x17CBC (Laser House Door Timer Inside) - True - True
@ -733,12 +864,19 @@ Mountainside (Mountainside) - Main Island - True - Mountaintop - True:
158612 - 0x17C42 (Discard) - True - Arrows
158665 - 0x002A6 (Vault) - True - Symmetry & Colored Squares & Triangles & Stars & Stars + Same Colored Symbol
158666 - 0x03542 (Vault Box) - 0x002A6 - True
159301 - 0x335AE (Cloud Cycle EP) - True - True
159325 - 0x33505 (Bush EP) - True - True
159335 - 0x03C07 (Apparent River EP) - True - True
Mountaintop (Mountaintop) - Mountain Top Layer - 0x17C34:
158405 - 0x0042D (River Shape) - True - True
158406 - 0x09F7F (Box Short) - 7 Lasers - True
158407 - 0x17C34 (Trap Door Triple Exit) - 0x09F7F - Stars & Black/White Squares & Stars + Same Colored Symbol & Triangles
158800 - 0xFFF00 (Box Long) - 7 Lasers & 11 Lasers & 0x17C34 - True
159300 - 0x001A3 (River Shape EP) - True - True
159320 - 0x3370E (Arch Black EP) - True - True
159324 - 0x336C8 (Arch White Right EP) - True - True
159326 - 0x3369A (Arch White Left EP) - True - True
Mountain Top Layer (Mountain Floor 1) - Mountain Top Layer Bridge - 0x09E39:
158408 - 0x09E39 (Light Bridge Controller) - True - Eraser & Triangles
@ -763,7 +901,7 @@ Mountain Top Layer Bridge (Mountain Floor 1) - Mountain Floor 2 - 0x09E54:
158425 - 0x09EAF (Trash Pillar 2) - 0x09EAD - Rotated Shapers & Triangles
Door - 0x09E54 (Exit) - 0x09EAF & 0x09F6E & 0x09E6B & 0x09E7B
Mountain Floor 2 (Mountain Floor 2) - Mountain Floor 2 Light Bridge Room Near - 0x09FFB - Mountain Floor 2 Blue Bridge - 0x09E86:
Mountain Floor 2 (Mountain Floor 2) - Mountain Floor 2 Light Bridge Room Near - 0x09FFB - Mountain Floor 2 Blue Bridge - 0x09E86 - Mountain Pink Bridge EP - TrueOneWay:
158426 - 0x09FD3 (Near Row 1) - True - Stars & Colored Squares & Stars + Same Colored Symbol
158427 - 0x09FD4 (Near Row 2) - 0x09FD3 - Stars & Triangles & Stars + Same Colored Symbol
158428 - 0x09FD6 (Near Row 3) - 0x09FD4 - Stars & Shapers & Negative Shapers & Stars + Same Colored Symbol
@ -779,7 +917,7 @@ Door - 0x09EDD (Elevator Room Entry) - 0x09ED8 & 0x09E86
Mountain Floor 2 Light Bridge Room Near (Mountain Floor 2):
158431 - 0x09E86 (Light Bridge Controller Near) - True - Shapers & Dots
Mountain Floor 2 Beyond Bridge (Mountain Floor 2) - Mountain Floor 2 Light Bridge Room Far - 0x09E07:
Mountain Floor 2 Beyond Bridge (Mountain Floor 2) - Mountain Floor 2 Light Bridge Room Far - 0x09E07 - Mountain Pink Bridge EP - TrueOneWay:
158432 - 0x09FCC (Far Row 1) - True - Triangles
158433 - 0x09FCE (Far Row 2) - 0x09FCC - Black/White Squares & Stars & Stars + Same Colored Symbol
158434 - 0x09FCF (Far Row 3) - 0x09FCE - Stars & Triangles & Stars + Same Colored Symbol
@ -805,11 +943,16 @@ Mountain Third Layer (Mountain Bottom Floor) - Mountain Floor 2 Elevator - TrueO
158444 - 0x09FDA (Giant Puzzle) - 0x09FC1 & 0x09F8E & 0x09F01 & 0x09EFF - Shapers & Symmetry
Door - 0x09F89 (Exit) - 0x09FDA
Mountain Bottom Floor (Mountain Bottom Floor) - Mountain Bottom Floor Rock - 0x17FA2 - Final Room - 0x0C141:
Mountain Bottom Floor (Mountain Bottom Floor) - Mountain Bottom Floor Rock - 0x17FA2 - Final Room - 0x0C141 - Mountain Pink Bridge EP - TrueOneWay:
158614 - 0x17FA2 (Discard) - 0xFFF00 - Arrows
158445 - 0x01983 (Final Room Entry Left) - True - Shapers & Stars
158446 - 0x01987 (Final Room Entry Right) - True - Squares & Colored Squares & Dots
Door - 0x0C141 (Final Room Entry) - 0x01983 & 0x01987
159313 - 0x09D5D (Yellow Bridge EP) - 0x09E86 & 0x09ED8 - True
159314 - 0x09D5E (Blue Bridge EP) - 0x09E86 & 0x09ED8 - True
Mountain Pink Bridge EP (Mountain Floor 2):
159312 - 0x09D63 (Pink Bridge EP) - 0x09E39 - True
Mountain Bottom Floor Rock (Mountain Bottom Floor) - Mountain Bottom Floor - 0x17F33 - Mountain Path to Caves - 0x17F33:
Door - 0x17F33 (Rock Open) - True
@ -872,6 +1015,7 @@ Door - 0x019A5 (Pillar Door) - 0x09DD5
Door - 0x2D73F (Mountain Shortcut Door) - 0x021D7
158450 - 0x17CF2 (Swamp Shortcut Panel) - True - Arrows
Door - 0x2D859 (Swamp Shortcut Door) - 0x17CF2
159341 - 0x3397C (Skylight EP) - True - True
Path to Challenge (Caves) - Challenge - 0x0A19A:
158477 - 0x0A16E (Challenge Entry Panel) - True - Stars & Arrows & Stars + Same Colored Symbol
@ -895,11 +1039,12 @@ Challenge (Challenge) - Tunnels - 0x0348A:
158513 - 0x00C22 (Choice Squares 2 Left) - 0x00CB9 | 0x00CA1 | 0x00C80 - Squares & Black/White Squares & Colored Squares
158514 - 0x034F4 (Maze Hidden 1) - 0x00C68 | 0x00C59 | 0x00C22 - Triangles
158515 - 0x034EC (Maze Hidden 2) - 0x00C68 | 0x00C59 | 0x00C22 - Triangles
158516 - 0x1C31A (Dots Pillar) - 0x034F4 & 0x034EC - Dots & Symmetry & Pillar
158517 - 0x1C319 (Squares Pillar) - 0x034F4 & 0x034EC - Squares & Black/White Squares & Symmetry & Pillar
158516 - 0x1C31A (Dots Pillar) - 0x034F4 & 0x034EC - Dots & Symmetry
158517 - 0x1C319 (Squares Pillar) - 0x034F4 & 0x034EC - Squares & Black/White Squares & Symmetry
158667 - 0x0356B (Vault Box) - 0x1C31A & 0x1C319 - True
158518 - 0x039B4 (Tunnels Entry Panel) - True - Arrows
Door - 0x0348A (Tunnels Entry) - 0x039B4
159530 - 0x28B30 (Water EP) - True - True
Tunnels (Tunnels) - Windmill Interior - 0x27739 - Desert Lowest Level Inbetween Shortcuts - 0x27263 - Town - 0x09E87:
158668 - 0x2FAF6 (Vault Box) - True - True
@ -909,12 +1054,13 @@ Door - 0x27739 (Theater Shortcut) - 0x27732
Door - 0x27263 (Desert Shortcut) - 0x2773D
158521 - 0x09E85 (Town Shortcut Panel) - True - Arrows
Door - 0x09E87 (Town Shortcut) - 0x09E85
159557 - 0x33A20 (Theater Flowers EP) - 0x03553 & Theater to Tunnels - True
Final Room (Mountain Final Room) - Elevator - 0x339BB & 0x33961:
158522 - 0x0383A (Right Pillar 1) - True - Stars & Eraser & Triangles & Stars + Same Colored Symbol
158523 - 0x09E56 (Right Pillar 2) - 0x0383A - Dots & Full Dots & Triangles & Symmetry
158524 - 0x09E5A (Right Pillar 3) - 0x09E56 - Dots & Shapers & Stars & Negative Shapers & Stars + Same Colored Symbol & Symmetry
158525 - 0x33961 (Right Pillar 4) - 0x09E5A - Eraser & Symmetry & Stars & Stars + Same Colored Symbols & Negative Shapers & Shapers
158525 - 0x33961 (Right Pillar 4) - 0x09E5A - Eraser & Symmetry & Stars & Stars + Same Colored Symbol & Negative Shapers & Shapers
158526 - 0x0383D (Left Pillar 1) - True - Stars & Black/White Squares & Stars + Same Colored Symbol
158527 - 0x0383F (Left Pillar 2) - 0x0383D - Triangles & Symmetry
158528 - 0x03859 (Left Pillar 3) - 0x0383F - Symmetry & Shapers & Black/White Squares
@ -930,3 +1076,48 @@ Elevator (Mountain Final Room):
158536 - 0x3D9A9 (Elevator Start) - 0x3D9AA & 7 Lasers | 0x3D9A8 & 7 Lasers - True
Boat (Boat) - Main Island - TrueOneWay - Swamp Near Boat - TrueOneWay - Treehouse Entry Area - TrueOneWay - Quarry Boathouse Behind Staircase - TrueOneWay - Inside Glass Factory Behind Back Wall - TrueOneWay:
159042 - 0x22106 (Desert EP) - True - True
159223 - 0x03B25 (Shipwreck CCW Underside EP) - True - True
159231 - 0x28B29 (Shipwreck Green EP) - True - True
159232 - 0x28B2A (Shipwreck CW Underside EP) - True - True
159323 - 0x03D0D (Bunker Yellow Line EP) - True - True
159515 - 0x28A37 (Town Long Sewer EP) - True - True
159520 - 0x33857 (Tutorial EP) - True - True
159521 - 0x33879 (Tutorial Reflection EP) - True - True
159522 - 0x03C19 (Tutorial Moss EP) - True - True
159531 - 0x035C9 (Cargo Box EP) - 0x0A0C9 - True
Obelisks (EPs) - Entry - True:
159700 - 0xFFE00 (Desert Obelisk Side 1) - 0x0332B & 0x03367 & 0x28B8A - True
159701 - 0xFFE01 (Desert Obelisk Side 2) - 0x037B6 & 0x037B2 & 0x000F7 - True
159702 - 0xFFE02 (Desert Obelisk Side 3) - 0x3351D - True
159703 - 0xFFE03 (Desert Obelisk Side 4) - 0x0053C & 0x00771 & 0x335C8 & 0x335C9 & 0x337F8 & 0x037BB & 0x220E4 & 0x220E5 - True
159704 - 0xFFE04 (Desert Obelisk Side 5) - 0x334B9 & 0x334BC & 0x22106 & 0x0A14C & 0x0A14D - True
159710 - 0xFFE10 (Monastery Obelisk Side 1) - 0x03ABC & 0x03ABE & 0x03AC0 & 0x03AC4 - True
159711 - 0xFFE11 (Monastery Obelisk Side 2) - 0x03AC5 - True
159712 - 0xFFE12 (Monastery Obelisk Side 3) - 0x03BE2 & 0x03BE3 & 0x0A409 - True
159713 - 0xFFE13 (Monastery Obelisk Side 4) - 0x006E5 & 0x006E6 & 0x006E7 & 0x034A7 & 0x034AD & 0x034AF & 0x03DAB & 0x03DAC & 0x03DAD - True
159714 - 0xFFE14 (Monastery Obelisk Side 5) - 0x03E01 - True
159715 - 0xFFE15 (Monastery Obelisk Side 6) - 0x289F4 & 0x289F5 - True
159720 - 0xFFE20 (Treehouse Obelisk Side 1) - 0x0053D & 0x0053E & 0x00769 - True
159721 - 0xFFE21 (Treehouse Obelisk Side 2) - 0x33721 & 0x220A7 & 0x220BD - True
159722 - 0xFFE22 (Treehouse Obelisk Side 3) - 0x03B22 & 0x03B23 & 0x03B24 & 0x03B25 & 0x03A79 & 0x28ABD & 0x28ABE - True
159723 - 0xFFE23 (Treehouse Obelisk Side 4) - 0x3388F & 0x28B29 & 0x28B2A - True
159724 - 0xFFE24 (Treehouse Obelisk Side 5) - 0x018B6 & 0x033BE & 0x033BF & 0x033DD & 0x033E5 - True
159725 - 0xFFE25 (Treehouse Obelisk Side 6) - 0x28AE9 & 0x3348F - True
159730 - 0xFFE30 (River Obelisk Side 1) - 0x001A3 & 0x335AE - True
159731 - 0xFFE31 (River Obelisk Side 2) - 0x000D3 & 0x035F5 & 0x09D5D & 0x09D5E & 0x09D63 - True
159732 - 0xFFE32 (River Obelisk Side 3) - 0x3370E & 0x035DE & 0x03601 & 0x03603 & 0x03D0D & 0x3369A & 0x336C8 & 0x33505 - True
159733 - 0xFFE33 (River Obelisk Side 4) - 0x03A9E & 0x016B2 & 0x3365F & 0x03731 & 0x036CE & 0x03C07 & 0x03A93 - True
159734 - 0xFFE34 (River Obelisk Side 5) - 0x03AA6 & 0x3397C & 0x0105D & 0x0A304 - True
159735 - 0xFFE35 (River Obelisk Side 6) - 0x035CB & 0x035CF - True
159740 - 0xFFE40 (Quarry Obelisk Side 1) - 0x28A7B & 0x005F6 & 0x00859 & 0x17CB9 & 0x28A4A - True
159741 - 0xFFE41 (Quarry Obelisk Side 2) - 0x334B6 & 0x00614 & 0x0069D & 0x28A4C - True
159742 - 0xFFE42 (Quarry Obelisk Side 3) - 0x289CF & 0x289D1 & 0x33692 - True
159743 - 0xFFE43 (Quarry Obelisk Side 4) - 0x03E77 & 0x03E7C - True
159750 - 0xFFE50 (Town Obelisk Side 1) - 0x035C7 - True
159751 - 0xFFE51 (Town Obelisk Side 2) - 0x01848 & 0x03D06 & 0x33530 & 0x33600 & 0x28A2F & 0x28A37 & 0x334A3 & 0x3352F - True
159752 - 0xFFE52 (Town Obelisk Side 3) - 0x33857 & 0x33879 & 0x03C19 - True
159753 - 0xFFE53 (Town Obelisk Side 4) - 0x28B30 & 0x035C9 - True
159754 - 0xFFE54 (Town Obelisk Side 5) - 0x03335 & 0x03412 & 0x038A6 & 0x038AA & 0x03E3F & 0x03E40 & 0x28B8E - True
159755 - 0xFFE55 (Town Obelisk Side 6) - 0x28B91 & 0x03BCE & 0x03BCF & 0x03BD1 & 0x339B6 & 0x33A20 & 0x33A29 & 0x33A2A & 0x33B06 - True

File diff suppressed because it is too large Load Diff

View File

@ -38,7 +38,7 @@ class WitnessWorld(World):
"""
game = "The Witness"
topology_present = False
data_version = 8
data_version = 11
static_logic = StaticWitnessLogic()
static_locat = StaticWitnessLocations()
@ -52,22 +52,27 @@ class WitnessWorld(World):
location_name_to_id = StaticWitnessLocations.ALL_LOCATIONS_TO_ID
item_name_groups = StaticWitnessItems.ITEM_NAME_GROUPS
required_client_version = (0, 3, 6)
required_client_version = (0, 3, 8)
def _get_slot_data(self):
return {
'seed': self.multiworld.random.randint(0, 1000000),
'victory_location': int(self.player_logic.VICTORY_LOCATION, 16),
'panelhex_to_id': self.locat.CHECK_PANELHEX_TO_ID,
'item_id_to_door_hexes': self.items.ITEM_ID_TO_DOOR_HEX,
'door_hexes': self.items.DOORS,
'item_id_to_door_hexes': self.static_items.ITEM_ID_TO_DOOR_HEX_ALL,
'door_hexes_in_the_pool': self.items.DOORS,
'symbols_not_in_the_game': self.items.SYMBOLS_NOT_IN_THE_GAME,
'disabled_panels': self.player_logic.COMPLETELY_DISABLED_CHECKS,
'log_ids_to_hints': self.log_ids_to_hints,
'progressive_item_lists': self.items.MULTI_LISTS_BY_CODE
'progressive_item_lists': self.items.MULTI_LISTS_BY_CODE,
'obelisk_side_id_to_EPs': self.static_logic.OBELISK_SIDE_ID_TO_EP_HEXES,
'precompleted_puzzles': {int(h, 16) for h in self.player_logic.PRECOMPLETED_LOCATIONS},
'ep_to_name': self.static_logic.EP_ID_TO_NAME,
}
def generate_early(self):
self.items_by_name = dict()
if not (is_option_enabled(self.multiworld, self.player, "shuffle_symbols")
or get_option_value(self.multiworld, self.player, "shuffle_doors")
or is_option_enabled(self.multiworld, self.player, "shuffle_lasers")):
@ -78,45 +83,52 @@ class WitnessWorld(World):
raise Exception("This Witness world doesn't have any progression items. Please turn on Symbol Shuffle,"
" Door Shuffle or Laser Shuffle.")
self.player_logic = WitnessPlayerLogic(self.multiworld, self.player)
disabled_locations = self.multiworld.exclude_locations[self.player].value
self.player_logic = WitnessPlayerLogic(
self.multiworld, self.player, disabled_locations, self.multiworld.start_inventory[self.player].value
)
self.locat = WitnessPlayerLocations(self.multiworld, self.player, self.player_logic)
self.items = WitnessPlayerItems(self.locat, self.multiworld, self.player, self.player_logic)
self.regio = WitnessRegions(self.locat)
self.log_ids_to_hints = dict()
self.junk_items_created = {key: 0 for key in self.items.JUNK_WEIGHTS.keys()}
def create_regions(self):
self.regio.create_regions(self.multiworld, self.player, self.player_logic)
def generate_basic(self):
self.log_ids_to_hints = dict()
self.junk_items_created = {key: 0 for key in self.items.JUNK_WEIGHTS.keys()}
# Generate item pool
pool = []
items_by_name = dict()
for item in self.items.ITEM_TABLE:
for i in range(0, self.items.PROG_ITEM_AMOUNTS[item]):
if item in self.items.PROGRESSION_TABLE:
witness_item = self.create_item(item)
pool.append(witness_item)
items_by_name[item] = witness_item
self.items_by_name[item] = witness_item
less_junk = 0
# Put good item on first check if symbol shuffle is on
symbols = is_option_enabled(self.multiworld, self.player, "shuffle_symbols")
dog_check = self.multiworld.get_location(
"Town Pet the Dog", self.player
)
if symbols and get_option_value(self.multiworld, self.player, "puzzle_randomization") != 1:
random_good_item = self.multiworld.random.choice(self.items.GOOD_ITEMS)
dog_check.place_locked_item(self.create_item("Puzzle Skip"))
first_check = self.multiworld.get_location(
"Tutorial Gate Open", self.player
)
first_check.place_locked_item(items_by_name[random_good_item])
pool.remove(items_by_name[random_good_item])
less_junk += 1
less_junk = 1
for precol_item in self.multiworld.precollected_items[self.player]:
if precol_item.name in self.items_by_name: # if item is in the pool, remove 1 instance.
item_obj = self.items_by_name[precol_item.name]
if item_obj in pool:
pool.remove(item_obj) # remove one instance of this pre-collected item if it exists
for item in self.player_logic.STARTING_INVENTORY:
self.multiworld.push_precollected(items_by_name[item])
pool.remove(items_by_name[item])
self.multiworld.push_precollected(self.items_by_name[item])
pool.remove(self.items_by_name[item])
for item in self.items.EXTRA_AMOUNTS:
for i in range(0, self.items.EXTRA_AMOUNTS[item]):
@ -140,8 +152,25 @@ class WitnessWorld(World):
self.multiworld.itempool += pool
def create_regions(self):
self.regio.create_regions(self.multiworld, self.player, self.player_logic)
def pre_fill(self):
# Put good item on first check if there are any of the designated "good items" in the pool
good_items_in_the_game = []
for symbol in self.items.GOOD_ITEMS:
item = self.items_by_name[symbol]
if item in self.multiworld.itempool: # Only do this if the item is still in item pool (e.g. after plando)
good_items_in_the_game.append(symbol)
if good_items_in_the_game:
random_good_item = self.multiworld.random.choice(good_items_in_the_game)
first_check = self.multiworld.get_location(
"Tutorial Gate Open", self.player
)
item = self.items_by_name[random_good_item]
first_check.place_locked_item(item)
self.multiworld.itempool.remove(item)
def set_rules(self):
set_rules(self.multiworld, self.player, self.player_logic, self.locat)
@ -150,7 +179,9 @@ class WitnessWorld(World):
hint_amount = get_option_value(self.multiworld, self.player, "hint_amount")
credits_hint = (
"This Randomizer", "is brought to you by", "NewSoupVi, Jarno, jbzdarkid, sigma144, IHNN, blastron", -1
"This Randomizer is brought to you by",
"NewSoupVi, Jarno, blastron,",
"jbzdarkid, sigma144, IHNN, oddGarrett.", -1
)
audio_logs = get_audio_logs().copy()
@ -158,12 +189,12 @@ class WitnessWorld(World):
if hint_amount != 0:
generated_hints = make_hints(self.multiworld, self.player, hint_amount)
self.multiworld.random.shuffle(audio_logs)
self.multiworld.slot_seeds[self.player].shuffle(audio_logs)
duplicates = len(audio_logs) // hint_amount
for _ in range(0, hint_amount):
hint = generated_hints.pop()
hint = generated_hints.pop(0)
for _ in range(0, duplicates):
audio_log = audio_logs.pop()
@ -173,7 +204,7 @@ class WitnessWorld(World):
audio_log = audio_logs.pop()
self.log_ids_to_hints[int(audio_log, 16)] = credits_hint
joke_hints = generate_joke_hints(self.multiworld, len(audio_logs))
joke_hints = generate_joke_hints(self.multiworld, self.player, len(audio_logs))
while audio_logs:
audio_log = audio_logs.pop()
@ -192,7 +223,7 @@ class WitnessWorld(World):
def create_item(self, name: str) -> Item:
# this conditional is purely for unit tests, which need to be able to create an item before generate_early
if hasattr(self, 'items'):
if hasattr(self, 'items') and name in self.items.ITEM_TABLE:
item = self.items.ITEM_TABLE[name]
else:
item = StaticWitnessItems.ALL_ITEM_TABLE[name]

View File

@ -35,4 +35,15 @@ Example: "Shipwreck Vault contains Triangles".
## The Jungle, Orchard, Forest and Color House aren't randomized. What gives?
There are limitations to what can currently be randomized in The Witness.
There is an option to turn these non-randomized panels off, called "disable_non_randomized" in your yaml file. This will also slightly change the activation requirement of certain panels, detailed [here](https://github.com/sigma144/witness-randomizer/wiki/Activation-Triggers).
There is an option to turn these non-randomized panels off, called "disable_non_randomized" in your yaml file. This will also slightly change the activation requirement of certain panels, detailed [here](https://github.com/sigma144/witness-randomizer/wiki/Activation-Triggers).
## A note on starting inventory and excluded locations
In this randomizer, items added to start_inventory will be removed from the item pool (as many copies as specified).
It is also possible to add items to the starting inventory that are not part of the mode you are playing.
In this case, the generator will make its best attempt to adjust logic accordingly.
One of the use cases of this could be to pre-open a specific door or pre-activate a single laser.
In "shuffle_EPs: obelisk_sides", any Environmental Puzzles in exclude_locations will be pre-completed and not considered for their Obelisk Side.
If every Environmental Puzzle on an Obelisk Side is pre-completed, that side disappears from the location pool entirely.

View File

@ -17,7 +17,7 @@ joke_hints = [
("Have you tried ChecksFinder?", "If you like puzzles,", "you might enjoy it!"),
("Have you tried Dark Souls III?", "A tough game like this", "feels better when friends are helping you!"),
("Have you tried Donkey Kong Country 3?", "A legendary game", "from a golden age of platformers!"),
("Have you tried Factorio?", "Alone in an unknown world.", "Sound familiar?"),
("Have you tried Factorio?", "Alone in an unknown multiworld.", "Sound familiar?"),
("Have you tried Final Fantasy?", "Experience a classic game", "improved to fit modern standards!"),
("Have you tried Hollow Knight?", "Another independent hit", "revolutionising a genre!"),
("Have you tried A Link to the Past?", "The Archipelago game", "that started it all!"),
@ -95,17 +95,18 @@ joke_hints = [
]
def get_always_hint_items(world: MultiWorld, player: int):
def get_always_hint_items(multiworld: MultiWorld, player: int):
priority = [
"Boat",
"Mountain Bottom Floor Final Room Entry (Door)",
"Caves Mountain Shortcut (Door)",
"Caves Swamp Shortcut (Door)",
"Caves Exits to Main Island",
"Progressive Dots",
]
difficulty = get_option_value(world, player, "puzzle_randomization")
discards = is_option_enabled(world, player, "shuffle_discards")
difficulty = get_option_value(multiworld, player, "puzzle_randomization")
discards = is_option_enabled(multiworld, player, "shuffle_discarded_panels")
if discards:
if difficulty == 1:
@ -116,16 +117,19 @@ def get_always_hint_items(world: MultiWorld, player: int):
return priority
def get_always_hint_locations(world: MultiWorld, player: int):
def get_always_hint_locations(multiworld: MultiWorld, player: int):
return {
"Swamp Purple Underwater",
"Shipwreck Vault Box",
"Challenge Vault Box",
"Mountain Bottom Floor Discard",
"Theater Eclipse EP",
"Shipwreck Couch EP",
"Mountainside Cloud Cycle EP",
}
def get_priority_hint_items(world: MultiWorld, player: int):
def get_priority_hint_items(multiworld: MultiWorld, player: int):
priority = {
"Negative Shapers",
"Sound Dots",
@ -135,7 +139,7 @@ def get_priority_hint_items(world: MultiWorld, player: int):
"Swamp Laser Shortcut (Door)",
}
if is_option_enabled(world, player, "shuffle_lasers"):
if is_option_enabled(multiworld, player, "shuffle_lasers"):
lasers = {
"Symmetry Laser",
"Desert Laser",
@ -150,18 +154,18 @@ def get_priority_hint_items(world: MultiWorld, player: int):
"Shadows Laser",
}
if get_option_value(world, player, "doors") >= 2:
if get_option_value(multiworld, player, "doors") >= 2:
priority.add("Desert Laser")
lasers.remove("Desert Laser")
priority.update(world.random.sample(lasers, 2))
priority.update(multiworld.slot_seeds[player].sample(lasers, 2))
else:
priority.update(world.random.sample(lasers, 3))
priority.update(multiworld.slot_seeds[player].sample(lasers, 3))
return priority
def get_priority_hint_locations(world: MultiWorld, player: int):
def get_priority_hint_locations(multiworld: MultiWorld, player: int):
return {
"Town RGB Room Left",
"Town RGB Room Right",
@ -171,75 +175,85 @@ def get_priority_hint_locations(world: MultiWorld, player: int):
"Desert Vault Box",
"Mountainside Vault Box",
"Mountainside Discard",
"Tunnels Theater Flowers EP",
"Boat Shipwreck Green EP",
}
def make_hint_from_item(world: MultiWorld, player: int, item: str):
location_obj = world.find_item(item, player).item.location
def make_hint_from_item(multiworld: MultiWorld, player: int, item: str):
location_obj = multiworld.find_item(item, player).item.location
location_name = location_obj.name
if location_obj.player != player:
location_name += " (" + world.get_player_name(location_obj.player) + ")"
location_name += " (" + multiworld.get_player_name(location_obj.player) + ")"
return location_name, item, location_obj.address if(location_obj.player == player) else -1
def make_hint_from_location(world: MultiWorld, player: int, location: str):
location_obj = world.get_location(location, player)
item_obj = world.get_location(location, player).item
def make_hint_from_location(multiworld: MultiWorld, player: int, location: str):
location_obj = multiworld.get_location(location, player)
item_obj = multiworld.get_location(location, player).item
item_name = item_obj.name
if item_obj.player != player:
item_name += " (" + world.get_player_name(item_obj.player) + ")"
item_name += " (" + multiworld.get_player_name(item_obj.player) + ")"
return location, item_name, location_obj.address if(location_obj.player == player) else -1
def make_hints(world: MultiWorld, player: int, hint_amount: int):
def make_hints(multiworld: MultiWorld, player: int, hint_amount: int):
hints = list()
prog_items_in_this_world = {
item.name for item in world.get_items()
item.name for item in multiworld.get_items()
if item.player == player and item.code and item.advancement
}
loc_in_this_world = {
location.name for location in world.get_locations()
if location.player == player and not location.event
location.name for location in multiworld.get_locations()
if location.player == player and location.address
}
always_locations = [
location for location in get_always_hint_locations(world, player)
location for location in get_always_hint_locations(multiworld, player)
if location in loc_in_this_world
]
always_items = [
item for item in get_always_hint_items(world, player)
item for item in get_always_hint_items(multiworld, player)
if item in prog_items_in_this_world
]
priority_locations = [
location for location in get_priority_hint_locations(world, player)
location for location in get_priority_hint_locations(multiworld, player)
if location in loc_in_this_world
]
priority_items = [
item for item in get_priority_hint_items(world, player)
item for item in get_priority_hint_items(multiworld, player)
if item in prog_items_in_this_world
]
always_hint_pairs = dict()
for item in always_items:
hint_pair = make_hint_from_item(world, player, item)
hint_pair = make_hint_from_item(multiworld, player, item)
if hint_pair[2] == 158007: # Tutorial Gate Open
continue
always_hint_pairs[hint_pair[0]] = (hint_pair[1], True, hint_pair[2])
for location in always_locations:
hint_pair = make_hint_from_location(world, player, location)
hint_pair = make_hint_from_location(multiworld, player, location)
always_hint_pairs[hint_pair[0]] = (hint_pair[1], False, hint_pair[2])
priority_hint_pairs = dict()
for item in priority_items:
hint_pair = make_hint_from_item(world, player, item)
hint_pair = make_hint_from_item(multiworld, player, item)
if hint_pair[2] == 158007: # Tutorial Gate Open
continue
priority_hint_pairs[hint_pair[0]] = (hint_pair[1], True, hint_pair[2])
for location in priority_locations:
hint_pair = make_hint_from_location(world, player, location)
hint_pair = make_hint_from_location(multiworld, player, location)
priority_hint_pairs[hint_pair[0]] = (hint_pair[1], False, hint_pair[2])
for loc, item in always_hint_pairs.items():
@ -248,17 +262,19 @@ def make_hints(world: MultiWorld, player: int, hint_amount: int):
else:
hints.append((loc, "contains", item[0], item[2]))
next_random_hint_is_item = world.random.randint(0, 2)
multiworld.slot_seeds[player].shuffle(hints) # shuffle always hint order in case of low hint amount
next_random_hint_is_item = multiworld.slot_seeds[player].randint(0, 2)
prog_items_in_this_world = sorted(list(prog_items_in_this_world))
locations_in_this_world = sorted(list(loc_in_this_world))
world.random.shuffle(prog_items_in_this_world)
world.random.shuffle(locations_in_this_world)
multiworld.slot_seeds[player].shuffle(prog_items_in_this_world)
multiworld.slot_seeds[player].shuffle(locations_in_this_world)
while len(hints) < hint_amount:
if priority_hint_pairs:
loc = world.random.choice(list(priority_hint_pairs.keys()))
loc = multiworld.slot_seeds[player].choice(list(priority_hint_pairs.keys()))
item = priority_hint_pairs[loc]
del priority_hint_pairs[loc]
@ -273,10 +289,10 @@ def make_hints(world: MultiWorld, player: int, hint_amount: int):
next_random_hint_is_item = not next_random_hint_is_item
continue
hint = make_hint_from_item(world, player, prog_items_in_this_world.pop())
hint = make_hint_from_item(multiworld, player, prog_items_in_this_world.pop())
hints.append((hint[1], "can be found at", hint[0], hint[2]))
else:
hint = make_hint_from_location(world, player, locations_in_this_world.pop())
hint = make_hint_from_location(multiworld, player, locations_in_this_world.pop())
hints.append((hint[0], "contains", hint[1], hint[2]))
next_random_hint_is_item = not next_random_hint_is_item
@ -284,5 +300,5 @@ def make_hints(world: MultiWorld, player: int, hint_amount: int):
return hints
def generate_joke_hints(world: MultiWorld, amount: int):
return [(x, y, z, -1) for (x, y, z) in world.random.sample(joke_hints, amount)]
def generate_joke_hints(multiworld: MultiWorld, player: int, amount: int):
return [(x, y, z, -1) for (x, y, z) in multiworld.slot_seeds[player].sample(joke_hints, amount)]

View File

@ -51,6 +51,8 @@ class StaticWitnessItems:
ALL_JUNK_ITEMS = set(BONUS_WEIGHTS.keys()) | set(TRAP_WEIGHTS.keys())
ITEM_ID_TO_DOOR_HEX_ALL = dict()
def __init__(self):
item_tab = dict()
@ -62,6 +64,13 @@ class StaticWitnessItems:
self.ITEM_NAME_GROUPS.setdefault("Symbols", set()).add(item[0])
for progressive, item_list in StaticWitnessLogic.PROGRESSIVE_TO_ITEMS.items():
if not item_list:
continue
if item_list[0] in self.ITEM_NAME_GROUPS.setdefault("Symbols", set()):
self.ITEM_NAME_GROUPS.setdefault("Symbols", set()).add(progressive)
for item in StaticWitnessLogic.ALL_DOOR_ITEMS:
item_tab[item[0]] = ItemData(158000 + item[1], True, False)
@ -91,6 +100,9 @@ class StaticWitnessItems:
for key, item in item_tab.items():
self.ALL_ITEM_TABLE[key] = item
for door in StaticWitnessLogic.ALL_DOOR_ITEMS:
self.ITEM_ID_TO_DOOR_HEX_ALL[door[1] + 158000] = {int(door_hex, 16) for door_hex in door[2]}
class WitnessPlayerItems:
"""
@ -101,10 +113,33 @@ class WitnessPlayerItems:
def code(item_name: str):
return StaticWitnessItems.ALL_ITEM_TABLE[item_name].code
def __init__(self, locat: WitnessPlayerLocations, world: MultiWorld, player: int, player_logic: WitnessPlayerLogic):
@staticmethod
def is_progression(item_name: str, multiworld: MultiWorld, player: int):
useless_doors = {
"River Monastery Shortcut (Door)",
"Jungle & River Shortcuts",
"Monastery Shortcut (Door)",
"Orchard Second Gate (Door)",
}
if item_name in useless_doors:
return False
ep_doors = {
"Monastery Garden Entry (Door)",
"Monastery Shortcuts",
}
if item_name in ep_doors:
return get_option_value(multiworld, player, "shuffle_EPs") != 0
return True
def __init__(self, locat: WitnessPlayerLocations, multiworld: MultiWorld, player: int, logic: WitnessPlayerLogic):
"""Adds event items after logic changes due to options"""
self.EVENT_ITEM_TABLE = dict()
self.ITEM_TABLE = copy.copy(StaticWitnessItems.ALL_ITEM_TABLE)
self.PROGRESSION_TABLE = dict()
self.ITEM_ID_TO_DOOR_HEX = dict()
@ -116,27 +151,31 @@ class WitnessPlayerItems:
self.EXTRA_AMOUNTS = {
"Functioning Brain": 1,
"Puzzle Skip": get_option_value(world, player, "puzzle_skip_amount")
"Puzzle Skip": get_option_value(multiworld, player, "puzzle_skip_amount")
}
for k, v in self.ITEM_TABLE.items():
if v.progression and not self.is_progression(k, multiworld, player):
self.ITEM_TABLE[k] = ItemData(v.code, False, False, never_exclude=True)
for item in StaticWitnessLogic.ALL_SYMBOL_ITEMS.union(StaticWitnessLogic.ALL_DOOR_ITEMS):
if item[0] not in player_logic.PROG_ITEMS_ACTUALLY_IN_THE_GAME:
if item[0] not in logic.PROG_ITEMS_ACTUALLY_IN_THE_GAME:
del self.ITEM_TABLE[item[0]]
if item in StaticWitnessLogic.ALL_SYMBOL_ITEMS:
self.SYMBOLS_NOT_IN_THE_GAME.add(StaticWitnessItems.ALL_ITEM_TABLE[item[0]].code)
else:
if item[0] in StaticWitnessLogic.PROGRESSIVE_TO_ITEMS:
self.PROG_ITEM_AMOUNTS[item[0]] = len(player_logic.MULTI_LISTS[item[0]])
self.PROG_ITEM_AMOUNTS[item[0]] = len(logic.MULTI_LISTS[item[0]])
self.PROGRESSION_TABLE[item[0]] = self.ITEM_TABLE[item[0]]
self.MULTI_LISTS_BY_CODE = dict()
for item in self.PROG_ITEM_AMOUNTS:
multi_list = player_logic.MULTI_LISTS[item]
multi_list = logic.MULTI_LISTS[item]
self.MULTI_LISTS_BY_CODE[self.code(item)] = [self.code(single_item) for single_item in multi_list]
for entity_hex, items in player_logic.DOOR_ITEMS_BY_ID.items():
for entity_hex, items in logic.DOOR_ITEMS_BY_ID.items():
entity_hex_int = int(entity_hex, 16)
self.DOORS.add(entity_hex_int)
@ -145,26 +184,33 @@ class WitnessPlayerItems:
item_id = StaticWitnessItems.ALL_ITEM_TABLE[item].code
self.ITEM_ID_TO_DOOR_HEX.setdefault(item_id, set()).add(entity_hex_int)
symbols = is_option_enabled(world, player, "shuffle_symbols")
symbols = is_option_enabled(multiworld, player, "shuffle_symbols")
if "shuffle_symbols" not in the_witness_options.keys():
symbols = True
doors = get_option_value(world, player, "shuffle_doors")
doors = get_option_value(multiworld, player, "shuffle_doors")
if doors and symbols:
self.GOOD_ITEMS = []
if symbols:
self.GOOD_ITEMS = [
"Progressive Dots", "Black/White Squares", "Symmetry"
]
elif symbols:
self.GOOD_ITEMS = [
"Progressive Dots", "Black/White Squares", "Progressive Stars",
"Dots", "Black/White Squares", "Stars",
"Shapers", "Symmetry"
]
if is_option_enabled(world, player, "shuffle_discarded_panels"):
self.GOOD_ITEMS.append("Triangles")
if not is_option_enabled(world, player, "disable_non_randomized_puzzles"):
if doors:
self.GOOD_ITEMS = [
"Dots", "Black/White Squares", "Symmetry"
]
if is_option_enabled(multiworld, player, "shuffle_discarded_panels"):
if is_option_enabled(multiworld, player, "shuffle_discarded_panels"):
if get_option_value(multiworld, player, "puzzle_randomization") == 1:
self.GOOD_ITEMS.append("Arrows")
else:
self.GOOD_ITEMS.append("Triangles")
if not is_option_enabled(multiworld, player, "disable_non_randomized_puzzles"):
self.GOOD_ITEMS.append("Colored Squares")
self.GOOD_ITEMS = [
@ -172,11 +218,11 @@ class WitnessPlayerItems:
]
for event_location in locat.EVENT_LOCATION_TABLE:
location = player_logic.EVENT_ITEM_PAIRS[event_location]
location = logic.EVENT_ITEM_PAIRS[event_location]
self.EVENT_ITEM_TABLE[location] = ItemData(None, True, True)
self.ITEM_TABLE[location] = ItemData(None, True, True)
trap_percentage = get_option_value(world, player, "trap_percentage")
trap_percentage = get_option_value(multiworld, player, "trap_percentage")
self.JUNK_WEIGHTS = dict()

View File

@ -13,13 +13,6 @@ class StaticWitnessLocations:
"""
ID_START = 158000
TYPE_OFFSETS = {
"General": 0,
"Discard": 600,
"Vault": 650,
"Laser": 700,
}
EXTRA_LOCATIONS = {
"Tutorial Front Left",
"Tutorial Back Left",
@ -143,7 +136,214 @@ class StaticWitnessLocations:
"Theater Mountain Video",
"Town RGB Room Left",
"Town RGB Room Right",
"Town Sound Room Right",
"Swamp Purple Underwater",
"First Hallway EP",
"Tutorial Cloud EP",
"Tutorial Patio Flowers EP",
"Tutorial Gate EP",
"Outside Tutorial Garden EP",
"Outside Tutorial Town Sewer EP",
"Outside Tutorial Path EP",
"Outside Tutorial Tractor EP",
"Main Island Thundercloud EP",
"Glass Factory Vase EP",
"Symmetry Island Glass Factory Black Line Reflection EP",
"Symmetry Island Glass Factory Black Line EP",
"Desert Sand Snake EP",
"Desert Facade Right EP",
"Desert Facade Left EP",
"Desert Stairs Left EP",
"Desert Stairs Right EP",
"Desert Broken Wall Straight EP",
"Desert Broken Wall Bend EP",
"Desert Shore EP",
"Desert Island EP",
"Desert Pond Room Near Reflection EP",
"Desert Pond Room Far Reflection EP",
"Desert Flood Room EP",
"Desert Elevator EP",
"Quarry Shore EP",
"Quarry Entrance Pipe EP",
"Quarry Sand Pile EP",
"Quarry Rock Line EP",
"Quarry Rock Line Reflection EP",
"Quarry Railroad EP",
"Quarry Mill Ramp EP",
"Quarry Mill Lift EP",
"Quarry Boathouse Moving Ramp EP",
"Quarry Boathouse Hook EP",
"Shadows Quarry Mill Rooftop Vent EP",
"Treehouse Beach Rock Shadow EP",
"Treehouse Beach Sand Shadow EP",
"Treehouse Beach Both Orange Bridges EP",
"Keep Red Flowers EP",
"Keep Purple Flowers EP",
"Shipwreck Circle Near EP",
"Shipwreck Circle Left EP",
"Shipwreck Circle Far EP",
"Shipwreck Stern EP",
"Shipwreck Rope Inner EP",
"Shipwreck Rope Outer EP",
"Shipwreck Couch EP",
"Keep Pressure Plates 1 EP",
"Keep Pressure Plates 2 EP",
"Keep Pressure Plates 3 EP",
"Keep Pressure Plates 4 Left Exit EP",
"Keep Pressure Plates 4 Right Exit EP",
"Keep Path EP",
"Keep Hedges EP",
"Monastery Facade Left Near EP",
"Monastery Facade Left Far Short EP",
"Monastery Facade Left Far Long EP",
"Monastery Facade Right Near EP",
"Monastery Facade Left Stairs EP",
"Monastery Facade Right Stairs EP",
"Monastery Grass Stairs EP",
"Monastery Left Shutter EP",
"Monastery Middle Shutter EP",
"Monastery Right Shutter EP",
"Town Windmill First Blade EP",
"Town Windmill Second Blade EP",
"Town Windmill Third Blade EP",
"Town Tower Underside First EP",
"Town Tower Underside Second EP",
"Town Tower Underside Third EP",
"Town Tower Underside Fourth EP",
"Town RGB House Red EP",
"Town RGB House Green EP",
"Town Maze Bridge Underside EP",
"Town Black Line Redirect EP",
"Town Black Line Church EP",
"Town Brown Bridge EP",
"Town Black Line Tower EP",
"Theater Eclipse EP",
"Theater Window EP",
"Theater Door EP",
"Theater Church EP",
"Jungle Long Arch Moss EP",
"Jungle Straight Left Moss EP",
"Jungle Pop-up Wall Moss EP",
"Jungle Short Arch Moss EP",
"Jungle Entrance EP",
"Jungle Tree Halo EP",
"Jungle Bamboo CCW EP",
"Jungle Bamboo CW EP",
"River Green Leaf Moss EP",
"River Monastery Garden Left EP",
"River Monastery Garden Right EP",
"River Monastery Wall EP",
"Bunker Tinted Door EP",
"Bunker Green Room Flowers EP",
"Swamp Purple Sand Middle EP",
"Swamp Purple Sand Top EP",
"Swamp Purple Sand Bottom EP",
"Swamp Sliding Bridge Left EP",
"Swamp Sliding Bridge Right EP",
"Swamp Cyan Underwater Sliding Bridge EP",
"Swamp Rotating Bridge CCW EP",
"Swamp Rotating Bridge CW EP",
"Swamp Boat EP",
"Swamp Long Bridge Side EP",
"Swamp Purple Underwater Right EP",
"Swamp Purple Underwater Left EP",
"Treehouse Buoy EP",
"Treehouse Right Orange Bridge EP",
"Treehouse Burned House Beach EP",
"Mountainside Cloud Cycle EP",
"Mountainside Bush EP",
"Mountainside Apparent River EP",
"Mountaintop River Shape EP",
"Mountaintop Arch Black EP",
"Mountaintop Arch White Right EP",
"Mountaintop Arch White Left EP",
"Mountain Bottom Floor Yellow Bridge EP",
"Mountain Bottom Floor Blue Bridge EP",
"Mountain Floor 2 Pink Bridge EP",
"Caves Skylight EP",
"Challenge Water EP",
"Tunnels Theater Flowers EP",
"Boat Desert EP",
"Boat Shipwreck CCW Underside EP",
"Boat Shipwreck Green EP",
"Boat Shipwreck CW Underside EP",
"Boat Bunker Yellow Line EP",
"Boat Town Long Sewer EP",
"Boat Tutorial EP",
"Boat Tutorial Reflection EP",
"Boat Tutorial Moss EP",
"Boat Cargo Box EP",
"Desert Obelisk Side 1",
"Desert Obelisk Side 2",
"Desert Obelisk Side 3",
"Desert Obelisk Side 4",
"Desert Obelisk Side 5",
"Monastery Obelisk Side 1",
"Monastery Obelisk Side 2",
"Monastery Obelisk Side 3",
"Monastery Obelisk Side 4",
"Monastery Obelisk Side 5",
"Monastery Obelisk Side 6",
"Treehouse Obelisk Side 1",
"Treehouse Obelisk Side 2",
"Treehouse Obelisk Side 3",
"Treehouse Obelisk Side 4",
"Treehouse Obelisk Side 5",
"Treehouse Obelisk Side 6",
"River Obelisk Side 1",
"River Obelisk Side 2",
"River Obelisk Side 3",
"River Obelisk Side 4",
"River Obelisk Side 5",
"River Obelisk Side 6",
"Quarry Obelisk Side 1",
"Quarry Obelisk Side 2",
"Quarry Obelisk Side 3",
"Quarry Obelisk Side 4",
"Town Obelisk Side 1",
"Town Obelisk Side 2",
"Town Obelisk Side 3",
"Town Obelisk Side 4",
"Town Obelisk Side 5",
"Town Obelisk Side 6",
}
OBELISK_SIDES = {
"Desert Obelisk Side 1",
"Desert Obelisk Side 2",
"Desert Obelisk Side 3",
"Desert Obelisk Side 4",
"Desert Obelisk Side 5",
"Monastery Obelisk Side 1",
"Monastery Obelisk Side 2",
"Monastery Obelisk Side 3",
"Monastery Obelisk Side 4",
"Monastery Obelisk Side 5",
"Monastery Obelisk Side 6",
"Treehouse Obelisk Side 1",
"Treehouse Obelisk Side 2",
"Treehouse Obelisk Side 3",
"Treehouse Obelisk Side 4",
"Treehouse Obelisk Side 5",
"Treehouse Obelisk Side 6",
"River Obelisk Side 1",
"River Obelisk Side 2",
"River Obelisk Side 3",
"River Obelisk Side 4",
"River Obelisk Side 5",
"River Obelisk Side 6",
"Quarry Obelisk Side 1",
"Quarry Obelisk Side 2",
"Quarry Obelisk Side 3",
"Quarry Obelisk Side 4",
"Town Obelisk Side 1",
"Town Obelisk Side 2",
"Town Obelisk Side 3",
"Town Obelisk Side 4",
"Town Obelisk Side 5",
"Town Obelisk Side 6",
}
CAVES_LOCATIONS = {
@ -170,8 +370,12 @@ class StaticWitnessLocations:
"Caves Left Upstairs Left Row 5",
"Tunnels Vault Box",
"Mountain Bottom Floor Discard",
"Theater Challenge Video",
"Caves Skylight EP",
"Challenge Water EP",
"Tunnels Theater Flowers EP",
"Tutorial Gate EP",
}
MOUNTAIN_UNREACHABLE_FROM_BEHIND = {
@ -183,6 +387,10 @@ class StaticWitnessLocations:
"Mountain Floor 1 Trash Pillar 2",
"Mountain Floor 2 Near Row 5",
"Mountain Floor 2 Far Row 6",
"Mountain Bottom Floor Yellow Bridge EP",
"Mountain Bottom Floor Blue Bridge EP",
"Mountain Floor 2 Pink Bridge EP",
}
MOUNTAIN_REACHABLE_FROM_BEHIND = {
@ -213,10 +421,11 @@ class StaticWitnessLocations:
def get_event_name(panel_hex):
"""
Returns the event name of any given panel.
Currently this is always "Panelname Solved"
"""
return StaticWitnessLogic.CHECKS_BY_HEX[panel_hex]["checkName"] + " Solved"
action = " Opened" if StaticWitnessLogic.CHECKS_BY_HEX[panel_hex]["panelType"] == "Door" else " Solved"
return StaticWitnessLogic.CHECKS_BY_HEX[panel_hex]["checkName"] + action
def __init__(self):
all_loc_to_id = {
@ -286,11 +495,26 @@ class WitnessPlayerLocations:
if is_option_enabled(world, player, "shuffle_vault_boxes"):
self.PANEL_TYPES_TO_SHUFFLE.add("Vault")
if get_option_value(world, player, "shuffle_EPs") == 1:
self.PANEL_TYPES_TO_SHUFFLE.add("EP")
elif get_option_value(world, player, "shuffle_EPs") == 2:
self.PANEL_TYPES_TO_SHUFFLE.add("Obelisk Side")
for obelisk_loc in StaticWitnessLocations.OBELISK_SIDES:
obelisk_loc_hex = StaticWitnessLogic.CHECKS_BY_NAME[obelisk_loc]["checkHex"]
if player_logic.REQUIREMENTS_BY_HEX[obelisk_loc_hex] == frozenset({frozenset()}):
self.CHECK_LOCATIONS.discard(obelisk_loc)
self.CHECK_LOCATIONS = self.CHECK_LOCATIONS | player_logic.ADDED_CHECKS
if not is_option_enabled(world, player, "shuffle_postgame"):
self.CHECK_LOCATIONS -= postgame
self.CHECK_LOCATIONS -= {
StaticWitnessLogic.CHECKS_BY_HEX[panel]["checkName"]
for panel in player_logic.PRECOMPLETED_LOCATIONS
}
self.CHECK_LOCATIONS.discard(StaticWitnessLogic.CHECKS_BY_HEX[player_logic.VICTORY_LOCATION]["checkName"])
self.CHECK_LOCATIONS = self.CHECK_LOCATIONS - {
@ -301,8 +525,13 @@ class WitnessPlayerLocations:
self.CHECK_PANELHEX_TO_ID = {
StaticWitnessLogic.CHECKS_BY_NAME[ch]["checkHex"]: StaticWitnessLocations.ALL_LOCATIONS_TO_ID[ch]
for ch in self.CHECK_LOCATIONS
if StaticWitnessLogic.CHECKS_BY_NAME[ch]["panelType"] in self.PANEL_TYPES_TO_SHUFFLE
}
dog_hex = StaticWitnessLogic.CHECKS_BY_NAME["Town Pet the Dog"]["checkHex"]
dog_id = StaticWitnessLocations.ALL_LOCATIONS_TO_ID["Town Pet the Dog"]
self.CHECK_PANELHEX_TO_ID[dog_hex] = dog_id
self.CHECK_PANELHEX_TO_ID = dict(
sorted(self.CHECK_PANELHEX_TO_ID.items(), key=lambda item: item[1])
)
@ -317,9 +546,9 @@ class WitnessPlayerLocations:
}
check_dict = {
location: StaticWitnessLocations.get_id(StaticWitnessLogic.CHECKS_BY_NAME[location]["checkHex"])
for location in self.CHECK_LOCATIONS
if StaticWitnessLogic.CHECKS_BY_NAME[location]["panelType"] in self.PANEL_TYPES_TO_SHUFFLE
StaticWitnessLogic.CHECKS_BY_HEX[location]["checkName"]:
StaticWitnessLocations.get_id(StaticWitnessLogic.CHECKS_BY_HEX[location]["checkHex"])
for location in self.CHECK_PANELHEX_TO_ID
}
self.CHECK_LOCATION_TABLE = {**self.EVENT_LOCATION_TABLE, **check_dict}

View File

@ -16,11 +16,15 @@ When the world has parsed its options, a second function is called to finalize t
"""
import copy
from typing import Set, Dict
from logging import warning
from BaseClasses import MultiWorld
from .static_logic import StaticWitnessLogic
from .utils import define_new_region, get_disable_unrandomized_list, parse_lambda, get_early_utm_list, \
get_symbol_shuffle_list, get_door_panel_shuffle_list, get_doors_complex_list, get_doors_max_list, \
get_doors_simple_list, get_laser_shuffle
get_doors_simple_list, get_laser_shuffle, get_ep_all_individual, get_ep_obelisks, get_ep_easy, get_ep_no_eclipse, \
get_ep_no_caves, get_ep_no_mountain, get_ep_no_videos
from .Options import is_option_enabled, get_option_value, the_witness_options
@ -71,6 +75,8 @@ class WitnessPlayerLogic:
these_panels = self.DEPENDENT_REQUIREMENTS_BY_HEX[panel_hex]["panels"]
these_panels = frozenset({panels - self.PRECOMPLETED_LOCATIONS for panels in these_panels})
if these_panels == frozenset({frozenset()}):
return these_items
@ -84,7 +90,7 @@ class WitnessPlayerLogic:
if option_panel in self.COMPLETELY_DISABLED_CHECKS:
new_items = frozenset()
elif option_panel in {"7 Lasers", "11 Lasers", "PP2 Weirdness"}:
elif option_panel in {"7 Lasers", "11 Lasers", "PP2 Weirdness", "Theater to Tunnels"}:
new_items = frozenset({frozenset([option_panel])})
# If a panel turns on when a panel in a different region turns on,
# the latter panel will be an "event panel", unless it ends up being
@ -207,8 +213,13 @@ class WitnessPlayerLogic:
return
if adj_type == "Added Locations":
if "0x" in line:
line = StaticWitnessLogic.CHECKS_BY_HEX[line]["checkName"]
self.ADDED_CHECKS.add(line)
if adj_type == "Precompleted Locations":
self.PRECOMPLETED_LOCATIONS.add(line)
def make_options_adjustments(self, world, player):
"""Makes logic adjustments based on options"""
adjustment_linesets_in_order = []
@ -234,6 +245,29 @@ class WitnessPlayerLogic:
if is_option_enabled(world, player, "shuffle_symbols") or "shuffle_symbols" not in the_witness_options.keys():
adjustment_linesets_in_order.append(get_symbol_shuffle_list())
if get_option_value(world, player, "EP_difficulty") == 0:
adjustment_linesets_in_order.append(get_ep_easy())
elif get_option_value(world, player, "EP_difficulty") == 1:
adjustment_linesets_in_order.append(get_ep_no_eclipse())
if not is_option_enabled(world, player, "shuffle_vault_boxes"):
adjustment_linesets_in_order.append(get_ep_no_videos())
doors = get_option_value(world, player, "shuffle_doors") >= 2
earlyutm = is_option_enabled(world, player, "early_secret_area")
victory = get_option_value(world, player, "victory_condition")
mount_lasers = get_option_value(world, player, "mountain_lasers")
chal_lasers = get_option_value(world, player, "challenge_lasers")
excluse_postgame = not is_option_enabled(world, player, "shuffle_postgame")
if excluse_postgame and not (earlyutm or doors):
adjustment_linesets_in_order.append(get_ep_no_caves())
mountain_enterable_from_top = victory == 0 or victory == 1 or (victory == 3 and chal_lasers > mount_lasers)
if excluse_postgame and not mountain_enterable_from_top:
adjustment_linesets_in_order.append(get_ep_no_mountain())
if get_option_value(world, player, "shuffle_doors") == 1:
adjustment_linesets_in_order.append(get_door_panel_shuffle_list())
@ -249,9 +283,35 @@ class WitnessPlayerLogic:
if is_option_enabled(world, player, "early_secret_area"):
adjustment_linesets_in_order.append(get_early_utm_list())
for item in self.YAML_ADDED_ITEMS:
adjustment_linesets_in_order.append(["Items:", item])
if is_option_enabled(world, player, "shuffle_lasers"):
adjustment_linesets_in_order.append(get_laser_shuffle())
if get_option_value(world, player, "shuffle_EPs") == 0: # No EP Shuffle
adjustment_linesets_in_order.append(["Disabled Locations:"] + get_ep_all_individual()[1:])
adjustment_linesets_in_order.append(["Disabled Locations:"] + get_ep_obelisks()[1:])
elif get_option_value(world, player, "shuffle_EPs") == 1: # Individual EPs
adjustment_linesets_in_order.append(["Disabled Locations:"] + get_ep_obelisks()[1:])
else: # Obelisk Sides
yaml_disabled_eps = []
for yaml_disabled_location in self.YAML_DISABLED_LOCATIONS:
if yaml_disabled_location not in StaticWitnessLogic.CHECKS_BY_NAME:
continue
loc_obj = StaticWitnessLogic.CHECKS_BY_NAME[yaml_disabled_location]
if loc_obj["panelType"] != "EP":
continue
yaml_disabled_eps.append(loc_obj["checkHex"])
adjustment_linesets_in_order.append(["Precompleted Locations:"] + yaml_disabled_eps)
for adjustment_lineset in adjustment_linesets_in_order:
current_adjustment_type = None
@ -290,7 +350,18 @@ class WitnessPlayerLogic:
"""
Makes a pair of an event panel and its event item
"""
name = self.REFERENCE_LOGIC.CHECKS_BY_HEX[panel]["checkName"] + " Solved"
action = " Opened" if StaticWitnessLogic.CHECKS_BY_HEX[panel]["panelType"] == "Door" else " Solved"
name = StaticWitnessLogic.CHECKS_BY_HEX[panel]["checkName"] + action
if panel not in self.EVENT_ITEM_NAMES:
if StaticWitnessLogic.CHECKS_BY_HEX[panel]["panelType"] == "EP":
obelisk = StaticWitnessLogic.CHECKS_BY_HEX[StaticWitnessLogic.EP_TO_OBELISK_SIDE[panel]]["checkName"]
self.EVENT_ITEM_NAMES[panel] = obelisk + " - " + StaticWitnessLogic.CHECKS_BY_HEX[panel]["checkName"]
else:
warning("Panel \"" + name + "\" does not have an associated event name.")
self.EVENT_ITEM_NAMES[panel] = name + " Event"
pair = (name, self.EVENT_ITEM_NAMES[panel])
return pair
@ -323,7 +394,10 @@ class WitnessPlayerLogic:
pair = self.make_event_item_pair(panel)
self.EVENT_ITEM_PAIRS[pair[0]] = pair[1]
def __init__(self, world: MultiWorld, player: int):
def __init__(self, world: MultiWorld, player: int, disabled_locations: Set[str], start_inv: Dict[str, int]):
self.YAML_DISABLED_LOCATIONS = disabled_locations
self.YAML_ADDED_ITEMS = start_inv
self.EVENT_PANELS_FROM_PANELS = set()
self.EVENT_PANELS_FROM_REGIONS = set()
@ -342,6 +416,8 @@ class WitnessPlayerLogic:
self.REFERENCE_LOGIC = StaticWitnessLogic.sigma_normal
elif self.DIFFICULTY == 1:
self.REFERENCE_LOGIC = StaticWitnessLogic.sigma_expert
elif self.DIFFICULTY == 2:
self.REFERENCE_LOGIC = StaticWitnessLogic.vanilla
self.CONNECTIONS_BY_REGION_NAME = copy.copy(self.REFERENCE_LOGIC.STATIC_CONNECTIONS_BY_REGION_NAME)
self.DEPENDENT_REQUIREMENTS_BY_HEX = copy.copy(self.REFERENCE_LOGIC.STATIC_DEPENDENT_REQUIREMENTS_BY_HEX)
@ -353,6 +429,7 @@ class WitnessPlayerLogic:
self.EVENT_ITEM_PAIRS = dict()
self.ALWAYS_EVENT_HEX_CODES = set()
self.COMPLETELY_DISABLED_CHECKS = set()
self.PRECOMPLETED_LOCATIONS = set()
self.ADDED_CHECKS = set()
self.VICTORY_LOCATION = "0x0356B"
self.EVENT_ITEM_NAMES = {
@ -366,7 +443,7 @@ class WitnessPlayerLogic:
"0x019DC": "Keep Hedges 2 Knowledge",
"0x019E7": "Keep Hedges 3 Knowledge",
"0x01D3F": "Keep Laser Panel (Pressure Plates) Activates",
"0x01BE9": "Keep Laser Panel (Pressure Plates) Activates",
"0x01BE9": "Keep Laser Panel (Pressure Plates) Activates - Expert",
"0x09F7F": "Mountain Access",
"0x0367C": "Quarry Laser Mill Requirement Met",
"0x009A1": "Swamp Between Bridges Far 1 Activates",
@ -385,6 +462,7 @@ class WitnessPlayerLogic:
"0x17CDF": "All Boat Panels Turn On",
"0x09DB8": "All Boat Panels Turn On",
"0x17C95": "All Boat Panels Turn On",
"0x0A054": "Couch EP solvable",
"0x03BB0": "Town Church Lattice Vision From Outside",
"0x28AC1": "Town Wooden Rooftop Turns On",
"0x28A69": "Town Tower 1st Door Opens",
@ -411,6 +489,24 @@ class WitnessPlayerLogic:
"0x03613": "Treehouse Orange Bridge 13 Turns On",
"0x17DEC": "Treehouse Laser House Access Requirement",
"0x03C08": "Town Church Entry Opens",
"0x17D02": "Windmill Blades Spinning",
"0x0A0C9": "Cargo Box EP completable",
"0x09E39": "Pink Light Bridge Extended",
"0x01CD3": "Pressure Plates 3 EP available",
"0x17CC4": "Rails EP available",
"0x2896A": "Bridge Underside EP available",
"0x00064": "First Tunnel EP visible",
"0x033EA": "Pressure Plates 1 EP available",
"0x03553": "Tutorial Video EPs availble",
"0x17C79": "Bunker Door EP available",
"0x275FF": "Mill Light EPs available",
"0x17E2B": "Remaining Purple Sand EPs available",
"0x03852": "Ramp EPs requirement",
"0x334D8": "RGB panels & EPs solvable",
"0x03750": "Left Garden EP available",
"0x03C0C": "RGB Flowers EP requirement",
"0x01CD5": "Pressure Plates 3 EP requirement",
"0x3865F": "Ramp EPs access requirement",
}
self.ALWAYS_EVENT_NAMES_BY_HEX = {

View File

@ -6,7 +6,7 @@ and connects them with the proper requirements
from BaseClasses import MultiWorld, Entrance
from .static_logic import StaticWitnessLogic
from .Options import get_option_value
from .locations import WitnessPlayerLocations
from .locations import WitnessPlayerLocations, StaticWitnessLocations
from .player_logic import WitnessPlayerLogic
@ -27,7 +27,7 @@ class WitnessRegions:
)
def connect(self, world: MultiWorld, player: int, source: str, target: str, player_logic: WitnessPlayerLogic,
panel_hex_to_solve_set=None):
panel_hex_to_solve_set=frozenset({frozenset()})):
"""
connect two regions and set the corresponding requirement
"""
@ -63,8 +63,10 @@ class WitnessRegions:
if difficulty == 1:
reference_logic = StaticWitnessLogic.sigma_expert
else:
elif difficulty == 0:
reference_logic = StaticWitnessLogic.sigma_normal
else:
reference_logic = StaticWitnessLogic.vanilla
all_locations = set()
@ -74,8 +76,8 @@ class WitnessRegions:
if reference_logic.CHECKS_BY_HEX[panel]["checkName"] in self.locat.CHECK_LOCATION_TABLE
]
locations_for_this_region += [
reference_logic.CHECKS_BY_HEX[panel]["checkName"] + " Solved" for panel in region["panels"]
if reference_logic.CHECKS_BY_HEX[panel]["checkName"] + " Solved" in self.locat.EVENT_LOCATION_TABLE
StaticWitnessLocations.get_event_name(panel) for panel in region["panels"]
if StaticWitnessLocations.get_event_name(panel) in self.locat.EVENT_LOCATION_TABLE
]
all_locations = all_locations | set(locations_for_this_region)
@ -86,9 +88,6 @@ class WitnessRegions:
for region_name, region in reference_logic.ALL_REGIONS_BY_NAME.items():
for connection in player_logic.CONNECTIONS_BY_REGION_NAME[region_name]:
if connection[0] == "Entry":
continue
if connection[1] == frozenset({frozenset(["TrueOneWay"])}):
self.connect(world, player, region_name, connection[0], player_logic, frozenset({frozenset()}))
continue

View File

@ -20,35 +20,24 @@ class WitnessLogic(LogicMixin):
"""
def _witness_has_lasers(self, world, player: int, amount: int) -> bool:
regular_lasers = not is_option_enabled(world, player, "shuffle_lasers")
lasers = 0
if is_option_enabled(world, player, "shuffle_lasers"):
lasers += int(self.has("Symmetry Laser", player))
lasers += int(self.has("Desert Laser", player)
and self.has("Desert Laser Redirection", player))
lasers += int(self.has("Town Laser", player))
lasers += int(self.has("Monastery Laser", player))
lasers += int(self.has("Keep Laser", player))
lasers += int(self.has("Quarry Laser", player))
lasers += int(self.has("Treehouse Laser", player))
lasers += int(self.has("Jungle Laser", player))
lasers += int(self.has("Bunker Laser", player))
lasers += int(self.has("Swamp Laser", player))
lasers += int(self.has("Shadows Laser", player))
return lasers >= amount
place_names = [
"Symmetry", "Desert", "Town", "Monastery", "Keep",
"Quarry", "Treehouse", "Jungle", "Bunker", "Swamp", "Shadows"
]
lasers += int(self.has("Symmetry Laser Activation", player))
lasers += int(self.has("Desert Laser Activation", player)
and self.has("Desert Laser Redirection", player))
lasers += int(self.has("Town Laser Activation", player))
lasers += int(self.has("Monastery Laser Activation", player))
lasers += int(self.has("Keep Laser Activation", player))
lasers += int(self.has("Quarry Laser Activation", player))
lasers += int(self.has("Treehouse Laser Activation", player))
lasers += int(self.has("Jungle Laser Activation", player))
lasers += int(self.has("Bunker Laser Activation", player))
lasers += int(self.has("Swamp Laser Activation", player))
lasers += int(self.has("Shadows Laser Activation", player))
for place in place_names:
has_laser = self.has(place + " Laser", player)
has_laser = has_laser or (regular_lasers and self.has(place + " Laser Activation", player))
if place == "Desert":
has_laser = has_laser and self.has("Desert Laser Redirection", player)
lasers += int(has_laser)
return lasers >= amount
@ -84,11 +73,15 @@ class WitnessLogic(LogicMixin):
for item in option:
if item == "7 Lasers":
if not self._witness_has_lasers(world, player, get_option_value(world, player, "mountain_lasers")):
laser_req = get_option_value(world, player, "mountain_lasers")
if not self._witness_has_lasers(world, player, laser_req):
valid_option = False
break
elif item == "11 Lasers":
if not self._witness_has_lasers(world, player, get_option_value(world, player, "challenge_lasers")):
laser_req = get_option_value(world, player, "challenge_lasers")
if not self._witness_has_lasers(world, player, laser_req):
valid_option = False
break
elif item == "PP2 Weirdness":
@ -142,6 +135,24 @@ class WitnessLogic(LogicMixin):
if not (front_access and backwards_access):
valid_option = False
break
elif item == "Theater to Tunnels":
direct_access = (
self.can_reach("Tunnels to Windmill Interior", "Entrance", player)
and self.can_reach("Windmill Interior to Theater", "Entrance", player)
)
exit_to_town = self.can_reach("Theater to Town", "Entrance", player)
entrance_to_town = (
self.can_reach("Town to Windmill Interior", "Entrance", player)
and self.can_reach("Windmill Interior to Theater", "Entrance", player)
)
tunnels_to_town = self.can_reach("Tunnels to Town", "Entrance", player)
if not (direct_access or (exit_to_town or entrance_to_town) and tunnels_to_town):
valid_option = False
break
elif item in player_logic.EVENT_PANELS:
if not self._witness_can_solve_panel(item, world, player, player_logic, locat):
valid_option = False

View File

@ -111,6 +111,18 @@ Disabled Locations:
0x17E67 (Bunker UV Room 2)
0x09DE0 (Bunker Laser)
0x0A079 (Bunker Elevator Control)
0x0042D (Mountaintop River Shape)
0x17CAA (River Garden Entry Panel)
0x034A7 (Left Shutter EP)
0x034AD (Middle Shutter EP)
0x034AF (Right Shutter EP)
0x339B6 (Eclipse EP) - 0x03549 - True
0x33A29 (Window EP) - 0x03553 - True
0x33A2A (Door EP) - 0x03553 - True
0x33B06 (Church EP) - 0x0354E - True
0x3352F (Gate EP)
0x33600 (Patio Flowers EP)
0x035F5 (Tinted Door EP)
0x000D3 (Green Room Flowers EP)
0x33A20 (Theater Flowers EP)

View File

@ -0,0 +1,136 @@
Added Locations:
0x0332B
0x03367
0x28B8A
0x037B6
0x037B2
0x000F7
0x3351D
0x0053C
0x00771
0x335C8
0x335C9
0x337F8
0x037BB
0x220E4
0x220E5
0x334B9
0x334BC
0x22106
0x0A14C
0x0A14D
0x03ABC
0x03ABE
0x03AC0
0x03AC4
0x03AC5
0x03BE2
0x03BE3
0x0A409
0x006E5
0x006E6
0x006E7
0x034A7
0x034AD
0x034AF
0x03DAB
0x03DAC
0x03DAD
0x03E01
0x289F4
0x289F5
0x0053D
0x0053E
0x00769
0x33721
0x220A7
0x220BD
0x03B22
0x03B23
0x03B24
0x03B25
0x03A79
0x28ABD
0x28ABE
0x3388F
0x28B29
0x28B2A
0x018B6
0x033BE
0x033BF
0x033DD
0x033E5
0x28AE9
0x3348F
0x001A3
0x335AE
0x000D3
0x035F5
0x09D5D
0x09D5E
0x09D63
0x3370E
0x035DE
0x03601
0x03603
0x03D0D
0x3369A
0x336C8
0x33505
0x03A9E
0x016B2
0x3365F
0x03731
0x036CE
0x03C07
0x03A93
0x03AA6
0x3397C
0x0105D
0x0A304
0x035CB
0x035CF
0x28A7B
0x005F6
0x00859
0x17CB9
0x28A4A
0x334B6
0x0069D
0x00614
0x28A4C
0x289CF
0x289D1
0x33692
0x03E77
0x03E7C
0x035C7
0x01848
0x03D06
0x33530
0x33600
0x28A2F
0x28A37
0x334A3
0x3352F
0x33857
0x33879
0x03C19
0x28B30
0x035C9
0x03335
0x03412
0x038A6
0x038AA
0x03E3F
0x03E40
0x28B8E
0x28B91
0x03BCE
0x03BCF
0x03BD1
0x339B6
0x33A20
0x33A29
0x33A2A
0x33B06

View File

@ -0,0 +1,11 @@
Precompleted Locations:
0x335AE
0x3388F
0x33A20
0x037B2
0x000F7
0x28B29
0x33857
0x33879
0x016B2
0x036CE

View File

@ -0,0 +1,5 @@
Precompleted Locations:
0x3397C
0x33A20
0x3352F
0x28B30

View File

@ -0,0 +1,2 @@
Precompleted Locations:
0x339B6

View File

@ -0,0 +1,4 @@
Precompleted Locations:
0x09D63
0x09D5D
0x09D5E

View File

@ -0,0 +1,34 @@
Added Locations:
0xFFE00
0xFFE01
0xFFE02
0xFFE03
0xFFE04
0xFFE10
0xFFE11
0xFFE12
0xFFE13
0xFFE14
0xFFE15
0xFFE20
0xFFE21
0xFFE22
0xFFE23
0xFFE24
0xFFE25
0xFFE30
0xFFE31
0xFFE32
0xFFE33
0xFFE34
0xFFE35
0xFFE40
0xFFE41
0xFFE42
0xFFE43
0xFFE50
0xFFE51
0xFFE52
0xFFE53
0xFFE54
0xFFE55

View File

@ -0,0 +1,6 @@
Precompleted Locations:
0x339B6
0x33A29
0x33A2A
0x33B06
0x33A20

View File

@ -40,9 +40,11 @@ class StaticWitnessLogicObj:
required_panel_lambda = line_split.pop(0)
full_check_name = current_region["shortName"] + " " + check_name
if location_id == "Door" or location_id == "Laser":
self.CHECKS_BY_HEX[check_hex] = {
"checkName": current_region["shortName"] + " " + check_name,
"checkName": full_check_name,
"checkHex": check_hex,
"region": current_region,
"id": None,
@ -74,20 +76,38 @@ class StaticWitnessLogicObj:
location_type = "Vault"
elif check_name in laser_names:
location_type = "Laser"
elif "Obelisk Side" in check_name:
location_type = "Obelisk Side"
full_check_name = check_name
elif "EP" in check_name:
location_type = "EP"
self.EP_ID_TO_NAME[check_hex] = full_check_name
else:
location_type = "General"
required_items = parse_lambda(required_item_lambda)
required_panels = parse_lambda(required_panel_lambda)
required_items = frozenset(required_items)
requirement = {
"panels": parse_lambda(required_panel_lambda),
"panels": required_panels,
"items": required_items
}
if location_type == "Obelisk Side":
eps = set(list(required_panels)[0])
eps -= {"Theater to Tunnels"}
eps_ints = {int(h, 16) for h in eps}
self.OBELISK_SIDE_ID_TO_EP_HEXES[int(check_hex, 16)] = eps_ints
for ep_hex in eps:
self.EP_TO_OBELISK_SIDE[ep_hex] = check_hex
self.CHECKS_BY_HEX[check_hex] = {
"checkName": current_region["shortName"] + " " + check_name,
"checkName": full_check_name,
"checkHex": check_hex,
"region": current_region,
"id": int(location_id),
@ -108,6 +128,12 @@ class StaticWitnessLogicObj:
self.CHECKS_BY_NAME = dict()
self.STATIC_DEPENDENT_REQUIREMENTS_BY_HEX = dict()
self.OBELISK_SIDE_ID_TO_EP_HEXES = dict()
self.EP_TO_OBELISK_SIDE = dict()
self.EP_ID_TO_NAME = dict()
self.read_logic_file(file_path)
@ -125,10 +151,16 @@ class StaticWitnessLogic:
ALL_REGIONS_BY_NAME = dict()
STATIC_CONNECTIONS_BY_REGION_NAME = dict()
OBELISK_SIDE_ID_TO_EP_HEXES = dict()
CHECKS_BY_HEX = dict()
CHECKS_BY_NAME = dict()
STATIC_DEPENDENT_REQUIREMENTS_BY_HEX = dict()
EP_TO_OBELISK_SIDE = dict()
EP_ID_TO_NAME = dict()
def parse_items(self):
"""
Parses currently defined items from WitnessItems.txt
@ -185,6 +217,10 @@ class StaticWitnessLogic:
def sigma_normal(self) -> StaticWitnessLogicObj:
return StaticWitnessLogicObj("WitnessLogic.txt")
@lazy
def vanilla(self) -> StaticWitnessLogicObj:
return StaticWitnessLogicObj("WitnessLogicVanilla.txt")
def __init__(self):
self.parse_items()
@ -195,3 +231,8 @@ class StaticWitnessLogic:
self.CHECKS_BY_NAME.update(self.sigma_normal.CHECKS_BY_NAME)
self.STATIC_DEPENDENT_REQUIREMENTS_BY_HEX.update(self.sigma_normal.STATIC_DEPENDENT_REQUIREMENTS_BY_HEX)
self.OBELISK_SIDE_ID_TO_EP_HEXES.update(self.sigma_normal.OBELISK_SIDE_ID_TO_EP_HEXES)
self.EP_TO_OBELISK_SIDE.update(self.sigma_normal.EP_TO_OBELISK_SIDE)
self.EP_ID_TO_NAME.update(self.sigma_normal.EP_ID_TO_NAME)

View File

@ -155,3 +155,38 @@ def get_laser_shuffle():
@cache_argsless
def get_audio_logs():
return get_adjustment_file("settings/Audio_Logs.txt")
@cache_argsless
def get_ep_all_individual():
return get_adjustment_file("settings/EP_Shuffle/EP_All.txt")
@cache_argsless
def get_ep_obelisks():
return get_adjustment_file("settings/EP_Shuffle/EP_Sides.txt")
@cache_argsless
def get_ep_easy():
return get_adjustment_file("settings/EP_Shuffle/EP_Easy.txt")
@cache_argsless
def get_ep_no_eclipse():
return get_adjustment_file("settings/EP_Shuffle/EP_NoEclipse.txt")
@cache_argsless
def get_ep_no_caves():
return get_adjustment_file("settings/EP_Shuffle/EP_NoCavesEPs.txt")
@cache_argsless
def get_ep_no_mountain():
return get_adjustment_file("settings/EP_Shuffle/EP_NoMountainEPs.txt")
@cache_argsless
def get_ep_no_videos():
return get_adjustment_file("settings/EP_Shuffle/EP_Videos.txt")