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

IJ2 vs MK11: Format Comparison

Both games use the NRS Midway engine (UE3-based). MK11 (2019) evolved from IJ2 (2017).

Header (FPackageFileSummary)

Field IJ2 (100B) MK11 (104B) Change
Magic 0x9E2A83C1 0x9E2A83C1 Same
FileVersion 732 769 Incremented
TotalHeaderSize u32 u32 Same
FourCC "DCF2" "MK11" Different
MidwayVersion 80 80 Same
ShaderVersion At 0x14 Before FourCC Moved
BranchVersion "DDEV" Removed in MK11
EngineVersion At 0x5C Before FourCC Moved
PackageFlags u32 u32 Same
Tables 3 x (u32+u64) 3 x (u32+u64) Same
BulkOffset u32 u64 Grew
GUID 16B 16B Same
CompressionFlag 4 (Oodle v4) 0x40 (Oodle v5) Different codec

Compressed Chunks

Aspect IJ2 MK11
Structure Flat array Named packages with sub-entries
Entry size 24 bytes 32 bytes (u64 fields)
Fields u64 offset, u32 size, u64 comp_off, u32 comp_size u64 off, u64 size, u64 comp_off, u64 comp_size
Extra packages None Second package array (PSF references)
File tables None PSF + Bulk tables after filename

Export Table (FObjectExport)

Aspect IJ2 (72B) MK11 (76B)
Field order Class, Super, Outer, Name Class, Outer, Name, Super
FName u32 index + u32 suffix i32 index + u32 suffix
ArchetypeIndex Present Not present
ReferencedObjects Present Not present
ComponentMap Variable (u32 count + entries) Not present
ExportFlags Present Not present
unk_3 Not present Present (u32)

Import Table (FObjectImport)

Aspect IJ2 (28B) MK11 (20B)
ClassPackage FName (u32+u32) name index i32 resolve_object
ClassName FName (u32+u32) name index i32 name index
OuterIndex i32 resolve_object i32 resolve_object
ObjectName FName (u32+u32) i32 + i32

External Bulk Data

Aspect IJ2 TFC MK11 PSF
File extension .tfc .psf
Lookup Per-texture TextureFileCacheName property Central PSF tables in header
Reference key Inline mip offsets in each Texture2D CookedBulkDataOwnerKey u64
Discovery Auto-detected from same directory Passed explicitly
Compression Same Oodle block format Same Oodle block format
Architecture Decentralized (per-export) Centralized (file-level tables)

Property System

Aspect IJ2 MK11
Name/Type index u64 (u32 + u32 suffix) u64
Size field u32 size + u32 array_index u64 size
FName read u32 index + u32 number u64 (number always 0)

Evolution Summary (IJ2 → MK11)

  1. Header grew 4 bytes (shader/engine ver moved before FourCC)
  2. Import entries shrank 8 bytes (FName → resolve_object for ClassPackage)
  3. Export entries grew 4 bytes (different fields added/removed)
  4. Packages became named groups instead of flat array
  5. External data: decentralized TFC → centralized PSF tables
  6. Oodle upgraded: v4 → v5
  7. Filenames simplified: dotted paths → short names