UE3Tools

Unreal Engine 3 package toolkit — opens cooked .upk / .u / .umap packages, extracts every object into editable text and asset files, and compiles edits back into loader-ready overrides. No .upk is ever repacked.

Status

Development target is Dishonored (package version 9411). Everything version-specific is a p_ver comparison against a named constant, so other UE3 titles should work — but cooked packages vary a lot between titles, and an unrecognised layout degrades to raw hex rather than failing loudly. Keep backups and check your output.

Why it exists

UE3 assets are only editable if you can recover their types, and cooked packages don't carry enough type information on their own — a TArray tag never says what its elements are, an immutable struct is written positionally with no field tags, and native serialization after the property stream has no tags at all.

UE3Tools solves that the way the engine does:

  • Hand-coded metatype bootstrap. Binary deserializers for UClass, UStruct, UScriptStruct, UFunction, UState, UEnum, UConst and all fourteen U*Property kinds. These can't be data-driven — reading UClass requires already knowing UClass.
  • Lazy schema database driven by imports. When decoding hits a type it doesn't have, it follows the import reference into whichever package under --game-root defines it, the same way ULinkerLoad::VerifyImport does. Results are memoised, cycles are broken by a visited set.

The result is one code path for every game, and no per-title offset tables.

Where to go next

I want to… Read
Extract my first package Getting Started
Look up a command or flag Command Reference
Understand the extraction pipeline Architecture
Read or write .uo files by hand The .uo Format
Swap a texture, movie, or sound Asset Payloads
Ship a mod Building Mods
Add support for a new asset class Extending
Build from source Building from Source
Something isn't working FAQ

At a glance

Language Rust (edition 2024)
Compression LZO (chunked, byte-swap aware)
Output formats .uo (text), .dds, .gfx, .ogg / .wav / .xma
Mod output .bin export overrides + .namemap + .newexports
GUI egui / eframe, read-only inspector
Source layout 17 files, ~370 KB — see Architecture
Consumed by CU3ML, which serves the overrides at runtime