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,UConstand all fourteenU*Propertykinds. These can't be data-driven — readingUClassrequires already knowingUClass. - 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-rootdefines it, the same wayULinkerLoad::VerifyImportdoes. 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 |