make infobar height configurable
[divverent/darkplaces.git] / model_brush.h
index 980a6ba..cec7846 100644 (file)
@@ -51,8 +51,8 @@ typedef struct mplane_s
        vec3_t normal;
        float dist;
        // for texture axis selection and fast side tests
-       int type;
-       int signbits;
+       int type; // set by PlaneClassify()
+       int signbits; // set by PlaneClassify()
 }
 mplane_t;
 
@@ -62,6 +62,8 @@ mplane_t;
 
 //#define SURF_PLANEBACK 2
 
+// indicates that all triangles of the surface should be added to the BIH collision system
+#define MATERIALFLAG_MESHCOLLISIONS 1
 // use alpha blend on this material
 #define MATERIALFLAG_ALPHA 2
 // use additive blend on this material
@@ -72,13 +74,13 @@ mplane_t;
 #define MATERIALFLAG_WATERALPHA 16
 // draw with no lighting
 #define MATERIALFLAG_FULLBRIGHT 32
-// drawn as a normal lightmapped wall
+// drawn as a normal surface (alternative to SKY)
 #define MATERIALFLAG_WALL 64
-// swirling water effect
-#define MATERIALFLAG_WATER 128
-// this surface shows the sky
+// this surface shows the sky in its place, alternative to WALL
 // skipped if transparent
-#define MATERIALFLAG_SKY 256
+#define MATERIALFLAG_SKY 128
+// swirling water effect (used with MATERIALFLAG_WALL)
+#define MATERIALFLAG_WATERSCROLL 256
 // skips drawing the surface
 #define MATERIALFLAG_NODRAW 512
 // probably used only on q1bsp water
@@ -98,10 +100,26 @@ mplane_t;
 #define MATERIALFLAG_NOCULLFACE 65536
 // render with a very short depth range (like 10% of normal), this causes entities to appear infront of most of the scene
 #define MATERIALFLAG_SHORTDEPTHRANGE 131072
-// render refraction and reflection (note: this is always opaque, the shader does the alpha effect)
+// render water, comprising refraction and reflection (note: this is always opaque, the shader does the alpha effect)
 #define MATERIALFLAG_WATERSHADER 262144
+// render refraction (note: this is just a way to distort the background, otherwise useless)
+#define MATERIALFLAG_REFRACTION 524288
+// render reflection
+#define MATERIALFLAG_REFLECTION 1048576
+// use model lighting on this material (q1bsp lightmap sampling or q3bsp lightgrid, implies FULLBRIGHT is false)
+#define MATERIALFLAG_MODELLIGHT 4194304
+// add directional model lighting to this material (q3bsp lightgrid only)
+#define MATERIALFLAG_MODELLIGHT_DIRECTIONAL 8388608
+// causes RSurf_GetCurrentTexture to leave alone certain fields
+#define MATERIALFLAG_CUSTOMSURFACE 16777216
+// causes MATERIALFLAG_BLENDED to render a depth pass before rendering, hiding backfaces and other hidden geometry
+#define MATERIALFLAG_TRANSDEPTH 33554432
+// like refraction, but doesn't distort etc.
+#define MATERIALFLAG_CAMERA 67108864
 // combined mask of all attributes that require depth sorted rendering
 #define MATERIALFLAGMASK_DEPTHSORTED (MATERIALFLAG_BLENDED | MATERIALFLAG_NODEPTHTEST)
+// combined mask of all attributes that cause some sort of transparency
+#define MATERIALFLAGMASK_TRANSLUCENT (MATERIALFLAG_WATERALPHA | MATERIALFLAG_SKY | MATERIALFLAG_NODRAW | MATERIALFLAG_ALPHATEST | MATERIALFLAG_BLENDED | MATERIALFLAG_WATERSHADER | MATERIALFLAG_REFRACTION)
 
 typedef struct medge_s
 {
@@ -161,9 +179,15 @@ typedef struct mleaf_s
 }
 mleaf_t;
 
+typedef struct mclipnode_s
+{
+       int                     planenum;
+       int                     children[2];    // negative numbers are contents
+} mclipnode_t;
+
 typedef struct hull_s
 {
-       dclipnode_t *clipnodes;
+       mclipnode_t *clipnodes;
        mplane_t *planes;
        int firstclipnode;
        int lastclipnode;
@@ -379,6 +403,8 @@ typedef struct q2darea_s
 //Q3 bsp stuff
 
 #define Q3BSPVERSION   46
+#define Q3BSPVERSION_LIVE 47
+#define Q3BSPVERSION_IG        48
 
 #define        Q3LUMP_ENTITIES         0 // entities to spawn (used by server and client)
 #define        Q3LUMP_TEXTURES         1 // textures used (used by faces)
@@ -398,12 +424,15 @@ typedef struct q2darea_s
 #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
+#define        Q3LUMP_ADVERTISEMENTS 17 // quake live stuff written by zeroradiant's q3map2 (ignored by DP)
+#define        Q3HEADER_LUMPS_LIVE     18
+#define        Q3HEADER_LUMPS_MAX      18
 
 typedef struct q3dheader_s
 {
        int                     ident;
        int                     version;
-       lump_t          lumps[Q3HEADER_LUMPS];
+       lump_t          lumps[Q3HEADER_LUMPS_MAX];
 } q3dheader_t;
 
 typedef struct q3dtexture_s
@@ -470,6 +499,14 @@ typedef struct q3dbrushside_s
 }
 q3dbrushside_t;
 
+typedef struct q3dbrushside_ig_s
+{
+       int planeindex;
+       int textureindex;
+       int surfaceflags;
+}
+q3dbrushside_ig_t;
+
 typedef struct q3dvertex_s
 {
        float origin3f[3];
@@ -494,7 +531,7 @@ typedef struct q3deffect_s
 }
 q3deffect_t;
 
-#define Q3FACETYPE_POLYGON 1 // common
+#define Q3FACETYPE_FLAT 1 // common
 #define Q3FACETYPE_PATCH 2 // common
 #define Q3FACETYPE_MESH 3 // common
 #define Q3FACETYPE_FLARE 4 // rare (is this ever used?)
@@ -521,14 +558,14 @@ typedef struct q3dface_s
                unknown;
                struct
                {
-                       // Q3FACETYPE_POLYGON
-                       // polygon is simply a convex polygon, renderable as a mesh
+                       // Q3FACETYPE_FLAT
+                       // mesh is a collection of triangles on a plane, renderable as a mesh (NOT a polygon)
                        float lightmap_origin[3];
                        float lightmap_vectors[2][3];
                        float normal[3];
                        int unused1[2];
                }
-               polygon;
+               flat;
                struct
                {
                        // Q3FACETYPE_PATCH
@@ -638,7 +675,7 @@ q3dpvs_t;
 #define Q3SURFACEPARM_ORIGIN 262144
 #define Q3SURFACEPARM_PLAYERCLIP 524288
 #define Q3SURFACEPARM_SKY 1048576
-#define Q3SURFACEPARM_SLICK 2197152
+#define Q3SURFACEPARM_SLICK 2097152
 #define Q3SURFACEPARM_SLIME 4194304
 #define Q3SURFACEPARM_STRUCTURAL 8388608
 #define Q3SURFACEPARM_TRANS 16777216
@@ -666,9 +703,10 @@ typedef struct q3mbrushside_s
 }
 q3mbrushside_t;
 
-#define CHECKPVSBIT(pvs,b) ((b) >= 0 ? ((pvs)[(b) >> 3] & (1 << ((b) & 7))) : false)
-#define SETPVSBIT(pvs,b) ((b) >= 0 ? ((pvs)[(b) >> 3] |= (1 << ((b) & 7))) : false)
-#define CLEARPVSBIT(pvs,b) ((b) >= 0 ? ((pvs)[(b) >> 3] &= ~(1 << ((b) & 7))) : false)
+// the first cast is to shut up a stupid warning by clang, the second cast is to make both sides have the same type
+#define CHECKPVSBIT(pvs,b) ((b) >= 0 ? (unsigned char) ((pvs)[(b) >> 3] & (1 << ((b) & 7))) : (unsigned char) false)
+#define SETPVSBIT(pvs,b) (void) ((b) >= 0 ? (unsigned char) ((pvs)[(b) >> 3] |= (1 << ((b) & 7))) : (unsigned char) false)
+#define CLEARPVSBIT(pvs,b) (void) ((b) >= 0 ? (unsigned char) ((pvs)[(b) >> 3] &= ~(1 << ((b) & 7))) : (unsigned char) false)
 
 #endif