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