HZC (File Format): Difference between revisions
(Created page with "'''HZC''' is a collision format used in Cartoon Network Racing DS. = File Format = The file byte order is always little endian. == Header == The file starts with the following header: {| class="wikitable" ! Offset !! Type !! Description |- | 0x00 || UInt16 || {{Unknown-left|'''Unknown'''. Magic or file version? Always 0x0103.}} |- | 0x02 || UInt16 || '''Number of vertices''' ('''V'''). |- | 0x04 || UInt16 || '''Number of triangles''' ('''T'''). |- | 0x06 || UInt16...") |
mNo edit summary |
||
| Line 1: | Line 1: | ||
'''HZC''' is a collision format used in [ | '''HZC''' is a collision format used in ''[https://en.wikipedia.org/wiki/Cartoon_Network_Racing Cartoon Network Racing DS]''. | ||
= File Format = | = File Format = | ||
Revision as of 21:14, 25 July 2026
HZC is a collision format used in Cartoon Network Racing DS.
File Format
The file byte order is always little endian.
Header
The file starts with the following header:
| Offset | Type | Description |
|---|---|---|
| 0x00 | UInt16 | Unknown. Magic or file version? Always 0x0103. |
| 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 are divided by 1024.
| 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. |
| 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 |
|
Tools
The following tools can handle HZC files:
- (none)