|
|
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.