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" 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): class ShufflePostgame(Toggle):
"""Adds locations into the pool that are guaranteed to become accessible after or at the same time as your goal. """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 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" display_name = "Puzzle Randomization"
option_sigma_normal = 0 option_sigma_normal = 0
option_sigma_expert = 1 option_sigma_expert = 1
option_none = 2
class MountainLasers(Range): class MountainLasers(Range):
@ -133,6 +159,8 @@ the_witness_options: Dict[str, type] = {
"disable_non_randomized_puzzles": DisableNonRandomizedPuzzles, "disable_non_randomized_puzzles": DisableNonRandomizedPuzzles,
"shuffle_discarded_panels": ShuffleDiscardedPanels, "shuffle_discarded_panels": ShuffleDiscardedPanels,
"shuffle_vault_boxes": ShuffleVaultBoxes, "shuffle_vault_boxes": ShuffleVaultBoxes,
"shuffle_EPs": ShuffleEnvironmentalPuzzles,
"EP_difficulty": EnvironmentalPuzzlesDifficulty,
"shuffle_postgame": ShufflePostgame, "shuffle_postgame": ShufflePostgame,
"victory_condition": VictoryCondition, "victory_condition": VictoryCondition,
"mountain_lasers": MountainLasers, "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 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: Tutorial (Tutorial) - Outside Tutorial - 0x03629:
158002 - 0x00293 (Front Center) - True - True 158002 - 0x00293 (Front Center) - True - True
@ -10,8 +15,11 @@ Tutorial (Tutorial) - Outside Tutorial - 0x03629:
158006 - 0x0A3B2 (Back Right) - True - True 158006 - 0x0A3B2 (Back Right) - True - True
158007 - 0x03629 (Gate Open) - 0x002C2 & 0x0A3B5 & 0x0A3B2 - True 158007 - 0x03629 (Gate Open) - 0x002C2 & 0x0A3B5 & 0x0A3B2 - True
158008 - 0x03505 (Gate Close) - 0x2FAF6 - True 158008 - 0x03505 (Gate Close) - 0x2FAF6 - True
158009 - 0x0C335 (Pillar) - True - Triangles - True 158009 - 0x0C335 (Pillar) - True - Triangles
158010 - 0x0C373 (Patio Floor) - 0x0C335 - Dots 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: Outside Tutorial (Outside Tutorial) - Outside Tutorial Path To Outpost - 0x03BA2:
158650 - 0x033D4 (Vault) - True - Dots & Black/White Squares 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 158025 - 0x00020 (Tree Row 8) - 0x0001F - Black/White Squares
158026 - 0x00021 (Tree Row 9) - 0x00020 - Black/White Squares 158026 - 0x00021 (Tree Row 9) - 0x00020 - Black/White Squares
Door - 0x03BA2 (Outpost Path) - 0x0A3B5 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: Outside Tutorial Path To Outpost (Outside Tutorial) - Outside Tutorial Outpost - 0x0A170:
158011 - 0x0A171 (Outpost Entry Panel) - True - Dots & Full Dots 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 Door - 0x04CA3 (Outpost Exit) - 0x04CA4
158600 - 0x17CFB (Discard) - True - Triangles 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: Outside Glass Factory (Glass Factory) - Main Island - True - Inside Glass Factory - 0x01A29:
158027 - 0x01A54 (Entry Panel) - True - Symmetry 158027 - 0x01A54 (Entry Panel) - True - Symmetry
Door - 0x01A29 (Entry) - 0x01A54 Door - 0x01A29 (Entry) - 0x01A54
158601 - 0x3C12B (Discard) - True - Triangles 158601 - 0x3C12B (Discard) - True - Triangles
159002 - 0x28B8A (Vase EP) - 0x01A54 - True
Inside Glass Factory (Glass Factory) - Inside Glass Factory Behind Back Wall - 0x0D7ED: Inside Glass Factory (Glass Factory) - Inside Glass Factory Behind Back Wall - 0x0D7ED:
158028 - 0x00086 (Back Wall 1) - True - Symmetry 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 158063 - 0x00B8D (Scenery Outlines 5) - 0x00B53 - Symmetry
158064 - 0x1C349 (Upper Panel) - 0x00076 - Symmetry & Dots 158064 - 0x1C349 (Upper Panel) - 0x00076 - Symmetry & Dots
Door - 0x18269 (Upper) - 0x1C349 Door - 0x18269 (Upper) - 0x1C349
159000 - 0x0332B (Glass Factory Black Line Reflection EP) - True - True
Symmetry Island Upper (Symmetry Island): Symmetry Island Upper (Symmetry Island):
158065 - 0x00A52 (Yellow 1) - True - Symmetry & Colored Dots 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 158069 - 0x00A64 (Blue 2) - 0x00A61 & 0x00A52 - Symmetry & Colored Dots
158070 - 0x00A68 (Blue 3) - 0x00A64 & 0x00A57 - Symmetry & Colored Dots 158070 - 0x00A68 (Blue 3) - 0x00A64 & 0x00A57 - Symmetry & Colored Dots
158700 - 0x0360D (Laser Panel) - 0x00A68 - True 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: Orchard (Orchard) - Main Island - True - Orchard Beyond First Gate - 0x03307:
158071 - 0x00143 (Apple Tree 1) - True - True 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 158084 - 0x09F94 (Surface 8) - 0x0A053 & 0x09F86 - True
158085 - 0x09F86 (Surface 8 Control) - 0x0A053 - True 158085 - 0x09F86 (Surface 8 Control) - 0x0A053 - True
158086 - 0x0C339 (Light Room Entry Panel) - 0x09F94 - 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 158701 - 0x03608 (Laser Panel) - 0x012D7 & 0x0A15F - True
Laser - 0x012FB (Laser) - 0x03608 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: Desert Floodlight Room (Desert) - Desert Pond Room - 0x0C2C3:
158087 - 0x09FAA (Light Control) - True - True 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 158095 - 0x18313 (Pond Room 5) - 0x0078D - True
158096 - 0x0A249 (Flood Room Entry Panel) - 0x18313 - True 158096 - 0x0A249 (Flood Room Entry Panel) - 0x18313 - True
Door - 0x0A24B (Flood Room Entry) - 0x0A249 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: Desert Water Levels Room (Desert) - Desert Elevator Room - 0x0C316:
158097 - 0x1C2DF (Reduce Water Level Far Left) - True - True 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 158109 - 0x17ECA (Flood Room 5) - 0x0117A & 0x1C260 & 0x1831C - True
158110 - 0x18076 (Flood Room 6) - 0x17ECA & 0x1C260 & 0x1831C - True 158110 - 0x18076 (Flood Room 6) - 0x17ECA & 0x1C260 & 0x1831C - True
Door - 0x0C316 (Elevator Room Entry) - 0x18076 Door - 0x0C316 (Elevator Room Entry) - 0x18076
159034 - 0x337F8 (Flood Room EP) - 0x1C2DF - True
Desert Elevator Room (Desert) - Desert Lowest Level Inbetween Shortcuts - 0x012FB: Desert Elevator Room (Desert) - Desert Lowest Level Inbetween Shortcuts - 0x012FB:
158111 - 0x17C31 (Final Transparent) - True - True 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 158115 - 0x0A15C (Final Bent 1) - True - True
158116 - 0x09FFF (Final Bent 2) - 0x0A15C - True 158116 - 0x09FFF (Final Bent 2) - 0x0A15C - True
158117 - 0x0A15F (Final Bent 3) - 0x09FFF - True 158117 - 0x0A15F (Final Bent 3) - 0x09FFF - True
159035 - 0x037BB (Elevator EP) - 0x012FB - True
Desert Lowest Level Inbetween Shortcuts (Desert): 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 158118 - 0x09E57 (Entry 1 Panel) - True - Black/White Squares
158120 - 0x17CC4 (Elevator Control) - 0x0367C - Dots & Eraser
158603 - 0x17CF0 (Discard) - True - Triangles 158603 - 0x17CF0 (Discard) - True - Triangles
158702 - 0x03612 (Laser Panel) - 0x0A3D0 & 0x0367C - Eraser & Shapers 158702 - 0x03612 (Laser Panel) - 0x0A3D0 & 0x0367C - Eraser & Shapers
Laser - 0x01539 (Laser) - 0x03612 Laser - 0x01539 (Laser) - 0x03612
Door - 0x09D6F (Entry 1) - 0x09E57 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: Quarry Between Entrys (Quarry) - Quarry - 0x17C07:
158119 - 0x17C09 (Entry 2 Panel) - True - Shapers 158119 - 0x17C09 (Entry 2 Panel) - True - Shapers
Door - 0x17C07 (Entry 2) - 0x17C09 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 158121 - 0x01E5A (Mill Entry Left Panel) - True - Black/White Squares
158122 - 0x01E59 (Mill Entry Right Panel) - True - Dots 158122 - 0x01E59 (Mill Entry Right Panel) - True - Dots
Door - 0x02010 (Mill Entry) - 0x01E59 & 0x01E5A 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 Door - 0x0368A (Stairs) - 0x03677
158143 - 0x3C125 (Control Room Left) - 0x0367C - Black/White Squares & Dots & Eraser 158143 - 0x3C125 (Control Room Left) - 0x0367C - Black/White Squares & Dots & Eraser
158144 - 0x0367C (Control Room Right) - 0x014E9 - Colored 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: Quarry Boathouse (Quarry Boathouse) - Quarry - True - Quarry Boathouse Upper Front - 0x03852 - Quarry Boathouse Behind Staircase - 0x2769B:
158146 - 0x034D4 (Intro Left) - True - Stars 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: Quarry Boathouse Upper Middle (Quarry Boathouse) - Quarry Boathouse Upper Back - 0x03858:
158154 - 0x03858 (Ramp Horizontal Control) - True - Shapers & Eraser 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: Quarry Boathouse Upper Back (Quarry Boathouse) - Quarry Boathouse Upper Middle - 0x3865F:
158155 - 0x38663 (Second Barrier Panel) - True - True 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 158167 - 0x0A3CB (Back Second Row 1) - 0x09DB4 - Stars & Eraser & Shapers
158168 - 0x0A3CC (Back Second Row 2) - 0x0A3CB - Stars & Eraser & Shapers 158168 - 0x0A3CC (Back Second Row 2) - 0x0A3CB - Stars & Eraser & Shapers
158169 - 0x0A3D0 (Back Second Row 3) - 0x0A3CC - 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: Shadows (Shadows) - Main Island - True - Shadows Ledge - 0x19B24 - Shadows Laser Room - 0x194B2 & 0x19665:
158170 - 0x334DB (Door Timer Outside) - True - True 158170 - 0x334DB (Door Timer Outside) - True - True
@ -289,6 +330,7 @@ Door - 0x194B2 (Laser Entry Right) - 0x1972F
158185 - 0x197E8 (Near 4) - 0x197E0 - True 158185 - 0x197E8 (Near 4) - 0x197E0 - True
158186 - 0x197E5 (Near 5) - 0x197E8 - True 158186 - 0x197E5 (Near 5) - 0x197E8 - True
Door - 0x19665 (Laser Entry Left) - 0x197E5 Door - 0x19665 (Laser Entry Left) - 0x197E5
159400 - 0x28A7B (Quarry Mill Rooftop Vent EP) - True - True
Shadows Ledge (Shadows) - Shadows - 0x1855B - Quarry - 0x19865 & 0x0A2DF: Shadows Ledge (Shadows) - Shadows - 0x1855B - Quarry - 0x19865 & 0x0A2DF:
158187 - 0x334DC (Door Timer Inside) - True - True 158187 - 0x334DC (Door Timer Inside) - True - True
@ -306,12 +348,19 @@ Shadows Laser Room (Shadows):
158703 - 0x19650 (Laser Panel) - True - True 158703 - 0x19650 (Laser Panel) - True - True
Laser - 0x181B3 (Laser) - 0x19650 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: Keep (Keep) - Main Island - True - Keep 2nd Maze - 0x01954 - Keep 2nd Pressure Plate - 0x01BEC:
158193 - 0x00139 (Hedge Maze 1) - True - True 158193 - 0x00139 (Hedge Maze 1) - True - True
158197 - 0x0A3A8 (Reset Pressure Plates 1) - True - True 158197 - 0x0A3A8 (Reset Pressure Plates 1) - True - True
158198 - 0x033EA (Pressure Plates 1) - 0x0A3A8 - Dots 158198 - 0x033EA (Pressure Plates 1) - 0x0A3A8 - Dots
Door - 0x01954 (Hedge Maze 1 Exit) - 0x00139 Door - 0x01954 (Hedge Maze 1 Exit) - 0x00139
Door - 0x01BEC (Pressure Plates 1 Exit) - 0x033EA 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: Keep 2nd Maze (Keep) - Keep - 0x018CE - Keep 3rd Maze - 0x019D8:
Door - 0x018CE (Hedge Maze 2 Shortcut) - 0x00139 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 158654 - 0x00AFB (Vault) - True - Symmetry & Sound Dots & Colored Dots
158655 - 0x03535 (Vault Box) - 0x00AFB - True 158655 - 0x03535 (Vault Box) - 0x00AFB - True
158605 - 0x17D28 (Discard) - True - Triangles 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: Keep Tower (Keep) - Keep - 0x04F8F:
158206 - 0x0361B (Tower Shortcut Panel) - True - True 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 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 158705 - 0x03317 (Laser Panel Pressure Plates) - 0x01D3F - Shapers & Black/White Squares & Colored Squares & Stars & Stars + Same Colored Symbol & Dots
Laser - 0x014BB (Laser) - 0x0360E | 0x03317 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: Outside Monastery (Monastery) - Main Island - True - Inside Monastery - 0x0C128 & 0x0C153 - Monastery Garden - 0x03750:
158207 - 0x03713 (Shortcut Panel) - True - True 158207 - 0x03713 (Shortcut Panel) - True - True
@ -371,6 +434,13 @@ Door - 0x0C153 (Entry Outer) - 0x00C92
Door - 0x03750 (Garden Entry) - 0x00037 Door - 0x03750 (Garden Entry) - 0x00037
158706 - 0x17CA4 (Laser Panel) - 0x193A6 - True 158706 - 0x17CA4 (Laser Panel) - 0x193A6 - True
Laser - 0x17C65 (Laser) - 0x17CA4 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): Inside Monastery (Monastery):
158213 - 0x09D9B (Shutters Control) - True - Dots 158213 - 0x09D9B (Shutters Control) - True - Dots
@ -378,6 +448,9 @@ Inside Monastery (Monastery):
158215 - 0x193AA (Inside 2) - 0x193A7 - True 158215 - 0x193AA (Inside 2) - 0x193A7 - True
158216 - 0x193AB (Inside 3) - 0x193AA - True 158216 - 0x193AB (Inside 3) - 0x193AA - True
158217 - 0x193A6 (Inside 4) - 0x193AB - 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): Monastery Garden (Monastery):
@ -404,12 +477,24 @@ Door - 0x03BB0 (Church Entry) - 0x28A0D
Door - 0x28AA2 (Maze Stairs) - 0x28A79 Door - 0x28AA2 (Maze Stairs) - 0x28A79
158241 - 0x17F5F (Windmill Entry Panel) - True - Dots 158241 - 0x17F5F (Windmill Entry Panel) - True - Dots
Door - 0x1845B (Windmill Entry) - 0x17F5F 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): Town Inside Cargo Box (Town):
158606 - 0x17D01 (Cargo Box Discard) - True - Triangles 158606 - 0x17D01 (Cargo Box Discard) - True - Triangles
Town Maze Rooftop (Town) - Town Red Rooftop - 0x2896A: Town Maze Rooftop (Town) - Town Red Rooftop - 0x2896A:
158229 - 0x2896A (Maze Rooftop Bridge Control) - True - Shapers 158229 - 0x2896A (Maze Rooftop Bridge Control) - True - Shapers
159544 - 0x03E3F (RGB House Red EP) - 0x334D8 - True
Town Red Rooftop (Town): Town Red Rooftop (Town):
158607 - 0x17C71 (Rooftop Discard) - True - Triangles 158607 - 0x17C71 (Rooftop Discard) - True - Triangles
@ -425,6 +510,7 @@ Town Wooden Rooftop (Town):
Town Church (Town): Town Church (Town):
158227 - 0x28A69 (Church Lattice) - 0x03BB0 - True 158227 - 0x28A69 (Church Lattice) - 0x03BB0 - True
159553 - 0x03BD1 (Black Line Church EP) - True - True
RGB House (Town) - RGB Room - 0x2897B: RGB House (Town) - RGB Room - 0x2897B:
158242 - 0x034E4 (Sound Room Left) - True - True 158242 - 0x034E4 (Sound Room Left) - True - True
@ -445,6 +531,8 @@ Door - 0x2779A (Fourth Door) - 0x28B39
Town Tower Top (Town): Town Tower Top (Town):
158708 - 0x032F5 (Laser Panel) - True - True 158708 - 0x032F5 (Laser Panel) - True - True
Laser - 0x032F9 (Laser) - 0x032F5 Laser - 0x032F9 (Laser) - 0x032F5
159422 - 0x33692 (Brown Bridge EP) - True - True
159551 - 0x03BCE (Black Line Tower EP) - True - True
Windmill Interior (Windmill) - Theater - 0x17F88: Windmill Interior (Windmill) - Theater - 0x17F88:
158247 - 0x17D02 (Turn Control) - True - Dots 158247 - 0x17D02 (Turn Control) - True - Dots
@ -464,6 +552,10 @@ Theater (Theater) - Town - 0x0A16D | 0x3CCDF:
Door - 0x0A16D (Exit Left) - 0x0A168 Door - 0x0A16D (Exit Left) - 0x0A168
Door - 0x3CCDF (Exit Right) - 0x33AB2 Door - 0x3CCDF (Exit Right) - 0x33AB2
158608 - 0x17CF7 (Discard) - True - Triangles 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: Jungle (Jungle) - Main Island - True - Outside Jungle River - 0x3873B - Boat - 0x17CDF:
158251 - 0x17CDF (Shore Boat Spawn) - True - Boat 158251 - 0x17CDF (Shore Boat Spawn) - True - Boat
@ -487,12 +579,24 @@ Door - 0x1475B (Popup Wall) - 0x17CAB
Laser - 0x00274 (Laser) - 0x03616 Laser - 0x00274 (Laser) - 0x03616
158266 - 0x337FA (Laser Shortcut Panel) - True - True 158266 - 0x337FA (Laser Shortcut Panel) - True - True
Door - 0x3873B (Laser Shortcut) - 0x337FA 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: Outside Jungle River (River) - Main Island - True - Monastery Garden - 0x0CF2A:
158267 - 0x17CAA (Monastery Shortcut Panel) - True - True 158267 - 0x17CAA (Monastery Shortcut Panel) - True - True
Door - 0x0CF2A (Monastery Shortcut) - 0x17CAA Door - 0x0CF2A (Monastery Shortcut) - 0x17CAA
158663 - 0x15ADD (Vault) - True - Black/White Squares & Dots 158663 - 0x15ADD (Vault) - True - Black/White Squares & Dots
158664 - 0x03702 (Vault Box) - 0x15ADD - True 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: Outside Bunker (Bunker) - Main Island - True - Bunker - 0x0C2A4:
158268 - 0x17C2E (Entry Panel) - True - Black/White Squares & Colored Squares 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 158285 - 0x17E67 (UV Room 2) - 0x17E63 & 0x34BC6 - Colored Squares & Black/White Squares
Door - 0x0A08D (Elevator Room Entry) - 0x17E67 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 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 158710 - 0x09DE0 (Laser Panel) - True - True
Laser - 0x0C2B2 (Laser) - 0x09DE0 Laser - 0x0C2B2 (Laser) - 0x09DE0
Outside Swamp (Swamp) - Swamp Entry Area - 0x00C1C - Main Island - True: Outside Swamp (Swamp) - Swamp Entry Area - 0x00C1C - Main Island - True:
158287 - 0x0056E (Entry Panel) - True - Shapers 158287 - 0x0056E (Entry Panel) - True - Shapers
Door - 0x00C1C (Entry) - 0x0056E 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: Swamp Entry Area (Swamp) - Swamp Sliding Bridge - TrueOneWay:
158288 - 0x00469 (Intro Front 1) - True - Shapers 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: Swamp Sliding Bridge (Swamp) - Swamp Entry Area - 0x00609 - Swamp Near Platform - 0x00609:
158302 - 0x00609 (Sliding Bridge) - True - Shapers 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: 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 158313 - 0x00982 (Platform Row 1) - True - Shapers
@ -572,6 +687,7 @@ Swamp Cyan Underwater (Swamp):
158310 - 0x013E6 (Cyan Underwater 4) - 0x00005 - Shapers & Negative Shapers 158310 - 0x013E6 (Cyan Underwater 4) - 0x00005 - Shapers & Negative Shapers
158311 - 0x00596 (Cyan Underwater 5) - 0x013E6 - Shapers & Negative Shapers 158311 - 0x00596 (Cyan Underwater 5) - 0x013E6 - Shapers & Negative Shapers
158312 - 0x18488 (Cyan Underwater Sliding Bridge Control) - True - 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: Swamp Between Bridges Near (Swamp) - Swamp Between Bridges Far - 0x18507:
158303 - 0x00999 (Between Bridges Near Row 1) - 0x00990 - Shapers 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: 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 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: Swamp Near Boat (Swamp) - Swamp Rotating Bridge - TrueOneWay - Swamp Blue Underwater - 0x18482:
158328 - 0x09DB8 (Boat Spawn) - True - Boat 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 158332 - 0x00E3A (Beyond Rotating Bridge 4) - 0x00C2E - Rotated Shapers
158339 - 0x17E2B (Long Bridge Control) - True - Rotated Shapers & Shapers 158339 - 0x17E2B (Long Bridge Control) - True - Rotated Shapers & Shapers
Door - 0x18482 (Blue Water Pump) - 0x00E3A 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: Swamp Purple Area (Swamp) - Swamp Rotating Bridge - TrueOneWay - Swamp Purple Underwater - 0x0A1D6:
Door - 0x0A1D6 (Purple Water Pump) - 0x00E3A Door - 0x0A1D6 (Purple Water Pump) - 0x00E3A
Swamp Purple Underwater (Swamp): Swamp Purple Underwater (Swamp):
158333 - 0x009A6 (Purple Underwater) - True - Shapers 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): Swamp Blue Underwater (Swamp):
158334 - 0x009AB (Blue Underwater 1) - True - Shapers & Negative Shapers 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 158343 - 0x17C95 (Boat Spawn) - True - Boat
158344 - 0x0288C (First Door Panel) - True - Stars 158344 - 0x0288C (First Door Panel) - True - Stars
Door - 0x0C309 (First Door) - 0x0288C Door - 0x0C309 (First Door) - 0x0288C
159210 - 0x33721 (Buoy EP) - 0x17C95 - True
Treehouse Between Doors (Treehouse) - Treehouse Yellow Bridge - 0x0C310: Treehouse Between Doors (Treehouse) - Treehouse Yellow Bridge - 0x0C310:
158345 - 0x02886 (Second Door Panel) - True - Stars 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 158367 - 0x17D91 (Second Purple Bridge 6) - 0x17BDF - Stars & Colored Squares
158368 - 0x17DC6 (Second Purple Bridge 7) - 0x17D91 - 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 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 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 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 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 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 158369 - 0x17E3C (Green Bridge 1) - True - Stars & Shapers
158370 - 0x17E4D (Green Bridge 2) - 0x17E3C - Stars & Shapers 158370 - 0x17E4D (Green Bridge 2) - 0x17E3C - Stars & Shapers
158371 - 0x17E4F (Green Bridge 3) - 0x17E4D - Stars & Shapers & Rotated 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 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 158374 - 0x17E5F (Green Bridge 6) - 0x17E5B - Stars & Shapers & Negative Shapers & Stars + Same Colored Symbol
158375 - 0x17E61 (Green Bridge 7) - 0x17E5F - Stars & Shapers & Rotated Shapers 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: Treehouse Laser Room Front Platform (Treehouse) - Treehouse Laser Room - 0x0C323:
Door - 0x0C323 (Laser House Entry) - 0x17DA2 & 0x2700B & 0x17DDB 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): Treehouse Laser Room Back Platform (Treehouse):
158611 - 0x17FA0 (Laser Discard) - True - Triangles 158611 - 0x17FA0 (Laser Discard) - True - Triangles
Treehouse Burned House (Treehouse):
159202 - 0x00769 (Burned House Beach EP) - True - True
Treehouse Laser Room (Treehouse): Treehouse Laser Room (Treehouse):
158712 - 0x03613 (Laser Panel) - True - True 158712 - 0x03613 (Laser Panel) - True - True
158403 - 0x17CBC (Laser House Door Timer Inside) - 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 158612 - 0x17C42 (Discard) - True - Triangles
158665 - 0x002A6 (Vault) - True - Symmetry & Colored Dots & Black/White Squares & Dots 158665 - 0x002A6 (Vault) - True - Symmetry & Colored Dots & Black/White Squares & Dots
158666 - 0x03542 (Vault Box) - 0x002A6 - True 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: Mountaintop (Mountaintop) - Mountain Top Layer - 0x17C34:
158405 - 0x0042D (River Shape) - True - True 158405 - 0x0042D (River Shape) - True - True
158406 - 0x09F7F (Box Short) - 7 Lasers - True 158406 - 0x09F7F (Box Short) - 7 Lasers - True
158407 - 0x17C34 (Trap Door Triple Exit) - 0x09F7F - Stars & Black/White Squares & Stars + Same Colored Symbol 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 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: Mountain Top Layer (Mountain Floor 1) - Mountain Top Layer Bridge - 0x09E39:
158408 - 0x09E39 (Light Bridge Controller) - True - Black/White Squares & Colored Squares & Eraser 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 158425 - 0x09EAF (Trash Pillar 2) - 0x09EAD - Black/White Squares & Shapers
Door - 0x09E54 (Exit) - 0x09EAF & 0x09F6E & 0x09E6B & 0x09E7B 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 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 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 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): 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 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 158432 - 0x09FCC (Far Row 1) - True - Dots
158433 - 0x09FCE (Far Row 2) - 0x09FCC - Black/White Squares 158433 - 0x09FCE (Far Row 2) - 0x09FCC - Black/White Squares
158434 - 0x09FCF (Far Row 3) - 0x09FCE - Stars 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 158444 - 0x09FDA (Giant Puzzle) - 0x09FC1 & 0x09F8E & 0x09F01 & 0x09EFF - Shapers & Symmetry
Door - 0x09F89 (Exit) - 0x09FDA 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 158614 - 0x17FA2 (Discard) - 0xFFF00 - Triangles
158445 - 0x01983 (Final Room Entry Left) - True - Shapers & Stars 158445 - 0x01983 (Final Room Entry Left) - True - Shapers & Stars
158446 - 0x01987 (Final Room Entry Right) - True - Colored Squares & Dots 158446 - 0x01987 (Final Room Entry Right) - True - Colored Squares & Dots
Door - 0x0C141 (Final Room Entry) - 0x01983 & 0x01987 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: 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: Mountain Path to Caves (Mountain Bottom Floor) - Mountain Bottom Floor Rock - 0x334E1 - Caves - 0x2D77D:
158447 - 0x00FF8 (Caves Entry Panel) - True - Triangles & Black/White Squares 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 Door - 0x2D73F (Mountain Shortcut Door) - 0x021D7
158450 - 0x17CF2 (Swamp Shortcut Panel) - True - Triangles 158450 - 0x17CF2 (Swamp Shortcut Panel) - True - Triangles
Door - 0x2D859 (Swamp Shortcut Door) - 0x17CF2 Door - 0x2D859 (Swamp Shortcut Door) - 0x17CF2
159341 - 0x3397C (Skylight EP) - True - True
Path to Challenge (Caves) - Challenge - 0x0A19A: Path to Challenge (Caves) - Challenge - 0x0A19A:
158477 - 0x0A16E (Challenge Entry Panel) - True - Stars & Shapers & Stars + Same Colored Symbol 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 158667 - 0x0356B (Vault Box) - 0x1C31A & 0x1C319 - True
158518 - 0x039B4 (Tunnels Entry Panel) - True - Triangles 158518 - 0x039B4 (Tunnels Entry Panel) - True - Triangles
Door - 0x0348A (Tunnels Entry) - 0x039B4 Door - 0x0348A (Tunnels Entry) - 0x039B4
159530 - 0x28B30 (Water EP) - True - True
Tunnels (Tunnels) - Windmill Interior - 0x27739 - Desert Lowest Level Inbetween Shortcuts - 0x27263 - Town - 0x09E87: Tunnels (Tunnels) - Windmill Interior - 0x27739 - Desert Lowest Level Inbetween Shortcuts - 0x27263 - Town - 0x09E87:
158668 - 0x2FAF6 (Vault Box) - True - True 158668 - 0x2FAF6 (Vault Box) - True - True
@ -909,6 +1054,7 @@ Door - 0x27739 (Theater Shortcut) - 0x27732
Door - 0x27263 (Desert Shortcut) - 0x2773D Door - 0x27263 (Desert Shortcut) - 0x2773D
158521 - 0x09E85 (Town Shortcut Panel) - True - Triangles 158521 - 0x09E85 (Town Shortcut Panel) - True - Triangles
Door - 0x09E87 (Town Shortcut) - 0x09E85 Door - 0x09E87 (Town Shortcut) - 0x09E85
159557 - 0x33A20 (Theater Flowers EP) - 0x03553 & Theater to Tunnels - True
Final Room (Mountain Final Room) - Elevator - 0x339BB & 0x33961: Final Room (Mountain Final Room) - Elevator - 0x339BB & 0x33961:
158522 - 0x0383A (Right Pillar 1) - True - Stars 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 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: 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 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: Tutorial (Tutorial) - Outside Tutorial - True:
158002 - 0x00293 (Front Center) - True - Dots 158002 - 0x00293 (Front Center) - True - Dots
@ -10,8 +15,11 @@ Tutorial (Tutorial) - Outside Tutorial - True:
158006 - 0x0A3B2 (Back Right) - True - Dots & Full Dots 158006 - 0x0A3B2 (Back Right) - True - Dots & Full Dots
158007 - 0x03629 (Gate Open) - 0x002C2 - Symmetry & Dots 158007 - 0x03629 (Gate Open) - 0x002C2 - Symmetry & Dots
158008 - 0x03505 (Gate Close) - 0x2FAF6 - False 158008 - 0x03505 (Gate Close) - 0x2FAF6 - False
158009 - 0x0C335 (Pillar) - True - Triangles - True 158009 - 0x0C335 (Pillar) - True - Triangles
158010 - 0x0C373 (Patio Floor) - 0x0C335 - Dots 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: Outside Tutorial (Outside Tutorial) - Outside Tutorial Path To Outpost - 0x03BA2:
158650 - 0x033D4 (Vault) - True - Dots & Full Dots & Squares & Black/White Squares 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 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 158026 - 0x00021 (Tree Row 9) - 0x00020 - Squares & Black/White Squares & Dots & Full Dots
Door - 0x03BA2 (Outpost Path) - 0x0A3B5 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: Outside Tutorial Path To Outpost (Outside Tutorial) - Outside Tutorial Outpost - 0x0A170:
158011 - 0x0A171 (Outpost Entry Panel) - True - Dots & Full Dots & Triangles 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 Door - 0x04CA3 (Outpost Exit) - 0x04CA4
158600 - 0x17CFB (Discard) - True - Arrows 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: Outside Glass Factory (Glass Factory) - Main Island - True - Inside Glass Factory - 0x01A29:
158027 - 0x01A54 (Entry Panel) - True - Symmetry 158027 - 0x01A54 (Entry Panel) - True - Symmetry
Door - 0x01A29 (Entry) - 0x01A54 Door - 0x01A29 (Entry) - 0x01A54
158601 - 0x3C12B (Discard) - True - Arrows 158601 - 0x3C12B (Discard) - True - Arrows
159002 - 0x28B8A (Vase EP) - 0x01A54 - True
Inside Glass Factory (Glass Factory) - Inside Glass Factory Behind Back Wall - 0x0D7ED: Inside Glass Factory (Glass Factory) - Inside Glass Factory Behind Back Wall - 0x0D7ED:
158028 - 0x00086 (Back Wall 1) - True - Symmetry & Dots 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 158056 - 0x00070 (Left 5) - 0x0006F - Symmetry & Colored Dots & Triangles
158057 - 0x00071 (Left 6) - 0x00070 - Symmetry & Triangles 158057 - 0x00071 (Left 6) - 0x00070 - Symmetry & Triangles
158058 - 0x00076 (Left 7) - 0x00071 - Symmetry & Triangles 158058 - 0x00076 (Left 7) - 0x00071 - Symmetry & Triangles
158059 - 0x009B8 (Scenery Outlines 1) - True - Symmetry & Environment 158059 - 0x009B8 (Scenery Outlines 1) - True - Symmetry
158060 - 0x003E8 (Scenery Outlines 2) - 0x009B8 - Symmetry & Environment 158060 - 0x003E8 (Scenery Outlines 2) - 0x009B8 - Symmetry
158061 - 0x00A15 (Scenery Outlines 3) - 0x003E8 - Symmetry & Environment 158061 - 0x00A15 (Scenery Outlines 3) - 0x003E8 - Symmetry
158062 - 0x00B53 (Scenery Outlines 4) - 0x00A15 - Symmetry & Environment 158062 - 0x00B53 (Scenery Outlines 4) - 0x00A15 - Symmetry
158063 - 0x00B8D (Scenery Outlines 5) - 0x00B53 - Symmetry & Environment 158063 - 0x00B8D (Scenery Outlines 5) - 0x00B53 - Symmetry
158064 - 0x1C349 (Upper Panel) - 0x00076 - Symmetry & Triangles 158064 - 0x1C349 (Upper Panel) - 0x00076 - Symmetry & Triangles
Door - 0x18269 (Upper) - 0x1C349 Door - 0x18269 (Upper) - 0x1C349
159000 - 0x0332B (Glass Factory Black Line Reflection EP) - True - True
Symmetry Island Upper (Symmetry Island): Symmetry Island Upper (Symmetry Island):
158065 - 0x00A52 (Yellow 1) - True - Symmetry & Colored Dots 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 158069 - 0x00A64 (Blue 2) - 0x00A61 & 0x00A52 - Symmetry & Colored Dots
158070 - 0x00A68 (Blue 3) - 0x00A64 & 0x00A57 - Symmetry & Colored Dots 158070 - 0x00A68 (Blue 3) - 0x00A64 & 0x00A57 - Symmetry & Colored Dots
158700 - 0x0360D (Laser Panel) - 0x00A68 - True 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: Orchard (Orchard) - Main Island - True - Orchard Beyond First Gate - 0x03307:
158071 - 0x00143 (Apple Tree 1) - True - Environment 158071 - 0x00143 (Apple Tree 1) - True - True
158072 - 0x0003B (Apple Tree 2) - 0x00143 - Environment 158072 - 0x0003B (Apple Tree 2) - 0x00143 - True
158073 - 0x00055 (Apple Tree 3) - 0x0003B - Environment 158073 - 0x00055 (Apple Tree 3) - 0x0003B - True
Door - 0x03307 (First Gate) - 0x00055 Door - 0x03307 (First Gate) - 0x00055
Orchard Beyond First Gate (Orchard) - Orchard End - 0x03313: Orchard Beyond First Gate (Orchard) - Orchard End - 0x03313:
158074 - 0x032F7 (Apple Tree 4) - 0x00055 - Environment 158074 - 0x032F7 (Apple Tree 4) - 0x00055 - True
158075 - 0x032FF (Apple Tree 5) - 0x032F7 - Environment 158075 - 0x032FF (Apple Tree 5) - 0x032F7 - True
Door - 0x03313 (Second Gate) - 0x032FF Door - 0x03313 (Second Gate) - 0x032FF
Orchard End (Orchard): 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 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 158653 - 0x0339E (Vault Box) - 0x0CC7B - True
158602 - 0x17CE7 (Discard) - True - Arrows 158602 - 0x17CE7 (Discard) - True - Arrows
158076 - 0x00698 (Surface 1) - True - Reflection 158076 - 0x00698 (Surface 1) - True - True
158077 - 0x0048F (Surface 2) - 0x00698 - Reflection 158077 - 0x0048F (Surface 2) - 0x00698 - True
158078 - 0x09F92 (Surface 3) - 0x0048F & 0x09FA0 - Reflection 158078 - 0x09F92 (Surface 3) - 0x0048F & 0x09FA0 - True
158079 - 0x09FA0 (Surface 3 Control) - 0x0048F - True 158079 - 0x09FA0 (Surface 3 Control) - 0x0048F - True
158080 - 0x0A036 (Surface 4) - 0x09F92 - Reflection 158080 - 0x0A036 (Surface 4) - 0x09F92 - True
158081 - 0x09DA6 (Surface 5) - 0x09F92 - Reflection 158081 - 0x09DA6 (Surface 5) - 0x09F92 - True
158082 - 0x0A049 (Surface 6) - 0x09F92 - Reflection 158082 - 0x0A049 (Surface 6) - 0x09F92 - True
158083 - 0x0A053 (Surface 7) - 0x0A036 & 0x09DA6 & 0x0A049 - Reflection 158083 - 0x0A053 (Surface 7) - 0x0A036 & 0x09DA6 & 0x0A049 - True
158084 - 0x09F94 (Surface 8) - 0x0A053 & 0x09F86 - Reflection 158084 - 0x09F94 (Surface 8) - 0x0A053 & 0x09F86 - True
158085 - 0x09F86 (Surface 8 Control) - 0x0A053 - True 158085 - 0x09F86 (Surface 8 Control) - 0x0A053 - True
158086 - 0x0C339 (Light Room Entry Panel) - 0x09F94 - 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 158701 - 0x03608 (Laser Panel) - 0x012D7 & 0x0A15F - True
Laser - 0x012FB (Laser) - 0x03608 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: Desert Floodlight Room (Desert) - Desert Pond Room - 0x0C2C3:
158087 - 0x09FAA (Light Control) - True - True 158087 - 0x09FAA (Light Control) - True - True
158088 - 0x00422 (Light Room 1) - 0x09FAA - Reflection 158088 - 0x00422 (Light Room 1) - 0x09FAA - True
158089 - 0x006E3 (Light Room 2) - 0x09FAA - Reflection 158089 - 0x006E3 (Light Room 2) - 0x09FAA - True
158090 - 0x0A02D (Light Room 3) - 0x09FAA & 0x00422 & 0x006E3 - Reflection 158090 - 0x0A02D (Light Room 3) - 0x09FAA & 0x00422 & 0x006E3 - True
Door - 0x0C2C3 (Pond Room Entry) - 0x0A02D Door - 0x0C2C3 (Pond Room Entry) - 0x0A02D
Desert Pond Room (Desert) - Desert Water Levels Room - 0x0A24B: Desert Pond Room (Desert) - Desert Water Levels Room - 0x0A24B:
158091 - 0x00C72 (Pond Room 1) - True - Reflection 158091 - 0x00C72 (Pond Room 1) - True - True
158092 - 0x0129D (Pond Room 2) - 0x00C72 - Reflection 158092 - 0x0129D (Pond Room 2) - 0x00C72 - True
158093 - 0x008BB (Pond Room 3) - 0x0129D - Reflection 158093 - 0x008BB (Pond Room 3) - 0x0129D - True
158094 - 0x0078D (Pond Room 4) - 0x008BB - Reflection 158094 - 0x0078D (Pond Room 4) - 0x008BB - True
158095 - 0x18313 (Pond Room 5) - 0x0078D - Reflection 158095 - 0x18313 (Pond Room 5) - 0x0078D - True
158096 - 0x0A249 (Flood Room Entry Panel) - 0x18313 - Reflection 158096 - 0x0A249 (Flood Room Entry Panel) - 0x18313 - True
Door - 0x0A24B (Flood Room Entry) - 0x0A249 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: Desert Water Levels Room (Desert) - Desert Elevator Room - 0x0C316:
158097 - 0x1C2DF (Reduce Water Level Far Left) - True - True 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 158102 - 0x1831D (Raise Water Level Far Right) - True - True
158103 - 0x1C2B1 (Raise Water Level Near Left) - True - True 158103 - 0x1C2B1 (Raise Water Level Near Left) - True - True
158104 - 0x1831B (Raise Water Level Near Right) - True - True 158104 - 0x1831B (Raise Water Level Near Right) - True - True
158105 - 0x04D18 (Flood Room 1) - 0x1C260 & 0x1831C - Reflection 158105 - 0x04D18 (Flood Room 1) - 0x1C260 & 0x1831C - True
158106 - 0x01205 (Flood Room 2) - 0x04D18 & 0x1C260 & 0x1831C - Reflection 158106 - 0x01205 (Flood Room 2) - 0x04D18 & 0x1C260 & 0x1831C - True
158107 - 0x181AB (Flood Room 3) - 0x01205 & 0x1C260 & 0x1831C - Reflection 158107 - 0x181AB (Flood Room 3) - 0x01205 & 0x1C260 & 0x1831C - True
158108 - 0x0117A (Flood Room 4) - 0x181AB & 0x1C260 & 0x1831C - Reflection 158108 - 0x0117A (Flood Room 4) - 0x181AB & 0x1C260 & 0x1831C - True
158109 - 0x17ECA (Flood Room 5) - 0x0117A & 0x1C260 & 0x1831C - Reflection 158109 - 0x17ECA (Flood Room 5) - 0x0117A & 0x1C260 & 0x1831C - True
158110 - 0x18076 (Flood Room 6) - 0x17ECA & 0x1C260 & 0x1831C - Reflection 158110 - 0x18076 (Flood Room 6) - 0x17ECA & 0x1C260 & 0x1831C - True
Door - 0x0C316 (Elevator Room Entry) - 0x18076 Door - 0x0C316 (Elevator Room Entry) - 0x18076
159034 - 0x337F8 (Flood Room EP) - 0x1C2DF - True
Desert Elevator Room (Desert) - Desert Lowest Level Inbetween Shortcuts - 0x012FB: Desert Elevator Room (Desert) - Desert Lowest Level Inbetween Shortcuts - 0x012FB:
158111 - 0x17C31 (Final Transparent) - True - Reflection 158111 - 0x17C31 (Final Transparent) - True - True
158113 - 0x012D7 (Final Hexagonal) - 0x17C31 & 0x0A015 - Reflection 158113 - 0x012D7 (Final Hexagonal) - 0x17C31 & 0x0A015 - True
158114 - 0x0A015 (Final Hexagonal Control) - 0x17C31 - True 158114 - 0x0A015 (Final Hexagonal Control) - 0x17C31 - True
158115 - 0x0A15C (Final Bent 1) - True - Reflection 158115 - 0x0A15C (Final Bent 1) - True - True
158116 - 0x09FFF (Final Bent 2) - 0x0A15C - Reflection 158116 - 0x09FFF (Final Bent 2) - 0x0A15C - True
158117 - 0x0A15F (Final Bent 3) - 0x09FFF - Reflection 158117 - 0x0A15F (Final Bent 3) - 0x09FFF - True
159035 - 0x037BB (Elevator EP) - 0x012FB - True
Desert Lowest Level Inbetween Shortcuts (Desert): 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 158118 - 0x09E57 (Entry 1 Panel) - True - Squares & Black/White Squares & Triangles
158120 - 0x17CC4 (Elevator Control) - 0x0367C - Dots & Eraser
158603 - 0x17CF0 (Discard) - True - Arrows 158603 - 0x17CF0 (Discard) - True - Arrows
158702 - 0x03612 (Laser Panel) - 0x0A3D0 & 0x0367C - Eraser & Triangles & Stars & Stars + Same Colored Symbol 158702 - 0x03612 (Laser Panel) - 0x0A3D0 & 0x0367C - Eraser & Triangles & Stars & Stars + Same Colored Symbol
Laser - 0x01539 (Laser) - 0x03612 Laser - 0x01539 (Laser) - 0x03612
Door - 0x09D6F (Entry 1) - 0x09E57 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: Quarry Between Entrys (Quarry) - Quarry - 0x17C07:
158119 - 0x17C09 (Entry 2 Panel) - True - Shapers & Triangles 158119 - 0x17C09 (Entry 2 Panel) - True - Shapers & Triangles
Door - 0x17C07 (Entry 2) - 0x17C09 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 158121 - 0x01E5A (Mill Entry Left Panel) - True - Squares & Black/White Squares & Stars & Stars + Same Colored Symbol
158122 - 0x01E59 (Mill Entry Right Panel) - True - Triangles 158122 - 0x01E59 (Mill Entry Right Panel) - True - Triangles
Door - 0x02010 (Mill Entry) - 0x01E59 & 0x01E5A 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 Door - 0x0368A (Stairs) - 0x03677
158143 - 0x3C125 (Control Room Left) - 0x0367C - Squares & Black/White Squares & Dots & Full Dots & Eraser 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 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: Quarry Boathouse (Quarry Boathouse) - Quarry - True - Quarry Boathouse Upper Front - 0x03852 - Quarry Boathouse Behind Staircase - 0x2769B:
158146 - 0x034D4 (Intro Left) - True - Stars & Eraser 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: Quarry Boathouse Upper Middle (Quarry Boathouse) - Quarry Boathouse Upper Back - 0x03858:
158154 - 0x03858 (Ramp Horizontal Control) - True - Shapers & Eraser 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: Quarry Boathouse Upper Back (Quarry Boathouse) - Quarry Boathouse Upper Middle - 0x3865F:
158155 - 0x38663 (Second Barrier Panel) - True - True 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 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 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 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: Shadows (Shadows) - Main Island - True - Shadows Ledge - 0x19B24 - Shadows Laser Room - 0x194B2 & 0x19665:
158170 - 0x334DB (Door Timer Outside) - True - True 158170 - 0x334DB (Door Timer Outside) - True - True
Door - 0x19B24 (Timed Door) - 0x334DB Door - 0x19B24 (Timed Door) - 0x334DB
158171 - 0x0AC74 (Intro 6) - 0x0A8DC - Shadows Avoid 158171 - 0x0AC74 (Intro 6) - 0x0A8DC - True
158172 - 0x0AC7A (Intro 7) - 0x0AC74 - Shadows Avoid 158172 - 0x0AC7A (Intro 7) - 0x0AC74 - True
158173 - 0x0A8E0 (Intro 8) - 0x0AC7A - Shadows Avoid 158173 - 0x0A8E0 (Intro 8) - 0x0AC7A - True
158174 - 0x386FA (Far 1) - 0x0A8E0 - Shadows Avoid & Environment 158174 - 0x386FA (Far 1) - 0x0A8E0 - True
158175 - 0x1C33F (Far 2) - 0x386FA - Shadows Avoid & Environment 158175 - 0x1C33F (Far 2) - 0x386FA - True
158176 - 0x196E2 (Far 3) - 0x1C33F - Shadows Avoid & Environment 158176 - 0x196E2 (Far 3) - 0x1C33F - True
158177 - 0x1972A (Far 4) - 0x196E2 - Shadows Avoid & Environment 158177 - 0x1972A (Far 4) - 0x196E2 - True
158178 - 0x19809 (Far 5) - 0x1972A - Shadows Avoid & Environment 158178 - 0x19809 (Far 5) - 0x1972A - True
158179 - 0x19806 (Far 6) - 0x19809 - Shadows Avoid & Environment 158179 - 0x19806 (Far 6) - 0x19809 - True
158180 - 0x196F8 (Far 7) - 0x19806 - Shadows Avoid & Environment 158180 - 0x196F8 (Far 7) - 0x19806 - True
158181 - 0x1972F (Far 8) - 0x196F8 - Shadows Avoid & Environment 158181 - 0x1972F (Far 8) - 0x196F8 - True
Door - 0x194B2 (Laser Entry Right) - 0x1972F Door - 0x194B2 (Laser Entry Right) - 0x1972F
158182 - 0x19797 (Near 1) - 0x0A8E0 - Shadows Follow 158182 - 0x19797 (Near 1) - 0x0A8E0 - True
158183 - 0x1979A (Near 2) - 0x19797 - Shadows Follow 158183 - 0x1979A (Near 2) - 0x19797 - True
158184 - 0x197E0 (Near 3) - 0x1979A - Shadows Follow 158184 - 0x197E0 (Near 3) - 0x1979A - True
158185 - 0x197E8 (Near 4) - 0x197E0 - Shadows Follow 158185 - 0x197E8 (Near 4) - 0x197E0 - True
158186 - 0x197E5 (Near 5) - 0x197E8 - Shadows Follow 158186 - 0x197E5 (Near 5) - 0x197E8 - True
Door - 0x19665 (Laser Entry Left) - 0x197E5 Door - 0x19665 (Laser Entry Left) - 0x197E5
159400 - 0x28A7B (Quarry Mill Rooftop Vent EP) - True - True
Shadows Ledge (Shadows) - Shadows - 0x1855B - Quarry - 0x19865 & 0x0A2DF: Shadows Ledge (Shadows) - Shadows - 0x1855B - Quarry - 0x19865 & 0x0A2DF:
158187 - 0x334DC (Door Timer Inside) - True - True 158187 - 0x334DC (Door Timer Inside) - True - True
158188 - 0x198B5 (Intro 1) - True - Shadows Avoid 158188 - 0x198B5 (Intro 1) - True - True
158189 - 0x198BD (Intro 2) - 0x198B5 - Shadows Avoid 158189 - 0x198BD (Intro 2) - 0x198B5 - True
158190 - 0x198BF (Intro 3) - 0x198BD & 0x334DC & 0x19B24 - Shadows Avoid 158190 - 0x198BF (Intro 3) - 0x198BD & 0x334DC & 0x19B24 - True
Door - 0x19865 (Quarry Barrier) - 0x198BF Door - 0x19865 (Quarry Barrier) - 0x198BF
Door - 0x0A2DF (Quarry Barrier 2) - 0x198BF Door - 0x0A2DF (Quarry Barrier 2) - 0x198BF
158191 - 0x19771 (Intro 4) - 0x198BF - Shadows Avoid 158191 - 0x19771 (Intro 4) - 0x198BF - True
158192 - 0x0A8DC (Intro 5) - 0x19771 - Shadows Avoid 158192 - 0x0A8DC (Intro 5) - 0x19771 - True
Door - 0x1855B (Ledge Barrier) - 0x0A8DC Door - 0x1855B (Ledge Barrier) - 0x0A8DC
Door - 0x19ADE (Ledge Barrier 2) - 0x0A8DC Door - 0x19ADE (Ledge Barrier 2) - 0x0A8DC
Shadows Laser Room (Shadows): Shadows Laser Room (Shadows):
158703 - 0x19650 (Laser Panel) - True - Shadows Avoid & Shadows Follow 158703 - 0x19650 (Laser Panel) - True - True
Laser - 0x181B3 (Laser) - 0x19650 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: 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 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 - 0x01954 (Hedge Maze 1 Exit) - 0x00139
Door - 0x01BEC (Pressure Plates 1 Exit) - 0x033EA 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: Keep 2nd Maze (Keep) - Keep - 0x018CE - Keep 3rd Maze - 0x019D8:
Door - 0x018CE (Hedge Maze 2 Shortcut) - 0x00139 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 Door - 0x019D8 (Hedge Maze 2 Exit) - 0x019DC
Keep 3rd Maze (Keep) - Keep - 0x019B5 - Keep 4th Maze - 0x019E6: Keep 3rd Maze (Keep) - Keep - 0x019B5 - Keep 4th Maze - 0x019E6:
Door - 0x019B5 (Hedge Maze 3 Shortcut) - 0x019DC 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 Door - 0x019E6 (Hedge Maze 3 Exit) - 0x019E7
Keep 4th Maze (Keep) - Keep - 0x0199A - Keep Tower - 0x01A0E: Keep 4th Maze (Keep) - Keep - 0x0199A - Keep Tower - 0x01A0E:
Door - 0x0199A (Hedge Maze 4 Shortcut) - 0x019E7 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 Door - 0x01A0E (Hedge Maze 4 Exit) - 0x01A0F
Keep 2nd Pressure Plate (Keep) - Keep 3rd Pressure Plate - True: Keep 2nd Pressure Plate (Keep) - Keep 3rd Pressure Plate - True:
158199 - 0x0A3B9 (Reset Pressure Plates 2) - True - 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 Door - 0x01BEA (Pressure Plates 2 Exit) - 0x01BE9
Keep 3rd Pressure Plate (Keep) - Keep 4th Pressure Plate - 0x01CD5: Keep 3rd Pressure Plate (Keep) - Keep 4th Pressure Plate - 0x01CD5:
158201 - 0x0A3BB (Reset Pressure Plates 3) - True - True 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 Door - 0x01CD5 (Pressure Plates 3 Exit) - 0x01CD3
Keep 4th Pressure Plate (Keep) - Shadows - 0x09E3D - Keep Tower - 0x01D40: Keep 4th Pressure Plate (Keep) - Shadows - 0x09E3D - Keep Tower - 0x01D40:
158203 - 0x0A3AD (Reset Pressure Plates 4) - True - True 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 Door - 0x01D40 (Pressure Plates 4 Exit) - 0x01D3F
158604 - 0x17D27 (Discard) - True - Arrows 158604 - 0x17D27 (Discard) - True - Arrows
158205 - 0x09E49 (Shadows Shortcut Panel) - True - True 158205 - 0x09E49 (Shadows Shortcut Panel) - True - True
Door - 0x09E3D (Shadows Shortcut) - 0x09E49 Door - 0x09E3D (Shadows Shortcut) - 0x09E49
Shipwreck (Shipwreck) - Keep 3rd Pressure Plate - True: 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 158655 - 0x03535 (Vault Box) - 0x00AFB - True
158605 - 0x17D28 (Discard) - True - Arrows 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: Keep Tower (Keep) - Keep - 0x04F8F:
158206 - 0x0361B (Tower Shortcut Panel) - True - True 158206 - 0x0361B (Tower Shortcut Panel) - True - True
Door - 0x04F8F (Tower Shortcut) - 0x0361B 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 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 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: Outside Monastery (Monastery) - Main Island - True - Inside Monastery - 0x0C128 & 0x0C153 - Monastery Garden - 0x03750:
158207 - 0x03713 (Shortcut Panel) - True - True 158207 - 0x03713 (Shortcut Panel) - True - True
@ -365,19 +428,29 @@ Door - 0x0364E (Shortcut) - 0x03713
158209 - 0x00C92 (Entry Right) - True - True 158209 - 0x00C92 (Entry Right) - True - True
Door - 0x0C128 (Entry Inner) - 0x00B10 Door - 0x0C128 (Entry Inner) - 0x00B10
Door - 0x0C153 (Entry Outer) - 0x00C92 Door - 0x0C153 (Entry Outer) - 0x00C92
158210 - 0x00290 (Outside 1) - 0x09D9B - Environment 158210 - 0x00290 (Outside 1) - 0x09D9B - True
158211 - 0x00038 (Outside 2) - 0x09D9B & 0x00290 - Environment 158211 - 0x00038 (Outside 2) - 0x09D9B & 0x00290 - True
158212 - 0x00037 (Outside 3) - 0x09D9B & 0x00038 - Environment 158212 - 0x00037 (Outside 3) - 0x09D9B & 0x00038 - True
Door - 0x03750 (Garden Entry) - 0x00037 Door - 0x03750 (Garden Entry) - 0x00037
158706 - 0x17CA4 (Laser Panel) - 0x193A6 - True 158706 - 0x17CA4 (Laser Panel) - 0x193A6 - True
Laser - 0x17C65 (Laser) - 0x17CA4 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): Inside Monastery (Monastery):
158213 - 0x09D9B (Shutters Control) - True - Dots 158213 - 0x09D9B (Shutters Control) - True - Dots
158214 - 0x193A7 (Inside 1) - 0x00037 - Environment 158214 - 0x193A7 (Inside 1) - 0x00037 - True
158215 - 0x193AA (Inside 2) - 0x193A7 - Environment 158215 - 0x193AA (Inside 2) - 0x193A7 - True
158216 - 0x193AB (Inside 3) - 0x193AA - Environment 158216 - 0x193AB (Inside 3) - 0x193AA - True
158217 - 0x193A6 (Inside 4) - 0x193AB - Environment 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): 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 158219 - 0x0A0C8 (Cargo Box Entry Panel) - True - Squares & Black/White Squares & Shapers & Triangles
Door - 0x0A0C9 (Cargo Box Entry) - 0x0A0C8 Door - 0x0A0C9 (Cargo Box Entry) - 0x0A0C8
158707 - 0x09F98 (Desert Laser Redirect) - True - True 158707 - 0x09F98 (Desert Laser Redirect) - True - True
158220 - 0x18590 (Transparent) - True - Symmetry & Environment 158220 - 0x18590 (Transparent) - True - Symmetry
158221 - 0x28AE3 (Vines) - 0x18590 - Shadows Follow & Environment 158221 - 0x28AE3 (Vines) - 0x18590 - True
158222 - 0x28938 (Apple Tree) - 0x28AE3 - Environment 158222 - 0x28938 (Apple Tree) - 0x28AE3 - True
158223 - 0x079DF (Triple Exit) - 0x28938 - Shadows Avoid & Environment & Reflection 158223 - 0x079DF (Triple Exit) - 0x28938 - True
158235 - 0x2899C (Wooden Roof Lower Row 1) - True - Triangles & Dots & Full Dots 158235 - 0x2899C (Wooden Roof Lower Row 1) - True - Triangles & Dots & Full Dots
158236 - 0x28A33 (Wooden Roof Lower Row 2) - 0x2899C - 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 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 Door - 0x034F5 (Wooden Roof Stairs) - 0x28AC1
158225 - 0x28998 (Tinted Glass Door Panel) - True - Stars & Rotated Shapers & Stars + Same Colored Symbol 158225 - 0x28998 (Tinted Glass Door Panel) - True - Stars & Rotated Shapers & Stars + Same Colored Symbol
Door - 0x28A61 (Tinted Glass Door) - 0x28A0D 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 Door - 0x03BB0 (Church Entry) - 0x03C08
158228 - 0x28A79 (Maze Stair Control) - True - Environment 158228 - 0x28A79 (Maze Stair Control) - True - True
Door - 0x28AA2 (Maze Stairs) - 0x28A79 Door - 0x28AA2 (Maze Stairs) - 0x28A79
158241 - 0x17F5F (Windmill Entry Panel) - True - Dots 158241 - 0x17F5F (Windmill Entry Panel) - True - Dots
Door - 0x1845B (Windmill Entry) - 0x17F5F 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): Town Inside Cargo Box (Town):
158606 - 0x17D01 (Cargo Box Discard) - True - Arrows 158606 - 0x17D01 (Cargo Box Discard) - True - Arrows
Town Maze Rooftop (Town) - Town Red Rooftop - 0x2896A: Town Maze Rooftop (Town) - Town Red Rooftop - 0x2896A:
158229 - 0x2896A (Maze Rooftop Bridge Control) - True - Shapers 158229 - 0x2896A (Maze Rooftop Bridge Control) - True - Shapers
159544 - 0x03E3F (RGB House Red EP) - 0x334D8 & 0x03C0C & 0x03C08 - True
Town Red Rooftop (Town): Town Red Rooftop (Town):
158607 - 0x17C71 (Rooftop Discard) - True - Arrows 158607 - 0x17C71 (Rooftop Discard) - True - Arrows
@ -418,23 +503,24 @@ Town Red Rooftop (Town):
158232 - 0x28ACA (Red Rooftop 3) - 0x28AC8 - Symmetry & Shapers 158232 - 0x28ACA (Red Rooftop 3) - 0x28AC8 - Symmetry & Shapers
158233 - 0x28ACB (Red Rooftop 4) - 0x28ACA - Symmetry & Shapers 158233 - 0x28ACB (Red Rooftop 4) - 0x28ACA - Symmetry & Shapers
158234 - 0x28ACC (Red Rooftop 5) - 0x28ACB - 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): Town Wooden Rooftop (Town):
158240 - 0x28AD9 (Wooden Rooftop) - 0x28AC1 - Triangles & Dots & Full Dots & Eraser 158240 - 0x28AD9 (Wooden Rooftop) - 0x28AC1 - Triangles & Dots & Full Dots & Eraser
Town Church (Town): 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: RGB House (Town) - RGB Room - 0x2897B:
158242 - 0x034E4 (Sound Room Left) - True - Sound 158242 - 0x034E4 (Sound Room Left) - True - True
158243 - 0x034E3 (Sound Room Right) - True - Sound & Sound Dots 158243 - 0x034E3 (Sound Room Right) - True - Sound Dots
Door - 0x2897B (RGB House Stairs) - 0x034E4 & 0x034E3 Door - 0x2897B (RGB House Stairs) - 0x034E4 & 0x034E3
RGB Room (Town): RGB Room (Town):
158244 - 0x334D8 (RGB Control) - True - Rotated Shapers & RGB & Squares & Colored Squares & Triangles 158244 - 0x334D8 (RGB Control) - True - Rotated Shapers & Squares & Colored Squares & Triangles
158245 - 0x03C0C (RGB Room Left) - 0x334D8 - RGB & Squares & Colored Squares & Black/White Squares & Eraser 158245 - 0x03C0C (RGB Room Left) - 0x334D8 - Squares & Colored Squares & Black/White Squares & Eraser
158246 - 0x03C08 (RGB Room Right) - 0x334D8 & 0x03C0C - RGB & Symmetry & Dots & Colored Dots & Triangles 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: Town Tower (Town Tower) - Town - True - Town Tower Top - 0x27798 & 0x27799 & 0x2779A & 0x2779C:
Door - 0x27798 (First Door) - 0x28ACC Door - 0x27798 (First Door) - 0x28ACC
@ -445,6 +531,8 @@ Door - 0x2779A (Fourth Door) - 0x28B39
Town Tower Top (Town): Town Tower Top (Town):
158708 - 0x032F5 (Laser Panel) - True - True 158708 - 0x032F5 (Laser Panel) - True - True
Laser - 0x032F9 (Laser) - 0x032F5 Laser - 0x032F9 (Laser) - 0x032F5
159422 - 0x33692 (Brown Bridge EP) - True - True
159551 - 0x03BCE (Black Line Tower EP) - True - True
Windmill Interior (Windmill) - Theater - 0x17F88: Windmill Interior (Windmill) - Theater - 0x17F88:
158247 - 0x17D02 (Turn Control) - True - Dots 158247 - 0x17D02 (Turn Control) - True - Dots
@ -464,35 +552,51 @@ Theater (Theater) - Town - 0x0A16D | 0x3CCDF:
Door - 0x0A16D (Exit Left) - 0x0A168 Door - 0x0A16D (Exit Left) - 0x0A168
Door - 0x3CCDF (Exit Right) - 0x33AB2 Door - 0x3CCDF (Exit Right) - 0x33AB2
158608 - 0x17CF7 (Discard) - True - Arrows 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: Jungle (Jungle) - Main Island - True - Outside Jungle River - 0x3873B - Boat - 0x17CDF:
158251 - 0x17CDF (Shore Boat Spawn) - True - Boat 158251 - 0x17CDF (Shore Boat Spawn) - True - Boat
158609 - 0x17F9B (Discard) - True - Arrows 158609 - 0x17F9B (Discard) - True - Arrows
158252 - 0x002C4 (First Row 1) - True - Sound 158252 - 0x002C4 (First Row 1) - True - True
158253 - 0x00767 (First Row 2) - 0x002C4 - Sound 158253 - 0x00767 (First Row 2) - 0x002C4 - True
158254 - 0x002C6 (First Row 3) - 0x00767 - Sound 158254 - 0x002C6 (First Row 3) - 0x00767 - True
158255 - 0x0070E (Second Row 1) - 0x002C6 - Sound 158255 - 0x0070E (Second Row 1) - 0x002C6 - True
158256 - 0x0070F (Second Row 2) - 0x0070E - Sound 158256 - 0x0070F (Second Row 2) - 0x0070E - True
158257 - 0x0087D (Second Row 3) - 0x0070F - Sound 158257 - 0x0087D (Second Row 3) - 0x0070F - True
158258 - 0x002C7 (Second Row 4) - 0x0087D - Sound 158258 - 0x002C7 (Second Row 4) - 0x0087D - True
158259 - 0x17CAB (Popup Wall Control) - 0x002C7 - True 158259 - 0x17CAB (Popup Wall Control) - 0x002C7 - True
Door - 0x1475B (Popup Wall) - 0x17CAB Door - 0x1475B (Popup Wall) - 0x17CAB
158260 - 0x0026D (Popup Wall 1) - 0x1475B - Sound & Sound Dots & Symmetry 158260 - 0x0026D (Popup Wall 1) - 0x1475B - Sound Dots & Symmetry
158261 - 0x0026E (Popup Wall 2) - 0x0026D - Sound & Sound Dots & Symmetry 158261 - 0x0026E (Popup Wall 2) - 0x0026D - Sound Dots & Symmetry
158262 - 0x0026F (Popup Wall 3) - 0x0026E - Sound & Sound Dots & Symmetry 158262 - 0x0026F (Popup Wall 3) - 0x0026E - Sound Dots & Symmetry
158263 - 0x00C3F (Popup Wall 4) - 0x0026F - Sound & Sound Dots & Symmetry 158263 - 0x00C3F (Popup Wall 4) - 0x0026F - Sound Dots & Symmetry
158264 - 0x00C41 (Popup Wall 5) - 0x00C3F - Sound & Sound Dots & Symmetry 158264 - 0x00C41 (Popup Wall 5) - 0x00C3F - Sound Dots & Symmetry
158265 - 0x014B2 (Popup Wall 6) - 0x00C41 - Sound & Sound Dots & Symmetry 158265 - 0x014B2 (Popup Wall 6) - 0x00C41 - Sound Dots & Symmetry
158709 - 0x03616 (Laser Panel) - 0x014B2 - True 158709 - 0x03616 (Laser Panel) - 0x014B2 - True
Laser - 0x00274 (Laser) - 0x03616 Laser - 0x00274 (Laser) - 0x03616
158266 - 0x337FA (Laser Shortcut Panel) - True - True 158266 - 0x337FA (Laser Shortcut Panel) - True - True
Door - 0x3873B (Laser Shortcut) - 0x337FA 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: 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 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 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: Outside Bunker (Bunker) - Main Island - True - Bunker - 0x0C2A4:
158268 - 0x17C2E (Entry Panel) - True - Squares & Black/White Squares & Colored Squares 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 Door - 0x17C79 (Tinted Glass Door) - 0x0A099
Bunker Glass Room (Bunker) - Bunker Ultraviolet Room - 0x0C2A3: Bunker Glass Room (Bunker) - Bunker Ultraviolet Room - 0x0C2A3:
158279 - 0x0A010 (Glass Room 1) - True - Squares & Colored Squares & RGB & Environment 158279 - 0x0A010 (Glass Room 1) - True - Squares & Colored Squares
158280 - 0x0A01B (Glass Room 2) - 0x0A010 - Squares & Colored Squares & Black/White Squares & RGB & Environment 158280 - 0x0A01B (Glass Room 2) - 0x0A010 - Squares & Colored Squares & Black/White Squares
158281 - 0x0A01F (Glass Room 3) - 0x0A01B - Squares & Colored Squares & Black/White Squares & RGB & Environment 158281 - 0x0A01F (Glass Room 3) - 0x0A01B - Squares & Colored Squares & Black/White Squares
Door - 0x0C2A3 (UV Room Entry) - 0x0A01F Door - 0x0C2A3 (UV Room Entry) - 0x0A01F
Bunker Ultraviolet Room (Bunker) - Bunker Elevator Section - 0x0A08D: Bunker Ultraviolet Room (Bunker) - Bunker Elevator Section - 0x0A08D:
158282 - 0x34BC5 (Drop-Down Door Open) - True - True 158282 - 0x34BC5 (Drop-Down Door Open) - True - True
158283 - 0x34BC6 (Drop-Down Door Close) - 0x34BC5 - True 158283 - 0x34BC6 (Drop-Down Door Close) - 0x34BC5 - True
158284 - 0x17E63 (UV Room 1) - 0x34BC5 - Squares & Colored Squares & RGB & Environment 158284 - 0x17E63 (UV Room 1) - 0x34BC5 - Squares & Colored Squares
158285 - 0x17E67 (UV Room 2) - 0x17E63 & 0x34BC6 - Squares & Colored Squares & Black/White Squares & RGB 158285 - 0x17E67 (UV Room 2) - 0x17E63 & 0x34BC6 - Squares & Colored Squares & Black/White Squares
Door - 0x0A08D (Elevator Room Entry) - 0x17E67 Door - 0x0A08D (Elevator Room Entry) - 0x17E67
Bunker Elevator Section (Bunker) - Bunker Laser Platform - 0x0A079: Bunker Elevator Section (Bunker) - Bunker Elevator - TrueOneWay:
158286 - 0x0A079 (Elevator Control) - True - Squares & Colored Squares & Black/White Squares & RGB 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 158710 - 0x09DE0 (Laser Panel) - True - True
Laser - 0x0C2B2 (Laser) - 0x09DE0 Laser - 0x0C2B2 (Laser) - 0x09DE0
Outside Swamp (Swamp) - Swamp Entry Area - 0x00C1C - Main Island - True: Outside Swamp (Swamp) - Swamp Entry Area - 0x00C1C - Main Island - True:
158287 - 0x0056E (Entry Panel) - True - Rotated Shapers & Black/White Squares & Triangles 158287 - 0x0056E (Entry Panel) - True - Rotated Shapers & Black/White Squares & Triangles
Door - 0x00C1C (Entry) - 0x0056E 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: Swamp Entry Area (Swamp) - Swamp Sliding Bridge - TrueOneWay:
158288 - 0x00469 (Intro Front 1) - True - Black/White Squares & Shapers 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: Swamp Sliding Bridge (Swamp) - Swamp Entry Area - 0x00609 - Swamp Near Platform - 0x00609:
158302 - 0x00609 (Sliding Bridge) - True - Shapers & Black/White Squares 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: 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 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 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 158311 - 0x00596 (Cyan Underwater 5) - 0x013E6 - Shapers & Negative Shapers & Triangles & Black/White Squares
158312 - 0x18488 (Cyan Underwater Sliding Bridge Control) - True - 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: Swamp Between Bridges Near (Swamp) - Swamp Between Bridges Far - 0x18507:
158303 - 0x00999 (Between Bridges Near Row 1) - 0x00990 - Rotated Shapers 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: 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 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: Swamp Near Boat (Swamp) - Swamp Rotating Bridge - TrueOneWay - Swamp Blue Underwater - 0x18482:
158328 - 0x09DB8 (Boat Spawn) - True - Boat 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 158332 - 0x00E3A (Beyond Rotating Bridge 4) - 0x00C2E - Shapers & Dots & Full Dots
158339 - 0x17E2B (Long Bridge Control) - True - Rotated Shapers & Shapers 158339 - 0x17E2B (Long Bridge Control) - True - Rotated Shapers & Shapers
Door - 0x18482 (Blue Water Pump) - 0x00E3A 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: Swamp Purple Area (Swamp) - Swamp Rotating Bridge - TrueOneWay - Swamp Purple Underwater - 0x0A1D6:
Door - 0x0A1D6 (Purple Water Pump) - 0x00E3A Door - 0x0A1D6 (Purple Water Pump) - 0x00E3A
Swamp Purple Underwater (Swamp): Swamp Purple Underwater (Swamp):
158333 - 0x009A6 (Purple Underwater) - True - Shapers & Triangles & Black/White Squares & Rotated Shapers & Dots & Full Dots 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): Swamp Blue Underwater (Swamp):
158334 - 0x009AB (Blue Underwater 1) - True - Shapers & Negative Shapers 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 158338 - 0x00006 (Blue Underwater 5) - 0x009AF - Shapers & Negative Shapers
Swamp Maze (Swamp) - Swamp Laser Area - 0x17C0A & 0x17E07: Swamp Maze (Swamp) - Swamp Laser Area - 0x17C0A & 0x17E07:
158340 - 0x17C0A (Maze Control) - 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 & Environment 158112 - 0x17E07 (Maze Control Other Side) - True - Shapers & Negative Shapers & Rotated Shapers
Swamp Laser Area (Swamp) - Outside Swamp - 0x2D880: Swamp Laser Area (Swamp) - Outside Swamp - 0x2D880:
158711 - 0x03615 (Laser Panel) - True - True 158711 - 0x03615 (Laser Panel) - True - True
@ -634,6 +756,7 @@ Treehouse Entry Area (Treehouse) - Treehouse Between Doors - 0x0C309:
158343 - 0x17C95 (Boat Spawn) - True - Boat 158343 - 0x17C95 (Boat Spawn) - True - Boat
158344 - 0x0288C (First Door Panel) - True - Stars & Stars + Same Colored Symbol & Triangles 158344 - 0x0288C (First Door Panel) - True - Stars & Stars + Same Colored Symbol & Triangles
Door - 0x0C309 (First Door) - 0x0288C Door - 0x0C309 (First Door) - 0x0288C
159210 - 0x33721 (Buoy EP) - 0x17C95 - True
Treehouse Between Doors (Treehouse) - Treehouse Yellow Bridge - 0x0C310: Treehouse Between Doors (Treehouse) - Treehouse Yellow Bridge - 0x0C310:
158345 - 0x02886 (Second Door Panel) - True - Stars & Stars + Same Colored Symbol & Triangles 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 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 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 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 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 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 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 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 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 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 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 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 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 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: Treehouse Laser Room Front Platform (Treehouse) - Treehouse Laser Room - 0x0C323:
Door - 0x0C323 (Laser House Entry) - 0x17DA2 & 0x2700B & 0x17DEC 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): Treehouse Laser Room Back Platform (Treehouse):
158611 - 0x17FA0 (Laser Discard) - True - Arrows 158611 - 0x17FA0 (Laser Discard) - True - Arrows
Treehouse Burned House (Treehouse):
159202 - 0x00769 (Burned House Beach EP) - True - True
Treehouse Laser Room (Treehouse): Treehouse Laser Room (Treehouse):
158712 - 0x03613 (Laser Panel) - True - True 158712 - 0x03613 (Laser Panel) - True - True
158403 - 0x17CBC (Laser House Door Timer Inside) - 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 158612 - 0x17C42 (Discard) - True - Arrows
158665 - 0x002A6 (Vault) - True - Symmetry & Colored Squares & Triangles & Stars & Stars + Same Colored Symbol 158665 - 0x002A6 (Vault) - True - Symmetry & Colored Squares & Triangles & Stars & Stars + Same Colored Symbol
158666 - 0x03542 (Vault Box) - 0x002A6 - True 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: Mountaintop (Mountaintop) - Mountain Top Layer - 0x17C34:
158405 - 0x0042D (River Shape) - True - True 158405 - 0x0042D (River Shape) - True - True
158406 - 0x09F7F (Box Short) - 7 Lasers - True 158406 - 0x09F7F (Box Short) - 7 Lasers - True
158407 - 0x17C34 (Trap Door Triple Exit) - 0x09F7F - Stars & Black/White Squares & Stars + Same Colored Symbol & Triangles 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 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: Mountain Top Layer (Mountain Floor 1) - Mountain Top Layer Bridge - 0x09E39:
158408 - 0x09E39 (Light Bridge Controller) - True - Eraser & Triangles 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 158425 - 0x09EAF (Trash Pillar 2) - 0x09EAD - Rotated Shapers & Triangles
Door - 0x09E54 (Exit) - 0x09EAF & 0x09F6E & 0x09E6B & 0x09E7B 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 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 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 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): Mountain Floor 2 Light Bridge Room Near (Mountain Floor 2):
158431 - 0x09E86 (Light Bridge Controller Near) - True - Shapers & Dots 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 158432 - 0x09FCC (Far Row 1) - True - Triangles
158433 - 0x09FCE (Far Row 2) - 0x09FCC - Black/White Squares & Stars & Stars + Same Colored Symbol 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 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 158444 - 0x09FDA (Giant Puzzle) - 0x09FC1 & 0x09F8E & 0x09F01 & 0x09EFF - Shapers & Symmetry
Door - 0x09F89 (Exit) - 0x09FDA 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 158614 - 0x17FA2 (Discard) - 0xFFF00 - Arrows
158445 - 0x01983 (Final Room Entry Left) - True - Shapers & Stars 158445 - 0x01983 (Final Room Entry Left) - True - Shapers & Stars
158446 - 0x01987 (Final Room Entry Right) - True - Squares & Colored Squares & Dots 158446 - 0x01987 (Final Room Entry Right) - True - Squares & Colored Squares & Dots
Door - 0x0C141 (Final Room Entry) - 0x01983 & 0x01987 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: 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
@ -872,6 +1015,7 @@ Door - 0x019A5 (Pillar Door) - 0x09DD5
Door - 0x2D73F (Mountain Shortcut Door) - 0x021D7 Door - 0x2D73F (Mountain Shortcut Door) - 0x021D7
158450 - 0x17CF2 (Swamp Shortcut Panel) - True - Arrows 158450 - 0x17CF2 (Swamp Shortcut Panel) - True - Arrows
Door - 0x2D859 (Swamp Shortcut Door) - 0x17CF2 Door - 0x2D859 (Swamp Shortcut Door) - 0x17CF2
159341 - 0x3397C (Skylight EP) - True - True
Path to Challenge (Caves) - Challenge - 0x0A19A: Path to Challenge (Caves) - Challenge - 0x0A19A:
158477 - 0x0A16E (Challenge Entry Panel) - True - Stars & Arrows & Stars + Same Colored Symbol 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 158513 - 0x00C22 (Choice Squares 2 Left) - 0x00CB9 | 0x00CA1 | 0x00C80 - Squares & Black/White Squares & Colored Squares
158514 - 0x034F4 (Maze Hidden 1) - 0x00C68 | 0x00C59 | 0x00C22 - Triangles 158514 - 0x034F4 (Maze Hidden 1) - 0x00C68 | 0x00C59 | 0x00C22 - Triangles
158515 - 0x034EC (Maze Hidden 2) - 0x00C68 | 0x00C59 | 0x00C22 - Triangles 158515 - 0x034EC (Maze Hidden 2) - 0x00C68 | 0x00C59 | 0x00C22 - Triangles
158516 - 0x1C31A (Dots Pillar) - 0x034F4 & 0x034EC - Dots & Symmetry & Pillar 158516 - 0x1C31A (Dots Pillar) - 0x034F4 & 0x034EC - Dots & Symmetry
158517 - 0x1C319 (Squares Pillar) - 0x034F4 & 0x034EC - Squares & Black/White Squares & Symmetry & Pillar 158517 - 0x1C319 (Squares Pillar) - 0x034F4 & 0x034EC - Squares & Black/White Squares & Symmetry
158667 - 0x0356B (Vault Box) - 0x1C31A & 0x1C319 - True 158667 - 0x0356B (Vault Box) - 0x1C31A & 0x1C319 - True
158518 - 0x039B4 (Tunnels Entry Panel) - True - Arrows 158518 - 0x039B4 (Tunnels Entry Panel) - True - Arrows
Door - 0x0348A (Tunnels Entry) - 0x039B4 Door - 0x0348A (Tunnels Entry) - 0x039B4
159530 - 0x28B30 (Water EP) - True - True
Tunnels (Tunnels) - Windmill Interior - 0x27739 - Desert Lowest Level Inbetween Shortcuts - 0x27263 - Town - 0x09E87: Tunnels (Tunnels) - Windmill Interior - 0x27739 - Desert Lowest Level Inbetween Shortcuts - 0x27263 - Town - 0x09E87:
158668 - 0x2FAF6 (Vault Box) - True - True 158668 - 0x2FAF6 (Vault Box) - True - True
@ -909,12 +1054,13 @@ Door - 0x27739 (Theater Shortcut) - 0x27732
Door - 0x27263 (Desert Shortcut) - 0x2773D Door - 0x27263 (Desert Shortcut) - 0x2773D
158521 - 0x09E85 (Town Shortcut Panel) - True - Arrows 158521 - 0x09E85 (Town Shortcut Panel) - True - Arrows
Door - 0x09E87 (Town Shortcut) - 0x09E85 Door - 0x09E87 (Town Shortcut) - 0x09E85
159557 - 0x33A20 (Theater Flowers EP) - 0x03553 & Theater to Tunnels - True
Final Room (Mountain Final Room) - Elevator - 0x339BB & 0x33961: Final Room (Mountain Final Room) - Elevator - 0x339BB & 0x33961:
158522 - 0x0383A (Right Pillar 1) - True - Stars & Eraser & Triangles & Stars + Same Colored Symbol 158522 - 0x0383A (Right Pillar 1) - True - Stars & Eraser & Triangles & Stars + Same Colored Symbol
158523 - 0x09E56 (Right Pillar 2) - 0x0383A - Dots & Full Dots & Triangles & Symmetry 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 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 158526 - 0x0383D (Left Pillar 1) - True - Stars & Black/White Squares & Stars + Same Colored Symbol
158527 - 0x0383F (Left Pillar 2) - 0x0383D - Triangles & Symmetry 158527 - 0x0383F (Left Pillar 2) - 0x0383D - Triangles & Symmetry
158528 - 0x03859 (Left Pillar 3) - 0x0383F - Symmetry & Shapers & Black/White Squares 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 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: 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" game = "The Witness"
topology_present = False topology_present = False
data_version = 8 data_version = 11
static_logic = StaticWitnessLogic() static_logic = StaticWitnessLogic()
static_locat = StaticWitnessLocations() static_locat = StaticWitnessLocations()
@ -52,22 +52,27 @@ class WitnessWorld(World):
location_name_to_id = StaticWitnessLocations.ALL_LOCATIONS_TO_ID location_name_to_id = StaticWitnessLocations.ALL_LOCATIONS_TO_ID
item_name_groups = StaticWitnessItems.ITEM_NAME_GROUPS item_name_groups = StaticWitnessItems.ITEM_NAME_GROUPS
required_client_version = (0, 3, 6) required_client_version = (0, 3, 8)
def _get_slot_data(self): def _get_slot_data(self):
return { return {
'seed': self.multiworld.random.randint(0, 1000000), 'seed': self.multiworld.random.randint(0, 1000000),
'victory_location': int(self.player_logic.VICTORY_LOCATION, 16), 'victory_location': int(self.player_logic.VICTORY_LOCATION, 16),
'panelhex_to_id': self.locat.CHECK_PANELHEX_TO_ID, 'panelhex_to_id': self.locat.CHECK_PANELHEX_TO_ID,
'item_id_to_door_hexes': self.items.ITEM_ID_TO_DOOR_HEX, 'item_id_to_door_hexes': self.static_items.ITEM_ID_TO_DOOR_HEX_ALL,
'door_hexes': self.items.DOORS, 'door_hexes_in_the_pool': self.items.DOORS,
'symbols_not_in_the_game': self.items.SYMBOLS_NOT_IN_THE_GAME, 'symbols_not_in_the_game': self.items.SYMBOLS_NOT_IN_THE_GAME,
'disabled_panels': self.player_logic.COMPLETELY_DISABLED_CHECKS, 'disabled_panels': self.player_logic.COMPLETELY_DISABLED_CHECKS,
'log_ids_to_hints': self.log_ids_to_hints, '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): def generate_early(self):
self.items_by_name = dict()
if not (is_option_enabled(self.multiworld, self.player, "shuffle_symbols") if not (is_option_enabled(self.multiworld, self.player, "shuffle_symbols")
or get_option_value(self.multiworld, self.player, "shuffle_doors") or get_option_value(self.multiworld, self.player, "shuffle_doors")
or is_option_enabled(self.multiworld, self.player, "shuffle_lasers")): 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," raise Exception("This Witness world doesn't have any progression items. Please turn on Symbol Shuffle,"
" Door Shuffle or Laser 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.locat = WitnessPlayerLocations(self.multiworld, self.player, self.player_logic)
self.items = WitnessPlayerItems(self.locat, 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.regio = WitnessRegions(self.locat)
self.log_ids_to_hints = dict() def create_regions(self):
self.regio.create_regions(self.multiworld, self.player, self.player_logic)
self.junk_items_created = {key: 0 for key in self.items.JUNK_WEIGHTS.keys()}
def generate_basic(self): 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 # Generate item pool
pool = [] pool = []
items_by_name = dict()
for item in self.items.ITEM_TABLE: for item in self.items.ITEM_TABLE:
for i in range(0, self.items.PROG_ITEM_AMOUNTS[item]): for i in range(0, self.items.PROG_ITEM_AMOUNTS[item]):
if item in self.items.PROGRESSION_TABLE: if item in self.items.PROGRESSION_TABLE:
witness_item = self.create_item(item) witness_item = self.create_item(item)
pool.append(witness_item) pool.append(witness_item)
items_by_name[item] = witness_item self.items_by_name[item] = witness_item
less_junk = 0 less_junk = 0
# Put good item on first check if symbol shuffle is on dog_check = self.multiworld.get_location(
symbols = is_option_enabled(self.multiworld, self.player, "shuffle_symbols") "Town Pet the Dog", self.player
)
if symbols and get_option_value(self.multiworld, self.player, "puzzle_randomization") != 1: dog_check.place_locked_item(self.create_item("Puzzle Skip"))
random_good_item = self.multiworld.random.choice(self.items.GOOD_ITEMS)
first_check = self.multiworld.get_location( less_junk += 1
"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 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: for item in self.player_logic.STARTING_INVENTORY:
self.multiworld.push_precollected(items_by_name[item]) self.multiworld.push_precollected(self.items_by_name[item])
pool.remove(items_by_name[item]) pool.remove(self.items_by_name[item])
for item in self.items.EXTRA_AMOUNTS: for item in self.items.EXTRA_AMOUNTS:
for i in range(0, self.items.EXTRA_AMOUNTS[item]): for i in range(0, self.items.EXTRA_AMOUNTS[item]):
@ -140,8 +152,25 @@ class WitnessWorld(World):
self.multiworld.itempool += pool self.multiworld.itempool += pool
def create_regions(self): def pre_fill(self):
self.regio.create_regions(self.multiworld, self.player, self.player_logic) # 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): def set_rules(self):
set_rules(self.multiworld, self.player, self.player_logic, self.locat) 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") hint_amount = get_option_value(self.multiworld, self.player, "hint_amount")
credits_hint = ( 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() audio_logs = get_audio_logs().copy()
@ -158,12 +189,12 @@ class WitnessWorld(World):
if hint_amount != 0: if hint_amount != 0:
generated_hints = make_hints(self.multiworld, self.player, hint_amount) 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 duplicates = len(audio_logs) // hint_amount
for _ in range(0, hint_amount): for _ in range(0, hint_amount):
hint = generated_hints.pop() hint = generated_hints.pop(0)
for _ in range(0, duplicates): for _ in range(0, duplicates):
audio_log = audio_logs.pop() audio_log = audio_logs.pop()
@ -173,7 +204,7 @@ class WitnessWorld(World):
audio_log = audio_logs.pop() audio_log = audio_logs.pop()
self.log_ids_to_hints[int(audio_log, 16)] = credits_hint 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: while audio_logs:
audio_log = audio_logs.pop() audio_log = audio_logs.pop()
@ -192,7 +223,7 @@ class WitnessWorld(World):
def create_item(self, name: str) -> Item: 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 # 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] item = self.items.ITEM_TABLE[name]
else: else:
item = StaticWitnessItems.ALL_ITEM_TABLE[name] 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? ## 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 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 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 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 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 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 Hollow Knight?", "Another independent hit", "revolutionising a genre!"),
("Have you tried A Link to the Past?", "The Archipelago game", "that started it all!"), ("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 = [ priority = [
"Boat", "Boat",
"Mountain Bottom Floor Final Room Entry (Door)", "Mountain Bottom Floor Final Room Entry (Door)",
"Caves Mountain Shortcut (Door)", "Caves Mountain Shortcut (Door)",
"Caves Swamp Shortcut (Door)", "Caves Swamp Shortcut (Door)",
"Caves Exits to Main Island", "Caves Exits to Main Island",
"Progressive Dots",
] ]
difficulty = get_option_value(world, player, "puzzle_randomization") difficulty = get_option_value(multiworld, player, "puzzle_randomization")
discards = is_option_enabled(world, player, "shuffle_discards") discards = is_option_enabled(multiworld, player, "shuffle_discarded_panels")
if discards: if discards:
if difficulty == 1: if difficulty == 1:
@ -116,16 +117,19 @@ def get_always_hint_items(world: MultiWorld, player: int):
return priority return priority
def get_always_hint_locations(world: MultiWorld, player: int): def get_always_hint_locations(multiworld: MultiWorld, player: int):
return { return {
"Swamp Purple Underwater", "Swamp Purple Underwater",
"Shipwreck Vault Box", "Shipwreck Vault Box",
"Challenge Vault Box", "Challenge Vault Box",
"Mountain Bottom Floor Discard", "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 = { priority = {
"Negative Shapers", "Negative Shapers",
"Sound Dots", "Sound Dots",
@ -135,7 +139,7 @@ def get_priority_hint_items(world: MultiWorld, player: int):
"Swamp Laser Shortcut (Door)", "Swamp Laser Shortcut (Door)",
} }
if is_option_enabled(world, player, "shuffle_lasers"): if is_option_enabled(multiworld, player, "shuffle_lasers"):
lasers = { lasers = {
"Symmetry Laser", "Symmetry Laser",
"Desert Laser", "Desert Laser",
@ -150,18 +154,18 @@ def get_priority_hint_items(world: MultiWorld, player: int):
"Shadows Laser", "Shadows Laser",
} }
if get_option_value(world, player, "doors") >= 2: if get_option_value(multiworld, player, "doors") >= 2:
priority.add("Desert Laser") priority.add("Desert Laser")
lasers.remove("Desert Laser") lasers.remove("Desert Laser")
priority.update(world.random.sample(lasers, 2)) priority.update(multiworld.slot_seeds[player].sample(lasers, 2))
else: else:
priority.update(world.random.sample(lasers, 3)) priority.update(multiworld.slot_seeds[player].sample(lasers, 3))
return priority return priority
def get_priority_hint_locations(world: MultiWorld, player: int): def get_priority_hint_locations(multiworld: MultiWorld, player: int):
return { return {
"Town RGB Room Left", "Town RGB Room Left",
"Town RGB Room Right", "Town RGB Room Right",
@ -171,75 +175,85 @@ def get_priority_hint_locations(world: MultiWorld, player: int):
"Desert Vault Box", "Desert Vault Box",
"Mountainside Vault Box", "Mountainside Vault Box",
"Mountainside Discard", "Mountainside Discard",
"Tunnels Theater Flowers EP",
"Boat Shipwreck Green EP",
} }
def make_hint_from_item(world: MultiWorld, player: int, item: str): def make_hint_from_item(multiworld: MultiWorld, player: int, item: str):
location_obj = world.find_item(item, player).item.location location_obj = multiworld.find_item(item, player).item.location
location_name = location_obj.name location_name = location_obj.name
if location_obj.player != player: 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 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): def make_hint_from_location(multiworld: MultiWorld, player: int, location: str):
location_obj = world.get_location(location, player) location_obj = multiworld.get_location(location, player)
item_obj = world.get_location(location, player).item item_obj = multiworld.get_location(location, player).item
item_name = item_obj.name item_name = item_obj.name
if item_obj.player != player: 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 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() hints = list()
prog_items_in_this_world = { 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 if item.player == player and item.code and item.advancement
} }
loc_in_this_world = { loc_in_this_world = {
location.name for location in world.get_locations() location.name for location in multiworld.get_locations()
if location.player == player and not location.event if location.player == player and location.address
} }
always_locations = [ 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 if location in loc_in_this_world
] ]
always_items = [ 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 if item in prog_items_in_this_world
] ]
priority_locations = [ 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 if location in loc_in_this_world
] ]
priority_items = [ 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 if item in prog_items_in_this_world
] ]
always_hint_pairs = dict() always_hint_pairs = dict()
for item in always_items: 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]) always_hint_pairs[hint_pair[0]] = (hint_pair[1], True, hint_pair[2])
for location in always_locations: 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]) always_hint_pairs[hint_pair[0]] = (hint_pair[1], False, hint_pair[2])
priority_hint_pairs = dict() priority_hint_pairs = dict()
for item in priority_items: 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]) priority_hint_pairs[hint_pair[0]] = (hint_pair[1], True, hint_pair[2])
for location in priority_locations: 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]) priority_hint_pairs[hint_pair[0]] = (hint_pair[1], False, hint_pair[2])
for loc, item in always_hint_pairs.items(): for loc, item in always_hint_pairs.items():
@ -248,17 +262,19 @@ def make_hints(world: MultiWorld, player: int, hint_amount: int):
else: else:
hints.append((loc, "contains", item[0], item[2])) 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)) prog_items_in_this_world = sorted(list(prog_items_in_this_world))
locations_in_this_world = sorted(list(loc_in_this_world)) locations_in_this_world = sorted(list(loc_in_this_world))
world.random.shuffle(prog_items_in_this_world) multiworld.slot_seeds[player].shuffle(prog_items_in_this_world)
world.random.shuffle(locations_in_this_world) multiworld.slot_seeds[player].shuffle(locations_in_this_world)
while len(hints) < hint_amount: while len(hints) < hint_amount:
if priority_hint_pairs: 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] item = priority_hint_pairs[loc]
del 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 next_random_hint_is_item = not next_random_hint_is_item
continue 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])) hints.append((hint[1], "can be found at", hint[0], hint[2]))
else: 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])) hints.append((hint[0], "contains", hint[1], hint[2]))
next_random_hint_is_item = not next_random_hint_is_item 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 return hints
def generate_joke_hints(world: MultiWorld, amount: int): def generate_joke_hints(multiworld: MultiWorld, player: int, amount: int):
return [(x, y, z, -1) for (x, y, z) in world.random.sample(joke_hints, amount)] 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()) ALL_JUNK_ITEMS = set(BONUS_WEIGHTS.keys()) | set(TRAP_WEIGHTS.keys())
ITEM_ID_TO_DOOR_HEX_ALL = dict()
def __init__(self): def __init__(self):
item_tab = dict() item_tab = dict()
@ -62,6 +64,13 @@ class StaticWitnessItems:
self.ITEM_NAME_GROUPS.setdefault("Symbols", set()).add(item[0]) 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: for item in StaticWitnessLogic.ALL_DOOR_ITEMS:
item_tab[item[0]] = ItemData(158000 + item[1], True, False) item_tab[item[0]] = ItemData(158000 + item[1], True, False)
@ -91,6 +100,9 @@ class StaticWitnessItems:
for key, item in item_tab.items(): for key, item in item_tab.items():
self.ALL_ITEM_TABLE[key] = item 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: class WitnessPlayerItems:
""" """
@ -101,10 +113,33 @@ class WitnessPlayerItems:
def code(item_name: str): def code(item_name: str):
return StaticWitnessItems.ALL_ITEM_TABLE[item_name].code 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""" """Adds event items after logic changes due to options"""
self.EVENT_ITEM_TABLE = dict() self.EVENT_ITEM_TABLE = dict()
self.ITEM_TABLE = copy.copy(StaticWitnessItems.ALL_ITEM_TABLE) self.ITEM_TABLE = copy.copy(StaticWitnessItems.ALL_ITEM_TABLE)
self.PROGRESSION_TABLE = dict() self.PROGRESSION_TABLE = dict()
self.ITEM_ID_TO_DOOR_HEX = dict() self.ITEM_ID_TO_DOOR_HEX = dict()
@ -116,27 +151,31 @@ class WitnessPlayerItems:
self.EXTRA_AMOUNTS = { self.EXTRA_AMOUNTS = {
"Functioning Brain": 1, "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): 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]] del self.ITEM_TABLE[item[0]]
if item in StaticWitnessLogic.ALL_SYMBOL_ITEMS: if item in StaticWitnessLogic.ALL_SYMBOL_ITEMS:
self.SYMBOLS_NOT_IN_THE_GAME.add(StaticWitnessItems.ALL_ITEM_TABLE[item[0]].code) self.SYMBOLS_NOT_IN_THE_GAME.add(StaticWitnessItems.ALL_ITEM_TABLE[item[0]].code)
else: else:
if item[0] in StaticWitnessLogic.PROGRESSIVE_TO_ITEMS: 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.PROGRESSION_TABLE[item[0]] = self.ITEM_TABLE[item[0]]
self.MULTI_LISTS_BY_CODE = dict() self.MULTI_LISTS_BY_CODE = dict()
for item in self.PROG_ITEM_AMOUNTS: 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] 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) entity_hex_int = int(entity_hex, 16)
self.DOORS.add(entity_hex_int) self.DOORS.add(entity_hex_int)
@ -145,26 +184,33 @@ class WitnessPlayerItems:
item_id = StaticWitnessItems.ALL_ITEM_TABLE[item].code item_id = StaticWitnessItems.ALL_ITEM_TABLE[item].code
self.ITEM_ID_TO_DOOR_HEX.setdefault(item_id, set()).add(entity_hex_int) 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(): if "shuffle_symbols" not in the_witness_options.keys():
symbols = True 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 = [ self.GOOD_ITEMS = [
"Progressive Dots", "Black/White Squares", "Symmetry" "Dots", "Black/White Squares", "Stars",
]
elif symbols:
self.GOOD_ITEMS = [
"Progressive Dots", "Black/White Squares", "Progressive Stars",
"Shapers", "Symmetry" "Shapers", "Symmetry"
] ]
if is_option_enabled(world, player, "shuffle_discarded_panels"): if doors:
self.GOOD_ITEMS.append("Triangles") self.GOOD_ITEMS = [
if not is_option_enabled(world, player, "disable_non_randomized_puzzles"): "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.append("Colored Squares")
self.GOOD_ITEMS = [ self.GOOD_ITEMS = [
@ -172,11 +218,11 @@ class WitnessPlayerItems:
] ]
for event_location in locat.EVENT_LOCATION_TABLE: 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.EVENT_ITEM_TABLE[location] = ItemData(None, True, True)
self.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() self.JUNK_WEIGHTS = dict()

View File

@ -13,13 +13,6 @@ class StaticWitnessLocations:
""" """
ID_START = 158000 ID_START = 158000
TYPE_OFFSETS = {
"General": 0,
"Discard": 600,
"Vault": 650,
"Laser": 700,
}
EXTRA_LOCATIONS = { EXTRA_LOCATIONS = {
"Tutorial Front Left", "Tutorial Front Left",
"Tutorial Back Left", "Tutorial Back Left",
@ -143,7 +136,214 @@ class StaticWitnessLocations:
"Theater Mountain Video", "Theater Mountain Video",
"Town RGB Room Left", "Town RGB Room Left",
"Town RGB Room Right", "Town RGB Room Right",
"Town Sound Room Right",
"Swamp Purple Underwater", "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 = { CAVES_LOCATIONS = {
@ -170,8 +370,12 @@ class StaticWitnessLocations:
"Caves Left Upstairs Left Row 5", "Caves Left Upstairs Left Row 5",
"Tunnels Vault Box", "Tunnels Vault Box",
"Mountain Bottom Floor Discard",
"Theater Challenge Video", "Theater Challenge Video",
"Caves Skylight EP",
"Challenge Water EP",
"Tunnels Theater Flowers EP",
"Tutorial Gate EP",
} }
MOUNTAIN_UNREACHABLE_FROM_BEHIND = { MOUNTAIN_UNREACHABLE_FROM_BEHIND = {
@ -183,6 +387,10 @@ class StaticWitnessLocations:
"Mountain Floor 1 Trash Pillar 2", "Mountain Floor 1 Trash Pillar 2",
"Mountain Floor 2 Near Row 5", "Mountain Floor 2 Near Row 5",
"Mountain Floor 2 Far Row 6", "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 = { MOUNTAIN_REACHABLE_FROM_BEHIND = {
@ -213,10 +421,11 @@ class StaticWitnessLocations:
def get_event_name(panel_hex): def get_event_name(panel_hex):
""" """
Returns the event name of any given panel. 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): def __init__(self):
all_loc_to_id = { all_loc_to_id = {
@ -286,11 +495,26 @@ class WitnessPlayerLocations:
if is_option_enabled(world, player, "shuffle_vault_boxes"): if is_option_enabled(world, player, "shuffle_vault_boxes"):
self.PANEL_TYPES_TO_SHUFFLE.add("Vault") 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 self.CHECK_LOCATIONS = self.CHECK_LOCATIONS | player_logic.ADDED_CHECKS
if not is_option_enabled(world, player, "shuffle_postgame"): if not is_option_enabled(world, player, "shuffle_postgame"):
self.CHECK_LOCATIONS -= 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.discard(StaticWitnessLogic.CHECKS_BY_HEX[player_logic.VICTORY_LOCATION]["checkName"])
self.CHECK_LOCATIONS = self.CHECK_LOCATIONS - { self.CHECK_LOCATIONS = self.CHECK_LOCATIONS - {
@ -301,8 +525,13 @@ class WitnessPlayerLocations:
self.CHECK_PANELHEX_TO_ID = { self.CHECK_PANELHEX_TO_ID = {
StaticWitnessLogic.CHECKS_BY_NAME[ch]["checkHex"]: StaticWitnessLocations.ALL_LOCATIONS_TO_ID[ch] StaticWitnessLogic.CHECKS_BY_NAME[ch]["checkHex"]: StaticWitnessLocations.ALL_LOCATIONS_TO_ID[ch]
for ch in self.CHECK_LOCATIONS 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( self.CHECK_PANELHEX_TO_ID = dict(
sorted(self.CHECK_PANELHEX_TO_ID.items(), key=lambda item: item[1]) sorted(self.CHECK_PANELHEX_TO_ID.items(), key=lambda item: item[1])
) )
@ -317,9 +546,9 @@ class WitnessPlayerLocations:
} }
check_dict = { check_dict = {
location: StaticWitnessLocations.get_id(StaticWitnessLogic.CHECKS_BY_NAME[location]["checkHex"]) StaticWitnessLogic.CHECKS_BY_HEX[location]["checkName"]:
for location in self.CHECK_LOCATIONS StaticWitnessLocations.get_id(StaticWitnessLogic.CHECKS_BY_HEX[location]["checkHex"])
if StaticWitnessLogic.CHECKS_BY_NAME[location]["panelType"] in self.PANEL_TYPES_TO_SHUFFLE for location in self.CHECK_PANELHEX_TO_ID
} }
self.CHECK_LOCATION_TABLE = {**self.EVENT_LOCATION_TABLE, **check_dict} 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 import copy
from typing import Set, Dict
from logging import warning
from BaseClasses import MultiWorld from BaseClasses import MultiWorld
from .static_logic import StaticWitnessLogic from .static_logic import StaticWitnessLogic
from .utils import define_new_region, get_disable_unrandomized_list, parse_lambda, get_early_utm_list, \ 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_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 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 = 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()}): if these_panels == frozenset({frozenset()}):
return these_items return these_items
@ -84,7 +90,7 @@ class WitnessPlayerLogic:
if option_panel in self.COMPLETELY_DISABLED_CHECKS: if option_panel in self.COMPLETELY_DISABLED_CHECKS:
new_items = frozenset() 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])}) new_items = frozenset({frozenset([option_panel])})
# If a panel turns on when a panel in a different region turns on, # 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 # the latter panel will be an "event panel", unless it ends up being
@ -207,8 +213,13 @@ class WitnessPlayerLogic:
return return
if adj_type == "Added Locations": if adj_type == "Added Locations":
if "0x" in line:
line = StaticWitnessLogic.CHECKS_BY_HEX[line]["checkName"]
self.ADDED_CHECKS.add(line) self.ADDED_CHECKS.add(line)
if adj_type == "Precompleted Locations":
self.PRECOMPLETED_LOCATIONS.add(line)
def make_options_adjustments(self, world, player): def make_options_adjustments(self, world, player):
"""Makes logic adjustments based on options""" """Makes logic adjustments based on options"""
adjustment_linesets_in_order = [] 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(): 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()) 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: if get_option_value(world, player, "shuffle_doors") == 1:
adjustment_linesets_in_order.append(get_door_panel_shuffle_list()) 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"): if is_option_enabled(world, player, "early_secret_area"):
adjustment_linesets_in_order.append(get_early_utm_list()) 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"): if is_option_enabled(world, player, "shuffle_lasers"):
adjustment_linesets_in_order.append(get_laser_shuffle()) 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: for adjustment_lineset in adjustment_linesets_in_order:
current_adjustment_type = None current_adjustment_type = None
@ -290,7 +350,18 @@ class WitnessPlayerLogic:
""" """
Makes a pair of an event panel and its event item 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]) pair = (name, self.EVENT_ITEM_NAMES[panel])
return pair return pair
@ -323,7 +394,10 @@ class WitnessPlayerLogic:
pair = self.make_event_item_pair(panel) pair = self.make_event_item_pair(panel)
self.EVENT_ITEM_PAIRS[pair[0]] = pair[1] 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_PANELS = set()
self.EVENT_PANELS_FROM_REGIONS = set() self.EVENT_PANELS_FROM_REGIONS = set()
@ -342,6 +416,8 @@ class WitnessPlayerLogic:
self.REFERENCE_LOGIC = StaticWitnessLogic.sigma_normal self.REFERENCE_LOGIC = StaticWitnessLogic.sigma_normal
elif self.DIFFICULTY == 1: elif self.DIFFICULTY == 1:
self.REFERENCE_LOGIC = StaticWitnessLogic.sigma_expert 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.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) 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.EVENT_ITEM_PAIRS = dict()
self.ALWAYS_EVENT_HEX_CODES = set() self.ALWAYS_EVENT_HEX_CODES = set()
self.COMPLETELY_DISABLED_CHECKS = set() self.COMPLETELY_DISABLED_CHECKS = set()
self.PRECOMPLETED_LOCATIONS = set()
self.ADDED_CHECKS = set() self.ADDED_CHECKS = set()
self.VICTORY_LOCATION = "0x0356B" self.VICTORY_LOCATION = "0x0356B"
self.EVENT_ITEM_NAMES = { self.EVENT_ITEM_NAMES = {
@ -366,7 +443,7 @@ class WitnessPlayerLogic:
"0x019DC": "Keep Hedges 2 Knowledge", "0x019DC": "Keep Hedges 2 Knowledge",
"0x019E7": "Keep Hedges 3 Knowledge", "0x019E7": "Keep Hedges 3 Knowledge",
"0x01D3F": "Keep Laser Panel (Pressure Plates) Activates", "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", "0x09F7F": "Mountain Access",
"0x0367C": "Quarry Laser Mill Requirement Met", "0x0367C": "Quarry Laser Mill Requirement Met",
"0x009A1": "Swamp Between Bridges Far 1 Activates", "0x009A1": "Swamp Between Bridges Far 1 Activates",
@ -385,6 +462,7 @@ class WitnessPlayerLogic:
"0x17CDF": "All Boat Panels Turn On", "0x17CDF": "All Boat Panels Turn On",
"0x09DB8": "All Boat Panels Turn On", "0x09DB8": "All Boat Panels Turn On",
"0x17C95": "All Boat Panels Turn On", "0x17C95": "All Boat Panels Turn On",
"0x0A054": "Couch EP solvable",
"0x03BB0": "Town Church Lattice Vision From Outside", "0x03BB0": "Town Church Lattice Vision From Outside",
"0x28AC1": "Town Wooden Rooftop Turns On", "0x28AC1": "Town Wooden Rooftop Turns On",
"0x28A69": "Town Tower 1st Door Opens", "0x28A69": "Town Tower 1st Door Opens",
@ -411,6 +489,24 @@ class WitnessPlayerLogic:
"0x03613": "Treehouse Orange Bridge 13 Turns On", "0x03613": "Treehouse Orange Bridge 13 Turns On",
"0x17DEC": "Treehouse Laser House Access Requirement", "0x17DEC": "Treehouse Laser House Access Requirement",
"0x03C08": "Town Church Entry Opens", "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 = { 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 BaseClasses import MultiWorld, Entrance
from .static_logic import StaticWitnessLogic from .static_logic import StaticWitnessLogic
from .Options import get_option_value from .Options import get_option_value
from .locations import WitnessPlayerLocations from .locations import WitnessPlayerLocations, StaticWitnessLocations
from .player_logic import WitnessPlayerLogic 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, 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 connect two regions and set the corresponding requirement
""" """
@ -63,8 +63,10 @@ class WitnessRegions:
if difficulty == 1: if difficulty == 1:
reference_logic = StaticWitnessLogic.sigma_expert reference_logic = StaticWitnessLogic.sigma_expert
else: elif difficulty == 0:
reference_logic = StaticWitnessLogic.sigma_normal reference_logic = StaticWitnessLogic.sigma_normal
else:
reference_logic = StaticWitnessLogic.vanilla
all_locations = set() all_locations = set()
@ -74,8 +76,8 @@ class WitnessRegions:
if reference_logic.CHECKS_BY_HEX[panel]["checkName"] in self.locat.CHECK_LOCATION_TABLE if reference_logic.CHECKS_BY_HEX[panel]["checkName"] in self.locat.CHECK_LOCATION_TABLE
] ]
locations_for_this_region += [ locations_for_this_region += [
reference_logic.CHECKS_BY_HEX[panel]["checkName"] + " Solved" for panel in region["panels"] StaticWitnessLocations.get_event_name(panel) for panel in region["panels"]
if reference_logic.CHECKS_BY_HEX[panel]["checkName"] + " Solved" in self.locat.EVENT_LOCATION_TABLE if StaticWitnessLocations.get_event_name(panel) in self.locat.EVENT_LOCATION_TABLE
] ]
all_locations = all_locations | set(locations_for_this_region) 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 region_name, region in reference_logic.ALL_REGIONS_BY_NAME.items():
for connection in player_logic.CONNECTIONS_BY_REGION_NAME[region_name]: for connection in player_logic.CONNECTIONS_BY_REGION_NAME[region_name]:
if connection[0] == "Entry":
continue
if connection[1] == frozenset({frozenset(["TrueOneWay"])}): if connection[1] == frozenset({frozenset(["TrueOneWay"])}):
self.connect(world, player, region_name, connection[0], player_logic, frozenset({frozenset()})) self.connect(world, player, region_name, connection[0], player_logic, frozenset({frozenset()}))
continue continue

View File

@ -20,35 +20,24 @@ class WitnessLogic(LogicMixin):
""" """
def _witness_has_lasers(self, world, player: int, amount: int) -> bool: def _witness_has_lasers(self, world, player: int, amount: int) -> bool:
regular_lasers = not is_option_enabled(world, player, "shuffle_lasers")
lasers = 0 lasers = 0
if is_option_enabled(world, player, "shuffle_lasers"): place_names = [
lasers += int(self.has("Symmetry Laser", player)) "Symmetry", "Desert", "Town", "Monastery", "Keep",
lasers += int(self.has("Desert Laser", player) "Quarry", "Treehouse", "Jungle", "Bunker", "Swamp", "Shadows"
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
lasers += int(self.has("Symmetry Laser Activation", player)) for place in place_names:
lasers += int(self.has("Desert Laser Activation", player) has_laser = self.has(place + " Laser", player)
and self.has("Desert Laser Redirection", player))
lasers += int(self.has("Town Laser Activation", player)) has_laser = has_laser or (regular_lasers and self.has(place + " Laser Activation", player))
lasers += int(self.has("Monastery Laser Activation", player))
lasers += int(self.has("Keep Laser Activation", player)) if place == "Desert":
lasers += int(self.has("Quarry Laser Activation", player)) has_laser = has_laser and self.has("Desert Laser Redirection", player)
lasers += int(self.has("Treehouse Laser Activation", player))
lasers += int(self.has("Jungle Laser Activation", player)) lasers += int(has_laser)
lasers += int(self.has("Bunker Laser Activation", player))
lasers += int(self.has("Swamp Laser Activation", player))
lasers += int(self.has("Shadows Laser Activation", player))
return lasers >= amount return lasers >= amount
@ -84,11 +73,15 @@ class WitnessLogic(LogicMixin):
for item in option: for item in option:
if item == "7 Lasers": 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 valid_option = False
break break
elif item == "11 Lasers": 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 valid_option = False
break break
elif item == "PP2 Weirdness": elif item == "PP2 Weirdness":
@ -142,6 +135,24 @@ class WitnessLogic(LogicMixin):
if not (front_access and backwards_access): if not (front_access and backwards_access):
valid_option = False valid_option = False
break 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: elif item in player_logic.EVENT_PANELS:
if not self._witness_can_solve_panel(item, world, player, player_logic, locat): if not self._witness_can_solve_panel(item, world, player, player_logic, locat):
valid_option = False valid_option = False

View File

@ -111,6 +111,18 @@ Disabled Locations:
0x17E67 (Bunker UV Room 2) 0x17E67 (Bunker UV Room 2)
0x09DE0 (Bunker Laser) 0x09DE0 (Bunker Laser)
0x0A079 (Bunker Elevator Control) 0x0A079 (Bunker Elevator Control)
0x0042D (Mountaintop River Shape)
0x17CAA (River Garden Entry Panel) 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) required_panel_lambda = line_split.pop(0)
full_check_name = current_region["shortName"] + " " + check_name
if location_id == "Door" or location_id == "Laser": if location_id == "Door" or location_id == "Laser":
self.CHECKS_BY_HEX[check_hex] = { self.CHECKS_BY_HEX[check_hex] = {
"checkName": current_region["shortName"] + " " + check_name, "checkName": full_check_name,
"checkHex": check_hex, "checkHex": check_hex,
"region": current_region, "region": current_region,
"id": None, "id": None,
@ -74,20 +76,38 @@ class StaticWitnessLogicObj:
location_type = "Vault" location_type = "Vault"
elif check_name in laser_names: elif check_name in laser_names:
location_type = "Laser" 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: else:
location_type = "General" location_type = "General"
required_items = parse_lambda(required_item_lambda) required_items = parse_lambda(required_item_lambda)
required_panels = parse_lambda(required_panel_lambda)
required_items = frozenset(required_items) required_items = frozenset(required_items)
requirement = { requirement = {
"panels": parse_lambda(required_panel_lambda), "panels": required_panels,
"items": required_items "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] = { self.CHECKS_BY_HEX[check_hex] = {
"checkName": current_region["shortName"] + " " + check_name, "checkName": full_check_name,
"checkHex": check_hex, "checkHex": check_hex,
"region": current_region, "region": current_region,
"id": int(location_id), "id": int(location_id),
@ -108,6 +128,12 @@ class StaticWitnessLogicObj:
self.CHECKS_BY_NAME = dict() self.CHECKS_BY_NAME = dict()
self.STATIC_DEPENDENT_REQUIREMENTS_BY_HEX = 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) self.read_logic_file(file_path)
@ -125,10 +151,16 @@ class StaticWitnessLogic:
ALL_REGIONS_BY_NAME = dict() ALL_REGIONS_BY_NAME = dict()
STATIC_CONNECTIONS_BY_REGION_NAME = dict() STATIC_CONNECTIONS_BY_REGION_NAME = dict()
OBELISK_SIDE_ID_TO_EP_HEXES = dict()
CHECKS_BY_HEX = dict() CHECKS_BY_HEX = dict()
CHECKS_BY_NAME = dict() CHECKS_BY_NAME = dict()
STATIC_DEPENDENT_REQUIREMENTS_BY_HEX = dict() STATIC_DEPENDENT_REQUIREMENTS_BY_HEX = dict()
EP_TO_OBELISK_SIDE = dict()
EP_ID_TO_NAME = dict()
def parse_items(self): def parse_items(self):
""" """
Parses currently defined items from WitnessItems.txt Parses currently defined items from WitnessItems.txt
@ -185,6 +217,10 @@ class StaticWitnessLogic:
def sigma_normal(self) -> StaticWitnessLogicObj: def sigma_normal(self) -> StaticWitnessLogicObj:
return StaticWitnessLogicObj("WitnessLogic.txt") return StaticWitnessLogicObj("WitnessLogic.txt")
@lazy
def vanilla(self) -> StaticWitnessLogicObj:
return StaticWitnessLogicObj("WitnessLogicVanilla.txt")
def __init__(self): def __init__(self):
self.parse_items() self.parse_items()
@ -195,3 +231,8 @@ class StaticWitnessLogic:
self.CHECKS_BY_NAME.update(self.sigma_normal.CHECKS_BY_NAME) 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.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 @cache_argsless
def get_audio_logs(): def get_audio_logs():
return get_adjustment_file("settings/Audio_Logs.txt") 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")