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 HeaderOffset | 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 HeaderOffset | 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 HeaderOffset | 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 |