Kirby/HEL Engine Research
Note: WIP documentation, will finish this out later with the other file formats
Not Listed:
Almost every non-asset file in HAL's HEL Engine has an XData header/wrapper in the file. Its purpose is to provide file metadata, and it's used in almost all of the HEL specific file types.
XData Header| Offset | Type | Description |
|---|---|---|
| 0x0 | char[4] | Magic, always "XBIN" |
| 0x4 | byte[2] | XData version, formatted as [0].[1] |
| 0x6 | uint16 | Byte order mark (BOM) 0x1234 for Big Endian 0x3412 for Little Endian |
| 0x8 | uint32 | Offset to end of file data |
| 0xC | uint32 | Unknown, always 65001 |
| 0x10 | uint32 | [Version 4.0 only] Offset to XData RLOC footer |
Only present in XData version 4.0.
| Offset | Type | Description |
|---|---|---|
| 0x0 | char[4] | Always "RLOC" |
| 0x4 | byte[8] | Padding, always zeros |
FDG files are used to denote game scenes and what files need to be preloaded into memory for each scene. These range from level rooms to main menus.
FDG Header| Offset | Type | Description |
|---|---|---|
| 0x0 | char[4] | Magic/BOM "FDGH" if Big Endian "HGDF" if Little Endian |
| 0x4 | byte[4] | FDGH version, formatted as [0].[1].[2].[3] |
| 0x8 | uint32 | Offset to file list |
| 0xC | uint32 | Offset to scene list |
| 0x10 | uint32 | Offset to string list |
| Offset | Type | Description |
|---|---|---|
| 0x0 | uint32 | File count |
| 0x4 | uint32[n] | List of string indexes |
| Offset | Type | Description |
|---|---|---|
| 0x0 | uint32 | Scene count |
| 0x4 | uint32[3][n] | List of offsets to each scene's name, 1st asset group, and 2nd asset group |
| Offset | Type | Description |
|---|---|---|
| 0x0 | uint32 | Asset count |
| 0x4 | uint32[n] | List of string indexes |
| Offset | Type | Description |
|---|---|---|
| 0x0 | uint32 | String count |
| 0x4 | uint32[n] | List of offsets to each string |
Please see this Google Spreadsheet for info on Mint archives and scripts.
Please see this Google Spreadsheet for info on the Mint bytecode's uses and instruction sets.
YAMLYAML files are a byte version of the text format Yaml, and are fairly simple.
YAML Header| Offset | Type | Description |
|---|---|---|
| 0x0 | char[4] | Magic, always "YAML" |
| 0x4 | char[4] | YAML version, formatted as [0].[1].[2].[3] |
| 0x8 | uint32 | Inital data structure type |
| Identifier | Type |
|---|---|
| 0 | Invalid |
| 1 | 32-bit Integer |
| 2 | Float |
| 3 | Boolean |
| 4 | String |
| 5 | Hash |
| 6 | List |
| Offset | Type | Description |
|---|---|---|
| 0x0 | uint32 | Data type identifier See above chart |
| 0x4 | -- | Value Type corresponds to the given data type at 0x0 |
| Offset | Type | Description |
|---|---|---|
| 0x0 | uint32 | Data type identifier, always 4 |
| 0x4 | uint32 | Offset to string |
| Offset | Type | Description |
|---|---|---|
| 0x0 | uint32 | Data type identifier, always 5 |
| 0x4 | uint32 | Children count |
| 0x8 | uint32[2][n] | List of offsets to each string name and data |
| Offset | Type | Description |
|---|---|---|
| 0x0 | uint32 | Data type identifier, always 6 |
| 0x4 | uint32 | Children count |
| 0x8 | uint32[n] | List of offsets to each child data structure |