Support for Q3-based BSP material flags - for footsteps anyway
This commit is contained in:
parent
ce87662850
commit
8ac5ac7c77
3 changed files with 125 additions and 2 deletions
|
@ -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;
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue