393 lines
9.5 KiB
Ucode
393 lines
9.5 KiB
Ucode
//=============================================================================
|
|
// M7A3MMedicGun
|
|
//=============================================================================
|
|
// M7 Prototype assault rifle medic gun Inventory Class
|
|
//=============================================================================
|
|
// Killing Floor Source
|
|
// Copyright (C) 2012 Tripwire Interactive LLC
|
|
// - John "Ramm-Jaeger" Gibson and IJC
|
|
//=============================================================================
|
|
class M7A3MMedicGun extends KFMedicGun;
|
|
|
|
//#exec OBJ LOAD FILE="..\Textures\IJCWeaponPackTexW2.utx"
|
|
|
|
var localized string ReloadMessage;
|
|
var localized string EmptyMessage;
|
|
|
|
var() Material ScopeGreen;
|
|
var() Material ScopeRed;
|
|
var() ScriptedTexture MyScriptedTexture;
|
|
//var() Shader AmmoCounter;
|
|
var string MyMessage;
|
|
var int MyHealth;
|
|
var Font MyFont;
|
|
var Font MyFont2;
|
|
var Font SmallMyFont;
|
|
var color MyFontColor;
|
|
var color MyFontColor2;
|
|
var int OldValue;
|
|
|
|
|
|
static function PreloadAssets(Inventory Inv, optional bool bSkipRefCount)
|
|
{
|
|
default.ScopeGreen = Material(DynamicLoadObject("KF_Weapons5_Scopes_Trip_T.M7A3.Scope_Finall", class'Material', true));
|
|
default.ScopeRed = Material(DynamicLoadObject("KF_Weapons5_Scopes_Trip_T.M7A3.ScopeRed_Shader", class'Material', true));
|
|
default.MyScriptedTexture = ScriptedTexture(DynamicLoadObject("KF_Weapons5_Scopes_Trip_T.M7A3_Ammo_Script.AmmoNumber", class'ScriptedTexture', true));
|
|
default.MyFont = Font(DynamicLoadObject("IJCFonts.DigitalBig", class'Font', true));
|
|
default.MyFont2 = Font(DynamicLoadObject("IJCFonts.DigitalBig", class'Font', true));
|
|
default.SmallMyFont = Font(DynamicLoadObject("IJCFonts.DigitalMed", class'Font', true));
|
|
|
|
if ( M7A3MMedicGun(Inv) != none )
|
|
{
|
|
M7A3MMedicGun(Inv).ScopeGreen = default.ScopeGreen;
|
|
M7A3MMedicGun(Inv).ScopeRed = default.ScopeRed;
|
|
M7A3MMedicGun(Inv).MyScriptedTexture = default.MyScriptedTexture;
|
|
M7A3MMedicGun(Inv).MyFont = default.MyFont;
|
|
M7A3MMedicGun(Inv).MyFont2 = default.MyFont2;
|
|
M7A3MMedicGun(Inv).SmallMyFont = default.SmallMyFont;
|
|
}
|
|
|
|
super.PreloadAssets(Inv, bSkipRefCount);
|
|
}
|
|
|
|
static function bool UnloadAssets()
|
|
{
|
|
if ( super.UnloadAssets() )
|
|
{
|
|
default.ScopeGreen = none;
|
|
default.ScopeRed = none;
|
|
default.MyScriptedTexture = none;
|
|
default.MyFont = none;
|
|
default.MyFont2 = none;
|
|
default.SmallMyFont = none;
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
|
|
// The server lets the client know they successfully healed someone
|
|
simulated function ClientSuccessfulHeal(String HealedName)
|
|
{
|
|
if( PlayerController(Instigator.Controller) != none )
|
|
{
|
|
PlayerController(Instigator.controller).ClientMessage(SuccessfulHealMessage$HealedName, 'CriticalEvent');
|
|
}
|
|
}
|
|
|
|
|
|
simulated function MaxOutAmmo()
|
|
{
|
|
if ( bNoAmmoInstances )
|
|
{
|
|
if ( AmmoClass[0] != None )
|
|
AmmoCharge[0] = MaxAmmo(0);
|
|
return;
|
|
}
|
|
if ( Ammo[0] != None )
|
|
Ammo[0].AmmoAmount = Ammo[0].MaxAmmo;
|
|
|
|
HealAmmoCharge = MaxAmmoCount;
|
|
}
|
|
|
|
simulated function SuperMaxOutAmmo()
|
|
{
|
|
HealAmmoCharge = 999;
|
|
|
|
if ( bNoAmmoInstances )
|
|
{
|
|
if ( AmmoClass[0] != None )
|
|
AmmoCharge[0] = 999;
|
|
return;
|
|
}
|
|
if ( Ammo[0] != None )
|
|
Ammo[0].AmmoAmount = 999;
|
|
}
|
|
|
|
simulated function int MaxAmmo(int mode)
|
|
{
|
|
if( Mode == 1 )
|
|
{
|
|
return MaxAmmoCount;
|
|
}
|
|
else
|
|
{
|
|
return super.MaxAmmo(mode);
|
|
}
|
|
}
|
|
|
|
simulated function FillToInitialAmmo()
|
|
{
|
|
if ( bNoAmmoInstances )
|
|
{
|
|
if ( AmmoClass[0] != None )
|
|
AmmoCharge[0] = Max(AmmoCharge[0], AmmoClass[0].Default.InitialAmount);
|
|
HealAmmoCharge = MaxAmmoCount;
|
|
|
|
return;
|
|
}
|
|
|
|
if ( Ammo[0] != None )
|
|
Ammo[0].AmmoAmount = Ammo[0].AmmoAmount;
|
|
|
|
HealAmmoCharge = MaxAmmoCount;
|
|
|
|
}
|
|
|
|
simulated function int AmmoAmount(int mode)
|
|
{
|
|
if( Mode == 1 )
|
|
{
|
|
return HealAmmoCharge;
|
|
MyHealth = ChargeBar() * 100;
|
|
}
|
|
else
|
|
{
|
|
return super.AmmoAmount(mode);
|
|
}
|
|
}
|
|
|
|
simulated function bool AmmoMaxed(int mode)
|
|
{
|
|
if( Mode == 1 )
|
|
{
|
|
return HealAmmoCharge>=MaxAmmoCount;
|
|
}
|
|
else
|
|
{
|
|
return super.AmmoMaxed(mode);
|
|
}
|
|
}
|
|
|
|
simulated function float AmmoStatus(optional int Mode) // returns float value for ammo amount
|
|
{
|
|
if( Mode == 1 )
|
|
{
|
|
return float(HealAmmoCharge)/float(MaxAmmoCount);
|
|
}
|
|
else
|
|
{
|
|
return super.AmmoStatus(Mode);
|
|
}
|
|
}
|
|
|
|
simulated function bool ConsumeAmmo(int Mode, float load, optional bool bAmountNeededIsMax)
|
|
{
|
|
if( Mode == 1 )
|
|
{
|
|
if( Load>HealAmmoCharge )
|
|
{
|
|
return false;
|
|
}
|
|
|
|
HealAmmoCharge-=Load;
|
|
Return True;
|
|
}
|
|
else
|
|
{
|
|
return super.ConsumeAmmo(Mode, load, bAmountNeededIsMax);
|
|
}
|
|
}
|
|
|
|
function bool AddAmmo(int AmmoToAdd, int Mode)
|
|
{
|
|
if( Mode == 1 )
|
|
{
|
|
if( HealAmmoCharge<MaxAmmoCount )
|
|
{
|
|
HealAmmoCharge+=AmmoToAdd;
|
|
if( HealAmmoCharge>MaxAmmoCount )
|
|
{
|
|
HealAmmoCharge = MaxAmmoCount;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
return super.AddAmmo(AmmoToAdd,Mode);
|
|
}
|
|
}
|
|
|
|
simulated function bool HasAmmo()
|
|
{
|
|
if( HealAmmoCharge > 0 )
|
|
{
|
|
return true;
|
|
}
|
|
|
|
if ( bNoAmmoInstances )
|
|
{
|
|
return ( (AmmoClass[0] != none && FireMode[0] != none && AmmoCharge[0] >= FireMode[0].AmmoPerFire) );
|
|
}
|
|
return (Ammo[0] != none && FireMode[0] != none && Ammo[0].AmmoAmount >= FireMode[0].AmmoPerFire);
|
|
}
|
|
|
|
simulated function CheckOutOfAmmo()
|
|
{
|
|
return;
|
|
}
|
|
|
|
|
|
simulated final function SetTextColor( byte R, byte G, byte B )
|
|
{
|
|
MyFontColor.R = R;
|
|
MyFontColor.G = G;
|
|
MyFontColor.B = B;
|
|
MyFontColor.A = 255;
|
|
}
|
|
|
|
simulated final function SetTextColor2( byte R, byte G, byte B )
|
|
{
|
|
MyFontColor2.R = R;
|
|
MyFontColor2.G = G;
|
|
MyFontColor2.B = B;
|
|
MyFontColor2.A = 255;
|
|
}
|
|
|
|
simulated function RenderOverlays( Canvas Canvas )
|
|
{
|
|
if( HealAmmoCharge >=250 )
|
|
{
|
|
MyHealth = ChargeBar() * 100;
|
|
SetTextColor2(76,148,177);
|
|
++MyScriptedTexture.Revision;
|
|
}
|
|
else
|
|
{
|
|
MyHealth = ChargeBar() * 100;
|
|
SetTextColor2(218,18,18);
|
|
++MyScriptedTexture.Revision;
|
|
}
|
|
if( AmmoAmount(0) <= 0 )
|
|
{
|
|
if( OldValue!=-5 )
|
|
{
|
|
OldValue = -5;
|
|
Skins[2] = ScopeRed;
|
|
MyFont = SmallMyFont;
|
|
SetTextColor(218,18,18);
|
|
MyMessage = EmptyMessage;
|
|
++MyScriptedTexture.Revision;
|
|
}
|
|
}
|
|
else if( bIsReloading )
|
|
{
|
|
if( OldValue!=-4 )
|
|
{
|
|
OldValue = -4;
|
|
MyFont = SmallMyFont;
|
|
SetTextColor(32,187,112);
|
|
MyMessage = ReloadMessage;
|
|
++MyScriptedTexture.Revision;
|
|
}
|
|
}
|
|
else if( OldValue!=(MagAmmoRemaining+1) )
|
|
{
|
|
OldValue = MagAmmoRemaining+1;
|
|
Skins[2] = ScopeGreen;
|
|
MyFont = Default.MyFont;
|
|
|
|
if ((MagAmmoRemaining ) <= (MagCapacity/2))
|
|
SetTextColor(32,187,112);
|
|
if ((MagAmmoRemaining ) <= (MagCapacity/3))
|
|
{
|
|
SetTextColor(218,18,18);
|
|
Skins[2] = ScopeRed;
|
|
}
|
|
if ((MagAmmoRemaining ) >= (MagCapacity/2))
|
|
SetTextColor(76,148,177);
|
|
MyMessage = String(MagAmmoRemaining);
|
|
|
|
++MyScriptedTexture.Revision;
|
|
}
|
|
|
|
MyScriptedTexture.Client = Self;
|
|
Super.RenderOverlays(Canvas);
|
|
MyScriptedTexture.Client = None;
|
|
}
|
|
|
|
simulated function RenderTexture( ScriptedTexture Tex )
|
|
{
|
|
local int w, h;
|
|
|
|
// Ammo
|
|
Tex.TextSize( MyMessage, MyFont, w, h );
|
|
Tex.DrawText( ( Tex.USize / 2 ) - ( w / 2 ), ( Tex.VSize / 2 ) - ( h / 1.2 ),MyMessage, MyFont, MyFontColor );
|
|
// Health
|
|
Tex.TextSize( MyHealth, MyFont2, w, h );
|
|
Tex.DrawText( ( Tex.USize / 2 ) - ( w / 2 ), ( Tex.VSize / 2 ) - 8 ,MyHealth, MyFont2, MyFontColor2 );
|
|
}
|
|
|
|
defaultproperties
|
|
{
|
|
HealAmmoCharge=500
|
|
AmmoRegenRate=0.300000
|
|
HealBoostAmount=30
|
|
|
|
SkinRefs(0)="KF_Weapons5_Trip_T.Weapons.M7A3_cmb"
|
|
SkinRefs(1)="KF_Weapons5_Scopes_Trip_T.M7A3_Ammo_Script.AmmoShader"
|
|
SkinRefs(2)="KF_Weapons5_Scopes_Trip_T.M7A3.Scope_Finall"
|
|
SleeveNum=3
|
|
|
|
//KF_Weapons5_Scopes_Trip_T.M7A3.ScopeRed_Shader
|
|
|
|
WeaponReloadAnim=Reload_M7A3
|
|
IdleAimAnim=Idle_Iron
|
|
|
|
MagCapacity=15
|
|
ReloadRate=3.066000
|
|
ReloadAnim="Reload"
|
|
ReloadAnimRate=1.000000
|
|
|
|
Weight=6.000000
|
|
bModeZeroCanDryFire=True
|
|
FireModeClass(0)=Class'KFMod.M7A3MFire'
|
|
FireModeClass(1)=Class'KFMod.M7A3MAltFire'
|
|
PutDownAnim="PutDown"
|
|
SelectSoundRef="KF_M7A3Snd.M7A3_Select"
|
|
SelectForce="SwitchToAssaultRifle"
|
|
|
|
bShowChargingBar=True
|
|
Description="An advanced Horzine prototype assault rifle. Modified to fire healing darts."
|
|
EffectOffset=(X=100.000000,Y=25.000000,Z=-10.000000)
|
|
Priority=100
|
|
InventoryGroup=4
|
|
GroupOffset=13
|
|
PickupClass=Class'KFMod.M7A3MPickup'
|
|
PlayerViewOffset=(X=20.000000,Y=15.000000,Z=-5.000000)
|
|
BobDamping=6.000000
|
|
AttachmentClass=Class'KFMod.M7A3MAttachment'
|
|
IconCoords=(X1=245,Y1=39,X2=329,Y2=79)
|
|
ItemName="M7A3 Medic Gun"
|
|
MeshRef="KF_Wep_M7A3.M7A3"
|
|
DrawScale=1.00000
|
|
TransientSoundVolume=1.250000
|
|
AmbientGlow=0
|
|
|
|
AIRating=0.55
|
|
CurrentRating=0.55
|
|
|
|
DisplayFOV=55.000000
|
|
StandardDisplayFOV=55.000000
|
|
PlayerIronSightFOV=65.000000
|
|
ZoomTime=0.25
|
|
FastZoomOutTime=0.2
|
|
ZoomInRotation=(Pitch=-910,Yaw=0,Roll=2910)
|
|
bHasAimingMode=true
|
|
ZoomedDisplayFOV=45
|
|
|
|
HudImageRef="KillingFloor2HUD.WeaponSelect.M7A3_unselected"
|
|
SelectedHudImageRef="KillingFloor2HUD.WeaponSelect.M7A3"
|
|
TraderInfoTexture=texture'KillingFloor2HUD.Trader_Weapon_Icons.Trader_M7A3'
|
|
SuccessfulHealMessage="You healed "
|
|
ReloadMessage="REL"
|
|
EmptyMessage="Empty"
|
|
|
|
bIsTier3Weapon=true
|
|
|
|
MyFontColor=(B=177,G=148,R=76,A=255)
|
|
MyFontColor2=(B=177,G=148,R=76,A=255)
|
|
}
|