Skeletons, skinning and ped components
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
| Offset | Size | Type | Field | Confidence | Notes |
|---|---|---|---|---|---|
| 0x0 | 32 | bytes | undescribed prefix | Unknown | |
| 0x20 | 8 | pointer | bone records | Proven | |
| 0x28 | 8 | pointer | inverse transforms | Proven | |
| 0x30 | 8 | pointer | local transforms | Proven | |
| 0x38 | 8 | pointer | parent indices | Proven | |
| 0x40 | 30 | bytes | undescribed fields | Unknown | |
| 0x5E | 2 | u16 | bone count | Proven | |
| 0x60 | 16 | bytes | undescribed tail | Unknown |
| Offset | Size | Type | Field | Confidence | Notes |
|---|---|---|---|---|---|
| 0x0 | 68 | bytes | undescribed fields | Unknown | |
| 0x44 | 2 | u16 | bone tag | Proven | |
| 0x46 | 10 | bytes | undescribed tail | Unknown |
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
Component peds
Section titled “Component peds”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
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
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