Pharaoh demo
Impressions' 1999 city builder, built on the Caesar III engine family
(caesar3-demo.md). Registered as pharaoh_demo.
Payload
test/candidate-corpus/manifest.json, id pharaoh-demo:
archive.org PharaohDemo/PharaohDemo.zip (SHA-1 e09b5f04...)
-> InstallShield 5 media (data1.cab, built 1999-08-10)
-> tools/is5-extract.js (fetcher step is5Extract) -> installed/
PharaohDemo.exe + SMACKW32.DLL + mss32.dll + binkw32.dll + data (305 files, ~121 MB)
The cab's common header carries version 0x01000004, the early IS5 layout
tools/is5-extract.js was written for (Heretic II). It yields the same 305
files and 121 MB as unshield -g Executable, needs no host unshield (the ops box has none),
and checks every file against its recorded expanded size. The fetched candidate
is about 207 MB on disk (86 MB of installer media plus installed/); the zip
itself only lives in the fetcher's temp directory.
Licence: the Sierra demo EULA shipped in the package (EULADEMO.txt) grants a
single-user licence and forbids copying or reproduction, so the candidate is
localOnly.
SMACKW32.DLL and mss32.dll are listed as app DLLs; binkw32.dll is
loaded from the install directory by the normal import path.
Speed
At the CLI's default block budget the title takes thousands of batches and
looks frozen (uniform frames, a few hundred API calls). Pass
--batch-size=100000: the title screen appears at about batch 2000.
Route to a growing village (batch numbers at --batch-size=100000)
Each click is a mousemove, a mousedown, and a mouseup about 25 batches later.
| Batches | Action |
|---|---|
| 2050-2075 | (320,300) title "Click to Start" |
| 2450-2475 | (320,138) Play Demo |
| 2850-2875 | (320,138) Predynastic Period |
| 3500/3510 | keydown/keyup 13: accept the default name |
| 3900-3925 | (484,398) briefing "Nubt: A Village is Born", To the city |
| 4400-4440 | (499,283) Build Roads |
| 4520-4650 | drag (100,300) to (420,300): a road |
| 4800-4840 | (499,243) Build Housing |
| 4860-4960 | drag (160,318) to (340,340): housing plots beside the road |
Result: immigrants walk in along the road, and the population grows from 0 to 39 (April) and then 60 (June 3500 BC) with the huts occupied by about batch 9000.
Housing plots with no road access disappear, so build the road first.
Sidebar buttons (640x480, construction panel)
Hover over a button and its tooltip names it:
| y \ x | 499 | 529 | 561 | 593 |
|---|---|---|---|---|
| 243 | Housing | Farming and Food | Entertainment | Health and Sanitation |
| 283 | Roads | Industrial | Religious | Municipal |
| 322 | Clear Land | Storage and Distribution | Education | Military |
| 363 | Undo | View Messages | Cycle trouble spots | (fourth button) |
Evidence: scratch/runs/20261011T0730Z-pharaoh-w6/.
Browser route (800x600) and drag-to-build (claude:w4, 2026-10-11)
The browser runs the demo at 800x600, while the CLI defaults to 640x480
(--screen=800x600 matches the browser). At 800x600 the menu art is 640x480
centred at (80,60), and the city sidebar is in its 800x600 layout. The 640x480
table above does not apply there. Guest coordinates at 800x600:
| Action | Point |
|---|---|
| title "Click to Start" | (400,360) |
| Play Demo, then Predynastic Period | (400,172) |
| name | Enter |
| briefing "To the city" arrow | (606,497) |
| Build Housing / Build Roads (sidebar column 1, rows 1/2) | (625,305) / (625,350) |
Drag-to-build works in the browser in both cooperative and Threads mode: the
road preview shows its cost while the button is held, a road and a housing
block get built, and huts fill (Pop 50 after 60 s). The earlier report that it
built nothing came from a probe pressing (659,283), which is not the Roads
button at 800x600. With that point neither the CLI nor the browser shows a
preview. Evidence: scratch/runs/20261011T1225Z-pharaoh-drag-800-w4.