Support for Q3-based BSP material flags - for footsteps anyway

This commit is contained in:
Marco Cawthorne 2020-04-19 12:01:20 +02:00
parent ce87662850
commit 8ac5ac7c77
3 changed files with 125 additions and 2 deletions

View File

@ -48,6 +48,7 @@ entity g_eAttacker;
* we don't want this all of the time. so use this as a fallback */
.entity real_owner;
int trace_surfaceflagsi;
string startspot;
string __fullspawndata;
hashtable hashMaterials;

View File

@ -117,6 +117,79 @@ Footsteps_VVBSP(entity target)
{
string mat_name = "";
/* WIP */
if (target.flags & FL_ONGROUND) {
target.hitcontentsmaski = CONTENTBITS_POINTSOLID;
tracebox(target.origin, target.mins, target.maxs, (target.origin + [0,0,-16]), MOVE_NORMAL, target);
target.hitcontentsmaski = 0;
trace_surfaceflagsi &= ~SURF_MASK;
switch (trace_surfaceflagsi) {
case SURF_ALIEN:
mat_name = "step_alien";
break;
case SURF_FLESH:
mat_name = "step_flesh";
break;
case SURF_FOLIAGE:
mat_name = "step_foliage";
break;
case SURF_COMPUTER:
mat_name = "step_computer";
break;
case SURF_DIRT:
mat_name = "step_dirt";
break;
case SURF_VENT:
mat_name = "step_vent";
break;
case SURF_GRATE:
mat_name = "step_grate";
break;
case SURF_METAL:
mat_name = "step_metal";
break;
case SURF_GLASS:
mat_name = "step_glass";
break;
case SURF_SAND:
mat_name = "step_sand";
break;
case SURF_SLOSH:
mat_name = "step_slosh";
break;
case SURF_SNOW:
mat_name = "step_snow";
break;
case SURF_TILE:
mat_name = "step_tile";
break;
case SURF_WOOD:
mat_name = "step_wood";
break;
case SURF_CONCRETE:
mat_name = "step_concrete";
break;
default:
mat_name = "step_default";
}
} else if (target.flags & FL_ONLADDER) {
mat_name = "step_ladder";
}
if (target.iStep) {
Sound_Play(target, CHAN_BODY, sprintf("%s.left", mat_name));
} else {
Sound_Play(target, CHAN_BODY, sprintf("%s.right", mat_name));
}
}
/* anything unsupported */
void
Footsteps_Default(entity target)
{
string mat_name = "";
/* WIP */
if (target.flags & FL_ONGROUND) {
mat_name = "step_default";
@ -156,13 +229,16 @@ Footsteps_Update(void)
self.fStepTime = time + 0.35;
switch (serverkeyfloat("*bspversion")) {
case 30:
case 30: /* HL */
Footsteps_HLBSP(self);
break;
case 1:
case 46: /* Q3 */
case 47: /* RtCW */
case 1: /* RFVBSP */
Footsteps_VVBSP(self);
break;
default:
Footsteps_Default(self);
}
/* switch between feet */

View File

@ -26,3 +26,49 @@ enum
IMPACT_FLESH,
IMPACT_ROCK
};
/* TW/NEXT specific game flags */
/* q3 bsp base flags */
#define SURF_NODAMAGE 0x1i // never give falling damage
#define SURF_SLICK 0x2i // effects game physics
#define SURF_SKY 0x4i // lighting from environment map
#define SURF_LADDER 0x8i // climb this surface
#define SURF_NOIMPACT 0x10i // don't make missile explosions
#define SURF_NOMARKS 0x20i // don't leave missile marks
#define SURF_FLESH 0x40i // make flesh sounds and effects
#define SURF_NODRAW 0x80i // don't generate a drawsurface at all
#define SURF_HINT 0x100i // make a primary bsp splitter
#define SURF_SKIP 0x200i // completely ignore, allowing non-closed brushes
#define SURF_NOLIGHTMAP 0x400i // surface doesn't need a lightmap
#define SURF_POINTLIGHT 0x800i // generate lighting info at vertexes
#define SURF_METALSTEPS 0x1000i // clanking footsteps
#define SURF_NOSTEPS 0x2000i // no footstep sounds
#define SURF_NONSOLID 0x4000i // don't collide against curves with this set
#define SURF_LIGHTFILTER 0x8000i // act as a light filter during q3map -light
#define SURF_ALPHASHADOW 0x10000i // do per-pixel light shadow casting in q3map
#define SURF_NODLIGHT 0x20000i // don't dlight even if solid (solid lava, skies)
#define SURF_DUST 0x40000i // leave a dust trail when walking on this surface
// behaviour surfaceflags
#define SURF_LEAKSTEAM 0x80000i /* surface shoots steam when hit */
#define SURF_LEAKWATER 0x100000i /* surface sprays water when hit */
// material surfaceflags
#define SURF_MASK 0x0FFFFFFFi
#define SURF_ALIEN 0x10000000i
#define SURF_FLESH 0x20000000i
#define SURF_FOLIAGE 0x30000000i
#define SURF_COMPUTER 0x40000000i
#define SURF_DIRT 0x50000000i
#define SURF_VENT 0x60000000i
#define SURF_GRATE 0x70000000i
#define SURF_METAL 0x80000000i
#define SURF_GLASS 0x90000000i
#define SURF_SAND 0xA0000000i
#define SURF_SLOSH 0xB0000000i
#define SURF_SNOW 0xC0000000i
#define SURF_TILE 0xD0000000i
#define SURF_WOOD 0xE0000000i
#define SURF_CONCRETE 0xF0000000i