Bring your own disc

One rule shapes everything here: the project ships no Sony-owned bytes. The archive contains only the project's own compiled tools. Every tool operates on a disc image you supply - a raw Mode 2/2352 .bin dump of your own Legend of Legaia (USA) disc, SCUS-94254. A .cue sheet is accepted anywhere a disc image is: the referenced BINARY track is resolved automatically.

Commands on this page use the bare ./tool form, as run from inside the unpacked archive directory. If you build from source instead, the same binaries land in target/release/ (cargo build --release), so substitute ./target/release/tool.

1 · Download and verify the archive

Each tagged release publishes one archive per platform plus a SHA256SUMS manifest (see tooling/releases.md for how they are built):

  • legaia-tools-<version>-x86_64-unknown-linux-gnu.tar.gz (Linux, glibc 2.28+)
  • legaia-tools-<version>-aarch64-unknown-linux-gnu.tar.gz (Linux on ARM)
  • legaia-tools-<version>-x86_64-pc-windows-gnu.zip (Windows)
sha256sum -c SHA256SUMS --ignore-missing
tar -xzf legaia-tools-<version>-x86_64-unknown-linux-gnu.tar.gz
cd legaia-tools-<version>-x86_64-unknown-linux-gnu
./legaia-extract --version

Every binary answers --version and --help; subcommand help (./asset monster-archive --help) states where each input comes from.

2 · Check your disc image

./disc-extract verify "/path/to/Legend of Legaia (USA).bin"

A good USA dump prints:

[ok] matches: Legend of Legaia (USA) - SCUS-94254

An unrecognized dump (a PAL disc, a re-track, a bad rip) prints an [unknown] line with the computed SHA-256 instead of failing - the extraction tools still run on it, but the fingerprints, offsets, and the randomizer's patches all target the USA build. A file that is not a Mode 2/2352 image at all is rejected up front with not a Mode2/2352 disc image: <path>.

3 · Extract everything in one shot

./legaia-extract "/path/to/Legend of Legaia (USA).bin" --out extracted

On a modern machine this takes about five seconds and writes roughly 1.1 GB. The pipeline runs eight steps: disc verify, ISO9660 walk (the disc's 45 files), PROT.DAT split (1233 entries, named via CDNAME.TXT), per-entry format categorization, streaming sub-asset extraction, streaming-TIM PNG conversion, the TIM-catalog TSVs, CD-XA demux to per-channel WAVs (316 of them), and finally the dialog-font artifacts. Skip flags exist for each slow or optional step: --skip-verify, --skip-png, --skip-xa, --skip-catalog, --skip-font.

What lands where:

extracted/
├── PROT.DAT                 - the game's main archive, raw copy
├── CDNAME.TXT               - entry name map
├── SCUS_942.54              - the game executable (data-table source)
├── MOV/                     - FMV movies (MV1.STR ...)
├── PROT/                    - one file per PROT entry, plus categorize.json
├── streaming/               - sub-assets unpacked from streaming containers
├── XA_WAV/                  - streamed audio, one WAV per channel
├── font/                    - dialog-font atlas + widths (engine + viewer read this)
├── prot_tim_catalog.tsv     - texture inventory (raw TIMs)
└── prot_tim_deep_catalog.tsv - texture inventory (TIMs inside LZS)

The final summary points at the texture path: bulk texture export is a separate two-command step (asset tim-scan + tim convert-dir) covered in extracting assets. Everything downstream - the asset scenarios, the engine and viewers, the modding tools - reads either this extracted/ tree or the disc image directly.

4 · The tools at a glance

Pipeline and per-format extractors:

BinaryWhat it's for
legaia-extractThe one-shot pipeline: disc image → the whole extracted/ tree. Start here.
disc-extractVerify a dump's fingerprint; list / extract the raw ISO9660 files.
prot-extractSplit PROT.DAT into its numbered entries with CDNAME-derived names.
lzs-decodeDecompress Legaia's LZS streams and .lzs containers.
assetThe format hub: categorize entries, extract sub-assets, dump readable game-data tables, export monsters to glTF.
timTIM textures → PNG.
tmdLegaia TMD meshes → Wavefront OBJ.
vabVAB sound banks → VAG samples / WAV.
seqSEQ music inspector: headers, event disassembly, find for wrapped BGM.
xaStreamed CD-XA audio → correctly-paced per-channel WAVs.
mdecFMV decoder: STR movie data → per-frame PNGs.
font-extractDialog-font atlas + width table, straight from the disc.

Game-data, playing, and modding:

BinaryWhat it's for
legaia-engineThe clean-room engine: play scenes, FMVs, record/replay - straight from your disc.
asset-viewerWindowed browser for textures, meshes, audio banks, and scene demos.
legaia-patcherDisc patcher: randomizer, translation toolchain, and manual record edits; emits shareable PPF patches.
save-toolPSX memory-card / save inspector: character records, save-block diffs.
gamedata-toolCurated game-data lookups (arts, items, shops, enemies, ...); needs no disc at all.
cheat-toolGameShark cheat-database parser with the Legaia NTSC-U databases built in.

Reverse-engineering aids (useful once you go deeper):

BinaryWhat it's for
field-disasmField/event-VM script disassembler over PROT.DAT.
mesMES dialog-container inspector (for readable game text, use legaia-patcher translate export instead).
anmANM animation-container inspector.
mdtMove-table (Tactical Arts) layout classifier.
artTactical Arts tables: action constants, arts names, Super/Miracle Art triggers.
mednafen-stateMednafen save-state inspector: RAM diffs, VRAM dumps, SPU snapshots.

See also