Animation Collection
AnimationCollection | |
---|---|
Resource names | *_ANIM *Vehicle ID, e.g. PUSMB01 |
Type ID | 0x51 |
Category | Generic |
Memory distribution |
Main Memory only |
Editor available? |
No |
Animation collections are used for character animations on bikes. Each bike's VEH_*_AT.BIN bundle contains one animation collection.
Structures
To do: In-game testing has not yet been conducted. It is required to understand the data. Many field descriptions are currently guesswork. |
Header
32-bit
Offset | Length | Type | Name | Description | Comments |
---|---|---|---|---|---|
0x0 | 0x2 | uint16_t | ? | Version number | 1 |
0x2 | 0x2 | uint16_t | ? | Number of animations | Always 32 |
0x4 | 0x4 | uint32_t | ? | Resource size | |
0x8 | 0x4 | ?** | ? | Animation data | See animation |
0xC | 0x4 | ?* | ? | Joint data | See joint data |
64-bit
Offset | Length | Type | Name | Description | Comments |
---|---|---|---|---|---|
0x0 | 0x2 | uint16_t | ? | Version number | 1 |
0x2 | 0x2 | uint16_t | ? | Number of animations | Always 32 |
0x4 | 0x4 | uint32_t | ? | Resource size | |
0x8 | 0x8 | ?** | ? | Animation data | See animation |
0x10 | 0x8 | ?* | ? | Joint data | See joint data |
Animation
Because the pointers in this structure are only set at runtime, the data is read sequentially after the end of the structure in the following order:
- Vectors
- Matrices
- Packed data
32-bit
Offset | Length | Type | Name | Description | Comments |
---|---|---|---|---|---|
0x0 | 0x4 | uint32_t | ? | Number of keyframes | |
0x4 | 0x4 | uint32_t | ? | Number of joints | Always 45 |
0x8 | 0x4 | uint32_t | ? | Packed joint data size | |
0xC | 0x4 | uint32_t | ? | Combined size of all joint data for one keyframe | Equal to packed joint data size * number of joints |
0x10 | 0x4 | uint32_t | ? | Matrix data size | |
0x14 | 0x4 | uint32_t | ? | Total size of this structure | |
0x18 | 0x4 | uint32_t | ? | Always 1 | |
0x1C | 0x4 | float | ? | Animation rate | Keyframes per second |
0x20 | 0x4 | uint32_t | ? | 0, 5 or 10 in samples. No bearing on data? | |
0x24 | 0x4 | Vector4* | ? | Positions | Set at runtime |
0x28 | 0x4 | Matrix44* | ? | Movement? | Set at runtime |
0x2C | 0x4 | uint32_t* | ? | Packed joint data | Coordinates? Movement changes? Set at runtime |
64-bit
Offset | Length | Type | Name | Description | Comments |
---|---|---|---|---|---|
0x0 | 0x4 | uint32_t | ? | Number of keyframes | |
0x4 | 0x4 | uint32_t | ? | Number of joints | Always 45 |
0x8 | 0x4 | uint32_t | ? | Packed joint data size | |
0xC | 0x4 | uint32_t | ? | Combined size of all joint data for one keyframe | Equal to packed joint data size * number of joints |
0x10 | 0x4 | uint32_t | ? | Matrix data size | |
0x14 | 0x4 | uint32_t | ? | Total size of this structure | |
0x18 | 0x4 | uint32_t | ? | Always 1 | |
0x1C | 0x4 | float | ? | Animation rate | Keyframes per second |
0x20 | 0x4 | uint32_t | ? | 0, 5 or 10. No bearing on data? | |
0x24 | 0x4 | Padding | |||
0x28 | 0x8 | Vector4* | ? | Positions | Set at runtime |
0x30 | 0x8 | Matrix44* | ? | Movement? | Set at runtime |
0x38 | 0x8 | uint32_t* | ? | Packed joint data | Coordinates? Movement changes? Set at runtime |
Joint data
Because the pointers in this structure are only set at runtime, the data is read sequentially after the end of the structure in the following order:
- Joint info
- Special indices
- Joint IDs
32-bit
Offset | Length | Type | Name | Description | Comments |
---|---|---|---|---|---|
0x0 | 0x4 | ?* | ? | Joint info | See joint info Set at runtime |
0x4 | 0x4 | uint32_t* | ? | Special indices | Always matches the following:
Set at runtime |
0x8 | 0x4 | CgsID* | ? | Joint IDs | Examples include MAN_HIPS, MANL_FEMUR_J, and MANR_WRIST_J. "MANL" and "MANR" refer to the left and right sides of the character. "_J" indicates a joint. Set at runtime |
0xC | 0x2 | uint16_t | ? | Number of joints | Always 45 |
0xE | 0x2 | uint16_t | ? | Number of special indices | Always 4 |
64-bit
Offset | Length | Type | Name | Description | Comments |
---|---|---|---|---|---|
0x0 | 0x8 | ?* | ? | Joint info | See joint info Set at runtime |
0x8 | 0x8 | uint32_t* | ? | Special indices | Always matches the following:
Set at runtime |
0x10 | 0x8 | CgsID* | ? | Joint IDs | Examples include MAN_HIPS, MANL_FEMUR_J, and MANR_WRIST_J. "MANL" and "MANR" refer to the left and right sides of the character. "_J" indicates a joint. Set at runtime |
0x18 | 0x2 | uint16_t | ? | Number of joints | Always 45 |
0x1A | 0x2 | uint16_t | ? | Number of special indices | Always 4 |
0x1C | 0x4 | Padding |
Joint info
Offset | Length | Type | Name | Description | Comments |
---|---|---|---|---|---|
0x0 | 0x10 | Vector4 | ? | Initial position? | |
0x10 | 0x10 | uint32_t[4] | ? | Connecting joint indices? | -1 if no connection |