Skip to content

MeshShape collision

AnvilCollision and physicsApplies toRRSWS

MeshShape (0xB22B3E61) stores triangle collision separately from render Mesh resources. A byte-counted section run contains geometry and adjacency, followed by materials and bounds. Evidence includes two different-size fixtures, a 15,222-body section census and a 724-shape tree analysis. Observed

MeshShape body9 + L + tailRR44% known

Little-endian. Offsets are relative to this structure.

ProvenObservedSourcedInferredUnknownNot described
OffsetSizeTypeFieldConfidenceNotes
0x01u8 = 01ManagedObject byteUnknownStored bytes; meaning is not established.
0x14u32UserCategoryObservedObjectShape.UserCategory (registry enum UserResourceCategory, a u32, the base class's field, stored first): 0 (389), 63 (239), 33 (96) of 724 sampled; the same enum as the last u32 of a Mesh. Enumerators: 0 _Unknown, 33 ENV_Prop, 63 ENV_Procedural.
0x54u32E37A7DC2 length LUnknownStored bytes; meaning is not established.
0x9LbytesE37A7DC2 (the sections)UnknownStored bytes; meaning is not established.
9+LvarbytestailObservedthe Tail box
Sectionsize bytesRR100% known

Little-endian. Section framing, face/material counts and tail buffers read across all 25,162 MeshShapes of the six installed forges with no refusals. Tree decoding semantics remain scoped to 724 sampled shapes.

ProvenObservedSourcedInferredUnknownNot described
OffsetSizeTypeFieldConfidenceNotes
0x02u16section typeProven
0x22u16 = 0xECD7markerProven
0x44i32sizeProvenits 8 header bytes included
0x8size-8bytespayloadProven
Sections in order (payloads)varRR

Little-endian. Offsets are relative to this structure.

ProvenObservedSourcedInferredUnknownNot described
OffsetSizeTypeFieldConfidenceNotes
0x0varchar[n]0x0201 descriptorObservedNUL-terminated 'Name(0x<id>) MeshDescriptor'
var8bytes0x0301UnknownStored bytes; meaning is not established.
var12u32·30x1EEE countsObservedV, F, X
var12·Vf32·3V0x1EEF positionsObserved
var6·Fu16·3F0x1EF0 facesObservedposition indices
var2·Fu16·F0x1EF1 per-face polygon idsInferredu16 per face, from 2 up to F+1 (724 of 724 shapes). Faces that share an id are coplanar in all but 27 of 37,036 shared groups: the id numbers the planar polygon a face belongs to (a reading; behaves as face-group ids)
var12·Fu32·3F0x1EF2 face edgesObservededge ids
var4·Xu16·2X0x1EF3 edge facesObserved0xFFFF where an edge has one face
var28f32·6 + u320x1EFA bounds and node countObservedsize (x, y, z), then minimum (x, y, z), then the node count F-1. The minimum equals the vertices' minimum, and the size is at least the vertices' extent (equal within 1e-3 relative), on 724 of 724 shapes; the u32 equals F-1 on all 724 and is the number of tree nodes in 0x1EF9
var11·(F-1)bytes0x1EF9 tree nodesObservedNode 0 is the root; every node 1..F-2 is the child of exactly one node and every face 0..F-1 is a leaf of exactly one node, on all 724 shapes. The 6 quantised bytes are not decoded
Tree node (11 bytes, ×(F-1), section 0x1EF9)11 bytesRR100% known

Little-endian. Offsets are relative to this structure.

ProvenObservedSourcedInferredUnknownNot described
OffsetSizeTypeFieldConfidenceNotes
0x06u8·6child insetsObservedbyte k (k = 0..5: minimum x, y, z, maximum x, y, z) is the inset, in 255ths of the node's decoded extent on that axis, of the child named by flag bit 2+k; 0 at the root on the shapes read
0x62u16child AObserveda face id if flag bit 0 is set, else a node id
0x82u16child BObserveda face id if flag bit 1 is set, else a node id
0xA1u8flagsObservedbit 0: child A is a face (else a node); bit 1: child B is a face
Tail42 + m + 10n bytesRR100% known

Little-endian. Section framing, face/material counts and tail buffers read across all 25,162 MeshShapes of the six installed forges with no refusals. Tree decoding semantics remain scoped to 724 sampled shapes.

ProvenObservedSourcedInferredUnknownNot described
OffsetSizeTypeFieldConfidenceNotes
0x01u8OneCollisionMaterialOnlyProvenMeshShape.OneCollisionMaterialOnly (registry bool): 1 on 668 of 724 sampled (one material), 0 on 56 (a material per face)
0x11u8MaterialUniqeIndexProvenMeshShape.MaterialUniqeIndex (registry spelling, a byte): 0 on 724 of 724 sampled
0x24u32IndicesMaterialData count mProven0 (kind 1) or F (kind 0) (MeshShape.IndicesMaterialData, an array of bytes)
0x6mu8·mIndicesMaterialDataProvenindex into the references, covering 0..n-1
6+m4u32TriangleMaterialData count nProven
10+m10·nref·nTriangleMaterialDataProvenevery one a CollisionMaterial 0x74F7311D (registry array of CollisionMaterial)
10+m+10n16vec4MinLocalAABBoxProventhe positions' box; w 1.0 (registry vec4)
26+m+10n16vec4MaxLocalAABBoxProvenw 1.0 (registry vec4)

Across the 724-shape tree sample, root node zero reaches every node and face exactly once; all non-root nodes have one parent. The six inset bytes describe child-box sides in 255ths of the parent’s extent, and flag bits 2–7 select the inset child for each side. Observed

Shared ids in 0x1EF1 group coplanar triangles in all but 27 of 37,036 shared-id groups. Interpreting the ids as polygon ids is supported by that fit rather than a declaration. Inferred

OneCollisionMaterialOnly selects a single surface; otherwise IndicesMaterialData has one byte per face indexing TriangleMaterialData. The spelling MaterialUniqeIndex follows registry metadata. Observed

What explains the exceptional shared ids?

Noncoplanar groups prevent a universal polygon-id invariant. The eight zero bytes of section 0x0301 also have no established meaning. Unknown

The complete six-archive section reader accepts all 25,162 MeshShape entries; the more detailed tree and polygon-id meanings above remain scoped to the 724-shape sample. Every section and tail is byte-accounted, without refusals. Proven · framing only

only in SWS

Collision geometry is a MeshShape object (0xB22B3E61) with explicit triangles, held apart from the render meshes. The vertices are stored as float4 with a zero fourth component, the triangle indices as u16 triples, one surface byte per triangle, and an opaque Havok MOPP acceleration blob that needs no Havok packfile to read the triangles. The shape is in its own local frame, Z up. Observed · SWS[level 01]

MeshShape fields (Shaun White Skateboarding)variableSWS

Little-endian. Fields in stored order after the object prefix; exact on 1,561 of 1,561 shapes read.

ProvenObservedSourcedInferredUnknownNot described
OffsetSizeTypeFieldConfidenceNotes
0x04 + 16nu32 + f32[4][n]VerticesObservedw is 0
var4 + mu32 + bytesMoppCodeObservedthe Havok MOPP blob, kept opaque
var16f32[4]MoppOffsetAndScaleObserved
var4 + 6tu32 + u16[3][t]IndicesTrianglesObserved
var4 + tu32 + u8[t]IndicesMaterialObservedone index per triangle into Materials
var4 + 4su32 + u32[s]MaterialsObservedbare ids of collision surface objects
varvarCollisionFilterInfofilterObservedan inline box, class 0x43EF99C2
var4u32 = 5MoppCodeVersionNumberObserved
var32f32[4][2]local boundsObservedminimum and maximum

The Havok SDK that produced the MOPP blob is unknown. The data is neither a packfile nor a tagfile. Observed

Other collision shapes occur in cells: capsule, sphere, box, a convex shape (BarrelShape), a list shape (ListShape, 0x86EBFD8D, whose body ends with a flag byte) and a MultiMeshShape (0x9A503477). Observed

A prop’s collision is an InertComponent (0x0E5A450A, 150 bytes in 1,561 cases) on its entity: the component base, a damage enum, an inline RigidBody (0x228F402A: a CollisionFilterInfo box with layer and part, the shape id, mass, linear and angular damping, four flag bytes and a 16-float local inertia tensor) and a walkability enum, then 12 bytes. The managed byte of the inline body can be 0. RigidBody.Shape is a bare id; level 01 reaches 1,152 shapes inside the cell and 409 in other entries. The inertia tensor is not the placement. Observed · level 01

A MultiInertComponent (0x8BBEEE57) holds an inline MultiMeshShape of parallel arrays: five-byte entity handles (tag 0 and a u32) and bare shape ids. The container itself carries an identity matrix in the cell examined; each pair is placed at its contained entity’s matrix. The pairing matched on a cell of ten children: the six shapes that resolve locally have exactly the names of their entity’s Visual meshes. Observed · one cell of ten children

Level 01’s collision placements number 2,074, of 1,194 unique shape objects with 49 distinct surface ids, and every shape and entity reference resolves. Observed · level 01

Collision belongs to an entity through a component (an InertComponent, a MultiInertComponent, or the class of the kickers below); an entity with only a Visual component is drawn and has nothing to stand on. Observed · SWS Large drawn areas are of that kind: level 03’s background hills (03_Island_BG_Ground_01 to _05b) are Visual-only, except _04b, whose collision is 16 flat triangles; level 06’s 06_Ground_Construction_01 covers about 79,000 m² of upward-facing render with no collision; SW_RoadB and SW_RoadC have none either. Observed · SWS Level 03 has no heightfield or terrain class among the 73 object classes of its forge, and of its 276 distinct MeshShape ids 273 are placed; the other three belong to props. Observed · SWS[level 03]

Sampling every upward-facing render surface on a 2 m grid against the placed collision (a render sample counts as covered when collision lies within 1.2 m) finds uncovered ground in every level. The counts include roofs, ceilings and background cliffs, so they bound the walkable gaps from above. Observed · SWS

Level Collision triangles Upward render samples within 12 m of collision Uncovered Confidence
01 123,102 35,219 10,244 Observed · SWS
02 106,174 57,257 21,756 Observed · SWS
03 96,361 16,055 5,726 Observed · SWS
04_Stronghold 15,332 5,120 1,904 Observed · SWS
05 134,172 32,565 15,299 Observed · SWS
SW 44,347 4,519 848 Observed · SWS

Kickers, ramp boxes and shaping grinds (*_InfGP_Kicker_*, *_RampBox*, ShapingGrind_*) carry a component of class 0x0873AE87 instead of an InertComponent. Observed · SWS That their collision is a free-form hull of class 0xC3120087 is a guess. Inferred · SWS

Level 03 places 19 00_OutOfBound_Air_Trig_* slabs (8 × 1 × 10 m) along its district edges. Observed · SWS[level 03] Whether they respawn a player who leaves the collision is not established. Unknown

Can the player reach the Visual-only ground?

Whether the game keeps the player off the uncollided hills and roads, through the out-of-bound triggers or otherwise, is not established.