Quake-III-Arena

Quake III Arena GPL Source Release
Log | Files | Refs

qfiles.h (11288B)


      1 /*
      2 ===========================================================================
      3 Copyright (C) 1999-2005 Id Software, Inc.
      4 
      5 This file is part of Quake III Arena source code.
      6 
      7 Quake III Arena 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 III Arena 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 Foobar; if not, write to the Free Software
     19 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
     20 ===========================================================================
     21 */
     22 #ifndef __QFILES_H__
     23 #define __QFILES_H__
     24 
     25 //
     26 // qfiles.h: quake file formats
     27 // This file must be identical in the quake and utils directories
     28 //
     29 
     30 // surface geometry should not exceed these limits
     31 #define	SHADER_MAX_VERTEXES	1000
     32 #define	SHADER_MAX_INDEXES	(6*SHADER_MAX_VERTEXES)
     33 
     34 
     35 // the maximum size of game reletive pathnames
     36 #define	MAX_QPATH		64
     37 
     38 
     39 /*
     40 ========================================================================
     41 
     42 QVM files
     43 
     44 ========================================================================
     45 */
     46 
     47 #define	VM_MAGIC	0x12721444
     48 typedef struct {
     49 	int		vmMagic;
     50 
     51 	int		instructionCount;
     52 
     53 	int		codeOffset;
     54 	int		codeLength;
     55 
     56 	int		dataOffset;
     57 	int		dataLength;
     58 	int		litLength;			// ( dataLength - litLength ) should be byteswapped on load
     59 	int		bssLength;			// zero filled memory appended to datalength
     60 } vmHeader_t;
     61 
     62 /*
     63 ========================================================================
     64 
     65 PCX files are used for 8 bit images
     66 
     67 ========================================================================
     68 */
     69 
     70 typedef struct {
     71     char	manufacturer;
     72     char	version;
     73     char	encoding;
     74     char	bits_per_pixel;
     75     unsigned short	xmin,ymin,xmax,ymax;
     76     unsigned short	hres,vres;
     77     unsigned char	palette[48];
     78     char	reserved;
     79     char	color_planes;
     80     unsigned short	bytes_per_line;
     81     unsigned short	palette_type;
     82     char	filler[58];
     83     unsigned char	data;			// unbounded
     84 } pcx_t;
     85 
     86 
     87 /*
     88 ========================================================================
     89 
     90 TGA files are used for 24/32 bit images
     91 
     92 ========================================================================
     93 */
     94 
     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;
    101 } TargaHeader;
    102 
    103 
    104 
    105 /*
    106 ========================================================================
    107 
    108 .MD3 triangle model file format
    109 
    110 ========================================================================
    111 */
    112 
    113 #define MD3_IDENT			(('3'<<24)+('P'<<16)+('D'<<8)+'I')
    114 #define MD3_VERSION			15
    115 
    116 // limits
    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
    124 
    125 // vertex scales
    126 #define	MD3_XYZ_SCALE		(1.0/64)
    127 
    128 typedef struct md3Frame_s {
    129 	vec3_t		bounds[2];
    130 	vec3_t		localOrigin;
    131 	float		radius;
    132 	char		name[16];
    133 } md3Frame_t;
    134 
    135 typedef struct md3Tag_s {
    136 	char		name[MAX_QPATH];	// tag name
    137 	vec3_t		origin;
    138 	vec3_t		axis[3];
    139 } md3Tag_t;
    140 
    141 /*
    142 ** md3Surface_t
    143 **
    144 ** CHUNK			SIZE
    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
    150 */
    151 typedef struct {
    152 	int		ident;				// 
    153 
    154 	char	name[MAX_QPATH];	// polyset name
    155 
    156 	int		flags;
    157 	int		numFrames;			// all surfaces in a model should have the same
    158 
    159 	int		numShaders;			// all surfaces in a model should have the same
    160 	int		numVerts;
    161 
    162 	int		numTriangles;
    163 	int		ofsTriangles;
    164 
    165 	int		ofsShaders;			// offset from start of md3Surface_t
    166 	int		ofsSt;				// texture coords are common for all frames
    167 	int		ofsXyzNormals;		// numVerts * numFrames
    168 
    169 	int		ofsEnd;				// next surface follows
    170 } md3Surface_t;
    171 
    172 typedef struct {
    173 	char			name[MAX_QPATH];
    174 	int				shaderIndex;	// for in-game use
    175 } md3Shader_t;
    176 
    177 typedef struct {
    178 	int			indexes[3];
    179 } md3Triangle_t;
    180 
    181 typedef struct {
    182 	float		st[2];
    183 } md3St_t;
    184 
    185 typedef struct {
    186 	short		xyz[3];
    187 	short		normal;
    188 } md3XyzNormal_t;
    189 
    190 typedef struct {
    191 	int			ident;
    192 	int			version;
    193 
    194 	char		name[MAX_QPATH];	// model name
    195 
    196 	int			flags;
    197 
    198 	int			numFrames;
    199 	int			numTags;			
    200 	int			numSurfaces;
    201 
    202 	int			numSkins;
    203 
    204 	int			ofsFrames;			// offset for first frame
    205 	int			ofsTags;			// numFrames * numTags
    206 	int			ofsSurfaces;		// first surface, others follow
    207 
    208 	int			ofsEnd;				// end of file
    209 } md3Header_t;
    210 
    211 
    212 /*
    213 ==============================================================================
    214 
    215 MD4 file format
    216 
    217 ==============================================================================
    218 */
    219 
    220 #define MD4_IDENT			(('4'<<24)+('P'<<16)+('D'<<8)+'I')
    221 #define MD4_VERSION			1
    222 #define	MD4_MAX_BONES		128
    223 
    224 typedef struct {
    225 	int			boneIndex;		// these are indexes into the boneReferences,
    226 	float		boneWeight;		// not the global per-frame bone list
    227 } md4Weight_t;
    228 
    229 typedef struct {
    230 	vec3_t		vertex;
    231 	vec3_t		normal;
    232 	float		texCoords[2];
    233 	int			numWeights;
    234 	md4Weight_t	weights[1];		// variable sized
    235 } md4Vertex_t;
    236 
    237 typedef struct {
    238 	int			indexes[3];
    239 } md4Triangle_t;
    240 
    241 typedef struct {
    242 	int			ident;
    243 
    244 	char		name[MAX_QPATH];	// polyset name
    245 	char		shader[MAX_QPATH];
    246 	int			shaderIndex;		// for in-game use
    247 
    248 	int			ofsHeader;			// this will be a negative number
    249 
    250 	int			numVerts;
    251 	int			ofsVerts;
    252 
    253 	int			numTriangles;
    254 	int			ofsTriangles;
    255 
    256 	// Bone references are a set of ints representing all the bones
    257 	// present in any vertex weights for this surface.  This is
    258 	// needed because a model may have surfaces that need to be
    259 	// drawn at different sort times, and we don't want to have
    260 	// to re-interpolate all the bones for each surface.
    261 	int			numBoneReferences;
    262 	int			ofsBoneReferences;
    263 
    264 	int			ofsEnd;				// next surface follows
    265 } md4Surface_t;
    266 
    267 typedef struct {
    268 	float		matrix[3][4];
    269 } md4Bone_t;
    270 
    271 typedef struct {
    272 	vec3_t		bounds[2];			// bounds of all surfaces of all LOD's for this frame
    273 	vec3_t		localOrigin;		// midpoint of bounds, used for sphere cull
    274 	float		radius;				// dist from localOrigin to corner
    275 	char		name[16];
    276 	md4Bone_t	bones[1];			// [numBones]
    277 } md4Frame_t;
    278 
    279 typedef struct {
    280 	int			numSurfaces;
    281 	int			ofsSurfaces;		// first surface, others follow
    282 	int			ofsEnd;				// next lod follows
    283 } md4LOD_t;
    284 
    285 typedef struct {
    286 	int			ident;
    287 	int			version;
    288 
    289 	char		name[MAX_QPATH];	// model name
    290 
    291 	// frames and bones are shared by all levels of detail
    292 	int			numFrames;
    293 	int			numBones;
    294 	int			ofsFrames;			// md4Frame_t[numFrames]
    295 
    296 	// each level of detail has completely separate sets of surfaces
    297 	int			numLODs;
    298 	int			ofsLODs;
    299 
    300 	int			ofsEnd;				// end of file
    301 } md4Header_t;
    302 
    303 
    304 /*
    305 ==============================================================================
    306 
    307   .BSP file format
    308 
    309 ==============================================================================
    310 */
    311 
    312 
    313 #define BSP_IDENT	(('P'<<24)+('S'<<16)+('B'<<8)+'I')
    314 		// little-endian "IBSP"
    315 
    316 #define BSP_VERSION			46
    317 
    318 
    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
    326 
    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	0x20000
    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
    339 
    340 #define	MAX_MAP_DRAW_SURFS	0x20000
    341 #define	MAX_MAP_DRAW_VERTS	0x80000
    342 #define	MAX_MAP_DRAW_INDEXES	0x80000
    343 
    344 
    345 // key / value pair sizes in the entities lump
    346 #define	MAX_KEY				32
    347 #define	MAX_VALUE			1024
    348 
    349 // the editor uses these predefined yaw angles to orient entities up or down
    350 #define	ANGLE_UP			-1
    351 #define	ANGLE_DOWN			-2
    352 
    353 #define	LIGHTMAP_WIDTH		128
    354 #define	LIGHTMAP_HEIGHT		128
    355 
    356 #define MAX_WORLD_COORD		( 128*1024 )
    357 #define MIN_WORLD_COORD		( -128*1024 )
    358 #define WORLD_SIZE			( MAX_WORLD_COORD - MIN_WORLD_COORD )
    359 
    360 //=============================================================================
    361 
    362 
    363 typedef struct {
    364 	int		fileofs, filelen;
    365 } lump_t;
    366 
    367 #define	LUMP_ENTITIES		0
    368 #define	LUMP_SHADERS		1
    369 #define	LUMP_PLANES			2
    370 #define	LUMP_NODES			3
    371 #define	LUMP_LEAFS			4
    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
    379 #define	LUMP_FOGS			12
    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
    385 
    386 typedef struct {
    387 	int			ident;
    388 	int			version;
    389 
    390 	lump_t		lumps[HEADER_LUMPS];
    391 } dheader_t;
    392 
    393 typedef struct {
    394 	float		mins[3], maxs[3];
    395 	int			firstSurface, numSurfaces;
    396 	int			firstBrush, numBrushes;
    397 } dmodel_t;
    398 
    399 typedef struct {
    400 	char		shader[MAX_QPATH];
    401 	int			surfaceFlags;
    402 	int			contentFlags;
    403 } dshader_t;
    404 
    405 // planes x^1 is allways the opposite of plane x
    406 
    407 typedef struct {
    408 	float		normal[3];
    409 	float		dist;
    410 } dplane_t;
    411 
    412 typedef struct {
    413 	int			planeNum;
    414 	int			children[2];	// negative numbers are -(leafs+1), not nodes
    415 	int			mins[3];		// for frustom culling
    416 	int			maxs[3];
    417 } dnode_t;
    418 
    419 typedef struct {
    420 	int			cluster;			// -1 = opaque cluster (do I still store these?)
    421 	int			area;
    422 
    423 	int			mins[3];			// for frustum culling
    424 	int			maxs[3];
    425 
    426 	int			firstLeafSurface;
    427 	int			numLeafSurfaces;
    428 
    429 	int			firstLeafBrush;
    430 	int			numLeafBrushes;
    431 } dleaf_t;
    432 
    433 typedef struct {
    434 	int			planeNum;			// positive plane side faces out of the leaf
    435 	int			shaderNum;
    436 } dbrushside_t;
    437 
    438 typedef struct {
    439 	int			firstSide;
    440 	int			numSides;
    441 	int			shaderNum;		// the shader that determines the contents flags
    442 } dbrush_t;
    443 
    444 typedef struct {
    445 	char		shader[MAX_QPATH];
    446 	int			brushNum;
    447 	int			visibleSide;	// the brush side that ray tests need to clip against (-1 == none)
    448 } dfog_t;
    449 
    450 typedef struct {
    451 	vec3_t		xyz;
    452 	float		st[2];
    453 	float		lightmap[2];
    454 	vec3_t		normal;
    455 	byte		color[4];
    456 } drawVert_t;
    457 
    458 typedef enum {
    459 	MST_BAD,
    460 	MST_PLANAR,
    461 	MST_PATCH,
    462 	MST_TRIANGLE_SOUP,
    463 	MST_FLARE
    464 } mapSurfaceType_t;
    465 
    466 typedef struct {
    467 	int			shaderNum;
    468 	int			fogNum;
    469 	int			surfaceType;
    470 
    471 	int			firstVert;
    472 	int			numVerts;
    473 
    474 	int			firstIndex;
    475 	int			numIndexes;
    476 
    477 	int			lightmapNum;
    478 	int			lightmapX, lightmapY;
    479 	int			lightmapWidth, lightmapHeight;
    480 
    481 	vec3_t		lightmapOrigin;
    482 	vec3_t		lightmapVecs[3];	// for patches, [0] and [1] are lodbounds
    483 
    484 	int			patchWidth;
    485 	int			patchHeight;
    486 } dsurface_t;
    487 
    488 
    489 #endif