struct HEAD // sizeof 39 bytes (0x27){0x00 unsigned char ID[2]; // Presumably controls which texture is used. e.g. MB=Morgab Bernhardt0x02 unsigned char Flags; // see table 10x03 unsigned char KeySeq; // animation to use?0x04 ?? always zero0x05 unsigned char MouthWidth; // These may not be unsigned. Not Tested.0x06 unsigned char MouthHeight;0x07 unsigned char MouthX; // This is where to draw the moving parts on the main graphic0x08 unsigned char MouthY; // (replacing what is there already) for facial animation0x09 unsigned char EyesWidth; // These may not be unsigned. Not Tested.0x0A unsigned char EyesHeight;0x0B unsigned char EyesX; // This is where to draw the moving parts on the main graphic0x0C unsigned char EyesY; // (replacing what is there already) for facial animation//0x0D char body_mesh_id // meshes/%d.m3d file0x0E signed char head_body_x; // seperate from center...padding? does not include the neck.0x0F signed char head_body_y; // ...0x10 signed char head_body_z;//0x11 char head_mesh_id // meshes/%d.m3d file0x12 signed char HeadX;0x13 signed char HeadY;0x14 signed char HeadZ;0x15 char head movement multiplier0x16 char KeyID // for cut-scenes?0x17 char NeckID;0x18 signed char NeckX;0x19 signed char NeckY;0x1A signed char NeckZ;0x1B char WeaponID; // 0x27 = bow, 0x33 = sword, etc.0x1C signed char WeaponX;0x1D signed char WeaponY;0x1E signed char WeaponZ; 0x1F char BackpackID;0x20 signed char BackpackX;0x21 signed char BackpackY;0x22 signed char BackpackZ;0x23 char HelmentID0x24 signed char HelmentX;0x25 signed char HelmentY;0x26 signed char HelmentZ;};
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}
0F==15 frames,each frame is 4 bytes so: 15*4 bytes in the first animation set:40 0F 05 01 00 00 03 04 14 07 03 00 24 17 05 00 00 00 05 00 00 00 05 01 00 00 03 04 14 09 03 04 14 07 03 04 28 04 05 00 00 00 05 00 00 00 05 01 00 00 03 04 0F 00 02 00 00 00 08 00 00 00 0F 0A 02 00 00
40 0F 05 01 00 00 03 04 14 07 03 04 14 04 05 00 00 00 05 00 00 00 05 01 00 00 03 04 14 09 03 04 14 07 03 04 28 04 05 00 00 00 05 00 00 00 05 01 00 00 03 04 0F 00 02 00 00 00 08 00 00 00 07 0A 02 00 00 03 04 0A 05 03 00 0F 04 03 04 0A 01 03 04 0A 02 02 00 00 00 08 00 00 00 0B 0A 02 00 00 03 04 14 03 03 04 0F 04 05 00 00 00 05 01 00 00 03 04 14 05 03 04 14 06 03 04 0A 01 03 04 0A 04 02 00 00 00 08 00 00 00