Skip to content

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.

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.

  • Numbers in .msh, .skl, .ani and .dat files 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.iop is searched before map.iop, and inside a pack the last entry of a name wins.
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.

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.

  • 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 in ioFileTokenDefine.h.
  • The model config text files (resource/model/*.txt) are described in the tools’ pages only in passing.