|
|
1.1 ! root 1: /* ! 2: Copyright (C) 1996-1997 Id Software, Inc. ! 3: ! 4: This program is free software; you can redistribute it and/or ! 5: modify it under the terms of the GNU General Public License ! 6: as published by the Free Software Foundation; either version 2 ! 7: of the License, or (at your option) any later version. ! 8: ! 9: This program is distributed in the hope that it will be useful, ! 10: but WITHOUT ANY WARRANTY; without even the implied warranty of ! 11: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! 12: ! 13: See the GNU General Public License for more details. ! 14: ! 15: You should have received a copy of the GNU General Public License ! 16: along with this program; if not, write to the Free Software ! 17: Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ! 18: ! 19: */ ! 20: ! 21: ! 22: // upper design bounds ! 23: ! 24: #define MAX_MAP_HULLS 4 ! 25: ! 26: #define MAX_MAP_MODELS 256 ! 27: #define MAX_MAP_BRUSHES 4096 ! 28: #define MAX_MAP_ENTITIES 1024 ! 29: #define MAX_MAP_ENTSTRING 65536 ! 30: ! 31: #define MAX_MAP_PLANES 8192 ! 32: #define MAX_MAP_NODES 32767 // because negative shorts are contents ! 33: #define MAX_MAP_CLIPNODES 32767 // ! 34: #define MAX_MAP_LEAFS 32767 // ! 35: #define MAX_MAP_VERTS 65535 ! 36: #define MAX_MAP_FACES 65535 ! 37: #define MAX_MAP_MARKSURFACES 65535 ! 38: #define MAX_MAP_TEXINFO 4096 ! 39: #define MAX_MAP_EDGES 256000 ! 40: #define MAX_MAP_SURFEDGES 512000 ! 41: #define MAX_MAP_MIPTEX 0x200000 ! 42: #define MAX_MAP_LIGHTING 0x100000 ! 43: #define MAX_MAP_VISIBILITY 0x100000 ! 44: ! 45: // key / value pair sizes ! 46: ! 47: #define MAX_KEY 32 ! 48: #define MAX_VALUE 1024 ! 49: ! 50: ! 51: //============================================================================= ! 52: ! 53: ! 54: #define BSPVERSION 29 ! 55: ! 56: typedef struct ! 57: { ! 58: int fileofs, filelen; ! 59: } lump_t; ! 60: ! 61: #define LUMP_ENTITIES 0 ! 62: #define LUMP_PLANES 1 ! 63: #define LUMP_TEXTURES 2 ! 64: #define LUMP_VERTEXES 3 ! 65: #define LUMP_VISIBILITY 4 ! 66: #define LUMP_NODES 5 ! 67: #define LUMP_TEXINFO 6 ! 68: #define LUMP_FACES 7 ! 69: #define LUMP_LIGHTING 8 ! 70: #define LUMP_CLIPNODES 9 ! 71: #define LUMP_LEAFS 10 ! 72: #define LUMP_MARKSURFACES 11 ! 73: #define LUMP_EDGES 12 ! 74: #define LUMP_SURFEDGES 13 ! 75: #define LUMP_MODELS 14 ! 76: ! 77: #define HEADER_LUMPS 15 ! 78: ! 79: typedef struct ! 80: { ! 81: float mins[3], maxs[3]; ! 82: float origin[3]; ! 83: int headnode[MAX_MAP_HULLS]; ! 84: int visleafs; // not including the solid leaf 0 ! 85: int firstface, numfaces; ! 86: } dmodel_t; ! 87: ! 88: typedef struct ! 89: { ! 90: int version; ! 91: lump_t lumps[HEADER_LUMPS]; ! 92: } dheader_t; ! 93: ! 94: typedef struct ! 95: { ! 96: int nummiptex; ! 97: int dataofs[4]; // [nummiptex] ! 98: } dmiptexlump_t; ! 99: ! 100: #define MIPLEVELS 4 ! 101: typedef struct miptex_s ! 102: { ! 103: char name[16]; ! 104: unsigned width, height; ! 105: unsigned offsets[MIPLEVELS]; // four mip maps stored ! 106: } miptex_t; ! 107: ! 108: ! 109: typedef struct ! 110: { ! 111: float point[3]; ! 112: } dvertex_t; ! 113: ! 114: ! 115: // 0-2 are axial planes ! 116: #define PLANE_X 0 ! 117: #define PLANE_Y 1 ! 118: #define PLANE_Z 2 ! 119: ! 120: // 3-5 are non-axial planes snapped to the nearest ! 121: #define PLANE_ANYX 3 ! 122: #define PLANE_ANYY 4 ! 123: #define PLANE_ANYZ 5 ! 124: ! 125: typedef struct ! 126: { ! 127: float normal[3]; ! 128: float dist; ! 129: int type; // PLANE_X - PLANE_ANYZ ?remove? trivial to regenerate ! 130: } dplane_t; ! 131: ! 132: ! 133: ! 134: #define CONTENTS_EMPTY -1 ! 135: #define CONTENTS_SOLID -2 ! 136: #define CONTENTS_WATER -3 ! 137: #define CONTENTS_SLIME -4 ! 138: #define CONTENTS_LAVA -5 ! 139: #define CONTENTS_SKY -6 ! 140: ! 141: // !!! if this is changed, it must be changed in asm_i386.h too !!! ! 142: typedef struct ! 143: { ! 144: int planenum; ! 145: short children[2]; // negative numbers are -(leafs+1), not nodes ! 146: short mins[3]; // for sphere culling ! 147: short maxs[3]; ! 148: unsigned short firstface; ! 149: unsigned short numfaces; // counting both sides ! 150: } dnode_t; ! 151: ! 152: typedef struct ! 153: { ! 154: int planenum; ! 155: short children[2]; // negative numbers are contents ! 156: } dclipnode_t; ! 157: ! 158: ! 159: typedef struct texinfo_s ! 160: { ! 161: float vecs[2][4]; // [s/t][xyz offset] ! 162: int miptex; ! 163: int flags; ! 164: } texinfo_t; ! 165: #define TEX_SPECIAL 1 // sky or slime, no lightmap or 256 subdivision ! 166: ! 167: // note that edge 0 is never used, because negative edge nums are used for ! 168: // counterclockwise use of the edge in a face ! 169: typedef struct ! 170: { ! 171: unsigned short v[2]; // vertex numbers ! 172: } dedge_t; ! 173: ! 174: #define MAXLIGHTMAPS 4 ! 175: typedef struct ! 176: { ! 177: short planenum; ! 178: short side; ! 179: ! 180: int firstedge; // we must support > 64k edges ! 181: short numedges; ! 182: short texinfo; ! 183: ! 184: // lighting info ! 185: byte styles[MAXLIGHTMAPS]; ! 186: int lightofs; // start of [numstyles*surfsize] samples ! 187: } dface_t; ! 188: ! 189: ! 190: ! 191: #define AMBIENT_WATER 0 ! 192: #define AMBIENT_SKY 1 ! 193: #define AMBIENT_SLIME 2 ! 194: #define AMBIENT_LAVA 3 ! 195: ! 196: #define NUM_AMBIENTS 4 // automatic ambient sounds ! 197: ! 198: // leaf 0 is the generic CONTENTS_SOLID leaf, used for all solid areas ! 199: // all other leafs need visibility info ! 200: typedef struct ! 201: { ! 202: int contents; ! 203: int visofs; // -1 = no visibility info ! 204: ! 205: short mins[3]; // for frustum culling ! 206: short maxs[3]; ! 207: ! 208: unsigned short firstmarksurface; ! 209: unsigned short nummarksurfaces; ! 210: ! 211: byte ambient_level[NUM_AMBIENTS]; ! 212: } dleaf_t; ! 213: ! 214: //============================================================================ ! 215: ! 216: #ifndef QUAKE_GAME ! 217: ! 218: // the utilities get to be lazy and just use large static arrays ! 219: ! 220: extern int nummodels; ! 221: extern dmodel_t dmodels[MAX_MAP_MODELS]; ! 222: ! 223: extern int visdatasize; ! 224: extern byte dvisdata[MAX_MAP_VISIBILITY]; ! 225: ! 226: extern int lightdatasize; ! 227: extern byte dlightdata[MAX_MAP_LIGHTING]; ! 228: ! 229: extern int texdatasize; ! 230: extern byte dtexdata[MAX_MAP_MIPTEX]; // (dmiptexlump_t) ! 231: ! 232: extern int entdatasize; ! 233: extern char dentdata[MAX_MAP_ENTSTRING]; ! 234: ! 235: extern int numleafs; ! 236: extern dleaf_t dleafs[MAX_MAP_LEAFS]; ! 237: ! 238: extern int numplanes; ! 239: extern dplane_t dplanes[MAX_MAP_PLANES]; ! 240: ! 241: extern int numvertexes; ! 242: extern dvertex_t dvertexes[MAX_MAP_VERTS]; ! 243: ! 244: extern int numnodes; ! 245: extern dnode_t dnodes[MAX_MAP_NODES]; ! 246: ! 247: extern int numtexinfo; ! 248: extern texinfo_t texinfo[MAX_MAP_TEXINFO]; ! 249: ! 250: extern int numfaces; ! 251: extern dface_t dfaces[MAX_MAP_FACES]; ! 252: ! 253: extern int numclipnodes; ! 254: extern dclipnode_t dclipnodes[MAX_MAP_CLIPNODES]; ! 255: ! 256: extern int numedges; ! 257: extern dedge_t dedges[MAX_MAP_EDGES]; ! 258: ! 259: extern int nummarksurfaces; ! 260: extern unsigned short dmarksurfaces[MAX_MAP_MARKSURFACES]; ! 261: ! 262: extern int numsurfedges; ! 263: extern int dsurfedges[MAX_MAP_SURFEDGES]; ! 264: ! 265: ! 266: ! 267: void LoadBSPFile (char *filename); ! 268: void WriteBSPFile (char *filename); ! 269: void PrintBSPFileSizes (void); ! 270: ! 271: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.