Skip to content

Clip dictionaries and animation channels

RAGEAnimationApplies toGTA V

YCD files are RSC7 version 46 clip dictionaries. They contain animations keyed by hash and named clips that play one animation or a list of animation windows with playback rates. Animation and clip maps use hash buckets with chained collision entries. Proven

The full-install comparison covers 25,961 unique archive-entry paths and 267,536 animations. Counts are over dictionaries, including separate archived copies, rather than distinct animation hashes or raw dump rows. Proven · unique-path recount

Every animation in that corpus decodes with strict sequence boundaries: parameter bytes end at frame data, channel lists end at root-motion references, and those references end at the sequence’s data length. Independent CodeWalker comparison checks channel streams bit for bit; reconstructed cached-quaternion vectors use a separate tolerance comparison where full vector dumps are available. Proven · all dictionaries in the corpus

Animation96 bytes33% known
ProvenObservedSourcedInferredUnknownNot described
OffsetSizeTypeFieldConfidenceNotes
0x016bytesresource baseSourced
0x102bytesunknown flagsUnknown
0x122bytesunknownUnknown
0x142u16frame countProven
0x162u16sequence frame limitProven
0x184f32durationProven
0x1C4u32unknownUnknown
0x2024bytesunknownUnknown
0x384u32maximum sequence blockSourced
0x3C4u32usage countSourced
0x408pointersequence pointer arrayProven
0x482u16sequence countProven
0x4A2u16sequence capacityProven
0x4C4bytesunknownUnknown
0x508pointerbone-track IDsProven
0x582u16bone-track countProven
0x5A2u16bone-track capacityProven
0x5C4bytesunknownUnknown
Sequence header32 bytes56% known

DataLength bytes follow the header.

ProvenObservedSourcedInferredUnknownNot described
OffsetSizeTypeFieldConfidenceNotes
0x04u32sequence IDSourced
0x44u32data lengthProven
0x84u32unknown zero wordUnknownzero in decoded corpus
0xC4u32frame-data offsetProvenrelative to data start
0x104u32root-motion-reference offsetProvenrelative to header start; subtract 32 for data-relative offset
0x142u16unknown zero wordUnknownzero in decoded corpus
0x162u16sequence frame countProven
0x182u16bytes per frameProven
0x1A2u16indirect-quantize integer countSourced
0x1C2u16quantize value bitsSourced
0x1E1u8linear-channel chunk sizeProven
0x1F1u8root-motion-reference countsProvenhigh nibble position; low nibble rotation
Animation bone-track ID4 bytes75% known
ProvenObservedSourcedInferredUnknownNot described
OffsetSizeTypeFieldConfidenceNotes
0x02u16bone tagProven
0x21u8value typeSourced0 three-component vector, 1 quaternion, 2 float, per ragekit's count over 2.3 million tracks; not checked here
0x31u8track numberProven

Sequence data orders channel parameters first, then fixed-size frame records, then nine channel-list counts and their lists, then six-byte root-motion references. Frame bits are read least-significant bit first. Each list word is trackIndex << 2 | componentIndex; each type’s word list pads to a multiple of four words. Proven · strict corpus decode

Type Meaning Parameters / frame data Confidence
0 Static quaternion Three floats; reconstruct remaining unit component Proven
1 Static vector Three floats Proven
2 Static float One float Proven
3 Raw float 32 frame bits Proven
4 Quantized float Bit width, quantum, offset; integer*quantum + offset Proven
5 Indirect quantized float Frame index into a stored quantized-value table Proven
6 Linear chunks Start values and second-order deltas; no per-frame-record bits Proven
7 Cached quaternion 1 Reconstruct omitted component from three channels Proven
8 Cached quaternion 2 Second cached-quaternion form Proven

A linear channel stores chunk offsets, start values and signed deltas. The packed count bytes specify the widths for offsets, starts and low delta bits. The high delta part counts zero bits before a one; a nonzero delta has a sign bit. A running increment accumulates the deltas and advances the reconstructed value. Proven · strict corpus decode

Cached quaternion reconstruction supplies the missing unit component from the first three channels, puts it in the component position named by the channel word, then normalizes the resulting track quaternion. Proven CodeWalker’s reconstruction (Clip.cs) does not normalize; the two differ only when the three stored components’ squares sum to more than 1. Sourced · CodeWalker

Track number Interpretation Confidence
0 Bone local translation Sourced · CodeWalker
1 Bone local rotation Sourced · CodeWalker
2 Bone local scale Sourced · CodeWalker
5 / 6 Mover translation / rotation Sourced · CodeWalker
Others, including 22, 24–26 and 134 Numeric tracks with unresolved meanings Unknown

Sequence blocks span sequenceFrameLimit + 1 frames and overlap by one frame. The documented frame-time interpretation is i * duration / (frameCount - 1), placing the final frame at duration rather than one frame interval before it. Observed

Sampled stored rotation tracks fit skeleton rest rotations more closely as stored than inverted: a median difference of 17° as stored against 62° inverted. Ordinary map entity quaternion inversion therefore does not establish a rule to invert animation rotations. Observed

How do tags, properties and unnamed tracks affect playback?

Clip tags and properties exist alongside the decoded playback windows. Their full semantics, unnamed track roles and the animation’s intrinsic looping policy remain unresolved. Unknown