Skip to content

Skeletons, skinning and ped components

RAGEGeometryApplies toGTA V

Drawables can carry a skeleton with per-bone local transforms, parent indices, tags and stored inverse transforms. A geometry’s blend indices refer through its bone palette; palette entries are bone tags rather than necessarily the skeleton’s array indices. Proven CodeWalker, Sollumz, ragekit and fivefury all treat palette entries as bone indices; they derive from CodeWalker, so their agreement is one source. Sourced · CodeWalker

Skeleton header fields below are read wherever present across every accepted version-159 YDR/YDD and version-171 YFT in the resource census, including fragment drawables. Fifteen other-version YDR copies are excluded. This establishes stored skeleton structure, while the component-variation and pose examples below retain their own measurement scope. Proven · version-filtered full-install census

Skeleton header112 bytes30% known
ProvenObservedSourcedInferredUnknownNot described
OffsetSizeTypeFieldConfidenceNotes
0x032bytesundescribed prefixUnknown
0x208pointerbone recordsProven
0x288pointerinverse transformsProven
0x308pointerlocal transformsProven
0x388pointerparent indicesProven
0x4030bytesundescribed fieldsUnknown
0x5E2u16bone countProven
0x6016bytesundescribed tailUnknown
Bone record80 bytes3% known
ProvenObservedSourcedInferredUnknownNot described
OffsetSizeTypeFieldConfidenceNotes
0x068bytesundescribed fieldsUnknown
0x442u16bone tagProven
0x4610bytesundescribed tailUnknown

Local transforms occupy 64 bytes each as row-vector 4×4 matrices with an unused fourth column. Parent indices are 16-bit signed values; -1 marks a root. Composing a bone’s local transform with its ancestors places it in drawable space. Proven

Four unsigned-byte indices and four normalized unsigned-byte weights supply the sampled BLENDINDICES0 and BLENDWEIGHT0 skin streams. Stored inverse transforms belong to the skeleton; replacing them with assumed identity transforms loses the authored bind relationship. Observed

Some fragment poses are singular: the inspected corpus identifies all-zero poses on z_z_alien, z_z_fred, z_z_fred_large, z_z_wilma, z_z_wilma_large and cs_bradcadaver. A blanket assumption that every fragment pose is an invertible rotation is therefore invalid. Observed Every other posed fragment’s pose is a rotation to within 1e-4, and none in the install is mirrored. Observed

CPedVariationInfo is META data in a component ped’s .ymt, beside its .ydd and .yft. It describes available component slots and each slot’s drawable and texture variations. Observed

Slot index Identifier Confidence
0 head Observed
1 berd Observed
2 hair Observed
3 uppr Observed
4 lowr Observed
5 hand Observed
6 feet Observed
7 teef Observed
8 accs Observed
9 task Observed
10 decl Observed
11 jbib Observed

Dictionary entry names follow <slot>_<three-digit-index>_<suffix>, hashed for lookup. Suffixes r, u and m occur; restricting lookup to the first two loses some upper- and lower-body entries. Observed

Animation tracks also identify bones by tag. The available variation set does not by itself establish the component combination selected by gameplay. Observed

Are bone-palette entries bone tags or bone indices?

This page reads them as tags; the community readers read them as indices. The two readings agree wherever a skeleton’s tags equal its indices. Palette entries at or above a skeleton’s bone count, and whether those equal a bone’s tag, would decide it over the skinned geometries of the install. Unknown

How do gameplay selections resolve all ped variation constraints?

Selection sets, component metadata and prop information exist, but the complete selection policy is not established by the component and dictionary linkage described here. Unknown