291 lines
7.9 KiB
Ucode
291 lines
7.9 KiB
Ucode
//=============================================================================
|
|
// HuskGun
|
|
//=============================================================================
|
|
// Husk Arm fireball launching gun
|
|
//=============================================================================
|
|
// Killing Floor Source
|
|
// Copyright (C) 2011 Tripwire Interactive LLC
|
|
// - John "Ramm-Jaeger" Gibson
|
|
//=============================================================================
|
|
class HuskGun extends KFWeapon;
|
|
|
|
//=============================================================================
|
|
// Functions
|
|
//=============================================================================
|
|
|
|
function float GetAIRating()
|
|
{
|
|
local AIController B;
|
|
|
|
B = AIController(Instigator.Controller);
|
|
if ( (B == None) || (B.Enemy == None) )
|
|
return AIRating;
|
|
|
|
return (AIRating + 0.0003 * FClamp(1500 - VSize(B.Enemy.Location - Instigator.Location),0,1000));
|
|
}
|
|
|
|
function byte BestMode()
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
function bool RecommendRangedAttack()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
//TODO: LONG ranged?
|
|
function bool RecommendLongRangedAttack()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
function float SuggestAttackStyle()
|
|
{
|
|
return -1.0;
|
|
}
|
|
|
|
simulated function AnimEnd(int channel)
|
|
{
|
|
if (FireMode[0].bIsFiring)
|
|
{
|
|
if( bAimingRifle )
|
|
{
|
|
LoopAnim('ChargeLoop_Iron');
|
|
}
|
|
else
|
|
{
|
|
LoopAnim('ChargeLoop');
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Super.AnimEnd(channel);
|
|
}
|
|
}
|
|
|
|
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();
|
|
}
|
|
else if(anim == 'ChargeLoop_Iron')
|
|
{
|
|
LoopAnim('ChargeLoop');
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 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();
|
|
}
|
|
else if( anim == 'ChargeLoop' )
|
|
{
|
|
LoopAnim('ChargeLoop_Iron');
|
|
}
|
|
}
|
|
}
|
|
|
|
simulated function bool ConsumeAmmo( int Mode, float Load, optional bool bAmountNeededIsMax )
|
|
{
|
|
local Inventory Inv;
|
|
local bool bOutOfAmmo;
|
|
local KFWeapon KFWeap;
|
|
|
|
if ( Super(Weapon).ConsumeAmmo(Mode, Load, bAmountNeededIsMax) )
|
|
{
|
|
if ( Load > 0 && (Mode == 0 || bReduceMagAmmoOnSecondaryFire) )
|
|
MagAmmoRemaining -= Load;
|
|
|
|
NetUpdateTime = Level.TimeSeconds - 1;
|
|
|
|
if ( FireMode[Mode].AmmoPerFire > 0 && InventoryGroup > 0 && !bMeleeWeapon && bConsumesPhysicalAmmo &&
|
|
(Ammo[0] == none || FireMode[0] == none || FireMode[0].AmmoPerFire <= 0 || Ammo[0].AmmoAmount < FireMode[0].AmmoPerFire) &&
|
|
(Ammo[1] == none || FireMode[1] == none || FireMode[1].AmmoPerFire <= 0 || Ammo[1].AmmoAmount < FireMode[1].AmmoPerFire) )
|
|
{
|
|
bOutOfAmmo = true;
|
|
|
|
for ( Inv = Instigator.Inventory; Inv != none; Inv = Inv.Inventory )
|
|
{
|
|
KFWeap = KFWeapon(Inv);
|
|
|
|
if ( Inv.InventoryGroup > 0 && KFWeap != none && !KFWeap.bMeleeWeapon && KFWeap.bConsumesPhysicalAmmo &&
|
|
((KFWeap.Ammo[0] != none && KFWeap.FireMode[0] != none && KFWeap.FireMode[0].AmmoPerFire > 0 &&KFWeap.Ammo[0].AmmoAmount >= KFWeap.FireMode[0].AmmoPerFire) ||
|
|
(KFWeap.Ammo[1] != none && KFWeap.FireMode[1] != none && KFWeap.FireMode[1].AmmoPerFire > 0 && KFWeap.Ammo[1].AmmoAmount >= KFWeap.FireMode[1].AmmoPerFire)) )
|
|
{
|
|
bOutOfAmmo = false;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ( bOutOfAmmo )
|
|
{
|
|
PlayerController(Instigator.Controller).Speech('AUTO', 3, "");
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
// complete cut n' paste job needed, so that it can be modified
|
|
// overriding to properly handly giving extra ammo to this weapon
|
|
// for the firebug perk
|
|
function GiveAmmo(int m, WeaponPickup WP, bool bJustSpawned)
|
|
{
|
|
local bool bJustSpawnedAmmo;
|
|
local int addAmount, InitialAmount;
|
|
local float AddMultiplier;
|
|
|
|
UpdateMagCapacity(Instigator.PlayerReplicationInfo);
|
|
|
|
if ( FireMode[m] != None && FireMode[m].AmmoClass != None )
|
|
{
|
|
Ammo[m] = Ammunition(Instigator.FindInventoryType(FireMode[m].AmmoClass));
|
|
bJustSpawnedAmmo = false;
|
|
|
|
if ( bNoAmmoInstances )
|
|
{
|
|
if ( (FireMode[m].AmmoClass == None) || ((m != 0) && (FireMode[m].AmmoClass == FireMode[0].AmmoClass)) )
|
|
return;
|
|
|
|
InitialAmount = FireMode[m].AmmoClass.Default.InitialAmount;
|
|
|
|
if(WP!=none && WP.bThrown==true)
|
|
InitialAmount = WP.AmmoAmount[m];
|
|
else
|
|
{
|
|
// Other change - if not thrown, give the gun a full clip
|
|
MagAmmoRemaining = MagCapacity;
|
|
}
|
|
|
|
if ( Ammo[m] != None )
|
|
{
|
|
addamount = InitialAmount + Ammo[m].AmmoAmount;
|
|
Ammo[m].Destroy();
|
|
}
|
|
else
|
|
addAmount = InitialAmount;
|
|
|
|
AddAmmo(addAmount,m);
|
|
}
|
|
else
|
|
{
|
|
if ( (Ammo[m] == None) && (FireMode[m].AmmoClass != None) )
|
|
{
|
|
Ammo[m] = Spawn(FireMode[m].AmmoClass, Instigator);
|
|
Instigator.AddInventory(Ammo[m]);
|
|
bJustSpawnedAmmo = true;
|
|
}
|
|
else if ( (m == 0) || (FireMode[m].AmmoClass != FireMode[0].AmmoClass) )
|
|
bJustSpawnedAmmo = ( bJustSpawned || ((WP != None) && !WP.bWeaponStay) );
|
|
|
|
// and here is the modification for instanced ammo actors
|
|
|
|
if(WP!=none && WP.bThrown==true)
|
|
{
|
|
addAmount = WP.AmmoAmount[m];
|
|
}
|
|
else if ( bJustSpawnedAmmo )
|
|
{
|
|
if ( KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo) != none && KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo).ClientVeteranSkill != none )
|
|
{
|
|
AddMultiplier = KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo).ClientVeteranSkill.static.AddExtraAmmoFor(KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo), FireMode[m].AmmoClass);
|
|
}
|
|
else
|
|
{
|
|
AddMultiplier = 1.0;
|
|
}
|
|
|
|
if (default.MagCapacity == 0)
|
|
addAmount = 0; // prevent division by zero.
|
|
else
|
|
addAmount = Ammo[m].InitialAmount * (float(MagCapacity) / float(default.MagCapacity)) * AddMultiplier;
|
|
}
|
|
|
|
if ( WP != none && WP.Class == class'BoomstickPickup' && m > 0 )
|
|
{
|
|
return;
|
|
}
|
|
|
|
Ammo[m].AddAmmo(addAmount);
|
|
Ammo[m].GotoState('');
|
|
}
|
|
}
|
|
}
|
|
|
|
defaultproperties
|
|
{
|
|
IdleAimAnim=Idle_Iron
|
|
|
|
SkinRefs(0)="KF_Weapons4_Trip_T.Weapons.HUSKGun_shdr"
|
|
SleeveNum=1
|
|
|
|
Weight=8.000000
|
|
MagCapacity=1
|
|
ReloadRate=0.010000
|
|
FireModeClass(0)=Class'KFMod.HuskGunFire'
|
|
FireModeClass(1)=Class'KFMod.NoFire'
|
|
PutDownAnim="PutDown"
|
|
SelectSoundRef="KF_HuskGunSnd.Husk_Select"
|
|
SelectForce="SwitchToAssaultRifle"
|
|
AIRating=0.650000
|
|
CurrentRating=0.650000
|
|
Description="A fireball cannon ripped from the arm of a dead Husk. Does more damage when charged up."
|
|
Priority=180
|
|
InventoryGroup=4
|
|
GroupOffset=7
|
|
PickupClass=Class'KFMod.HuskGunPickup'
|
|
PlayerViewOffset=(X=18.000000,Y=20.000000,Z=-6.000000)
|
|
BobDamping=6.000000
|
|
AttachmentClass=Class'KFMod.HuskGunAttachment'
|
|
IconCoords=(X1=253,Y1=146,X2=333,Y2=181)
|
|
ItemName="Husk Fireball Launcher"
|
|
LightType=LT_None
|
|
LightBrightness=0.000000
|
|
LightRadius=0.000000
|
|
MeshRef="KF_Wep_HuskGun.HuskGun_Trip"
|
|
DrawScale=1.000000
|
|
AmbientGlow=0
|
|
|
|
ZoomTime=0.25
|
|
FastZoomOutTime=0.2
|
|
ZoomInRotation=(Pitch=-910,Yaw=0,Roll=2910)
|
|
bHasAimingMode=true
|
|
|
|
DisplayFOV=65.000000
|
|
StandardDisplayFOV=65.0
|
|
PlayerIronSightFOV=70
|
|
ZoomedDisplayFOV=45
|
|
|
|
HudImageRef="KillingFloor2HUD.WeaponSelect.Huskgun_unselected"
|
|
SelectedHudImageRef="KillingFloor2HUD.WeaponSelect.Huskgun"
|
|
TraderInfoTexture=texture'KillingFloor2HUD.Trader_Weapon_Icons.Trader_Huskgun'
|
|
|
|
bIsTier3Weapon=true
|
|
}
|