//============================================================================= // KFWeap_Shotgun_DoubleBarrel //============================================================================= // A Double Barrel Sawed Off Shotgun //============================================================================= // Killing Floor 2 // Copyright (C) 2015 Tripwire Interactive LLC // - John "Ramm-Jaeger" Gibson //============================================================================= class KFWeap_Shotgun_DoubleBarrel extends KFWeap_ShotgunBase; /** How much to scale recoil when firing in double barrel fire. */ var(Recoil) float DoubleFireRecoilModifier; /** Shoot animation to play when shooting both barrels from the hip */ var(Animations) const editconst name FireDoubleAnim; /** How much momentum to apply when fired in double barrel */ var(Recoil) float DoubleBarrelKickMomentum; /** How much to reduce shoot momentum when falling */ var(Recoil) float FallingMomentumReduction; /** * Toggle between DEFAULT and ALTFIRE */ simulated function AltFireMode() { // LocalPlayer Only if ( !Instigator.IsLocallyControlled() ) { return; } if (AmmoCount[0] == 1) { StartFire(DEFAULT_FIREMODE); } else { StartFire(ALTFIRE_FIREMODE); } } /** * Send weapon to proper firing state */ simulated function SendToFiringState(byte FireModeNum) { if( FireModeNum == ALTFIRE_FIREMODE && AmmoCount[0] == 1) { // not enough ammo for altfire Super.SendToFiringState(DEFAULT_FIREMODE); } else { Super.SendToFiringState(FireModeNum); } } /********************************************************************************************* * State WeaponSingleFiring * Fire must be released between every shot. *********************************************************************************************/ simulated state WeaponDoubleBarrelFiring extends WeaponSingleFiring { /** Overrideen to include the DoubleFireRecoilModifier*/ simulated function ModifyRecoil( out float CurrentRecoilModifier ) { super.ModifyRecoil( CurrentRecoilModifier ); CurrentRecoilModifier *= DoubleFireRecoilModifier; } simulated function BeginState(name PreviousStateName) { local KFMapInfo KFMI; Super.BeginState(PreviousStateName); KFMI = KFMapInfo(WorldInfo.GetMapInfo()); if(KFMI != none && !KFMI.bAllowShootgunJump) { return; } // Push the player back when they fire both barrels ApplyKickMomentum(DoubleBarrelKickMomentum, FallingMomentumReduction); } } /** Handle one-hand fire anims */ simulated function name GetWeaponFireAnim(byte FireModeNum) { if ( bUsingSights ) { return FireSightedAnims[FireModeNum]; } else { if ( FireModeNum == ALTFIRE_FIREMODE ) { return FireDoubleAnim; } else { return FireAnim; } } } /** * Causes the muzzle flash to turn on and setup a time to * turn it back off again. */ simulated function CauseMuzzleFlash(byte FireModeNum) { // Alternate barrels if( FireModeNum == DEFAULT_FIREMODE ) { if( AmmoCount[0] == 1 ) { super.CauseMuzzleFlash(DEFAULT_FIREMODE); } else { super.CauseMuzzleFlash(ALTFIRE_FIREMODE); } } // Fire both barrels else { super.CauseMuzzleFlash(DEFAULT_FIREMODE); super.CauseMuzzleFlash(ALTFIRE_FIREMODE); } } defaultproperties { // Inventory InventorySize=5 //4 GroupPriority=50 WeaponSelectTexture=Texture2D'ui_weaponselect_tex.UI_WeaponSelect_DBShotgun' // FOV MeshFOV=75 MeshIronSightFOV=52 PlayerIronSightFOV=70 // Depth of field DOF_FG_FocalRadius=65 DOF_FG_MaxNearBlurSize=3 // Zooming/Position PlayerViewOffset=(X=4.0,Y=7.0,Z=-5.0) IronSightPosition=(X=3,Y=0,Z=0) // Content PackageKey="Shotgun_DoubleBarrel" FirstPersonMeshName="wep_1p_double_barrel_mesh.Wep_1stP_Double_Barrel" FirstPersonAnimSetNames(0)="WEP_1P_Double_Barrel_ANIM.Wep_1stP_Double_Barrel_Anim" PickupMeshName="WEP_3P_Double_Barrel_MESH.Wep_Double_Barrel_Pickup" AttachmentArchetypeName="WEP_Shotgun_DoubleBarrel_ARCH.Wep_Shotgun_DoubleBarrel_3P" MuzzleFlashTemplateName="WEP_Shotgun_DoubleBarrel_ARCH.Wep_Shotgun_DoubleBarrel_MuzzleFlash" // Animations FireAnim=Shoot_Single FireDoubleAnim=Shoot_Double FireSightedAnims[0]=Shoot_Iron_Single FireSightedAnims[1]=Shoot_Iron_Double bHasFireLastAnims=false // DEFAULT_FIREMODE FireModeIconPaths(DEFAULT_FIREMODE)=Texture2D'ui_firemodes_tex.UI_FireModeSelect_ShotgunSingle' FiringStatesArray(DEFAULT_FIREMODE)=WeaponSingleFiring WeaponFireTypes(DEFAULT_FIREMODE)=EWFT_Projectile WeaponProjectiles(DEFAULT_FIREMODE)=class'KFProj_Bullet_Pellet' InstantHitDamage(DEFAULT_FIREMODE)=25.0 //25 InstantHitDamageTypes(DEFAULT_FIREMODE)=class'KFDT_Ballistic_DBShotgun' PenetrationPower(DEFAULT_FIREMODE)=2.0 FireInterval(DEFAULT_FIREMODE)=0.25 // 240 RPM FireOffset=(X=25,Y=3.5,Z=-4) NumPellets(DEFAULT_FIREMODE)=10 //12 Spread(DEFAULT_FIREMODE)=0.25 ForceReloadTimeOnEmpty=0.3 // ALT_FIREMODE FireModeIconPaths(ALTFIRE_FIREMODE)=Texture2D'ui_firemodes_tex.UI_FireModeSelect_ShotgunAuto' FiringStatesArray(ALTFIRE_FIREMODE)=WeaponDoubleBarrelFiring WeaponFireTypes(ALTFIRE_FIREMODE)=EWFT_Projectile WeaponProjectiles(ALTFIRE_FIREMODE)=class'KFProj_Bullet_Pellet' InstantHitDamage(ALTFIRE_FIREMODE)=25.0 //25 InstantHitDamageTypes(ALTFIRE_FIREMODE)=class'KFDT_Ballistic_DBShotgun' PenetrationPower(ALTFIRE_FIREMODE)=2.0 FireInterval(ALTFIRE_FIREMODE)=0.25 // 240 RPM NumPellets(ALTFIRE_FIREMODE)=20 //24 Spread(ALTFIRE_FIREMODE)=0.25 AmmoCost(ALTFIRE_FIREMODE)=2 DoubleBarrelKickMomentum=1000 FallingMomentumReduction=0.5 // BASH_FIREMODE InstantHitDamageTypes(BASH_FIREMODE)=class'KFDT_Bludgeon_DBShotgun' InstantHitDamage(BASH_FIREMODE)=24 // Fire Effects WeaponFireSnd(DEFAULT_FIREMODE)=(DefaultCue=AkEvent'WW_WEP_SA_Shotgun.Play_SA_WEP_DoubleBarrel_Fire_3P', FirstPersonCue=AkEvent'WW_WEP_SA_Shotgun.Play_SA_WEP_DoubleBarrel_Fire_1P') WeaponFireSnd(ALTFIRE_FIREMODE)=(DefaultCue=AkEvent'WW_WEP_SA_Shotgun.Play_SA_WEP_DoubleBarrel_Fire_3P', FirstPersonCue=AkEvent'WW_WEP_SA_Shotgun.Play_SA_WEP_DoubleBarrel_Alt_Fire_1P') WeaponDryFireSnd(DEFAULT_FIREMODE)=AkEvent'WW_WEP_SA_Shotgun.Play_SA_WEP_DoubleBarrel_Handling_DryFire' WeaponDryFireSnd(ALTFIRE_FIREMODE)=AkEvent'WW_WEP_SA_Shotgun.Play_SA_WEP_DoubleBarrel_Handling_DryFire' // Attachments bHasIronSights=true bHasFlashlight=false // Ammo MagazineCapacity[0]=2 SpareAmmoCapacity[0]=46 InitialSpareMags[0]=11 AmmoPickupScale[0]=3.0 bCanBeReloaded=true bReloadFromMagazine=true bNoMagazine=true // Recoil maxRecoilPitch=900 minRecoilPitch=775 maxRecoilYaw=500 minRecoilYaw=-500 RecoilRate=0.085 RecoilBlendOutRatio=1.1 RecoilMaxYawLimit=500 RecoilMinYawLimit=65035 RecoilMaxPitchLimit=1500 RecoilMinPitchLimit=64785 RecoilISMaxYawLimit=50 RecoilISMinYawLimit=65485 RecoilISMaxPitchLimit=500 RecoilISMinPitchLimit=65485 RecoilViewRotationScale=0.8 FallingRecoilModifier=1.5 DoubleFireRecoilModifier=2.2 HippedRecoilModifier=1.25 AssociatedPerkClasses(0)=class'KFPerk_Support' WeaponFireWaveForm=ForceFeedbackWaveform'FX_ForceFeedback_ARCH.Gunfire.Heavy_Recoil_SingleShot' // Weapon Upgrade stat boosts //WeaponUpgrades[1]=(IncrementDamage=1.05f,IncrementWeight=1) //WeaponUpgrades[2]=(IncrementDamage=1.1f,IncrementWeight=2) //WeaponUpgrades[3]=(IncrementDamage=1.15f,IncrementWeight=3) WeaponUpgrades[1]=(Stats=((Stat=EWUS_Damage0, Scale=1.05f), (Stat=EWUS_Damage1, Scale=1.05f), (Stat=EWUS_Weight, Add=1))) WeaponUpgrades[2]=(Stats=((Stat=EWUS_Damage0, Scale=1.1f), (Stat=EWUS_Damage1, Scale=1.1f), (Stat=EWUS_Weight, Add=2))) WeaponUpgrades[3]=(Stats=((Stat=EWUS_Damage0, Scale=1.15f), (Stat=EWUS_Damage1, Scale=1.15f), (Stat=EWUS_Weight, Add=3))) }