Clip dictionaries and animation channels
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
Animation and sequence records
Section titled “Animation and sequence records”| Offset | Size | Type | Field | Confidence | Notes |
|---|---|---|---|---|---|
| 0x0 | 16 | bytes | resource base | Sourced | |
| 0x10 | 2 | bytes | unknown flags | Unknown | |
| 0x12 | 2 | bytes | unknown | Unknown | |
| 0x14 | 2 | u16 | frame count | Proven | |
| 0x16 | 2 | u16 | sequence frame limit | Proven | |
| 0x18 | 4 | f32 | duration | Proven | |
| 0x1C | 4 | u32 | unknown | Unknown | |
| 0x20 | 24 | bytes | unknown | Unknown | |
| 0x38 | 4 | u32 | maximum sequence block | Sourced | |
| 0x3C | 4 | u32 | usage count | Sourced | |
| 0x40 | 8 | pointer | sequence pointer array | Proven | |
| 0x48 | 2 | u16 | sequence count | Proven | |
| 0x4A | 2 | u16 | sequence capacity | Proven | |
| 0x4C | 4 | bytes | unknown | Unknown | |
| 0x50 | 8 | pointer | bone-track IDs | Proven | |
| 0x58 | 2 | u16 | bone-track count | Proven | |
| 0x5A | 2 | u16 | bone-track capacity | Proven | |
| 0x5C | 4 | bytes | unknown | Unknown |
DataLength bytes follow the header.
| Offset | Size | Type | Field | Confidence | Notes |
|---|---|---|---|---|---|
| 0x0 | 4 | u32 | sequence ID | Sourced | |
| 0x4 | 4 | u32 | data length | Proven | |
| 0x8 | 4 | u32 | unknown zero word | Unknown | zero in decoded corpus |
| 0xC | 4 | u32 | frame-data offset | Proven | relative to data start |
| 0x10 | 4 | u32 | root-motion-reference offset | Proven | relative to header start; subtract 32 for data-relative offset |
| 0x14 | 2 | u16 | unknown zero word | Unknown | zero in decoded corpus |
| 0x16 | 2 | u16 | sequence frame count | Proven | |
| 0x18 | 2 | u16 | bytes per frame | Proven | |
| 0x1A | 2 | u16 | indirect-quantize integer count | Sourced | |
| 0x1C | 2 | u16 | quantize value bits | Sourced | |
| 0x1E | 1 | u8 | linear-channel chunk size | Proven | |
| 0x1F | 1 | u8 | root-motion-reference counts | Proven | high nibble position; low nibble rotation |
| Offset | Size | Type | Field | Confidence | Notes |
|---|---|---|---|---|---|
| 0x0 | 2 | u16 | bone tag | Proven | |
| 0x2 | 1 | u8 | value type | Sourced | 0 three-component vector, 1 quaternion, 2 float, per ragekit's count over 2.3 million tracks; not checked here |
| 0x3 | 1 | u8 | track number | Proven |
Channels
Section titled “Channels”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
Tracks and time
Section titled “Tracks and time”| 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
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