BSP flags (Quake and GoldSrc)

== Surface flags ==
Despite having a 32-bit integer available to be used, most flags go unused. Vanilla Quake engines and GoldSrc only use TEX_SPECIAL.
Bit 	Flag name 	Dev comment 	Notes
0x00000001	TEX_SPECIAL 	sky or slime, no lightmap or 256 subdivision 	Surface does not have a lightmap.
Used by QBSP to tell LIGHT to not generate lightmaps for sky and liquid surfaces, which are not subdivided to account for maximum lightmap size (15x15 luxels, or 240x240 texels). ericw-tools additionally uses this on surfaces textured with .
 QCSG and HLCSG set this flag on sky surfaces and surfaces textured with .
0x00000002	TEX_MISSING 	johnfitz -- this texinfo does not have a texture 	Used by fitzquake and derivatives to indicate a missing texture
0x00000800	??? 	N/A 	Used by VERTEXNORMALS BSPX lump to indicate a face that should have smooth shading based upon its vertex normals.
0x00004000	TEX_SHOULDHIDE	this flag is temporary; it might be set after CSG, but will be dropped after BSP	Used by VHLT; set if is set. Tells HLBSP to not add the face to any visleaves, and will result in HLRAD not reflecting light off of the face.
Texture names with the suffix will yield the same result, without using this surface flag.
== Contents types ==
Contents are stored as a signed 32-bit integer, and are always negative. 
Some entities, such as and , allow using the KV to override the contents of the entity.
Value	Internal name 	Dev comment 	Notes
-1 	CONTENTS_EMPTY 	 	Non-solid, and doesn't affect VIS.
-2 	CONTENTS_SOLID 	 	Default.
-3 	CONTENTS_WATER 	 	A liquid, usually water. Textures with the prefix are usually water when part of worldspawn, unless they are slime, lava, or a current.
-4 	CONTENTS_SLIME 	 	Like water, deals damage to the player and some monsters when touched.
-5 	CONTENTS_LAVA 	 	Like slime, but deals double the damage.
-6 	CONTENTS_SKY 	 	
-7 	CONTENTS_ORIGIN 	removed at csg time 	Replaces an entity's KV, then is removed by CSG (does not exist in compiled BSP).
In GoldSrc, if a brush has this contents at runtime, it will be treated like water (and is referred to in FGDs as "volumetric light").
-8 	CONTENTS_CLIP 	changed to contents_solid	
-9 	CONTENTS_CURRENT_0 	 	Acts like water combined with a with a speed of 2048 in the given direction.
In Quake, this is treated as regular water, being commented out with an .
-10 	CONTENTS_CURRENT_90 	 	Acts like water combined with a with a speed of 2048 in the given direction.
In Quake, this is treated as regular water, being commented out with an .
-11 	CONTENTS_CURRENT_180 	 	Acts like water combined with a with a speed of 2048 in the given direction.
In Quake, this is treated as regular water, being commented out with an .
-12 	CONTENTS_CURRENT_270 	 	Acts like water combined with a with a speed of 2048 in the given direction.
In Quake, this is treated as regular water, being commented out with an .
-13 	CONTENTS_CURRENT_UP 	 	Acts like water combined with a with a speed of 2048 in the given direction.
In Quake, this is treated as regular water, being commented out with an .
-14 	CONTENTS_CURRENT_DOWN 	 	Acts like water combined with a with a speed of 2048 in the given direction.
In Quake, this is treated as regular water, being commented out with an .
-15 	CONTENTS_TRANSLUCENT 	 	Like water, but never solid. Despite this, it still affects VIS.
-16 	CONTENTS_LADDER 	 	Climbable. Usually set via the game code for the func_ladder entity.
-17 	CONTENTS_FLYFIELD 	 	Zero gravity
-18 	CONTENTS_GRAVITY_FLYFIELD	 	
-19 	CONTENTS_FOG 	 	
== Ambient Types ==
Ambients are stored as an array of 4 unsigned bytes, indicating volume. Only Quake uses them, and it only uses AMBIENT_SKY and AMBIENT_WATER, which are hardcoded in the engine to play specific sounds when a visleaf containing the given ambient type is in the current PVS.
Index	Name 	Notes
0 	AMBIENT_WATER	Normally cast by any liquid ( prefix in ; prefix in ), unless they are slime or lava.
1 	AMBIENT_SKY 	Normally cast by sky brushes ( prefix)
2 	AMBIENT_SLIME	Normally cast by slime brushes ( prefix in ; prefix in )
3 	AMBIENT_LAVA 	Normally cast by lava brushes ( prefix in ; prefix in )
== See also ==
* Texture prefixes