File extension: .csmodel
| Offset | Type | Size (octets) | Description |
|---|---|---|---|
| 0 | UInt8 | 1 | Asset type (always 0 for Models) |
| 1 | UInt16 | 2 | Format version (currently 5) |
| 3 | UInt16 | 2 | Next unused node ID |
| 5 | UInt16 | 2 | Node count |
| 7 | ModelNode[] | (variable) | Array of nodes (see below) |
| 7 + ? + 0 | UInt32 | 4 | Texture data size |
| 7 + ? + 4 | UInt8[] | Texture data size | Texture data in PNG format |
| 7 + ? + 4 + ? + 0 | UInt16 | 2 | Animation count |
| 7 + ? + 4 + ? + 2 | UInt16[] | Animation count × 2 | Asset IDs of associated model animations |
Each model node has the following structure:
| Offset | Type | Size (octets) | Description |
|---|---|---|---|
| 0 | UInt16 | 2 | ID |
| 2 | UInt16 | 2 | Parent node ID |
| 4 | C# String | (variable) | Name |
| 4 + ? + 0 | Vector3 | 12 (3 × 4) | Position |
| 4 + ? + 12 | Vector3 | 12 (3 × 4) | Offset from pivot |
| 4 + ? + 24 | Vector3 | 12 (3 × 4) | Scale |
| 4 + ? + 36 | Quaternion | 16 (4 × 4) | Orientation |
| 4 + ? + 52 | UInt16 | 2 | Block size X |
| 4 + ? + 54 | UInt16 | 2 | Block size Y |
| 4 + ? + 56 | UInt16 | 2 | Block size Z |
| 4 + ? + 58 | UInt8 | 1 | Unwrap mode (collapsed 0, full 1 or custom 2) |
| 4 + ? + 59 | Point | 8 (2 × 4) | Unwrap offset for quad 0 |
| 4 + ? + 67 | Point | 8 (2 × 4) | Unwrap offset for quad 1 |
| 4 + ? + 75 | Point | 8 (2 × 4) | Unwrap offset for quad 2 |
| 4 + ? + 83 | Point | 8 (2 × 4) | Unwrap offset for quad 3 |
| 4 + ? + 91 | Point | 8 (2 × 4) | Unwrap offset for quad 4 |
| 4 + ? + 99 | Point | 8 (2 × 4) | Unwrap offset for quad 5 |
| 4 + ? + 107 | UVTransform | 1 | Unwrap transform flags for quad 0 |
| 4 + ? + 108 | UVTransform | 1 | Unwrap transform flags for quad 1 |
| 4 + ? + 109 | UVTransform | 1 | Unwrap transform flags for quad 2 |
| 4 + ? + 110 | UVTransform | 1 | Unwrap transform flags for quad 3 |
| 4 + ? + 111 | UVTransform | 1 | Unwrap transform flags for quad 4 |
| 4 + ? + 112 | UVTransform | 1 | Unwrap transform flags for quad 5 |
Model nodes are rendered textured blocks.
(TODO: Document the way each unwrap mode works. In the meantime, looking at how they behave in CraftStudio should be enough)
The unwrap transform flags have the following values:
| Label | Value |
|---|---|
| None | 0 |
| Rotate90 | 1 « 0 |
| Rotate180 | 1 « 1 |
| Rotate270 | 1 « 2 |
| MirrorHorizontal | 1 « 3 |
| MirrorVertical | 1 « 4 |
One rotation and both mirroring options can be combined.