XAnim dynamic-bone properties
Asset format index · Animation function evidence
Replay 1.20 layout scope
Layout and serialization statements on this page refer only to Replay 1.20 unless explicitly labeled as Game-Test cross-reference provenance. Source names help identify analogous functions; source UDT sizes, offsets, strides, and dispatch values are not Replay layout evidence.
Evidence status
The dynamic-bone property loader and the XAnimCurve pointer-loader role are cross-referenced; animation data layout remains unknown. Runtime suit-animation functions are separate from the fastfile parser.
Observed format facts
Replay ID 18947 is q_Load_XAnimDynamicBoneNoiseProperties at RVA 0xDD2B20; its Replay caller role/body ordering supports a dynamic-bone property loader child. Replay SQLite size is 190 while Replay .pdata spans 197 bytes, with the final tail instruction outside the stored size. The q_ prefix remains because caller consensus and target extent differ. The Game-Test PDB symbol is cited by the report for function-name cross-reference only; source extent is not a Replay format fact.
The Replay entry observes DBStreamStart in RCX and passes it to the first stream helper. This is a call ABI observation for that build, not a copied source prototype. No child record widths or alignment recipe are established by the linked report.
Replay ID 19197 q_Load_XAnimCurvePtr at RVA 0xDD9F60 and ID 19756 q_Load_ClothAssetPtr at RVA 0xDFEEE0 have near-identical generated pointer-loader bodies. The paired Load_XAssetHeader routes separate them: case 0x53 calls ID 19197, which reaches the named Load_XAnimCurveAsset root; case 0x57 calls ID 19756, which reaches the named Load_ClothAssetAsset root. Keep both q-prefixed names because their caller census is incomplete and a mapped dynamic-bone-noise parent has a conflicting child edge: source calls Load_XAnimCurvePtr, while Replay ID 18947 calls ID 19756. That exception does not override the independent dispatch/root evidence. The two Replay rows each have SQLite size 239 bytes and a matching 239-byte chained PDATA span; source pointer loaders are 246 bytes. These are code extents, not animation record sizes.
Format boundary
There is no complete XAnim dynamic-bone record schema, serialized member map, or runtime animation consumer path here. Do not infer it from function names or suit-animation helper signatures. Preserve the size/PDATA discrepancy when using this function as a parser anchor.
Local evidence
- XAnim dynamic-bone noise loader report
- instruction crosswalk
- applied name manifest
- XAnimCurvePtr versus Cloth pointer-loader clone review