Klonoa 2: Lunatea's Veil (PS2) Stuff
Klonoa 2 tools, docs, and other stuff.
This repository uses Kaitai Struct to parse binary formats. To test and compile them to Python, use the Kaitai Web IDE or download the compiler.
- Pre-compiled parsers are provided in this repository.
Reverse Engineering To-Do List
- KLDATA.BIN Archive Extraction
- The current method "sniffs" for offsets to check if a file is an archive/folder, which can be seen in the __is_archive function in kldata_archive.py. This will most likely be replaced with a proper hierarchy scanner in the future.
- Klonoa's model requires a manual texture fix when extracted, but other than that, it works 95% of the time
- UVs are nearly perfect when using glTF files in Blender because it supports nearest mipmapping. Using .obj files or linear mipmapping causes noticable bleeding in some models.
- Visions (Stages)
- Animations (.vtipu/.ipu files)
- ...basically everything else
- Voice Files (PPT)
- Music (BGM)
- QuickBMS can do this
- Sound Effects (Soundbanks)
File type names are arbitrary unless it is a standard PS2 format.
klf[abxyz]: Model data
klfa: Animation data (keyframes, translations, rotations, name [8 bytes])
klfb: Bone/joint data (local positions, global/world positions, parent joints)
klfx: Mesh data (vertices, normals, UVs, weights, joint influences, indices, mesh parts)
klfy: Texture data (pixels, palettes)
klfz: Morph data (target, vertices, normals)
klname: Model name (3 bytes)
hd: PS2 soundbank header
bd: PS2 soundbank data
vtipu: Similar to PS2 .ipu (movie) file, used for stuff like water animations
gim: Texture data
ppt: Cutscene voice stored as Playstation 4-bit ADPCM (mono, 22050 Hz, 16bps)
kl0: 16 bytes of
klnull: Starts with
nullstring, 16 bytes long
klpad: 4 bytes of
0xFF, 12 bytes of