HZC (File Format): Difference between revisions
| (One intermediate revision by the same user not shown) | |||
| Line 20: | Line 20: | ||
== Vertex Data == | == Vertex Data == | ||
Followed by the header, there's plain vertex position data stored as a sequence of groups of 3 Int32s (one per axis). The values | Followed by the header, there's plain vertex position data stored as a sequence of groups of 3 Int32s (one per axis). The values need to be divided by 4096. | ||
{| class="wikitable" | {| class="wikitable" | ||
| Line 78: | Line 78: | ||
| 0x00 || Int32 || '''Number of links''' ('''L'''). | | 0x00 || Int32 || '''Number of links''' ('''L'''). | ||
|- | |- | ||
| 0x04 || UInt16[2]['''L'''] || '''Triangle index''' and '''next index'''. The next index is 0xFFFF at the end of a cell's chain, otherwise another index into this same array | | 0x04 || UInt16[2]['''L'''] || '''Triangle index''' and '''next index'''. The next index is 0xFFFF at the end of a cell's chain, otherwise another index into this same array. | ||
|} | |} | ||
Latest revision as of 18:36, 28 July 2026
HZC is a collision format used in some Nintendo DS and Nintendo 3DS games developed by Firebrand Games such as Cartoon Network Racing DS and Race Driver: Create & Race.
File Format
The file byte order is always little endian.
Header
The file starts with the following header:
| Offset | Type | Description |
|---|---|---|
| 0x00 | UInt16 | Version number. |
| 0x02 | UInt16 | Number of vertices (V). |
| 0x04 | UInt16 | Number of triangles (T). |
| 0x06 | UInt16 | Number of custom attributes (A). |
Vertex Data
Followed by the header, there's plain vertex position data stored as a sequence of groups of 3 Int32s (one per axis). The values need to be divided by 4096.
| Offset | Type | Description |
|---|---|---|
| 0x00 | Int32[3][V] | Vertex XYZ coordinates. |
Triangle Index Data
After the vertex data, there's a list of T * 3 UInt16s that correspond to the indices of each triangle.
| Offset | Type | Description |
|---|---|---|
| 0x00 | UInt16[3][T] | Triangle indices. |
Triangle Normal Data
Directly after the triangle indices there are the triangle's face normals, consisting of 3 Int32s per triangle. They seem to match the cross product of the triangle's first two edges with a magnitude of 4096.
| Offset | Type | Description |
|---|---|---|
| 0x00 | Int32[3][T] | Triangle XYZ normals. |
Grid
Followed by the triangle normal data, there's a spatial grid consisting of 3D cells used for better collision detection. Each cell corresponds to an index to the Linked List Array.
| Offset | Type | Description |
|---|---|---|
| 0x00 | Int32 | Number of cells (C). |
| 0x04 | UInt16[C] | Cell indices. 0xFFFF if empty. |
Grid Info
| Offset | Type | Description |
|---|---|---|
| 0x00 | Int32[3] | Number of cells in the grid's XYZ dimensions. |
| 0x0C | Int32[3] | Grid bounding box minimum XYZ position. |
| 0x18 | Int32[3] | Grid bounding box maximum XYZ position. |
| 0x24 | Int32 | Unknown. Always 0? |
Linked List Array
After the grid data there's an array of triangle/cell links.
| Offset | Type | Description |
|---|---|---|
| 0x00 | Int32 | Number of links (L). |
| 0x04 | UInt16[2][L] | Triangle index and next index. The next index is 0xFFFF at the end of a cell's chain, otherwise another index into this same array. |
Custom Attribute Table
This section is only present if A > 0. It contains a list of T UInt16s that link each triangle to a Key-Value Property in a string table. Some tracks contain unused attributes.
| Offset | Type | Description |
|---|---|---|
| 0x00 | UInt16[T] | Attribute IDs. 0xFFFF if none. |
String Table
| Offset | Type | Description |
|---|---|---|
| 0x00 | Key-Value Property[A] | Key-value property strings. |
Key-Value Property
| Offset | Type | Description |
|---|---|---|
| 0x00 | UInt16 | Key string length (PK). |
| 0x02 | String (Char[PK]) | Attribute key. |
| 0x02 + K | UInt16 | Value string length (PV). |
| 0x04 + K | String (Char[PV]) | Attribute value. Always float(SurfaceType)=X.000000 in Cartoon Network Racing DS. |
| Key | Value | Found in |
|---|---|---|
| COL_grass | float(SurfaceType)=1.000000 |
|
| grass | float(SurfaceType)=1.000000 | Townsville.hzc |
| Grass | float(SurfaceType)=1.000000 |
|
| heavyTerrain | float(SurfaceType)=2.000000 |
|
| HeavyTerrain | float(SurfaceType)=3.000000 |
|
| MudPuddle | float(SurfaceType)=5.000000 | IslandDash.hzc |
| not_track |
|
|
| raceTrackFloor | — | DextersLab.hzc |
| raceTrackWalls | — | DextersLab.hzc |
| RoughGround |
|
|
| terrainLight | float(SurfaceType)=0.000000 |
|
Version List
Version List
| Version | Found in |
|---|---|
| 1.3 | |
| 1.4 | Race Driver: Create & Race |
| 1.5 | |
| 1.12 | |
| 1.14 | TrackMania Turbo (2010) |
| 1.18 | |
| 1.19 | Need for Speed: The Run 3DS |
| 1.22 | Fast & Furious: Showdown 3DS |
| 1.23 |
Tools
The following tools can handle HZC files:
- (none)