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