Home - thethiny/NRS-Asset-Manager GitHub Wiki
NRS Asset Manager
A Python toolkit for extracting and parsing game assets from NetherRealm Studios titles β UE3-based Midway engine games and UE4.27 (MK1).
Supported Games
| Game | Codename | Engine | Compression | External Data | Status |
|---|---|---|---|---|---|
| Mortal Kombat X (2015) | MK10 | UE3 (677) | ZLIB / LZO | .tfc |
Full extraction + 3D mesh + FMOD audio |
| Injustice 2 (2017) | DCF2 | UE3 (732) | Oodle v4 | .tfc |
Full extraction + skeletal mesh |
| Mortal Kombat 11 (2019) | MK11 | UE3 (769) | Oodle v5 | .psf |
Full extraction |
| Mortal Kombat 1 (2023) | MK12 | UE4.27 | Oodle v9 | .ucas (IoStore) |
UAsset parsing + IoStore extraction |
Quick Start
CLI
# Auto-detects game from file header and version
python main.py extract path/to/file.xxx
# Display file header
python main.py header path/to/file.xxx
# List exports, imports, or names
python main.py list path/to/file.xxx --exports
# VFS mount and browse
python main.py vfs mount path/to/directory/
python main.py vfs tree path/to/file.xxx --depth 3
Browser (GUI)
python -m gui.browser
The PyQt6 browser supports:
- Load tab β Add game paths, scan files, mount
.xxx/.uasset/.utocfiles with background threading - Browse tab β Tree with per-section texture preview, 3D mesh viewer, DataTable JSON, material sphere preview
- Coalesced tab β Folder tree for localization/config files with export
- MKScript tab β MKO function/variable/asset viewer
Extraction Pipeline
UE3 Games (MKX, IJ2, MK11)
.xxx (Compressed Archive)
β Midway Format (Decompressed UPK)
β Exports (Game Objects)
β Handlers (DatabaseβJSON, Texture2DβDDS/PNG, SkeletalMeshβ3D, etc.)
UE4 Games (MK1)
UTOC/UCAS (IoStore, AES-ECB + Oodle v9)
β .uasset (Midway equivalent)
β Exports (DataTableβJSON, etc.)
See Extraction Pipeline for details.
Encryption
| Format | Algorithm | Games |
|---|---|---|
| Coalesced | AES-ECB | MKX, IJ2, MK11 |
| DFP | Rolling XOR + custom stream cipher | MK11 |
| FSB (FMOD) | Bit-reverse + XOR | MKX |
| IoStore | AES-256-ECB | MK1 |
Project Structure
mk_utils/
βββ nrs/
β βββ ue3_common.py # Shared UE3 base classes
β βββ scene_assembler.py # Mesh β material β texture binding
β βββ vfs/ # Virtual filesystem (mount, browse, cache)
β βββ mkscript/ # MKO bytecode parser (MKX, IJ2, MK11)
β βββ mkx/ # MKX game module (UE3)
β βββ ij2/ # IJ2 game module (UE3)
β βββ mk11/ # MK11 game module (UE3)
β βββ mk1/ # MK1 game module (UE4.27)
β βββ ue4_common.py # UAsset structs
β βββ archive.py # IoStore container (UTOC/UCAS)
β βββ midway.py # UAsset parser
β βββ ue4_properties.py # UE4 tagged property deserializer
β βββ class_handlers/ # DataTable handler
βββ formats/
β βββ compression/ # Oodle, ZLIB, LZO
β βββ coalesced.py # AES-ECB Coalesced decryption
β βββ dfp.py # DFP encryption (pure Python)
β βββ fsb.py # FSB audio decryption
β βββ dds.py # DDS header building + PNG conversion
βββ utils/
β βββ structs.py # ctypes binary struct wrapper
gui/
βββ browser.py # PyQt6 asset browser
βββ mesh_viewer.py # OpenGL 3D mesh viewer
βββ file_detector.py # Magic/FourCC-based file detection
Documentation
- Architecture: Extraction Pipeline Β· File Format Overview Β· How to Expand
- Game Formats: Injustice 2 Format Β· MKX Format Β· MK11 Format Β· MK1 Format Β· Format Comparison
- Game Knowledge:
- IJ2: IJ2 Inventory System Β· IJ2 Gear Randomization
- MKX: MKX Rendering and Materials Β· MKX Audio
- MK11: MK11 Encryption and VFS
- MK1: MK1 IoStore and DataTable
- Handlers: Database Handler Β· Texture2D Handler
- Reference: UE3 Property Types Β· Enums Reference Β· Known Limitations