1
0
KF2-Dev-Scripts/KFGameContent/Classes/KFWeap_Minigun.uc
2020-12-13 18:01:13 +03:00

314 lines
10 KiB
Ucode

//=============================================================================
// KFWeap_Minigun
//=============================================================================
// Minigun
//=============================================================================
// Killing Floor 2
// Copyright (C) 2015 Tripwire Interactive LLC
//=============================================================================
class KFWeap_Minigun extends KFWeap_MinigunBase;
/** Camera shake when shooting */
var CameraAnim ShootCameraAnim;
/** Current camera shake animation */
var CameraAnimInst ShootCameraAnimInstance;
/** Camera shake play rate */
var float ShootCameraAnimPlayRate;
/** Camera shake strength */
var float ShootCameraAnimScale;
/** Camera shake blend time */
var float ShootCameraAnimBlendTime;
/** Sound info for the barrel rotation in 1st person and 3rd person */
var WeaponFireSndInfo BarrelRotationLoopSound;
/** The system is currently playing the barrel sound */
var bool bPlayingLoopingBarrelSnd;
/** The system is currently playing the barrel stop sound */
var bool bPlayingLoopingBarrelStopSnd;
/** Audio event played when the rotation of the barrel ends */
var WeaponFireSndInfo BarrelStopRotationSound;
/** Stored value for the rotation sound parameter */
var transient float CurrentBarrelRotParam;
var transient KFPawn PreviousOwner;
simulated function StartFire(byte FireModeNum)
{
if (FireModeNum == ALTFIRE_FIREMODE)
{
return;
}
Super.StartFire(FireModeNum);
}
simulated event Tick( float DeltaTime )
{
local float NewCurrentBarrelParam;
local KFPawn KFP;
local bool bPlaySound;
Super.Tick(DeltaTime);
KFP = KFPawn(Instigator);
if( KFP == none && PreviousOwner != none)
{
PreviousOwner.SetSecondaryWeaponComponentRTPCValue("MinigunRotation", 0);
PreviousOwner.SetSecondaryWeaponAmbientSound(none, none);
bPlayingLoopingBarrelSnd = false;
bPlayingLoopingBarrelStopSnd = false;
CurrentBarrelRotParam = 0;
WindUpControlTime = 0;
PreviousOwner = none;
return;
}
bPlaySound = KFP != none && (WorldInfo.NetMode != NM_Client || KFP.IsLocallyControlled());
NewCurrentBarrelParam = CurrentBarrelRotParam;
if( KFP != none && KFP.IsFirstPerson() && (IsInState('WeaponPuttingDown') || IsInState('Inactive')) )
{
UpdateBarrelSoundOnForceStop( bPlaySound );
return;
}
if( WindUpControlTime > 0 && !bPlayingLoopingBarrelSnd)
{
bPlayingLoopingBarrelSnd = true;
if ( bPlaySound ) KFP.SetSecondaryWeaponAmbientSound(BarrelRotationLoopSound.DefaultCue, BarrelRotationLoopSound.FirstPersonCue);
}
else if( WindUpControlTime <= 0 && bPlayingLoopingBarrelSnd )
{
bPlayingLoopingBarrelSnd = false;
bPlayingLoopingBarrelStopSnd = false;
if ( bPlaySound ) KFP.SetSecondaryWeaponAmbientSound(none, none);
}
if(WindUpControlTime > 0)
{
NewCurrentBarrelParam = 100 * WindUpControlTime / WindUpActivationTime;
if ( KFP != none ) KFP.SetSecondaryWeaponComponentRTPCValue("MinigunRotation", NewCurrentBarrelParam);
if( NewCurrentBarrelParam < 20 && NewCurrentBarrelParam < CurrentBarrelRotParam && !bPlayingLoopingBarrelStopSnd )
{
bPlayingLoopingBarrelStopSnd = true;
if ( KFP != none ) KFP.SetWeaponAmbientSound(BarrelStopRotationSound.DefaultCue, BarrelStopRotationSound.FirstPersonCue);
}
CurrentBarrelRotParam = NewCurrentBarrelParam;
}
PreviousOwner = KFP;
}
/*********************************************************************************************
* @name SFX
*********************************************************************************************/
simulated function UpdateBarrelSoundOnForceStop(bool bPlaySound)
{
local KFPawn KFP;
if(bPlayingLoopingBarrelSnd)
{
KFP = KFPawn(Instigator);
CurrentBarrelRotParam -= 2;
if ( KFP != none ) KFP.SetSecondaryWeaponComponentRTPCValue("MinigunRotation", CurrentBarrelRotParam);
if( CurrentBarrelRotParam > 20 && !bPlayingLoopingBarrelStopSnd )
{
bPlayingLoopingBarrelStopSnd = true;
if ( KFP != none ) KFP.SetWeaponAmbientSound(BarrelStopRotationSound.DefaultCue, BarrelStopRotationSound.FirstPersonCue);
}
if(CurrentBarrelRotParam < 0)
{
CurrentBarrelRotParam = 0;
bPlayingLoopingBarrelSnd = false;
bPlayingLoopingBarrelStopSnd = false;
if ( bPlaySound ) KFP.SetSecondaryWeaponAmbientSound(none, none);
}
}
}
/*********************************************************************************************
* @name Trader
*********************************************************************************************/
/** Returns trader filter index based on weapon type */
static simulated event EFilterTypeUI GetTraderFilter()
{
return FT_Assault;
}
/*********************************************************************************************
* State WeaponFiring
* The weapon is in this state while holding fire button
*********************************************************************************************/
simulated state WeaponFiring
{
simulated function BeginState(Name PrevStateName)
{
Super.BeginState(PrevStateName);
if ( Instigator.IsLocallyControlled() )
{
ShootCameraAnimInstance = PlayCameraAnim(ShootCameraAnim, ShootCameraAnimScale, ShootCameraAnimPlayRate,
ShootCameraAnimBlendTime, ShootCameraAnimBlendTime, true, false);
}
}
simulated function EndState(Name NextStateName)
{
local PlayerController PC;
Super.EndState(NextStateName);
if ( Instigator.IsLocallyControlled() )
{
PC = PlayerController(Instigator.Controller);
if (PC.PlayerCamera != None && ShootCameraAnimInstance != None)
{
PC.PlayerCamera.StopCameraAnim(ShootCameraAnimInstance);
ShootCameraAnimInstance = None;
}
}
}
}
defaultproperties
{
// Wind Up variables
WindUpActivationTime=0.70 //1.5
WindUpRotationSpeed=1200
// FOV
MeshFOV=86
MeshIronSightFOV=82
PlayerIronSightFOV=82
PlayerSprintFOV=95
// Depth of field
DOF_FG_FocalRadius=85
DOF_FG_MaxNearBlurSize=2.5
// Content
PackageKey="Minigun"
FirstPersonMeshName="wep_1p_minigun_mesh.Wep_1stP_Minigun_Rig"
FirstPersonAnimSetNames(0)="wep_1p_minigun_anim.Wep_1stP_Minigun_Anim"
PickupMeshName="WEP_3P_Minigun_MESH.Wep_3rdP_Minigun_LowPoly_Pickup"
AttachmentArchetypeName="WEP_Minigun_ARCH.Wep_Minigun_3P"
MuzzleFlashTemplateName="WEP_Minigun_ARCH.Wep_Minigun_MuzzleFlash"
// Zooming/Position
PlayerViewOffset=(X=3.0,Y=15,Z=15)
IronSightPosition=(X=3.0,Y=15,Z=15)
// Ammo
MagazineCapacity[0]=90 //125 //175 //250
SpareAmmoCapacity[0]=540 //500 //750
InitialSpareMags[0]=1
AmmoPickupScale[0]=1 //0.67
bCanBeReloaded=true
bReloadFromMagazine=true
// Recoil
maxRecoilPitch=200 //187 //240 //225 //150
minRecoilPitch=150 //144 //184 //175 //115
maxRecoilYaw=130 //180 //115
minRecoilYaw=-130 //-180 //-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
HippedRecoilModifier=1.5
// Inventory / Grouping
InventorySize=10
InventoryGroup=IG_Primary
GroupPriority=130 //125
WeaponSelectTexture=Texture2D'WEP_UI_Minigun_TEX.UI_WeaponSelect_Minigun'
AssociatedPerkClasses(0)=class'KFPerk_Commando'
// DEFAULT_FIREMODE
FireModeIconPaths(DEFAULT_FIREMODE)=Texture2D'ui_firemodes_tex.UI_FireModeSelect_BulletAuto'
FiringStatesArray(DEFAULT_FIREMODE)=WeaponWindingUp
WeaponFireTypes(DEFAULT_FIREMODE)=EWFT_InstantHit
WeaponProjectiles(DEFAULT_FIREMODE)=class'KFProj_Bullet_Minigun'
InstantHitDamageTypes(DEFAULT_FIREMODE)=class'KFDT_Ballistic_Minigun'
FireInterval(DEFAULT_FIREMODE)=+0.05 // 1200 RPM
Spread(DEFAULT_FIREMODE)=0.0085
PenetrationPower(DEFAULT_FIREMODE)=2.0
InstantHitDamage(DEFAULT_FIREMODE)=35.0 //32.0 //25
FireOffset=(X=30,Y=4.5,Z=-5)
// ALT_FIREMODE
FiringStatesArray(ALTFIRE_FIREMODE)=WeaponWindingUp
WeaponFireTypes(ALTFIRE_FIREMODE)=EWFT_None
Begin Object Name=FirstPersonMesh
// new anim tree with skelcontrol to rotate cylinders
AnimTreeTemplate=AnimTree'WEP_Minigun_ARCH.WEP_Animtree_Minigun_1p'
End Object
// BASH_FIREMODE
InstantHitDamageTypes(BASH_FIREMODE)=class'KFDT_Bludgeon_Minigun'
InstantHitDamage(BASH_FIREMODE)=30
// Fire Effects
WeaponFireSnd(DEFAULT_FIREMODE)=(DefaultCue=AkEvent'WW_WEP_Minigun.Play_WEP_Minigun_Shoot_Loop_3P', FirstPersonCue=AkEvent'WW_WEP_Minigun.Play_WEP_Minigun_Shoot_Loop_1P')
WeaponFireSnd(ALTFIRE_FIREMODE)=(DefaultCue=AkEvent'WW_WEP_Minigun.Play_WEP_Mingun_Shoot_3P', FirstPersonCue=AkEvent'WW_WEP_Minigun.Play_WEP_Mingun_Shoot_1P')
WeaponFireLoopEndSnd(DEFAULT_FIREMODE)=(DefaultCue=AkEvent'WW_WEP_Minigun.Play_WEP_Minigun_Shoot_Loop_End_3P', FirstPersonCue=AkEvent'WW_WEP_Minigun.Play_WEP_Minigun_Shoot_Loop_End_1P')
WeaponDryFireSnd(DEFAULT_FIREMODE)=AkEvent'WW_WEP_SA_L85A2.Play_WEP_SA_L85A2_Handling_DryFire'
WeaponDryFireSnd(ALTFIRE_FIREMODE)=AkEvent'WW_WEP_SA_L85A2.Play_WEP_SA_L85A2_Handling_DryFire'
BarrelRotationLoopSound=(DefaultCue=AkEvent'WW_WEP_Minigun.Play_WEP_Minigun_Loop_3P', FirstPersonCue=AkEvent'WW_WEP_Minigun.Play_WEP_Minigun_Loop_1P')
BarrelStopRotationSound=(DefaultCue=AkEvent'WW_WEP_Minigun.Play_WEP_Minigun_Decelerate_3P', FirstPersonCue=AkEvent'WW_WEP_Minigun.Play_WEP_Minigun_Decelerate_1P')
// Advanced (High RPM) Fire Effects
bLoopingFireAnim(DEFAULT_FIREMODE)=true
bLoopingFireSnd(DEFAULT_FIREMODE)=true
SingleFireSoundIndex=ALTFIRE_FIREMODE
// Attachments
bHasIronSights=false
bHasFlashlight=false
EjectedShellForegroundDuration=0.8f
// Camera shake animation
ShootCameraAnim=CameraAnim'WEP_1P_Minigun_ANIM.Shoot'
ShootCameraAnimPlayRate=1.0f //0.6f
ShootCameraAnimScale=0.19f //0.25f
ShootCameraAnimBlendTime=0.1f
// movement and rotation speed values when winding up
WindUpViewRotationSpeed=2000 // base rotation speed is 2000
WindUpPawnMovementSpeed=0.8f //0.7f // base modifier is 1
// movement and rotation speed values when firing
FiringViewRotationSpeed=488 //320 //270
FiringPawnMovementSpeed=0.3f //0.2f //0.08f
}