From 9903ed259700183090ccfa13749b237ee0d6abb8 Mon Sep 17 00:00:00 2001 From: Kawe Mazidjatari <48657826+Mauler125@users.noreply.github.com> Date: Sat, 21 Jan 2023 16:38:55 +0100 Subject: [PATCH] Add bsp flags from source sdk --- r5dev/public/bspflags.h | 156 ++++++++++++++++++++++++++ r5dev/vproj/clientsdk.vcxproj | 1 + r5dev/vproj/clientsdk.vcxproj.filters | 3 + r5dev/vproj/dedicated.vcxproj | 1 + r5dev/vproj/dedicated.vcxproj.filters | 3 + r5dev/vproj/gamesdk.vcxproj | 1 + r5dev/vproj/gamesdk.vcxproj.filters | 3 + 7 files changed, 168 insertions(+) create mode 100644 r5dev/public/bspflags.h diff --git a/r5dev/public/bspflags.h b/r5dev/public/bspflags.h new file mode 100644 index 00000000..98fcea68 --- /dev/null +++ b/r5dev/public/bspflags.h @@ -0,0 +1,156 @@ +//====== Copyright � 1996-2005, Valve Corporation, All rights reserved. =======// +// +// Purpose: +// +// $Workfile: $ +// $Date: $ +// $NoKeywords: $ +//=============================================================================// + +#ifndef BSPFLAGS_H +#define BSPFLAGS_H + +#ifdef _WIN32 +#pragma once +#endif + +// contents flags are seperate bits +// a given brush can contribute multiple content bits +// multiple brushes can be in a single leaf + +// these definitions also need to be in q_shared.h! + +// lower bits are stronger, and will eat weaker brushes completely +#define CONTENTS_EMPTY 0 // No contents + +#define CONTENTS_SOLID 0x1 // an eye is never valid in a solid +#define CONTENTS_WINDOW 0x2 // translucent, but not watery (glass) +#define CONTENTS_AUX 0x4 +#define CONTENTS_GRATE 0x8 // alpha-tested "grate" textures. Bullets/sight pass through, but solids don't +#define CONTENTS_SLIME 0x10 +#define CONTENTS_WATER 0x20 +#define CONTENTS_BLOCKLOS 0x40 // block AI line of sight +#define CONTENTS_OPAQUE 0x80 // things that cannot be seen through (may be non-solid though) +#define LAST_VISIBLE_CONTENTS CONTENTS_OPAQUE + +#define ALL_VISIBLE_CONTENTS (LAST_VISIBLE_CONTENTS | (LAST_VISIBLE_CONTENTS-1)) + +#define CONTENTS_TESTFOGVOLUME 0x100 +#define CONTENTS_UNUSED 0x200 + +// unused +// NOTE: If it's visible, grab from the top + update LAST_VISIBLE_CONTENTS +// if not visible, then grab from the bottom. +// CONTENTS_OPAQUE + SURF_NODRAW count as CONTENTS_OPAQUE (shadow-casting toolsblocklight textures) +#define CONTENTS_BLOCKLIGHT 0x400 + +#define CONTENTS_TEAM1 0x800 // per team contents used to differentiate collisions +#define CONTENTS_TEAM2 0x1000 // between players and objects on different teams + +// ignore CONTENTS_OPAQUE on surfaces that have SURF_NODRAW +#define CONTENTS_IGNORE_NODRAW_OPAQUE 0x2000 + +// hits entities which are MOVETYPE_PUSH (doors, plats, etc.) +#define CONTENTS_MOVEABLE 0x4000 + +// remaining contents are non-visible, and don't eat brushes +#define CONTENTS_AREAPORTAL 0x8000 + +#define CONTENTS_PLAYERCLIP 0x10000 +#define CONTENTS_MONSTERCLIP 0x20000 + +#define CONTENTS_BRUSH_PAINT 0x40000 +#define CONTENTS_GRENADECLIP 0x80000 +#define CONTENTS_UNUSED2 0x100000 +#define CONTENTS_UNUSED3 0x200000 +#define CONTENTS_UNUSED4 0x400000 +#define CONTENTS_UNUSED5 0x800000 + +#define CONTENTS_ORIGIN 0x1000000 // removed before bsping an entity + +#define CONTENTS_MONSTER 0x2000000 // should never be on a brush, only in game +#define CONTENTS_DEBRIS 0x4000000 +#define CONTENTS_DETAIL 0x8000000 // brushes to be added after vis leafs +#define CONTENTS_TRANSLUCENT 0x10000000 // auto set if any surface has trans +#define CONTENTS_LADDER 0x20000000 +#define CONTENTS_HITBOX 0x40000000 // use accurate hitboxes on trace + +// NOTE: These are stored in a short in the engine now. Don't use more than 16 bits +#define SURF_LIGHT 0x0001 // value will hold the light strength +#define SURF_SKY2D 0x0002 // don't draw, indicates we should skylight + draw 2d sky but not draw the 3D skybox +#define SURF_SKY 0x0004 // don't draw, but add to skybox +#define SURF_WARP 0x0008 // turbulent water warp +#define SURF_TRANS 0x0010 +#define SURF_NOPORTAL 0x0020 // the surface can not have a portal placed on it +#define SURF_TRIGGER 0x0040 // FIXME: This is an xbox hack to work around elimination of trigger surfaces, which breaks occluders +#define SURF_NODRAW 0x0080 // don't bother referencing the texture + +#define SURF_HINT 0x0100 // make a primary bsp splitter + +#define SURF_SKIP 0x0200 // completely ignore, allowing non-closed brushes +#define SURF_NOLIGHT 0x0400 // Don't calculate light +#define SURF_BUMPLIGHT 0x0800 // calculate three lightmaps for the surface for bumpmapping +#define SURF_NOSHADOWS 0x1000 // Don't receive shadows +#define SURF_NODECALS 0x2000 // Don't receive decals +#define SURF_NOPAINT SURF_NODECALS // the surface can not have paint placed on it +#define SURF_NOCHOP 0x4000 // Don't subdivide patches on this surface +#define SURF_HITBOX 0x8000 // surface is part of a hitbox + + + +// ----------------------------------------------------- +// spatial content masks - used for spatial queries (traceline,etc.) +// ----------------------------------------------------- +#define MASK_ALL (0xFFFFFFFF) +// everything that is normally solid +#define MASK_SOLID (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_WINDOW|CONTENTS_MONSTER|CONTENTS_GRATE) +// everything that blocks player movement +#define MASK_PLAYERSOLID (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_PLAYERCLIP|CONTENTS_WINDOW|CONTENTS_MONSTER|CONTENTS_GRATE) +// blocks npc movement +#define MASK_NPCSOLID (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_MONSTERCLIP|CONTENTS_WINDOW|CONTENTS_MONSTER|CONTENTS_GRATE) +// blocks fluid movement +#define MASK_NPCFLUID (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_MONSTERCLIP|CONTENTS_WINDOW|CONTENTS_MONSTER) +// water physics in these contents +#define MASK_WATER (CONTENTS_WATER|CONTENTS_MOVEABLE|CONTENTS_SLIME) +// everything that blocks lighting +#define MASK_OPAQUE (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_OPAQUE) +// everything that blocks lighting, but with monsters added. +#define MASK_OPAQUE_AND_NPCS (MASK_OPAQUE|CONTENTS_MONSTER) +// everything that blocks line of sight for AI +#define MASK_BLOCKLOS (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_BLOCKLOS) +// everything that blocks line of sight for AI plus NPCs +#define MASK_BLOCKLOS_AND_NPCS (MASK_BLOCKLOS|CONTENTS_MONSTER) +// everything that blocks line of sight for players +#define MASK_VISIBLE (MASK_OPAQUE|CONTENTS_IGNORE_NODRAW_OPAQUE) +// everything that blocks line of sight for players, but with monsters added. +#define MASK_VISIBLE_AND_NPCS (MASK_OPAQUE_AND_NPCS|CONTENTS_IGNORE_NODRAW_OPAQUE) +// bullets see these as solid +#define MASK_SHOT (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_MONSTER|CONTENTS_WINDOW|CONTENTS_DEBRIS|CONTENTS_HITBOX) +// for finding floor height +#define MASK_FLOORTRACE (CONTENTS_SOLID|CONTENTS_MOVEABLE| CONTENTS_WINDOW|CONTENTS_DEBRIS) +// for csgo weapon clipping +#define MASK_WEAPONCLIPPING (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_MONSTER|CONTENTS_WINDOW|CONTENTS_DEBRIS) +// bullets see these as solid, except monsters (world+brush only) +#define MASK_SHOT_BRUSHONLY (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_WINDOW|CONTENTS_DEBRIS) +// non-raycasted weapons see this as solid (includes grates) +#define MASK_SHOT_HULL (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_MONSTER|CONTENTS_WINDOW|CONTENTS_DEBRIS|CONTENTS_GRATE) +// hits solids (not grates) and passes through everything else +#define MASK_SHOT_PORTAL (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_WINDOW|CONTENTS_MONSTER) +// everything normally solid, except monsters (world+brush only) +#define MASK_SOLID_BRUSHONLY (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_WINDOW|CONTENTS_GRATE) +// everything normally solid for player movement, except monsters (world+brush only) +#define MASK_PLAYERSOLID_BRUSHONLY (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_WINDOW|CONTENTS_PLAYERCLIP|CONTENTS_GRATE) +// everything normally solid for npc movement, except monsters (world+brush only) +#define MASK_NPCSOLID_BRUSHONLY (CONTENTS_SOLID|CONTENTS_MOVEABLE|CONTENTS_WINDOW|CONTENTS_MONSTERCLIP|CONTENTS_GRATE) +// just the world, used for route rebuilding +#define MASK_NPCWORLDSTATIC (CONTENTS_SOLID|CONTENTS_WINDOW|CONTENTS_MONSTERCLIP|CONTENTS_GRATE) +// just the world, used for route rebuilding +#define MASK_NPCWORLDSTATIC_FLUID (CONTENTS_SOLID|CONTENTS_WINDOW|CONTENTS_MONSTERCLIP) +// These are things that can split areaportals +#define MASK_SPLITAREAPORTAL (CONTENTS_WATER|CONTENTS_SLIME) + +// everything that blocks corpse movement +// UNDONE: Not used yet / may be deleted +#define MASK_DEADSOLID (CONTENTS_SOLID|CONTENTS_PLAYERCLIP|CONTENTS_WINDOW|CONTENTS_GRATE) + +#endif // BSPFLAGS_H diff --git a/r5dev/vproj/clientsdk.vcxproj b/r5dev/vproj/clientsdk.vcxproj index 775c4029..43b4c041 100644 --- a/r5dev/vproj/clientsdk.vcxproj +++ b/r5dev/vproj/clientsdk.vcxproj @@ -289,6 +289,7 @@ <ClInclude Include="..\public\avi\ibik.h" /> <ClInclude Include="..\public\basehandle.h" /> <ClInclude Include="..\public\bitmap\stb_image.h" /> + <ClInclude Include="..\public\bspflags.h" /> <ClInclude Include="..\public\cmodel.h" /> <ClInclude Include="..\public\datamap.h" /> <ClInclude Include="..\public\dt_common.h" /> diff --git a/r5dev/vproj/clientsdk.vcxproj.filters b/r5dev/vproj/clientsdk.vcxproj.filters index a2cb256d..f060bd5e 100644 --- a/r5dev/vproj/clientsdk.vcxproj.filters +++ b/r5dev/vproj/clientsdk.vcxproj.filters @@ -1964,6 +1964,9 @@ <ClInclude Include="..\public\trace.h"> <Filter>sdk\public</Filter> </ClInclude> + <ClInclude Include="..\public\bspflags.h"> + <Filter>sdk\public</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <Image Include="..\shared\resource\lockedserver.png"> diff --git a/r5dev/vproj/dedicated.vcxproj b/r5dev/vproj/dedicated.vcxproj index cb4885bb..551fe8a7 100644 --- a/r5dev/vproj/dedicated.vcxproj +++ b/r5dev/vproj/dedicated.vcxproj @@ -239,6 +239,7 @@ <ClInclude Include="..\protoc\sv_rcon.pb.h" /> <ClInclude Include="..\public\baseentity.h" /> <ClInclude Include="..\public\basehandle.h" /> + <ClInclude Include="..\public\bspflags.h" /> <ClInclude Include="..\public\cmodel.h" /> <ClInclude Include="..\public\datamap.h" /> <ClInclude Include="..\public\dt_common.h" /> diff --git a/r5dev/vproj/dedicated.vcxproj.filters b/r5dev/vproj/dedicated.vcxproj.filters index e61b8be6..e7d5ce05 100644 --- a/r5dev/vproj/dedicated.vcxproj.filters +++ b/r5dev/vproj/dedicated.vcxproj.filters @@ -1389,6 +1389,9 @@ <ClInclude Include="..\public\trace.h"> <Filter>sdk\public</Filter> </ClInclude> + <ClInclude Include="..\public\bspflags.h"> + <Filter>sdk\public</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <ClCompile Include="..\common\opcodes.cpp"> diff --git a/r5dev/vproj/gamesdk.vcxproj b/r5dev/vproj/gamesdk.vcxproj index 4f0b3155..4db90316 100644 --- a/r5dev/vproj/gamesdk.vcxproj +++ b/r5dev/vproj/gamesdk.vcxproj @@ -330,6 +330,7 @@ <ClInclude Include="..\public\baseentity.h" /> <ClInclude Include="..\public\basehandle.h" /> <ClInclude Include="..\public\bitmap\stb_image.h" /> + <ClInclude Include="..\public\bspflags.h" /> <ClInclude Include="..\public\cmodel.h" /> <ClInclude Include="..\public\datamap.h" /> <ClInclude Include="..\public\dt_common.h" /> diff --git a/r5dev/vproj/gamesdk.vcxproj.filters b/r5dev/vproj/gamesdk.vcxproj.filters index 8d93902a..9c051bb5 100644 --- a/r5dev/vproj/gamesdk.vcxproj.filters +++ b/r5dev/vproj/gamesdk.vcxproj.filters @@ -2120,6 +2120,9 @@ <ClInclude Include="..\public\trace.h"> <Filter>sdk\public</Filter> </ClInclude> + <ClInclude Include="..\public\bspflags.h"> + <Filter>sdk\public</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <Image Include="..\shared\resource\lockedserver.png">