From 735e6d5153ddaa6f4dfea63257e5e57f631c90e1 Mon Sep 17 00:00:00 2001 From: Marco Hladik Date: Sat, 7 Jan 2017 18:01:44 +0100 Subject: [PATCH] Bullet penetration for wood --- Source/Server/Defs.h | 2 +- Source/Server/TraceAttack.c | 9 ++++----- Source/Shared/WeaponBase.c | 2 +- Source/Shared/WeaponGlock18.c | 2 +- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/Source/Server/Defs.h b/Source/Server/Defs.h index 14668364..3f96bb72 100644 --- a/Source/Server/Defs.h +++ b/Source/Server/Defs.h @@ -142,7 +142,7 @@ void BaseMelee_Attack( void ); float Player_GetMaxSpeed( float fWeapon ); void Effect_Impact( int iType, vector vPos, vector vNormal ); -void TraceAttack_FireBullets( int iShots ); +void TraceAttack_FireBullets( int iShots, vector vPos ); void Damage_Radius( vector vOrigin, entity eAttacker, float fDamage, float fRadius ); void Damage_Apply( entity eTarget, entity eAttacker, int iDamage, vector vHitPos ); diff --git a/Source/Server/TraceAttack.c b/Source/Server/TraceAttack.c index 08cb0dfe..81ffd4e9 100644 --- a/Source/Server/TraceAttack.c +++ b/Source/Server/TraceAttack.c @@ -18,17 +18,15 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -void TraceAttack_FireBullets( int iShots ) { - vector vSrc, vDir; +void TraceAttack_FireBullets( int iShots, vector vPos ) { + vector vDir; makevectors(self.v_angle); - - vSrc = self.origin + self.view_ofs; while ( iShots > 0) { vDir = aim( self, 100000 ) + Math_CRandom()*self.fAccuracy*v_right + Math_CRandom()*self.fAccuracy*v_up; - traceline( vSrc, vSrc + ( vDir * 2048 ), MOVE_HITMODEL, self); + traceline( vPos, vPos + ( vDir * 2048 ), MOVE_HITMODEL, self); if (trace_fraction != 1.0) { if ( trace_ent.takedamage == DAMAGE_YES ) { Damage_Apply( trace_ent, self, wptTable[ self.weapon ].iDamage, trace_endpos ); @@ -49,6 +47,7 @@ void TraceAttack_FireBullets( int iShots ) { case 'D': case 'W': Effect_Impact( IMPACT_WOOD, trace_endpos, trace_plane_normal ); + TraceAttack_FireBullets( iShots, trace_endpos + ( v_forward * 2 ) ); break; case 'Y': Effect_Impact( IMPACT_GLASS, trace_endpos, trace_plane_normal ); diff --git a/Source/Shared/WeaponBase.c b/Source/Shared/WeaponBase.c index b4b983bf..b1dc8bb7 100644 --- a/Source/Shared/WeaponBase.c +++ b/Source/Shared/WeaponBase.c @@ -103,7 +103,7 @@ float OpenCSGunBase_PrimaryFire( void ) { } OpenCSGunBase_AccuracyCalc(); - TraceAttack_FireBullets( wptTable[ self.weapon ].iBullets ); + TraceAttack_FireBullets( wptTable[ self.weapon ].iBullets, ( self.origin + self.view_ofs ) ); self.(wptTable[ self.weapon ].iMagfld) -= 1; self.fAttackFinished = time + wptTable[ self.weapon ].fAttackFinished; diff --git a/Source/Shared/WeaponGlock18.c b/Source/Shared/WeaponGlock18.c index 8695b9db..a4eb7f60 100644 --- a/Source/Shared/WeaponGlock18.c +++ b/Source/Shared/WeaponGlock18.c @@ -93,7 +93,7 @@ void WeaponGLOCK18_PrimaryFire( void ) { return FALSE; } OpenCSGunBase_AccuracyCalc(); - TraceAttack_FireBullets( 3 ); + TraceAttack_FireBullets( 3, ( self.origin + self.view_ofs ) ); self.iMag_GLOCK18 -= 3; self.fAttackFinished = time + 0.5;