SM64DS BCA (3D model animation) format documentation -- by Mega-Mario Updated 2014/04/18 with new information from Gericom's MKDS Course Modifier Updated 2014/04/21 by Fiachra 0. File header It is 24 bytes long and laid out as such: Offset Size Desc. 0x00 2 Number of bones to be handled (should match the number of bones in the BMD) 0x02 2 Number of animation frames(1) 0x04 4 Unknown, either 0 or 1 0x08 4 Offset to scale values section 0x0C 4 Offset to rotation values section 0x10 4 Offset to translation values section 0x14 4 Offset to animation section (1): animation frames may not last one rendering frame. Their duration depends on how fast the game is playing the animation. The number of animation frames is just the number of scale/rotation/translation values that will be read each time the animation is played. 1. Scale/Rotation/Translation values sections Those sections are just series of numbers (fixed-point, 32bit 20:12 for scale and translation, 16bit 4:12 for rotation (0x0400 = 90°)). The animation section tells how to use them. 2. Animation section This section contains a 36-byte long animation block for each bone to animate. Animation blocks are laid out as such: Offset Size Desc. 0x00 4 X scale descriptor 0x04 4 Y scale descriptor 0x08 4 Z scale descriptor 0x0C 4 X rotation descriptor 0x10 4 Y rotation descriptor 0x14 4 Z rotation descriptor 0x18 4 X translation descriptor 0x1C 4 Y translation descriptor 0x20 4 Z translation descriptor Each descriptor consists of 4 bytes laid out as such: AA BB CC CC (CCCCBBAA when viewed as dword) Offset Size Desc. 0x00 1 AA: Whether interpolation should be used to calculate odd frame values using the midpoint of the previous and next frames, 00 - false, 01 - true. Number of values to read = ((Number of frames in animation / 2) + AA) 0x01 1 BB: Whether offset increments each frame, 00 - false, 01 - true. If false, only the value at start offset (CC) is used. 0x02 2 CC: Index of first value into the corresponding value section, ushort