- msurface_t **surfaces;
- // lit area
- vec3_t mins, maxs;
- // precomputed shadow volume meshs
- //svbspmesh_t *shadowvolume;
- //vec3_t shadowvolumemins, shadowvolumemaxs;
- shadowmesh_t *shadowvolume;
- */
-}
-mlight_t;
-
-struct model_s;
-void Mod_Q1BSP_Load(struct model_s *mod, void *buffer);
-void Mod_IBSP_Load(struct model_s *mod, void *buffer);
-void Mod_MAP_Load(struct model_s *mod, void *buffer);
-void Mod_BrushInit(void);
-
-// Q2 bsp stuff
-
-#define Q2BSPVERSION 38
-
-// leaffaces, leafbrushes, planes, and verts are still bounded by
-// 16 bit short limits
-
-//=============================================================================
-
-#define Q2LUMP_ENTITIES 0
-#define Q2LUMP_PLANES 1
-#define Q2LUMP_VERTEXES 2
-#define Q2LUMP_VISIBILITY 3
-#define Q2LUMP_NODES 4
-#define Q2LUMP_TEXINFO 5
-#define Q2LUMP_FACES 6
-#define Q2LUMP_LIGHTING 7
-#define Q2LUMP_LEAFS 8
-#define Q2LUMP_LEAFFACES 9
-#define Q2LUMP_LEAFBRUSHES 10
-#define Q2LUMP_EDGES 11
-#define Q2LUMP_SURFEDGES 12
-#define Q2LUMP_MODELS 13
-#define Q2LUMP_BRUSHES 14
-#define Q2LUMP_BRUSHSIDES 15
-#define Q2LUMP_POP 16
-#define Q2LUMP_AREAS 17
-#define Q2LUMP_AREAPORTALS 18
-#define Q2HEADER_LUMPS 19
-
-typedef struct
-{
- int ident;
- int version;
- lump_t lumps[HEADER_LUMPS];
-} q2dheader_t;
-
-typedef struct
-{
- float mins[3], maxs[3];
- float origin[3]; // for sounds or lights
- int headnode;
- int firstface, numfaces; // submodels just draw faces
- // without walking the bsp tree
-} q2dmodel_t;
-
-// planes (x&~1) and (x&~1)+1 are always opposites
-
-// contents flags are seperate bits
-// a given brush can contribute multiple content bits
-// multiple brushes can be in a single leaf
-
-// these definitions also need to be in q_shared.h!
-
-// lower bits are stronger, and will eat weaker brushes completely
-#define Q2CONTENTS_SOLID 1 // an eye is never valid in a solid
-#define Q2CONTENTS_WINDOW 2 // translucent, but not watery
-#define Q2CONTENTS_AUX 4
-#define Q2CONTENTS_LAVA 8
-#define Q2CONTENTS_SLIME 16
-#define Q2CONTENTS_WATER 32
-#define Q2CONTENTS_MIST 64
-#define Q2LAST_VISIBLE_CONTENTS 64
-
-// remaining contents are non-visible, and don't eat brushes
-
-#define Q2CONTENTS_AREAPORTAL 0x8000
-
-#define Q2CONTENTS_PLAYERCLIP 0x10000
-#define Q2CONTENTS_MONSTERCLIP 0x20000
-
-// currents can be added to any other contents, and may be mixed
-#define Q2CONTENTS_CURRENT_0 0x40000
-#define Q2CONTENTS_CURRENT_90 0x80000
-#define Q2CONTENTS_CURRENT_180 0x100000
-#define Q2CONTENTS_CURRENT_270 0x200000
-#define Q2CONTENTS_CURRENT_UP 0x400000
-#define Q2CONTENTS_CURRENT_DOWN 0x800000
-
-#define Q2CONTENTS_ORIGIN 0x1000000 // removed before bsping an entity
-
-#define Q2CONTENTS_MONSTER 0x2000000 // should never be on a brush, only in game
-#define Q2CONTENTS_DEADMONSTER 0x4000000
-#define Q2CONTENTS_DETAIL 0x8000000 // brushes to be added after vis leafs
-#define Q2CONTENTS_TRANSLUCENT 0x10000000 // auto set if any surface has trans
-#define Q2CONTENTS_LADDER 0x20000000
-
-
-
-#define Q2SURF_LIGHT 0x1 // value will hold the light strength
-
-#define Q2SURF_SLICK 0x2 // effects game physics
-
-#define Q2SURF_SKY 0x4 // don't draw, but add to skybox
-#define Q2SURF_WARP 0x8 // turbulent water warp
-#define Q2SURF_TRANS33 0x10
-#define Q2SURF_TRANS66 0x20
-#define Q2SURF_FLOWING 0x40 // scroll towards angle
-#define Q2SURF_NODRAW 0x80 // don't bother referencing the texture
-
-
-
-
-typedef struct
-{
- int planenum;
- int children[2]; // negative numbers are -(leafs+1), not nodes
- short mins[3]; // for frustom culling
- short maxs[3];
- unsigned short firstface;
- unsigned short numfaces; // counting both sides
-} q2dnode_t;
-
-
-typedef struct
-{
- float vecs[2][4]; // [s/t][xyz offset]
- int flags; // miptex flags + overrides
- int value; // light emission, etc
- char texture[32]; // texture name (textures/*.wal)
- int nexttexinfo; // for animations, -1 = end of chain
-} q2texinfo_t;
-
-typedef struct
-{
- int contents; // OR of all brushes (not needed?)
-
- short cluster;
- short area;
-
- short mins[3]; // for frustum culling
- short maxs[3];
-
- unsigned short firstleafface;
- unsigned short numleaffaces;
-
- unsigned short firstleafbrush;
- unsigned short numleafbrushes;
-} q2dleaf_t;
-
-typedef struct
-{
- unsigned short planenum; // facing out of the leaf
- short texinfo;
-} q2dbrushside_t;
-
-typedef struct
-{
- int firstside;
- int numsides;
- int contents;
-} q2dbrush_t;
-
-
-// the visibility lump consists of a header with a count, then
-// byte offsets for the PVS and PHS of each cluster, then the raw
-// compressed bit vectors
-#define Q2DVIS_PVS 0
-#define Q2DVIS_PHS 1
-typedef struct
-{
- int numclusters;
- int bitofs[8][2]; // bitofs[numclusters][2]
-} q2dvis_t;
-
-// each area has a list of portals that lead into other areas
-// when portals are closed, other areas may not be visible or
-// hearable even if the vis info says that it should be
-typedef struct
-{
- int portalnum;
- int otherarea;
-} q2dareaportal_t;
-
-typedef struct
-{
- int numareaportals;
- int firstareaportal;
-} q2darea_t;
-
-
-//Q3 bsp stuff
-
-#define Q3BSPVERSION 46
-
-#define Q3LUMP_ENTITIES 0 // entities to spawn (used by server and client)
-#define Q3LUMP_TEXTURES 1 // textures used (used by faces)
-#define Q3LUMP_PLANES 2 // planes used (used by bsp nodes)
-#define Q3LUMP_NODES 3 // bsp nodes (used by bsp nodes, bsp leafs, rendering, collisions)
-#define Q3LUMP_LEAFS 4 // bsp leafs (used by bsp nodes)
-#define Q3LUMP_LEAFFACES 5 // array of ints indexing faces (used by leafs)
-#define Q3LUMP_LEAFBRUSHES 6 // array of ints indexing brushes (used by leafs)
-#define Q3LUMP_MODELS 7 // models (used by rendering, collisions)
-#define Q3LUMP_BRUSHES 8 // brushes (used by effects, collisions)
-#define Q3LUMP_BRUSHSIDES 9 // brush faces (used by brushes)
-#define Q3LUMP_VERTICES 10 // mesh vertices (used by faces)
-#define Q3LUMP_TRIANGLES 11 // mesh triangles (used by faces)
-#define Q3LUMP_EFFECTS 12 // fog (used by faces)
-#define Q3LUMP_FACES 13 // surfaces (used by leafs)
-#define Q3LUMP_LIGHTMAPS 14 // lightmap textures (used by faces)
-#define Q3LUMP_LIGHTGRID 15 // lighting as a voxel grid (used by rendering)
-#define Q3LUMP_PVS 16 // potentially visible set; bit[clusters][clusters] (used by rendering)
-#define Q3HEADER_LUMPS 17
-
-typedef struct
-{
- int ident;
- int version;
- lump_t lumps[HEADER_LUMPS];
-} q3dheader_t;
-
-typedef struct
-{
- char name[Q3PATHLENGTH];
- int surfaceflags;
- int contents;
-}
-q3dtexture_t;
-
-// note: planes are paired, the pair of planes with i and i ^ 1 are opposites.
-typedef struct
-{
- float normal[3];
- float dist;
-}
-q3dplane_t;
-
-typedef struct
-{
- int planeindex;
- int childrenindex[2];
- int mins[3];
- int maxs[3];
-}
-q3dnode_t;
-
-typedef struct
-{
- int clusterindex; // pvs index
- int areaindex; // area index
- int mins[3];
- int maxs[3];
- int firstleafface;
- int numleaffaces;
- int firstleafbrush;
- int numleafbrushes;
-}
-q3dleaf_t;
-
-typedef struct
-{
- float mins[3];
- float maxs[3];
- int firstface;
- int numfaces;
- int firstbrush;
- int numbrushes;
-}
-q3dmodel_t;
-
-typedef struct
-{
- int firstbrushside;
- int numbrushsides;
- int textureindex;
-}
-q3dbrush_t;
-
-typedef struct
-{
- int planeindex;
- int textureindex;
-}
-q3dbrushside_t;
-
-typedef struct
-{
- float origin3f[3];
- float texcoord2f[2];
- float lightmap2f[2];
- float normal3f[3];
- unsigned char color4ub[4];
-}
-q3dvertex_t;
-
-typedef struct
-{
- int offset; // first vertex index of mesh
-}
-q3dmeshvertex_t;
-
-typedef struct q3deffect_s
-{
- char shadername[Q3PATHLENGTH];
- int brushindex;
- int unknown; // I read this is always 5 except in q3dm8 which has one effect with -1
-}
-q3deffect_t;
-
-#define Q3FACETYPE_POLYGON 1 // common
-#define Q3FACETYPE_PATCH 2 // common
-#define Q3FACETYPE_MESH 3 // common
-#define Q3FACETYPE_FLARE 4 // rare (is this ever used?)
-
-typedef struct
-{
- int textureindex;
- int effectindex; // -1 if none
- int type; // Q3FACETYPE
- int firstvertex;
- int numvertices;
- int firstelement;
- int numelements;
- int lightmapindex; // -1 if none
- int lightmap_base[2];
- int lightmap_size[2];
- union
- {
- struct
- {
- // corrupt or don't care
- int blah[14];
- }
- unknown;
- struct
- {
- // Q3FACETYPE_POLYGON
- // polygon is simply a convex polygon, renderable as a mesh
- float lightmap_origin[3];
- float lightmap_vectors[2][3];
- float normal[3];
- int unused1[2];
- }
- polygon;
- struct
- {
- // Q3FACETYPE_PATCH
- // patch renders as a bezier mesh, with adjustable tesselation
- // level (optionally based on LOD using the bbox and polygon
- // count to choose a tesselation level)
- // note: multiple patches may have the same bbox to cause them to
- // be LOD adjusted together as a group
- int unused1[3];
- float mins[3]; // LOD bbox
- float maxs[3]; // LOD bbox
- int unused2[3];
- int patchsize[2]; // dimensions of vertex grid
- }
- patch;
- struct
- {
- // Q3FACETYPE_MESH
- // mesh renders as simply a triangle mesh
- int unused1[3];
- float mins[3];
- float maxs[3];
- int unused2[5];
- }
- mesh;
- struct
- {
- // Q3FACETYPE_FLARE
- // flare renders as a simple sprite at origin, no geometry
- // exists, nor does it have a radius, a cvar controls the radius
- // and another cvar controls distance fade
- // (they were not used in Q3 I'm told)
- float origin[3];
- int unused1[11];
- }
- flare;
- }
- specific;
-}
-q3dface_t;
-
-typedef struct
-{
- unsigned char rgb[128*128*3];
-}
-q3dlightmap_t;
-
-typedef struct
-{
- unsigned char ambientrgb[3];
- unsigned char diffusergb[3];
- unsigned char diffusepitch;
- unsigned char diffuseyaw;