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:
Marco Cawthorne 2022-04-24 00:23:38 -07:00
parent 6ec35387ae
commit 27308ff1f4
Signed by: eukara
GPG key ID: C196CD8BA993248A
3 changed files with 18 additions and 3 deletions

View file

@ -31,8 +31,9 @@ class env_sprite:NSRenderableEntity
float
env_sprite::predraw(void)
{
if (!m_strMaterial)
return (PREDRAW_NEXT);
if (!m_strMaterial) {
return super::predraw();
}
int s = (float)getproperty(VF_ACTIVESEAT);
pSeat = &g_seats[s];

View file

@ -41,6 +41,7 @@ void Footsteps_Update(void);
void TraceAttack_FireBullets(int, vector, int, vector, int);
#ifdef BULLETPENETRATION
void TraceAttack_SetPenetrationPower(int);
void TraceAttack_SetRangeModifier(float);
#endif
void Damage_Radius(vector, entity, float, float, int, int);

View file

@ -17,6 +17,8 @@
entity g_multiDamage_Target;
int g_multiDamage_Value;
int g_multiDamage_HitBod;
float g_pen_flMaxThickness;
var float g_pen_flRangeMod = 1.0f;
static void
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 (!(trace_surfaceflagsi & SURF_PENETRATE))
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
}
@ -187,8 +193,15 @@ TraceAttack_FireBullets(int iShots, vector vecPos, int iDamage, vector vecSpread
#ifdef BULLETPENETRATION
void
TraceAttack_SetRangeModifier(float units)
{
g_pen_flRangeMod = units;
}
void
TraceAttack_SetPenetrationPower(int power)
{
iTotalPenetrations = power;
/* thickness equals 8 units per power times rangemodifier */
g_pen_flMaxThickness = ((8 * power) * g_pen_flRangeMod);
}
#endif