MK11 Format - thethiny/NRS-Asset-Manager GitHub Wiki

MK11 File Format

Binary format specification for MK11 .xxx files.

Header — 104 bytes

Offset Size Field Value
0x00 4 Magic 0x9E2A83C1
0x04 2+2 FileVersion + LicenseeVersion 769 + 157
0x08 4 ExportsLocation varies
0x0C 4 ShaderVersion 2606
0x10 4 EngineVersion 487
0x14 4 MidwayTeamFourCC "MK11"
0x18 4 MidwayTeamVersion 80
0x1C 4 CookVersion 1096
0x20 4 MainPackage "MAIN"
0x24 4 PackageFlags varies
0x28 12 NameTable (count + offset) varies
0x34 12 ExportTable (count + offset) varies
0x40 12 ImportTable (count + offset) varies
0x4C 8 BulkDataOffset (u64) varies
0x54 16 GUID varies
0x64 4 CompressionFlag 0x40 (Oodle v5)

Named Packages

Unlike IJ2's flat array, MK11 uses named package groups:

packages_count (u32)
For each package:
  package_name_length (u32)
  package_name (ASCII)
  decompressed_offset (u64)
  decompressed_size (u64)
  compressed_offset (u64)
  compressed_size (u64)
  entries_count (u32)
  For each sub-entry:
    decompressed_offset (u64)
    decompressed_size (u64)
    compressed_offset (u64)
    compressed_size (u64)

Package names: HeaderData, Package, Other

Export Table Entry — 76 bytes

Field Size Type
object_class 4 i32 resolve_object
object_outer_class 4 i32 resolve_object
object_name 4 i32 name index
object_name_suffix 4 u32
object_super 4 i32 resolve_object
object_flags 8 u64
object_guid 16 GUID
object_main_package 4 u32 name index
unk_1 4 u32
object_size 4 u32
object_offset 8 u64
unk_2 8 u64
unk_3 4 u32

Import Table Entry — 20 bytes

Field Size Type
import_class_package 4 i32 resolve_object
import_name 4 i32 name index
import_name_suffix 4 i32
import_outer_class 4 i32 resolve_object
object_name 4 i32 resolve_object

PSF (Package Script File)

MK11 uses centralized PSF/bulk tables embedded between the filename and compressed blocks:

psf_table_count (u32)
For each table:
  reference_key (u64)
  package_name (length-prefixed string)
  entries_count (u32)
  For each entry:
    decompressed_size (u64)
    compressed_size (u64)
    decompressed_offset (u64)
    compressed_offset (u64)
  compression_flag (u32)

Texture2D exports reference PSF data via CookedBulkDataOwnerKey property, which maps to a reference_key in the PSF tables.