No file loaded.

3D model browser

Bring your own disc

This viewer doesn't ship any Sony bytes. Provide a .bin Mode2/2352 image of Legend of Legaia (NA SCUS-94254). A single .tim file also works for one-off image previews.

Files are read locally; nothing is uploaded. The disc is cached in the browser (IndexedDB) and shared across pages, so it auto-loads on reload - hit Forget on the chip to clear it.

PROT.DAT TIM catalog

Every texture in PROT.DAT stored as plain, uncompressed bytes, each with a stable id you can link back to.

Click any thumbnail to load it full-size; the CLUT dropdown switches between an image's palette (CLUT) variants.

Load a disc (or raw PROT.DAT) above to browse the TIM catalog.

Compressed textures (LZS-embedded)

The character and scene textures the catalog above can't see: LZS-compressed inside PROT.DAT, recovered by decompressing every entry and keyed by entry, section, offset.

Click any thumbnail to load it full-size and switch CLUT variants, as in the catalog above.

Load a disc (or raw PROT.DAT) above to browse the compressed textures.

About this viewer — what it shows, how to drive it, provenance

You supply the game. This site ships no game data. Point it at a .bin disc image of your own copy and it is parsed locally in the browser by the project's parsers compiled to WebAssembly - nothing is uploaded.

The page opens the disc's main archive, PROT.DAT, three ways: a 3D browser for every model, a texture catalog for plain-bytes images, and a compressed textures grid for the rest.

Using the viewer

PROT.DAT is a numbered list of entries; the 3D browser lists every entry holding a model - Legaia's house variant of the PlayStation TMD mesh format, textured with standard TIM images through the same paletted shader the native engine uses (switch textured off for flat shading). Pick from the sidebar or jump to an entry by number.

Everything exports. ⬇ .glb downloads the current 3D view - single mesh, or the whole assembled town in full-map mode - as a binary glTF with textures baked from VRAM; ⬇ PNG downloads the selected texture in its current palette. In full-map mode a VR button presents the town over WebXR (VR mode; needs Chrome/Edge with SteamVR and a secure context).

Battle stages are not shown raw. A scene_tmd_stream entry holds half a backdrop shell; the game draws that mesh twice, the second copy either half-turned or reflected, and lays its tiled floor underneath. The viewer places them the same way, and the status line names which transform the executable picked for that stage. Two entries can be the same bowl byte for byte and still be placed differently - the choice is per-stage data the game carries in a table, not something the mesh implies, so a stage that looks rotated against its twin elsewhere is showing you the table (why).

Sound and cutscene video on disc live on the media browser. The native build adds stage geometry and cross-PROT-entry CLUT chains (via --vram-extra-dir):

./target/release/asset-viewer prot extracted/PROT.DAT

Texture catalogs — provenance and validation

The TIM catalog matches jPSXdec's TIM index exactly (same offsets, dimensions, palette counts) - a useful outside check - and also reaches the archive's unindexed system-UI gap, such as the menu-glyph sheet.

In the compressed-textures grid every hit is validated on the output - the decoded bytes must strictly parse as a texture and decode to real pixels, because “it decompressed without error” proves nothing on its own (Legaia LZS).

Run the engine on this scene

Everything above is the disc at rest. To see the engine run - the field VM stepping, NPCs moving, dialogue playing out - head to Play the port; it boots the same disc (already cached in your browser) into any town or field map and hands you the controls.