class NiceHighROFFire extends NiceFire; // sound var sound FireEndSound; // The sound to play at the end of the ambient fire sound var sound FireEndStereoSound; // The sound to play at the end of the ambient fire sound in first person stereo var float AmbientFireSoundRadius; // The sound radius for the ambient fire sound var sound AmbientFireSound; // How loud to play the looping ambient fire sound var byte AmbientFireVolume; // The ambient fire sound var string FireEndSoundRef; var string FireEndStereoSoundRef; var string AmbientFireSoundRef; //MEANTODO static function PreloadAssets(LevelInfo LevelInfo, optional KFFire Spawned){ super.PreloadAssets(LevelInfo, Spawned); if(default.FireEndSound != none && default.FireEndSoundRef != "") default.FireEndSound = sound(DynamicLoadObject(default.FireEndSoundRef, class'sound', true)); if(default.FireEndStereoSound == none){ if(default.FireEndStereoSoundRef != "") default.FireEndStereoSound = sound(DynamicLoadObject(default.FireEndStereoSoundRef, class'Sound', true)); else default.FireEndStereoSound = default.FireEndSound; } if(default.AmbientFireSoundRef != "") default.AmbientFireSound = sound(DynamicLoadObject(default.AmbientFireSoundRef, class'sound', true)); if(NiceHighROFFire(Spawned) != none){ NiceHighROFFire(Spawned).FireEndSound = default.FireEndSound; NiceHighROFFire(Spawned).FireEndStereoSound = default.FireEndStereoSound; NiceHighROFFire(Spawned).AmbientFireSound = default.AmbientFireSound; } } static function bool UnloadAssets(){ super.UnloadAssets(); default.FireEndSound = none; default.FireEndStereoSound = none; default.AmbientFireSound = none; return true; } // Sends the fire class to the looping state function StartFiring(){ if(!bWaitForRelease && !currentContext.bIsBursting) GotoState('FireLoop'); else Super.StartFiring(); } // Handles toggling the weapon attachment's ambient sound on and off function PlayAmbientSound(Sound aSound){ local WeaponAttachment WA; WA = WeaponAttachment(Weapon.ThirdPersonActor); if(Weapon == none || (WA == none)) return; if(aSound == none){ WA.SoundVolume = WA.default.SoundVolume; WA.SoundRadius = WA.default.SoundRadius; } else{ WA.SoundVolume = AmbientFireVolume; WA.SoundRadius = AmbientFireSoundRadius; } WA.AmbientSound = aSound; } // Make sure we are in the fire looping state when we fire event ModeDoFire(){ if(!bWaitForRelease && !currentContext.bIsBursting){ if(AllowFire() && IsInState('FireLoop')) Super.ModeDoFire(); } else Super.ModeDoFire(); } state FireLoop { function BeginState(){ NextFireTime = Level.TimeSeconds - 0.1; if(KFWeap.bAimingRifle) Weapon.LoopAnim(FireLoopAimedAnim, FireLoopAnimRate, TweenTime); else Weapon.LoopAnim(FireLoopAnim, FireLoopAnimRate, TweenTime); PlayAmbientSound(AmbientFireSound); } function PlayFiring(){} function ServerPlayFiring(){} function EndState(){ Weapon.AnimStopLooping(); PlayAmbientSound(none); if(Weapon.Instigator != none && Weapon.Instigator.IsLocallyControlled() && Weapon.Instigator.IsFirstPerson() && StereoFireSound != none) Weapon.PlayOwnedSound(FireEndStereoSound,SLOT_none,AmbientFireVolume/127,,AmbientFireSoundRadius,,false); else Weapon.PlayOwnedSound(FireEndSound,SLOT_none,AmbientFireVolume/127,,AmbientFireSoundRadius); Weapon.StopFire(ThisModeNum); } function StopFiring(){ GotoState(''); } function ModeTick(float dt){ Super.ModeTick(dt); if(!bIsFiring || !AllowFire()){ GotoState(''); return; } } } function PlayFireEnd(){ if(!bWaitForRelease) Super.PlayFireEnd(); } defaultproperties { AmbientFireSoundRadius=500.000000 AmbientFireVolume=255 FireAimedAnim="Fire_Iron" FireEndAimedAnim="Fire_Iron_End" FireLoopAimedAnim="Fire_Iron_Loop" bAccuracyBonusForSemiAuto=True bPawnRapidFireAnim=True TransientSoundVolume=1.800000 FireLoopAnim="Fire_Loop" FireEndAnim="Fire_End" TweenTime=0.025000 FireForce="AssaultRifleFire" BotRefireRate=0.100000 aimerror=30.000000 }