Enemy table

Decode every enemy's stat record and 3D battle model straight from your own disc image. The full archive — names, HP, MP, combat stats, and the embedded mesh for the whole roster — is LZS-decompressed in your browser via WebAssembly. Click any row to spin its model. No game data ships with this site; bring your own .bin and nothing leaves your machine.

Open a disc image

No file loaded. Provide a .bin Mode2/2352 image (or a raw PROT.DAT).

Reading the columns: ATK is the enemy's offense; DEF↑ / DEF↓ are two defense facets (which one applies depends on the attack); AGL seeds the hit / evade roll; SPD sets turn order; SP is the gauge the AI spends to cast. EXP / Gold / Drop are the victory spoils — base values the game scales and splits at the end of a fight. Steal is what the player takes with the Evil God Icon equipped (item + chance), read from the static SCUS_942.54 steal table (DAT_80077828) — a separate table from the drop, which is why a monster's steal and drop usually differ. Magic attacks lists the enemy's named spells and their MP cost. Names for spells, drops, and steals resolve from a full disc image; load only a raw PROT.DAT and the raw id shows instead (the steal table needs the SCUS executable, so a raw PROT.DAT shows no steal).

How it works

The whole roster lives in one archive on the disc. Each enemy id maps to a fixed slot that LZS-decompresses to a stat record followed by the enemy's 3D model and its animations. The same parser the native tools and the engine use runs here, compiled to WebAssembly — so what you see is exactly what the game reads.

Files are read with the browser's FileReader straight into WebAssembly memory. Nothing is uploaded; the project ships zero Sony bytes (bring your own disc). Your disc is cached locally and shared across pages, so it auto-loads on reload — use Forget to clear.

asset monster-archive extracted/PROT/0867_battle_data.BIN

The 3D model

Click any row to spin its battle model — rendered textured and directional-lit straight from your disc, the same model the battle camera shows. 186 of the 194 enemies carry one (the rest are filler ids).

asset monster-archive … --id N --obj enemy.obj --texture-png enemy.png

Animations

The model isn't static. Every action an enemy can play — its idle resting loop, its attack, and each spell / special — ships as its own transform-keyframe stream in the same archive. The viewer opens on the idle loop; when a monster carries more than one animation, a row of toggle buttons appears beside the model so you can switch between them. Each one re-poses the body parts frame to frame exactly as the battle renderer does.

asset monster-archive … --id N --anim
Reference Monster animation

Download

The ⬇ Download .glb button packs the selected enemy — mesh, baked texture, and all of its action animations — into a single binary glTF file. glTF is the universal 3D interchange format, so the model drops straight into Blender, three.js, the Windows 3D Viewer, or any glTF tool, animations and all. Each TMD body part becomes an animated node; the per-part palettes are baked into one texture atlas. The same export is available offline from the CLI.

asset monster-archive … --id N --glb enemy.glb