//============================================================================= // KFWeap_SMG_HK_UMP //============================================================================= // Weapon class for Heckler UMP //============================================================================= // Killing Floor 2 // Copyright (C) 2017 Tripwire Interactive LLC //============================================================================= class KFWeap_SMG_HK_UMP extends KFWeap_SMGBase; /** RecoilRate when firing in burst fire. */ var(Recoil) float BurstFireRecoilRate; /** How much to scale recoil when firing in burst fire. */ var(Recoil) float BurstFireRecoilModifier; // Standard /** Animation to play when the weapon is fired in burst mode with 2 rounds left */ var(Animations) const editconst name BurstFire2RdAnim; /** Animation to play when the weapon is fired in burst fire mode for 3 rounds*/ var(Animations) const editconst name BurstFire3RdAnim; // Iron Sights /** Animation to play when the weapon is fired in burst mode with 2 rounds left */ var(Animations) const editconst name BurstFire2RdSightedAnim; /** Animation to play when the weapon is fired in burst fire mode for 3 rounds*/ var(Animations) const editconst name BurstFire3RdSightedAnim; /** Sound to play when the weapon is fired in burst mode with 2 rounds left */ var(Sounds) WeaponFireSndInfo WeaponFire2RdSnd; /** Sound to play when the weapon is fired in burst fire mode for 3 rounds */ var(Sounds) WeaponFireSndInfo WeaponFire3RdSnd; /** Keeps track of whether or not the gun has played fire effects this burst. */ var bool bBurstPlayedFireEffects; /********************************************************************************************* * State WeaponBurstFiring * Fires a burst of bullets. Fire must be released between every shot. *********************************************************************************************/ simulated state WeaponBurstFiring { simulated function BeginState(Name PrevStateName) { // Modify the recoil for burst fire RecoilRate = BurstFireRecoilRate; // Initialize recoil blend out settings if (RecoilRate > 0 && RecoilBlendOutRatio > 0) { RecoilYawBlendOutRate = maxRecoilYaw / RecoilRate * RecoilBlendOutRatio; RecoilPitchBlendOutRate = maxRecoilPitch / RecoilRate * RecoilBlendOutRatio; } bBurstPlayedFireEffects = false; super.BeginState(PrevStateName); } /** * PlayFireEffects Is the root function that handles all of the effects associated with * a weapon. This function creates the 1st person effects. It should only be called * on a locally controlled player. */ simulated function PlayFireEffects(byte FireModeNum, optional vector HitLocation) { local name WeaponFireAnimName; // Only play the burst fire sound on the first shot as the sound includes additional shot sounds baked in if (FireModeNum != ALTFIRE_FIREMODE || (FireModeNum == ALTFIRE_FIREMODE && (!bBurstPlayedFireEffects || `IsInZedTime(self))) ) { PlayFiringSound(CurrentFireMode); } if (Instigator != none) { UpdateWeaponAttachmentAnimRate(GetThirdPersonAnimRate()); if (Instigator.IsFirstPerson()) { if (!bPlayingLoopingFireAnim && (FireModeNum != ALTFIRE_FIREMODE || (FireModeNum == ALTFIRE_FIREMODE && !bBurstPlayedFireEffects))) { WeaponFireAnimName = GetWeaponFireAnim(FireModeNum); if (WeaponFireAnimName != '') { PlayAnimation(WeaponFireAnimName, MySkelMesh.GetAnimLength(WeaponFireAnimName),,FireTweenTime); } } HandleRecoil(); ShakeView(); // Start muzzle flash effect CauseMuzzleFlash(FireModeNum); } } bBurstPlayedFireEffects = true; } /** Overridden to include the BurstFireModifier*/ simulated function ModifyRecoil(out float CurrentRecoilModifier) { super.ModifyRecoil(CurrentRecoilModifier); CurrentRecoilModifier *= BurstFireRecoilModifier; } /** Get name of the animation to play for PlayFireEffects. Overriden to play the right animation for the number of shots in the burst fire */ simulated function name GetWeaponFireAnim(byte FireModeNum) { if (BurstAmount == 3) { if (bUsingSights) { return BurstFire3RdSightedAnim; } return BurstFire3RdAnim; } else if (BurstAmount == 2) { if (bUsingSights) { return BurstFire2RdSightedAnim; } return BurstFire2RdAnim; } else { return super.GetWeaponFireAnim(FireModeNum); } } /** * Tells the weapon to play a firing sound (uses CurrentFireMode) */ simulated function PlayFiringSound(byte FireModeNum) { if (!bPlayingLoopingFireSnd && BurstAmount > 1 && `NotInZedTime(self) ) { MakeNoise(1.0, 'PlayerFiring'); if (BurstAmount == 3) { WeaponPlayFireSound(WeaponFire3RdSnd.DefaultCue, WeaponFire3RdSnd.FirstPersonCue); } else if (BurstAmount == 2) { WeaponPlayFireSound(WeaponFire2RdSnd.DefaultCue, WeaponFire2RdSnd.FirstPersonCue); } } else { super.PlayFiringSound(FireModeNum); } } simulated event EndState(Name NextStateName) { // Set recoil settings back to normal RecoilRate = default.RecoilRate; // Initialize recoil blend out settings if (RecoilRate > 0 && RecoilBlendOutRatio > 0) { RecoilYawBlendOutRate = maxRecoilYaw / RecoilRate * RecoilBlendOutRatio; RecoilPitchBlendOutRate = maxRecoilPitch / RecoilRate * RecoilBlendOutRatio; } Super.EndState(NextStateName); } } defaultproperties { // Inventory InventorySize=5 GroupPriority=90 //60 WeaponSelectTexture=Texture2D'WEP_UI_HK_UMP_TEX.UI_WeaponSelect_UMP' // FOV MeshFOV=86 MeshIronSightFOV=50 PlayerIronSightFOV=75 // Zooming/Position IronSightPosition=(X=0.0f,Y=0.0f,Z=0.0f) //x0.9 PlayerViewOffset=(X=3.f,Y=10.0f,Z=-2.0f) // IronSightPosition=(X=10.f,Y=0,Z=0) //PlayerViewOffset=(X=17.f,Y=8,Z=-4.0) // Content PackageKey="HK_UMP" FirstPersonMeshName="WEP_1P_HK_UMP_MESH.Wep_1stP_HK_UMP_Rig" FirstPersonAnimSetNames(0)="WEP_1P_HK_UMP_ANIM.WEP_1stP_HK_UMP_Anim" PickupMeshName="WEP_3P_HK_UMP_MESH.Wep_3rdP_HK_UMP_Pickup" AttachmentArchetypeName="WEP_HK_UMP_ARCH.Wep_HK_UMP_3P" MuzzleFlashTemplateName="WEP_HK_UMP_ARCH.Wep_HK_UMP_MuzzleFlash" // Ammo MagazineCapacity[0]=30 SpareAmmoCapacity[0]=290 //320 InitialSpareMags[0]=2 bCanBeReloaded=true bReloadFromMagazine=true // Recoil maxRecoilPitch=120 minRecoilPitch=92 maxRecoilYaw=101 //92 minRecoilYaw=-101 //92 RecoilRate=0.085 RecoilMaxYawLimit=500 RecoilMinYawLimit=65035 RecoilMaxPitchLimit=900 RecoilMinPitchLimit=65035 RecoilISMaxYawLimit=75 RecoilISMinYawLimit=65460 RecoilISMaxPitchLimit=375 RecoilISMinPitchLimit=65460 RecoilViewRotationScale=0.25 IronSightMeshFOVCompensationScale=1.5 HippedRecoilModifier=1.4 BurstFireRecoilRate= 0.085 BurstFireRecoilModifier = 1.0 // Recoil // maxRecoilPitch=60 // minRecoilPitch=40 // maxRecoilYaw=50 // minRecoilYaw=-50 // RecoilRate=0.06 // RecoilMaxYawLimit=500 // RecoilMinYawLimit=65035 // RecoilMaxPitchLimit=550 // RecoilMinPitchLimit=65035 //RecoilISMaxYawLimit=75 //RecoilISMinYawLimit=65460 //RecoilISMaxPitchLimit=375 //RecoilISMinPitchLimit=65460 //IronSightMeshFOVCompensationScale=1.6 //WalkingRecoilModifier=1.1 //JoggingRecoilModifier=1.2 // DEFAULT_FIREMODE FireModeIconPaths(DEFAULT_FIREMODE)=Texture2D'ui_firemodes_tex.UI_FireModeSelect_BulletAuto' FiringStatesArray(DEFAULT_FIREMODE)=WeaponFiring WeaponFireTypes(DEFAULT_FIREMODE)=EWFT_InstantHit WeaponProjectiles(DEFAULT_FIREMODE)=class'KFProj_Bullet_AssaultRifle' InstantHitDamageTypes(DEFAULT_FIREMODE)=class'KFDT_Ballistic_HK_UMP' FireInterval(DEFAULT_FIREMODE)=+0.1 // 600 RPM Spread(DEFAULT_FIREMODE)=0.01 InstantHitDamage(DEFAULT_FIREMODE)=45 FireOffset=(X=30,Y=4.5,Z=-5) // ALT_FIREMODE FireModeIconPaths(ALTFIRE_FIREMODE)=Texture2D'ui_firemodes_tex.UI_FireModeSelect_BulletBurst' FiringStatesArray(ALTFIRE_FIREMODE)=WeaponBurstFiring WeaponFireTypes(ALTFIRE_FIREMODE)=EWFT_InstantHit WeaponProjectiles(ALTFIRE_FIREMODE)=class'KFProj_Bullet_AssaultRifle' InstantHitDamageTypes(ALTFIRE_FIREMODE)=class'KFDT_Ballistic_HK_UMP' FireInterval(AltFire_FIREMODE)=+0.1 // 600 RPM BurstAmount=3 BurstFire2RdAnim=Shoot_Burst2 BurstFire3RdAnim=Shoot_Burst BurstFire2RdSightedAnim=Shoot_Burst2_Iron BurstFire3RdSightedAnim=Shoot_Burst_Iron WeaponFire2RdSnd=(DefaultCue=AkEvent'WW_WEP_UMP.Play_WEP_UMP_Fire_3P_2Round', FirstPersonCue=AkEvent'WW_WEP_UMP.Play_WEP_UMP_Fire_1P_2Round') WeaponFire3RdSnd=(DefaultCue=AkEvent'WW_WEP_UMP.Play_WEP_UMP_Fire_3P_3Round', FirstPersonCue=AkEvent'WW_WEP_UMP.Play_WEP_UMP_Fire_1P_3Round') InstantHitDamage(ALTFIRE_FIREMODE)=45 Spread(ALTFIRE_FIREMODE)=0.01 // BASH_FIREMODE InstantHitDamageTypes(BASH_FIREMODE)=class'KFDT_Bludgeon_HK_UMP' InstantHitDamage(BASH_FIREMODE)=24.0 // Fire Effects //@todo: add akevents when we have them WeaponFireSnd(DEFAULT_FIREMODE)=(DefaultCue=AkEvent'WW_WEP_UMP.Play_WEP_UMP_Fire_3P_Loop',FirstPersonCue=AkEvent'WW_WEP_UMP.Play_WEP_UMP_Fire_1P_Loop') WeaponFireSnd(ALTFIRE_FIREMODE)=(DefaultCue=AkEvent'WW_WEP_UMP.Play_WEP_UMP_Fire_3P_Single',FirstPersonCue=AkEvent'WW_WEP_UMP.Play_WEP_UMP_Fire_1P_Single') WeaponDryFireSnd(DEFAULT_FIREMODE)=AkEvent'WW_WEP_SA_MedicSMG.Play_SA_MedicSMG_Handling_DryFire' WeaponDryFireSnd(ALTFIRE_FIREMODE)=AkEvent'WW_WEP_SA_MedicSMG.Play_SA_MedicSMG_Handling_DryFire' // Advanced (High RPM) Fire Effects bLoopingFireAnim(DEFAULT_FIREMODE)=true bLoopingFireSnd(DEFAULT_FIREMODE)=true WeaponFireLoopEndSnd(DEFAULT_FIREMODE)=(DefaultCue=AkEvent'WW_WEP_UMP.Play_WEP_UMP_Fire_3P_EndLoop',FirstPersonCue=AkEvent'WW_WEP_UMP.Play_WEP_UMP_Fire_1P_EndLoop') SingleFireSoundIndex=ALTFIRE_FIREMODE // Attachments bHasIronSights=true bHasFlashlight=true AssociatedPerkClasses(0)=class'KFPerk_Swat' // Weapon Upgrade stat boosts //WeaponUpgrades[1]=(IncrementDamage=1.13f,IncrementWeight=1) //WeaponUpgrades[2]=(IncrementDamage=1.24f,IncrementWeight=2) WeaponUpgrades[1]=(Stats=((Stat=EWUS_Damage0, Scale=1.13f), (Stat=EWUS_Damage1, Scale=1.13f), (Stat=EWUS_Weight, Add=1))) WeaponUpgrades[2]=(Stats=((Stat=EWUS_Damage0, Scale=1.24f), (Stat=EWUS_Damage1, Scale=1.24f), (Stat=EWUS_Weight, Add=2))) }