ACT files are animations for models.
First comes the header:
Next comes an array of offsets to frame data
* uint32[number of frames] - Offset relative to start of the file
Next it's time to read frame data. The number of these data chunks is the number of meshes from the header.
Immediately after these fields is another chunk of data that contains the actual transformation data. Remember that "size" in the previous field might be 0, which means the mesh has no keyframes at this particular frame. Each chunk contains some number of these:
What comes next depends on the type of keyframe data.
If the type is absolutely positioned vertices, then this comes next:
Then comes a stream of X, Y, Z coordinates, each one a 32-bit float.
If the type is relative vertices, then this comes next:
Relative vertices may be compressed, and the compression can vary per vertex (in other words, one vertex may be compressed, and the next uncompressed). So before you can read the vertices you'll have to read the compression info:
Next comes the vertex data itself. Before you can read the vertices you'll need to decode the compression bitfield. Basically, each vertex is 2 bits within the bitfield. Vertex 0's compression info would live at bitfield & 0x3, Vertex 1's compression info would live at bitfield & 0xC, Vertex 2's compression info would live at bitfield & 0x30, etc. Here's how to interpret the compression info:
If the vertex data is compressed a byte or a uint16, you'll have to uncompress it.
Decompressing a byte:
Decompressing a uint16:
If the type is a transformation matrix, just read it in as 12 32-bit floats and turn it into a 4x3 matrix. Done!
The bounding box is made of 6 32-bit floats. Just read them in.