This article's documentation is for the "GoldSrc" engine. Click here for more information.
Quake1-16px.png

BSP flags (Quake and GoldSrc)

From Valve Developer Community
Jump to navigation Jump to search

edit
Todo: Better page name; these aren't actually flags, except for the surface flags.

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 Quake 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 TRIGGER.

GoldSrc QCSG and HLCSG set this flag on sky surfaces and surfaces textured with AAATRIGGER.

Icon-Bug.pngBug:QCSG and HLCSG still use * to declare liquids as not lightmapped, even though they are prefixed with ! instead. Therefore, QRAD and HLRAD will always lightmap all liquid surfaces, unless they are flagged in some other manner, such as using newbspguy newbspguy.  [todo tested in?]
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 _HIDDEN 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 func_illusionary and func_water, allow using the skin KV to override the contents of the entity.

Clarify: Contents are stored in visleaves somehow, not directly in clipnodes.
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 #ifdef QUAKE2.

-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 Quake) Like water, but never solid. Despite this, it still affects VIS.
-16 CONTENTS_LADDER (not in Quake) Climbable. Usually set via the game code for the func_ladder entity.
-17 CONTENTS_FLYFIELD (not in Quake) Zero gravity
-18 CONTENTS_GRAVITY_FLYFIELD (not in Quake)
-19 CONTENTS_FOG (not in Quake)

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.

Confirm:Probably only affected by world brushes, so probably not cast by func_water.
Index Name Notes
0 AMBIENT_WATER Normally cast by any liquid (* prefix in Quake; ! prefix in GoldSrc), unless they are slime or lava.
1 AMBIENT_SKY Normally cast by sky brushes (sky prefix)
2 AMBIENT_SLIME Normally cast by slime brushes (*slime prefix in Quake; !slime prefix in GoldSrc)
3 AMBIENT_LAVA Normally cast by lava brushes (*lava prefix in Quake; !lava prefix in GoldSrc)

See also