BSP flags (Quake and GoldSrc): Difference between revisions
SirYodaJedi (talk | contribs) No edit summary |
SirYodaJedi (talk | contribs) |
||
| (5 intermediate revisions by 2 users not shown) | |||
| Line 12: | Line 12: | ||
{{goldsrc}} [[QCSG]] and [[HLCSG]] set this flag on sky surfaces and surfaces textured with {{code|AAATRIGGER}}. | {{goldsrc}} [[QCSG]] and [[HLCSG]] set this flag on sky surfaces and surfaces textured with {{code|AAATRIGGER}}. | ||
{{bug|[[QCSG]] and [[HLCSG]] still use {{code|<nowiki>*</nowiki>}} to declare liquids as not lightmapped, even though they are prefixed with {{code|!}} instead. Therefore, [[QRAD]] and [[HLRAD]] will always lightmap all liquid surfaces, unless they are flagged in some other manner, such as using {{newbspguy|4.1}}.}} | {{bug|hidetested=1|[[QCSG]] and [[HLCSG]] still use {{code|<nowiki>*</nowiki>}} to declare liquids as not lightmapped, even though they are prefixed with {{code|!}} instead. Therefore, [[QRAD]] and [[HLRAD]] will always lightmap all liquid surfaces, unless they are flagged in some other manner, such as using {{newbspguy|4.1}}.}} | ||
|- | |- | ||
| 0x00000002 || TEX_MISSING || johnfitz -- this texinfo does not have a texture || Used by fitzquake and derivatives to indicate a missing texture | | 0x00000002 || TEX_MISSING || johnfitz -- this texinfo does not have a texture || Used by fitzquake and derivatives to indicate a missing texture | ||
| Line 26: | Line 26: | ||
== Contents types == | == Contents types == | ||
Contents are stored as a signed 32-bit integer, and are always negative. | Contents are stored as a signed 32-bit integer, and are always negative. | ||
Entities are always CONTENTS_SOLID; in {{goldsrc|2}}, the {{code|skin}} KV to override the contents of any brush entity that inherits [[CBaseAnimating (GoldSrc)|CBaseAnimating]], but the entity collision type must also be set accordingly. | |||
{{clarify|Contents are stored in visleaves somehow, not directly in clipnodes.}} | {{clarify|Contents are stored in visleaves somehow, not directly in clipnodes. This is probably related to why they're always negative.}} | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
| Line 84: | Line 84: | ||
! Index !! Name !! Notes | ! Index !! Name !! Notes | ||
|- | |- | ||
| 0 || AMBIENT_WATER || Normally cast by | | 0 || AMBIENT_WATER || Normally cast by faces with the following prefixes: | ||
* {{quake}} {{code|<nowiki>*water</nowiki>}}, {{code|<nowiki>*04water</nowiki>}}, {{code|<nowiki>*slime</nowiki>}} | |||
* {{goldsrc}} {{code|!water}}, {{code|!04water}}, {{code|!slime}} | |||
|- | |- | ||
| 1 || AMBIENT_SKY || Normally cast by | | 1 || AMBIENT_SKY || Normally cast by faces with the {{code|sky}} prefix | ||
|- | |- | ||
| 2 || AMBIENT_SLIME || | | 2 || AMBIENT_SLIME || Unused; slime textures cast water ambients instead in most compilers | ||
|- | |- | ||
| 3 || AMBIENT_LAVA || Normally cast by | | 3 || AMBIENT_LAVA || Normally cast by faces with the following prefixes: | ||
* {{quake}} {{code|<nowiki>*lava</nowiki>}} | |||
* {{goldsrc}} {{code|!lava}} | |||
|} | |} | ||
{{note|As of 2.0.0-alpha11, [[ericw-tools]] will use both {{code|!}} and <code>*</code> prefixes for casting ambients.}} | |||
== See also == | == See also == | ||
* [[Texture prefixes]] | * [[Texture prefixes]] | ||
Latest revision as of 09:05, 21 November 2025
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
|
| 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.
Entities are always CONTENTS_SOLID; in
GoldSrc, the skin KV to override the contents of any brush entity that inherits CBaseAnimating, but the entity collision type must also be set accordingly.
| 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.
| Index | Name | Notes |
|---|---|---|
| 0 | AMBIENT_WATER | Normally cast by faces with the following prefixes: |
| 1 | AMBIENT_SKY | Normally cast by faces with the sky prefix
|
| 2 | AMBIENT_SLIME | Unused; slime textures cast water ambients instead in most compilers |
| 3 | AMBIENT_LAVA | Normally cast by faces with the following prefixes: |
! and * prefixes for casting ambients.