I've worked out SEQ files , here's a quick look at what they do:
0.seq is used by all characters(in talkie scenes) and 126.seq, and 0.key
126.seq is for mouth movement, these are the only three files needed for most cutscenes, could be all. in-game characters use other files(like orcs on level 2)
SEQ files contain lists of keyframes, a keyframe is a state a character(like Burnheartd) can be in.
The second byte in a SEQ file is the number of keyframes in the first animation set, 0F in 0.SEQ
Code:
0F==15 frames, each frame is 4 bytes so: 15*4 bytes in the first animation set:
Each animation set is defined by a number(length in frames) such as 0F or 0B, and there are something like 28 sets in 0.SEQ, this number occurs after each previous set
"zero three" entries: these are for head and body rotation 03 04 14 07 - tell character to rotate to key 7 in 0.key 03 04 XX 02 - rotate to key 2 in 0.key 03 04 XX 07 - XX is an acceleration value, greater values cause rotation to be slower
the second byte is almost always 04, or 00, I haven't worked out what it does. If the third byte XX is 0(0 acceleration), no rotation will occur for that key frame.
"zero A" entries: 0A 02 00 00 - causes mouth to start talking, audio+animation, using 126.SEQ
"zero 6" entries: these are for mouth *they only occur in 126.SEQ file like I said, that file is for mouth 06 11 00 00 - oow mouth 06 06 01 00 00 - mouth state 06 02 00 00 - mouth state 06 10 00 00 - mouth state
"zero 8" entries: These are found at the end of each animation set: 08 00 00 00 they seem to cause that particular set to loop if that set was started.
"zero 2" entries: 02 00 00 00 These are also found at the end of an animation set like 08, I haven't worked out what they do.
That's most of the different keyframe types.
Each animation set is defined by a number of frames in that set, e.g. 0F for the first, 07 for the second, 0B 3rd if you look at "0.SEQ":
To anyone who's interested, I have found out a bit more about .key files, with help from aqrit's db code
.KEY files appear(Pretty sure) to contain a list of keyframes, which are just a rotation for the head and a rotation for the body. each keyframe is a struct that is 12 bytes,
the first byte of a .key file is the number of keyframes in the file(e.g. 64 frames in 0.KEY)
//the second bytes for each rotation has more effect, //e.g. something like 0-275 degrees while the first //has a lesser 0-85, not sure exactly
For example:
Code:
struct BODYHEAD{ //12 bytes //Body rotation 0x00 signed char body_rotation_x1; // a rotation value around x axis 0x01 signed char body_rotation_x2; // a greater rotation value around x axis 0x02 signed char body_rotation_y1; // a rotation value around y axis 0x03 signed char body_rotation_y2; // a greater rotation value around y axis 0x04 signed char body_rotation_z1; // a rotation value around z axis 0x05 signed char body_rotation_z2; // a greater rotation value around z axis //Head rotation 0x06 signed char head_rotation_x1; // a rotation value around x axis 0x07 signed char head_rotation_x2; // a greater rotation value around x axis 0x08 signed char head_rotation_y1; // a rotation value around y axis 0x09 signed char head_rotation_y2; // a greater rotation value around y axis 0x0A signed char head_rotation_z1; // a rotation value around z axis 0x0B signed char head_rotation_z2; // a greater rotation value around z axis }
.SEQ files then choose the order of these keyframes to create different animations for each of the characters, I'm working on figuring them out
looking good, I'm a programmer/3d artist, I'd like to be a part of the cinematic or programming side of things, I started something a while ago with a sequel in mind using DirectX 9 but DirectX 9 is a little old now I think.