]> git.xonotic.org Git - xonotic/darkplaces.git/blob - model_iqm.h
NudgeOutOfSolid: fix moving entities out of the world in complex cases
[xonotic/darkplaces.git] / model_iqm.h
1 #ifndef __MODEL_IQM_H__
2 #define __MODEL_IQM_H__
3
4 typedef struct iqmheader_s
5 {
6         char id[16];
7         unsigned int version;
8         unsigned int filesize;
9         unsigned int flags;
10         unsigned int num_text, ofs_text;
11         unsigned int num_meshes, ofs_meshes;
12         unsigned int num_vertexarrays, num_vertexes, ofs_vertexarrays;
13         unsigned int num_triangles, ofs_triangles, ofs_neighbors;
14         unsigned int num_joints, ofs_joints;
15         unsigned int num_poses, ofs_poses;
16         unsigned int num_anims, ofs_anims;
17         unsigned int num_frames, num_framechannels, ofs_frames, ofs_bounds;
18         unsigned int num_comment, ofs_comment;
19         unsigned int num_extensions, ofs_extensions;
20
21 iqmheader_t;
22
23 typedef struct iqmmesh_s
24 {
25         unsigned int name;
26         unsigned int material;
27         unsigned int first_vertex, num_vertexes;
28         unsigned int first_triangle, num_triangles;
29 }
30 iqmmesh_t;
31
32 #define IQM_POSITION        0
33 #define IQM_TEXCOORD        1
34 #define IQM_NORMAL          2
35 #define IQM_TANGENT         3
36 #define IQM_BLENDINDEXES    4
37 #define IQM_BLENDWEIGHTS    5
38 #define IQM_COLOR               6
39 #define IQM_CUSTOM          0x10
40
41 #define IQM_BYTE    0
42 #define IQM_UBYTE   1
43 #define IQM_SHORT   2
44 #define IQM_USHORT  3
45 #define IQM_INT     4
46 #define IQM_UINT    5
47 #define IQM_HALF    6
48 #define IQM_FLOAT   7
49 #define IQM_DOUBLE  8
50
51 // animflags
52 #define IQM_LOOP 1
53
54 typedef struct iqmtriangle_s
55 {
56         unsigned int vertex[3];
57 }
58 iqmtriangle_t;
59
60 typedef struct iqmjoint1_s
61 {
62         unsigned int name;
63         signed int parent;
64         float origin[3], rotation[3], scale[3];
65 }
66 iqmjoint1_t;
67
68 typedef struct iqmjoint_s
69 {
70         unsigned int name;
71         signed int parent;
72         float origin[3], rotation[4], scale[3];
73 }
74 iqmjoint_t;
75
76 typedef struct iqmpose1_s
77 {
78         signed int parent;
79         unsigned int channelmask;
80         float channeloffset[9], channelscale[9];
81 }
82 iqmpose1_t;
83
84 typedef struct iqmpose_s
85 {
86         signed int parent;
87         unsigned int channelmask;
88         float channeloffset[10], channelscale[10];
89 }
90 iqmpose_t;
91
92 typedef struct iqmanim_s
93 {
94         unsigned int name;
95         unsigned int first_frame, num_frames;
96         float framerate;
97         unsigned int flags;
98 }
99 iqmanim_t;
100
101 typedef struct iqmvertexarray_s
102 {
103         unsigned int type;
104         unsigned int flags;
105         unsigned int format;
106         unsigned int size;
107         unsigned int offset;
108 }
109 iqmvertexarray_t;
110
111 typedef struct iqmextension_s
112 {
113     unsigned int name;
114     unsigned int num_data, ofs_data;
115     unsigned int ofs_extensions; // pointer to next extension
116 }
117 iqmextension_t;
118
119 typedef struct iqmbounds_s
120 {
121         float mins[3], maxs[3];
122         float xyradius, radius;
123 }
124 iqmbounds_t;
125     
126 #endif
127