/* ============================================================================== Common stuff ============================================================================== */ #define MAX_QPATH 64 // max length of a quake game pathname typedef float vec_t; typedef vec_t vec2_t[2]; typedef vec_t vec3_t[3]; typedef vec_t vec4_t[4]; typedef vec_t vec5_t[5]; typedef unsigned char byte; #define LIGHTMAP_SIZE 128 #define LIGHTMAP_BY_VERTEX -3 // pre-lit triangle models #define POINTS_ST_SCALE 128.0f #define POINTS_LIGHT_SCALE 65536.0f /* ============================================================================== .BSP file format ============================================================================== */ #define BSP_IDENT (('P'<<24)+('S'<<16)+('B'<<8)+'R') #define BSP_VERSION 1 // there shouldn't be any problem with increasing these values at the // expense of more memory allocation in the utilities #define MAX_MAP_MODELS 0x400 #define MAX_MAP_BRUSHES 0x8000 #define MAX_MAP_ENTITIES 0x800 #define MAX_MAP_ENTSTRING 0x40000 #define MAX_MAP_SHADERS 0x400 #define MAX_MAP_AREAS 0x100 // MAX_MAP_AREA_BYTES in q_shared must match! #define MAX_MAP_FOGS 0x100 #define MAX_MAP_PLANES 0x20000 #define MAX_MAP_NODES 0x20000 #define MAX_MAP_BRUSHSIDES 0x20000 #define MAX_MAP_LEAFS 0x20000 #define MAX_MAP_LEAFFACES 0x20000 #define MAX_MAP_LEAFBRUSHES 0x40000 #define MAX_MAP_PORTALS 0x20000 #define MAX_MAP_LIGHTING 0x800000 #define MAX_MAP_LIGHTGRID 65535 #define MAX_MAP_LIGHTGRID_ARRAY 0x100000 #define MAX_MAP_VISIBILITY 0x400000 #define MAX_MAP_DRAW_SURFS 0x20000 #define MAX_MAP_DRAW_VERTS 0x80000 #define MAX_MAP_DRAW_INDEXES 0x80000 // key / value pair sizes in the entities lump #define MAX_KEY 32 #define MAX_VALUE 1024 // the editor uses these predefined yaw angles to orient entities up or down #define ANGLE_UP -1 #define ANGLE_DOWN -2 #define LIGHTMAP_WIDTH 128 #define LIGHTMAP_HEIGHT 128 //============================================================================= typedef struct { int fileofs, filelen; } lump_t; #define LUMP_ENTITIES 0 #define LUMP_SHADERS 1 #define LUMP_PLANES 2 #define LUMP_NODES 3 #define LUMP_LEAFS 4 #define LUMP_LEAFSURFACES 5 #define LUMP_LEAFBRUSHES 6 #define LUMP_MODELS 7 #define LUMP_BRUSHES 8 #define LUMP_BRUSHSIDES 9 #define LUMP_DRAWVERTS 10 #define LUMP_DRAWINDEXES 11 #define LUMP_FOGS 12 #define LUMP_SURFACES 13 #define LUMP_LIGHTMAPS 14 #define LUMP_LIGHTGRID 15 #define LUMP_VISIBILITY 16 #define LUMP_LIGHTARRAY 17 #define HEADER_LUMPS 18 typedef struct { int ident; int version; lump_t lumps[HEADER_LUMPS]; } dheader_t; typedef struct { float mins[3], maxs[3]; int firstSurface, numSurfaces; int firstBrush, numBrushes; } dmodel_t; typedef struct { char shader[MAX_QPATH]; int surfaceFlags; int contentFlags; } dshader_t; // planes x^1 is allways the opposite of plane x typedef struct { float normal[3]; float dist; } dplane_t; typedef struct { int planeNum; int children[2]; // negative numbers are -(leafs+1), not nodes int mins[3]; // for frustom culling int maxs[3]; } dnode_t; typedef struct { int cluster; // -1 = opaque cluster (do I still store these?) int area; int mins[3]; // for frustum culling int maxs[3]; int firstLeafSurface; int numLeafSurfaces; int firstLeafBrush; int numLeafBrushes; } dleaf_t; typedef struct { int planeNum; // positive plane side faces out of the leaf int shaderNum; int drawSurfNum; } dbrushside_t; typedef struct { int firstSide; int numSides; int shaderNum; // the shader that determines the contents flags } dbrush_t; typedef struct { char shader[MAX_QPATH]; int brushNum; int visibleSide; // the brush side that ray tests need to clip against (-1 == none) } dfog_t; // Light Style Constants #define MAXLIGHTMAPS 4 #define LS_NORMAL 0x00 #define LS_UNUSED 0xfe #define LS_NONE 0xff #define MAX_LIGHT_STYLES 64 typedef struct { vec3_t xyz; float st[2]; float lightmap[MAXLIGHTMAPS][2]; vec3_t normal; byte color[MAXLIGHTMAPS][4]; } mapVert_t; #define DRAWVERT_LIGHTMAP_SCALE 32768.0f #define DRAWVERT_ST_SCALE 16.0f typedef struct { vec3_t xyz; short dvst[2]; short dvlightmap[MAXLIGHTMAPS][2]; vec3_t normal; byte dvcolor[MAXLIGHTMAPS][2]; } drawVert_t; typedef struct { byte ambientLight[MAXLIGHTMAPS][3]; byte directLight[MAXLIGHTMAPS][3]; byte styles[MAXLIGHTMAPS]; byte latLong[2]; } dgrid_t; typedef enum { MST_BAD, MST_PLANAR, MST_PATCH, MST_TRIANGLE_SOUP, MST_FLARE } mapSurfaceType_t; typedef struct { int shaderNum; int fogNum; int surfaceType; int firstVert; int numVerts; int firstIndex; int numIndexes; byte lightmapStyles[MAXLIGHTMAPS], vertexStyles[MAXLIGHTMAPS]; int lightmapNum[MAXLIGHTMAPS]; int lightmapX[MAXLIGHTMAPS], lightmapY[MAXLIGHTMAPS]; int lightmapWidth, lightmapHeight; vec3_t lightmapOrigin; vec3_t lightmapVecs[3]; // for patches, [0] and [1] are lodbounds int patchWidth; int patchHeight; } dsurface_t;