Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Repository layout

decomp/        the decompiled game and engine: <module>.cpp / <module>.h, zoombinis.h,
               modules.toml (the module map), matching.txt (what matches)
glue/          C++ standing in for what the game links but we don't have (QuickTime's SDK glue)
assets/        the game's resources in modern formats, one directory per Mohawk archive,
               plus movies/, and zoombi32/ (the executable's icon and installed files)
port/          the port: CMake, miniwin, the host layer, the web page
src/zbtools/   the Python tooling
tests/         pytest, for everything checkable without bring-your-own files
docs/          this book (book.toml, src/, theme/)
data/          your ISOs and .env's neighbour (gitignored, read-only)
build/         every generated file (gitignored): disc, VM disks, toolchain, Ghidra, report, port, book

decomp/

One .cpp per original object file (about 150 in all: 42 game modules, 6 OS-layer modules, the engine's many small ones). Each has an optional .h. Special files:

FileRole
zoombinis.hshared types (View, Snoid, Scene, Party…), the engine's classes as the game's calls show them, and every global several modules use
modules.tomlthe curated module map: start address, name, evidence
matching.txtfunctions known to match, written by uv run match --update
<module>.hthat module's prototypes and the globals and types only it (and its callers) use

See Source modules and Modules and scenes for what each does.

glue/ and port/glue/

glue/quicktime.cpp re-creates Apple's QuickTime for Windows SDK glue (selector stubs written as raw __emit__ bytes that load QuickTime and forward calls). It isn't decompiled code, has no markers, match ignores it, and it may use inline assembly. The port replaces it with port/glue/quicktime.cpp, which plays the intro movie itself. Any file in port/glue/ or port/decomp/ replaces the same-named file when the port builds.

assets/

assets/<ARCHIVE>/archive.toml        where the archive goes on the disc; resources in stored order
assets/<ARCHIVE>/<TYPE>/<id>.<ext>   one file per resource, in its modern format
assets/movies/<NAME>/                frames.toml, palettes.toml, bitmaps.toml, casts/, sound.wav, movie.toml
assets/zoombi32/                     ICON/, resources.toml, installed/ (mohawk.w32, CORNER.TTF, Zoombini.who)

Archives: BASECAMP, BCTWO, BRIDGE, CAVES, FERRY, FLEENS, HOTEL, LILLY, MAP, MAZE2, MIDIMAP, MIDIMPC, NET, PICKER, PIZZA, SLIDES, SMOKE, TOWN, TUNNELS, XFER, ZOOMBINI.

src/zbtools/

See the tool reference.