1
0
KF2-Dev-Scripts/KFGameContent/Classes/KFWeap_Ice_FreezeThrower.uc
2023-09-21 22:31:11 +03:00

291 lines
8.5 KiB
Ucode

//=============================================================================
// KFWeap_Ice_FreezeThrower
//=============================================================================
// The cryogenic freeze gun
//=============================================================================
// Killing Floor 2
// Copyright (C) 2016 Tripwire Interactive LLC
// - Matt "Squirrlz" Farber
//=============================================================================
class KFWeap_Ice_FreezeThrower extends KFWeap_FlameBase;
/** Shoot animation to play when shooting secondary fire */
var(Animations) const editconst name FireHeavyAnim;
/** Shoot animation to play when shooting secondary fire last shot */
var(Animations) const editconst name FireLastHeavyAnim;
/** Shoot animation to play when shooting secondary fire last shot when aiming */
var(Animations) const editconst name FireLastHeavySightedAnim;
/** Alt-fire explosion template */
var() GameExplosion ExplosionTemplate;
/** How much recoil the altfire should do */
var protected const float AltFireRecoilScale;
/** Handle one-hand fire anims */
simulated function name GetWeaponFireAnim(byte FireModeNum)
{
local bool bPlayFireLast;
bPlayFireLast = ShouldPlayFireLast(FireModeNum);
if ( bUsingSights )
{
if( bPlayFireLast )
{
if ( FireModeNum == ALTFIRE_FIREMODE )
{
return FireLastHeavySightedAnim;
}
else
{
return FireLastSightedAnim;
}
}
else
{
return FireSightedAnims[FireModeNum];
}
}
else
{
if( bPlayFireLast )
{
if ( FireModeNum == ALTFIRE_FIREMODE )
{
return FireLastHeavyAnim;
}
else
{
return FireLastAnim;
}
}
else
{
if ( FireModeNum == ALTFIRE_FIREMODE )
{
return FireHeavyAnim;
}
else
{
return FireAnim;
}
}
}
}
/**
* Instead of a toggle, just immediately fire alternate fire.
*/
simulated function AltFireMode()
{
// LocalPlayer Only
if ( !Instigator.IsLocallyControlled() )
{
return;
}
StartFire( ALTFIRE_FIREMODE );
}
/** Disable normal bullet spread */
simulated function rotator AddSpread( rotator BaseAim )
{
return BaseAim; // do nothing
}
/** Disable auto-reload for alt-fire */
simulated function bool ShouldAutoReload(byte FireModeNum)
{
local bool bRequestReload;
bRequestReload = Super.ShouldAutoReload(FireModeNum);
// Must be completely empty for auto-reload or auto-switch
if ( FireModeNum == ALTFIRE_FIREMODE && AmmoCount[0] > 0 )
{
bPendingAutoSwitchOnDryFire = false;
return false;
}
return bRequestReload;
}
/** Notification that a weapon attack has has happened */
function HandleWeaponShotTaken( byte FireMode )
{
if( KFPlayer != none && FireMode == ALTFIRE_FIREMODE )
{
KFPlayer.AddShotsFired( GetNumProjectilesToFire(FireMode) );
return;
}
super.HandleWeaponShotTaken( FireMode );
}
/** Increase recoil for altfire */
simulated function ModifyRecoil( out float CurrentRecoilModifier )
{
if( CurrentFireMode == ALTFIRE_FIREMODE )
{
CurrentRecoilModifier *= AltFireRecoilScale;
}
super.ModifyRecoil( CurrentRecoilModifier );
}
/** Can be overridden on a per-weapon or per-state basis */
simulated function bool IsHeavyWeapon()
{
return true;
}
/** No pilot light on freeze thrower */
simulated function SetPilotDynamicLightEnabled( bool bLightEnabled );
static simulated event EFilterTypeUI GetTraderFilter()
{
return FT_Flame;
}
defaultproperties
{
FlameSprayArchetype=SprayActor_Flame'WEP_CryoGun_ARCH.Wep_CryoGun_IceSpray'
// FX
PSC_PilotLight=none
PilotLights.Empty
// Shooting Animations
bHasFireLastAnims=true
FireLastHeavySightedAnim=Shoot_Heavy_Iron_Last
FireHeavyAnim=Shoot_Heavy
FireLastHeavyAnim=Shoot_Heavy_Last
// Shooting Animations
FireSightedAnims[0]=Shoot
FireSightedAnims[1]=Shoot_Heavy_Iron
FireLoopSightedAnim=ShootLoop
// Advanced Looping (High RPM) Fire Effects
FireLoopStartSightedAnim=ShootLoop_Start
FireLoopEndSightedAnim=ShootLoop_End
// FOV
MeshIronSightFOV=52
PlayerIronSightFOV=80
// Depth of field
DOF_FG_FocalRadius=150
DOF_FG_MaxNearBlurSize=1
// Content
PackageKey="CryoGun"
FirstPersonMeshName="WEP_1P_CryoGun_MESH.Wep_1stP_CryoGun_Rig"
FirstPersonAnimSetNames(0)="wep_1p_CryoGun_anim.Wep_1stP_CryoGun_anim"
PickupMeshName="WEP_3P_CryoGun_MESH.Wep_CryoGun_Pickup"
AttachmentArchetypeName="WEP_CryoGun_ARCH.Wep_CryoGun_3P"
MuzzleFlashTemplateName="WEP_CryoGun_ARCH.Wep_CryoGun_MuzzleFlash"
// Zooming/Position
PlayerViewOffset=(X=6.0,Y=15,Z=-5)
IronSightPosition=(X=20,Y=8,Z=-3) //z=0
QuickWeaponDownRotation=(Pitch=-8192,Yaw=0,Roll=0)
//PlayerViewOffset=(X=3.0,Y=9,Z=-3)
//IronSightPosition=(X=3,Y=6,Z=-1)
// Ammo
MagazineCapacity[0]=100
SpareAmmoCapacity[0]=500
InitialSpareMags[0]=1
AmmoPickupScale[0]=0.75
bCanBeReloaded=true
bReloadFromMagazine=true
// Recoil
maxRecoilPitch=150
minRecoilPitch=115
maxRecoilYaw=80 //115
minRecoilYaw=-80 //-115
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.5
AltFireRecoilScale=6.0f //4.0f
// Inventory
InventorySize=7
GroupPriority=75
WeaponSelectTexture=Texture2D'wep_ui_cryogun_tex.UI_WeaponSelect_Cryogun'
// DEFAULT_FIREMODE
FireModeIconPaths(DEFAULT_FIREMODE)=Texture2D'wep_ui_cryogun_tex.UI_FireModeSelect_Cryogun'
FiringStatesArray(DEFAULT_FIREMODE)=SprayingFire
WeaponFireTypes(DEFAULT_FIREMODE)=EWFT_Custom
FireInterval(DEFAULT_FIREMODE)=+0.1 //+0.07 // 850 RPM
FireOffset=(X=30,Y=4.5,Z=-5)
//MinFireDuration=0.25
MinAmmoConsumed=3 //4
// ALT_FIREMODE
FireModeIconPaths(ALTFIRE_FIREMODE)=Texture2D'wep_ui_cryogun_tex.UI_FireModeSelect_2nd_Cryogun'
FiringStatesArray(ALTFIRE_FIREMODE)=WeaponSingleFiring
WeaponFireTypes(ALTFIRE_FIREMODE)=EWFT_Projectile
WeaponProjectiles(ALTFIRE_FIREMODE)=class'KFProj_FreezeThrower_IceShards'
InstantHitDamage(ALTFIRE_FIREMODE)=35.0 //20.0
InstantHitDamageTypes(ALTFIRE_FIREMODE)=class'KFDT_Freeze_FreezeThrower_IceShards'
FireInterval(ALTFIRE_FIREMODE)=0.6f
PenetrationPower(ALTFIRE_FIREMODE)=4.0
AmmoCost(ALTFIRE_FIREMODE)=10
NumPellets(ALTFIRE_FIREMODE)=8 //12
Spread(ALTFIRE_FIREMODE)=0.12f //0.15f
// BASH_FIREMODE
InstantHitDamageTypes(BASH_FIREMODE)=class'KFDT_Bludgeon_Freezethrower'
InstantHitDamage(BASH_FIREMODE)=28
// Fire Effects
WeaponFireSnd(DEFAULT_FIREMODE)=(DefaultCue=AkEvent'WW_WEP_Cryo_Gun.Play_Cryo_Gun_3P_Start', FirstPersonCue=AkEvent'WW_WEP_Cryo_Gun.Play_Cryo_Gun_1P_Start')
WeaponFireLoopEndSnd(DEFAULT_FIREMODE)=(DefaultCue=AkEvent'WW_WEP_Cryo_Gun.Play_Cryo_Gun_3P_Stop', FirstPersonCue=AkEvent'WW_WEP_Cryo_Gun.Play_Cryo_Gun_1P_Stop')
WeaponFireSnd(ALTFIRE_FIREMODE)=(DefaultCue=AkEvent'WW_WEP_Cryo_Gun.Play_Cryo_Gun_3P_Alt_Fire', FirstPersonCue=AkEvent'WW_WEP_Cryo_Gun.Play_Cryo_Gun_1P_Alt_Fire')
WeaponDryFireSnd(DEFAULT_FIREMODE)=AkEvent'WW_WEP_SA_Flamethrower.Play_WEP_SA_Flamethrower_Handling_DryFire'
WeaponDryFireSnd(ALTFIRE_FIREMODE)=AkEvent'WW_WEP_SA_Flamethrower.Play_WEP_SA_Flamethrower_Handling_DryFire'
// Advanced (High RPM) Fire Effects
bLoopingFireAnim(DEFAULT_FIREMODE)=true
bLoopingFireSnd(DEFAULT_FIREMODE)=true
SingleFireSoundIndex=FIREMODE_NONE
bLoopingFireAnim(ALTFIRE_FIREMODE)=false
bLoopingFireSnd(ALTFIRE_FIREMODE)=false
// Attachments
bHasIronSights=true
bHasFlashlight=false
// AI Warning
bWarnAIWhenFiring=true
AssociatedPerkClasses(0)=class'KFPerk_Survivalist'
WeaponFireWaveForm=ForceFeedbackWaveform'FX_ForceFeedback_ARCH.Gunfire.Weak_Recoil'
// Weapon Upgrade stat boosts
//WeaponUpgrades[1]=(IncrementDamage=1.4f,IncrementWeight=1)
//WeaponUpgrades[2]=(IncrementDamage=1.8f,IncrementWeight=2)
WeaponUpgrades[1]=(Stats=((Stat=EWUS_Damage0, Scale=1.4f), (Stat=EWUS_Damage1, Scale=1.15f), (Stat=EWUS_Weight, Add=1)))
WeaponUpgrades[2]=(Stats=((Stat=EWUS_Damage0, Scale=1.8f), (Stat=EWUS_Damage1, Scale=1.3f), (Stat=EWUS_Weight, Add=2)))
}