Getting Started

Inspect a package

ue3-tools upk-header Game/CookedPCConsole/Interface.upk
ue3-tools list       Game/CookedPCConsole/Interface.upk

upk-header prints the parsed package summary — version, decoded flags, table counts, GUID, generations, compression chunks. list prints every export in UE notation:

#312 Texture2D UI_Menu.Backgrounds.MainMenu
#313 SwfMovie UI_Menu.Movies.hud

Extract

ue3-tools --game-root /path/to/Dishonored/DishonoredGame \
          extract Game/CookedPCConsole/Interface.upk

Always pass --game-root

Without it there is no schema database. Extraction still runs, but arrays and non-atomic structs degrade to @bytes(...) hex, enum values print as raw bytes, no class/struct/enum declaration files are produced, and textures stored in .tfc files cannot be resolved.

Extract a single object — the filter is a substring matched against both the UE full name and the derived filesystem path:

ue3-tools --game-root /path/to/game extract Interface.upk MainMenu output/

Skip all conversion and dump the raw serialized bytes:

ue3-tools extract Interface.upk MainMenu output/ --raw

What you get

Output is <output_dir>/<package stem>/ with the object's UE path mirrored underneath. Texture2D UI_Menu.Backgrounds.MainMenu becomes:

output/
└── Interface/
    └── UI_Menu/
        └── Backgrounds/
            ├── MainMenu.uo     ← properties + native block + sidecar refs
            └── MainMenu.dds    ← decoded texture payload
Class Sidecars written
Texture2D <name>.dds
SwfMovie, GFxMovieInfo <name>.gfx
SoundNodeWave <name>.ogg / .wav / .mp3 / .xma, plus .raw.wav, .xbox360.*, .ps3.*

Meta-objects (Class, ScriptStruct, Enum, Const, *Property) are emitted as UnrealScript-shaped declarations instead of property dumps. They're reference material — the mod packer skips them automatically.

Edit and pack

Edit the .uo text, or just drop a replacement .dds / .gfx next to it, then:

ue3-tools --game-root /path/to/game pack-mod output/Interface --out mymod/
mymod/
└── Interface/
    ├── UI_Menu.Backgrounds.MainMenu.bin
    ├── Interface.namemap
    └── Interface.newexports        ← only if new objects were referenced

That set is what a loader such as CU3ML consumes at runtime. See Building Mods.

GUI

ue3-tools --game-root /path/to/game ui

The GUI is read-only

It inspects and decodes, but it cannot extract or pack. Use the CLI for that.