#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
#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 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
// combined mask of all attributes that require depth sorted rendering
#define MATERIALFLAGMASK_DEPTHSORTED (MATERIALFLAG_BLENDED | MATERIALFLAG_NODEPTHTEST)
}
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;
//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)
#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
}
q3dbrushside_t;
+typedef struct q3dbrushside_ig_s
+{
+ int planeindex;
+ int textureindex;
+ int surfaceflags;
+}
+q3dbrushside_ig_t;
+
typedef struct q3dvertex_s
{
float origin3f[3];
}
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?)
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
#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
#define Q3SURFACEPARM_LIGHTGRID 1073741824
#define Q3SURFACEPARM_ANTIPORTAL 2147483648u
-// various flags from shaders, used for special effects not otherwise classified
-#define Q3TEXTUREFLAG_TWOSIDED 1
-#define Q3TEXTUREFLAG_AUTOSPRITE 2
-#define Q3TEXTUREFLAG_AUTOSPRITE2 4
-#define Q3TEXTUREFLAG_NOPICMIP 16
-
typedef struct q3mbrush_s
{
struct colbrushf_s *colbrushf;