UE3 Property Types - thethiny/NRS-Asset-Manager GitHub Wiki
Both games serialize object data as UE3 properties. Each property has a name, type, size, and data.
name_index (FName: u32 index + u32 suffix) — Name table lookup
type_index (FName: u32 index + u32 suffix) — Property type name
size (u32) — Data size in bytes
array_index (u32) — Array element index (IJ2 only, MK11 packs into u64 size)
[type-specific headers] — e.g., struct_type for StructProperty
data (size bytes) — Property value
| Type | Size | Description |
|---|---|---|
| StrProperty | 4 + N | Length-prefixed ASCII string |
| NameProperty | 8 | FName (u64 name table index) |
| IntProperty | variable | Signed integer (size from header) |
| DWordProperty | variable | Unsigned integer |
| QWordProperty | variable | Unsigned 64-bit integer |
| FloatProperty | 4 | IEEE 32-bit float |
| BoolProperty | 4 | u32 (0 or 1) |
| EnumProperty | variable | Integer mapped to enum name |
| ObjectProperty | variable | Signed object reference |
| ByteProperty | variable | Unsigned byte value |
| StructProperty | variable | Nested property container (recursive) |
| ArrayProperty | variable | Count + elements (type inferred from key name) |
| MapProperty | variable | Count + key-value pairs |
| Type | Size | Description |
|---|---|---|
| WeakUObjectHandleProperty | 16 | GUID weak object reference |
These struct types have fixed binary layouts instead of nested properties:
| Struct | Size | Fields |
|---|---|---|
| FGuid | 16 | A(u32), B(u16), C(u16), D(u8[8]) |
| FVector2D | 8 | X(f32), Y(f32) |
| FLinearColor | 16 | R(f32), G(f32), B(f32), A(f32) |
Since UE3 doesn't serialize array element types, they must be inferred from the property name:
mAssets, mCompletionUnlock, mCompletionUnlockAfterComplete, mItemHashes, TextureNames
BaseLayerNames
WorstCaseItems, Meshes
All other array keys — elements parsed as StructProperty until None sentinel.
mIntroTracks, mPresets
mColorPaletteTable
mCAPInfoTable, mHellboyHeadIndexTable, MD5HashToItemMap