It's a shame KF doesn't have any statistics, like accuracy.
You make me laugh when you say that. Take a look at some of the kf source code and see if you change your mind.
Code:
//=============================================================================
//L85 Fire
//=============================================================================
class BullpupFire extends KFFire;
var float ClickTime;
var vector KickMomentum;
var bool bZoomed;
// Calculate modifications to spread
simulated function float GetSpread()
{
local float NewSpread;
local float AccuracyMod;
AccuracyMod = 1.0;
// Spread bonus for firing aiming
if( KFWeap.bAimingRifle )
{
AccuracyMod *= 0.5;
}
// Small spread bonus for firing crouched
if( Instigator != none && Instigator.bIsCrouched )
{
AccuracyMod *= 0.85;
}
// Small spread bonus for firing in semi auto mode
if( bWaitForRelease )
{
AccuracyMod *= 0.85;
}
NumShotsInBurst += 1;
if ( Level.TimeSeconds - LastFireTime > 0.5 )
{
NewSpread = Default.Spread;
NumShotsInBurst=0;
}
else
{
// Decrease accuracy up to MaxSpread by the number of recent shots up to a max of six
NewSpread = FMin(Default.Spread + (NumShotsInBurst * (MaxSpread/6.0)),MaxSpread);
}
NewSpread *= AccuracyMod;
return NewSpread;
}
defaultproperties
{
FireRate=0.100000
RecoilRate=0.07
maxVerticalRecoilAngle=200
maxHorizontalRecoilAngle=75
Spread=0.0085
SpreadStyle=SS_Random
}
Note: I took out several things from the default properties to shorten my post.