Resource headers and references
A resource has a type hash and a 64-bit ClassID. The outer type id and extension word after ClassID agree on the checked resources; type ids are CRC-32 hashes of class-name bytes, for example Mesh → 0x415D9568. A type hash identifies a class, not an individual resource. Observed · RR
Breakpoint also resolves resource identity by ClassID. An AnvilToolkit extraction filename’s leading number is a positional label, and a decoded data container can hold several resource records. Sourced · GRB · Breakpoint format reference
Little-endian. Offsets are relative to this structure.
| Offset | Size | Type | Field | Confidence | Notes |
|---|---|---|---|---|---|
| 0x0 | 4 | u32 | type id | Observed | |
| 0x4 | 4 | u32 | payload length P | Observed | |
| 0x8 | 4 | u32 | name length N | Observed | |
| 0xC | N | char[] | name | Observed | |
| 12+N | H | bytes | file header | Observed | H = 1 for tag 0; H = 8 + 12R for tag 1. |
| 12+N+H | 8 | u64 | ClassID | Observed | |
| 20+N+H | 4 | u32 | extension | Observed | Equals the type id on checked resources. |
| 24+N+H | P-12 | bytes | body | Observed |
Payload length includes ClassID, extension and body but excludes the file header. Missing that header shifts every subsequent record in a multi-resource container. Observed · RR Sourced · GRB · Breakpoint format reference
Little-endian. Offsets are relative to this structure.
| Offset | Size | Type | Field | Confidence | Notes |
|---|---|---|---|---|---|
| 0x0 | 1 | u8 = 1 | tag | Observed | |
| 0x1 | 3 | bytes | unknown | Unknown | 02 00 00. |
| 0x4 | 4 | u32 | row count R | Observed | |
| 0x8 | 12R | bytes | rows | Unknown | Twelve-byte rows; meanings not established. |
The extended header occurs on all 9,087 clips in the five-archive Animation enumeration (WhiteRoom patch excluded), the AnimTrackBuiltinTracksTable (0x46A37798) and three ProxyTextures resources: 9,091 resources of the 1.3 million entries. The one stored AnimTrackBuiltinTracksTable is empty, so a table mapping track tags to classes is not stored in the data. Observed · RR
The ordinary resource envelope (payload length, name, ClassID and extension) is validated as an exact-end record for all 147,289 Mesh and 25,162 MeshShape entries across all six installed forges, with no refusals in those populations. Extended-header rows and their Animation population remain separately scoped above. Proven · ordinary envelope
Little-endian. All 48,862 LODSelector, 13,579 Material and 10,027 TextureSet resources across the six installed forges read without refusals; resource-reference tag/id framing is covered. Mode semantics remain unknown.
| Offset | Size | Type | Field | Confidence | Notes |
|---|---|---|---|---|---|
| 0x0 | 1 | u8 = 01 | tag | Proven | 03 and nine zero bytes: refers to nothing |
| 0x1 | 1 | u8 | mode | Unknown | 1 on every entry read |
| 0x2 | 8 | u64 | class id | Proven | the resource referred to |
Ten-byte references are measured across LODSelector, Material and TextureSet resources: 01, mode, u64 ClassID; or 03 and nine zero bytes for null. This is not a universal pointer grammar: an instance’s 03 01 + id combines a null pointer and separate link. Observed · RR
Owned and embedded objects generally store u64 object id + u32 type + body. Pointers add a tag: 03 null, 00 or 04 present object, 02 + u64 back-reference. These forms are measured in entity and skeleton bodies. Observed · RR
Modes 1 and 4 occur, but their complete runtime meaning is not established. Unknown · RR
Shaun White Skateboarding
Section titled “Shaun White Skateboarding”only in SWS
An entry of Shaun White Skateboarding does not hold one resource with a type, name and 64-bit ClassID header. In a level cell the first data block is an object directory and the second holds that many objects back to back. Object ids are 32 bits. Observed · SWS[all 1,624 cell entries]
Little-endian. Exact for 45,032 of 45,032 objects of the 253 cells of level 01 and for the 194,062 objects of all 1,624 cell entries; the objects of the second block add up to its length.
| Offset | Size | Type | Field | Confidence | Notes |
|---|---|---|---|---|---|
| 0x0 | 2 | u16 | object count N | Observed | |
| 0x2 | 8·N | u32[2][N] | objects | Observed | per object: its id, then the byte size of its header and body together |
Little-endian. Header plus declared body size equals the directory size for every class except the two block-allocator classes below.
| Offset | Size | Type | Field | Confidence | Notes |
|---|---|---|---|---|---|
| 0x0 | 4 | u32 | class | Observed | CRC-32 of the class name |
| 0x4 | 4 | u32 | declared body size | Observed | |
| 0x8 | 4 | u32 | name length L | Observed | |
| 0xC | L | char[] | name | Observed | the object's name, for example a mesh or entity name |
| 12+L | 1 | u8 | NUL | Observed | absent on Animation and NavMeshManager |
The first object of a cell is its GridCellDataBlock, and its id is the entry’s index id. Observed
Animation (0x0FA3067F) and NavMeshManager (0x0B4CE0E0) are block-allocator classes: the byte after the name is 1 instead of the NUL, and the bytes after it begin 02 00 00 and a u32 row count k (read with the 1 as one word, 0x201, then k). Observed
On an Animation the table comes first: the 02 00 00, the u32 k and k rows of 12 bytes, then the managed object. The declared body size counts from the byte after the 1 but omits the table, so the object runs exactly 7 + 12·k bytes past the declared body, to the end of its directory size. This holds on all 80,466 Animation objects of the install; the Animation layout reads from the table’s first byte. Proven · SWS[every Animation of the install] The same arrangement on NavMeshManager is not checked. Unknown
The body of a class derived from ManagedObject begins [managed u8][id u32][class u32] and then the fields. The id equals the directory id and the class equals the header class on every top-level object; the managed byte is 0 or 1 (1 on 5,581 and 0 on 1,562 decoded components). Classes that are not managed objects start [id][class]. Observed · level 01
The same id repeats across cells of one forge: the 45,032 objects of level 01 carry 23,961 distinct ids. Repeats are byte-identical for SoundBao, TextureMap, TextureMapSpec, Animation and MeshShape objects and for the material class, but not for Mesh, where 1,445 repeats differ. Observed · level 01
| Field kind | Stored form | Confidence |
|---|---|---|
| Handle or reference | One bare u32 id |
Observed |
| Object pointer | u8 tag: 0 object inline, 1 external with u32 id, 2 link with u32 id, 3 null |
Observed |
| Array | u32 count then the elements; byte arrays are raw |
Observed |
| String | u32 length, the bytes, a NUL |
Observed |
| Matrix | 16 f32 |
Observed |
Riders Republic uses ten-byte references with 64-bit ids instead. Observed
Every component starts with an inline non-managed object of class 0x3C6C77C8: id, class, a kind byte (0xFF on 5,880 Visuals of level 01, 0xFE on 1,296) and a target id. The meaning of 0xFE is unknown. Observed
An entry named *_DataBlock is a level cell (253 in DataPC_01, 1,624 in all forges). Of the 17,905 ids the cells of level 01 list, 12,585 are objects of the same cell and 5,320 belong to other entries; all resolve. Materials, textures, sounds, the per-instance lighting objects and most meshes are reached only by reference. Observed · level 01