- 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;
-
-extern rtexture_t *r_notexture;
-extern texture_t r_notexture_mip;
-
-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;