Bomb will now actually damage people in its radius...

This commit is contained in:
Marco Hladik 2016-12-07 03:35:01 +01:00
parent 1bb61a30ff
commit 59bdaba7ff
4 changed files with 52 additions and 8 deletions

View file

@ -39,3 +39,26 @@ void Damage_Apply( entity eTarget, entity eAttacker, int iDamage, vector vHitPos
self = eOld;
}
void Damage_Radius( vector vOrigin, entity eAttacker, float fDamage, float fRadius ) {
entity eDChain = findradius( vOrigin, fRadius );
while( eDChain ) {
if ( eDChain.takedamage == DAMAGE_YES ) {
float fDiff = vlen( vOrigin - eDChain.origin );
fDiff = ( fRadius - fDiff ) / fRadius;
fDamage = fDamage * fDiff;
bprint( sprintf("[DEBUG] EXPLOSION! Hit Radius: %d, Damage Multiplier: %f\n", vlen( vOrigin - eDChain.origin ), fDiff ) );
if ( fDiff > 0 ) {
Damage_Apply( eDChain, eAttacker, fDamage, eDChain.origin );
}
}
eDChain = eDChain.chain;
}
}

View file

@ -113,6 +113,7 @@ float OpenCSGunBase_Reload( void );
float Player_GetMaxSpeed( float fWeapon );
void TraceAttack_FireBullets( int iShots );
void Damage_Radius( vector vOrigin, entity eAttacker, float fDamage, float fRadius );
// WIP
string __fullspawndata;

View file

@ -105,6 +105,11 @@ void Rules_Restart( void ) {
// This can happen whenever an objective is complete or time is up
void Rules_RoundOver( int iTeamWon ) {
if ( fGameState != GAME_ACTIVE ) {
return;
}
if ( iTeamWon == TEAM_T ) {
sound( world, CHAN_VOICE, "radio/terwin.wav", 1.0, ATTN_NONE );
iWon_T++;

View file

@ -28,15 +28,15 @@ int iBombProgress;
weaponinfo_t wptC4BOMB = {
WEAPON_C4BOMB, // Identifier
SLOT_GRENADE,
650, // Price
0, // Price
CALIBER_50AE, // Caliber ID
1.0, // Max Player Speed
1, // Bullets Per Shot
1, // Clip/MagSize
54, // Damage
0, // Bullets Per Shot
0, // Clip/MagSize
500, // Damage
1, // Penetration Multiplier
64, // Bullet Range
0.81, // Range Modifier
1, // Range Modifier
TYPE_AUTO,
0.0, // Attack-Delay
0.0, // Reload-Delay
@ -60,18 +60,34 @@ void WeaponC4BOMB_Drop( vector vBombPos ) {
static void c4bomb_think( void ) {
if ( self.fAttackFinished < time ) {
Rules_RoundOver( TEAM_T );
// EXPLODE!
sound( self, CHAN_VOICE, "weapons/c4_explode1.wav", 1.0, ATTN_NONE );
Damage_Radius( self.origin, self.owner, 500, 1024 );
remove( self );
return;
}
self.nextthink = time + 0.12;
if ( self.fAttackFinished - time < 5 ) {
sound( self, CHAN_VOICE, "weapons/c4_beep5.wav", 1.0, ATTN_NORM );
} else if ( self.fAttackFinished - time < 10 ) {
sound( self, CHAN_VOICE, "weapons/c4_beep4.wav", 1.0, ATTN_NORM );
} else if ( self.fAttackFinished - time < 20 ) {
sound( self, CHAN_VOICE, "weapons/c4_beep3.wav", 1.0, ATTN_NORM );
} else if ( self.fAttackFinished - time < 30 ) {
sound( self, CHAN_VOICE, "weapons/c4_beep2.wav", 1.0, ATTN_NORM );
} else {
sound( self, CHAN_VOICE, "weapons/c4_beep1.wav", 1.0, ATTN_NORM );
}
self.nextthink = time + 1.5;
}
entity eBomb = spawn();
setorigin( eBomb, vBombPos );
setmodel( eBomb, "models/w_c4.mdl" );
eBomb.think = c4bomb_think;
eBomb.nextthink = time + 0.12;
eBomb.nextthink = time + 1.5;
eBomb.fAttackFinished = time + 45;
sound( eBomb, CHAN_WEAPON, "weapons/c4_plant.wav", 1.0, ATTN_IDLE );
sound( world, CHAN_VOICE, "radio/bombpl.wav", 1.0, ATTN_NONE );
@ -117,7 +133,6 @@ void WeaponC4BOMB_PrimaryFire( void ) {
// 3 seconds have passed, plant the bomb
if ( self.fBombProgress >= 3.0 ) {
Client_SendEvent( self, EV_WEAPON_SECONDARYATTACK ); // This means we'll drop the bomb on CSQC
WeaponC4BOMB_Drop( trace_endpos );
}
#else