env_sprite: Fix predraw for modelindex based entities.
TraceAttack: Add TraceAttack_SetRangeModifier(). This will enable CS-like bullet penetration behaviour.
This commit is contained in:
parent
6ec35387ae
commit
27308ff1f4
3 changed files with 18 additions and 3 deletions
|
@ -31,8 +31,9 @@ class env_sprite:NSRenderableEntity
|
||||||
float
|
float
|
||||||
env_sprite::predraw(void)
|
env_sprite::predraw(void)
|
||||||
{
|
{
|
||||||
if (!m_strMaterial)
|
if (!m_strMaterial) {
|
||||||
return (PREDRAW_NEXT);
|
return super::predraw();
|
||||||
|
}
|
||||||
|
|
||||||
int s = (float)getproperty(VF_ACTIVESEAT);
|
int s = (float)getproperty(VF_ACTIVESEAT);
|
||||||
pSeat = &g_seats[s];
|
pSeat = &g_seats[s];
|
||||||
|
|
|
@ -41,6 +41,7 @@ void Footsteps_Update(void);
|
||||||
void TraceAttack_FireBullets(int, vector, int, vector, int);
|
void TraceAttack_FireBullets(int, vector, int, vector, int);
|
||||||
#ifdef BULLETPENETRATION
|
#ifdef BULLETPENETRATION
|
||||||
void TraceAttack_SetPenetrationPower(int);
|
void TraceAttack_SetPenetrationPower(int);
|
||||||
|
void TraceAttack_SetRangeModifier(float);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void Damage_Radius(vector, entity, float, float, int, int);
|
void Damage_Radius(vector, entity, float, float, int, int);
|
||||||
|
|
|
@ -17,6 +17,8 @@
|
||||||
entity g_multiDamage_Target;
|
entity g_multiDamage_Target;
|
||||||
int g_multiDamage_Value;
|
int g_multiDamage_Value;
|
||||||
int g_multiDamage_HitBod;
|
int g_multiDamage_HitBod;
|
||||||
|
float g_pen_flMaxThickness;
|
||||||
|
var float g_pen_flRangeMod = 1.0f;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
TraceAttack_Apply(entity eAttacker, int iWeapon)
|
TraceAttack_Apply(entity eAttacker, int iWeapon)
|
||||||
|
@ -140,7 +142,11 @@ TraceAttack_FireSingle(vector vecPos, vector vAngle, int iDamage, int iWeapon, f
|
||||||
if (iTotalPenetrations > 0) {
|
if (iTotalPenetrations > 0) {
|
||||||
if (!(trace_surfaceflagsi & SURF_PENETRATE))
|
if (!(trace_surfaceflagsi & SURF_PENETRATE))
|
||||||
iTotalPenetrations -= 1;
|
iTotalPenetrations -= 1;
|
||||||
TraceAttack_FireSingle(trace_endpos + (v_forward * 2), vAngle, iDamage / 2, iWeapon, dist);
|
|
||||||
|
float cont = pointcontents(trace_endpos + v_forward * g_pen_flMaxThickness);
|
||||||
|
|
||||||
|
if (cont == CONTENT_EMPTY)
|
||||||
|
TraceAttack_FireSingle(trace_endpos + (v_forward * 2), vAngle, iDamage / 2, iWeapon, dist);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -187,8 +193,15 @@ TraceAttack_FireBullets(int iShots, vector vecPos, int iDamage, vector vecSpread
|
||||||
|
|
||||||
#ifdef BULLETPENETRATION
|
#ifdef BULLETPENETRATION
|
||||||
void
|
void
|
||||||
|
TraceAttack_SetRangeModifier(float units)
|
||||||
|
{
|
||||||
|
g_pen_flRangeMod = units;
|
||||||
|
}
|
||||||
|
void
|
||||||
TraceAttack_SetPenetrationPower(int power)
|
TraceAttack_SetPenetrationPower(int power)
|
||||||
{
|
{
|
||||||
iTotalPenetrations = power;
|
iTotalPenetrations = power;
|
||||||
|
/* thickness equals 8 units per power times rangemodifier */
|
||||||
|
g_pen_flMaxThickness = ((8 * power) * g_pen_flRangeMod);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue