Kirby/HEL Engine Research

Note: WIP documentation, will finish this out later with the other file formats

Not Listed:

  • CND
  • CSV Param (Fighters 2)
  • Map3D
  • Map2D
  • Param (RtDL)
  • XData Wrapper

    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
    OffsetTypeDescription
    0x0char[4]Magic, always "XBIN"
    0x4byte[2]XData version, formatted as [0].[1]
    0x6uint16Byte order mark (BOM)
    0x1234 for Big Endian
    0x3412 for Little Endian
    0x8uint32Offset to end of file data
    0xCuint32Unknown, always 65001
    0x10uint32[Version 4.0 only]
    Offset to XData RLOC footer

    XData Footer

    Only present in XData version 4.0.

    OffsetTypeDescription
    0x0char[4]Always "RLOC"
    0x4byte[8]Padding, always zeros

    FDG

    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
    OffsetTypeDescription
    0x0char[4]Magic/BOM
    "FDGH" if Big Endian
    "HGDF" if Little Endian
    0x4byte[4]FDGH version, formatted as [0].[1].[2].[3]
    0x8uint32Offset to file list
    0xCuint32Offset to scene list
    0x10uint32Offset to string list

    File List
    OffsetTypeDescription
    0x0uint32File count
    0x4uint32[n]List of string indexes

    Scene List
    OffsetTypeDescription
    0x0uint32Scene count
    0x4uint32[3][n]List of offsets to each scene's name, 1st asset group, and 2nd asset group

    Asset Group Structure
    OffsetTypeDescription
    0x0uint32Asset count
    0x4uint32[n]List of string indexes

    String List
    OffsetTypeDescription
    0x0uint32String count
    0x4uint32[n]List of offsets to each string

    Mint Archive

    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.

    YAML

    YAML files are a byte version of the text format Yaml, and are fairly simple.

    YAML Header
    OffsetTypeDescription
    0x0char[4]Magic, always "YAML"
    0x4char[4]YAML version, formatted as [0].[1].[2].[3]
    0x8uint32Inital data structure type

    YAML Data Types
    IdentifierType
    0Invalid
    132-bit Integer
    2Float
    3Boolean
    4String
    5Hash
    6List

    Int, Bool, and Float Structures
    OffsetTypeDescription
    0x0uint32Data type identifier
    See above chart
    0x4--Value
    Type corresponds to the given data type at 0x0

    String Structure
    OffsetTypeDescription
    0x0uint32Data type identifier, always 4
    0x4uint32Offset to string

    Hash Structure
    OffsetTypeDescription
    0x0uint32Data type identifier, always 5
    0x4uint32Children count
    0x8uint32[2][n]List of offsets to each string name and data

    List Structure
    OffsetTypeDescription
    0x0uint32Data type identifier, always 6
    0x4uint32Children count
    0x8uint32[n]List of offsets to each child data structure