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.