194 lines
5.0 KiB
Ucode
194 lines
5.0 KiB
Ucode
//=============================================================================
|
|
// BlowerThrower
|
|
//=============================================================================
|
|
// Weapon class for the bloat bile thrower
|
|
//=============================================================================
|
|
// Killing Floor Source
|
|
// Copyright (C) 2013 Tripwire Interactive LLC
|
|
// - John "Ramm-Jaeger" Gibson
|
|
//=============================================================================
|
|
class BlowerThrower 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;
|
|
}
|
|
|
|
// Allow this weapon to auto reload on alt fire
|
|
simulated function AltFire(float F)
|
|
{
|
|
if( MagAmmoRemaining < 1 && !bIsReloading &&
|
|
FireMode[1].NextFireTime <= Level.TimeSeconds )
|
|
{
|
|
// We're dry, ask the server to autoreload
|
|
ServerRequestAutoReload();
|
|
|
|
PlayOwnedSound(FireMode[1].NoAmmoSound,SLOT_None,2.0,,,,false);
|
|
}
|
|
|
|
super.AltFire(F);
|
|
}
|
|
|
|
simulated function AnimEnd(int channel)
|
|
{
|
|
if(!FireMode[0].IsInState('FireLoop'))
|
|
{
|
|
Super.AnimEnd(channel);
|
|
}
|
|
}
|
|
|
|
function bool RecommendRangedAttack()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
function float SuggestAttackStyle()
|
|
{
|
|
return -1.0;
|
|
}
|
|
|
|
//TODO: LONG ranged?
|
|
function bool RecommendLongRangedAttack()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
|
|
defaultproperties
|
|
{
|
|
SkinRefs(0)="KF_IJC_Halloween_Weapons2.BlowerThrower.BlowerThrower_cmb"
|
|
SleeveNum=1
|
|
WeaponReloadAnim=Reload_IJC_BlowerThrower
|
|
|
|
MagCapacity=50
|
|
ReloadRate=4.14
|
|
|
|
ReloadAnim="Reload"
|
|
ReloadAnimRate=1.0
|
|
|
|
Weight=6.000000
|
|
bModeZeroCanDryFire=True
|
|
FireModeClass(0)=Class'KFMod.BlowerThrowerFire'
|
|
FireModeClass(1)=Class'KFMod.BlowerThrowerAltFire'
|
|
SelectSoundRef="KF_FY_BlowerThrowerSND.WEP_Bile_Foley_Select"
|
|
|
|
PutDownAnim="PutDown"
|
|
|
|
SelectSound=none//Sound'KFPlayerSound.getweaponout'
|
|
|
|
Description="A leaf blower modified to launch deadly bloat bile. Spray it around and watch 'em burn!"
|
|
|
|
Priority=103
|
|
|
|
InventoryGroup=3
|
|
GroupOffset=21
|
|
PickupClass=Class'KFMod.BlowerThrowerPickup'
|
|
|
|
BobDamping=6.000000
|
|
AttachmentClass=Class'KFMod.BlowerThrowerAttachment'
|
|
IconCoords=(X1=245,Y1=39,X2=329,Y2=79)
|
|
ItemName="BlowerThrower"
|
|
MeshRef="KF_IJC_Halloween_Weps_2.BlowerThrower"
|
|
DrawScale=1.0
|
|
TransientSoundVolume=1.250000
|
|
AmbientGlow=0
|
|
|
|
PutDownTime = 0.5
|
|
PutDownAnimRate=1.3636
|
|
|
|
QuickPutDownTime=0.25
|
|
|
|
PlayerViewOffset=(X=15.000000,Y=20.000000,Z=-3.000000)
|
|
EffectOffset=(X=100.000000,Y=25.000000,Z=-10.000000)
|
|
|
|
AIRating=0.7
|
|
CurrentRating=0.7
|
|
|
|
MinimumFireRange = 300
|
|
|
|
ZoomTime=0.25
|
|
FastZoomOutTime=0.2
|
|
ZoomInRotation=(Pitch=-1000,Yaw=0,Roll=1500)
|
|
bHasAimingMode=true
|
|
IdleAimAnim=Idle
|
|
|
|
DisplayFOV=70.000000
|
|
StandardDisplayFOV=70.0
|
|
PlayerIronSightFOV=75
|
|
ZoomedDisplayFOV=60
|
|
|
|
HudImageRef="KF_IJC_HUD.WeaponSelect.BlowerThrower_unselected"
|
|
SelectedHudImageRef="KF_IJC_HUD.WeaponSelect.BlowerThrower"
|
|
TraderInfoTexture=texture'KF_IJC_HUD.Trader_Weapon_Images.Trader_BlowerThrower'
|
|
|
|
bIsTier2Weapon=true
|
|
|
|
AppID=258751
|
|
}
|