rott/kf_sources/ScrnHMG/Classes/ChainGun.uc
2026-07-14 20:27:09 +07:00

154 lines
4.3 KiB
Ucode

//=============================================================================
// HuskGun
//=============================================================================
// Husk Arm fireball launching gun
//=============================================================================
// Killing Floor Source
// Copyright (C) 2011 Tripwire Interactive LLC
// - John "Ramm-Jaeger" Gibson
//=============================================================================
class ChainGun extends KFWeapon;
simulated function bool StartFire(int Mode)
{
if( Mode == 1 )
return super.StartFire(Mode);
if( !super.StartFire(Mode) ) // returns false when mag is empty
return false;
if( AmmoAmount(0) <= 0 )
{
return false;
}
AnimStopLooping();
if( !FireMode[Mode].IsInState('FireLoop') && (AmmoAmount(0) > 0) )
{
FireMode[Mode].StartFiring();
return true;
}
else
{
return false;
}
return true;
}
simulated function AnimEnd(int channel)
{
local name anim;
local float frame, rate;
if(!FireMode[0].IsInState('FireLoop'))
{
GetAnimParams(0, anim, frame, rate);
if (ClientState == WS_ReadyToFire)
{
if ((FireMode[0] == None || !FireMode[0].bIsFiring) && (FireMode[1] == None || !FireMode[1].bIsFiring))
{
PlayIdle();
}
}
}
}
simulated event OnZoomOutFinished()
{
local name anim;
local float frame, rate;
GetAnimParams(0, anim, frame, rate);
if (ClientState == WS_ReadyToFire)
{
// Play the regular idle anim when we're finished zooming out
if (anim == IdleAimAnim)
{
PlayIdle();
}
// Switch looping fire anims if we switched to/from zoomed
else if( FireMode[0].IsInState('FireLoop') && anim == 'Fire_Iron_Loop')
{
LoopAnim('Fire_Loop', FireMode[0].FireLoopAnimRate, FireMode[0].TweenTime);
}
}
}
/**
* Called by the native code when the interpolation of the first person weapon to the zoomed position finishes
*/
simulated event OnZoomInFinished()
{
local name anim;
local float frame, rate;
GetAnimParams(0, anim, frame, rate);
if (ClientState == WS_ReadyToFire)
{
// Play the iron idle anim when we're finished zooming in
if (anim == IdleAnim)
{
PlayIdle();
}
// Switch looping fire anims if we switched to/from zoomed
else if( FireMode[0].IsInState('FireLoop') && anim == 'Fire_Loop' )
{
LoopAnim('Fire_Iron_Loop', FireMode[0].FireLoopAnimRate, FireMode[0].TweenTime);
}
}
}
// Don't use alt fire to toggle
simulated function AltFire(float F){}
// Don't switch fire mode
exec function SwitchModes(){}
defaultproperties
{
MagCapacity=150
ReloadRate=6.500000
bHasSecondaryAmmo=True
ReloadAnim="CrappyReload"
ReloadAnimRate=1.000000
WeaponReloadAnim="Reload_AA12"
Weight=17.000000
IdleAimAnim="Idle"
StandardDisplayFOV=55.000000
bModeZeroCanDryFire=True
TraderInfoTexture=Texture'HMG_T.PatGun.patgun_unselected'
bIsTier3Weapon=True
MeshRef="HMG_A.PatGunMesh"
SkinRefs(0)="KF_Weapons4_Trip_T.Weapons.HUSK_cmb"
SkinRefs(1)="KF_Weapons_Trip_T.hands.hands_1stP_military_cmb"
SkinRefs(2)="KF_Specimens_Trip_T.gatling_cmb"
SkinRefs(3)="HMG_T.PatGun.Handle"
SelectSoundRef="HMG_S.Stinger.StingerTakeOut"
HudImageRef="HMG_T.PatGun.patgun_unselected"
SelectedHudImageRef="HMG_A.patgun_selected"
PlayerIronSightFOV=65.000000
ZoomedDisplayFOV=45.000000
FireModeClass(0)=Class'ScrnHMG.ChainGunFire'
FireModeClass(1)=Class'ScrnHMG.ChainGunAltFire'
PutDownAnim="PutDown"
SelectForce="SwitchToAssaultRifle"
AIRating=0.550000
CurrentRating=0.550000
Description="Chaingun ripped from dead Patriarch's hand. Or maybe ripped WITH. Or even WITH ALIVE. It works and nothing else matters."
EffectOffset=(X=100.000000,Y=25.000000,Z=-10.000000)
DisplayFOV=55.000000
Priority=155
InventoryGroup=4
GroupOffset=5
PickupClass=Class'ScrnHMG.ChainGunPickup'
PlayerViewOffset=(X=40.000000,Y=40.000000,Z=16.000000)
BobDamping=6.000000
AttachmentClass=Class'ScrnHMG.ChainGunAttachment'
IconCoords=(X1=245,Y1=39,X2=329,Y2=79)
ItemName="Patriarch's Chaingun SE"
TransientSoundVolume=1.250000
}