summaryrefslogtreecommitdiff
path: root/apps/plugins/sdl/progs/quake/bspfile.h
diff options
context:
space:
mode:
Diffstat (limited to 'apps/plugins/sdl/progs/quake/bspfile.h')
-rw-r--r--apps/plugins/sdl/progs/quake/bspfile.h324
1 files changed, 324 insertions, 0 deletions
diff --git a/apps/plugins/sdl/progs/quake/bspfile.h b/apps/plugins/sdl/progs/quake/bspfile.h
new file mode 100644
index 0000000000..308902632b
--- /dev/null
+++ b/apps/plugins/sdl/progs/quake/bspfile.h
@@ -0,0 +1,324 @@
1/*
2Copyright (C) 1996-1997 Id Software, Inc.
3
4This program is free software; you can redistribute it and/or
5modify it under the terms of the GNU General Public License
6as published by the Free Software Foundation; either version 2
7of the License, or (at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
13See the GNU General Public License for more details.
14
15You should have received a copy of the GNU General Public License
16along with this program; if not, write to the Free Software
17Foundation, 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 32767
32#define MAX_MAP_NODES 32767 // because negative shorts are contents
33#define MAX_MAP_CLIPNODES 32767 //
34#define MAX_MAP_LEAFS 8192
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_TEXTURES 512
42#define MAX_MAP_MIPTEX 0x200000
43#define MAX_MAP_LIGHTING 0x100000
44#define MAX_MAP_VISIBILITY 0x100000
45
46#define MAX_MAP_PORTALS 65536
47
48// key / value pair sizes
49
50#define MAX_KEY 32
51#define MAX_VALUE 1024
52
53//=============================================================================
54
55
56#define BSPVERSION 29
57#define TOOLVERSION 2
58
59typedef struct
60{
61 int fileofs, filelen;
62} lump_t;
63
64#define LUMP_ENTITIES 0
65#define LUMP_PLANES 1
66#define LUMP_TEXTURES 2
67#define LUMP_VERTEXES 3
68#define LUMP_VISIBILITY 4
69#define LUMP_NODES 5
70#define LUMP_TEXINFO 6
71#define LUMP_FACES 7
72#define LUMP_LIGHTING 8
73#define LUMP_CLIPNODES 9
74#define LUMP_LEAFS 10
75#define LUMP_MARKSURFACES 11
76#define LUMP_EDGES 12
77#define LUMP_SURFEDGES 13
78#define LUMP_MODELS 14
79
80#define HEADER_LUMPS 15
81
82typedef struct
83{
84 float mins[3], maxs[3];
85 float origin[3];
86 int headnode[MAX_MAP_HULLS];
87 int visleafs; // not including the solid leaf 0
88 int firstface, numfaces;
89} dmodel_t;
90
91typedef struct
92{
93 int version;
94 lump_t lumps[HEADER_LUMPS];
95} dheader_t;
96
97typedef struct
98{
99 int nummiptex;
100 int dataofs[4]; // [nummiptex]
101} dmiptexlump_t;
102
103#define MIPLEVELS 4
104typedef struct miptex_s
105{
106 char name[16];
107 unsigned width, height;
108 unsigned offsets[MIPLEVELS]; // four mip maps stored
109} miptex_t;
110
111
112typedef struct
113{
114 float point[3];
115} dvertex_t;
116
117
118// 0-2 are axial planes
119#define PLANE_X 0
120#define PLANE_Y 1
121#define PLANE_Z 2
122
123// 3-5 are non-axial planes snapped to the nearest
124#define PLANE_ANYX 3
125#define PLANE_ANYY 4
126#define PLANE_ANYZ 5
127
128typedef struct
129{
130 float normal[3];
131 float dist;
132 int type; // PLANE_X - PLANE_ANYZ ?remove? trivial to regenerate
133} dplane_t;
134
135
136
137#define CONTENTS_EMPTY -1
138#define CONTENTS_SOLID -2
139#define CONTENTS_WATER -3
140#define CONTENTS_SLIME -4
141#define CONTENTS_LAVA -5
142#define CONTENTS_SKY -6
143#define CONTENTS_ORIGIN -7 // removed at csg time
144#define CONTENTS_CLIP -8 // changed to contents_solid
145
146#define CONTENTS_CURRENT_0 -9
147#define CONTENTS_CURRENT_90 -10
148#define CONTENTS_CURRENT_180 -11
149#define CONTENTS_CURRENT_270 -12
150#define CONTENTS_CURRENT_UP -13
151#define CONTENTS_CURRENT_DOWN -14
152
153
154// !!! if this is changed, it must be changed in asm_i386.h too !!!
155typedef struct
156{
157 int planenum;
158 short children[2]; // negative numbers are -(leafs+1), not nodes
159 short mins[3]; // for sphere culling
160 short maxs[3];
161 unsigned short firstface;
162 unsigned short numfaces; // counting both sides
163} dnode_t;
164
165typedef struct
166{
167 int planenum;
168 short children[2]; // negative numbers are contents
169} dclipnode_t;
170
171
172typedef struct texinfo_s
173{
174 float vecs[2][4]; // [s/t][xyz offset]
175 int miptex;
176 int flags;
177} texinfo_t;
178#define TEX_SPECIAL 1 // sky or slime, no lightmap or 256 subdivision
179
180// note that edge 0 is never used, because negative edge nums are used for
181// counterclockwise use of the edge in a face
182typedef struct
183{
184 unsigned short v[2]; // vertex numbers
185} dedge_t;
186
187#define MAXLIGHTMAPS 4
188typedef struct
189{
190 short planenum;
191 short side;
192
193 int firstedge; // we must support > 64k edges
194 short numedges;
195 short texinfo;
196
197// lighting info
198 byte styles[MAXLIGHTMAPS];
199 int lightofs; // start of [numstyles*surfsize] samples
200} dface_t;
201
202
203
204#define AMBIENT_WATER 0
205#define AMBIENT_SKY 1
206#define AMBIENT_SLIME 2
207#define AMBIENT_LAVA 3
208
209#define NUM_AMBIENTS 4 // automatic ambient sounds
210
211// leaf 0 is the generic CONTENTS_SOLID leaf, used for all solid areas
212// all other leafs need visibility info
213typedef struct
214{
215 int contents;
216 int visofs; // -1 = no visibility info
217
218 short mins[3]; // for frustum culling
219 short maxs[3];
220
221 unsigned short firstmarksurface;
222 unsigned short nummarksurfaces;
223
224 byte ambient_level[NUM_AMBIENTS];
225} dleaf_t;
226
227
228//============================================================================
229
230#ifndef QUAKE_GAME
231
232#define ANGLE_UP -1
233#define ANGLE_DOWN -2
234
235
236// the utilities get to be lazy and just use large static arrays
237
238extern int nummodels;
239extern dmodel_t dmodels[MAX_MAP_MODELS];
240
241extern int visdatasize;
242extern byte dvisdata[MAX_MAP_VISIBILITY];
243
244extern int lightdatasize;
245extern byte dlightdata[MAX_MAP_LIGHTING];
246
247extern int texdatasize;
248extern byte dtexdata[MAX_MAP_MIPTEX]; // (dmiptexlump_t)
249
250extern int entdatasize;
251extern char dentdata[MAX_MAP_ENTSTRING];
252
253extern int numleafs;
254extern dleaf_t dleafs[MAX_MAP_LEAFS];
255
256extern int numplanes;
257extern dplane_t dplanes[MAX_MAP_PLANES];
258
259extern int numvertexes;
260extern dvertex_t dvertexes[MAX_MAP_VERTS];
261
262extern int numnodes;
263extern dnode_t dnodes[MAX_MAP_NODES];
264
265extern int numtexinfo;
266extern texinfo_t texinfo[MAX_MAP_TEXINFO];
267
268extern int numfaces;
269extern dface_t dfaces[MAX_MAP_FACES];
270
271extern int numclipnodes;
272extern dclipnode_t dclipnodes[MAX_MAP_CLIPNODES];
273
274extern int numedges;
275extern dedge_t dedges[MAX_MAP_EDGES];
276
277extern int nummarksurfaces;
278extern unsigned short dmarksurfaces[MAX_MAP_MARKSURFACES];
279
280extern int numsurfedges;
281extern int dsurfedges[MAX_MAP_SURFEDGES];
282
283
284void DecompressVis (byte *in, byte *decompressed);
285int CompressVis (byte *vis, byte *dest);
286
287void LoadBSPFile (char *filename);
288void WriteBSPFile (char *filename);
289void PrintBSPFileSizes (void);
290
291//===============
292
293
294typedef struct epair_s
295{
296 struct epair_s *next;
297 char *key;
298 char *value;
299} epair_t;
300
301typedef struct
302{
303 vec3_t origin;
304 int firstbrush;
305 int numbrushes;
306 epair_t *epairs;
307} entity_t;
308
309extern int num_entities;
310extern entity_t entities[MAX_MAP_ENTITIES];
311
312void ParseEntities (void);
313void UnparseEntities (void);
314
315void SetKeyValue (entity_t *ent, char *key, char *value);
316char *ValueForKey (entity_t *ent, char *key);
317// will return "" if not present
318
319vec_t FloatForKey (entity_t *ent, char *key);
320void GetVectorForKey (entity_t *ent, char *key, vec3_t vec);
321
322epair_t *ParseEpair (void);
323
324#endif