diff --git a/sources/Weapons/NiceFire.uc b/sources/Weapons/NiceFire.uc index a752d16..bc253e4 100644 --- a/sources/Weapons/NiceFire.uc +++ b/sources/Weapons/NiceFire.uc @@ -38,6 +38,10 @@ var bool projAffectedByScream; var bool bShouldStick; var int resetTicks; var float niceNextFireTime; +var float minimalSpreadScale; +var float activeSpreadScale; +var float spreadGainedPerShot; +var float spreadLostPerSecond; struct FireModeContext{ var bool bHipfire; var NiceWeapon sourceWeapon; @@ -152,9 +156,15 @@ simulated function int GetBurstLength(){ } return currentContext.burstLength; } + simulated function ModeTick(float delta){ local float headLevel; local NiceMonster currTarget; + if (spreadLostPerSecond > 0 && activeSpreadScale > minimalSpreadScale + && niceNextFireTime + fireRate <= Level.TimeSeconds) { + activeSpreadScale -= spreadLostPerSecond * delta; + activeSpreadScale = FMax(minimalSpreadScale, activeSpreadScale); + } if(currentContext.Instigator == none) currentContext.Instigator = NiceHumanPawn(Instigator); if(currentContext.sourceWeapon == none) @@ -548,7 +558,7 @@ function DoFireEffect(){ if(!Weapon.WeaponCentered() && !KFWeap.bAimingRifle) StartProj = StartProj + Weapon.Hand * Y * ProjSpawnOffset.Y + Z * ProjSpawnOffset.Z; other = Weapon.Trace(HitLocation, HitNormal, StartProj, StartTrace, false); - activeSpread = fireShots[currentShot].spread; + activeSpread = fireShots[currentShot].spread * activeSpreadScale; if(class'NiceVeterancyTypes'.static.hasSkill(nicePlayer, class'NiceSkillEnforcerBombard')){ bPinpoint = true; activeSpread *= class'NiceSkillEnforcerBombard'.default.spreadMult; @@ -607,6 +617,15 @@ function DoFireEffect(){ else if(Instigator.Physics == PHYS_Falling && Instigator.PhysicsVolume.Gravity.Z > class'PhysicsVolume'.default.Gravity.Z) Instigator.AddVelocity((KickMomentum * LowGravKickMomentumScale) >> Instigator.GetViewRotation()); } + if (activeSpreadScale < 1.0) { + if (KFWeap.bAimingRifle) { + activeSpreadScale += spreadGainedPerShot * 0.5; + } + else { + activeSpreadScale += spreadGainedPerShot; + } + activeSpreadScale = FMin(1.0, activeSpreadScale); + } } simulated function float TraceZed(out NiceMonster tracedZed, optional out Vector hitLoc, optional out Vector hitNorm, optional float hsMultiplier){ @@ -712,13 +731,17 @@ simulated function float UpdateNextFireTime(float fireTimeVar){ defaultproperties { - zedTimeFireSpeedUp=1.000000 - ProjPerFire=1 - ProjectileSpeed=1524.000000 - MaxBurstLength=3 - bulletClass=class'NiceBullet' - contBonus=1.200000 - contBonusReset=True - maxBonusContLenght=1 - AmmoPerFire=1 + zedTimeFireSpeedUp=1.000000 + ProjPerFire=1 + ProjectileSpeed=1524.000000 + MaxBurstLength=3 + bulletClass=class'NiceBullet' + contBonus=1.200000 + contBonusReset=True + maxBonusContLenght=1 + AmmoPerFire=1 + minimalSpreadScale=1 + activeSpreadScale=1 + spreadGainedPerShot=0 + spreadLostPerSecond=0 }