|
|
1.1 root 1:
2:
3: // upper design bounds
4:
5: #define MAX_MAP_HULLS 4
6:
7: #define MAX_MAP_MODELS 256
8: #define MAX_MAP_BRUSHES 4096
9: #define MAX_MAP_ENTITIES 1024
10: #define MAX_MAP_ENTSTRING 65536
11:
1.1.1.2 ! root 12: #define MAX_MAP_PLANES 32767
1.1 root 13: #define MAX_MAP_NODES 32767 // because negative shorts are contents
14: #define MAX_MAP_CLIPNODES 32767 //
1.1.1.2 ! root 15: #define MAX_MAP_LEAFS 8192
1.1 root 16: #define MAX_MAP_VERTS 65535
17: #define MAX_MAP_FACES 65535
18: #define MAX_MAP_MARKSURFACES 65535
19: #define MAX_MAP_TEXINFO 4096
20: #define MAX_MAP_EDGES 256000
21: #define MAX_MAP_SURFEDGES 512000
1.1.1.2 ! root 22: #define MAX_MAP_TEXTURES 512
1.1 root 23: #define MAX_MAP_MIPTEX 0x200000
24: #define MAX_MAP_LIGHTING 0x100000
25: #define MAX_MAP_VISIBILITY 0x100000
26:
1.1.1.2 ! root 27: #define MAX_MAP_PORTALS 65536
! 28:
1.1 root 29: // key / value pair sizes
30:
31: #define MAX_KEY 32
32: #define MAX_VALUE 1024
33:
34: //=============================================================================
35:
36:
37: #define BSPVERSION 29
1.1.1.2 ! root 38: #define TOOLVERSION 2
1.1 root 39:
40: typedef struct
41: {
42: int fileofs, filelen;
43: } lump_t;
44:
45: #define LUMP_ENTITIES 0
46: #define LUMP_PLANES 1
47: #define LUMP_TEXTURES 2
48: #define LUMP_VERTEXES 3
49: #define LUMP_VISIBILITY 4
50: #define LUMP_NODES 5
51: #define LUMP_TEXINFO 6
52: #define LUMP_FACES 7
53: #define LUMP_LIGHTING 8
54: #define LUMP_CLIPNODES 9
55: #define LUMP_LEAFS 10
56: #define LUMP_MARKSURFACES 11
57: #define LUMP_EDGES 12
58: #define LUMP_SURFEDGES 13
59: #define LUMP_MODELS 14
60:
61: #define HEADER_LUMPS 15
62:
63: typedef struct
64: {
65: float mins[3], maxs[3];
66: float origin[3];
67: int headnode[MAX_MAP_HULLS];
68: int visleafs; // not including the solid leaf 0
69: int firstface, numfaces;
70: } dmodel_t;
71:
72: typedef struct
73: {
74: int version;
75: lump_t lumps[HEADER_LUMPS];
76: } dheader_t;
77:
78: typedef struct
79: {
80: int nummiptex;
81: int dataofs[4]; // [nummiptex]
82: } dmiptexlump_t;
83:
84: #define MIPLEVELS 4
85: typedef struct miptex_s
86: {
87: char name[16];
88: unsigned width, height;
89: unsigned offsets[MIPLEVELS]; // four mip maps stored
90: } miptex_t;
91:
92:
93: typedef struct
94: {
95: float point[3];
96: } dvertex_t;
97:
98:
99: // 0-2 are axial planes
100: #define PLANE_X 0
101: #define PLANE_Y 1
102: #define PLANE_Z 2
103:
104: // 3-5 are non-axial planes snapped to the nearest
105: #define PLANE_ANYX 3
106: #define PLANE_ANYY 4
107: #define PLANE_ANYZ 5
108:
109: typedef struct
110: {
111: float normal[3];
112: float dist;
113: int type; // PLANE_X - PLANE_ANYZ ?remove? trivial to regenerate
114: } dplane_t;
115:
116:
117:
118: #define CONTENTS_EMPTY -1
119: #define CONTENTS_SOLID -2
120: #define CONTENTS_WATER -3
121: #define CONTENTS_SLIME -4
122: #define CONTENTS_LAVA -5
123: #define CONTENTS_SKY -6
1.1.1.2 ! root 124: #define CONTENTS_ORIGIN -7 // removed at csg time
! 125: #define CONTENTS_CLIP -8 // changed to contents_solid
! 126:
! 127: #define CONTENTS_CURRENT_0 -9
! 128: #define CONTENTS_CURRENT_90 -10
! 129: #define CONTENTS_CURRENT_180 -11
! 130: #define CONTENTS_CURRENT_270 -12
! 131: #define CONTENTS_CURRENT_UP -13
! 132: #define CONTENTS_CURRENT_DOWN -14
! 133:
1.1 root 134:
135: // !!! if this is changed, it must be changed in asm_i386.h too !!!
136: typedef struct
137: {
138: int planenum;
139: short children[2]; // negative numbers are -(leafs+1), not nodes
140: short mins[3]; // for sphere culling
141: short maxs[3];
142: unsigned short firstface;
143: unsigned short numfaces; // counting both sides
144: } dnode_t;
145:
146: typedef struct
147: {
148: int planenum;
149: short children[2]; // negative numbers are contents
150: } dclipnode_t;
151:
152:
153: typedef struct texinfo_s
154: {
155: float vecs[2][4]; // [s/t][xyz offset]
156: int miptex;
157: int flags;
158: } texinfo_t;
159: #define TEX_SPECIAL 1 // sky or slime, no lightmap or 256 subdivision
160:
161: // note that edge 0 is never used, because negative edge nums are used for
162: // counterclockwise use of the edge in a face
163: typedef struct
164: {
165: unsigned short v[2]; // vertex numbers
166: } dedge_t;
167:
168: #define MAXLIGHTMAPS 4
169: typedef struct
170: {
171: short planenum;
172: short side;
173:
174: int firstedge; // we must support > 64k edges
175: short numedges;
176: short texinfo;
177:
178: // lighting info
179: byte styles[MAXLIGHTMAPS];
180: int lightofs; // start of [numstyles*surfsize] samples
181: } dface_t;
182:
183:
184:
185: #define AMBIENT_WATER 0
186: #define AMBIENT_SKY 1
187: #define AMBIENT_SLIME 2
188: #define AMBIENT_LAVA 3
189:
190: #define NUM_AMBIENTS 4 // automatic ambient sounds
191:
192: // leaf 0 is the generic CONTENTS_SOLID leaf, used for all solid areas
193: // all other leafs need visibility info
194: typedef struct
195: {
196: int contents;
197: int visofs; // -1 = no visibility info
198:
199: short mins[3]; // for frustum culling
200: short maxs[3];
201:
202: unsigned short firstmarksurface;
203: unsigned short nummarksurfaces;
204:
205: byte ambient_level[NUM_AMBIENTS];
206: } dleaf_t;
207:
1.1.1.2 ! root 208:
1.1 root 209: //============================================================================
210:
211: #ifndef QUAKE_GAME
212:
1.1.1.2 ! root 213: #define ANGLE_UP -1
! 214: #define ANGLE_DOWN -2
! 215:
! 216:
1.1 root 217: // the utilities get to be lazy and just use large static arrays
218:
219: extern int nummodels;
220: extern dmodel_t dmodels[MAX_MAP_MODELS];
221:
222: extern int visdatasize;
223: extern byte dvisdata[MAX_MAP_VISIBILITY];
224:
225: extern int lightdatasize;
226: extern byte dlightdata[MAX_MAP_LIGHTING];
227:
228: extern int texdatasize;
229: extern byte dtexdata[MAX_MAP_MIPTEX]; // (dmiptexlump_t)
230:
231: extern int entdatasize;
232: extern char dentdata[MAX_MAP_ENTSTRING];
233:
234: extern int numleafs;
235: extern dleaf_t dleafs[MAX_MAP_LEAFS];
236:
237: extern int numplanes;
238: extern dplane_t dplanes[MAX_MAP_PLANES];
239:
240: extern int numvertexes;
241: extern dvertex_t dvertexes[MAX_MAP_VERTS];
242:
243: extern int numnodes;
244: extern dnode_t dnodes[MAX_MAP_NODES];
245:
246: extern int numtexinfo;
247: extern texinfo_t texinfo[MAX_MAP_TEXINFO];
248:
249: extern int numfaces;
250: extern dface_t dfaces[MAX_MAP_FACES];
251:
252: extern int numclipnodes;
253: extern dclipnode_t dclipnodes[MAX_MAP_CLIPNODES];
254:
255: extern int numedges;
256: extern dedge_t dedges[MAX_MAP_EDGES];
257:
258: extern int nummarksurfaces;
259: extern unsigned short dmarksurfaces[MAX_MAP_MARKSURFACES];
260:
261: extern int numsurfedges;
262: extern int dsurfedges[MAX_MAP_SURFEDGES];
263:
264:
1.1.1.2 ! root 265: void DecompressVis (byte *in, byte *decompressed);
! 266: int CompressVis (byte *vis, byte *dest);
1.1 root 267:
268: void LoadBSPFile (char *filename);
269: void WriteBSPFile (char *filename);
270: void PrintBSPFileSizes (void);
271:
1.1.1.2 ! root 272: //===============
! 273:
! 274:
! 275: typedef struct epair_s
! 276: {
! 277: struct epair_s *next;
! 278: char *key;
! 279: char *value;
! 280: } epair_t;
! 281:
! 282: typedef struct
! 283: {
! 284: vec3_t origin;
! 285: int firstbrush;
! 286: int numbrushes;
! 287: epair_t *epairs;
! 288: } entity_t;
! 289:
! 290: extern int num_entities;
! 291: extern entity_t entities[MAX_MAP_ENTITIES];
! 292:
! 293: void ParseEntities (void);
! 294: void UnparseEntities (void);
! 295:
! 296: void SetKeyValue (entity_t *ent, char *key, char *value);
! 297: char *ValueForKey (entity_t *ent, char *key);
! 298: // will return "" if not present
! 299:
! 300: vec_t FloatForKey (entity_t *ent, char *key);
! 301: void GetVectorForKey (entity_t *ent, char *key, vec3_t vec);
! 302:
! 303: epair_t *ParseEpair (void);
! 304:
1.1 root 305: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.