2 Copyright (C) 1999-2006 Id Software, Inc. and contributors.
3 For a list of contributors, see the accompanying CONTRIBUTORS file.
5 This file is part of GtkRadiant.
7 GtkRadiant is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
12 GtkRadiant is distributed in the hope that it will be useful,
13 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.
17 You should have received a copy of the GNU General Public License
18 along with GtkRadiant; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
26 // qfiles.h: quake file formats
27 // This file must be identical in the quake and utils directories
30 // surface geometry should not exceed these limits
31 #define SHADER_MAX_VERTEXES 1000
32 #define SHADER_MAX_INDEXES (6*SHADER_MAX_VERTEXES)
35 // the maximum size of game reletive pathnames
39 ========================================================================
43 ========================================================================
46 #define VM_MAGIC 0x12721444
57 int litLength; // ( dataLength - litLength ) should be byteswapped on load
58 int bssLength; // zero filled memory appended to datalength
63 ========================================================================
65 PCX files are used for 8 bit images
67 ========================================================================
75 unsigned short xmin,ymin,xmax,ymax;
76 unsigned short hres,vres;
77 unsigned char palette[48];
80 unsigned short bytes_per_line;
81 unsigned short palette_type;
83 unsigned char data; // unbounded
88 ========================================================================
90 TGA files are used for 24/32 bit images
92 ========================================================================
95 typedef struct _TargaHeader {
96 unsigned char id_length, colormap_type, image_type;
97 unsigned short colormap_index, colormap_length;
98 unsigned char colormap_size;
99 unsigned short x_origin, y_origin, width, height;
100 unsigned char pixel_size, attributes;
106 ========================================================================
108 .MD3 triangle model file format
110 ========================================================================
113 #define MD3_IDENT (('3'<<24)+('P'<<16)+('D'<<8)+'I')
114 #define MD3_VERSION 15
117 #define MD3_MAX_LODS 4
118 #define MD3_MAX_TRIANGLES 8192 // per surface
119 #define MD3_MAX_VERTS 4096 // per surface
120 #define MD3_MAX_SHADERS 256 // per surface
121 #define MD3_MAX_FRAMES 1024 // per model
122 #define MD3_MAX_SURFACES 32 // per model
123 #define MD3_MAX_TAGS 16 // per frame
126 #define MD3_XYZ_SCALE (1.0/64)
128 typedef struct md3Frame_s {
135 typedef struct md3Tag_s {
136 char name[MAX_QPATH]; // tag name
145 ** header sizeof( md3Surface_t )
146 ** shaders sizeof( md3Shader_t ) * numShaders
147 ** triangles[0] sizeof( md3Triangle_t ) * numTriangles
148 ** st sizeof( md3St_t ) * numVerts
149 ** XyzNormals sizeof( md3XyzNormal_t ) * numVerts * numFrames
154 char name[MAX_QPATH]; // polyset name
157 int numFrames; // all surfaces in a model should have the same
159 int numShaders; // all surfaces in a model should have the same
165 int ofsShaders; // offset from start of md3Surface_t
166 int ofsSt; // texture coords are common for all frames
167 int ofsXyzNormals; // numVerts * numFrames
169 int ofsEnd; // next surface follows
173 char name[MAX_QPATH];
174 int shaderIndex; // for in-game use
194 char name[MAX_QPATH]; // model name
204 int ofsFrames; // offset for first frame
205 int ofsTags; // numFrames * numTags
206 int ofsSurfaces; // first surface, others follow
208 int ofsEnd; // end of file
212 ==============================================================================
216 ==============================================================================
219 #define MD4_IDENT (('4'<<24)+('P'<<16)+('D'<<8)+'I')
220 #define MD4_VERSION 1
221 #define MD4_MAX_BONES 128
224 int boneIndex; // these are indexes into the boneReferences,
225 float boneWeight; // not the global per-frame bone list
233 md4Weight_t weights[1]; // variable sized
243 char name[MAX_QPATH]; // polyset name
244 char shader[MAX_QPATH];
245 int shaderIndex; // for in-game use
247 int ofsHeader; // this will be a negative number
255 // Bone references are a set of ints representing all the bones
256 // present in any vertex weights for this surface. This is
257 // needed because a model may have surfaces that need to be
258 // drawn at different sort times, and we don't want to have
259 // to re-interpolate all the bones for each surface.
260 int numBoneReferences;
261 int ofsBoneReferences;
263 int ofsEnd; // next surface follows
271 vec3_t bounds[2]; // bounds of all surfaces of all LOD's for this frame
272 vec3_t localOrigin; // midpoint of bounds, used for sphere cull
273 float radius; // dist from localOrigin to corner
275 md4Bone_t bones[1]; // [numBones]
280 int ofsSurfaces; // first surface, others follow
281 int ofsEnd; // next lod follows
288 char name[MAX_QPATH]; // model name
290 // frames and bones are shared by all levels of detail
293 int ofsFrames; // md4Frame_t[numFrames]
295 // each level of detail has completely separate sets of surfaces
299 int ofsEnd; // end of file
304 ==============================================================================
308 ==============================================================================
312 #define BSP_IDENT (('P'<<24)+('S'<<16)+('B'<<8)+'I')
313 // little-endian "IBSP"
315 //#define BSP_VERSION 46
316 #define Q3_BSP_VERSION 46
317 #define WOLF_BSP_VERSION 47
319 // there shouldn't be any problem with increasing these values at the
320 // expense of more memory allocation in the utilities
321 #define MAX_MAP_MODELS 0x400
322 #define MAX_MAP_BRUSHES 0x8000
323 #define MAX_MAP_ENTITIES 0x800
324 #define MAX_MAP_ENTSTRING 0x40000
325 #define MAX_MAP_SHADERS 0x400
327 #define MAX_MAP_AREAS 0x100 // MAX_MAP_AREA_BYTES in q_shared must match!
328 #define MAX_MAP_FOGS 0x100
329 #define MAX_MAP_PLANES 0x20000
330 #define MAX_MAP_NODES 0x20000
331 #define MAX_MAP_BRUSHSIDES 0x40000 //% 0x20000 /* ydnar */
332 #define MAX_MAP_LEAFS 0x20000
333 #define MAX_MAP_LEAFFACES 0x20000
334 #define MAX_MAP_LEAFBRUSHES 0x40000
335 #define MAX_MAP_PORTALS 0x20000
336 #define MAX_MAP_LIGHTING 0x800000
337 #define MAX_MAP_LIGHTGRID 0x800000
338 #define MAX_MAP_VISIBILITY 0x200000
340 #define MAX_MAP_DRAW_SURFS 0x20000
341 #define MAX_MAP_DRAW_VERTS 0x80000
342 #define MAX_MAP_DRAW_INDEXES 0x80000
345 // key / value pair sizes in the entities lump
347 #define MAX_VALUE 1024
349 // the editor uses these predefined yaw angles to orient entities up or down
351 #define ANGLE_DOWN -2
353 #define LIGHTMAP_WIDTH 128
354 #define LIGHTMAP_HEIGHT 128
356 #define MIN_WORLD_COORD (-65536)
357 #define MAX_WORLD_COORD (65536)
358 #define WORLD_SIZE (MAX_WORLD_COORD - MIN_WORLD_COORD)
360 //=============================================================================
364 int fileofs, filelen;
367 #define LUMP_ENTITIES 0
368 #define LUMP_SHADERS 1
369 #define LUMP_PLANES 2
372 #define LUMP_LEAFSURFACES 5
373 #define LUMP_LEAFBRUSHES 6
374 #define LUMP_MODELS 7
375 #define LUMP_BRUSHES 8
376 #define LUMP_BRUSHSIDES 9
377 #define LUMP_DRAWVERTS 10
378 #define LUMP_DRAWINDEXES 11
380 #define LUMP_SURFACES 13
381 #define LUMP_LIGHTMAPS 14
382 #define LUMP_LIGHTGRID 15
383 #define LUMP_VISIBILITY 16
384 #define HEADER_LUMPS 17
390 lump_t lumps[HEADER_LUMPS];
394 float mins[3], maxs[3];
395 int firstSurface, numSurfaces;
396 int firstBrush, numBrushes;
400 char shader[MAX_QPATH];
405 // planes x^1 is allways the opposite of plane x
414 int children[2]; // negative numbers are -(leafs+1), not nodes
415 int mins[3]; // for frustom culling
420 int cluster; // -1 = opaque cluster (do I still store these?)
423 int mins[3]; // for frustum culling
426 int firstLeafSurface;
434 int planeNum; // positive plane side faces out of the leaf
441 int shaderNum; // the shader that determines the contents flags
445 char shader[MAX_QPATH];
447 int visibleSide; // the brush side that ray tests need to clip against (-1 == none)
478 int lightmapX, lightmapY;
479 int lightmapWidth, lightmapHeight;
481 vec3_t lightmapOrigin;
482 vec3_t lightmapVecs[3]; // for patches, [0] and [1] are lodbounds