class MeanHuskFireProjectile extends NiceHuskFireProjectile;
simulated singular function Touch(Actor Other){
    local vector    HitLocation, HitNormal;
    //Don't touch bulletwhip attachment.  Taken from HuskFireProjectile
    if ( Other == none || KFBulletWhipAttachment(Other) != none )
       return;
    if ( Other.bProjTarget || Other.bBlockActors ) {
       LastTouched = Other;
       if ( Velocity == vect(0,0,0) || Other.IsA('Mover') ) {
           ProcessTouch(Other,Location);
           LastTouched = none;
           return;
       }

       if ( Other.TraceThisActor(HitLocation, HitNormal, Location, Location - 2*Velocity, GetCollisionExtent()) )
           HitLocation = Location;

       ProcessTouch(Other, HitLocation);
       LastTouched = none;
       if ( (Role < ROLE_Authority) && (Other.Role == ROLE_Authority) && (Pawn(Other) != none) )
           ClientSideTouch(Other, HitLocation);
    }
}
// Don't hit Zed extra collision cylinders
simulated function ProcessTouch(Actor Other, Vector HitLocation) {
    // Don't let it hit this player, or blow up on another player
    if (Other == none || Other == Instigator || Other.Base == Instigator)
       return;
    // Don't collide with bullet whip attachments
    if (KFBulletWhipAttachment(Other) != none) {
       return;
    }
    // Use the instigator's location if it exists. This fixes issues with
    // the original location of the projectile being really far away from
    // the real Origloc due to it taking a couple of milliseconds to
    // replicate the location to the client and the first replicated location has
    // already moved quite a bit.
    if (Instigator != none) {
       OrigLoc = Instigator.Location;
    }
    if (!bDud && ((VSizeSquared(Location - OrigLoc) < ArmDistSquared) || OrigLoc == vect(0,0,0))) {
       if( Role == ROLE_Authority ) {
           AmbientSound=none;
           PlaySound(Sound'ProjectileSounds.PTRD_deflect04',,2.0);
           Other.TakeDamage( ImpactDamage, Instigator, HitLocation, Normal(Velocity), ImpactDamageType );
       }

       bDud = true;
       Velocity = vect(0,0,0);
       LifeSpan=1.0;
       SetPhysics(PHYS_Falling);
    }
    if (!bDud) {
      Explode(HitLocation,Normal(HitLocation-Other.Location));
    }
}
defaultproperties
{
    additionalDamagePart=0.250000
}
