TraceAttack: check surfaceflags on world traces, m_iMaterial on anything
else.
This commit is contained in:
parent
d283c309cd
commit
736ecb61f8
|
@ -122,6 +122,7 @@ Weapons_SetModel(string mdl)
|
||||||
#ifdef CLIENT
|
#ifdef CLIENT
|
||||||
setmodel(pSeat->m_eViewModel, mdl);
|
setmodel(pSeat->m_eViewModel, mdl);
|
||||||
setsize(pSeat->m_eViewModel, [0,0,0], [0,0,0]);
|
setsize(pSeat->m_eViewModel, [0,0,0], [0,0,0]);
|
||||||
|
pSeat->m_eViewModel.effects |= EF_NOSHADOW;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@ BUILD_IQMTOOL=1
|
||||||
BUILD_IMGTOOL=1
|
BUILD_IMGTOOL=1
|
||||||
|
|
||||||
# Specify which engine revision to build, these are considered 'stable'; 0 = latest
|
# Specify which engine revision to build, these are considered 'stable'; 0 = latest
|
||||||
BUILD_ENGINEREVISION=6063
|
BUILD_ENGINEREVISION=6084
|
||||||
|
|
||||||
# Whether or not to run 'git pull' or 'svn up' before building a component
|
# Whether or not to run 'git pull' or 'svn up' before building a component
|
||||||
BUILD_UPDATE=1
|
BUILD_UPDATE=1
|
||||||
|
|
|
@ -105,7 +105,6 @@ const string funcbreakable_objtable[] = {
|
||||||
|
|
||||||
class func_breakable:CBaseTrigger
|
class func_breakable:CBaseTrigger
|
||||||
{
|
{
|
||||||
int m_iMaterial;
|
|
||||||
float m_flDelay;
|
float m_flDelay;
|
||||||
float m_flExplodeMag;
|
float m_flExplodeMag;
|
||||||
float m_flExplodeRad;
|
float m_flExplodeRad;
|
||||||
|
|
|
@ -70,6 +70,7 @@ class CBaseEntity
|
||||||
nonvirtual int(void) IsOnFire;
|
nonvirtual int(void) IsOnFire;
|
||||||
|
|
||||||
/* Reliable APIs */
|
/* Reliable APIs */
|
||||||
|
int m_iMaterial;
|
||||||
nonvirtual vector(void) GetSpawnOrigin;
|
nonvirtual vector(void) GetSpawnOrigin;
|
||||||
nonvirtual vector(void) GetSpawnAngles;
|
nonvirtual vector(void) GetSpawnAngles;
|
||||||
nonvirtual string(void) GetSpawnModel;
|
nonvirtual string(void) GetSpawnModel;
|
||||||
|
|
|
@ -49,6 +49,26 @@
|
||||||
#define MATID_SAND 'N'
|
#define MATID_SAND 'N'
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* other notes:
|
||||||
|
|
||||||
|
in The Wastes (2003) 'I' is sand, 'U' is plaster,
|
||||||
|
'R' is rust.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* modern additions, not implemented yet */
|
||||||
|
#define MATID_CLAY 1
|
||||||
|
#define MATID_PLASTER 2
|
||||||
|
#define MATID_ROCK 3
|
||||||
|
#define MATID_RUBBER 4
|
||||||
|
#define MATID_SHEETROCK 5
|
||||||
|
#define MATID_CLOTH 6
|
||||||
|
#define MATID_CARPET 7
|
||||||
|
#define MATID_PAPER 8
|
||||||
|
#define MATID_UPHOLSTERY 9
|
||||||
|
#define MATID_PUDDLE 10
|
||||||
|
#define MATID_MUD 11
|
||||||
|
#define MATID_SANDBARREL 12
|
||||||
|
|
||||||
void Footsteps_Init(void);
|
void Footsteps_Init(void);
|
||||||
void Footsteps_HLBSP(base_player target);
|
void Footsteps_HLBSP(base_player target);
|
||||||
void Footsteps_VVBSP(base_player target);
|
void Footsteps_VVBSP(base_player target);
|
||||||
|
|
|
@ -33,61 +33,9 @@ TraceAttack_Apply(entity eAttacker, int iWeapon)
|
||||||
g_multiDamage_Value = 0;
|
g_multiDamage_Value = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* cast a single bullet shot */
|
void
|
||||||
static void
|
TraceAttack_ImpactWorld(void)
|
||||||
TraceAttack_FireSingle(vector vecPos, vector vAngle, int iDamage, int iWeapon)
|
|
||||||
{
|
{
|
||||||
vector range;
|
|
||||||
|
|
||||||
range = (vAngle * 8196);
|
|
||||||
|
|
||||||
/* make sure we can gib corpses */
|
|
||||||
int oldhitcontents = self.hitcontentsmaski;
|
|
||||||
self.hitcontentsmaski = CONTENTBITS_POINTSOLID | CONTENTBIT_CORPSE;
|
|
||||||
traceline(vecPos, vecPos + range, MOVE_LAGGED | MOVE_HITMODEL, self);
|
|
||||||
self.hitcontentsmaski = oldhitcontents;
|
|
||||||
|
|
||||||
if (trace_fraction >= 1.0f)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (trace_ent.takedamage == DAMAGE_YES && trace_ent.iBleeds) {
|
|
||||||
Sound_Play(trace_ent, CHAN_BODY, "damage_bullet.hit");
|
|
||||||
|
|
||||||
#ifdef CSTRIKE
|
|
||||||
player pl = (player)trace_ent;
|
|
||||||
/* modify the damage based on the location */
|
|
||||||
switch (trace_surface_id) {
|
|
||||||
case BODY_HEAD:
|
|
||||||
/* the helmet is one power house */
|
|
||||||
if (pl.g_items & ITEM_HELMET) {
|
|
||||||
iDamage = 0;
|
|
||||||
Sound_Play(trace_ent, CHAN_BODY, "player.headshotarmor");
|
|
||||||
pl.g_items &= ~ITEM_HELMET;
|
|
||||||
return;
|
|
||||||
} else {
|
|
||||||
iDamage *= 4;
|
|
||||||
Sound_Play(trace_ent, CHAN_BODY, "player.headshot");
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case BODY_STOMACH:
|
|
||||||
iDamage *= 0.9;
|
|
||||||
if (pl.armor > 0)
|
|
||||||
Sound_Play(trace_ent, CHAN_BODY, "player.hitarmor");
|
|
||||||
break;
|
|
||||||
case BODY_LEGLEFT:
|
|
||||||
case BODY_LEGRIGHT:
|
|
||||||
iDamage *= 0.4;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
/* only headshots count in HL */
|
|
||||||
if (trace_surface_id == BODY_HEAD)
|
|
||||||
iDamage *= 3;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/* impact per bullet */
|
|
||||||
if (trace_ent.iBleeds == 0) {
|
|
||||||
string tex_name;
|
string tex_name;
|
||||||
float surf;
|
float surf;
|
||||||
|
|
||||||
|
@ -208,6 +156,100 @@ TraceAttack_FireSingle(vector vecPos, vector vAngle, int iDamage, int iWeapon)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* cast a single bullet shot */
|
||||||
|
static void
|
||||||
|
TraceAttack_FireSingle(vector vecPos, vector vAngle, int iDamage, int iWeapon)
|
||||||
|
{
|
||||||
|
vector range;
|
||||||
|
|
||||||
|
range = (vAngle * 8196);
|
||||||
|
|
||||||
|
/* make sure we can gib corpses */
|
||||||
|
int oldhitcontents = self.hitcontentsmaski;
|
||||||
|
self.hitcontentsmaski = CONTENTBITS_POINTSOLID | CONTENTBIT_CORPSE;
|
||||||
|
traceline(vecPos, vecPos + range, MOVE_LAGGED | MOVE_HITMODEL, self);
|
||||||
|
self.hitcontentsmaski = oldhitcontents;
|
||||||
|
|
||||||
|
if (trace_fraction >= 1.0f)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (trace_ent.takedamage == DAMAGE_YES && trace_ent.iBleeds) {
|
||||||
|
Sound_Play(trace_ent, CHAN_BODY, "damage_bullet.hit");
|
||||||
|
|
||||||
|
#ifdef CSTRIKE
|
||||||
|
player pl = (player)trace_ent;
|
||||||
|
/* modify the damage based on the location */
|
||||||
|
switch (trace_surface_id) {
|
||||||
|
case BODY_HEAD:
|
||||||
|
/* the helmet is one power house */
|
||||||
|
if (pl.g_items & ITEM_HELMET) {
|
||||||
|
iDamage = 0;
|
||||||
|
Sound_Play(trace_ent, CHAN_BODY, "player.headshotarmor");
|
||||||
|
pl.g_items &= ~ITEM_HELMET;
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
iDamage *= 4;
|
||||||
|
Sound_Play(trace_ent, CHAN_BODY, "player.headshot");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case BODY_STOMACH:
|
||||||
|
iDamage *= 0.9;
|
||||||
|
if (pl.armor > 0)
|
||||||
|
Sound_Play(trace_ent, CHAN_BODY, "player.hitarmor");
|
||||||
|
break;
|
||||||
|
case BODY_LEGLEFT:
|
||||||
|
case BODY_LEGRIGHT:
|
||||||
|
iDamage *= 0.4;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
/* only headshots count in HL */
|
||||||
|
if (trace_surface_id == BODY_HEAD)
|
||||||
|
iDamage *= 3;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/* impact per bullet */
|
||||||
|
if (trace_ent.iBleeds == 0) {
|
||||||
|
if (trace_ent == world) {
|
||||||
|
TraceAttack_ImpactWorld();
|
||||||
|
} else {
|
||||||
|
CBaseEntity foo = (CBaseEntity)trace_ent;
|
||||||
|
switch (foo.m_iMaterial) {
|
||||||
|
case BREAKMT_GLASS:
|
||||||
|
FX_Impact(IMPACT_GLASS, trace_endpos, trace_plane_normal);
|
||||||
|
break;
|
||||||
|
case BREAKMT_WOOD:
|
||||||
|
FX_Impact(IMPACT_WOOD, trace_endpos, trace_plane_normal);
|
||||||
|
break;
|
||||||
|
case BREAKMT_METAL:
|
||||||
|
FX_Impact(IMPACT_METAL, trace_endpos, trace_plane_normal);
|
||||||
|
break;
|
||||||
|
case BREAKMT_FLESH:
|
||||||
|
FX_Impact(IMPACT_FLESH, trace_endpos, trace_plane_normal);
|
||||||
|
break;
|
||||||
|
case BREAKMT_CINDER:
|
||||||
|
FX_Impact(IMPACT_CONCRETE, trace_endpos, trace_plane_normal);
|
||||||
|
break;
|
||||||
|
case BREAKMT_TILE:
|
||||||
|
FX_Impact(IMPACT_TILE, trace_endpos, trace_plane_normal);
|
||||||
|
break;
|
||||||
|
case BREAKMT_COMPUTER:
|
||||||
|
FX_Impact(IMPACT_COMPUTER, trace_endpos, trace_plane_normal);
|
||||||
|
break;
|
||||||
|
case BREAKMT_GLASS_UNBREAKABLE:
|
||||||
|
FX_Impact(IMPACT_GLASS, trace_endpos, trace_plane_normal);
|
||||||
|
break;
|
||||||
|
case BREAKMT_ROCK:
|
||||||
|
FX_Impact(IMPACT_DEFAULT, trace_endpos, trace_plane_normal);
|
||||||
|
break;
|
||||||
|
case BREAKMT_NONE:
|
||||||
|
FX_Impact(IMPACT_DEFAULT, trace_endpos, trace_plane_normal);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* combine them into one single Damage_Apply call later */
|
/* combine them into one single Damage_Apply call later */
|
||||||
if (trace_ent.takedamage == DAMAGE_YES) {
|
if (trace_ent.takedamage == DAMAGE_YES) {
|
||||||
if (trace_ent != g_multiDamage_Target) {
|
if (trace_ent != g_multiDamage_Target) {
|
||||||
|
|
15
vmap
15
vmap
|
@ -22,7 +22,7 @@ fi
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
if [ "$VMAP_NOBSP" != "1" ]; then
|
if [ "$VMAP_NOBSP" != "1" ]; then
|
||||||
"$SCRPATH"/bin/vmap -v -custinfoparms -fs_basepath "$SCRPATH" -fs_game platform -threads $BUILD_PROC -samplesize 4 $*
|
"$SCRPATH"/bin/vmap -v -custinfoparms -fs_basepath "$SCRPATH" -fs_game platform -threads $BUILD_PROC $*
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$VMAP_NOVIS" != "1" ]; then
|
if [ "$VMAP_NOVIS" != "1" ]; then
|
||||||
|
@ -39,24 +39,17 @@ if [ "$VMAP_NOLIGHT" != "1" ]; then
|
||||||
-custinfoparms \
|
-custinfoparms \
|
||||||
-fs_basepath "$SCRPATH" \
|
-fs_basepath "$SCRPATH" \
|
||||||
-v \
|
-v \
|
||||||
-dirty \
|
|
||||||
-fs_game platform \
|
-fs_game platform \
|
||||||
-bounce 8 \
|
|
||||||
-samplesize 4 \
|
|
||||||
-threads $BUILD_PROC \
|
-threads $BUILD_PROC \
|
||||||
-shade \
|
$*
|
||||||
-shadeangle 60 \
|
|
||||||
-patchshadows $*
|
|
||||||
else
|
else
|
||||||
"$SCRPATH"/bin/vmap -light \
|
"$SCRPATH"/bin/vmap -light \
|
||||||
-custinfoparms \
|
-custinfoparms \
|
||||||
-fs_basepath "$SCRPATH" \
|
-fs_basepath "$SCRPATH" \
|
||||||
-v \
|
-v \
|
||||||
-fs_game platform \
|
-fs_game platform \
|
||||||
-samplesize 64 \
|
|
||||||
-threads $BUILD_PROC \
|
-threads $BUILD_PROC \
|
||||||
-shade \
|
-fast \
|
||||||
-shadeangle 60 \
|
$*
|
||||||
-patchshadows $*
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
Loading…
Reference in New Issue