Trespasser (demo)

DreamWorks Interactive, 1998. First-person physics adventure, Direct3D (DirectX 6) or software. Candidate trespasser-demo, app trespasser_demo, local only.

Source and layout

What it needed

Route (headless, --batch-size=100000)

Guest 640x480.

batch input result
~3800 - main menu (Play Demo / Load / Options / Exit)
3810-3835 move to 310,100 then 310,107; click level load ("World Initialization", "Level File Copy")
~5000 - first level, "Press 'Q' to jump"
6010-6105 mouse right in 8 px steps Anne turns
6130-6530 hold S walks forward
6600-6700 hold A sidesteps

Holding W (run) straight at the crates in front of the spawn tipped the camera 90 degrees and left it there -- consistent with Anne falling over in the game's own physics, not confirmed. Options (310,285) > Controls (318,236) shows the default keys:

Move Key Hand Input
Walk forward S Rotate arm Ctrl
Run forward W Throw F
Walk backwards X Use/Fire Space
Sidestep left / right A / D Rotate wrist Shift
Jump Q Move hand Left mouse
Crouch Z Grab/Drop Right mouse
Stow/Retrieve E

Open

Evidence: scratch/runs/20261011T2210Z-trespasser-demo-claude1863.

Browser: the level opens through LZ32

The game opens data\DEMO.SCN with LZOpenFileA and checks a 0x30-byte header with LZRead. In the browser the file is streamed (lazy), and LZ32's reads used to fail on a chunk that was not resident yet: LZRead returned -1 and the page said "Scene File Invalid." while the CLI (eager files) loaded the level. 196ea863c makes LZRead/LZOpenFile/LZInit park like ReadFile; the level now loads in the page (Threads, WebGL). Reproduce the browser's file policy headless with --lazy-ranges=5; diffing the eager and lazy runs' file accesses (tres-lazydiff.sh in the evidence folder) is what found it.