1 
2 #ifndef MODEL_ZYMOTIC_H
3 #define MODEL_ZYMOTIC_H
4 
5 typedef struct zymlump_s
6 {
7 	int start;
8 	int length;
9 } zymlump_t;
10 
11 typedef struct zymtype1header_s
12 {
13 	char id[12]; // "ZYMOTICMODEL", length 12, no termination
14 	int type; // 0 (vertex morph) 1 (skeletal pose) or 2 (skeletal scripted)
15 	int filesize; // size of entire model file
16 	float mins[3], maxs[3], radius; // for clipping uses
17 	int numverts;
18 	int numtris;
19 	int numshaders;
20 	int numbones; // this may be zero in the vertex morph format (undecided)
21 	int numscenes; // 0 in skeletal scripted models
22 
23 // skeletal pose header
24 	// lump offsets are relative to the file
25 	zymlump_t lump_scenes; // zymscene_t scene[numscenes]; // name and other information for each scene (see zymscene struct)
26 	zymlump_t lump_poses; // float pose[numposes][numbones][6]; // animation data
27 	zymlump_t lump_bones; // zymbone_t bone[numbones];
28 	zymlump_t lump_vertbonecounts; // int vertbonecounts[numvertices]; // how many bones influence each vertex (separate mainly to make this compress better)
29 	zymlump_t lump_verts; // zymvertex_t vert[numvertices]; // see vertex struct
30 	zymlump_t lump_texcoords; // float texcoords[numvertices][2];
31 	zymlump_t lump_render; // int renderlist[rendersize]; // sorted by shader with run lengths (int count), shaders are sequentially used, each run can be used with glDrawElements (each triangle is 3 int indices)
32 	zymlump_t lump_shaders; // char shadername[numshaders][32]; // shaders used on this model
33 	zymlump_t lump_trizone; // byte trizone[numtris]; // see trizone explanation
34 }
35 zymtype1header_t;
36 
37 #define ZYMBONEFLAG_SHARED 1
38 
39 typedef struct zymbone_s
40 {
41 	char name[32];
42 	int flags;
43 	int parent; // parent bone number
44 }
45 zymbone_t;
46 
47 // normally the scene will loop, if this is set it will stay on the final frame
48 #define ZYMSCENEFLAG_NOLOOP 1
49 
50 typedef struct zymscene_s
51 {
52 	char name[32];
53 	float mins[3], maxs[3], radius; // for clipping
54 	float framerate; // the scene will animate at this framerate (in frames per second)
55 	int flags;
56 	int start, length; // range of poses
57 }
58 zymscene_t;
59 
60 typedef struct zymvertex_s
61 {
62 	int bonenum;
63 	float origin[3];
64 }
65 zymvertex_t;
66 
67 #endif
68 
69