File Formats
These pages describe the files the client loads and how the web tools read and write them. They are written from the 2014, 2019 and 2021 sources and from the tools’ own parsers. Each page names the differences between the three clients and lists what is not confirmed yet.
Use them when a tool refuses a file, when you build files outside the tools (Blender, scripts), or when a client change needs the exact byte layout.
Overview
Section titled “Overview”| Format | Files | What it holds | Read by | Written by |
|---|---|---|---|---|
| IOP pack | rs.iop, map.iop |
ZIP-based archive of nearly all client files; encrypted entries | Game Folder, IOP Manager, every tool through the game folder | IOP Manager (as a downloaded pack) |
| MSH mesh | .msh |
Vertices, faces, bone weights, control points | Models, Heroes, Costumes | Models (control points), Costumes (new meshes) |
| ANI animation | .ani |
Events and bone keyframes | Models, Anim Studio, Heroes | Anim Studio, Models |
| SKL skeleton | .skl |
Bone tree and rest pose | Models, Anim Studio, Heroes | none yet |
| UI image set | xml/uiimageset.xml |
Textures and the named boxes cut from them | UI Image Sets, UI Windows | UI Image Sets |
| Window XML | xml/*.xml |
Window trees: layout, styles, images, Id numbers |
UI Windows | UI Windows |
| DAT tables and INI | resource/tables/*.dat, config/*.ini |
Game data tables and text configs | Tables, Items, Quests, Heroes, IOP Manager | Tables, Items, Quests, IOP Manager |
“Written by” means the tool gives you a download. Nothing is written into your client folder. Put changed files back with IOP Manager.
Shared rules
Section titled “Shared rules”- Numbers in
.msh,.skl,.aniand.datfiles are little-endian. - Text inside binary files is CP949 (Korean) unless a page says otherwise. Keep names to plain ASCII.
- A 3D file starts with a 4-byte token (
MSH\0,SKL\0,ANI\0). Wrong token, wrong format. - Names are matched by text, case-insensitively in the packs. A name that is spelled differently in two files is a different name.
- Files are found by name through the packs, not by path alone.
rs.iopis searched beforemap.iop, and inside a pack the last entry of a name wins.
Which client has what
Section titled “Which client has what”| Part | 2014 | 2019 | 2021 |
|---|---|---|---|
| Pack format and search order | same | same | same |
.msh, .ani, .skl |
same | same | same |
uiimageset.xml loader |
same | same | same |
| Window XML | base set | adds Layer, Text, Template |
same as 2019 |
.dat tables |
none | yes (68 table headers) | yes (69 table headers) |
| INI configs | yes | yes | yes |
A “same” row means the loader code is identical in the sources. The files themselves (which meshes, which windows) still differ per client.
How the pages were checked
Section titled “How the pages were checked”Layouts come from the loader code in io3DEngine, ioPac and LSClient of each source, and from the parsers in the web tools. A byte layout appears only where both agree or where the code makes it clear. Everything else is marked not confirmed yet. If you find a file that breaks a rule on these pages, tell the community: the rule is wrong, not your file.
Not confirmed yet
Section titled “Not confirmed yet”- The material script (
MTL\0), collision mesh (CMS\0), outline edge (EDG\0) and animate effect (AFX\0) formats have no page. Their tokens are inioFileTokenDefine.h. - The model config text files (
resource/model/*.txt) are described in the tools’ pages only in passing.
