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 zhlt_hidden 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 |
Contents types
Contents are stored as a signed 32-bit integer, and are always negative.
Some entities, such as func_illusionary and func_water, allow using the skin
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 origin 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 trigger_push 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 | ||
-11 | CONTENTS_CURRENT_180 | ||
-12 | CONTENTS_CURRENT_270 | ||
-13 | CONTENTS_CURRENT_UP | ||
-14 | CONTENTS_CURRENT_DOWN | ||
-15 | CONTENTS_TRANSLUCENT (not in ) | Like water, but never solid. Despite this, it still affects VIS. | |
-16 | CONTENTS_LADDER (not in ) | Climbable. Usually set via the game code for the func_ladder entity. | |
-17 | CONTENTS_FLYFIELD (not in ) | Zero gravity | |
-18 | CONTENTS_GRAVITY_FLYFIELD (not in ) | ||
-19 | CONTENTS_FOG (not in ) |
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.