class ScrnNailGunFire extends NailGunFire; var float SingleSpread; //spead in single nail mode var string SingleFireSoundRef; var string StereoSingleFireSoundRef; var() Sound SingleFireSound; var() Sound StereoSingleFireSound; var() Sound MultiFireSound; // used for backing up default FireSound var() Sound StereoMultiFireSound; static function PreloadAssets(LevelInfo LevelInfo, optional KFShotgunFire Spawned) { local ScrnNailGunFire ScrnSpawned; super.PreloadAssets(LevelInfo, Spawned); if ( default.SingleFireSoundRef != "" ) { default.SingleFireSound = sound(DynamicLoadObject(default.SingleFireSoundRef, class'Sound', true)); } if ( LevelInfo.bLowSoundDetail ) { default.StereoSingleFireSound = default.SingleFireSound; } else { if ( default.StereoSingleFireSoundRef == "" ) { default.StereoSingleFireSound = sound(DynamicLoadObject(default.StereoSingleFireSoundRef, class'Sound', true)); } if ( default.StereoSingleFireSound == none ) default.StereoSingleFireSound = default.SingleFireSound; } default.MultiFireSound = default.FireSound; default.StereoMultiFireSound = default.StereoMultiFireSound; ScrnSpawned = ScrnNailGunFire(Spawned); if ( ScrnSpawned != none ) { ScrnSpawned.SingleFireSound = default.SingleFireSound; ScrnSpawned.StereoSingleFireSound = default.StereoSingleFireSound; ScrnSpawned.MultiFireSound = default.MultiFireSound; ScrnSpawned.StereoMultiFireSound = default.StereoMultiFireSound; } } static function bool UnloadAssets() { default.SingleFireSound = none; default.StereoSingleFireSound = none; default.MultiFireSound = none; default.StereoMultiFireSound = none; return super.UnloadAssets(); } function projectile SpawnProjectile(Vector Start, Rotator Dir) { local Projectile p; local ScrnNailGunProjectile nail; local ScrnNailGun w; p = super.SpawnProjectile(Start, Dir); nail = ScrnNailGunProjectile(p); w = ScrnNailGun(Weapon); if ( nail != none && w != none ) { nail.ach_Nail100m = w.ach_Nail100m; nail.ach_NailToWall = w.ach_NailToWall; nail.ach_PushShiver = w.ach_PushShiver; nail.ach_ProNailer = w.ach_ProNailer; } return p; } function ModeDoFire() { local float Rec; if (!AllowFire()) return; Load = min(AmmoPerFire, KFWeapon(Weapon).MagAmmoRemaining); // must set it before fire in case player just changed fire mode Rec = GetFireSpeed(); FireRate = default.FireRate/Rec; FireAnimRate = default.FireAnimRate*Rec; Rec = 1; if ( Load == 1 ) { Spread = SingleSpread; KickMomentum = vect(0,0,0); FireSound = SingleFireSound; StereoFireSound = StereoSingleFireSound; } else { Spread = default.Spread; KickMomentum = default.KickMomentum; FireSound = MultiFireSound; StereoFireSound = StereoMultiFireSound; } if ( KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo) != none && KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo).ClientVeteranSkill != none ) { Spread *= KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo).ClientVeteranSkill.Static.ModifyRecoilSpread(KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo), self, Rec); } if( !bFiringDoesntAffectMovement ) { if (FireRate > 0.25) { Instigator.Velocity.x *= 0.1; Instigator.Velocity.y *= 0.1; } else { Instigator.Velocity.x *= 0.5; Instigator.Velocity.y *= 0.5; } } super(BaseProjectileFire).ModeDoFire(); // client if (Instigator.IsLocallyControlled()) { HandleRecoil(Rec); } } defaultproperties { SingleSpread=0.200000 SingleFireSoundRef="KF_NailShotgun.KF_NailShotgun_Fire_Alt_M" StereoSingleFireSoundRef="KF_NailShotgun.KF_NailShotgun_Fire_Alt_S" ProjPerFire=1 FireAnimRate=1.250000 FireRate=0.400000 AmmoClass=Class'ScrnBalanceSrv.ScrnNailGunAmmo' AmmoPerFire=7 ProjectileClass=Class'ScrnBalanceSrv.ScrnNailGunProjectile' Spread=1750.000000 }