Entities and groups
An Entity combines placement, components, bounds, layer actions and optional reset data. EntityGroup adds a member list to that same prefix. The structural census reads all 615,110 Entity and 56,837 EntityGroup records when bodies without length rules are retained between recognized headers. This measures framing coverage, not complete component interpretation. Observed
The common prefix is 01 03. In 830 bodies, 01 00 introduces an inline Hierarchy (u64 + type 0x788BAA0D + 64 bytes) and HierarchyHandle (u64 + type 0x709FB9D4 + u32 + 9 bytes) before the matrix. Observed
Little-endian. Mechanical framing is proven on the strict six-archive profile: 585,234 Entity bodies consumed exactly, 29,876 refused; 38,825 EntityGroup bodies consumed exactly, 18,012 refused. Metadata-derived meanings and newer link variants retain their separate confidence.
| Offset | Size | Type | Field | Confidence | Notes |
|---|---|---|---|---|---|
| 0x0 | 1 | u8 = 01 | tag | Proven | |
| 0x1 | 1 | u8 = 03 | tag | Proven | |
| 0x2 | 64 | matrix4 | placement | Observed | column-major; translation at 50..61; last row 0 0 0 1 |
| 0x42 | 4 | u32 | component count n | Proven | |
| 0x46 | C | bytes | components | Proven | n × the Component box, in order |
| 70+C | 43 | bytes | run | Proven | the Run box |
| 113+C | 4 | u32 | FakeCellIndex | Observed | Entity.FakeCellIndex (registry u32): 0xFFFFFFFF on 18,913 of 21,000, a cell index on 2,087 |
| 117+C | 4 | f32 | Scale | Observed | uniform (registry Scale) |
| 121+C | 40 | bytes | bounds | Observed | BoundingVolume, relative to the translation |
| 161+C | 8 | u64 = 0 | EntityDescriptor id | Proven | |
| 169+C | 4 | u32 = 0x60121A9E | EntityDescriptor type | Proven | |
| 173+C | 4 | u32 | DescriptorType | Observed | EntityDescriptor.DescriptorType (enum, table not found): 0 on 20,995 of 21,000 sampled, 1 on 3, 3 on 1 |
| 177+C | 4 | u32 | SubDescriptorType | Observed | EntityDescriptor.SubDescriptorType (u32): 0 on 20,999, 3 on 1 |
| 181+C | 4 | u32 | NetworkType | Observed | EntityDescriptor.NetworkType (enum, table not found): 0 on 15,214, 1 on 5,781, 2 on 1 |
| 185+C | 1 | u8 | IsPickableByPlayer | Observed | EntityDescriptor.IsPickableByPlayer (bool): 0 on all sampled |
| 186+C | 8 | u64 = 0 | DataLayerFilter id | Proven | |
| 194+C | 4 | u32 = 0xDB1D406E | DataLayerFilter type | Proven | |
| 198+C | 4 | u32 | action count k | Proven | |
| 202+C | 25·k | bytes | DataLayerActions | Proven | the DataLayerAction box: the event or season layers it belongs to |
| 202+C+25k | 4 | u32 | UIVisualsDisplayOrder link count M | Observed | M nine-byte links follow; offsets below assume M = 0. |
| 206+C+25k | var | bytes | tail | Observed | ResetData pointer: 03 null, or inline GameStateData. |
The count after DataLayer actions counts links: tag 00 or 01 plus u64. Nonzero counts shift ResetData beyond the zero-link offsets above. Observed
Little-endian. Mechanical framing is proven on the strict six-archive profile: 585,234 Entity bodies consumed exactly, 29,876 refused; 38,825 EntityGroup bodies consumed exactly, 18,012 refused. Metadata-derived meanings and newer link variants retain their separate confidence.
| Offset | Size | Type | Field | Confidence | Notes |
|---|---|---|---|---|---|
| 0x0 | 1 | u8 = 04 or 00 | tag | Proven | |
| 0x1 | 8 | u64 | id | Proven | |
| 0x9 | 4 | u32 | type | Proven | |
| 0xD | var | bytes | body | Proven | Type-specific grammar; no universal stored component length. |
Component headers normally use 04, with 00 on some UI and embedded objects. The registry identifies 291 Component-derived classes. Ids need not be consecutive and can use high-bit encodings; proximity to the Entity id is not a valid boundary rule. Component ids are 41-bit numbers, a few stored as bit63 | number << 20 | small index, and ids within one Entity differ by up to about 1.8e12. Because 00-tagged embedded objects inside payloads look like headers, counts and the first component’s tag are needed to tell them apart. Observed
135 component types comprising 105,315 instances remain opaque in the full structural census. Header-delimited coverage does not establish a sequential length rule for them. Observed
Little-endian. Mechanical framing is proven on the strict six-archive profile: 585,234 Entity bodies consumed exactly, 29,876 refused; 38,825 EntityGroup bodies consumed exactly, 18,012 refused. Metadata-derived meanings and newer link variants retain their separate confidence.
| Offset | Size | Type | Field | Confidence | Notes |
|---|---|---|---|---|---|
| 0x0 | E | bytes | Entity prefix | Proven | |
| E | 4 | u32 | member count C | Proven | |
| E+4 | 10C | references | members | Proven | |
| E+4+10C | 4 | u32 | link count M | Observed | |
| E+8+10C | 9M | links | member links | Observed | |
| E+8+10C+9M | 4 | u32 | GroupOptimizationState | Observed | 0 NotOptimized, 1 OptimizedAndEditable, 2 OptimizedAndSealed. |
In the USNAT group census, 16,743 groups own Visuals; 1,485 groups list 3,847 members. Members also occur in checked cell listings, so membership alone does not establish another placement or a parent transform. A second counted link list can follow the members before the final group-optimization word; the early zero-link formula 12 + 10 × members is not universal. Observed
See visual instances, flags, component grammars and DataLayers.
Retaining their bytes does not establish their behavior. An embedded Entity header alone does not prove an independently rendered placement. Unknown
The strict sequential profile consumes exactly 585,234 Entity and 38,825 EntityGroup bodies from the complete six-archive census, refusing 29,876 and 18,012 respectively. That proves the accepted framing only. The later header-delimited opaque-body census above does not establish those missing component grammars. Proven · accepted strict profile
Shaun White Skateboarding
Section titled “Shaun White Skateboarding”only in SWS
A level cell holds Entity objects that carry a world matrix, a list of components and a bounding volume. The layout has no layer actions and no 64-bit ids; it follows the Assassin’s Creed II generation. Inferred · from the AC2-profile reader fitting its data
Little-endian. Sequential decoding reaches the last byte for 3,316 of 6,861 entities of level 01 and 15,889 of 31,577 in all forges; the flag bytes through the tail verify on 6,758 of level 01.
| Offset | Size | Type | Field | Confidence | Notes |
|---|---|---|---|---|---|
| 0x0 | 1 | u8 | managed | Observed | |
| 0x1 | 4 | u32 | id | Observed | |
| 0x5 | 4 | u32 = 0x0984415E | class | Proven | CRC-32 of Entity |
| 0x9 | 64 | f32[16] | GlobalMatrix | Observed | |
| 0x49 | var | pointer | Hierarchy | Observed | null (tag 3) on 6,857 of the 6,861 entities of level 01, inline on 4 |
| 73+h | var | u32 + objects | Components | Observed | count, then for each a pointer tag 0 and the inline object |
| var | 34 | u8[34] | flag bytes | Unknown | named only by position |
| var | var | BoundingVolume | bounds | Observed | Min v3, Max v3, enum; world axes, relative to the origin |
| var | 12 | bytes | EntityDescriptor | Unknown | |
| var | 2 | u8[2] = 03 03 | null pointers | Observed | |
| var | var | GameStateData | ResetData | Observed | u32, then two byte arrays |
| var | 16 | bytes | tail | Unknown |
The matrix is applied as world = v_local * M, with the 16 f32 of M stored as rows 0 to 2 for the local X, Y and Z axes in world space and row 3 for the origin. Z is up. For 178 entities turned 90 degrees, the entity’s bounding volume equals the box of its mesh bounds transformed this way to within 0.5 m, where the transposed reading fits none. Observed · 178 rotated entities of level 01
The translations of the entities of one cell cluster in 32 m squares. Observed
Coverage is partial: components of classes with no known layout stop sequential decoding of the other 3,545 entities of level 01. The classes that stop the most are 0x5CDCA222 (661 entities; the skate guidance system), 0xE7E3A114 (524), 0x0873AE87 (300), 0x19D48AF6 (255) and 0xA0933257 (246). Observed · level 01
Components of the classes 0xE7E3A114, 0x0873AE87, 0x19D48AF6, 0xA0933257, 0x089D59CA, 0x734E7ADA and 0x51734E21, and classes such as Scene, Trajectory and TriggerComponent, do not decode field by field. The 34 flag bytes, the 12-byte descriptor and the 16-byte tail of the Entity are not interpreted. Unknown