Legend of Legaia reverse engineering & clean-room engine port
Two coordinated tracks under one repo. Track 1: extract every asset on the disc, document every format with provenance back to a Ghidra function, build round-trip parsers. Track 2: a clean-room Rust engine port that consumes the extracted data, in the same legal pattern as ScummVM, OpenRCT2, OpenMW, and OpenLara. Bring your own disc image; the toolkit handles the rest.
Demo
The clean-room engine booting a real scene, plus the asset viewers running off a disc image.
Explore
Interactive surfaces that run client-side in this browser. No install; provide a disc image and the WASM build does the rest locally.
Understand the engine
How the binary actually works - from raw sectors up through the runtime VMs. Start with How it stacks for the conceptual map.
Build & reference
Set up the workspace, run the extraction pipeline, and look up the anchor data the documentation hangs on.
Where we are
Disc is fully readable, every major subsystem is traced, all five runtime VMs plus the battle action state machine are ported, and the engine boots a real scene in a window or in the browser.
Open work in detail (click to expand)
- Shop overlay carries the per-scene item costs (still needs overlay capture). Per-character level-up triplets pin the multi-frame write split and per-character SP-grant divergence; the per-Seru stat-grant source table still lives in an uncaptured battle-data init overlay.
- STR/MDEC FMV cutscene overlay (game modes 26/27) not yet captured;
play-stralready plays standalone STR files. - Retail save block: money + inventory RAM addresses confirmed, but the serialisation path into the staging buffer hasn't been traced to byte offsets within the block.
- Field-VM WARP
map_id → scene-namehandler; the engine currently uses CDNAME order as an approximation. - Per-slot semantics inside the 97-entry
field-packschema (structurally understood; per-scene consumer trace pending).