Well. Thats all i could figure out so far. Any help appreciated.
Oldest one (without SFX0. header)Code:struct quad_data { short unknown1; float position_x; //position vector. added after rotation float position_y; float position_z; float unk1; float unk2; float unk3; float scale_x_OR_cylinder_upper_radius; //scale_x is for a 2D scaleing (texture's quad) float scale_y_OR_cylinder_height; //2D float quad_z_OR_cylinder_bottom_radius; //Z koordinate to the quad only used by (quad type 4) float rotate_x; float rotate_y; float rotate_z; int animation_time; //milisecs }; //animateing this is easy. you just take the next quad_data from the array, do the wigth-awarage with the current one, and display the result struct SFX { char version[8]; int ntextures; struct sfx_part { int part_type; //1 = horizontal quad, 2 = vertical quad, 3 = ???, 4 = cylinder if(version[5] > '1') { int comment_len; char comment[ comment_len ]; } int texture_name_len; char texture_name[ texture_name_len ]; short unknown1; short unknown2; int unknown3; int quad_type; //1 = billboard, 2 = horizontal, 4 = vertical if(version[5] > '1') { int unknown5; } if(part_type == 2) { byte unknown6[10]; float q[15]; if(version[5] >= '2') { int unknown6_2[8]; //zero? float unk_degree; int unknown6_3; if(version[5] == '3') { int unknown6_4; } float q2[12]; } } short n; short unknown7; quad_data animation_states[ n ]; //these data uses the texture above if(part_type == 4) { int n4; //divides each cylinder into n4 parts } } texture_data[ ntextures ]; } sfx;
And some pic's:Code:struct quad_data { short unknown1; float position_x; //position vector. added after rotation float position_y; float position_z; float unk1; float unk2; float unk3; float scale_x_OR_cylinder_upper_radius; //scale_x is for a 2D scaleing (texture's quad) float scale_y_OR_cylinder_height; //scale_y is 2D float quad_z_OR_cylinder_bottom_radius; //Z koordinate to the quad only used by (quad type 4) float rotate_x; float rotate_y; float rotate_z; int animation_time; //milisecs }; struct SFX { int ntextures; struct ELEM { int part_type; //1 = horizontal quad, 2 = vertical quad, 3 = ???, 4 = cylinder int texture_name_len; char texture_name[ texture_name_len ]; short unknown1; short unknown2; int quad_type; //1 = billboard, 2 = horizontal, 4 = vertical if(part_type == 2) { byte unknown6[10]; float q[15]; } short n; short unknown7; quad_data animation_states[ n ]; if(part_type == 4) { int n4; //divides each cylinder into n4 parts } } texture_data[ ntextures ]; } sfx;
http://image-storage.co.uk/Images/41...ic19dacf9e.JPG
http://image-storage.co.uk/Images/41...ic233549ab.JPG
http://image-storage.co.uk/Images/41...ic38dda63f.JPG
http://image-storage.co.uk/Images/41...ic413fb23b.JPG
http://image-storage.co.uk/Images/41...ic50287c6f.JPG
http://image-storage.co.uk/Images/41...ic619f5b00.JPG
Thanks to Nicco and his mate for the picture shareing site![]()





