]> de.git.xonotic.org Git - xonotic/netradiant.git/blob - radiant/qfiles.h
get the basics of a new scons build system together
[xonotic/netradiant.git] / radiant / qfiles.h
1 /*\r
2 Copyright (C) 1999-2007 id Software, Inc. and contributors.\r
3 For a list of contributors, see the accompanying CONTRIBUTORS file.\r
4 \r
5 This file is part of GtkRadiant.\r
6 \r
7 GtkRadiant is free software; you can redistribute it and/or modify\r
8 it under the terms of the GNU General Public License as published by\r
9 the Free Software Foundation; either version 2 of the License, or\r
10 (at your option) any later version.\r
11 \r
12 GtkRadiant is distributed in the hope that it will be useful,\r
13 but WITHOUT ANY WARRANTY; without even the implied warranty of\r
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
15 GNU General Public License for more details.\r
16 \r
17 You should have received a copy of the GNU General Public License\r
18 along with GtkRadiant; if not, write to the Free Software\r
19 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA\r
20 */\r
21 \r
22 \r
23 //\r
24 // qfiles.h: quake file formats\r
25 // This file must be identical in the quake and utils directories\r
26 //\r
27 \r
28 /*\r
29 ========================================================================\r
30 \r
31 .MD2 triangle model file format\r
32 \r
33 ========================================================================\r
34 */\r
35 \r
36 #define IDALIASHEADER           (('2'<<24)+('P'<<16)+('D'<<8)+'I')\r
37 #define ALIAS_VERSION   8\r
38 \r
39 #define MAX_TRIANGLES   4096\r
40 #define MAX_VERTS               2048\r
41 #define MAX_FRAMES              512\r
42 #define MAX_MD2SKINS    32\r
43 #define MAX_SKINNAME    64\r
44 \r
45 typedef struct\r
46 {\r
47         short   s;\r
48         short   t;\r
49 } dstvert_t;\r
50 \r
51 typedef struct \r
52 {\r
53         short   index_xyz[3];\r
54         short   index_st[3];\r
55 } dtriangle_t;\r
56 \r
57 typedef struct\r
58 {\r
59         byte    v[3];                   // scaled byte to fit in frame mins/maxs\r
60         byte    lightnormalindex;\r
61 } dtrivertx_t;\r
62 \r
63 typedef struct\r
64 {\r
65         float           scale[3];       // multiply byte verts by this\r
66         float           translate[3];   // then add this\r
67         char            name[16];       // frame name from grabbing\r
68         dtrivertx_t     verts[1];       // variable sized\r
69 } daliasframe_t;\r
70 \r
71 \r
72 // the glcmd format:\r
73 // a positive integer starts a tristrip command, followed by that many\r
74 // vertex structures.\r
75 // a negative integer starts a trifan command, followed by -x vertexes\r
76 // a zero indicates the end of the command list.\r
77 // a vertex consists of a floating point s, a floating point t,\r
78 // and an integer vertex index.\r
79 \r
80 \r
81 typedef struct\r
82 {\r
83         int                     ident;\r
84         int                     version;\r
85 \r
86         int                     skinwidth;\r
87         int                     skinheight;\r
88         int                     framesize;              // byte size of each frame\r
89 \r
90         int                     num_skins;\r
91         int                     num_xyz;\r
92         int                     num_st;                 // greater than num_xyz for seams\r
93         int                     num_tris;\r
94         int                     num_glcmds;             // dwords in strip/fan command list\r
95         int                     num_frames;\r
96 \r
97         int                     ofs_skins;              // each skin is a MAX_SKINNAME string\r
98         int                     ofs_st;                 // byte offset from start for stverts\r
99         int                     ofs_tris;               // offset for dtriangles\r
100         int                     ofs_frames;             // offset for first frame\r
101         int                     ofs_glcmds;     \r
102         int                     ofs_end;                // end of file\r
103 \r
104 } dmdl_t;\r
105 \r
106 #define MD3_IDENT                       (('3'<<24)+('P'<<16)+('D'<<8)+'I')\r
107 #define MAX_QPATH                       64              // max length of a quake game pathname\r
108 #define MD3_XYZ_SCALE           (1.0/64)\r
109 \r
110 typedef struct {\r
111         int                     ident;\r
112         int                     version;\r
113 \r
114         char            name[MAX_QPATH];        // model name\r
115 \r
116         int                     flags;\r
117 \r
118         int                     numFrames;\r
119         int                     numTags;                        \r
120         int                     numSurfaces;\r
121 \r
122         int                     numSkins;\r
123 \r
124         int                     ofsFrames;                      // offset for first frame\r
125         int                     ofsTags;                        // numFrames * numTags\r
126         int                     ofsSurfaces;            // first surface, others follow\r
127 \r
128         int                     ofsEnd;                         // end of file\r
129 } md3Header_t;\r
130 \r
131 typedef struct {\r
132         int             ident;                          // \r
133 \r
134         char    name[MAX_QPATH];        // polyset name\r
135 \r
136         int             flags;\r
137         int             numFrames;                      // all surfaces in a model should have the same\r
138 \r
139         int             numShaders;                     // all surfaces in a model should have the same\r
140         int             numVerts;\r
141 \r
142         int             numTriangles;\r
143         int             ofsTriangles;\r
144 \r
145         int             ofsShaders;                     // offset from start of md3Surface_t\r
146         int             ofsSt;                          // texture coords are common for all frames\r
147         int             ofsXyzNormals;          // numVerts * numFrames\r
148 \r
149         int             ofsEnd;                         // next surface follows\r
150 \r
151 } md3Surface_t;\r
152 \r
153 typedef struct {\r
154         char                    name[MAX_QPATH];\r
155         int                             shaderIndex;    // for in-game use\r
156 } md3Shader_t;\r
157 \r
158 typedef struct {\r
159         int                     indexes[3];\r
160 } md3Triangle_t;\r
161 \r
162 typedef struct {\r
163         float           st[2];\r
164 } md3St_t;\r
165 \r
166 typedef struct {\r
167         short           xyz[3];\r
168         short           normal;\r
169 } md3XyzNormal_t;\r
170 \r
171 \r
172 typedef struct\r
173 {\r
174   float st[2];\r
175   int   nVertIndex;\r
176 } glst_t;\r
177 \r
178 typedef struct\r
179 {\r
180   int     nCount;\r
181   int     ObjectIndex;\r
182   glst_t  GlSt;\r
183 } gl_t;\r
184 \r
185 /*\r
186 ========================================================================\r
187 \r
188 .SP2 sprite file format\r
189 \r
190 ========================================================================\r
191 */\r
192 \r
193 #define IDSPRITEHEADER  (('2'<<24)+('S'<<16)+('D'<<8)+'I')\r
194                 // little-endian "IDS2"\r
195 #define SPRITE_VERSION  2\r
196 \r
197 typedef struct\r
198 {\r
199         int             width, height;\r
200         int             origin_x, origin_y;             // raster coordinates inside pic\r
201         char    name[MAX_SKINNAME];             // name of pcx file\r
202 } dsprframe_t;\r
203 \r
204 typedef struct {\r
205         int                     ident;\r
206         int                     version;\r
207         int                     numframes;\r
208         dsprframe_t     frames[1];                      // variable sized\r
209 } dsprite_t;\r
210 \r
211 /*\r
212 ==============================================================================\r
213 \r
214   .WAL texture file format\r
215 \r
216 ==============================================================================\r
217 */\r
218 \r
219 \r
220 #define MIPLEVELS       4\r
221 #ifndef __MIPTEX_S_\r
222 #define __MIPTEX_S_\r
223 typedef struct miptex_s\r
224 {\r
225         char            name[32];\r
226         unsigned        width, height;\r
227         unsigned        offsets[MIPLEVELS];             // four mip maps stored\r
228         char            animname[32];                   // next frame in animation chain\r
229         int                     flags;\r
230         int                     contents;\r
231         int                     value;\r
232 } miptex_t;\r
233 #endif\r
234 \r
235 \r
236 /*\r
237 ==============================================================================\r
238 \r
239   .BSP file format\r
240 \r
241 ==============================================================================\r
242 */\r
243 \r
244 #define IDBSPHEADER     (('P'<<24)+('S'<<16)+('B'<<8)+'I')\r
245                 // little-endian "IBSP"\r
246 \r
247 #define BSPVERSION      36\r
248 \r
249 \r
250 // upper design bounds\r
251 // leaffaces, leafbrushes, planes, and verts are still bounded by\r
252 // 16 bit short limits\r
253 #define MAX_MAP_MODELS          1024\r
254 #define MAX_MAP_BRUSHES         8192\r
255 #define MAX_MAP_ENTITIES        2048\r
256 #define MAX_MAP_ENTSTRING       0x20000\r
257 #define MAX_MAP_TEXINFO         8192\r
258 \r
259 #define MAX_MAP_PLANES          65536\r
260 #define MAX_MAP_NODES           65536\r
261 #define MAX_MAP_BRUSHSIDES      65536\r
262 #define MAX_MAP_LEAFS           65536\r
263 #define MAX_MAP_VERTS           65536\r
264 #define MAX_MAP_FACES           65536\r
265 #define MAX_MAP_LEAFFACES       65536\r
266 #define MAX_MAP_LEAFBRUSHES 65536\r
267 #define MAX_MAP_PORTALS         65536\r
268 #define MAX_MAP_EDGES           128000\r
269 #define MAX_MAP_SURFEDGES       256000\r
270 #define MAX_MAP_LIGHTING        0x200000\r
271 #define MAX_MAP_VISIBILITY      0x100000\r
272 \r
273 // we are using g_MaxBrushSize now, cleanme\r
274 /* #define MAX_BRUSH_SIZE 8192 */\r
275 \r
276 // key / value pair sizes\r
277 \r
278 #define MAX_KEY         32\r
279 #define MAX_VALUE       1024\r
280 \r
281 //=============================================================================\r
282 \r
283 typedef struct\r
284 {\r
285         int             fileofs, filelen;\r
286 } lump_t;\r
287 \r
288 #define LUMP_ENTITIES           0\r
289 #define LUMP_PLANES                     1\r
290 #define LUMP_VERTEXES           2\r
291 #define LUMP_VISIBILITY         3\r
292 #define LUMP_NODES                      4\r
293 #define LUMP_TEXINFO            5\r
294 #define LUMP_FACES                      6\r
295 #define LUMP_LIGHTING           7\r
296 #define LUMP_LEAFS                      8\r
297 #define LUMP_LEAFFACES          9\r
298 #define LUMP_LEAFBRUSHES        10\r
299 #define LUMP_EDGES                      11\r
300 #define LUMP_SURFEDGES          12\r
301 #define LUMP_MODELS                     13\r
302 #define LUMP_BRUSHES            14\r
303 #define LUMP_BRUSHSIDES         15\r
304 #define LUMP_POP                        16\r
305 \r
306 #define HEADER_LUMPS            17\r
307 \r
308 typedef struct\r
309 {\r
310         int                     ident;\r
311         int                     version;        \r
312         lump_t          lumps[HEADER_LUMPS];\r
313 } dheader_t;\r
314 \r
315 typedef struct\r
316 {\r
317         float           mins[3], maxs[3];\r
318         float           origin[3];              // for sounds or lights\r
319         int                     headnode;\r
320         int                     firstface, numfaces;    // submodels just draw faces\r
321                                                                                 // without walking the bsp tree\r
322 } dmodel_t;\r
323 \r
324 \r
325 typedef struct\r
326 {\r
327         float   point[3];\r
328 } dvertex_t;\r
329 \r
330 \r
331 // 0-2 are axial planes\r
332 #define PLANE_X                 0\r
333 #define PLANE_Y                 1\r
334 #define PLANE_Z                 2\r
335 \r
336 // 3-5 are non-axial planes snapped to the nearest\r
337 #define PLANE_ANYX              3\r
338 #define PLANE_ANYY              4\r
339 #define PLANE_ANYZ              5\r
340 \r
341 // planes (x&~1) and (x&~1)+1 are allways opposites\r
342 \r
343 typedef struct\r
344 {\r
345         float   normal[3];\r
346         float   dist;\r
347         int             type;           // PLANE_X - PLANE_ANYZ ?remove? trivial to regenerate\r
348 } dplane_t;\r
349 \r
350 \r
351 // contents flags are seperate bits\r
352 // a given brush can contribute multiple content bits\r
353 // multiple brushes can be in a single leaf\r
354 \r
355 // lower bits are stronger, and will eat weaker brushes completely\r
356 #define CONTENTS_SOLID                  1               // an eye is never valid in a solid\r
357 #define CONTENTS_WINDOW                 2               // translucent, but not watery\r
358 #define CONTENTS_AUX                    4\r
359 #define CONTENTS_LAVA                   8\r
360 #define CONTENTS_SLIME                  16\r
361 #define CONTENTS_WATER                  32\r
362 #define CONTENTS_MIST                   64\r
363 #define LAST_VISIBLE_CONTENTS   64\r
364 \r
365 // remaining contents are non-visible, and don't eat brushes\r
366 #define CONTENTS_PLAYERCLIP             0x10000\r
367 #define CONTENTS_MONSTERCLIP    0x20000\r
368 \r
369 // currents can be added to any other contents, and may be mixed\r
370 #define CONTENTS_CURRENT_0              0x40000\r
371 #define CONTENTS_CURRENT_90             0x80000\r
372 #define CONTENTS_CURRENT_180    0x100000\r
373 #define CONTENTS_CURRENT_270    0x200000\r
374 #define CONTENTS_CURRENT_UP             0x400000\r
375 #define CONTENTS_CURRENT_DOWN   0x800000\r
376 \r
377 #define CONTENTS_ORIGIN                     0x1000000     // removed before bsping an entity\r
378 \r
379 #define CONTENTS_MONSTER                    0x2000000     // should never be on a brush, only in game\r
380 #define CONTENTS_DEADMONSTER      0x4000000   // corpse\r
381 #define CONTENTS_DETAIL                     0x8000000     // brushes to be added after vis leafs\r
382 #define CONTENTS_TRANSLUCENT      0x10000000    // auto set if any surface has trans\r
383 #define CONTENTS_LADDER         0x20000000      // ladder\r
384 #define CONTENTS_NEGATIVE_CURVE 0x40000000      // reverse inside / outside\r
385 \r
386 #define CONTENTS_KEEP   (CONTENTS_DETAIL | CONTENTS_NEGATIVE_CURVE)\r
387 \r
388 \r
389 typedef struct\r
390 {\r
391         int                     planenum;\r
392         int                     children[2];    // negative numbers are -(leafs+1), not nodes\r
393         short           mins[3];                // for frustom culling\r
394         short           maxs[3];\r
395         unsigned short  firstface;\r
396         unsigned short  numfaces;       // counting both sides\r
397 } dnode_t;\r
398 \r
399 \r
400 typedef struct texinfo_s\r
401 {\r
402         float           vecs[2][4];             // [s/t][xyz offset]\r
403         int                     flags;                  // miptex flags + overrides\r
404         int                     value;                  // light emission, etc\r
405         char            texture[32];    // texture name (textures/*.wal)\r
406         int                     nexttexinfo;    // for animations, -1 = end of chain\r
407 } texinfo_t;\r
408 \r
409 \r
410 #define SURF_LIGHT              0x1             // value will hold the light strength\r
411 \r
412 #define SURF_SLICK              0x2             // effects game physics\r
413 \r
414 #define SURF_SKY                0x4             // don't draw, but add to skybox\r
415 #define SURF_WARP               0x8             // turbulent water warp\r
416 #define SURF_TRANS33    0x10\r
417 #define SURF_TRANS66    0x20\r
418 #define SURF_FLOWING    0x40    // scroll towards angle\r
419 #define SURF_NODRAW             0x80    // don't bother referencing the texture\r
420 \r
421 #define SURF_PATCH        0x20000000\r
422 #define SURF_CURVE_FAKE         0x40000000\r
423 #define SURF_CURVE                  0x80000000\r
424 #define SURF_KEEP               (SURF_CURVE | SURF_CURVE_FAKE | SURF_PATCH)\r
425 \r
426 // note that edge 0 is never used, because negative edge nums are used for\r
427 // counterclockwise use of the edge in a face\r
428 typedef struct\r
429 {\r
430         unsigned short  v[2];           // vertex numbers\r
431 } dedge_t;\r
432 \r
433 #define MAXLIGHTMAPS    4\r
434 typedef struct\r
435 {\r
436         unsigned short  planenum;\r
437         short           side;\r
438 \r
439         int                     firstedge;              // we must support > 64k edges\r
440         short           numedges;       \r
441         short           texinfo;\r
442 \r
443 // lighting info\r
444         byte            styles[MAXLIGHTMAPS];\r
445         int                     lightofs;               // start of [numstyles*surfsize] samples\r
446 } dface_t;\r
447 \r
448 typedef struct\r
449 {\r
450         int                     contents;                       // OR of all brushes (not needed?)\r
451 \r
452         int                     pvsofs;                         // -1 = no info\r
453         int                     phsofs;                         // -1 = no info\r
454 \r
455         short           mins[3];                        // for frustum culling\r
456         short           maxs[3];\r
457 \r
458         unsigned short          firstleafface;\r
459         unsigned short          numleaffaces;\r
460 \r
461         unsigned short          firstleafbrush;\r
462         unsigned short          numleafbrushes;\r
463 } dleaf_t;\r
464 \r
465 typedef struct\r
466 {\r
467         unsigned short  planenum;               // facing out of the leaf\r
468         short   texinfo;\r
469 } dbrushside_t;\r
470 \r
471 typedef struct\r
472 {\r
473         int                     firstside;\r
474         int                     numsides;\r
475         int                     contents;\r
476 } dbrush_t;\r
477 \r
478 #define ANGLE_UP        -1\r
479 #define ANGLE_DOWN      -2\r
480 \r