Index: src/game/g_local.h =================================================================== --- src/game/g_local.h (revision 789) +++ src/game/g_local.h (working copy) @@ -809,6 +809,7 @@ int numTargets; int timeToLive; + int damageUsed; gentity_t *effectChannel; } zap_t; Index: src/game/g_weapon.c =================================================================== --- src/game/g_weapon.c (revision 789) +++ src/game/g_weapon.c (working copy) @@ -1166,13 +1166,20 @@ damage = ceil( ( (float)msec / LEVEL2_AREAZAP_TIME ) * LEVEL2_AREAZAP_DMG * damageFraction ); + // don't let a high msec value inflate the total damage + if( damage + zap->damageUsed > LEVEL2_AREAZAP_DMG ) + damage = LEVEL2_AREAZAP_DMG - zap->damageUsed; + VectorSubtract( target->s.origin, source->s.origin, forward ); VectorNormalize( forward ); //do the damage if( damage ) + { G_Damage( target, source, zap->creator, forward, target->s.origin, damage, DAMAGE_NO_KNOCKBACK | DAMAGE_NO_LOCDAMAGE, MOD_LEVEL2_ZAP ); + zap->damageUsed += damage; + } } }