265 lines
6.1 KiB
Ucode
265 lines
6.1 KiB
Ucode
//=============================================================================
|
|
// M4AssaultRifle
|
|
//=============================================================================
|
|
// An M4 Assault Rifle
|
|
//=============================================================================
|
|
// Killing Floor Source
|
|
// Copyright (C) 2011 Tripwire Interactive LLC
|
|
// - John "Ramm-Jaeger" Gibson
|
|
//=============================================================================
|
|
class M4AssaultRifle extends KFWeapon
|
|
config(user);
|
|
|
|
#exec OBJ LOAD FILE=KillingFloorWeapons.utx
|
|
#exec OBJ LOAD FILE=KillingFloorHUD.utx
|
|
#exec OBJ LOAD FILE=Inf_Weapons_Foley.uax
|
|
|
|
var bool bWasClipEmpty;
|
|
|
|
// Use alt fire to switch fire modes
|
|
simulated function AltFire(float F)
|
|
{
|
|
if(ReadyToFire(0))
|
|
{
|
|
DoToggle();
|
|
}
|
|
}
|
|
|
|
function bool RecommendRangedAttack()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
//TODO: LONG ranged?
|
|
function bool RecommendLongRangedAttack()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
function float SuggestAttackStyle()
|
|
{
|
|
return -1.0;
|
|
}
|
|
|
|
exec function SwitchModes()
|
|
{
|
|
DoToggle();
|
|
}
|
|
|
|
function float GetAIRating()
|
|
{
|
|
local Bot B;
|
|
|
|
B = Bot(Instigator.Controller);
|
|
if ( (B == None) || (B.Enemy == None) )
|
|
return AIRating;
|
|
|
|
return AIRating;
|
|
}
|
|
|
|
function byte BestMode()
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
simulated function SetZoomBlendColor(Canvas c)
|
|
{
|
|
local Byte val;
|
|
local Color clr;
|
|
local Color fog;
|
|
|
|
clr.R = 255;
|
|
clr.G = 255;
|
|
clr.B = 255;
|
|
clr.A = 255;
|
|
|
|
if( Instigator.Region.Zone.bDistanceFog )
|
|
{
|
|
fog = Instigator.Region.Zone.DistanceFogColor;
|
|
val = 0;
|
|
val = Max( val, fog.R);
|
|
val = Max( val, fog.G);
|
|
val = Max( val, fog.B);
|
|
if( val > 128 )
|
|
{
|
|
val -= 128;
|
|
clr.R -= val;
|
|
clr.G -= val;
|
|
clr.B -= val;
|
|
}
|
|
}
|
|
c.DrawColor = clr;
|
|
}
|
|
|
|
simulated function bool StartFire(int Mode)
|
|
{
|
|
if( KFHighROFFire(FireMode[Mode]) == none || FireMode[Mode].bWaitForRelease )
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
|
|
exec function ReloadMeNow()
|
|
{
|
|
bWasClipEmpty = MagAmmoRemaining <= 0;
|
|
|
|
super.ReloadMeNow();
|
|
}
|
|
|
|
simulated function ActuallyFinishReloading()
|
|
{
|
|
if ( PlayerController(Instigator.Controller) != none && KFSteamStatsAndAchievements(PlayerController(Instigator.Controller).SteamStatsAndAchievements) != none )
|
|
{
|
|
KFSteamStatsAndAchievements(PlayerController(Instigator.Controller).SteamStatsAndAchievements).OnM4Reloaded(bWasClipEmpty);
|
|
}
|
|
|
|
super.ActuallyFinishReloading();
|
|
}
|
|
|
|
defaultproperties
|
|
{
|
|
SkinRefs(0)="KF_Weapons4_Trip_T.Weapons.m4_cmb"
|
|
SkinRefs(1)="KF_Weapons2_Trip_T.Special.Aimpoint_sight_shdr"
|
|
|
|
SleeveNum=2
|
|
|
|
WeaponReloadAnim=Reload_M4
|
|
IdleAimAnim=Idle_Iron
|
|
|
|
CustomCrosshair=11
|
|
CustomCrossHairTextureName="Crosshairs.HUD.Crosshair_Cross5"
|
|
MagCapacity=30
|
|
ReloadRate=3.6333
|
|
ReloadAnim="Reload"
|
|
ReloadAnimRate=1.000000
|
|
|
|
Weight=6.000000
|
|
bModeZeroCanDryFire=True
|
|
FireModeClass(0)=Class'KFMod.M4Fire'
|
|
FireModeClass(1)=Class'KFMod.NoFire'
|
|
PutDownAnim="PutDown"
|
|
SelectSoundRef="KF_M4RifleSnd.WEP_M4_Foley_Select"
|
|
SelectForce="SwitchToAssaultRifle"
|
|
bShowChargingBar=True
|
|
Description="A compact assault rifle. Can be fired in semi or full auto with good damage and good accuracy."
|
|
EffectOffset=(X=100.000000,Y=25.000000,Z=-10.000000)
|
|
Priority=130
|
|
InventoryGroup=3
|
|
GroupOffset=10
|
|
PickupClass=Class'KFMod.M4Pickup'
|
|
PlayerViewOffset=(X=25.000000,Y=18.000000,Z=-6.000000)
|
|
//PlayerViewPivot=(Pitch=400)
|
|
BobDamping=6.000000
|
|
AttachmentClass=Class'KFMod.M4Attachment'
|
|
IconCoords=(X1=245,Y1=39,X2=329,Y2=79)
|
|
ItemName="M4"
|
|
MeshRef="KF_Wep_M4.M4_Trip"
|
|
DrawScale=1.00000
|
|
TransientSoundVolume=1.250000
|
|
AmbientGlow=0
|
|
|
|
AIRating=0.55
|
|
CurrentRating=0.55
|
|
|
|
DisplayFOV=60.000000
|
|
StandardDisplayFOV=60.0
|
|
PlayerIronSightFOV=65
|
|
ZoomTime=0.25
|
|
FastZoomOutTime=0.2
|
|
ZoomInRotation=(Pitch=-910,Yaw=0,Roll=2910)
|
|
bHasAimingMode=true
|
|
ZoomedDisplayFOV=45
|
|
|
|
HudImageRef="KillingFloor2HUD.WeaponSelect.M4_unselected"
|
|
SelectedHudImageRef="KillingFloor2HUD.WeaponSelect.M4"
|
|
TraderInfoTexture=texture'KillingFloor2HUD.Trader_Weapon_Icons.Trader_M4'
|
|
|
|
bIsTier2Weapon=true
|
|
}
|