Anachronox demo (Ion Storm / Eidos 2001)

Registry id anachronox_demo. Role-playing game on a heavily extended Quake II engine: anox.exe + gamex86.dll + anoxgfx.dll, renderer ref_gl.dll (OpenGL only -- there is no ref_soft), Miles audio (mss32.dll plus every .m3d provider in ANOXDATA\MILES), and game logic in ANOXDATA\PLUGINS\*.dll (loaded in dllorder.txt order; ui.dll is a debug build). Fixture: test/binaries/win98-games-a-d/Anachronox-Demo-SW-OpenGL (InstallShield 6 cabinets); the unpacked tree is Anachronox-Demo-SW-OpenGL-installed/anoxdemo (the setup's default C:\AnoxDemo, 99 MB).

Install

InstallShield 6 runs its engine (ikernel.exe) as an out-of-process COM server, which the emulator does not provide ("Setup failed to launch installation engine"). The cabinets were unpacked instead: node tools/is-cab.js <fixture> --extract=OUT (114 files, every one MD5-verified). The installer's own support files (ctor.dll, objectps.dll, iuser.dll, iscript.dll, isrt.dll, _IsRes.dll, setup.*, value.shl, default.pal, corecomp.ini) were left out. The setup would also write HKLM\SOFTWARE\Eidos Interactive\Anachronox Demo; the game runs without it.

Running it

Route (CLI, default tick): "One Moment" -> 3D title logo -> Esc at ~205k batches -> main menu; New Universe at (265,140) -> "Democratus: Town of Whitendon" loading screen for ~150k batches -> the opening scene in Fatima's room with her dialogue "Hi there." (~437k). Batches cost ~0.75 s each in the world (software GL at 640x480 plus the debug-build UI), against ~1 ms in the menu.

Evidence: scratch/runs/20261006T1720Z-anachronox_demo-menu-to-world.

Dialogue: click with the game's cursor over the box (solved 2026-10-06)

The opening dialogue was never stuck; the harness clicked in a way the game cannot see. Measured on boat bx_yg8qxb66 with --count slots armed live from ctl.js eval (exports.set_count on the main and every thread instance):

Route through it: one relmousemove to put the cursor inside the box (e.g. relmousemove:200:60 from the top-left), then for every line mousedown:320:240, ~40 batches, mouseup:320:240, ~500 batches. Clicking at the recentre point adds no motion (the cursor drifts 1-2 px per click). That walks Fatima's intro to "Cue the snow."; the context then becomes 256 for the snow/mansion cinematic, which plays by itself in ~70k batches; John's lines in town take ~9 more clicks; then the context returns to 1 and Boots is under player control: holding Up (+forward) walks him up the street, while 1500 idle batches leave him beside John. Evidence: scratch/runs/20261006T1940Z-anachronox_demo-gameplay-w6.

Earlier investigation: the opening dialogue "never advances" (parked 2026-10-06)

Kept for the measurements; the cause is the cursor, above.

The opening scene in Fatima's room shows her line "Hi there." and stays on it. Measured on two runs (one ctl session to 434k, one scripted to 440k):

Ruled out, with how:

Next lead: read how ui.dll's dialogue code decides a line is finished (UI_StartTalk, ui_skipscene, A3SV_Playback_Skip; scripted playback is A3SV_Playback_* in planet.dll). anoxsnd.dll polls AIL_sample_status / AIL_sample_ms_position, so a voice sample that plays but never reports done is still possible.

Named addresses