483 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			483 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Python
		
	
	
	
| from . import static_logic as static_witness_logic
 | |
| 
 | |
| ID_START = 158000
 | |
| 
 | |
| GENERAL_LOCATIONS = {
 | |
|     "Tutorial Front Left",
 | |
|     "Tutorial Back Left",
 | |
|     "Tutorial Back Right",
 | |
|     "Tutorial Patio Floor",
 | |
|     "Tutorial Gate Open",
 | |
| 
 | |
|     "Outside Tutorial Vault Box",
 | |
|     "Outside Tutorial Discard",
 | |
|     "Outside Tutorial Shed Row 5",
 | |
|     "Outside Tutorial Tree Row 9",
 | |
|     "Outside Tutorial Outpost Entry Panel",
 | |
|     "Outside Tutorial Outpost Exit Panel",
 | |
| 
 | |
|     "Glass Factory Discard",
 | |
|     "Glass Factory Back Wall 5",
 | |
|     "Glass Factory Front 3",
 | |
|     "Glass Factory Melting 3",
 | |
| 
 | |
|     "Symmetry Island Lower Panel",
 | |
|     "Symmetry Island Right 5",
 | |
|     "Symmetry Island Back 6",
 | |
|     "Symmetry Island Left 7",
 | |
|     "Symmetry Island Upper Panel",
 | |
|     "Symmetry Island Scenery Outlines 5",
 | |
|     "Symmetry Island Laser Yellow 3",
 | |
|     "Symmetry Island Laser Blue 3",
 | |
|     "Symmetry Island Laser Panel",
 | |
| 
 | |
|     "Orchard Apple Tree 5",
 | |
| 
 | |
|     "Desert Vault Box",
 | |
|     "Desert Discard",
 | |
|     "Desert Surface 8",
 | |
|     "Desert Light Room 3",
 | |
|     "Desert Pond Room 5",
 | |
|     "Desert Flood Room 6",
 | |
|     "Desert Elevator Room Hexagonal",
 | |
|     "Desert Elevator Room Bent 3",
 | |
|     "Desert Laser Panel",
 | |
| 
 | |
|     "Quarry Entry 1 Panel",
 | |
|     "Quarry Entry 2 Panel",
 | |
|     "Quarry Stoneworks Entry Left Panel",
 | |
|     "Quarry Stoneworks Entry Right Panel",
 | |
|     "Quarry Stoneworks Lower Row 6",
 | |
|     "Quarry Stoneworks Upper Row 8",
 | |
|     "Quarry Stoneworks Control Room Left",
 | |
|     "Quarry Stoneworks Control Room Right",
 | |
|     "Quarry Stoneworks Stairs Panel",
 | |
|     "Quarry Boathouse Intro Right",
 | |
|     "Quarry Boathouse Intro Left",
 | |
|     "Quarry Boathouse Front Row 5",
 | |
|     "Quarry Boathouse Back First Row 9",
 | |
|     "Quarry Boathouse Back Second Row 3",
 | |
|     "Quarry Discard",
 | |
|     "Quarry Laser Panel",
 | |
| 
 | |
|     "Shadows Intro 8",
 | |
|     "Shadows Far 8",
 | |
|     "Shadows Near 5",
 | |
|     "Shadows Laser Panel",
 | |
| 
 | |
|     "Keep Hedge Maze 1",
 | |
|     "Keep Hedge Maze 2",
 | |
|     "Keep Hedge Maze 3",
 | |
|     "Keep Hedge Maze 4",
 | |
|     "Keep Pressure Plates 1",
 | |
|     "Keep Pressure Plates 2",
 | |
|     "Keep Pressure Plates 3",
 | |
|     "Keep Pressure Plates 4",
 | |
|     "Keep Discard",
 | |
|     "Keep Laser Panel Hedges",
 | |
|     "Keep Laser Panel Pressure Plates",
 | |
| 
 | |
|     "Shipwreck Vault Box",
 | |
|     "Shipwreck Discard",
 | |
| 
 | |
|     "Monastery Outside 3",
 | |
|     "Monastery Inside 4",
 | |
|     "Monastery Laser Panel",
 | |
| 
 | |
|     "Town Cargo Box Entry Panel",
 | |
|     "Town Cargo Box Discard",
 | |
|     "Town Tall Hexagonal",
 | |
|     "Town Church Entry Panel",
 | |
|     "Town Church Lattice",
 | |
|     "Town Maze Panel",
 | |
|     "Town Rooftop Discard",
 | |
|     "Town Red Rooftop 5",
 | |
|     "Town Wooden Roof Lower Row 5",
 | |
|     "Town Wooden Rooftop",
 | |
|     "Windmill Entry Panel",
 | |
|     "Town RGB House Entry Panel",
 | |
|     "Town Laser Panel",
 | |
| 
 | |
|     "Town RGB House Upstairs Left",
 | |
|     "Town RGB House Upstairs Right",
 | |
|     "Town RGB House Sound Room Right",
 | |
| 
 | |
|     "Windmill Theater Entry Panel",
 | |
|     "Theater Exit Left Panel",
 | |
|     "Theater Exit Right Panel",
 | |
|     "Theater Tutorial Video",
 | |
|     "Theater Desert Video",
 | |
|     "Theater Jungle Video",
 | |
|     "Theater Shipwreck Video",
 | |
|     "Theater Mountain Video",
 | |
|     "Theater Discard",
 | |
| 
 | |
|     "Jungle Discard",
 | |
|     "Jungle First Row 3",
 | |
|     "Jungle Second Row 4",
 | |
|     "Jungle Popup Wall 6",
 | |
|     "Jungle Laser Panel",
 | |
| 
 | |
|     "Jungle Vault Box",
 | |
|     "Jungle Monastery Garden Shortcut Panel",
 | |
| 
 | |
|     "Bunker Entry Panel",
 | |
|     "Bunker Intro Left 5",
 | |
|     "Bunker Intro Back 4",
 | |
|     "Bunker Glass Room 3",
 | |
|     "Bunker UV Room 2",
 | |
|     "Bunker Laser Panel",
 | |
| 
 | |
|     "Swamp Entry Panel",
 | |
|     "Swamp Intro Front 6",
 | |
|     "Swamp Intro Back 8",
 | |
|     "Swamp Between Bridges Near Row 4",
 | |
|     "Swamp Cyan Underwater 5",
 | |
|     "Swamp Platform Row 4",
 | |
|     "Swamp Platform Shortcut Right Panel",
 | |
|     "Swamp Between Bridges Far Row 4",
 | |
|     "Swamp Red Underwater 4",
 | |
|     "Swamp Purple Underwater",
 | |
|     "Swamp Beyond Rotating Bridge 4",
 | |
|     "Swamp Blue Underwater 5",
 | |
|     "Swamp Laser Panel",
 | |
|     "Swamp Laser Shortcut Right Panel",
 | |
| 
 | |
|     "Treehouse First Door Panel",
 | |
|     "Treehouse Second Door Panel",
 | |
|     "Treehouse Third Door Panel",
 | |
|     "Treehouse Yellow Bridge 9",
 | |
|     "Treehouse First Purple Bridge 5",
 | |
|     "Treehouse Second Purple Bridge 7",
 | |
|     "Treehouse Green Bridge 7",
 | |
|     "Treehouse Green Bridge Discard",
 | |
|     "Treehouse Left Orange Bridge 15",
 | |
|     "Treehouse Laser Discard",
 | |
|     "Treehouse Right Orange Bridge 12",
 | |
|     "Treehouse Laser Panel",
 | |
|     "Treehouse Drawbridge Panel",
 | |
| 
 | |
|     "Mountainside Discard",
 | |
|     "Mountainside Vault Box",
 | |
|     "Mountaintop River Shape",
 | |
| 
 | |
|     "Tutorial 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",
 | |
|     "Mountainside 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 Stoneworks Ramp EP",
 | |
|     "Quarry Stoneworks Lift EP",
 | |
|     "Quarry Boathouse Moving Ramp EP",
 | |
|     "Quarry Boathouse Hook EP",
 | |
|     "Shadows Quarry Stoneworks 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",
 | |
|     "Windmill First Blade EP",
 | |
|     "Windmill Second Blade EP",
 | |
|     "Windmill Third Blade EP",
 | |
|     "Town Tower Underside Third EP",
 | |
|     "Town Tower Underside Fourth EP",
 | |
|     "Town Tower Underside First EP",
 | |
|     "Town Tower Underside Second 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",
 | |
|     "Jungle Green Leaf Moss EP",
 | |
|     "Monastery Garden Left EP",
 | |
|     "Monastery Garden Right EP",
 | |
|     "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",
 | |
|     "Mountainside Obelisk Side 1",
 | |
|     "Mountainside Obelisk Side 2",
 | |
|     "Mountainside Obelisk Side 3",
 | |
|     "Mountainside Obelisk Side 4",
 | |
|     "Mountainside Obelisk Side 5",
 | |
|     "Mountainside Obelisk Side 6",
 | |
|     "Quarry Obelisk Side 1",
 | |
|     "Quarry Obelisk Side 2",
 | |
|     "Quarry Obelisk Side 3",
 | |
|     "Quarry Obelisk Side 4",
 | |
|     "Quarry Obelisk Side 5",
 | |
|     "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 Mountain Shortcut Panel",
 | |
|     "Caves Swamp Shortcut Panel",
 | |
| 
 | |
|     "Caves Blue Tunnel Right First 4",
 | |
|     "Caves Blue Tunnel Left First 1",
 | |
|     "Caves Blue Tunnel Left Second 5",
 | |
|     "Caves Blue Tunnel Right Second 5",
 | |
|     "Caves Blue Tunnel Right Third 1",
 | |
|     "Caves Blue Tunnel Left Fourth 1",
 | |
|     "Caves Blue Tunnel Left Third 1",
 | |
| 
 | |
|     "Caves First Floor Middle",
 | |
|     "Caves First Floor Right",
 | |
|     "Caves First Floor Left",
 | |
|     "Caves First Floor Grounded",
 | |
|     "Caves Lone Pillar",
 | |
|     "Caves First Wooden Beam",
 | |
|     "Caves Second Wooden Beam",
 | |
|     "Caves Third Wooden Beam",
 | |
|     "Caves Fourth Wooden Beam",
 | |
|     "Caves Right Upstairs Left Row 8",
 | |
|     "Caves Right Upstairs Right Row 3",
 | |
|     "Caves Left Upstairs Single",
 | |
|     "Caves Left Upstairs Left Row 5",
 | |
| 
 | |
|     "Caves Challenge Entry Panel",
 | |
|     "Challenge Tunnels Entry Panel",
 | |
| 
 | |
|     "Tunnels Vault Box",
 | |
|     "Theater Challenge Video",
 | |
| 
 | |
|     "Tunnels Town Shortcut Panel",
 | |
| 
 | |
|     "Caves Skylight EP",
 | |
|     "Challenge Water EP",
 | |
|     "Tunnels Theater Flowers EP",
 | |
|     "Tutorial Gate EP",
 | |
| 
 | |
|     "Mountaintop Mountain Entry Panel",
 | |
| 
 | |
|     "Mountain Floor 1 Light Bridge Controller",
 | |
| 
 | |
|     "Mountain Floor 1 Right Row 5",
 | |
|     "Mountain Floor 1 Left Row 7",
 | |
|     "Mountain Floor 1 Back Row 3",
 | |
|     "Mountain Floor 1 Trash Pillar 2",
 | |
|     "Mountain Floor 2 Near Row 5",
 | |
|     "Mountain Floor 2 Far Row 6",
 | |
| 
 | |
|     "Mountain Floor 2 Light Bridge Controller Near",
 | |
|     "Mountain Floor 2 Light Bridge Controller Far",
 | |
| 
 | |
|     "Mountain Bottom Floor Yellow Bridge EP",
 | |
|     "Mountain Bottom Floor Blue Bridge EP",
 | |
|     "Mountain Floor 2 Pink Bridge EP",
 | |
| 
 | |
|     "Mountain Floor 2 Elevator Discard",
 | |
|     "Mountain Bottom Floor Giant Puzzle",
 | |
| 
 | |
|     "Mountain Bottom Floor Pillars Room Entry Left",
 | |
|     "Mountain Bottom Floor Pillars Room Entry Right",
 | |
| 
 | |
|     "Mountain Bottom Floor Caves Entry Panel",
 | |
| 
 | |
|     "Mountain Bottom Floor Left Pillar 4",
 | |
|     "Mountain Bottom Floor Right Pillar 4",
 | |
| 
 | |
|     "Challenge Vault Box",
 | |
|     "Theater Challenge Video",
 | |
|     "Mountain Bottom Floor Discard",
 | |
| }
 | |
| 
 | |
| 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",
 | |
|     "Mountainside Obelisk Side 1",
 | |
|     "Mountainside Obelisk Side 2",
 | |
|     "Mountainside Obelisk Side 3",
 | |
|     "Mountainside Obelisk Side 4",
 | |
|     "Mountainside Obelisk Side 5",
 | |
|     "Mountainside Obelisk Side 6",
 | |
|     "Quarry Obelisk Side 1",
 | |
|     "Quarry Obelisk Side 2",
 | |
|     "Quarry Obelisk Side 3",
 | |
|     "Quarry Obelisk Side 4",
 | |
|     "Quarry Obelisk Side 5",
 | |
|     "Town Obelisk Side 1",
 | |
|     "Town Obelisk Side 2",
 | |
|     "Town Obelisk Side 3",
 | |
|     "Town Obelisk Side 4",
 | |
|     "Town Obelisk Side 5",
 | |
|     "Town Obelisk Side 6",
 | |
| }
 | |
| 
 | |
| ALL_LOCATIONS_TO_ID = dict()
 | |
| 
 | |
| AREA_LOCATION_GROUPS = dict()
 | |
| 
 | |
| 
 | |
| def get_id(entity_hex: str) -> str:
 | |
|     """
 | |
|     Calculates the location ID for any given location
 | |
|     """
 | |
| 
 | |
|     return static_witness_logic.ENTITIES_BY_HEX[entity_hex]["id"]
 | |
| 
 | |
| 
 | |
| def get_event_name(entity_hex: str) -> str:
 | |
|     """
 | |
|     Returns the event name of any given panel.
 | |
|     """
 | |
| 
 | |
|     action = " Opened" if static_witness_logic.ENTITIES_BY_HEX[entity_hex]["entityType"] == "Door" else " Solved"
 | |
| 
 | |
|     return static_witness_logic.ENTITIES_BY_HEX[entity_hex]["checkName"] + action
 | |
| 
 | |
| 
 | |
| ALL_LOCATIONS_TO_IDS = {
 | |
|     panel_obj["checkName"]: get_id(chex)
 | |
|     for chex, panel_obj in static_witness_logic.ENTITIES_BY_HEX.items()
 | |
|     if panel_obj["id"]
 | |
| }
 | |
| 
 | |
| ALL_LOCATIONS_TO_IDS = dict(
 | |
|     sorted(ALL_LOCATIONS_TO_IDS.items(), key=lambda loc: loc[1])
 | |
| )
 | |
| 
 | |
| for key, item in ALL_LOCATIONS_TO_IDS.items():
 | |
|     ALL_LOCATIONS_TO_ID[key] = item
 | |
| 
 | |
| for loc in ALL_LOCATIONS_TO_IDS:
 | |
|     area = static_witness_logic.ENTITIES_BY_NAME[loc]["area"]["name"]
 | |
|     AREA_LOCATION_GROUPS.setdefault(area, []).append(loc)
 |