Unreal Package File Format
Note: This is Work in Progress, and quite outdated since I've written this long ago! This was originally written for the UnrealWiki but I have decided to put it on my own website instead.
Unreal Engine 3 uses one format for all its own files, every unreal file starts with a signature(0x9E2A83C1) which is used to avoid file extension conflicts.
This is a list of known package versions of Unreal Engine games.
- 69 - UT99
- 128 - UT2004
- 512 - UT3
- 648 - UDK November
- 664 - UDK December
- 678 - UDK January
- 706 - UDK May
This is the history of important version modifications.
- 178 - CompactIndices are no longer used, instead they have become Int32's.
A String in unreal files start with a #index representing the string's length, this also includes the '\0' null char.
Object indexes work the same way as #Index, however object indexes are 1 value higher to determine if the reference is NULL e.g. index 0 means the referenced object is NULL while anything higher than 0, means the opposite, the value should always be decremented by 1 if higher than 0.
Arrays in unreal files start with a #index representing the array's length, followed by the data of the array's type for every element.
The header is at the start of the file, the header contains the basic information like GUID and offsets.
|DWORD||Signature||The signature of this file, the signature is used to verify that this is indeed a unreal file.|
|The file format version this package was saved with.|
|DWORD||PackageFlags||This holds the packageflags such as AllowDownload and ServerSideOnly etc.|
|>= 584||16 bytes||Unknown|
|>= 334, Cooked||DWORD||CompressionFlag|
|>= 334, Cooked||FArray||CompressedChunksList|