123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272 |
- /*
- Copyright (C) 1996-1997 Id Software, Inc.
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- as published by the Free Software Foundation; either version 2
- of the License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
- // upper design bounds
- #define MAX_MAP_HULLS 4
- #define MAX_MAP_MODELS 256
- #define MAX_MAP_BRUSHES 4096
- #define MAX_MAP_ENTITIES 1024
- #define MAX_MAP_ENTSTRING 65536
- #define MAX_MAP_PLANES 8192
- #define MAX_MAP_NODES 32767 // because negative shorts are contents
- #define MAX_MAP_CLIPNODES 32767 //
- #define MAX_MAP_LEAFS 32767 //
- #define MAX_MAP_VERTS 65535
- #define MAX_MAP_FACES 65535
- #define MAX_MAP_MARKSURFACES 65535
- #define MAX_MAP_TEXINFO 4096
- #define MAX_MAP_EDGES 256000
- #define MAX_MAP_SURFEDGES 512000
- #define MAX_MAP_MIPTEX 0x200000
- #define MAX_MAP_LIGHTING 0x100000
- #define MAX_MAP_VISIBILITY 0x100000
- // key / value pair sizes
- #define MAX_KEY 32
- #define MAX_VALUE 1024
- //=============================================================================
- #define BSPVERSION 29
- typedef struct
- {
- int fileofs, filelen;
- } lump_t;
- #define LUMP_ENTITIES 0
- #define LUMP_PLANES 1
- #define LUMP_TEXTURES 2
- #define LUMP_VERTEXES 3
- #define LUMP_VISIBILITY 4
- #define LUMP_NODES 5
- #define LUMP_TEXINFO 6
- #define LUMP_FACES 7
- #define LUMP_LIGHTING 8
- #define LUMP_CLIPNODES 9
- #define LUMP_LEAFS 10
- #define LUMP_MARKSURFACES 11
- #define LUMP_EDGES 12
- #define LUMP_SURFEDGES 13
- #define LUMP_MODELS 14
- #define HEADER_LUMPS 15
- typedef struct
- {
- float mins[3], maxs[3];
- float origin[3];
- int headnode[MAX_MAP_HULLS];
- int visleafs; // not including the solid leaf 0
- int firstface, numfaces;
- } dmodel_t;
- typedef struct
- {
- int version;
- lump_t lumps[HEADER_LUMPS];
- } dheader_t;
- typedef struct
- {
- int nummiptex;
- int dataofs[4]; // [nummiptex]
- } dmiptexlump_t;
- #define MIPLEVELS 4
- typedef struct miptex_s
- {
- char name[16];
- unsigned width, height;
- unsigned offsets[MIPLEVELS]; // four mip maps stored
- } miptex_t;
- typedef struct
- {
- float point[3];
- } dvertex_t;
- // 0-2 are axial planes
- #define PLANE_X 0
- #define PLANE_Y 1
- #define PLANE_Z 2
- // 3-5 are non-axial planes snapped to the nearest
- #define PLANE_ANYX 3
- #define PLANE_ANYY 4
- #define PLANE_ANYZ 5
- typedef struct
- {
- float normal[3];
- float dist;
- int type; // PLANE_X - PLANE_ANYZ ?remove? trivial to regenerate
- } dplane_t;
- #define CONTENTS_EMPTY -1
- #define CONTENTS_SOLID -2
- #define CONTENTS_WATER -3
- #define CONTENTS_SLIME -4
- #define CONTENTS_LAVA -5
- #define CONTENTS_SKY -6
- // !!! if this is changed, it must be changed in asm_i386.h too !!!
- typedef struct
- {
- int planenum;
- short children[2]; // negative numbers are -(leafs+1), not nodes
- short mins[3]; // for sphere culling
- short maxs[3];
- unsigned short firstface;
- unsigned short numfaces; // counting both sides
- } dnode_t;
- typedef struct
- {
- int planenum;
- short children[2]; // negative numbers are contents
- } dclipnode_t;
- typedef struct texinfo_s
- {
- float vecs[2][4]; // [s/t][xyz offset]
- int miptex;
- int flags;
- } texinfo_t;
- #define TEX_SPECIAL 1 // sky or slime, no lightmap or 256 subdivision
- // note that edge 0 is never used, because negative edge nums are used for
- // counterclockwise use of the edge in a face
- typedef struct
- {
- unsigned short v[2]; // vertex numbers
- } dedge_t;
- #define MAXLIGHTMAPS 4
- typedef struct
- {
- short planenum;
- short side;
- int firstedge; // we must support > 64k edges
- short numedges;
- short texinfo;
- // lighting info
- byte styles[MAXLIGHTMAPS];
- int lightofs; // start of [numstyles*surfsize] samples
- } dface_t;
- #define AMBIENT_WATER 0
- #define AMBIENT_SKY 1
- #define AMBIENT_SLIME 2
- #define AMBIENT_LAVA 3
- #define NUM_AMBIENTS 4 // automatic ambient sounds
- // leaf 0 is the generic CONTENTS_SOLID leaf, used for all solid areas
- // all other leafs need visibility info
- typedef struct
- {
- int contents;
- int visofs; // -1 = no visibility info
- short mins[3]; // for frustum culling
- short maxs[3];
- unsigned short firstmarksurface;
- unsigned short nummarksurfaces;
- byte ambient_level[NUM_AMBIENTS];
- } dleaf_t;
- //============================================================================
- #ifndef QUAKE_GAME
- // the utilities get to be lazy and just use large static arrays
- extern int nummodels;
- extern dmodel_t dmodels[MAX_MAP_MODELS];
- extern int visdatasize;
- extern byte dvisdata[MAX_MAP_VISIBILITY];
- extern int lightdatasize;
- extern byte dlightdata[MAX_MAP_LIGHTING];
- extern int texdatasize;
- extern byte dtexdata[MAX_MAP_MIPTEX]; // (dmiptexlump_t)
- extern int entdatasize;
- extern char dentdata[MAX_MAP_ENTSTRING];
- extern int numleafs;
- extern dleaf_t dleafs[MAX_MAP_LEAFS];
- extern int numplanes;
- extern dplane_t dplanes[MAX_MAP_PLANES];
- extern int numvertexes;
- extern dvertex_t dvertexes[MAX_MAP_VERTS];
- extern int numnodes;
- extern dnode_t dnodes[MAX_MAP_NODES];
- extern int numtexinfo;
- extern texinfo_t texinfo[MAX_MAP_TEXINFO];
- extern int numfaces;
- extern dface_t dfaces[MAX_MAP_FACES];
- extern int numclipnodes;
- extern dclipnode_t dclipnodes[MAX_MAP_CLIPNODES];
- extern int numedges;
- extern dedge_t dedges[MAX_MAP_EDGES];
- extern int nummarksurfaces;
- extern unsigned short dmarksurfaces[MAX_MAP_MARKSURFACES];
- extern int numsurfedges;
- extern int dsurfedges[MAX_MAP_SURFEDGES];
- void LoadBSPFile (char *filename);
- void WriteBSPFile (char *filename);
- void PrintBSPFileSizes (void);
- #endif
|