Prepare fixtures
This commit is contained in:
parent
797e5ea192
commit
9c94356263
6021 changed files with 722805 additions and 22 deletions
11
kf_sources/ScrnHMG/Classes/AK47H.uc
Normal file
11
kf_sources/ScrnHMG/Classes/AK47H.uc
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
class AK47H extends GoldenAK47AssaultRifle;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
MagCapacity=35
|
||||
bIsTier2Weapon=False
|
||||
AppID=0
|
||||
FireModeClass(0)=Class'ScrnHMG.AK47HFire'
|
||||
PickupClass=Class'ScrnHMG.AK47HPickup'
|
||||
ItemName="Heavy AK47 SE"
|
||||
}
|
||||
12
kf_sources/ScrnHMG/Classes/AK47HAmmo.uc
Normal file
12
kf_sources/ScrnHMG/Classes/AK47HAmmo.uc
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
class AK47HAmmo extends KFAmmunition;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoPickupAmount=35
|
||||
MaxAmmo=350
|
||||
InitialAmount=175
|
||||
PickupClass=Class'ScrnHMG.Ak47HAmmoPickup'
|
||||
IconMaterial=Texture'KillingFloorHUD.Generic.HUD'
|
||||
IconCoords=(X1=336,Y1=82,X2=382,Y2=125)
|
||||
ItemName="AK47 bullets"
|
||||
}
|
||||
7
kf_sources/ScrnHMG/Classes/AK47HFire.uc
Normal file
7
kf_sources/ScrnHMG/Classes/AK47HFire.uc
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
class AK47HFire extends AK47Fire;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
DamageType=Class'ScrnHMG.DamTypeAK47H'
|
||||
AmmoClass=Class'ScrnHMG.AK47HAmmo'
|
||||
}
|
||||
11
kf_sources/ScrnHMG/Classes/AK47HPickup.uc
Normal file
11
kf_sources/ScrnHMG/Classes/AK47HPickup.uc
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
class AK47HPickup extends GoldenAK47Pickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
cost=500
|
||||
ItemName="Heavy AK47 SE"
|
||||
ItemShortName="Heavy AK47"
|
||||
CorrespondingPerkIndex=10
|
||||
InventoryType=Class'ScrnHMG.AK47H'
|
||||
PickupMessage="You got the Heavy AK47"
|
||||
}
|
||||
721
kf_sources/ScrnHMG/Classes/AUG_A1AR.uc
Normal file
721
kf_sources/ScrnHMG/Classes/AUG_A1AR.uc
Normal file
|
|
@ -0,0 +1,721 @@
|
|||
class AUG_A1AR extends KFWeapon;
|
||||
|
||||
#EXEC OBJ LOAD FILE=HMG_T.utx
|
||||
#EXEC OBJ LOAD FILE=HMG_S.uax
|
||||
#EXEC OBJ LOAD FILE=HMG_A.ukx
|
||||
|
||||
var color ChargeColor;
|
||||
|
||||
var float Range;
|
||||
var float LastRangingTime;
|
||||
|
||||
var() Material ZoomMat;
|
||||
var() Sound ZoomSound;
|
||||
var bool bArrowRemoved;
|
||||
|
||||
var() int lenseMaterialID;
|
||||
|
||||
var() float scopePortalFOVHigh;
|
||||
var() float scopePortalFOV;
|
||||
var() vector XoffsetScoped;
|
||||
var() vector XoffsetHighDetail;
|
||||
|
||||
var() int scopePitch;
|
||||
var() int scopeYaw;
|
||||
var() int scopePitchHigh;
|
||||
var() int scopeYawHigh;
|
||||
|
||||
// 3d Scope vars
|
||||
var ScriptedTexture ScopeScriptedTexture;
|
||||
var Shader ScopeScriptedShader;
|
||||
var Material ScriptedTextureFallback;
|
||||
|
||||
var Combiner ScriptedScopeCombiner;
|
||||
|
||||
var texture TexturedScopeTexture;
|
||||
|
||||
var bool bInitializedScope;
|
||||
// var(Zooming) float ZoomedDisplayFOVHigh;
|
||||
// var float ForceZoomOutTime;
|
||||
|
||||
|
||||
var string ZoomMatRef;
|
||||
var string ScriptedTextureFallbackRef;
|
||||
|
||||
var texture CrosshairTex;
|
||||
var string CrosshairTexRef;
|
||||
//====================================================================
|
||||
|
||||
//=============================================================================
|
||||
// Functions
|
||||
//=============================================================================
|
||||
|
||||
static function PreloadAssets(Inventory Inv, optional bool bSkipRefCount)
|
||||
{
|
||||
local AUG_A1AR W;
|
||||
|
||||
super.PreloadAssets(Inv, bSkipRefCount);
|
||||
|
||||
default.ZoomMat = FinalBlend(DynamicLoadObject(default.ZoomMatRef, class'FinalBlend', true));
|
||||
default.ScriptedTextureFallback = texture(DynamicLoadObject(default.ScriptedTextureFallbackRef, class'texture', true));
|
||||
default.CrosshairTex = texture(DynamicLoadObject(default.CrosshairTexRef, class'texture', true));
|
||||
|
||||
W = AUG_A1AR(Inv);
|
||||
if ( W != none ) {
|
||||
W.ZoomMat = default.ZoomMat;
|
||||
W.ScriptedTextureFallback = default.ScriptedTextureFallback;
|
||||
W.CrosshairTex = default.CrosshairTex;
|
||||
}
|
||||
}
|
||||
|
||||
static function bool UnloadAssets()
|
||||
{
|
||||
if ( super.UnloadAssets() )
|
||||
{
|
||||
default.ZoomMat = none;
|
||||
default.ScriptedTextureFallback = none;
|
||||
default.CrosshairTex = none;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
exec function pfov(int thisFOV)
|
||||
{
|
||||
if( !class'ROEngine.ROLevelInfo'.static.RODebugMode() )
|
||||
return;
|
||||
|
||||
scopePortalFOV = thisFOV;
|
||||
}
|
||||
|
||||
exec function pPitch(int num)
|
||||
{
|
||||
if( !class'ROEngine.ROLevelInfo'.static.RODebugMode() )
|
||||
return;
|
||||
|
||||
scopePitch = num;
|
||||
scopePitchHigh = num;
|
||||
}
|
||||
|
||||
exec function pYaw(int num)
|
||||
{
|
||||
if( !class'ROEngine.ROLevelInfo'.static.RODebugMode() )
|
||||
return;
|
||||
|
||||
scopeYaw = num;
|
||||
scopeYawHigh = num;
|
||||
}
|
||||
|
||||
simulated exec function TexSize(int i, int j)
|
||||
{
|
||||
if( !class'ROEngine.ROLevelInfo'.static.RODebugMode() )
|
||||
return;
|
||||
|
||||
ScopeScriptedTexture.SetSize(i, j);
|
||||
}
|
||||
|
||||
// Helper function for the scope system. The scope system checks here to see when it should draw the portal.
|
||||
// if you want to limit any times the portal should/shouldn't be drawn, add them here.
|
||||
// Ramm 10/27/03
|
||||
simulated function bool ShouldDrawPortal()
|
||||
{
|
||||
// local name thisAnim;
|
||||
// local float animframe;
|
||||
// local float animrate;
|
||||
//
|
||||
// GetAnimParams(0, thisAnim,animframe,animrate);
|
||||
|
||||
// if(bUsingSights && (IsInState('Idle') || IsInState('PostFiring')) && thisAnim != 'scope_shoot_last')
|
||||
if( bAimingRifle )
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
simulated function PostBeginPlay()
|
||||
{
|
||||
super.PostBeginPlay();
|
||||
|
||||
// Get new scope detail value from KFWeapon
|
||||
KFScopeDetail = class'KFMod.KFWeapon'.default.KFScopeDetail;
|
||||
|
||||
UpdateScopeMode();
|
||||
}
|
||||
|
||||
// Handles initializing and swithing between different scope modes
|
||||
simulated function UpdateScopeMode()
|
||||
{
|
||||
if (Level.NetMode != NM_DedicatedServer && Instigator != none && Instigator.IsLocallyControlled() &&
|
||||
Instigator.IsHumanControlled() )
|
||||
{
|
||||
if( KFScopeDetail == KF_ModelScope )
|
||||
{
|
||||
scopePortalFOV = default.scopePortalFOV;
|
||||
ZoomedDisplayFOV = default.ZoomedDisplayFOV;
|
||||
//bPlayerFOVZooms = false;
|
||||
if (bUsingSights)
|
||||
{
|
||||
PlayerViewOffset = XoffsetScoped;
|
||||
}
|
||||
|
||||
if( ScopeScriptedTexture == none )
|
||||
{
|
||||
ScopeScriptedTexture = ScriptedTexture(Level.ObjectPool.AllocateObject(class'ScriptedTexture'));
|
||||
}
|
||||
|
||||
ScopeScriptedTexture.FallBackMaterial = ScriptedTextureFallback;
|
||||
ScopeScriptedTexture.SetSize(1024,1024);
|
||||
ScopeScriptedTexture.Client = Self;
|
||||
|
||||
if( ScriptedScopeCombiner == none )
|
||||
{
|
||||
// Construct the Combiner
|
||||
ScriptedScopeCombiner = Combiner(Level.ObjectPool.AllocateObject(class'Combiner'));
|
||||
ScriptedScopeCombiner.Material1 = CrosshairTex;
|
||||
ScriptedScopeCombiner.FallbackMaterial = Shader'ScopeShaders.Zoomblur.LensShader';
|
||||
ScriptedScopeCombiner.CombineOperation = CO_Multiply;
|
||||
ScriptedScopeCombiner.AlphaOperation = AO_Use_Mask;
|
||||
ScriptedScopeCombiner.Material2 = ScopeScriptedTexture;
|
||||
}
|
||||
|
||||
if( ScopeScriptedShader == none )
|
||||
{
|
||||
// Construct the scope shader
|
||||
ScopeScriptedShader = Shader(Level.ObjectPool.AllocateObject(class'Shader'));
|
||||
ScopeScriptedShader.Diffuse = ScriptedScopeCombiner;
|
||||
ScopeScriptedShader.SelfIllumination = ScriptedScopeCombiner;
|
||||
ScopeScriptedShader.FallbackMaterial = Shader'ScopeShaders.Zoomblur.LensShader';
|
||||
}
|
||||
|
||||
bInitializedScope = true;
|
||||
}
|
||||
else if( KFScopeDetail == KF_ModelScopeHigh )
|
||||
{
|
||||
scopePortalFOV = scopePortalFOVHigh;
|
||||
ZoomedDisplayFOV = default.ZoomedDisplayFOVHigh;
|
||||
//bPlayerFOVZooms = false;
|
||||
if (bUsingSights)
|
||||
{
|
||||
PlayerViewOffset = XoffsetHighDetail;
|
||||
}
|
||||
|
||||
if( ScopeScriptedTexture == none )
|
||||
{
|
||||
ScopeScriptedTexture = ScriptedTexture(Level.ObjectPool.AllocateObject(class'ScriptedTexture'));
|
||||
}
|
||||
ScopeScriptedTexture.FallBackMaterial = ScriptedTextureFallback;
|
||||
ScopeScriptedTexture.SetSize(1024,1024);
|
||||
ScopeScriptedTexture.Client = Self;
|
||||
|
||||
if( ScriptedScopeCombiner == none )
|
||||
{
|
||||
// Construct the Combiner
|
||||
ScriptedScopeCombiner = Combiner(Level.ObjectPool.AllocateObject(class'Combiner'));
|
||||
ScriptedScopeCombiner.Material1 = CrosshairTex;
|
||||
ScriptedScopeCombiner.FallbackMaterial = Shader'ScopeShaders.Zoomblur.LensShader';
|
||||
ScriptedScopeCombiner.CombineOperation = CO_Multiply;
|
||||
ScriptedScopeCombiner.AlphaOperation = AO_Use_Mask;
|
||||
ScriptedScopeCombiner.Material2 = ScopeScriptedTexture;
|
||||
}
|
||||
|
||||
if( ScopeScriptedShader == none )
|
||||
{
|
||||
// Construct the scope shader
|
||||
ScopeScriptedShader = Shader(Level.ObjectPool.AllocateObject(class'Shader'));
|
||||
ScopeScriptedShader.Diffuse = ScriptedScopeCombiner;
|
||||
ScopeScriptedShader.SelfIllumination = ScriptedScopeCombiner;
|
||||
ScopeScriptedShader.FallbackMaterial = Shader'ScopeShaders.Zoomblur.LensShader';
|
||||
}
|
||||
|
||||
bInitializedScope = true;
|
||||
}
|
||||
else if (KFScopeDetail == KF_TextureScope)
|
||||
{
|
||||
ZoomedDisplayFOV = default.ZoomedDisplayFOV;
|
||||
PlayerViewOffset.X = default.PlayerViewOffset.X;
|
||||
//bPlayerFOVZooms = true;
|
||||
|
||||
bInitializedScope = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
simulated event RenderTexture(ScriptedTexture Tex)
|
||||
{
|
||||
local rotator RollMod;
|
||||
|
||||
RollMod = Instigator.GetViewRotation();
|
||||
//RollMod.Roll -= 16384;
|
||||
|
||||
// Rpawn = ROPawn(Instigator);
|
||||
// // Subtract roll from view while leaning - Ramm
|
||||
// if (Rpawn != none && rpawn.LeanAmount != 0)
|
||||
// {
|
||||
// RollMod.Roll += rpawn.LeanAmount;
|
||||
// }
|
||||
|
||||
if(Owner != none && Instigator != none && Tex != none && Tex.Client != none)
|
||||
Tex.DrawPortal(0,0,Tex.USize,Tex.VSize,Owner,(Instigator.Location + Instigator.EyePosition()), RollMod, scopePortalFOV );
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Handles all the functionality for zooming in including
|
||||
* setting the parameters for the weapon, pawn, and playercontroller
|
||||
*
|
||||
* @param bAnimateTransition whether or not to animate this zoom transition
|
||||
*/
|
||||
simulated function ZoomIn(bool bAnimateTransition)
|
||||
{
|
||||
super(BaseKFWeapon).ZoomIn(bAnimateTransition);
|
||||
|
||||
bAimingRifle = True;
|
||||
|
||||
if( KFHumanPawn(Instigator)!=None )
|
||||
KFHumanPawn(Instigator).SetAiming(True);
|
||||
|
||||
if( Level.NetMode != NM_DedicatedServer && KFPlayerController(Instigator.Controller) != none )
|
||||
{
|
||||
if( AimInSound != none )
|
||||
{
|
||||
PlayOwnedSound(AimInSound, SLOT_Interact,,,,, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles all the functionality for zooming out including
|
||||
* setting the parameters for the weapon, pawn, and playercontroller
|
||||
*
|
||||
* @param bAnimateTransition whether or not to animate this zoom transition
|
||||
*/
|
||||
simulated function ZoomOut(bool bAnimateTransition)
|
||||
{
|
||||
super.ZoomOut(bAnimateTransition);
|
||||
|
||||
bAimingRifle = False;
|
||||
|
||||
if( KFHumanPawn(Instigator)!=None )
|
||||
KFHumanPawn(Instigator).SetAiming(False);
|
||||
|
||||
if( Level.NetMode != NM_DedicatedServer && KFPlayerController(Instigator.Controller) != none )
|
||||
{
|
||||
if( AimOutSound != none )
|
||||
{
|
||||
PlayOwnedSound(AimOutSound, SLOT_Interact,,,,, false);
|
||||
}
|
||||
KFPlayerController(Instigator.Controller).TransitionFOV(KFPlayerController(Instigator.Controller).DefaultFOV,0.0);
|
||||
}
|
||||
}
|
||||
|
||||
simulated function WeaponTick(float dt)
|
||||
{
|
||||
super.WeaponTick(dt);
|
||||
|
||||
if( bAimingRifle && ForceZoomOutTime > 0 && Level.TimeSeconds - ForceZoomOutTime > 0 )
|
||||
{
|
||||
ForceZoomOutTime = 0;
|
||||
|
||||
ZoomOut(false);
|
||||
|
||||
if( Role < ROLE_Authority)
|
||||
ServerZoomOut(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 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();
|
||||
}
|
||||
}
|
||||
|
||||
if( Level.NetMode != NM_DedicatedServer && KFPlayerController(Instigator.Controller) != none &&
|
||||
KFScopeDetail == KF_TextureScope )
|
||||
{
|
||||
KFPlayerController(Instigator.Controller).TransitionFOV(PlayerIronSightFOV,0.0);
|
||||
}
|
||||
}
|
||||
|
||||
simulated function bool CanZoomNow()
|
||||
{
|
||||
Return (!FireMode[0].bIsFiring && Instigator!=None && Instigator.Physics!=PHYS_Falling);
|
||||
}
|
||||
|
||||
simulated event RenderOverlays(Canvas Canvas)
|
||||
{
|
||||
local int m;
|
||||
local PlayerController PC;
|
||||
|
||||
if (Instigator == None)
|
||||
return;
|
||||
|
||||
// Lets avoid having to do multiple casts every tick - Ramm
|
||||
PC = PlayerController(Instigator.Controller);
|
||||
|
||||
if(PC == None)
|
||||
return;
|
||||
|
||||
if(!bInitializedScope && PC != none )
|
||||
{
|
||||
UpdateScopeMode();
|
||||
}
|
||||
|
||||
// draw muzzleflashes/smoke for all fire modes so idle state won't
|
||||
// cause emitters to just disappear
|
||||
Canvas.DrawActor(None, false, true); // amb: Clear the z-buffer here
|
||||
|
||||
for (m = 0; m < NUM_FIRE_MODES; m++)
|
||||
{
|
||||
if (FireMode[m] != None)
|
||||
{
|
||||
FireMode[m].DrawMuzzleFlash(Canvas);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
SetLocation( Instigator.Location + Instigator.CalcDrawOffset(self) );
|
||||
SetRotation( Instigator.GetViewRotation() + ZoomRotInterp);
|
||||
|
||||
PreDrawFPWeapon(); // Laurent -- Hook to override things before render (like rotation if using a staticmesh)
|
||||
|
||||
if(bAimingRifle && PC != none && (KFScopeDetail == KF_ModelScope || KFScopeDetail == KF_ModelScopeHigh))
|
||||
{
|
||||
if (ShouldDrawPortal())
|
||||
{
|
||||
if ( ScopeScriptedTexture != none )
|
||||
{
|
||||
Skins[LenseMaterialID] = ScopeScriptedShader;
|
||||
ScopeScriptedTexture.Client = Self; // Need this because this can get corrupted - Ramm
|
||||
ScopeScriptedTexture.Revision = (ScopeScriptedTexture.Revision +1);
|
||||
}
|
||||
}
|
||||
|
||||
bDrawingFirstPerson = true;
|
||||
Canvas.DrawBoundActor(self, false, false,DisplayFOV,PC.Rotation,rot(0,0,0),Instigator.CalcZoomedDrawOffset(self));
|
||||
bDrawingFirstPerson = false;
|
||||
}
|
||||
// Added "bInIronViewCheck here. Hopefully it prevents us getting the scope overlay when not zoomed.
|
||||
// Its a bit of a band-aid solution, but it will work til we get to the root of the problem - Ramm 08/12/04
|
||||
else if( KFScopeDetail == KF_TextureScope && PC.DesiredFOV == PlayerIronSightFOV && bAimingRifle)
|
||||
{
|
||||
Skins[LenseMaterialID] = ScriptedTextureFallback;
|
||||
|
||||
SetZoomBlendColor(Canvas);
|
||||
|
||||
//Black-out either side of the main zoom circle.
|
||||
Canvas.Style = ERenderStyle.STY_Normal;
|
||||
Canvas.SetPos(0, 0);
|
||||
Canvas.DrawTile(ZoomMat, (Canvas.SizeX - Canvas.SizeY) / 2, Canvas.SizeY, 0.0, 0.0, 8, 8);
|
||||
Canvas.SetPos(Canvas.SizeX, 0);
|
||||
Canvas.DrawTile(ZoomMat, -(Canvas.SizeX - Canvas.SizeY) / 2, Canvas.SizeY, 0.0, 0.0, 8, 8);
|
||||
|
||||
//The view through the scope itself.
|
||||
Canvas.Style = 255;
|
||||
Canvas.SetPos((Canvas.SizeX - Canvas.SizeY) / 2,0);
|
||||
Canvas.DrawTile(ZoomMat, Canvas.SizeY, Canvas.SizeY, 0.0, 0.0, 1024, 1024);
|
||||
|
||||
//Draw some useful text.
|
||||
Canvas.Font = Canvas.MedFont;
|
||||
Canvas.SetDrawColor(200,150,0);
|
||||
|
||||
Canvas.SetPos(Canvas.SizeX * 0.16, Canvas.SizeY * 0.43);
|
||||
Canvas.DrawText(" "); //Canvas.DrawText("Zoom: 2.50");
|
||||
|
||||
Canvas.SetPos(Canvas.SizeX * 0.16, Canvas.SizeY * 0.47);
|
||||
}
|
||||
else
|
||||
{
|
||||
Skins[LenseMaterialID] = ScriptedTextureFallback;
|
||||
bDrawingFirstPerson = true;
|
||||
Canvas.DrawActor(self, false, false, DisplayFOV);
|
||||
bDrawingFirstPerson = false;
|
||||
}
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
// Scopes
|
||||
//=============================================================================
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// SetScopeDetail(RO) - Allow the players to change scope detail while ingame.
|
||||
// Changes are saved to the ini file.
|
||||
//------------------------------------------------------------------------------
|
||||
//simulated exec function SetScopeDetail()
|
||||
//{
|
||||
// if( !bHasScope )
|
||||
// return;
|
||||
//
|
||||
// if (KFScopeDetail == KF_ModelScope)
|
||||
// KFScopeDetail = KF_TextureScope;
|
||||
// else if ( KFScopeDetail == KF_TextureScope)
|
||||
// KFScopeDetail = KF_ModelScopeHigh;
|
||||
// else if ( KFScopeDetail == KF_ModelScopeHigh)
|
||||
// KFScopeDetail = KF_ModelScope;
|
||||
//
|
||||
// AdjustIngameScope();
|
||||
// class'KFMod.KFWeapon'.default.KFScopeDetail = KFScopeDetail;
|
||||
// class'KFMod.KFWeapon'.static.StaticSaveConfig(); // saves the new scope detail value to the ini
|
||||
//}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// AdjustIngameScope(RO) - Takes the changes to the ScopeDetail variable and
|
||||
// sets the scope to the new detail mode. Called when the player switches the
|
||||
// scope setting ingame, or when the scope setting is changed from the menu
|
||||
//------------------------------------------------------------------------------
|
||||
simulated function AdjustIngameScope()
|
||||
{
|
||||
local PlayerController PC;
|
||||
|
||||
// Lets avoid having to do multiple casts every tick - Ramm
|
||||
PC = PlayerController(Instigator.Controller);
|
||||
|
||||
if( !bHasScope )
|
||||
return;
|
||||
|
||||
switch (KFScopeDetail)
|
||||
{
|
||||
case KF_ModelScope:
|
||||
if( bAimingRifle )
|
||||
DisplayFOV = default.ZoomedDisplayFOV;
|
||||
if ( PC.DesiredFOV == PlayerIronSightFOV && bAimingRifle )
|
||||
{
|
||||
if( Level.NetMode != NM_DedicatedServer && KFPlayerController(Instigator.Controller) != none )
|
||||
{
|
||||
KFPlayerController(Instigator.Controller).TransitionFOV(KFPlayerController(Instigator.Controller).DefaultFOV,0.0);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case KF_TextureScope:
|
||||
if( bAimingRifle )
|
||||
DisplayFOV = default.ZoomedDisplayFOV;
|
||||
if ( bAimingRifle && PC.DesiredFOV != PlayerIronSightFOV )
|
||||
{
|
||||
if( Level.NetMode != NM_DedicatedServer && KFPlayerController(Instigator.Controller) != none )
|
||||
{
|
||||
KFPlayerController(Instigator.Controller).TransitionFOV(PlayerIronSightFOV,0.0);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case KF_ModelScopeHigh:
|
||||
if( bAimingRifle )
|
||||
{
|
||||
if( ZoomedDisplayFOVHigh > 0 )
|
||||
DisplayFOV = default.ZoomedDisplayFOVHigh;
|
||||
else
|
||||
DisplayFOV = default.ZoomedDisplayFOV;
|
||||
}
|
||||
if ( bAimingRifle && PC.DesiredFOV == PlayerIronSightFOV )
|
||||
{
|
||||
if( Level.NetMode != NM_DedicatedServer && KFPlayerController(Instigator.Controller) != none )
|
||||
{
|
||||
KFPlayerController(Instigator.Controller).TransitionFOV(KFPlayerController(Instigator.Controller).DefaultFOV,0.0);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// Make any chagned to the scope setup
|
||||
UpdateScopeMode();
|
||||
}
|
||||
|
||||
simulated event Destroyed()
|
||||
{
|
||||
if (ScopeScriptedTexture != None)
|
||||
{
|
||||
ScopeScriptedTexture.Client = None;
|
||||
Level.ObjectPool.FreeObject(ScopeScriptedTexture);
|
||||
ScopeScriptedTexture=None;
|
||||
}
|
||||
|
||||
if (ScriptedScopeCombiner != None)
|
||||
{
|
||||
ScriptedScopeCombiner.Material2 = none;
|
||||
Level.ObjectPool.FreeObject(ScriptedScopeCombiner);
|
||||
ScriptedScopeCombiner = none;
|
||||
}
|
||||
|
||||
if (ScopeScriptedShader != None)
|
||||
{
|
||||
ScopeScriptedShader.Diffuse = none;
|
||||
ScopeScriptedShader.SelfIllumination = none;
|
||||
Level.ObjectPool.FreeObject(ScopeScriptedShader);
|
||||
ScopeScriptedShader = none;
|
||||
}
|
||||
|
||||
Super.Destroyed();
|
||||
}
|
||||
|
||||
simulated function PreTravelCleanUp()
|
||||
{
|
||||
if (ScopeScriptedTexture != None)
|
||||
{
|
||||
ScopeScriptedTexture.Client = None;
|
||||
Level.ObjectPool.FreeObject(ScopeScriptedTexture);
|
||||
ScopeScriptedTexture=None;
|
||||
}
|
||||
|
||||
if (ScriptedScopeCombiner != None)
|
||||
{
|
||||
ScriptedScopeCombiner.Material2 = none;
|
||||
Level.ObjectPool.FreeObject(ScriptedScopeCombiner);
|
||||
ScriptedScopeCombiner = none;
|
||||
}
|
||||
|
||||
if (ScopeScriptedShader != None)
|
||||
{
|
||||
ScopeScriptedShader.Diffuse = none;
|
||||
ScopeScriptedShader.SelfIllumination = none;
|
||||
Level.ObjectPool.FreeObject(ScopeScriptedShader);
|
||||
ScopeScriptedShader = none;
|
||||
}
|
||||
}
|
||||
|
||||
//======================================================================
|
||||
|
||||
simulated function AltFire(float F)
|
||||
{
|
||||
if(ReadyToFire(0))
|
||||
{
|
||||
DoToggle();
|
||||
}
|
||||
}
|
||||
|
||||
exec function SwitchModes()
|
||||
{
|
||||
DoToggle();
|
||||
}
|
||||
|
||||
function bool RecommendRangedAttack()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
function bool RecommendLongRangedAttack()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
function float SuggestAttackStyle()
|
||||
{
|
||||
return -1.0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
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;
|
||||
}
|
||||
//======================================================================
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
lenseMaterialID=4
|
||||
scopePortalFOVHigh=17.000000
|
||||
scopePortalFOV=17.000000
|
||||
ZoomMatRef="HMG_T.AUG.AUG-A1_scope_FB"
|
||||
ScriptedTextureFallbackRef="HMG_T.AUG.alpha_lens_64x64"
|
||||
CrosshairTexRef="HMG_T.AUG.AUG-A1_scope"
|
||||
bHasScope=True
|
||||
ZoomedDisplayFOVHigh=70.000000
|
||||
MagCapacity=20
|
||||
ReloadRate=3.500000
|
||||
ReloadAnim="Reload"
|
||||
ReloadAnimRate=1.000000
|
||||
WeaponReloadAnim="Reload_BullPup"
|
||||
Weight=9.000000
|
||||
bHasAimingMode=True
|
||||
IdleAimAnim="Idle_Iron"
|
||||
StandardDisplayFOV=65.000000
|
||||
bModeZeroCanDryFire=True
|
||||
SleeveNum=0
|
||||
TraderInfoTexture=Texture'HMG_T.AUG.trader_AUG_A1'
|
||||
bIsTier2Weapon=True
|
||||
MeshRef="HMG_A.AUG_A1_mesh"
|
||||
SkinRefs(0)="KF_Weapons3_Trip_T.hands.Priest_Hands_1st_P"
|
||||
SkinRefs(1)="HMG_T.AUG.body"
|
||||
SkinRefs(2)="HMG_T.AUG.mag"
|
||||
SkinRefs(3)="HMG_T.AUG.Rec"
|
||||
SkinRefs(4)="HMG_T.AUG.alpha_lens_64x64"
|
||||
SelectSoundRef="HMG_S.AUGND.aug_draw"
|
||||
HudImageRef="HMG_T.AUG.AUG_A1_Unselected"
|
||||
SelectedHudImageRef="HMG_T.AUG.AUG_A1_Selected"
|
||||
PlayerIronSightFOV=32.000000
|
||||
ZoomedDisplayFOV=70.000000
|
||||
FireModeClass(0)=Class'ScrnHMG.AUG_A1ARFire'
|
||||
FireModeClass(1)=Class'KFMod.NoFire'
|
||||
PutDownAnim="PutDown"
|
||||
SelectForce="SwitchToAssaultRifle"
|
||||
AIRating=0.650000
|
||||
CurrentRating=0.650000
|
||||
Description="Steyr AUG 1977 Steyr-Daimler-Puch AG & Co KG)"
|
||||
DisplayFOV=65.000000
|
||||
Priority=170
|
||||
CustomCrosshair=11
|
||||
CustomCrossHairTextureName="Crosshairs.HUD.Crosshair_Cross5"
|
||||
InventoryGroup=4
|
||||
GroupOffset=3
|
||||
PickupClass=Class'ScrnHMG.AUG_A1ARPickup'
|
||||
PlayerViewOffset=(X=15.000000,Y=12.000000,Z=-2.000000)
|
||||
BobDamping=5.000000
|
||||
AttachmentClass=Class'ScrnHMG.AUG_A1ARAttachment'
|
||||
IconCoords=(X1=253,Y1=146,X2=333,Y2=181)
|
||||
ItemName="Steyr AUG A1 SE"
|
||||
}
|
||||
12
kf_sources/ScrnHMG/Classes/AUG_A1ARAmmo.uc
Normal file
12
kf_sources/ScrnHMG/Classes/AUG_A1ARAmmo.uc
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
class AUG_A1ARAmmo extends KFAmmunition;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoPickupAmount=20
|
||||
MaxAmmo=140
|
||||
InitialAmount=60
|
||||
PickupClass=Class'ScrnHMG.AUG_A1ARAmmoPickup'
|
||||
IconMaterial=Texture'KillingFloorHUD.Generic.HUD'
|
||||
IconCoords=(X1=336,Y1=82,X2=382,Y2=125)
|
||||
ItemName="5.56mm NATO"
|
||||
}
|
||||
9
kf_sources/ScrnHMG/Classes/AUG_A1ARAmmoPickup.uc
Normal file
9
kf_sources/ScrnHMG/Classes/AUG_A1ARAmmoPickup.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
class AUG_A1ARAmmoPickup extends KFAmmoPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoAmount=20
|
||||
InventoryType=Class'ScrnHMG.AUG_A1ARAmmo'
|
||||
PickupMessage="5.56mm NATO"
|
||||
StaticMesh=StaticMesh'KillingFloorStatics.L85Ammo'
|
||||
}
|
||||
60
kf_sources/ScrnHMG/Classes/AUG_A1ARAttachment.uc
Normal file
60
kf_sources/ScrnHMG/Classes/AUG_A1ARAttachment.uc
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
class AUG_A1ARAttachment extends KFWeaponAttachment;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
mMuzFlashClass=Class'ROEffects.MuzzleFlash3rdMP'
|
||||
mTracerClass=Class'KFMod.KFNewTracer'
|
||||
mShellCaseEmitterClass=Class'KFMod.KFShellSpewer'
|
||||
ShellEjectBoneName="Shell_eject"
|
||||
MovementAnims(0)="JogF_SCAR"
|
||||
MovementAnims(1)="JogB_SCAR"
|
||||
MovementAnims(2)="JogL_SCAR"
|
||||
MovementAnims(3)="JogR_SCAR"
|
||||
TurnLeftAnim="TurnL_SCAR"
|
||||
TurnRightAnim="TurnR_SCAR"
|
||||
CrouchAnims(0)="CHWalkF_SCAR"
|
||||
CrouchAnims(1)="CHWalkB_SCAR"
|
||||
CrouchAnims(2)="CHWalkL_SCAR"
|
||||
CrouchAnims(3)="CHWalkR_SCAR"
|
||||
WalkAnims(0)="WalkF_SCAR"
|
||||
WalkAnims(1)="WalkB_SCAR"
|
||||
WalkAnims(2)="WalkL_SCAR"
|
||||
WalkAnims(3)="WalkR_SCAR"
|
||||
CrouchTurnRightAnim="CH_TurnR_SCAR"
|
||||
CrouchTurnLeftAnim="CH_TurnL_SCAR"
|
||||
IdleCrouchAnim="CHIdle_SCAR"
|
||||
IdleWeaponAnim="Idle_SCAR"
|
||||
IdleRestAnim="Idle_SCAR"
|
||||
IdleChatAnim="Idle_SCAR"
|
||||
IdleHeavyAnim="Idle_SCAR"
|
||||
IdleRifleAnim="Idle_SCAR"
|
||||
FireAnims(0)="Fire_SCAR"
|
||||
FireAnims(1)="Fire_SCAR"
|
||||
FireAnims(2)="Fire_SCAR"
|
||||
FireAnims(3)="Fire_SCAR"
|
||||
FireAltAnims(0)="Fire_SCAR"
|
||||
FireAltAnims(1)="Fire_SCAR"
|
||||
FireAltAnims(2)="Fire_SCAR"
|
||||
FireAltAnims(3)="Fire_SCAR"
|
||||
FireCrouchAnims(0)="CHFire_SCAR"
|
||||
FireCrouchAnims(1)="CHFire_SCAR"
|
||||
FireCrouchAnims(2)="CHFire_SCAR"
|
||||
FireCrouchAnims(3)="CHFire_SCAR"
|
||||
FireCrouchAltAnims(0)="CHFire_SCAR"
|
||||
FireCrouchAltAnims(1)="CHFire_SCAR"
|
||||
FireCrouchAltAnims(2)="CHFire_SCAR"
|
||||
FireCrouchAltAnims(3)="CHFire_SCAR"
|
||||
HitAnims(0)="HitF_SCAR"
|
||||
HitAnims(1)="HitB_SCAR"
|
||||
HitAnims(2)="HitL_SCAR"
|
||||
HitAnims(3)="HitR_SCAR"
|
||||
PostFireBlendStandAnim="Blend_SCAR"
|
||||
PostFireBlendCrouchAnim="CHBlend_SCAR"
|
||||
MeshRef="HMG_A.AUG_A1_3rd"
|
||||
bHeavy=True
|
||||
bRapidFire=True
|
||||
bAltRapidFire=True
|
||||
SplashEffect=Class'ROEffects.BulletSplashEmitter'
|
||||
CullDistance=5000.000000
|
||||
DrawScale=0.800000
|
||||
}
|
||||
41
kf_sources/ScrnHMG/Classes/AUG_A1ARFire.uc
Normal file
41
kf_sources/ScrnHMG/Classes/AUG_A1ARFire.uc
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
//=============================================================================
|
||||
//AUG A1 Fire
|
||||
//=============================================================================
|
||||
class AUG_A1ARFire extends KFFire;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
FireAimedAnim="Idle_Iron"
|
||||
RecoilRate=0.080000
|
||||
maxVerticalRecoilAngle=500
|
||||
maxHorizontalRecoilAngle=250
|
||||
ShellEjectClass=Class'ROEffects.KFShellEjectBullpup'
|
||||
ShellEjectBoneName="Shell_eject"
|
||||
bAccuracyBonusForSemiAuto=True
|
||||
FireSoundRef="HMG_S.AUGND.aug_fire"
|
||||
StereoFireSoundRef="HMG_S.AUGND.aug_fire"
|
||||
NoAmmoSoundRef="HMG_S.AUGND.aug_empty"
|
||||
DamageType=Class'ScrnHMG.DamTypeAUG_A1AR'
|
||||
DamageMin=40
|
||||
DamageMax=50
|
||||
Momentum=12000.000000
|
||||
bPawnRapidFireAnim=True
|
||||
TransientSoundVolume=1.800000
|
||||
FireLoopAnim="Fire"
|
||||
TweenTime=0.025000
|
||||
FireForce="AssaultRifleFire"
|
||||
FireRate=0.120000
|
||||
AmmoClass=Class'ScrnHMG.AUG_A1ARAmmo'
|
||||
AmmoPerFire=1
|
||||
ShakeRotMag=(X=75.000000,Y=75.000000,Z=250.000000)
|
||||
ShakeRotRate=(X=10000.000000,Y=10000.000000,Z=10000.000000)
|
||||
ShakeRotTime=0.500000
|
||||
ShakeOffsetMag=(X=6.000000,Y=3.000000,Z=10.000000)
|
||||
ShakeOffsetRate=(X=1000.000000,Y=1000.000000,Z=1000.000000)
|
||||
ShakeOffsetTime=1.000000
|
||||
BotRefireRate=0.990000
|
||||
FlashEmitterClass=Class'ROEffects.MuzzleFlash1stSTG'
|
||||
aimerror=42.000000
|
||||
Spread=0.005500
|
||||
SpreadStyle=SS_Random
|
||||
}
|
||||
24
kf_sources/ScrnHMG/Classes/AUG_A1ARPickup.uc
Normal file
24
kf_sources/ScrnHMG/Classes/AUG_A1ARPickup.uc
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
class AUG_A1ARPickup extends KFWeaponPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Weight=9.000000
|
||||
AmmoCost=30
|
||||
BuyClipSize=20
|
||||
PowerValue=45
|
||||
SpeedValue=65
|
||||
RangeValue=90
|
||||
Description="Steyr AUG 1977 Steyr-Daimler-Puch AG & Co KG )"
|
||||
ItemName="Steyr AUG A1 SE"
|
||||
ItemShortName="AUG A1"
|
||||
AmmoItemName="Rounds 5.56mm NATO"
|
||||
CorrespondingPerkIndex=10
|
||||
EquipmentCategoryID=2
|
||||
InventoryType=Class'ScrnHMG.AUG_A1AR'
|
||||
PickupMessage="You picked up the Steyr AUG A1"
|
||||
PickupSound=Sound'HMG_S.AUG.aug_pickup'
|
||||
PickupForce="AssaultRiflePickup"
|
||||
StaticMesh=StaticMesh'HMG_A.AUG_A1_st'
|
||||
CollisionRadius=30.000000
|
||||
CollisionHeight=5.000000
|
||||
}
|
||||
9
kf_sources/ScrnHMG/Classes/Ak47HAmmoPickup.uc
Normal file
9
kf_sources/ScrnHMG/Classes/Ak47HAmmoPickup.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
class Ak47HAmmoPickup extends KFAmmoPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoAmount=35
|
||||
InventoryType=Class'ScrnHMG.AK47HAmmo'
|
||||
PickupMessage="Rounds 7.62mm"
|
||||
StaticMesh=StaticMesh'KillingFloorStatics.L85Ammo'
|
||||
}
|
||||
6
kf_sources/ScrnHMG/Classes/BruteGunnerPerkProg.uc
Normal file
6
kf_sources/ScrnHMG/Classes/BruteGunnerPerkProg.uc
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
class BruteGunnerPerkProg extends SRCustomProgressInt;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
ProgressName="Heavy MG Damage"
|
||||
}
|
||||
65
kf_sources/ScrnHMG/Classes/CGShellEject.uc
Normal file
65
kf_sources/ScrnHMG/Classes/CGShellEject.uc
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
class CGShellEject extends KFShellEject;
|
||||
|
||||
simulated function Trigger(Actor Other, Pawn EventInstigator)
|
||||
{
|
||||
Emitters[0].SpawnParticle(1);
|
||||
Emitters[1].SpawnParticle(1);
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Begin Object Class=MeshEmitter Name=MeshEmitter0
|
||||
StaticMesh=StaticMesh'kf_generic_sm.Bullet_Shells.winchester_shell'
|
||||
RespawnDeadParticles=False
|
||||
ZTest=False
|
||||
SpinParticles=True
|
||||
AutomaticInitialSpawning=False
|
||||
Acceleration=(Z=-500.000000)
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
|
||||
MaxParticles=50
|
||||
UseRotationFrom=PTRS_Actor
|
||||
SpinsPerSecondRange=(X=(Min=-3.000000,Max=3.000000),Y=(Min=-3.000000,Max=3.000000),Z=(Min=-3.000000,Max=3.000000))
|
||||
StartSizeRange=(X=(Min=6.000000,Max=6.000000),Y=(Min=6.000000,Max=6.000000),Z=(Min=6.000000,Max=6.000000))
|
||||
LifetimeRange=(Min=5.000000,Max=5.000000)
|
||||
StartVelocityRange=(Y=(Min=100.000000,Max=100.000000),Z=(Min=100.000000,Max=150.000000))
|
||||
End Object
|
||||
Emitters(0)=MeshEmitter'ScrnHMG.CGShellEject.MeshEmitter0'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter0
|
||||
UseDirectionAs=PTDU_Up
|
||||
UseCollision=True
|
||||
UseColorScale=True
|
||||
FadeOut=True
|
||||
FadeIn=True
|
||||
RespawnDeadParticles=False
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
ScaleSizeXByVelocity=True
|
||||
AutomaticInitialSpawning=False
|
||||
Acceleration=(Z=-210.000000)
|
||||
DampingFactorRange=(X=(Min=0.500000,Max=0.500000),Y=(Min=0.500000,Max=0.500000),Z=(Min=0.500000,Max=0.500000))
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=187))
|
||||
ColorScale(1)=(RelativeTime=0.214286,Color=(G=103,R=206,A=255))
|
||||
ColorScale(2)=(RelativeTime=0.439286,Color=(B=100,G=177,R=255,A=255))
|
||||
ColorScale(3)=(RelativeTime=1.000000,Color=(G=103,R=206,A=255))
|
||||
ColorScale(4)=(RelativeTime=1.000000,Color=(G=103,R=206,A=255))
|
||||
ColorScale(5)=(RelativeTime=1.000000,Color=(R=128,A=255))
|
||||
ColorScale(6)=(RelativeTime=1.000000)
|
||||
ColorScale(7)=(RelativeTime=1.000000)
|
||||
FadeOutStartTime=0.336000
|
||||
FadeInEndTime=0.064000
|
||||
MaxParticles=50
|
||||
UseRotationFrom=PTRS_Actor
|
||||
SizeScale(0)=(RelativeSize=1.000000)
|
||||
SizeScale(1)=(RelativeTime=1.000000,RelativeSize=0.250000)
|
||||
StartSizeRange=(X=(Min=0.500000,Max=0.500000),Y=(Min=0.500000,Max=0.500000),Z=(Min=0.500000,Max=0.500000))
|
||||
ScaleSizeByVelocityMultiplier=(X=0.010000,Y=0.010000)
|
||||
Texture=Texture'KFX.KFSparkHead'
|
||||
LifetimeRange=(Min=1.500000,Max=1.500000)
|
||||
StartVelocityRange=(X=(Min=-100.000000,Max=100.000000),Y=(Min=50.000000,Max=100.000000),Z=(Min=50.000000,Max=100.000000))
|
||||
End Object
|
||||
Emitters(1)=SpriteEmitter'ScrnHMG.CGShellEject.SpriteEmitter0'
|
||||
|
||||
}
|
||||
153
kf_sources/ScrnHMG/Classes/ChainGun.uc
Normal file
153
kf_sources/ScrnHMG/Classes/ChainGun.uc
Normal file
|
|
@ -0,0 +1,153 @@
|
|||
//=============================================================================
|
||||
// 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
|
||||
}
|
||||
55
kf_sources/ScrnHMG/Classes/ChainGunAltFire.uc
Normal file
55
kf_sources/ScrnHMG/Classes/ChainGunAltFire.uc
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
//=============================================================================
|
||||
// HuskGunFire
|
||||
//=============================================================================
|
||||
// Husk Gun primary fire class
|
||||
//=============================================================================
|
||||
// Killing Floor Source
|
||||
// Copyright (C) 2011 Tripwire Interactive LLC
|
||||
// - John "Ramm-Jaeger" Gibson
|
||||
//=============================================================================
|
||||
|
||||
class ChainGunAltFire extends KFShotgunFire;
|
||||
|
||||
simulated function bool AllowFire()
|
||||
{
|
||||
return (Weapon.AmmoAmount(ThisModeNum) >= AmmoPerFire);
|
||||
}
|
||||
|
||||
function float MaxRange()
|
||||
{
|
||||
return 5000;
|
||||
}
|
||||
|
||||
function DoFireEffect()
|
||||
{
|
||||
Super(KFShotgunFire).DoFireEffect();
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
CrouchedAccuracyBonus=0.100000
|
||||
KickMomentum=(X=-45.000000,Z=25.000000)
|
||||
maxVerticalRecoilAngle=1000
|
||||
maxHorizontalRecoilAngle=250
|
||||
bRandomPitchFireSound=False
|
||||
FireSoundRef="KF_LAWSnd.LAW_Fire"
|
||||
StereoFireSoundRef="KF_LAWSnd.LAW_FireST"
|
||||
NoAmmoSoundRef="KF_LAWSnd.LAW_DryFire"
|
||||
ProjPerFire=1
|
||||
ProjSpawnOffset=(X=50.000000,Z=0.000000)
|
||||
bSplashDamage=True
|
||||
bRecommendSplashDamage=True
|
||||
TransientSoundVolume=1.800000
|
||||
FireForce="redeemer_shoot"
|
||||
FireRate=3.250000
|
||||
AmmoClass=Class'ScrnHMG.RocketAmmo'
|
||||
ShakeRotMag=(X=50.000000,Y=50.000000,Z=400.000000)
|
||||
ShakeRotRate=(X=12500.000000,Y=12500.000000,Z=12500.000000)
|
||||
ShakeRotTime=5.000000
|
||||
ShakeOffsetMag=(X=6.000000,Y=2.000000,Z=10.000000)
|
||||
ShakeOffsetRate=(X=1000.000000,Y=1000.000000,Z=1000.000000)
|
||||
ShakeOffsetTime=3.000000
|
||||
ProjectileClass=Class'ScrnBalanceSrv.ScrnLAWProj'
|
||||
BotRefireRate=3.250000
|
||||
Spread=0.100000
|
||||
}
|
||||
20
kf_sources/ScrnHMG/Classes/ChainGunAmmo.uc
Normal file
20
kf_sources/ScrnHMG/Classes/ChainGunAmmo.uc
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
// HuskGunAmmo
|
||||
//=============================================================================
|
||||
// Ammo for the Husk Gun primary fire
|
||||
//=============================================================================
|
||||
// Killing Floor Source
|
||||
// Copyright (C) 2011 Tripwire Interactive LLC
|
||||
// - John "Ramm-Jaeger" Gibson
|
||||
//=============================================================================
|
||||
class ChainGunAmmo extends KFAmmunition;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoPickupAmount=150
|
||||
MaxAmmo=900
|
||||
InitialAmount=300
|
||||
PickupClass=Class'ScrnHMG.ChainGunAmmoPickup'
|
||||
IconMaterial=Texture'KillingFloorHUD.Generic.HUD'
|
||||
IconCoords=(X1=4,Y1=350,X2=110,Y2=395)
|
||||
ItemName="Chaingun bullets"
|
||||
}
|
||||
19
kf_sources/ScrnHMG/Classes/ChainGunAmmoPickup.uc
Normal file
19
kf_sources/ScrnHMG/Classes/ChainGunAmmoPickup.uc
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
//=============================================================================
|
||||
// HuskGunAmmoPickup
|
||||
//=============================================================================
|
||||
// Ammo pickup class for the Husk Gun primary fire
|
||||
//=============================================================================
|
||||
// Killing Floor Source
|
||||
// Copyright (C) 2011 Tripwire Interactive LLC
|
||||
// - John "Ramm-Jaeger" Gibson
|
||||
//=============================================================================
|
||||
class ChainGunAmmoPickup extends KFAmmoPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoAmount=100
|
||||
InventoryType=Class'ScrnHMG.ChainGunAmmo'
|
||||
PickupMessage="Chaingun Bullets"
|
||||
StaticMesh=StaticMesh'KillingFloorStatics.FT_AmmoMesh'
|
||||
CollisionRadius=25.000000
|
||||
}
|
||||
137
kf_sources/ScrnHMG/Classes/ChainGunAttachment.uc
Normal file
137
kf_sources/ScrnHMG/Classes/ChainGunAttachment.uc
Normal file
|
|
@ -0,0 +1,137 @@
|
|||
//=============================================================================
|
||||
// HuskGunAttachment
|
||||
//=============================================================================
|
||||
// Husk Gun third person attachment class
|
||||
//=============================================================================
|
||||
// Killing Floor Source
|
||||
// Copyright (C) 2011 Tripwire Interactive LLC
|
||||
// - John "Ramm-Jaeger" Gibson
|
||||
//=============================================================================
|
||||
class ChainGunAttachment extends KFWeaponAttachment;
|
||||
|
||||
var byte HuskGunCharge, OldHuskGunCharge;
|
||||
var() class<Emitter> ChargeEmitterClass;
|
||||
var() Emitter ChargeEmitter;
|
||||
|
||||
replication
|
||||
{
|
||||
// Things the server should send to the client.
|
||||
reliable if( bNetDirty && (!bNetOwner || bDemoRecording || bRepClientDemo) && (Role==ROLE_Authority) )
|
||||
HuskGunCharge;
|
||||
}
|
||||
|
||||
simulated function PostNetReceive()
|
||||
{
|
||||
if( HuskGunCharge!=OldHuskGunCharge )
|
||||
{
|
||||
OldHuskGunCharge = HuskGunCharge;
|
||||
UpdateHuskGunCharge();
|
||||
}
|
||||
}
|
||||
|
||||
simulated function UpdateHuskGunCharge()
|
||||
{
|
||||
local float ChargeScale;
|
||||
|
||||
if( Level.NetMode == NM_DedicatedServer )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if( HuskGunCharge == 0 )
|
||||
{
|
||||
DestroyChargeEffect();
|
||||
}
|
||||
else
|
||||
{
|
||||
InitChargeEffect();
|
||||
|
||||
ChargeScale = float(HuskGunCharge)/255.0;
|
||||
|
||||
ChargeEmitter.Emitters[0].SizeScale[1].RelativeSize = Lerp( ChargeScale, 1, 3 );
|
||||
ChargeEmitter.Emitters[1].StartVelocityRadialRange.Min = Lerp( ChargeScale, 10, 75 );
|
||||
ChargeEmitter.Emitters[1].StartVelocityRadialRange.Max = Lerp( ChargeScale, 10, 75 );
|
||||
ChargeEmitter.Emitters[1].SizeScale[0].RelativeSize = Lerp( ChargeScale, 1, 3 );
|
||||
}
|
||||
}
|
||||
|
||||
simulated function Destroyed()
|
||||
{
|
||||
DestroyChargeEffect();
|
||||
|
||||
Super.Destroyed();
|
||||
}
|
||||
|
||||
simulated function InitChargeEffect()
|
||||
{
|
||||
// don't even spawn on server
|
||||
if ( Level.NetMode == NM_DedicatedServer)
|
||||
return;
|
||||
|
||||
if ( (ChargeEmitterClass != None) && ((ChargeEmitter == None) || ChargeEmitter.bDeleteMe) )
|
||||
{
|
||||
ChargeEmitter = Spawn(ChargeEmitterClass);
|
||||
if ( ChargeEmitter != None )
|
||||
AttachToBone(ChargeEmitter, 'tip');
|
||||
}
|
||||
}
|
||||
|
||||
simulated function DestroyChargeEffect()
|
||||
{
|
||||
if (ChargeEmitter != None)
|
||||
ChargeEmitter.Destroy();
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
ChargeEmitterClass=Class'ROEffects.ChargeUp3rdHusk'
|
||||
mMuzFlashClass=Class'ROEffects.MuzzleFlash3rdNadeL'
|
||||
MovementAnims(0)="JogF_HuskGun"
|
||||
MovementAnims(1)="JogB_HuskGun"
|
||||
MovementAnims(2)="JogL_HuskGun"
|
||||
MovementAnims(3)="JogR_HuskGun"
|
||||
TurnLeftAnim="TurnL_HuskGun"
|
||||
TurnRightAnim="TurnR_HuskGun"
|
||||
CrouchAnims(0)="CHWalkF_HuskGun"
|
||||
CrouchAnims(1)="CHWalkB_HuskGun"
|
||||
CrouchAnims(2)="CHWalkL_HuskGun"
|
||||
CrouchAnims(3)="CHWalkR_HuskGun"
|
||||
WalkAnims(0)="WalkF_HuskGun"
|
||||
WalkAnims(1)="WalkB_HuskGun"
|
||||
WalkAnims(2)="WalkL_HuskGun"
|
||||
WalkAnims(3)="WalkR_HuskGun"
|
||||
CrouchTurnRightAnim="CH_TurnR_HuskGun"
|
||||
CrouchTurnLeftAnim="CH_TurnL_HuskGun"
|
||||
IdleCrouchAnim="CHIdle_HuskGun"
|
||||
IdleWeaponAnim="Idle_HuskGun"
|
||||
IdleRestAnim="Idle_HuskGun"
|
||||
IdleChatAnim="Idle_HuskGun"
|
||||
IdleHeavyAnim="Idle_HuskGun"
|
||||
IdleRifleAnim="Idle_HuskGun"
|
||||
FireAnims(0)="Fire_HuskGun"
|
||||
FireAnims(1)="Fire_HuskGun"
|
||||
FireAnims(2)="Fire_HuskGun"
|
||||
FireAnims(3)="Fire_HuskGun"
|
||||
FireAltAnims(0)="Fire_HuskGun"
|
||||
FireAltAnims(1)="Fire_HuskGun"
|
||||
FireAltAnims(2)="Fire_HuskGun"
|
||||
FireAltAnims(3)="Fire_HuskGun"
|
||||
FireCrouchAnims(0)="CHFire_HuskGun"
|
||||
FireCrouchAnims(1)="CHFire_HuskGun"
|
||||
FireCrouchAnims(2)="CHFire_HuskGun"
|
||||
FireCrouchAnims(3)="CHFire_HuskGun"
|
||||
FireCrouchAltAnims(0)="CHFire_HuskGun"
|
||||
FireCrouchAltAnims(1)="CHFire_HuskGun"
|
||||
FireCrouchAltAnims(2)="CHFire_HuskGun"
|
||||
FireCrouchAltAnims(3)="CHFire_HuskGun"
|
||||
HitAnims(0)="HitF_HuskGun"
|
||||
HitAnims(1)="HitB_HuskGun"
|
||||
HitAnims(2)="HitL_HuskGun"
|
||||
HitAnims(3)="HitR_HuskGun"
|
||||
PostFireBlendStandAnim="Blend_HuskGun"
|
||||
PostFireBlendCrouchAnim="CHBlend_HuskGun"
|
||||
MeshRef="HMG_A.PatGunMesh_3rd"
|
||||
WeaponAmbientScale=2.000000
|
||||
DrawScale=1.250000
|
||||
Skins(0)=Texture'kf_fx_trip_t.Gore.Patriarch_Gore_Limbs_Diff'
|
||||
}
|
||||
31
kf_sources/ScrnHMG/Classes/ChainGunFire.uc
Normal file
31
kf_sources/ScrnHMG/Classes/ChainGunFire.uc
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
class ChainGunFire extends KFHighROFFire;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
FireEndSoundRef="KF_BasePatriarch.Attack.Kev_MG_TurbineWindDown"
|
||||
AmbientFireSoundRef="KF_BasePatriarch.Attack.Kev_MG_GunfireLoop"
|
||||
RecoilRate=0.005000
|
||||
maxVerticalRecoilAngle=20
|
||||
maxHorizontalRecoilAngle=15
|
||||
RecoilVelocityScale=0.000000
|
||||
ShellEjectClass=Class'ScrnHMG.CGShellEject'
|
||||
ShellEjectBoneName="Barrel"
|
||||
DamageType=Class'ScrnHMG.DamTypeCG'
|
||||
DamageMin=60
|
||||
DamageMax=60
|
||||
Momentum=15000.000000
|
||||
FireLoopAnim="FireLoop"
|
||||
FireEndAnim="FireLoopEnd"
|
||||
FireAnimRate=1.500000
|
||||
FireRate=0.080000
|
||||
AmmoClass=Class'ScrnHMG.ChainGunAmmo'
|
||||
ShakeRotMag=(X=25.000000,Y=25.000000,Z=125.000000)
|
||||
ShakeRotRate=(X=10000.000000,Y=10000.000000,Z=10000.000000)
|
||||
ShakeRotTime=3.000000
|
||||
ShakeOffsetMag=(X=4.000000,Y=2.500000,Z=5.000000)
|
||||
ShakeOffsetRate=(X=1000.000000,Y=1000.000000,Z=1000.000000)
|
||||
ShakeOffsetTime=1.250000
|
||||
FlashEmitterClass=Class'ROEffects.MuzzleFlash1stMG'
|
||||
Spread=0.200000
|
||||
SpreadStyle=SS_Random
|
||||
}
|
||||
9
kf_sources/ScrnHMG/Classes/ChainGunPickup.uc
Normal file
9
kf_sources/ScrnHMG/Classes/ChainGunPickup.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
class ChainGunPickup extends ChainGunPrimaryPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoCost=20
|
||||
BuyClipSize=1
|
||||
SecondaryAmmoShortName="-- Rockets"
|
||||
PrimaryWeaponPickup=Class'ScrnHMG.ChainGunPrimaryPickup'
|
||||
}
|
||||
28
kf_sources/ScrnHMG/Classes/ChainGunPrimaryPickup.uc
Normal file
28
kf_sources/ScrnHMG/Classes/ChainGunPrimaryPickup.uc
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
class ChainGunPrimaryPickup extends KFWeaponPickup
|
||||
abstract;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Weight=17.000000
|
||||
cost=8000
|
||||
AmmoCost=80
|
||||
BuyClipSize=150
|
||||
PowerValue=80
|
||||
SpeedValue=100
|
||||
RangeValue=60
|
||||
Description="Chaingun ripped from dead Patriarch's hand. Or maybe ripped WITH. Or even WITH ALIVE. It works and nothing else matters."
|
||||
ItemName="Pat's Chaingun SE"
|
||||
ItemShortName="Chaingun SE"
|
||||
AmmoItemName="Chaingun Bullets"
|
||||
AmmoMesh=StaticMesh'KillingFloorStatics.FT_AmmoMesh'
|
||||
CorrespondingPerkIndex=10
|
||||
EquipmentCategoryID=3
|
||||
MaxDesireability=0.790000
|
||||
InventoryType=Class'ScrnHMG.ChainGun'
|
||||
PickupMessage="You got the Patriarch's Chain Gun."
|
||||
PickupSound=Sound'KF_HuskGunSnd.foley.Husk_Pickup'
|
||||
PickupForce="AssaultRiflePickup"
|
||||
StaticMesh=StaticMesh'kf_gore_trip_sm.limbs.Patriarch_Gun_Arm_Resource'
|
||||
CollisionRadius=25.000000
|
||||
CollisionHeight=10.000000
|
||||
}
|
||||
14
kf_sources/ScrnHMG/Classes/DamTypeAK47H.uc
Normal file
14
kf_sources/ScrnHMG/Classes/DamTypeAK47H.uc
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
class DamTypeAK47H extends DamTypeHeavy
|
||||
abstract;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
WeaponClass=Class'ScrnHMG.AK47H'
|
||||
DeathString="%k killed %o (Heavy AK47)."
|
||||
FemaleSuicide="%o shot herself in the foot."
|
||||
MaleSuicide="%o shot himself in the foot."
|
||||
bRagdollBullet=True
|
||||
KDamageImpulse=5500.000000
|
||||
KDeathVel=175.000000
|
||||
KDeathUpKick=15.000000
|
||||
}
|
||||
15
kf_sources/ScrnHMG/Classes/DamTypeAUG_A1AR.uc
Normal file
15
kf_sources/ScrnHMG/Classes/DamTypeAUG_A1AR.uc
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
class DamTypeAUG_A1AR extends DamTypeHeavy
|
||||
abstract;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
HeadShotDamageMult=1.600000
|
||||
bCheckForHeadShots=True
|
||||
WeaponClass=Class'ScrnHMG.AUG_A1AR'
|
||||
DeathString="%k killed %o (Steyr AUG A1)."
|
||||
bRagdollBullet=True
|
||||
DamageThreshold=1
|
||||
KDamageImpulse=5000.000000
|
||||
KDeathVel=600.000000
|
||||
KDeathUpKick=20.000000
|
||||
}
|
||||
18
kf_sources/ScrnHMG/Classes/DamTypeCG.uc
Normal file
18
kf_sources/ScrnHMG/Classes/DamTypeCG.uc
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
class DamTypeCG extends DamTypeHeavy
|
||||
abstract;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
WeaponClass=Class'ScrnHMG.ChainGun'
|
||||
DeathString="%k killed %o (Pat's Chain Gun)."
|
||||
FemaleSuicide="%o shot herself in the foot."
|
||||
MaleSuicide="%o shot himself in the foot."
|
||||
bRagdollBullet=True
|
||||
bBulletHit=True
|
||||
DeathOverlayMaterial=Combiner'Effects_Tex.GoreDecals.PlayerDeathOverlay'
|
||||
DeathOverlayTime=999.000000
|
||||
KDamageImpulse=14500.000000
|
||||
KDeathVel=1500.000000
|
||||
KDeathUpKick=200.000000
|
||||
VehicleDamageScaling=0.700000
|
||||
}
|
||||
7
kf_sources/ScrnHMG/Classes/DamTypeHeavy.uc
Normal file
7
kf_sources/ScrnHMG/Classes/DamTypeHeavy.uc
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
// Heavy Machinegunners's base damage type
|
||||
class DamTypeHeavy extends DamTypeHeavyBase
|
||||
abstract;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
}
|
||||
13
kf_sources/ScrnHMG/Classes/DamTypeHeavyBase.uc
Normal file
13
kf_sources/ScrnHMG/Classes/DamTypeHeavyBase.uc
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
// Heavy Machinegunner's base damage type
|
||||
class DamTypeHeavyBase extends ScrnDamTypeHeavyBase
|
||||
abstract;
|
||||
|
||||
static function AwardDamage(KFSteamStatsAndAchievements KFStatsAndAchievements, int Amount)
|
||||
{
|
||||
if( SRStatsBase(KFStatsAndAchievements)!=None && SRStatsBase(KFStatsAndAchievements).Rep!=None )
|
||||
SRStatsBase(KFStatsAndAchievements).Rep.ProgressCustomValue(Class'BruteGunnerPerkProg',Amount);
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
}
|
||||
18
kf_sources/ScrnHMG/Classes/DamTypeM249SAW.uc
Normal file
18
kf_sources/ScrnHMG/Classes/DamTypeM249SAW.uc
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
class DamTypeM249SAW extends DamTypeHeavy
|
||||
abstract;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
WeaponClass=Class'ScrnHMG.M249SAW'
|
||||
DeathString="%k killed %o (M249 SAW)."
|
||||
FemaleSuicide="%o shot herself in the foot."
|
||||
MaleSuicide="%o shot himself in the foot."
|
||||
bRagdollBullet=True
|
||||
bBulletHit=True
|
||||
DeathOverlayMaterial=Combiner'Effects_Tex.GoreDecals.PlayerDeathOverlay'
|
||||
DeathOverlayTime=999.000000
|
||||
KDamageImpulse=12500.000000
|
||||
KDeathVel=1200.000000
|
||||
KDeathUpKick=125.000000
|
||||
VehicleDamageScaling=0.700000
|
||||
}
|
||||
18
kf_sources/ScrnHMG/Classes/DamTypeM41AAssaultRifle.uc
Normal file
18
kf_sources/ScrnHMG/Classes/DamTypeM41AAssaultRifle.uc
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
class DamTypeM41AAssaultRifle extends DamTypeHeavy
|
||||
abstract;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
WeaponClass=Class'ScrnHMG.M41AAssaultRifle'
|
||||
DeathString="%k killed %o (Pulse Rifle)."
|
||||
FemaleSuicide="%o shot herself in the foot."
|
||||
MaleSuicide="%o shot himself in the foot."
|
||||
bRagdollBullet=True
|
||||
bBulletHit=True
|
||||
DeathOverlayMaterial=Combiner'Effects_Tex.GoreDecals.PlayerDeathOverlay'
|
||||
DeathOverlayTime=999.000000
|
||||
KDamageImpulse=13500.000000
|
||||
KDeathVel=1400.000000
|
||||
KDeathUpKick=150.000000
|
||||
VehicleDamageScaling=0.700000
|
||||
}
|
||||
18
kf_sources/ScrnHMG/Classes/DamTypePKM.uc
Normal file
18
kf_sources/ScrnHMG/Classes/DamTypePKM.uc
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
class DamTypePKM extends DamTypeHeavy
|
||||
abstract;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
WeaponClass=Class'ScrnHMG.PKM'
|
||||
DeathString="%k killed %o (PKM)."
|
||||
FemaleSuicide="%o shot herself in the foot."
|
||||
MaleSuicide="%o shot himself in the foot."
|
||||
bRagdollBullet=True
|
||||
bBulletHit=True
|
||||
DeathOverlayMaterial=Combiner'Effects_Tex.GoreDecals.PlayerDeathOverlay'
|
||||
DeathOverlayTime=999.000000
|
||||
KDamageImpulse=8500.000000
|
||||
KDeathVel=1000.000000
|
||||
KDeathUpKick=100.000000
|
||||
VehicleDamageScaling=0.700000
|
||||
}
|
||||
14
kf_sources/ScrnHMG/Classes/DamTypeRPK47MG.uc
Normal file
14
kf_sources/ScrnHMG/Classes/DamTypeRPK47MG.uc
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
class DamTypeRPK47MG extends DamTypeHeavy
|
||||
abstract;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
WeaponClass=Class'ScrnHMG.RPK47MachineGun'
|
||||
DeathString="%k killed %o (RPK47)."
|
||||
FemaleSuicide="%o shot herself in the foot."
|
||||
MaleSuicide="%o shot himself in the foot."
|
||||
bRagdollBullet=True
|
||||
KDamageImpulse=6500.000000
|
||||
KDeathVel=550.000000
|
||||
KDeathUpKick=80.000000
|
||||
}
|
||||
13
kf_sources/ScrnHMG/Classes/DamTypeSA80LSW.uc
Normal file
13
kf_sources/ScrnHMG/Classes/DamTypeSA80LSW.uc
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
class DamTypeSA80LSW extends DamTypeHeavy
|
||||
abstract;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
WeaponClass=Class'ScrnHMG.SA80LSW'
|
||||
DeathString="%k killed %o (SA80 LSW)."
|
||||
bRagdollBullet=True
|
||||
DamageThreshold=1
|
||||
KDamageImpulse=3000.000000
|
||||
KDeathVel=420.000000
|
||||
KDeathUpKick=40.000000
|
||||
}
|
||||
12
kf_sources/ScrnHMG/Classes/DamTypeStinger.uc
Normal file
12
kf_sources/ScrnHMG/Classes/DamTypeStinger.uc
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
class DamTypeStinger extends DamTypeHeavy
|
||||
abstract;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
WeaponClass=Class'ScrnHMG.Stinger'
|
||||
DeathString="%k killed %o (Stinger)."
|
||||
FemaleSuicide="%o shot herself in the foot."
|
||||
MaleSuicide="%o shot himself in the foot."
|
||||
bRagdollBullet=True
|
||||
bBulletHit=True
|
||||
}
|
||||
17
kf_sources/ScrnHMG/Classes/DamTypeStingerAlt.uc
Normal file
17
kf_sources/ScrnHMG/Classes/DamTypeStingerAlt.uc
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
class DamTypeStingerAlt extends DamTypeHeavy
|
||||
abstract;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
WeaponClass=Class'ScrnHMG.Stinger'
|
||||
DeathString="%k killed %o (Stinger)."
|
||||
FemaleSuicide="%o shot herself in the foot."
|
||||
MaleSuicide="%o shot himself in the foot."
|
||||
bRagdollBullet=True
|
||||
bBulletHit=True
|
||||
DeathOverlayMaterial=Combiner'Effects_Tex.GoreDecals.PlayerDeathOverlay'
|
||||
DeathOverlayTime=999.000000
|
||||
KDamageImpulse=15000.000000
|
||||
KDeathVel=1500.000000
|
||||
KDeathUpKick=150.000000
|
||||
}
|
||||
14
kf_sources/ScrnHMG/Classes/DamTypeThompsonH.uc
Normal file
14
kf_sources/ScrnHMG/Classes/DamTypeThompsonH.uc
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
class DamTypeThompsonH extends DamTypeHeavy
|
||||
abstract;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
WeaponClass=Class'ScrnHMG.ThompsonH'
|
||||
DeathString="%k killed %o (Heavy Tommy Gun)."
|
||||
FemaleSuicide="%o shot herself in the foot."
|
||||
MaleSuicide="%o shot himself in the foot."
|
||||
bRagdollBullet=True
|
||||
KDamageImpulse=5500.000000
|
||||
KDeathVel=175.000000
|
||||
KDeathUpKick=15.000000
|
||||
}
|
||||
12
kf_sources/ScrnHMG/Classes/DamTypeXMV850M.uc
Normal file
12
kf_sources/ScrnHMG/Classes/DamTypeXMV850M.uc
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
class DamTypeXMV850M extends DamTypeHeavy
|
||||
abstract;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
WeaponClass=Class'ScrnHMG.XMV850M'
|
||||
DeathString="%k killed %o (XMV850 Minigun)."
|
||||
bRagdollBullet=True
|
||||
KDamageImpulse=51500.000000
|
||||
KDeathVel=275.000000
|
||||
KDeathUpKick=45.000000
|
||||
}
|
||||
66
kf_sources/ScrnHMG/Classes/KFShellEjectPKM.uc
Normal file
66
kf_sources/ScrnHMG/Classes/KFShellEjectPKM.uc
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
class KFShellEjectPKM extends KFShellEject;
|
||||
|
||||
simulated function Trigger(Actor Other, Pawn EventInstigator)
|
||||
{
|
||||
Emitters[0].SpawnParticle(6);
|
||||
Emitters[1].SpawnParticle(6);
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Begin Object Class=MeshEmitter Name=MeshEmitter0
|
||||
StaticMesh=StaticMesh'kf_generic_sm.Bullet_Shells.winchester_shell'
|
||||
RespawnDeadParticles=False
|
||||
ZTest=False
|
||||
SpinParticles=True
|
||||
AutomaticInitialSpawning=False
|
||||
Acceleration=(Z=-300.000000)
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
|
||||
MaxParticles=50
|
||||
UseRotationFrom=PTRS_Actor
|
||||
SpinsPerSecondRange=(X=(Min=-3.000000,Max=3.000000),Y=(Min=-3.000000,Max=3.000000),Z=(Min=-3.000000,Max=3.000000))
|
||||
StartSizeRange=(X=(Min=2.500000,Max=2.500000),Y=(Min=2.500000,Max=2.500000),Z=(Min=2.500000,Max=2.500000))
|
||||
LifetimeRange=(Min=5.000000,Max=5.000000)
|
||||
StartVelocityRange=(Y=(Min=100.000000,Max=100.000000),Z=(Min=100.000000,Max=150.000000))
|
||||
End Object
|
||||
Emitters(0)=MeshEmitter'ScrnHMG.KFShellEjectPKM.MeshEmitter0'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter0
|
||||
UseDirectionAs=PTDU_Up
|
||||
UseCollision=True
|
||||
UseColorScale=True
|
||||
FadeOut=True
|
||||
FadeIn=True
|
||||
RespawnDeadParticles=False
|
||||
ZTest=False
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
ScaleSizeXByVelocity=True
|
||||
AutomaticInitialSpawning=False
|
||||
Acceleration=(Z=-210.000000)
|
||||
DampingFactorRange=(X=(Min=0.500000,Max=0.500000),Y=(Min=0.500000,Max=0.500000),Z=(Min=0.500000,Max=0.500000))
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=187))
|
||||
ColorScale(1)=(RelativeTime=0.214286,Color=(G=103,R=206,A=255))
|
||||
ColorScale(2)=(RelativeTime=0.439286,Color=(B=100,G=177,R=255,A=255))
|
||||
ColorScale(3)=(RelativeTime=1.000000,Color=(G=103,R=206,A=255))
|
||||
ColorScale(4)=(RelativeTime=1.000000,Color=(G=103,R=206,A=255))
|
||||
ColorScale(5)=(RelativeTime=1.000000,Color=(R=128,A=255))
|
||||
ColorScale(6)=(RelativeTime=1.000000)
|
||||
ColorScale(7)=(RelativeTime=1.000000)
|
||||
FadeOutStartTime=0.336000
|
||||
FadeInEndTime=0.064000
|
||||
MaxParticles=50
|
||||
UseRotationFrom=PTRS_Actor
|
||||
SizeScale(0)=(RelativeSize=1.000000)
|
||||
SizeScale(1)=(RelativeTime=1.000000,RelativeSize=0.250000)
|
||||
StartSizeRange=(X=(Min=0.500000,Max=0.500000),Y=(Min=0.500000,Max=0.500000),Z=(Min=0.500000,Max=0.500000))
|
||||
ScaleSizeByVelocityMultiplier=(X=0.010000,Y=0.010000)
|
||||
Texture=Texture'KFX.KFSparkHead'
|
||||
LifetimeRange=(Min=1.500000,Max=1.500000)
|
||||
StartVelocityRange=(X=(Min=-100.000000,Max=100.000000),Y=(Min=50.000000,Max=100.000000),Z=(Min=50.000000,Max=100.000000))
|
||||
End Object
|
||||
Emitters(1)=SpriteEmitter'ScrnHMG.KFShellEjectPKM.SpriteEmitter0'
|
||||
|
||||
}
|
||||
14
kf_sources/ScrnHMG/Classes/M249Ammo.uc
Normal file
14
kf_sources/ScrnHMG/Classes/M249Ammo.uc
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
class M249Ammo extends KFAmmunition;
|
||||
|
||||
#EXEC OBJ LOAD FILE=KillingFloorHUD.utx
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoPickupAmount=60
|
||||
MaxAmmo=480
|
||||
InitialAmount=180
|
||||
PickupClass=Class'ScrnHMG.M249AmmoPickup'
|
||||
IconMaterial=Texture'KillingFloorHUD.Generic.HUD'
|
||||
IconCoords=(X1=336,Y1=82,X2=382,Y2=125)
|
||||
ItemName="Rounds 5.56x45mm NATO"
|
||||
}
|
||||
9
kf_sources/ScrnHMG/Classes/M249AmmoPickup.uc
Normal file
9
kf_sources/ScrnHMG/Classes/M249AmmoPickup.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
class M249AmmoPickup extends KFAmmoPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoAmount=60
|
||||
InventoryType=Class'ScrnHMG.M249Ammo'
|
||||
PickupMessage="Rounds 5.56x45mm NATO"
|
||||
StaticMesh=StaticMesh'KillingFloorStatics.L85Ammo'
|
||||
}
|
||||
58
kf_sources/ScrnHMG/Classes/M249Attachment.uc
Normal file
58
kf_sources/ScrnHMG/Classes/M249Attachment.uc
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
class M249Attachment extends KFWeaponAttachment;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
mMuzFlashClass=Class'ROEffects.MuzzleFlash3rdMP'
|
||||
mTracerClass=Class'KFMod.KFNewTracer'
|
||||
mShellCaseEmitterClass=Class'KFMod.KFShellSpewer'
|
||||
ShellEjectBoneName="Shell_eject"
|
||||
MovementAnims(0)="JogF_AK47"
|
||||
MovementAnims(1)="JogB_AK47"
|
||||
MovementAnims(2)="JogL_AK47"
|
||||
MovementAnims(3)="JogR_AK47"
|
||||
TurnLeftAnim="TurnL_AK47"
|
||||
TurnRightAnim="TurnR_AK47"
|
||||
CrouchAnims(0)="CHWalkF_AK47"
|
||||
CrouchAnims(1)="CHWalkB_AK47"
|
||||
CrouchAnims(2)="CHWalkL_AK47"
|
||||
CrouchAnims(3)="CHWalkR_AK47"
|
||||
WalkAnims(0)="WalkF_AK47"
|
||||
WalkAnims(1)="WalkB_AK47"
|
||||
WalkAnims(2)="WalkL_AK47"
|
||||
WalkAnims(3)="WalkR_AK47"
|
||||
CrouchTurnRightAnim="CH_TurnR_AK47"
|
||||
CrouchTurnLeftAnim="CH_TurnL_AK47"
|
||||
IdleCrouchAnim="CHIdle_AK47"
|
||||
IdleWeaponAnim="Idle_AK47"
|
||||
IdleRestAnim="Idle_AK47"
|
||||
IdleChatAnim="Idle_AK47"
|
||||
IdleHeavyAnim="Idle_AK47"
|
||||
IdleRifleAnim="Idle_AK47"
|
||||
FireAnims(0)="Fire_AK47"
|
||||
FireAnims(1)="Fire_AK47"
|
||||
FireAnims(2)="Fire_AK47"
|
||||
FireAnims(3)="Fire_AK47"
|
||||
FireAltAnims(0)="IS_Fire_AK47"
|
||||
FireAltAnims(1)="IS_Fire_AK47"
|
||||
FireAltAnims(2)="IS_Fire_AK47"
|
||||
FireAltAnims(3)="IS_Fire_AK47"
|
||||
FireCrouchAnims(0)="CHFire_AK47"
|
||||
FireCrouchAnims(1)="CHFire_AK47"
|
||||
FireCrouchAnims(2)="CHFire_AK47"
|
||||
FireCrouchAnims(3)="CHFire_AK47"
|
||||
FireCrouchAltAnims(0)="CHFire_AK47"
|
||||
FireCrouchAltAnims(1)="CHFire_AK47"
|
||||
FireCrouchAltAnims(2)="CHFire_AK47"
|
||||
FireCrouchAltAnims(3)="CHFire_AK47"
|
||||
HitAnims(0)="HitF_AK47"
|
||||
HitAnims(1)="HitB_AK47"
|
||||
HitAnims(2)="HitL_AK47"
|
||||
HitAnims(3)="HitR_AK47"
|
||||
PostFireBlendStandAnim="Blend_AK47"
|
||||
PostFireBlendCrouchAnim="CHBlend_AK47"
|
||||
bHeavy=True
|
||||
SplashEffect=Class'ROEffects.BulletSplashEmitter'
|
||||
CullDistance=5000.000000
|
||||
Mesh=SkeletalMesh'HMG_A.m249_3rd'
|
||||
DrawScale=0.700000
|
||||
}
|
||||
40
kf_sources/ScrnHMG/Classes/M249Fire.uc
Normal file
40
kf_sources/ScrnHMG/Classes/M249Fire.uc
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
class M249Fire extends KFFire;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
FireAimedAnim="Fire"
|
||||
RecoilRate=0.040000
|
||||
maxVerticalRecoilAngle=500
|
||||
maxHorizontalRecoilAngle=250
|
||||
bRecoilRightOnly=True
|
||||
ShellEjectClass=Class'ROEffects.KFShellEjectAK'
|
||||
ShellEjectBoneName="Shell_eject"
|
||||
bAccuracyBonusForSemiAuto=True
|
||||
bRandomPitchFireSound=False
|
||||
FireSoundRef="HMG_S.M249.m249_shoot_mono"
|
||||
StereoFireSoundRef="HMG_S.M249.m249_shoot_stereo"
|
||||
NoAmmoSoundRef="HMG_S.M249.m249_empty"
|
||||
DamageType=Class'ScrnHMG.DamTypeM249SAW'
|
||||
DamageMin=63
|
||||
DamageMax=79
|
||||
Momentum=12500.000000
|
||||
bPawnRapidFireAnim=True
|
||||
TransientSoundVolume=1.800000
|
||||
FireLoopAnim="Fire"
|
||||
TweenTime=0.025000
|
||||
FireForce="AssaultRifleFire"
|
||||
FireRate=0.109000
|
||||
AmmoClass=Class'ScrnHMG.M249Ammo'
|
||||
AmmoPerFire=1
|
||||
ShakeRotMag=(X=50.000000,Y=50.000000,Z=350.000000)
|
||||
ShakeRotRate=(X=5000.000000,Y=5000.000000,Z=5000.000000)
|
||||
ShakeRotTime=0.750000
|
||||
ShakeOffsetMag=(X=6.000000,Y=3.000000,Z=7.500000)
|
||||
ShakeOffsetRate=(X=1000.000000,Y=1000.000000,Z=1000.000000)
|
||||
ShakeOffsetTime=1.250000
|
||||
BotRefireRate=0.990000
|
||||
FlashEmitterClass=Class'ROEffects.MuzzleFlash1stMP'
|
||||
aimerror=42.000000
|
||||
Spread=0.015000
|
||||
SpreadStyle=SS_Random
|
||||
}
|
||||
26
kf_sources/ScrnHMG/Classes/M249Pickup.uc
Normal file
26
kf_sources/ScrnHMG/Classes/M249Pickup.uc
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
class M249Pickup extends KFWeaponPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Weight=12.000000
|
||||
cost=5000
|
||||
AmmoCost=65
|
||||
BuyClipSize=60
|
||||
PowerValue=62
|
||||
SpeedValue=92
|
||||
RangeValue=60
|
||||
Description="The M249 SAW/LMG is the US produced version of the the Belgian-made FN Minimi. The M249 uses the 5.56x45mm NATO round, which lowers the weight of the gun when loaded yet grants the user with highly accurate yet reasonably powerful fire."
|
||||
ItemName="M249 SAW SE"
|
||||
ItemShortName="M249 SAW SE"
|
||||
AmmoItemName="5.56x45mm NATO"
|
||||
AmmoMesh=StaticMesh'KillingFloorStatics.L85Ammo'
|
||||
CorrespondingPerkIndex=10
|
||||
EquipmentCategoryID=2
|
||||
InventoryType=Class'ScrnHMG.M249SAW'
|
||||
PickupMessage="You picked up the M249 SAW SE"
|
||||
PickupSound=Sound'HMG_S.M249.m249_pickup'
|
||||
PickupForce="AssaultRiflePickup"
|
||||
StaticMesh=StaticMesh'HMG_A.M249_ST'
|
||||
CollisionRadius=25.000000
|
||||
CollisionHeight=5.000000
|
||||
}
|
||||
290
kf_sources/ScrnHMG/Classes/M249SAW.uc
Normal file
290
kf_sources/ScrnHMG/Classes/M249SAW.uc
Normal file
|
|
@ -0,0 +1,290 @@
|
|||
class M249SAW extends KFWeapon
|
||||
config(user);
|
||||
|
||||
|
||||
function bool RecommendRangedAttack()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
//TODO: LONG ranged?
|
||||
function bool RecommendLongRangedAttack()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
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 Notify_ShowBullets ()
|
||||
{
|
||||
SetBoneScale (0, 1.0, 'Bullet01b');
|
||||
SetBoneScale (1, 1.0, 'Bullet02b');
|
||||
SetBoneScale (2, 1.0, 'Bullet03b');
|
||||
SetBoneScale (3, 1.0, 'Bullet04b');
|
||||
SetBoneScale (4, 1.0, 'Bullet05b');
|
||||
SetBoneScale (5, 1.0, 'Bullet06b');
|
||||
SetBoneScale (6, 1.0, 'Bullet07b');
|
||||
SetBoneScale (7, 1.0, 'Bullet08b');
|
||||
SetBoneScale (8, 1.0, 'Bullet09b');
|
||||
SetBoneScale (9, 1.0, 'Bullet10b');
|
||||
}
|
||||
|
||||
simulated function Notify_HideBullets ()
|
||||
{
|
||||
if (MagAmmoRemaining == 0)
|
||||
{
|
||||
SetBoneScale (0, 0.0, 'Bullet01b');
|
||||
SetBoneScale (1, 0.0, 'Bullet02b');
|
||||
SetBoneScale (2, 0.0, 'Bullet03b');
|
||||
SetBoneScale (3, 0.0, 'Bullet04b');
|
||||
SetBoneScale (4, 0.0, 'Bullet05b');
|
||||
SetBoneScale (5, 0.0, 'Bullet06b');
|
||||
SetBoneScale (6, 0.0, 'Bullet07b');
|
||||
SetBoneScale (7, 0.0, 'Bullet08b');
|
||||
SetBoneScale (8, 0.0, 'Bullet09b');
|
||||
SetBoneScale (9, 0.0, 'Bullet10b');
|
||||
}
|
||||
else if (MagAmmoRemaining == 1)
|
||||
{
|
||||
SetBoneScale (0, 0.0, 'Bullet01b');
|
||||
SetBoneScale (1, 0.0, 'Bullet02b');
|
||||
SetBoneScale (2, 0.0, 'Bullet03b');
|
||||
SetBoneScale (3, 0.0, 'Bullet04b');
|
||||
SetBoneScale (4, 0.0, 'Bullet05b');
|
||||
SetBoneScale (5, 0.0, 'Bullet06b');
|
||||
SetBoneScale (6, 0.0, 'Bullet07b');
|
||||
SetBoneScale (7, 0.0, 'Bullet08b');
|
||||
SetBoneScale (8, 0.0, 'Bullet09b');
|
||||
SetBoneScale (9, 1.0, 'Bullet10b');
|
||||
}
|
||||
else if (MagAmmoRemaining == 2)
|
||||
{
|
||||
SetBoneScale (0, 0.0, 'Bullet01b');
|
||||
SetBoneScale (1, 0.0, 'Bullet02b');
|
||||
SetBoneScale (2, 0.0, 'Bullet03b');
|
||||
SetBoneScale (3, 0.0, 'Bullet04b');
|
||||
SetBoneScale (4, 0.0, 'Bullet05b');
|
||||
SetBoneScale (5, 0.0, 'Bullet06b');
|
||||
SetBoneScale (6, 0.0, 'Bullet07b');
|
||||
SetBoneScale (7, 0.0, 'Bullet08b');
|
||||
SetBoneScale (8, 1.0, 'Bullet09b');
|
||||
SetBoneScale (9, 1.0, 'Bullet10b');
|
||||
}
|
||||
else if (MagAmmoRemaining == 3)
|
||||
{
|
||||
SetBoneScale (0, 0.0, 'Bullet01b');
|
||||
SetBoneScale (1, 0.0, 'Bullet02b');
|
||||
SetBoneScale (2, 0.0, 'Bullet03b');
|
||||
SetBoneScale (3, 0.0, 'Bullet04b');
|
||||
SetBoneScale (4, 0.0, 'Bullet05b');
|
||||
SetBoneScale (5, 0.0, 'Bullet06b');
|
||||
SetBoneScale (6, 0.0, 'Bullet07b');
|
||||
SetBoneScale (7, 1.0, 'Bullet08b');
|
||||
SetBoneScale (8, 1.0, 'Bullet09b');
|
||||
SetBoneScale (9, 1.0, 'Bullet10b');
|
||||
}
|
||||
else if (MagAmmoRemaining == 4)
|
||||
{
|
||||
SetBoneScale (0, 0.0, 'Bullet01b');
|
||||
SetBoneScale (1, 0.0, 'Bullet02b');
|
||||
SetBoneScale (2, 0.0, 'Bullet03b');
|
||||
SetBoneScale (3, 0.0, 'Bullet04b');
|
||||
SetBoneScale (4, 0.0, 'Bullet05b');
|
||||
SetBoneScale (5, 0.0, 'Bullet06b');
|
||||
SetBoneScale (6, 1.0, 'Bullet07b');
|
||||
SetBoneScale (7, 1.0, 'Bullet08b');
|
||||
SetBoneScale (8, 1.0, 'Bullet09b');
|
||||
SetBoneScale (9, 1.0, 'Bullet10b');
|
||||
}
|
||||
else if (MagAmmoRemaining == 5)
|
||||
{
|
||||
SetBoneScale (0, 0.0, 'Bullet01b');
|
||||
SetBoneScale (1, 0.0, 'Bullet02b');
|
||||
SetBoneScale (2, 0.0, 'Bullet03b');
|
||||
SetBoneScale (3, 0.0, 'Bullet04b');
|
||||
SetBoneScale (4, 0.0, 'Bullet05b');
|
||||
SetBoneScale (5, 1.0, 'Bullet06b');
|
||||
SetBoneScale (6, 1.0, 'Bullet07b');
|
||||
SetBoneScale (7, 1.0, 'Bullet08b');
|
||||
SetBoneScale (8, 1.0, 'Bullet09b');
|
||||
SetBoneScale (9, 1.0, 'Bullet10b');
|
||||
}
|
||||
else if (MagAmmoRemaining == 6)
|
||||
{
|
||||
SetBoneScale (0, 0.0, 'Bullet01b');
|
||||
SetBoneScale (1, 0.0, 'Bullet02b');
|
||||
SetBoneScale (2, 0.0, 'Bullet03b');
|
||||
SetBoneScale (3, 0.0, 'Bullet04b');
|
||||
SetBoneScale (4, 1.0, 'Bullet05b');
|
||||
SetBoneScale (5, 1.0, 'Bullet06b');
|
||||
SetBoneScale (6, 1.0, 'Bullet07b');
|
||||
SetBoneScale (7, 1.0, 'Bullet08b');
|
||||
SetBoneScale (8, 1.0, 'Bullet09b');
|
||||
SetBoneScale (9, 1.0, 'Bullet10b');
|
||||
}
|
||||
else if (MagAmmoRemaining == 7)
|
||||
{
|
||||
SetBoneScale (0, 0.0, 'Bullet01b');
|
||||
SetBoneScale (1, 0.0, 'Bullet02b');
|
||||
SetBoneScale (2, 0.0, 'Bullet03b');
|
||||
SetBoneScale (3, 1.0, 'Bullet04b');
|
||||
SetBoneScale (4, 1.0, 'Bullet05b');
|
||||
SetBoneScale (5, 1.0, 'Bullet06b');
|
||||
SetBoneScale (6, 1.0, 'Bullet07b');
|
||||
SetBoneScale (7, 1.0, 'Bullet08b');
|
||||
SetBoneScale (8, 1.0, 'Bullet09b');
|
||||
SetBoneScale (9, 1.0, 'Bullet10b');
|
||||
}
|
||||
else if (MagAmmoRemaining == 8)
|
||||
{
|
||||
SetBoneScale (0, 0.0, 'Bullet01b');
|
||||
SetBoneScale (1, 0.0, 'Bullet02b');
|
||||
SetBoneScale (2, 1.0, 'Bullet03b');
|
||||
SetBoneScale (3, 1.0, 'Bullet04b');
|
||||
SetBoneScale (4, 1.0, 'Bullet05b');
|
||||
SetBoneScale (5, 1.0, 'Bullet06b');
|
||||
SetBoneScale (6, 1.0, 'Bullet07b');
|
||||
SetBoneScale (7, 1.0, 'Bullet08b');
|
||||
SetBoneScale (8, 1.0, 'Bullet09b');
|
||||
SetBoneScale (9, 1.0, 'Bullet10b');
|
||||
}
|
||||
else if (MagAmmoRemaining == 9)
|
||||
{
|
||||
SetBoneScale (0, 0.0, 'Bullet01b');
|
||||
SetBoneScale (1, 1.0, 'Bullet02b');
|
||||
SetBoneScale (2, 1.0, 'Bullet03b');
|
||||
SetBoneScale (3, 1.0, 'Bullet04b');
|
||||
SetBoneScale (4, 1.0, 'Bullet05b');
|
||||
SetBoneScale (5, 1.0, 'Bullet06b');
|
||||
SetBoneScale (6, 1.0, 'Bullet07b');
|
||||
SetBoneScale (7, 1.0, 'Bullet08b');
|
||||
SetBoneScale (8, 1.0, 'Bullet09b');
|
||||
SetBoneScale (9, 1.0, 'Bullet10b');
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
SetBoneScale (0, 1.0, 'Bullet01b');
|
||||
SetBoneScale (1, 1.0, 'Bullet02b');
|
||||
SetBoneScale (2, 1.0, 'Bullet03b');
|
||||
SetBoneScale (3, 1.0, 'Bullet04b');
|
||||
SetBoneScale (4, 1.0, 'Bullet05b');
|
||||
SetBoneScale (5, 1.0, 'Bullet06b');
|
||||
SetBoneScale (6, 1.0, 'Bullet07b');
|
||||
SetBoneScale (7, 1.0, 'Bullet08b');
|
||||
SetBoneScale (8, 1.0, 'Bullet09b');
|
||||
SetBoneScale (9, 1.0, 'Bullet10b');
|
||||
}
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
MagCapacity=60
|
||||
ReloadRate=5.000000
|
||||
ReloadAnim="Reload"
|
||||
ReloadAnimRate=1.000000
|
||||
WeaponReloadAnim="Reload_AK47"
|
||||
Weight=12.000000
|
||||
bHasAimingMode=True
|
||||
IdleAimAnim="Iron_Idle"
|
||||
StandardDisplayFOV=65.000000
|
||||
bModeZeroCanDryFire=True
|
||||
SleeveNum=0
|
||||
TraderInfoTexture=Texture'HMG_T.M249.m249_Trader'
|
||||
bIsTier3Weapon=True
|
||||
MeshRef="HMG_A.m249mesh"
|
||||
SkinRefs(0)="KF_Weapons_Trip_T.hands.hands_1stP_military_cmb"
|
||||
SkinRefs(1)="HMG_T.M249.v_m249"
|
||||
SkinRefs(2)="HMG_T.M249.v_m249_addons"
|
||||
SkinRefs(3)="HMG_T.M249.v_m249_box"
|
||||
SkinRefs(4)="HMG_T.M249.v_m249_bullets"
|
||||
SkinRefs(5)="HMG_T.M249.v_m249_front"
|
||||
SkinRefs(6)="HMG_T.M249.v_m249_heatshield"
|
||||
SkinRefs(7)="HMG_T.M249.v_m249_lid"
|
||||
SkinRefs(8)="HMG_T.M249.v_m249_receiver"
|
||||
SkinRefs(9)="HMG_T.M249.v_m249_sights"
|
||||
SkinRefs(10)="HMG_T.M249.v_m249_stock"
|
||||
SelectSoundRef="HMG_S.M249.m249_select"
|
||||
HudImageRef="HMG_T.M249.m249_Unselected"
|
||||
SelectedHudImageRef="HMG_T.M249.m249_selected"
|
||||
PlayerIronSightFOV=65.000000
|
||||
ZoomedDisplayFOV=32.000000
|
||||
FireModeClass(0)=Class'ScrnHMG.M249Fire'
|
||||
FireModeClass(1)=Class'KFMod.NoFire'
|
||||
PutDownAnim="PutDown"
|
||||
SelectAnimRate=1.000000
|
||||
SelectForce="SwitchToAssaultRifle"
|
||||
AIRating=0.550000
|
||||
CurrentRating=0.550000
|
||||
bShowChargingBar=True
|
||||
Description="The M249 SAW/LMG is the US produced version of the the Belgian-made FN Minimi. The M249 uses the 5.56x45mm NATO round, which lowers the weight of the gun when loaded yet grants the user with highly accurate yet reasonably powerful fire."
|
||||
EffectOffset=(X=100.000000,Y=25.000000,Z=-10.000000)
|
||||
DisplayFOV=65.000000
|
||||
Priority=150
|
||||
CustomCrosshair=11
|
||||
CustomCrossHairTextureName="Crosshairs.HUD.Crosshair_Cross5"
|
||||
InventoryGroup=4
|
||||
GroupOffset=7
|
||||
PickupClass=Class'ScrnHMG.M249Pickup'
|
||||
PlayerViewOffset=(X=5.000000,Y=5.500000,Z=-3.000000)
|
||||
BobDamping=4.000000
|
||||
AttachmentClass=Class'ScrnHMG.M249Attachment'
|
||||
IconCoords=(X1=245,Y1=39,X2=329,Y2=79)
|
||||
ItemName="M249 SAW SE"
|
||||
DrawScale=0.600000
|
||||
TransientSoundVolume=1.250000
|
||||
}
|
||||
212
kf_sources/ScrnHMG/Classes/M41AALTFire.uc
Normal file
212
kf_sources/ScrnHMG/Classes/M41AALTFire.uc
Normal file
|
|
@ -0,0 +1,212 @@
|
|||
class M41AALTFire extends KFShotgunFire;
|
||||
|
||||
|
||||
var() name FireLastAnim;
|
||||
var() name FireLastAimedAnim;
|
||||
var() float FireLastRate;
|
||||
|
||||
var() Emitter Flash2Emitter;
|
||||
var() name MuzzleBoneLeft;
|
||||
var() name MuzzleBoneRight;
|
||||
/*
|
||||
|
||||
simulated function InitEffects()
|
||||
{
|
||||
// don't even spawn on server
|
||||
if ( (Level.NetMode == NM_DedicatedServer) || (AIController(Instigator.Controller) != None) )
|
||||
return;
|
||||
if ( (FlashEmitterClass != None) && ((FlashEmitter == None) || FlashEmitter.bDeleteMe) )
|
||||
{
|
||||
FlashEmitter = Weapon.Spawn(FlashEmitterClass);
|
||||
Weapon.AttachToBone(FlashEmitter, MuzzleBoneLeft);
|
||||
}
|
||||
if ( (FlashEmitterClass != None) && ((Flash2Emitter == None) || Flash2Emitter.bDeleteMe) )
|
||||
{
|
||||
Flash2Emitter = Weapon.Spawn(FlashEmitterClass);
|
||||
Weapon.AttachToBone(Flash2Emitter, MuzzleBoneRight);
|
||||
}
|
||||
|
||||
if ( (SmokeEmitterClass != None) && ((SmokeEmitter == None) || SmokeEmitter.bDeleteMe) )
|
||||
{
|
||||
SmokeEmitter = Weapon.Spawn(SmokeEmitterClass);
|
||||
}
|
||||
}
|
||||
|
||||
simulated function DestroyEffects()
|
||||
{
|
||||
super.DestroyEffects();
|
||||
|
||||
if (Flash2Emitter != None)
|
||||
Flash2Emitter.Destroy();
|
||||
}
|
||||
|
||||
function FlashMuzzleFlash()
|
||||
{
|
||||
if( KFWeap.MagAmmoRemaining == 2)
|
||||
{
|
||||
if (Flash2Emitter != None)
|
||||
Flash2Emitter.Trigger(Weapon, Instigator);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (FlashEmitter != None)
|
||||
FlashEmitter.Trigger(Weapon, Instigator);
|
||||
}
|
||||
}
|
||||
|
||||
*/
|
||||
simulated function bool AllowFire()
|
||||
{
|
||||
|
||||
|
||||
return ( Weapon.AmmoAmount(ThisModeNum) >= AmmoPerFire);
|
||||
}
|
||||
|
||||
// Overridden to support special anim functionality of the double barreled shotgun
|
||||
function PlayFiring()
|
||||
{
|
||||
local float RandPitch;
|
||||
|
||||
if ( Weapon == none )
|
||||
return;
|
||||
|
||||
if ( Weapon.Mesh != None )
|
||||
{
|
||||
if ( FireCount > 0 )
|
||||
{
|
||||
if( KFWeap.bAimingRifle )
|
||||
{
|
||||
if ( Weapon.HasAnim(FireLoopAimedAnim) )
|
||||
{
|
||||
Weapon.PlayAnim(FireLoopAimedAnim, FireLoopAnimRate, 0.0);
|
||||
}
|
||||
else if( Weapon.HasAnim(FireAimedAnim) )
|
||||
{
|
||||
Weapon.PlayAnim(FireAimedAnim, FireAnimRate, TweenTime);
|
||||
}
|
||||
else
|
||||
{
|
||||
Weapon.PlayAnim(FireAnim, FireAnimRate, TweenTime);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( Weapon.HasAnim(FireLoopAnim) )
|
||||
{
|
||||
Weapon.PlayAnim(FireLoopAnim, FireLoopAnimRate, 0.0);
|
||||
}
|
||||
else
|
||||
{
|
||||
Weapon.PlayAnim(FireAnim, FireAnimRate, TweenTime);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if( KFWeap.bAimingRifle )
|
||||
{
|
||||
if( BoomStick(Weapon).SingleShotCount == 0 && Weapon.HasAnim(FireLastAimedAnim))
|
||||
{
|
||||
Weapon.PlayAnim(FireLastAimedAnim, FireAnimRate, TweenTime);
|
||||
}
|
||||
else if( Weapon.HasAnim(FireAimedAnim) )
|
||||
{
|
||||
Weapon.PlayAnim(FireAimedAnim, FireAnimRate, TweenTime);
|
||||
}
|
||||
else
|
||||
{
|
||||
Weapon.PlayAnim(FireAnim, FireAnimRate, TweenTime);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if( BoomStick(Weapon).SingleShotCount == 0 && Weapon.HasAnim(FireLastAnim))
|
||||
{
|
||||
Weapon.PlayAnim(FireLastAnim, FireAnimRate, TweenTime);
|
||||
}
|
||||
else
|
||||
{
|
||||
Weapon.PlayAnim(FireAnim, FireAnimRate, TweenTime);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if( Weapon.Instigator != none && Weapon.Instigator.IsLocallyControlled() &&
|
||||
Weapon.Instigator.IsFirstPerson() && StereoFireSound != none )
|
||||
{
|
||||
if( bRandomPitchFireSound )
|
||||
{
|
||||
RandPitch = FRand() * RandomPitchAdjustAmt;
|
||||
|
||||
if( FRand() < 0.5 )
|
||||
{
|
||||
RandPitch *= -1.0;
|
||||
}
|
||||
}
|
||||
|
||||
Weapon.PlayOwnedSound(StereoFireSound,SLOT_Interact,TransientSoundVolume * 0.85,,TransientSoundRadius,(1.0 + RandPitch),false);
|
||||
}
|
||||
else
|
||||
{
|
||||
if( bRandomPitchFireSound )
|
||||
{
|
||||
RandPitch = FRand() * RandomPitchAdjustAmt;
|
||||
|
||||
if( FRand() < 0.5 )
|
||||
{
|
||||
RandPitch *= -1.0;
|
||||
}
|
||||
}
|
||||
|
||||
Weapon.PlayOwnedSound(FireSound,SLOT_Interact,TransientSoundVolume,,TransientSoundRadius,(1.0 + RandPitch),false);
|
||||
}
|
||||
|
||||
|
||||
|
||||
if ( FireCount > 2 )
|
||||
{
|
||||
Weapon.PlayAnim(ReloadAnim, ReloadAnimRate, TweenTime);
|
||||
}
|
||||
|
||||
ClientPlayForceFeedback(FireForce); // jdf
|
||||
|
||||
FireCount++;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
//=====================================================================================================
|
||||
//=====================================================================================================
|
||||
//==
|
||||
//== D E F A U L T P R O P E R T I E S
|
||||
//==
|
||||
//=====================================================================================================
|
||||
//=====================================================================================================
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
EffectiveRange=2500.000000
|
||||
maxVerticalRecoilAngle=200
|
||||
maxHorizontalRecoilAngle=50
|
||||
FireSoundRef="KF_M32Snd.M32_Fire"
|
||||
StereoFireSoundRef="KF_M32Snd.M32_FireST"
|
||||
NoAmmoSoundRef="KF_M79Snd.M79_DryFire"
|
||||
ProjPerFire=1
|
||||
ProjSpawnOffset=(X=50.000000,Y=10.000000)
|
||||
bFireOnRelease=True
|
||||
bWaitForRelease=True
|
||||
TransientSoundVolume=1.800000
|
||||
FireAnim="AltFire"
|
||||
FireForce="AssaultRifleFire"
|
||||
FireRate=1.250000
|
||||
AmmoClass=Class'ScrnHMG.M41AProjectileAmmo'
|
||||
ShakeRotMag=(X=3.000000,Y=4.000000,Z=2.000000)
|
||||
ShakeRotRate=(X=10000.000000,Y=10000.000000,Z=10000.000000)
|
||||
ShakeOffsetMag=(X=3.000000,Y=3.000000,Z=3.000000)
|
||||
ProjectileClass=Class'KFMod.M203GrenadeProjectile'
|
||||
BotRefireRate=1.800000
|
||||
FlashEmitterClass=Class'ROEffects.MuzzleFlash1stNadeL'
|
||||
aimerror=42.000000
|
||||
Spread=0.015000
|
||||
}
|
||||
17
kf_sources/ScrnHMG/Classes/M41AAmmo.uc
Normal file
17
kf_sources/ScrnHMG/Classes/M41AAmmo.uc
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
//=============================================================================
|
||||
// SCARMK17 Ammo.
|
||||
//=============================================================================
|
||||
class M41AAmmo extends KFAmmunition;
|
||||
|
||||
#EXEC OBJ LOAD FILE=KillingFloorHUD.utx
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoPickupAmount=33
|
||||
MaxAmmo=264
|
||||
InitialAmount=132
|
||||
PickupClass=Class'ScrnHMG.M41AAmmoPickup'
|
||||
IconMaterial=Texture'KillingFloorHUD.Generic.HUD'
|
||||
IconCoords=(X1=336,Y1=82,X2=382,Y2=125)
|
||||
ItemName="M41A 10 mm caseless ammunition"
|
||||
}
|
||||
9
kf_sources/ScrnHMG/Classes/M41AAmmoPickup.uc
Normal file
9
kf_sources/ScrnHMG/Classes/M41AAmmoPickup.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
class M41AAmmoPickup extends KFAmmoPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoAmount=33
|
||||
InventoryType=Class'ScrnHMG.M41AAmmo'
|
||||
PickupMessage="M41A 10 mm caseless ammunition"
|
||||
StaticMesh=StaticMesh'KillingFloorStatics.L85Ammo'
|
||||
}
|
||||
141
kf_sources/ScrnHMG/Classes/M41AAssaultRifle.uc
Normal file
141
kf_sources/ScrnHMG/Classes/M41AAssaultRifle.uc
Normal file
|
|
@ -0,0 +1,141 @@
|
|||
//=============================================================================
|
||||
// SCAR MK17 Inventory class
|
||||
//=============================================================================
|
||||
class M41AAssaultRifle extends KFWeapon
|
||||
config(user);
|
||||
|
||||
var string MyMessage;
|
||||
|
||||
var ScriptedTexture AmmoDigitsScriptedTexture;
|
||||
var Font AmmoDigitsFont;
|
||||
var color AmmoDigitsColor, LowAmmoDigitsColor;
|
||||
|
||||
var int OldAmmoAmount;
|
||||
|
||||
var float MyYaw;
|
||||
|
||||
|
||||
//=============================================================================
|
||||
// Functions
|
||||
//=============================================================================
|
||||
simulated function RenderOverlays( Canvas Canvas )
|
||||
{
|
||||
if( AmmoAmount(0) <= 0 )
|
||||
{
|
||||
if( OldAmmoAmount!=-5 )
|
||||
{
|
||||
OldAmmoAmount = -5;
|
||||
AmmoDigitsColor.R = 218;
|
||||
AmmoDigitsColor.G = 18;
|
||||
AmmoDigitsColor.B = 18;
|
||||
MyMessage = "--";
|
||||
++AmmoDigitsScriptedTexture.Revision;
|
||||
}
|
||||
}
|
||||
else if( bIsReloading )
|
||||
{
|
||||
if( OldAmmoAmount!=-4 )
|
||||
{
|
||||
OldAmmoAmount = -4;
|
||||
AmmoDigitsColor.R = 218;
|
||||
AmmoDigitsColor.G = 218;
|
||||
AmmoDigitsColor.B = 18;
|
||||
MyMessage = "RL";
|
||||
++AmmoDigitsScriptedTexture.Revision;
|
||||
}
|
||||
}
|
||||
else if( OldAmmoAmount!=(MagAmmoRemaining+1) )
|
||||
{
|
||||
OldAmmoAmount = MagAmmoRemaining+1;
|
||||
|
||||
if ( MagAmmoRemaining <= (MagCapacity>>2) )
|
||||
AmmoDigitsColor = LowAmmoDigitsColor;
|
||||
AmmoDigitsColor = default.AmmoDigitsColor;
|
||||
|
||||
MyMessage = String(MagAmmoRemaining);
|
||||
++AmmoDigitsScriptedTexture.Revision;
|
||||
}
|
||||
|
||||
AmmoDigitsScriptedTexture.Client = Self;
|
||||
|
||||
Super.RenderOverlays(Canvas);
|
||||
default.PlayerViewPivot.Yaw = 0;
|
||||
AmmoDigitsScriptedTexture.Client = None;
|
||||
}
|
||||
|
||||
simulated function RenderTexture( ScriptedTexture Tex )
|
||||
{
|
||||
local int w, h;
|
||||
|
||||
Tex.TextSize( MyMessage, AmmoDigitsFont, w, h );
|
||||
Tex.DrawText( ( Tex.USize / 2 ) - ( w / 2.2 ), ( Tex.VSize / 2 ) - ( h / 2.0 ),MyMessage, AmmoDigitsFont, AmmoDigitsColor );
|
||||
}
|
||||
|
||||
simulated function ZoomIn(bool bAnimateTransition)
|
||||
{
|
||||
default.PlayerViewPivot.Yaw = 0;
|
||||
PlayerViewPivot.Yaw = 0;
|
||||
|
||||
super.ZoomIn(bAnimateTransition);
|
||||
}
|
||||
|
||||
simulated function ZoomOut(bool bAnimateTransition)
|
||||
{
|
||||
// rotate weapon a little bit to face more to the PoV
|
||||
default.PlayerViewPivot.Yaw = MyYaw;
|
||||
PlayerViewPivot.Yaw = MyYaw;
|
||||
|
||||
super.ZoomOut(bAnimateTransition);
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoDigitsScriptedTexture=ScriptedTexture'HMG_T.M41A.AmmoText'
|
||||
AmmoDigitsFont=Font'BDFonts.DigitalMed'
|
||||
AmmoDigitsColor=(B=177,G=148,R=76,A=255)
|
||||
LowAmmoDigitsColor=(B=18,G=18,R=218,A=255)
|
||||
MyYaw=-648.000000
|
||||
MagCapacity=33
|
||||
ReloadRate=2.000000
|
||||
bHasSecondaryAmmo=True
|
||||
bReduceMagAmmoOnSecondaryFire=False
|
||||
ReloadAnim="Reload"
|
||||
ReloadAnimRate=1.500000
|
||||
WeaponReloadAnim="Reload_SCAR"
|
||||
Weight=14.000000
|
||||
bHasAimingMode=True
|
||||
IdleAimAnim="Idle_Iron"
|
||||
StandardDisplayFOV=55.000000
|
||||
bModeZeroCanDryFire=True
|
||||
TraderInfoTexture=Texture'HMG_T.M41A.Trader_M41A'
|
||||
bIsTier3Weapon=True
|
||||
MeshRef="HMG_A.M41APulseRifle"
|
||||
SkinRefs(0)="HMG_T.M41A.M41A_cmb_final"
|
||||
SelectSoundRef="HMG_S.M41A.Select"
|
||||
HudImageRef="HMG_T.M41A.HUD.M41A_unselected"
|
||||
SelectedHudImageRef="HMG_T.M41A.HUD.M41A_selected"
|
||||
PlayerIronSightFOV=70.000000
|
||||
ZoomedDisplayFOV=45.000000
|
||||
FireModeClass(0)=Class'ScrnHMG.M41AFire'
|
||||
FireModeClass(1)=Class'ScrnHMG.M41AALTFire'
|
||||
PutDownAnim="PutDown"
|
||||
SelectForce="SwitchToAssaultRifle"
|
||||
AIRating=0.550000
|
||||
CurrentRating=0.550000
|
||||
Description="M41A Pulse Rifle. Designed to kill Aliens. Looks especially cool in Sigourney Weaver's hands."
|
||||
EffectOffset=(X=100.000000,Y=25.000000,Z=-10.000000)
|
||||
DisplayFOV=55.000000
|
||||
Priority=160
|
||||
CustomCrosshair=11
|
||||
CustomCrossHairTextureName="Crosshairs.HUD.Crosshair_Cross5"
|
||||
InventoryGroup=4
|
||||
GroupOffset=7
|
||||
PickupClass=Class'ScrnHMG.M41APickup'
|
||||
PlayerViewOffset=(X=25.000000,Y=24.000000,Z=8.000000)
|
||||
PlayerViewPivot=(Yaw=-648)
|
||||
BobDamping=6.000000
|
||||
AttachmentClass=Class'ScrnHMG.M41AAttachmentBeta'
|
||||
IconCoords=(X1=245,Y1=39,X2=329,Y2=79)
|
||||
ItemName="M41A Pulse Rifle SE"
|
||||
TransientSoundVolume=5.250000
|
||||
}
|
||||
55
kf_sources/ScrnHMG/Classes/M41AAttachment.uc
Normal file
55
kf_sources/ScrnHMG/Classes/M41AAttachment.uc
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
class M41AAttachment extends KFWeaponAttachment;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
mMuzFlashClass=Class'ROEffects.MuzzleFlash3rdMP'
|
||||
mShellCaseEmitterClass=Class'KFMod.KFShellSpewer'
|
||||
MovementAnims(0)="JogF_M14"
|
||||
MovementAnims(1)="JogB_M14"
|
||||
MovementAnims(2)="JogL_M14"
|
||||
MovementAnims(3)="JogR_M14"
|
||||
TurnLeftAnim="TurnL_M14"
|
||||
TurnRightAnim="TurnR_M14"
|
||||
CrouchAnims(0)="CHWalkF_M14"
|
||||
CrouchAnims(1)="CHWalkB_M14"
|
||||
CrouchAnims(2)="CHWalkL_M14"
|
||||
CrouchAnims(3)="CHWalkR_M14"
|
||||
WalkAnims(0)="WalkF_M14"
|
||||
WalkAnims(1)="WalkB_M14"
|
||||
WalkAnims(2)="WalkL_M14"
|
||||
WalkAnims(3)="WalkR_M14"
|
||||
CrouchTurnRightAnim="CH_TurnR_M14"
|
||||
CrouchTurnLeftAnim="CH_TurnL_M14"
|
||||
IdleCrouchAnim="CHIdle_M14"
|
||||
IdleWeaponAnim="Idle_M14"
|
||||
IdleRestAnim="Idle_M14"
|
||||
IdleChatAnim="Idle_M14"
|
||||
IdleHeavyAnim="Idle_M14"
|
||||
IdleRifleAnim="Idle_M14"
|
||||
FireAnims(0)="Fire_M14"
|
||||
FireAnims(1)="Fire_M14"
|
||||
FireAnims(2)="Fire_M14"
|
||||
FireAnims(3)="Fire_M14"
|
||||
FireAltAnims(0)="Fire_Shotgun"
|
||||
FireAltAnims(1)="Fire_Shotgun"
|
||||
FireAltAnims(2)="Fire_Shotgun"
|
||||
FireAltAnims(3)="Fire_Shotgun"
|
||||
FireCrouchAnims(0)="CHFire_M14"
|
||||
FireCrouchAnims(1)="CHFire_M14"
|
||||
FireCrouchAnims(2)="CHFire_M14"
|
||||
FireCrouchAnims(3)="CHFire_M14"
|
||||
FireCrouchAltAnims(0)="CHFire_Shotgun"
|
||||
FireCrouchAltAnims(1)="CHFire_Shotgun"
|
||||
FireCrouchAltAnims(2)="CHFire_Shotgun"
|
||||
FireCrouchAltAnims(3)="CHFire_Shotgun"
|
||||
HitAnims(0)="HitF_M14"
|
||||
HitAnims(1)="HitB_M14"
|
||||
HitAnims(2)="HitL_M14"
|
||||
HitAnims(3)="HitR_M14"
|
||||
PostFireBlendStandAnim="Blend_M14"
|
||||
PostFireBlendCrouchAnim="CHBlend_M14"
|
||||
MeshRef="HMG_A.M41APulseRifle3RD"
|
||||
bRapidFire=True
|
||||
SplashEffect=Class'ROEffects.BulletSplashEmitter'
|
||||
CullDistance=5000.000000
|
||||
}
|
||||
13
kf_sources/ScrnHMG/Classes/M41AAttachmentBeta.uc
Normal file
13
kf_sources/ScrnHMG/Classes/M41AAttachmentBeta.uc
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
class M41AAttachmentBeta extends M4203Attachment;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
FireAltAnims(0)="Fire_Shotgun"
|
||||
FireAltAnims(1)="Fire_Shotgun"
|
||||
FireAltAnims(2)="Fire_Shotgun"
|
||||
FireAltAnims(3)="Fire_Shotgun"
|
||||
FireCrouchAltAnims(0)="CHFire_Shotgun"
|
||||
FireCrouchAltAnims(1)="CHFire_Shotgun"
|
||||
FireCrouchAltAnims(2)="CHFire_Shotgun"
|
||||
FireCrouchAltAnims(3)="CHFire_Shotgun"
|
||||
}
|
||||
40
kf_sources/ScrnHMG/Classes/M41AFire.uc
Normal file
40
kf_sources/ScrnHMG/Classes/M41AFire.uc
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
//=============================================================================
|
||||
//SCARMK17 Fire
|
||||
//=============================================================================
|
||||
class M41AFire extends KFFire;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
FireAimedAnim="Fire_Iron"
|
||||
RecoilRate=0.050000
|
||||
maxVerticalRecoilAngle=100
|
||||
maxHorizontalRecoilAngle=80
|
||||
ShellEjectClass=Class'ROEffects.KFShellEjectSCAR'
|
||||
ShellEjectBoneName="Shell Feeder"
|
||||
FireSoundRef="HMG_S.M41A.M41AFireMono"
|
||||
StereoFireSoundRef="HMG_S.M41A.M41AFire"
|
||||
NoAmmoSoundRef="HMG_S.M41A.DryFire"
|
||||
DamageType=Class'ScrnHMG.DamTypeM41AAssaultRifle'
|
||||
DamageMin=68
|
||||
DamageMax=82
|
||||
Momentum=13500.000000
|
||||
bPawnRapidFireAnim=True
|
||||
TransientSoundVolume=5.800000
|
||||
FireLoopAnim="Fire"
|
||||
TweenTime=0.025000
|
||||
FireForce="AssaultRifleFire"
|
||||
FireRate=0.070000
|
||||
AmmoClass=Class'ScrnHMG.M41AAmmo'
|
||||
AmmoPerFire=1
|
||||
ShakeRotMag=(X=50.000000,Y=50.000000,Z=300.000000)
|
||||
ShakeRotRate=(X=7500.000000,Y=7500.000000,Z=7500.000000)
|
||||
ShakeRotTime=0.650000
|
||||
ShakeOffsetMag=(X=6.000000,Y=3.000000,Z=7.500000)
|
||||
ShakeOffsetRate=(X=1000.000000,Y=1000.000000,Z=1000.000000)
|
||||
ShakeOffsetTime=1.150000
|
||||
BotRefireRate=0.990000
|
||||
FlashEmitterClass=Class'ScrnHMG.MuzzleFlashM41A'
|
||||
aimerror=42.000000
|
||||
Spread=0.009000
|
||||
SpreadStyle=SS_Random
|
||||
}
|
||||
10
kf_sources/ScrnHMG/Classes/M41APickup.uc
Normal file
10
kf_sources/ScrnHMG/Classes/M41APickup.uc
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
// secondary pickup required for grenades
|
||||
class M41APickup extends M41APrimaryPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoCost=20
|
||||
BuyClipSize=1
|
||||
SecondaryAmmoShortName="-- M41A Grenades"
|
||||
PrimaryWeaponPickup=Class'ScrnHMG.M41APrimaryPickup'
|
||||
}
|
||||
27
kf_sources/ScrnHMG/Classes/M41APrimaryPickup.uc
Normal file
27
kf_sources/ScrnHMG/Classes/M41APrimaryPickup.uc
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
class M41APrimaryPickup extends KFWeaponPickup
|
||||
abstract;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Weight=14.000000
|
||||
cost=9999
|
||||
AmmoCost=66
|
||||
BuyClipSize=33
|
||||
PowerValue=70
|
||||
SpeedValue=100
|
||||
RangeValue=80
|
||||
Description="M41A Pulse Rifle. Designed to kill Aliens. Looks especially cool in Sigourney Weaver's hands."
|
||||
ItemName="M41A Pulse Rifle SE"
|
||||
ItemShortName="Pulse Rifle"
|
||||
AmmoItemName="M41A 10 mm caseless ammunition"
|
||||
AmmoMesh=StaticMesh'KillingFloorStatics.L85Ammo'
|
||||
CorrespondingPerkIndex=10
|
||||
EquipmentCategoryID=3
|
||||
InventoryType=Class'ScrnHMG.M41AAssaultRifle'
|
||||
PickupMessage="You got the M41A"
|
||||
PickupSound=Sound'HMG_S.M41A.Pickup'
|
||||
PickupForce="AssaultRiflePickup"
|
||||
StaticMesh=StaticMesh'HMG_A.M41APickup'
|
||||
CollisionRadius=25.000000
|
||||
CollisionHeight=5.000000
|
||||
}
|
||||
11
kf_sources/ScrnHMG/Classes/M41AProjectileAmmo.uc
Normal file
11
kf_sources/ScrnHMG/Classes/M41AProjectileAmmo.uc
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
class M41AProjectileAmmo extends KFAmmunition;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoPickupAmount=2
|
||||
MaxAmmo=8
|
||||
InitialAmount=2
|
||||
IconMaterial=Texture'KillingFloorHUD.Generic.HUD'
|
||||
IconCoords=(X1=434,Y1=253,X2=506,Y2=292)
|
||||
ItemName="M41A Grenades"
|
||||
}
|
||||
10
kf_sources/ScrnHMG/Classes/M41AProjectileAmmoPickup.uc
Normal file
10
kf_sources/ScrnHMG/Classes/M41AProjectileAmmoPickup.uc
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
class M41AProjectileAmmoPickup extends KFAmmoPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoAmount=2
|
||||
InventoryType=Class'ScrnHMG.M41AProjectileAmmo'
|
||||
PickupMessage="M41A Grenades"
|
||||
StaticMesh=StaticMesh'KillingFloorStatics.FragPickup'
|
||||
CollisionRadius=25.000000
|
||||
}
|
||||
50
kf_sources/ScrnHMG/Classes/MuzzleFlash1stPKM.uc
Normal file
50
kf_sources/ScrnHMG/Classes/MuzzleFlash1stPKM.uc
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
class MuzzleFlash1stPKM extends ROMuzzleFlash1st;
|
||||
|
||||
simulated function Trigger(Actor Other, Pawn EventInstigator)
|
||||
{
|
||||
Emitters[0].SpawnParticle(2);
|
||||
Emitters[1].SpawnParticle(1);
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter0
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
BlendBetweenSubdivisions=True
|
||||
UseSubdivisionScale=True
|
||||
UseRandomSubdivision=True
|
||||
Opacity=0.500000
|
||||
CoordinateSystem=PTCS_Relative
|
||||
UseRotationFrom=PTRS_Actor
|
||||
StartSpinRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
|
||||
SizeScale(0)=(RelativeSize=1.000000)
|
||||
SizeScale(1)=(RelativeTime=0.500000,RelativeSize=2.000000)
|
||||
SizeScale(2)=(RelativeTime=1.000000,RelativeSize=1.000000)
|
||||
StartSizeRange=(X=(Min=22.000000,Max=22.000000))
|
||||
DrawStyle=PTDS_Brighten
|
||||
Texture=Texture'Effects_Tex.Weapons.STGmuzzleflash_4frame'
|
||||
TextureUSubdivisions=2
|
||||
TextureVSubdivisions=2
|
||||
LifetimeRange=(Min=0.100000,Max=0.100000)
|
||||
End Object
|
||||
Emitters(0)=SpriteEmitter'ScrnHMG.MuzzleFlash1stPKM.SpriteEmitter0'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter1
|
||||
RespawnDeadParticles=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
Opacity=0.100000
|
||||
MaxParticles=1
|
||||
StartSizeRange=(X=(Min=200.000000,Max=200.000000))
|
||||
DrawStyle=PTDS_Brighten
|
||||
Texture=Texture'Effects_Tex.Smoke.MuzzleCorona1stP'
|
||||
LifetimeRange=(Min=0.100000,Max=0.100000)
|
||||
End Object
|
||||
Emitters(1)=SpriteEmitter'ScrnHMG.MuzzleFlash1stPKM.SpriteEmitter1'
|
||||
|
||||
}
|
||||
254
kf_sources/ScrnHMG/Classes/MuzzleFlash3rdPKM.uc
Normal file
254
kf_sources/ScrnHMG/Classes/MuzzleFlash3rdPKM.uc
Normal file
|
|
@ -0,0 +1,254 @@
|
|||
class MuzzleFlash3rdPKM extends ROMuzzleFlash3rd;
|
||||
|
||||
simulated function Trigger(Actor Other, Pawn EventInstigator)
|
||||
{
|
||||
Emitters[0].SpawnParticle(2);
|
||||
Emitters[1].SpawnParticle(2);
|
||||
Emitters[2].SpawnParticle(2);
|
||||
Emitters[3].SpawnParticle(2);
|
||||
Emitters[4].SpawnParticle(2);
|
||||
Emitters[5].SpawnParticle(1);
|
||||
Emitters[6].SpawnParticle(3);
|
||||
Emitters[7].SpawnParticle(3);
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter0
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
BlendBetweenSubdivisions=True
|
||||
UseRandomSubdivision=True
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
|
||||
CoordinateSystem=PTCS_Relative
|
||||
MaxParticles=3
|
||||
StartLocationRange=(X=(Max=2.000000))
|
||||
UseRotationFrom=PTRS_Normal
|
||||
SpinsPerSecondRange=(X=(Min=-0.500000,Max=0.500000),Y=(Min=-0.500000,Max=0.500000),Z=(Min=-0.500000,Max=0.500000))
|
||||
StartSpinRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
|
||||
SizeScale(0)=(RelativeSize=1.000000)
|
||||
SizeScale(1)=(RelativeTime=0.500000,RelativeSize=2.000000)
|
||||
SizeScale(2)=(RelativeTime=1.000000)
|
||||
StartSizeRange=(X=(Min=4.000000,Max=4.000000))
|
||||
DrawStyle=PTDS_Brighten
|
||||
Texture=Texture'Effects_Tex.Weapons.muzzle_4frame3rd'
|
||||
TextureUSubdivisions=2
|
||||
TextureVSubdivisions=2
|
||||
SubdivisionScale(0)=0.500000
|
||||
LifetimeRange=(Min=0.200000,Max=0.200000)
|
||||
StartVelocityRange=(X=(Min=5.000000,Max=10.000000))
|
||||
End Object
|
||||
Emitters(0)=SpriteEmitter'ScrnHMG.MuzzleFlash3rdPKM.SpriteEmitter0'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter1
|
||||
FadeOut=True
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
UseRandomSubdivision=True
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
|
||||
Opacity=0.750000
|
||||
FadeOutStartTime=0.080000
|
||||
CoordinateSystem=PTCS_Relative
|
||||
MaxParticles=3
|
||||
StartLocationRange=(X=(Max=10.000000))
|
||||
UseRotationFrom=PTRS_Normal
|
||||
SpinsPerSecondRange=(X=(Min=-0.500000,Max=0.500000),Y=(Min=-0.500000,Max=0.500000),Z=(Min=-0.500000,Max=0.500000))
|
||||
StartSpinRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
|
||||
SizeScale(0)=(RelativeSize=1.000000)
|
||||
SizeScale(1)=(RelativeTime=0.500000,RelativeSize=1.500000)
|
||||
SizeScale(2)=(RelativeTime=1.000000)
|
||||
StartSizeRange=(X=(Min=20.000000,Max=20.000000))
|
||||
DrawStyle=PTDS_Brighten
|
||||
Texture=Texture'Effects_Tex.Weapons.MP3rdPmuzzle_smoke1frame'
|
||||
SubdivisionScale(0)=0.500000
|
||||
LifetimeRange=(Min=0.200000,Max=0.200000)
|
||||
StartVelocityRange=(X=(Min=10.000000,Max=30.000000))
|
||||
End Object
|
||||
Emitters(1)=SpriteEmitter'ScrnHMG.MuzzleFlash3rdPKM.SpriteEmitter1'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter2
|
||||
FadeOut=True
|
||||
FadeIn=True
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
UseRandomSubdivision=True
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
|
||||
Opacity=0.600000
|
||||
FadeOutStartTime=0.094000
|
||||
FadeInEndTime=0.092000
|
||||
CoordinateSystem=PTCS_Relative
|
||||
MaxParticles=3
|
||||
StartLocationOffset=(X=15.000000)
|
||||
StartLocationRange=(X=(Max=5.000000))
|
||||
UseRotationFrom=PTRS_Normal
|
||||
SpinsPerSecondRange=(X=(Min=-0.500000,Max=0.500000),Y=(Min=-0.500000,Max=0.500000),Z=(Min=-0.500000,Max=0.500000))
|
||||
StartSpinRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
|
||||
SizeScale(0)=(RelativeSize=0.500000)
|
||||
SizeScale(1)=(RelativeTime=0.500000,RelativeSize=1.000000)
|
||||
SizeScale(2)=(RelativeTime=1.000000)
|
||||
StartSizeRange=(X=(Min=20.000000,Max=20.000000))
|
||||
DrawStyle=PTDS_Brighten
|
||||
Texture=Texture'Effects_Tex.Weapons.MP3rdPmuzzle_smoke1frame'
|
||||
SubdivisionScale(0)=0.500000
|
||||
LifetimeRange=(Min=0.200000,Max=0.200000)
|
||||
InitialDelayRange=(Min=0.050000,Max=0.050000)
|
||||
End Object
|
||||
Emitters(2)=SpriteEmitter'ScrnHMG.MuzzleFlash3rdPKM.SpriteEmitter2'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter3
|
||||
FadeOut=True
|
||||
FadeIn=True
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
UseRandomSubdivision=True
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
|
||||
Opacity=0.750000
|
||||
FadeOutStartTime=0.040000
|
||||
FadeInEndTime=0.040000
|
||||
CoordinateSystem=PTCS_Relative
|
||||
MaxParticles=3
|
||||
StartLocationOffset=(X=5.000000)
|
||||
StartLocationRange=(X=(Max=10.000000))
|
||||
UseRotationFrom=PTRS_Normal
|
||||
SpinsPerSecondRange=(X=(Min=-0.500000,Max=0.500000),Y=(Min=-0.500000,Max=0.500000),Z=(Min=-0.500000,Max=0.500000))
|
||||
StartSpinRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
|
||||
SizeScale(0)=(RelativeSize=1.000000)
|
||||
SizeScale(1)=(RelativeTime=0.500000,RelativeSize=1.000000)
|
||||
SizeScale(2)=(RelativeTime=1.000000)
|
||||
StartSizeRange=(X=(Min=20.000000,Max=20.000000))
|
||||
DrawStyle=PTDS_Brighten
|
||||
Texture=Texture'Effects_Tex.Weapons.MP3rdPmuzzle_smoke1frame'
|
||||
SubdivisionScale(0)=0.500000
|
||||
LifetimeRange=(Min=0.200000,Max=0.200000)
|
||||
End Object
|
||||
Emitters(3)=SpriteEmitter'ScrnHMG.MuzzleFlash3rdPKM.SpriteEmitter3'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter4
|
||||
FadeOut=True
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
BlendBetweenSubdivisions=True
|
||||
UseRandomSubdivision=True
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
|
||||
FadeOutStartTime=0.120000
|
||||
CoordinateSystem=PTCS_Relative
|
||||
MaxParticles=3
|
||||
StartLocationOffset=(X=2.000000)
|
||||
StartLocationRange=(X=(Max=3.000000))
|
||||
UseRotationFrom=PTRS_Normal
|
||||
SpinsPerSecondRange=(X=(Min=-0.500000,Max=0.500000),Y=(Min=-0.500000,Max=0.500000),Z=(Min=-0.500000,Max=0.500000))
|
||||
StartSpinRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
|
||||
SizeScale(0)=(RelativeSize=1.000000)
|
||||
SizeScale(1)=(RelativeTime=0.500000,RelativeSize=2.000000)
|
||||
SizeScale(2)=(RelativeTime=1.000000)
|
||||
StartSizeRange=(X=(Min=2.500000,Max=2.500000))
|
||||
DrawStyle=PTDS_Brighten
|
||||
Texture=Texture'Effects_Tex.Weapons.muzzle_4frame3rd'
|
||||
TextureUSubdivisions=2
|
||||
TextureVSubdivisions=2
|
||||
SubdivisionScale(0)=0.500000
|
||||
LifetimeRange=(Min=0.200000,Max=0.200000)
|
||||
StartVelocityRange=(X=(Min=5.000000,Max=10.000000))
|
||||
End Object
|
||||
Emitters(4)=SpriteEmitter'ScrnHMG.MuzzleFlash3rdPKM.SpriteEmitter4'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter5
|
||||
RespawnDeadParticles=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
Opacity=0.200000
|
||||
MaxParticles=1
|
||||
StartSizeRange=(X=(Min=50.000000,Max=50.000000))
|
||||
Texture=Texture'Effects_Tex.BulletHits.glowfinal'
|
||||
LifetimeRange=(Min=0.100000,Max=0.100000)
|
||||
End Object
|
||||
Emitters(5)=SpriteEmitter'ScrnHMG.MuzzleFlash3rdPKM.SpriteEmitter5'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter6
|
||||
FadeOut=True
|
||||
FadeIn=True
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
BlendBetweenSubdivisions=True
|
||||
UseRandomSubdivision=True
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
|
||||
Opacity=0.200000
|
||||
MaxParticles=30
|
||||
StartLocationOffset=(X=5.000000)
|
||||
StartLocationRange=(X=(Max=10.000000))
|
||||
UseRotationFrom=PTRS_Actor
|
||||
SpinsPerSecondRange=(X=(Min=-0.500000,Max=0.500000),Y=(Min=-0.500000,Max=0.500000),Z=(Min=-0.500000,Max=0.500000))
|
||||
SizeScale(0)=(RelativeSize=1.000000)
|
||||
SizeScale(1)=(RelativeTime=1.000000,RelativeSize=2.500000)
|
||||
StartSizeRange=(X=(Min=15.000000,Max=20.000000))
|
||||
DrawStyle=PTDS_Brighten
|
||||
Texture=Texture'Effects_Tex.Weapons.MP3rdPmuzzle_smoke1frame'
|
||||
LifetimeRange=(Min=1.200000,Max=1.200000)
|
||||
StartVelocityRange=(X=(Max=40.000000),Z=(Min=10.000000,Max=20.000000))
|
||||
VelocityLossRange=(X=(Max=2.000000))
|
||||
End Object
|
||||
Emitters(6)=SpriteEmitter'ScrnHMG.MuzzleFlash3rdPKM.SpriteEmitter6'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter7
|
||||
UseColorScale=True
|
||||
FadeOut=True
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
UseRandomSubdivision=True
|
||||
UseVelocityScale=True
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
|
||||
Opacity=0.200000
|
||||
MaxParticles=30
|
||||
StartLocationOffset=(X=5.000000)
|
||||
StartLocationRange=(X=(Max=10.000000))
|
||||
UseRotationFrom=PTRS_Actor
|
||||
SpinsPerSecondRange=(X=(Min=-0.500000,Max=0.500000),Y=(Min=-0.500000,Max=0.500000),Z=(Min=-0.500000,Max=0.500000))
|
||||
StartSpinRange=(X=(Max=1.000000))
|
||||
SizeScale(1)=(RelativeTime=1.000000,RelativeSize=1.000000)
|
||||
StartSizeRange=(X=(Min=45.000000,Max=80.000000))
|
||||
DrawStyle=PTDS_Brighten
|
||||
Texture=Texture'Effects_Tex.Weapons.MP3rdPmuzzle_smoke1frame'
|
||||
LifetimeRange=(Min=1.500000,Max=3.000000)
|
||||
StartVelocityRange=(X=(Min=50.000000,Max=75.000000))
|
||||
VelocityScale(0)=(RelativeVelocity=(X=1.000000,Y=1.000000,Z=1.000000))
|
||||
VelocityScale(1)=(RelativeTime=0.500000,RelativeVelocity=(X=0.200000,Y=0.200000,Z=0.200000))
|
||||
VelocityScale(2)=(RelativeTime=1.000000)
|
||||
End Object
|
||||
Emitters(7)=SpriteEmitter'ScrnHMG.MuzzleFlash3rdPKM.SpriteEmitter7'
|
||||
|
||||
}
|
||||
114
kf_sources/ScrnHMG/Classes/MuzzleFlashM41A.uc
Normal file
114
kf_sources/ScrnHMG/Classes/MuzzleFlashM41A.uc
Normal file
|
|
@ -0,0 +1,114 @@
|
|||
class MuzzleFlashM41A extends ROMuzzleFlash1st;
|
||||
|
||||
simulated function Trigger(Actor Other, Pawn EventInstigator)
|
||||
{
|
||||
Emitters[0].SpawnParticle(2);
|
||||
Emitters[1].SpawnParticle(1);
|
||||
Emitters[2].SpawnParticle(1);
|
||||
Emitters[3].SpawnParticle(1);
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter22
|
||||
UseColorScale=True
|
||||
FadeOut=True
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
BlendBetweenSubdivisions=True
|
||||
UseSubdivisionScale=True
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=187,G=252,R=255,A=255))
|
||||
FadeOutStartTime=0.046740
|
||||
CoordinateSystem=PTCS_Relative
|
||||
MaxParticles=2
|
||||
SpinsPerSecondRange=(X=(Min=0.437000,Max=0.573000))
|
||||
StartSpinRange=(X=(Max=1.000000))
|
||||
SizeScale(1)=(RelativeTime=1.000000,RelativeSize=0.820000)
|
||||
StartSizeRange=(X=(Min=11.518997,Max=31.999001))
|
||||
Texture=Texture'HMG_T.M41A.Muzzle1'
|
||||
TextureUSubdivisions=2
|
||||
TextureVSubdivisions=1
|
||||
SubdivisionScale(0)=0.900000
|
||||
SubdivisionScale(1)=0.100000
|
||||
SubdivisionScale(2)=0.001000
|
||||
LifetimeRange=(Min=0.057000,Max=0.057000)
|
||||
End Object
|
||||
Emitters(0)=SpriteEmitter'ScrnHMG.MuzzleFlashM41A.SpriteEmitter22'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter20
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
BlendBetweenSubdivisions=True
|
||||
UseSubdivisionScale=True
|
||||
ColorMultiplierRange=(X=(Min=0.760000,Max=0.760000),Y=(Min=0.692000,Max=0.760000),Z=(Min=0.638000,Max=0.638000))
|
||||
CoordinateSystem=PTCS_Relative
|
||||
MaxParticles=2
|
||||
SpinsPerSecondRange=(X=(Min=0.387000,Max=0.495000))
|
||||
StartSpinRange=(X=(Max=1.000000))
|
||||
SizeScale(1)=(RelativeTime=0.370000,RelativeSize=0.757000)
|
||||
SizeScale(2)=(RelativeTime=1.000000,RelativeSize=1.000000)
|
||||
StartSizeRange=(X=(Min=11.122002,Max=31.122002))
|
||||
Texture=Texture'HMG_T.M41A.Muzzle1'
|
||||
TextureUSubdivisions=2
|
||||
TextureVSubdivisions=1
|
||||
SubdivisionScale(0)=0.900000
|
||||
SubdivisionScale(1)=0.100000
|
||||
SubdivisionScale(2)=0.001000
|
||||
LifetimeRange=(Min=0.057000,Max=0.057000)
|
||||
End Object
|
||||
Emitters(1)=SpriteEmitter'ScrnHMG.MuzzleFlashM41A.SpriteEmitter20'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter21
|
||||
FadeOut=True
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
BlendBetweenSubdivisions=True
|
||||
UseSubdivisionScale=True
|
||||
ColorMultiplierRange=(X=(Min=0.900000,Max=0.900000),Y=(Min=0.800000,Max=0.900000),Z=(Min=0.704000,Max=0.704000))
|
||||
FadeOutStartTime=0.003120
|
||||
CoordinateSystem=PTCS_Relative
|
||||
MaxParticles=9
|
||||
StartLocationRange=(Y=(Min=-7.535000,Max=7.535000),Z=(Min=-7.535000,Max=7.535000))
|
||||
SpinsPerSecondRange=(X=(Min=0.025000,Max=0.035000))
|
||||
StartSpinRange=(X=(Max=1.000000))
|
||||
SizeScale(0)=(RelativeSize=0.100000)
|
||||
SizeScale(1)=(RelativeTime=0.280000,RelativeSize=1.126000)
|
||||
SizeScale(2)=(RelativeTime=1.000000,RelativeSize=0.870000)
|
||||
StartSizeRange=(X=(Min=13.900000,Max=16.318001))
|
||||
Texture=Texture'HMG_T.M41A.Muzzle1'
|
||||
TextureUSubdivisions=2
|
||||
TextureVSubdivisions=1
|
||||
SubdivisionScale(0)=0.900000
|
||||
SubdivisionScale(1)=0.100000
|
||||
SubdivisionScale(2)=0.001000
|
||||
LifetimeRange=(Min=0.052000,Max=0.052000)
|
||||
End Object
|
||||
Emitters(2)=SpriteEmitter'ScrnHMG.MuzzleFlashM41A.SpriteEmitter21'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter0
|
||||
RespawnDeadParticles=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
Opacity=0.100000
|
||||
MaxParticles=1
|
||||
StartSizeRange=(X=(Min=50.000000,Max=50.000000))
|
||||
DrawStyle=PTDS_Brighten
|
||||
Texture=Texture'Effects_Tex.Smoke.MuzzleCorona1stP'
|
||||
LifetimeRange=(Min=0.100000,Max=0.100000)
|
||||
End Object
|
||||
Emitters(3)=SpriteEmitter'ScrnHMG.MuzzleFlashM41A.SpriteEmitter0'
|
||||
|
||||
}
|
||||
110
kf_sources/ScrnHMG/Classes/PKM.uc
Normal file
110
kf_sources/ScrnHMG/Classes/PKM.uc
Normal file
|
|
@ -0,0 +1,110 @@
|
|||
class PKM extends KFWeapon
|
||||
config(user);
|
||||
|
||||
|
||||
function bool RecommendRangedAttack()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
//TODO: LONG ranged?
|
||||
function bool RecommendLongRangedAttack()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
function float SuggestAttackStyle()
|
||||
{
|
||||
return -1.0;
|
||||
}
|
||||
|
||||
function float GetAIRating()
|
||||
{
|
||||
local Bot B;
|
||||
|
||||
B = Bot(Instigator.Controller);
|
||||
if ( (B == None) || (B.Enemy == None) )
|
||||
return AIRating;
|
||||
|
||||
return AIRating;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
MagCapacity=65
|
||||
ReloadRate=6.000000
|
||||
ReloadAnim="Reload"
|
||||
ReloadAnimRate=1.000000
|
||||
FlashBoneName="tip_1"
|
||||
WeaponReloadAnim="Reload_M14"
|
||||
Weight=11.000000
|
||||
bHasAimingMode=True
|
||||
IdleAimAnim="Iron_Idle"
|
||||
QuickPutDownTime=0.300000
|
||||
QuickBringUpTime=0.300000
|
||||
StandardDisplayFOV=65.000000
|
||||
bModeZeroCanDryFire=True
|
||||
SleeveNum=2
|
||||
TraderInfoTexture=Texture'HMG_T.PKM.PKM_Trader'
|
||||
bIsTier2Weapon=True
|
||||
MeshRef="HMG_A.pkmmesh"
|
||||
SkinRefs(0)="HMG_T.PKM.wpn_pkm"
|
||||
SkinRefs(1)="HMG_T.PKM.wpn_pkm_lenta"
|
||||
SkinRefs(2)="KF_Weapons_Trip_T.hands.hands_1stP_military_cmb"
|
||||
SelectSoundRef="HMG_S.PKM.pkm_draw"
|
||||
HudImageRef="HMG_T.PKM.PKM_Unselected"
|
||||
SelectedHudImageRef="HMG_T.PKM.PKM_selected"
|
||||
PlayerIronSightFOV=65.000000
|
||||
ZoomedDisplayFOV=32.000000
|
||||
FireModeClass(0)=Class'ScrnHMG.PKMFire'
|
||||
FireModeClass(1)=Class'KFMod.NoFire'
|
||||
PutDownAnim="PutDown"
|
||||
SelectForce="SwitchToAssaultRifle"
|
||||
AIRating=0.550000
|
||||
CurrentRating=0.550000
|
||||
bShowChargingBar=True
|
||||
Description="The PKM (Kalashnikov's Machine-gun Modernized) adopted to service in 1969. It is a modernized, product-improved version of the PK (Pulemyot Kalashnikova)."
|
||||
EffectOffset=(X=100.000000,Y=25.000000,Z=-10.000000)
|
||||
DisplayFOV=65.000000
|
||||
Priority=190
|
||||
CustomCrosshair=11
|
||||
CustomCrossHairTextureName="Crosshairs.HUD.Crosshair_Cross5"
|
||||
InventoryGroup=3
|
||||
GroupOffset=7
|
||||
PickupClass=Class'ScrnHMG.PKMPickup'
|
||||
PlayerViewOffset=(X=-10.000000,Y=18.000000,Z=-11.000000)
|
||||
BobDamping=5.000000
|
||||
AttachmentClass=Class'ScrnHMG.PKMAttachment'
|
||||
IconCoords=(X1=245,Y1=39,X2=329,Y2=79)
|
||||
ItemName="PKM SE"
|
||||
TransientSoundVolume=1.250000
|
||||
}
|
||||
14
kf_sources/ScrnHMG/Classes/PKMAmmo.uc
Normal file
14
kf_sources/ScrnHMG/Classes/PKMAmmo.uc
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
class PKMAmmo extends KFAmmunition;
|
||||
|
||||
#EXEC OBJ LOAD FILE=KillingFloorHUD.utx
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoPickupAmount=65
|
||||
MaxAmmo=520
|
||||
InitialAmount=205
|
||||
PickupClass=Class'ScrnHMG.PKMAmmoPickup'
|
||||
IconMaterial=Texture'KillingFloorHUD.Generic.HUD'
|
||||
IconCoords=(X1=336,Y1=82,X2=382,Y2=125)
|
||||
ItemName="Rounds 7.62mm"
|
||||
}
|
||||
9
kf_sources/ScrnHMG/Classes/PKMAmmoPickup.uc
Normal file
9
kf_sources/ScrnHMG/Classes/PKMAmmoPickup.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
class PKMAmmoPickup extends KFAmmoPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoAmount=65
|
||||
InventoryType=Class'ScrnHMG.PKMAmmo'
|
||||
PickupMessage="7.62mm"
|
||||
StaticMesh=StaticMesh'KillingFloorStatics.L85Ammo'
|
||||
}
|
||||
70
kf_sources/ScrnHMG/Classes/PKMAttachment.uc
Normal file
70
kf_sources/ScrnHMG/Classes/PKMAttachment.uc
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
class PKMAttachment extends KFWeaponAttachment;
|
||||
|
||||
simulated function DoFlashEmitter()
|
||||
{
|
||||
if (mMuzFlash3rd == None)
|
||||
{
|
||||
mMuzFlash3rd = Spawn(mMuzFlashClass);
|
||||
AttachToBone(mMuzFlash3rd, 'wpn_silencer');
|
||||
}
|
||||
if(mMuzFlash3rd != None)
|
||||
mMuzFlash3rd.SpawnParticle(1);
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
mMuzFlashClass=Class'ScrnHMG.MuzzleFlash3rdPKM'
|
||||
mTracerClass=Class'KFMod.KFNewTracer'
|
||||
mShellCaseEmitterClass=Class'ScrnHMG.PKMShellSpewer'
|
||||
ShellEjectBoneName="magazin"
|
||||
MovementAnims(0)="JogF_AK47"
|
||||
MovementAnims(1)="JogB_AK47"
|
||||
MovementAnims(2)="JogL_AK47"
|
||||
MovementAnims(3)="JogR_AK47"
|
||||
TurnLeftAnim="TurnL_AK47"
|
||||
TurnRightAnim="TurnR_AK47"
|
||||
CrouchAnims(0)="CHWalkF_AK47"
|
||||
CrouchAnims(1)="CHWalkB_AK47"
|
||||
CrouchAnims(2)="CHWalkL_AK47"
|
||||
CrouchAnims(3)="CHWalkR_AK47"
|
||||
WalkAnims(0)="WalkF_AK47"
|
||||
WalkAnims(1)="WalkB_AK47"
|
||||
WalkAnims(2)="WalkL_AK47"
|
||||
WalkAnims(3)="WalkR_AK47"
|
||||
CrouchTurnRightAnim="CH_TurnR_AK47"
|
||||
CrouchTurnLeftAnim="CH_TurnL_AK47"
|
||||
IdleCrouchAnim="CHIdle_AK47"
|
||||
IdleWeaponAnim="Idle_AK47"
|
||||
IdleRestAnim="Idle_AK47"
|
||||
IdleChatAnim="Idle_AK47"
|
||||
IdleHeavyAnim="Idle_AK47"
|
||||
IdleRifleAnim="Idle_AK47"
|
||||
FireAnims(0)="Fire_AK47"
|
||||
FireAnims(1)="Fire_AK47"
|
||||
FireAnims(2)="Fire_AK47"
|
||||
FireAnims(3)="Fire_AK47"
|
||||
FireAltAnims(0)="Fire_AK47"
|
||||
FireAltAnims(1)="Fire_AK47"
|
||||
FireAltAnims(2)="Fire_AK47"
|
||||
FireAltAnims(3)="Fire_AK47"
|
||||
FireCrouchAnims(0)="CHFire_AK47"
|
||||
FireCrouchAnims(1)="CHFire_AK47"
|
||||
FireCrouchAnims(2)="CHFire_AK47"
|
||||
FireCrouchAnims(3)="CHFire_AK47"
|
||||
FireCrouchAltAnims(0)="CHFire_AK47"
|
||||
FireCrouchAltAnims(1)="CHFire_AK47"
|
||||
FireCrouchAltAnims(2)="CHFire_AK47"
|
||||
FireCrouchAltAnims(3)="CHFire_AK47"
|
||||
HitAnims(0)="HitF_AK47"
|
||||
HitAnims(1)="HitB_AK47"
|
||||
HitAnims(2)="HitL_AK47"
|
||||
HitAnims(3)="HitR_AK47"
|
||||
PostFireBlendStandAnim="Blend_AK47"
|
||||
PostFireBlendCrouchAnim="CHBlend_AK47"
|
||||
MeshRef="HMG_A.pkm3rd"
|
||||
bRapidFire=True
|
||||
bAltRapidFire=True
|
||||
SplashEffect=Class'ROEffects.BulletSplashEmitter'
|
||||
CullDistance=5000.000000
|
||||
DrawScale=0.700000
|
||||
}
|
||||
40
kf_sources/ScrnHMG/Classes/PKMFire.uc
Normal file
40
kf_sources/ScrnHMG/Classes/PKMFire.uc
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
class PKMFire extends KFFire;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
FireAimedAnim="Fire"
|
||||
RecoilRate=0.055000
|
||||
maxVerticalRecoilAngle=600
|
||||
maxHorizontalRecoilAngle=250
|
||||
bRecoilRightOnly=True
|
||||
ShellEjectClass=Class'ScrnHMG.KFShellEjectPKM'
|
||||
ShellEjectBoneName="shell_13"
|
||||
bAccuracyBonusForSemiAuto=True
|
||||
bRandomPitchFireSound=False
|
||||
FireSoundRef="HMG_S.PKM.pkm_shoot_mono"
|
||||
StereoFireSoundRef="HMG_S.PKM.pkm_shoot_stereo"
|
||||
NoAmmoSoundRef="HMG_S.PKM.pkm_empty"
|
||||
DamageType=Class'ScrnHMG.DamTypePKM'
|
||||
DamageMin=53
|
||||
DamageMax=68
|
||||
Momentum=10900.000000
|
||||
bPawnRapidFireAnim=True
|
||||
TransientSoundVolume=3.000000
|
||||
FireLoopAnim="Fire"
|
||||
TweenTime=0.025000
|
||||
FireForce="AssaultRifleFire"
|
||||
FireRate=0.095000
|
||||
AmmoClass=Class'ScrnHMG.PKMAmmo'
|
||||
AmmoPerFire=1
|
||||
ShakeRotMag=(X=50.000000,Y=50.000000,Z=350.000000)
|
||||
ShakeRotRate=(X=5000.000000,Y=5000.000000,Z=5000.000000)
|
||||
ShakeRotTime=0.750000
|
||||
ShakeOffsetMag=(X=6.000000,Y=3.000000,Z=7.500000)
|
||||
ShakeOffsetRate=(X=1000.000000,Y=1000.000000,Z=1000.000000)
|
||||
ShakeOffsetTime=1.250000
|
||||
BotRefireRate=0.990000
|
||||
FlashEmitterClass=Class'ScrnHMG.MuzzleFlash1stPKM'
|
||||
aimerror=42.000000
|
||||
Spread=0.030000
|
||||
SpreadStyle=SS_Random
|
||||
}
|
||||
26
kf_sources/ScrnHMG/Classes/PKMPickup.uc
Normal file
26
kf_sources/ScrnHMG/Classes/PKMPickup.uc
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
class PKMPickup extends KFWeaponPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Weight=11.000000
|
||||
cost=4000
|
||||
AmmoCost=50
|
||||
BuyClipSize=65
|
||||
PowerValue=55
|
||||
SpeedValue=86
|
||||
RangeValue=70
|
||||
Description="The PKM (Kalashnikov's Machine-gun Modernized) adopted to service in 1969. It is a modernized, product-improved version of the PK (Pulemyot Kalashnikova)"
|
||||
ItemName="PKM SE"
|
||||
ItemShortName="PKM"
|
||||
AmmoItemName="PKM 7.62x54mmR"
|
||||
AmmoMesh=StaticMesh'KillingFloorStatics.L85Ammo'
|
||||
CorrespondingPerkIndex=10
|
||||
EquipmentCategoryID=2
|
||||
InventoryType=Class'ScrnHMG.PKM'
|
||||
PickupMessage="You picked up the PKM"
|
||||
PickupSound=Sound'HMG_S.PKM.pkm_holster'
|
||||
PickupForce="AssaultRiflePickup"
|
||||
StaticMesh=StaticMesh'HMG_A.PkmSM'
|
||||
CollisionRadius=25.000000
|
||||
CollisionHeight=5.000000
|
||||
}
|
||||
35
kf_sources/ScrnHMG/Classes/PKMShellSpewer.uc
Normal file
35
kf_sources/ScrnHMG/Classes/PKMShellSpewer.uc
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
class PKMShellSpewer extends xEmitter;
|
||||
|
||||
var() Sound ShellImpactSnd;
|
||||
|
||||
function CollisionSound()
|
||||
{
|
||||
PlaySound(ShellImpactSnd);
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
ShellImpactSnd=SoundGroup'Inf_Weapons.shells.ShellRifleDirt'
|
||||
mParticleType=PT_Mesh
|
||||
mStartParticles=0
|
||||
mMaxParticles=350
|
||||
mLifeRange(0)=0.500000
|
||||
mLifeRange(1)=1.000000
|
||||
mRegenRange(0)=0.000000
|
||||
mRegenRange(1)=0.000000
|
||||
mDirDev=(X=1.500000,Y=0.200000,Z=0.600000)
|
||||
mSpeedRange(0)=200.000000
|
||||
mSpeedRange(1)=250.000000
|
||||
mMassRange(0)=2.000000
|
||||
mMassRange(1)=2.000000
|
||||
mSpinRange(0)=-600.000000
|
||||
mSpinRange(1)=600.000000
|
||||
mAttenFunc=ATF_None
|
||||
mMeshNodes(0)=StaticMesh'PatchStatics.NormalCasing'
|
||||
mColMakeSound=True
|
||||
bHighDetail=True
|
||||
bNetTemporary=False
|
||||
DrawScale=0.120000
|
||||
Skins(0)=Texture'PatchTex.NormalCasing'
|
||||
bUnlit=False
|
||||
}
|
||||
11
kf_sources/ScrnHMG/Classes/RPK47Ammo.uc
Normal file
11
kf_sources/ScrnHMG/Classes/RPK47Ammo.uc
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
class RPK47Ammo extends KFAmmunition;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
MaxAmmo=400
|
||||
InitialAmount=200
|
||||
PickupClass=Class'ScrnHMG.RPK47AmmoPickup'
|
||||
IconMaterial=Texture'KillingFloorHUD.Generic.HUD'
|
||||
IconCoords=(X1=336,Y1=82,X2=382,Y2=125)
|
||||
ItemName="Rounds 7.62mm"
|
||||
}
|
||||
9
kf_sources/ScrnHMG/Classes/RPK47AmmoPickup.uc
Normal file
9
kf_sources/ScrnHMG/Classes/RPK47AmmoPickup.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
class RPK47AmmoPickup extends KFAmmoPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoAmount=40
|
||||
InventoryType=Class'ScrnHMG.RPK47Ammo'
|
||||
PickupMessage="7.62mm"
|
||||
StaticMesh=StaticMesh'KillingFloorStatics.L85Ammo'
|
||||
}
|
||||
60
kf_sources/ScrnHMG/Classes/RPK47Attachment.uc
Normal file
60
kf_sources/ScrnHMG/Classes/RPK47Attachment.uc
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
class RPK47Attachment extends KFWeaponAttachment;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
mMuzFlashClass=Class'ROEffects.MuzzleFlash3rdMP'
|
||||
mTracerClass=Class'KFMod.KFNewTracer'
|
||||
mShellCaseEmitterClass=Class'KFMod.KFShellSpewer'
|
||||
ShellEjectBoneName="Shell_eject"
|
||||
MovementAnims(0)="JogF_AK47"
|
||||
MovementAnims(1)="JogB_AK47"
|
||||
MovementAnims(2)="JogL_AK47"
|
||||
MovementAnims(3)="JogR_AK47"
|
||||
TurnLeftAnim="TurnL_AK47"
|
||||
TurnRightAnim="TurnR_AK47"
|
||||
CrouchAnims(0)="CHWalkF_AK47"
|
||||
CrouchAnims(1)="CHWalkB_AK47"
|
||||
CrouchAnims(2)="CHWalkL_AK47"
|
||||
CrouchAnims(3)="CHWalkR_AK47"
|
||||
WalkAnims(0)="WalkF_AK47"
|
||||
WalkAnims(1)="WalkB_AK47"
|
||||
WalkAnims(2)="WalkL_AK47"
|
||||
WalkAnims(3)="WalkR_AK47"
|
||||
CrouchTurnRightAnim="CH_TurnR_AK47"
|
||||
CrouchTurnLeftAnim="CH_TurnL_AK47"
|
||||
IdleCrouchAnim="CHIdle_AK47"
|
||||
IdleWeaponAnim="Idle_AK47"
|
||||
IdleRestAnim="Idle_AK47"
|
||||
IdleChatAnim="Idle_AK47"
|
||||
IdleHeavyAnim="Idle_AK47"
|
||||
IdleRifleAnim="Idle_AK47"
|
||||
FireAnims(0)="Fire_AK47"
|
||||
FireAnims(1)="Fire_AK47"
|
||||
FireAnims(2)="Fire_AK47"
|
||||
FireAnims(3)="Fire_AK47"
|
||||
FireAltAnims(0)="Fire_AK47"
|
||||
FireAltAnims(1)="Fire_AK47"
|
||||
FireAltAnims(2)="Fire_AK47"
|
||||
FireAltAnims(3)="Fire_AK47"
|
||||
FireCrouchAnims(0)="CHFire_AK47"
|
||||
FireCrouchAnims(1)="CHFire_AK47"
|
||||
FireCrouchAnims(2)="CHFire_AK47"
|
||||
FireCrouchAnims(3)="CHFire_AK47"
|
||||
FireCrouchAltAnims(0)="CHFire_AK47"
|
||||
FireCrouchAltAnims(1)="CHFire_AK47"
|
||||
FireCrouchAltAnims(2)="CHFire_AK47"
|
||||
FireCrouchAltAnims(3)="CHFire_AK47"
|
||||
HitAnims(0)="HitF_AK47"
|
||||
HitAnims(1)="HitB_AK47"
|
||||
HitAnims(2)="HitL_AK47"
|
||||
HitAnims(3)="HitR_AK47"
|
||||
PostFireBlendStandAnim="Blend_AK47"
|
||||
PostFireBlendCrouchAnim="CHBlend_AK47"
|
||||
MeshRef="HMG_A.RPK47_3rd"
|
||||
bHeavy=True
|
||||
bRapidFire=True
|
||||
bAltRapidFire=True
|
||||
SplashEffect=Class'ROEffects.BulletSplashEmitter'
|
||||
CullDistance=5000.000000
|
||||
DrawScale=0.750000
|
||||
}
|
||||
40
kf_sources/ScrnHMG/Classes/RPK47Fire.uc
Normal file
40
kf_sources/ScrnHMG/Classes/RPK47Fire.uc
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
class RPK47Fire extends KFFire;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
FireAimedAnim="Fire_Iron"
|
||||
RecoilRate=0.050000
|
||||
maxVerticalRecoilAngle=600
|
||||
maxHorizontalRecoilAngle=300
|
||||
bRecoilRightOnly=True
|
||||
ShellEjectClass=Class'ROEffects.KFShellEjectAK'
|
||||
ShellEjectBoneName="Shell_eject"
|
||||
bAccuracyBonusForSemiAuto=True
|
||||
bRandomPitchFireSound=False
|
||||
FireSoundRef="HMG_S.RPK.rpk47_shoot"
|
||||
StereoFireSoundRef="HMG_S.RPK.rpk47_shoot"
|
||||
NoAmmoSoundRef="HMG_S.RPK.rpk47_empty"
|
||||
DamageType=Class'ScrnHMG.DamTypeRPK47MG'
|
||||
DamageMin=45
|
||||
DamageMax=63
|
||||
Momentum=10500.000000
|
||||
bPawnRapidFireAnim=True
|
||||
TransientSoundVolume=3.800000
|
||||
FireLoopAnim="Fire"
|
||||
TweenTime=0.025000
|
||||
FireForce="AssaultRifleFire"
|
||||
FireRate=0.109000
|
||||
AmmoClass=Class'ScrnHMG.RPK47Ammo'
|
||||
AmmoPerFire=1
|
||||
ShakeRotMag=(X=50.000000,Y=50.000000,Z=350.000000)
|
||||
ShakeRotRate=(X=5000.000000,Y=5000.000000,Z=5000.000000)
|
||||
ShakeRotTime=0.750000
|
||||
ShakeOffsetMag=(X=6.000000,Y=3.000000,Z=7.500000)
|
||||
ShakeOffsetRate=(X=1000.000000,Y=1000.000000,Z=1000.000000)
|
||||
ShakeOffsetTime=1.250000
|
||||
BotRefireRate=0.990000
|
||||
FlashEmitterClass=Class'ROEffects.MuzzleFlash1stMP'
|
||||
aimerror=42.000000
|
||||
Spread=0.015000
|
||||
SpreadStyle=SS_Random
|
||||
}
|
||||
130
kf_sources/ScrnHMG/Classes/RPK47MachineGun.uc
Normal file
130
kf_sources/ScrnHMG/Classes/RPK47MachineGun.uc
Normal file
|
|
@ -0,0 +1,130 @@
|
|||
class RPK47MachineGun extends KFWeapon
|
||||
config(user);
|
||||
|
||||
|
||||
// Use alt fire to switch fire modes
|
||||
simulated function AltFire(float F)
|
||||
{
|
||||
DoToggle();
|
||||
}
|
||||
|
||||
exec function SwitchModes()
|
||||
{
|
||||
DoToggle();
|
||||
}
|
||||
|
||||
function bool RecommendRangedAttack()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
//TODO: LONG ranged?
|
||||
function bool RecommendLongRangedAttack()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
function float SuggestAttackStyle()
|
||||
{
|
||||
return -1.0;
|
||||
}
|
||||
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
MagCapacity=40
|
||||
ReloadRate=3.000000
|
||||
ReloadAnim="Reload"
|
||||
ReloadAnimRate=1.000000
|
||||
WeaponReloadAnim="Reload_AK47"
|
||||
Weight=8.000000
|
||||
bHasAimingMode=True
|
||||
IdleAimAnim="Iron_Idle"
|
||||
StandardDisplayFOV=65.000000
|
||||
bModeZeroCanDryFire=True
|
||||
TraderInfoTexture=Texture'HMG_T.RPK.RPK47_Trader'
|
||||
bIsTier2Weapon=True
|
||||
MeshRef="HMG_A.RPK47_mesh"
|
||||
SkinRefs(0)="HMG_T.RPK.RPK_0"
|
||||
SkinRefs(1)="KF_Weapons3_Trip_T.hands.Priest_Hands_1st_P"
|
||||
SkinRefs(2)="HMG_T.RPK.RPK_1"
|
||||
SkinRefs(3)="HMG_T.RPK.RPK_2"
|
||||
SkinRefs(4)="HMG_T.RPK.RPK_3"
|
||||
SkinRefs(5)="HMG_T.RPK.RPK_4"
|
||||
SkinRefs(6)="HMG_T.RPK.RPK_5"
|
||||
SkinRefs(7)="HMG_T.RPK.RPK_6"
|
||||
SkinRefs(8)="HMG_T.RPK.RPK_7"
|
||||
SkinRefs(9)="KF_Weapons2_Trip_T.Special.Aimpoint_sight_shdr"
|
||||
SelectSoundRef="HMG_S.RPK.rpk47_select"
|
||||
HudImageRef="HMG_T.RPK.RPK47_Unselected"
|
||||
SelectedHudImageRef="HMG_T.RPK.RPK47_selected"
|
||||
PlayerIronSightFOV=65.000000
|
||||
ZoomedDisplayFOV=32.000000
|
||||
FireModeClass(0)=Class'ScrnHMG.RPK47Fire'
|
||||
FireModeClass(1)=Class'KFMod.NoFire'
|
||||
PutDownAnim="PutDown"
|
||||
SelectForce="SwitchToAssaultRifle"
|
||||
AIRating=0.550000
|
||||
CurrentRating=0.550000
|
||||
bShowChargingBar=True
|
||||
Description="The RPK (Russian: Ruchnoy Pulemyot Kalashnikova, Kalashnikov hand-held machine gun) is a 7.62x39mm light machine gun of Soviet design, developed by Mikhail Kalashnikov in the late 1950s, parallel with the AKM assault rifle."
|
||||
EffectOffset=(X=100.000000,Y=25.000000,Z=-10.000000)
|
||||
DisplayFOV=65.000000
|
||||
Priority=125
|
||||
CustomCrosshair=11
|
||||
CustomCrossHairTextureName="Crosshairs.HUD.Crosshair_Cross5"
|
||||
InventoryGroup=3
|
||||
GroupOffset=7
|
||||
PickupClass=Class'ScrnHMG.RPK47Pickup'
|
||||
PlayerViewOffset=(X=8.000000,Y=8.000000,Z=-3.000000)
|
||||
BobDamping=4.000000
|
||||
AttachmentClass=Class'ScrnHMG.RPK47Attachment'
|
||||
IconCoords=(X1=245,Y1=39,X2=329,Y2=79)
|
||||
ItemName="RPK-47 SE"
|
||||
TransientSoundVolume=1.250000
|
||||
}
|
||||
25
kf_sources/ScrnHMG/Classes/RPK47Pickup.uc
Normal file
25
kf_sources/ScrnHMG/Classes/RPK47Pickup.uc
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
class RPK47Pickup extends KFWeaponPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Weight=8.000000
|
||||
AmmoCost=15
|
||||
BuyClipSize=40
|
||||
PowerValue=49
|
||||
SpeedValue=86
|
||||
RangeValue=70
|
||||
Description="The RPK (Russian: Ruchnoy Pulemyot Kalashnikova, Kalashnikov hand-held machine gun) is a 7.62x39mm light machine gun of Soviet design, developed by Mikhail Kalashnikov in the late 1950s, parallel with the AKM assault rifle."
|
||||
ItemName="RPK-47 SE"
|
||||
ItemShortName="RPK-47"
|
||||
AmmoItemName="Rounds 7.62x39mm"
|
||||
AmmoMesh=StaticMesh'KillingFloorStatics.L85Ammo'
|
||||
CorrespondingPerkIndex=10
|
||||
EquipmentCategoryID=2
|
||||
InventoryType=Class'ScrnHMG.RPK47MachineGun'
|
||||
PickupMessage="You picked up the RPK-47"
|
||||
PickupSound=Sound'HMG_S.RPK.rpk47_pickup'
|
||||
PickupForce="AssaultRiflePickup"
|
||||
StaticMesh=StaticMesh'HMG_A.RPK47_st'
|
||||
CollisionRadius=25.000000
|
||||
CollisionHeight=5.000000
|
||||
}
|
||||
17
kf_sources/ScrnHMG/Classes/RocketAmmo.uc
Normal file
17
kf_sources/ScrnHMG/Classes/RocketAmmo.uc
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
//=============================================================================
|
||||
// LAW Ammo.
|
||||
//=============================================================================
|
||||
class Rocketammo extends KFAmmunition;
|
||||
|
||||
#EXEC OBJ LOAD FILE=KillingFloorHUD.utx
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoPickupAmount=1
|
||||
MaxAmmo=5
|
||||
InitialAmount=1
|
||||
PickupClass=Class'ScrnHMG.RocketAmmoPickup'
|
||||
IconMaterial=Texture'KillingFloorHUD.Generic.HUD'
|
||||
IconCoords=(X1=458,Y1=34,X2=511,Y2=78)
|
||||
ItemName="L.A.W Rockets"
|
||||
}
|
||||
19
kf_sources/ScrnHMG/Classes/RocketAmmoPickup.uc
Normal file
19
kf_sources/ScrnHMG/Classes/RocketAmmoPickup.uc
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
//=============================================================================
|
||||
// HuskGunAmmoPickup
|
||||
//=============================================================================
|
||||
// Ammo pickup class for the Husk Gun primary fire
|
||||
//=============================================================================
|
||||
// Killing Floor Source
|
||||
// Copyright (C) 2011 Tripwire Interactive LLC
|
||||
// - John "Ramm-Jaeger" Gibson
|
||||
//=============================================================================
|
||||
class RocketAmmoPickup extends KFAmmoPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoAmount=1
|
||||
InventoryType=Class'ScrnHMG.RocketAmmo'
|
||||
PickupMessage="Rockets"
|
||||
StaticMesh=StaticMesh'KillingFloorStatics.FT_AmmoMesh'
|
||||
CollisionRadius=25.000000
|
||||
}
|
||||
724
kf_sources/ScrnHMG/Classes/SA80LSW.uc
Normal file
724
kf_sources/ScrnHMG/Classes/SA80LSW.uc
Normal file
|
|
@ -0,0 +1,724 @@
|
|||
class SA80LSW extends KFWeapon;
|
||||
|
||||
//=============================================================================
|
||||
// Execs
|
||||
//=============================================================================
|
||||
#exec OBJ LOAD FILE=ScopeShaders.utx
|
||||
|
||||
var color ChargeColor;
|
||||
|
||||
var float Range;
|
||||
var float LastRangingTime;
|
||||
|
||||
var() Material ZoomMat;
|
||||
var() Sound ZoomSound;
|
||||
var bool bArrowRemoved;
|
||||
|
||||
var() int lenseMaterialID; // used since material id's seem to change alot
|
||||
|
||||
var() float scopePortalFOVHigh; // The FOV to zoom the scope portal by.
|
||||
var() float scopePortalFOV; // The FOV to zoom the scope portal by.
|
||||
var() vector XoffsetScoped;
|
||||
var() vector XoffsetHighDetail;
|
||||
|
||||
// Not sure if these pitch vars are still needed now that we use Scripted Textures. We'll keep for now in case they are. - Ramm 08/14/04
|
||||
var() int scopePitch; // Tweaks the pitch of the scope firing angle
|
||||
var() int scopeYaw; // Tweaks the yaw of the scope firing angle
|
||||
var() int scopePitchHigh; // Tweaks the pitch of the scope firing angle high detail scope
|
||||
var() int scopeYawHigh; // Tweaks the yaw of the scope firing angle high detail scope
|
||||
|
||||
// 3d Scope vars
|
||||
var ScriptedTexture ScopeScriptedTexture; // Scripted texture for 3d scopes
|
||||
var Shader ScopeScriptedShader; // The shader that combines the scripted texture with the sight overlay
|
||||
var Material ScriptedTextureFallback;// The texture to render if the users system doesn't support shaders
|
||||
|
||||
var Combiner ScriptedScopeCombiner;
|
||||
|
||||
var texture TexturedScopeTexture;
|
||||
|
||||
var bool bInitializedScope; // Set to true when the scope has been initialized
|
||||
// var(Zooming) float ZoomedDisplayFOVHigh; // What is the DisplayFOV when zoomed in
|
||||
// var float ForceZoomOutTime;
|
||||
|
||||
|
||||
var string ZoomMatRef;
|
||||
var string ScriptedTextureFallbackRef;
|
||||
|
||||
var texture CrosshairTex;
|
||||
var string CrosshairTexRef;
|
||||
|
||||
//=============================================================================
|
||||
// Functions
|
||||
//=============================================================================
|
||||
|
||||
static function PreloadAssets(Inventory Inv, optional bool bSkipRefCount)
|
||||
{
|
||||
local SA80LSW W;
|
||||
|
||||
super.PreloadAssets(Inv, bSkipRefCount);
|
||||
|
||||
default.ZoomMat = FinalBlend(DynamicLoadObject(default.ZoomMatRef, class'FinalBlend', true));
|
||||
default.ScriptedTextureFallback = texture(DynamicLoadObject(default.ScriptedTextureFallbackRef, class'texture', true));
|
||||
default.CrosshairTex = texture(DynamicLoadObject(default.CrosshairTexRef, class'texture', true));
|
||||
|
||||
W = SA80LSW(Inv);
|
||||
if ( W != none ) {
|
||||
W.ZoomMat = default.ZoomMat;
|
||||
W.ScriptedTextureFallback = default.ScriptedTextureFallback;
|
||||
W.CrosshairTex = default.CrosshairTex;
|
||||
}
|
||||
}
|
||||
|
||||
static function bool UnloadAssets()
|
||||
{
|
||||
if ( super.UnloadAssets() ) {
|
||||
default.ZoomMat = none;
|
||||
default.ScriptedTextureFallback = none;
|
||||
default.CrosshairTex = none;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
//======================================================================
|
||||
simulated function AltFire(float F)
|
||||
{
|
||||
if(ReadyToFire(0))
|
||||
{
|
||||
DoToggle();
|
||||
}
|
||||
}
|
||||
|
||||
exec function SwitchModes()
|
||||
{
|
||||
DoToggle();
|
||||
}
|
||||
|
||||
|
||||
function bool RecommendRangedAttack()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
function bool RecommendLongRangedAttack()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
function float SuggestAttackStyle()
|
||||
{
|
||||
return -1.0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
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;
|
||||
}
|
||||
//======================================================================
|
||||
exec function pfov(int thisFOV)
|
||||
{
|
||||
if( !class'ROEngine.ROLevelInfo'.static.RODebugMode() )
|
||||
return;
|
||||
|
||||
scopePortalFOV = thisFOV;
|
||||
}
|
||||
|
||||
exec function pPitch(int num)
|
||||
{
|
||||
if( !class'ROEngine.ROLevelInfo'.static.RODebugMode() )
|
||||
return;
|
||||
|
||||
scopePitch = num;
|
||||
scopePitchHigh = num;
|
||||
}
|
||||
|
||||
exec function pYaw(int num)
|
||||
{
|
||||
if( !class'ROEngine.ROLevelInfo'.static.RODebugMode() )
|
||||
return;
|
||||
|
||||
scopeYaw = num;
|
||||
scopeYawHigh = num;
|
||||
}
|
||||
|
||||
simulated exec function TexSize(int i, int j)
|
||||
{
|
||||
if( !class'ROEngine.ROLevelInfo'.static.RODebugMode() )
|
||||
return;
|
||||
|
||||
ScopeScriptedTexture.SetSize(i, j);
|
||||
}
|
||||
|
||||
// Helper function for the scope system. The scope system checks here to see when it should draw the portal.
|
||||
// if you want to limit any times the portal should/shouldn't be drawn, add them here.
|
||||
// Ramm 10/27/03
|
||||
simulated function bool ShouldDrawPortal()
|
||||
{
|
||||
// local name thisAnim;
|
||||
// local float animframe;
|
||||
// local float animrate;
|
||||
//
|
||||
// GetAnimParams(0, thisAnim,animframe,animrate);
|
||||
|
||||
// if(bUsingSights && (IsInState('Idle') || IsInState('PostFiring')) && thisAnim != 'scope_shoot_last')
|
||||
if( bAimingRifle )
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
simulated function PostBeginPlay()
|
||||
{
|
||||
super.PostBeginPlay();
|
||||
|
||||
// Get new scope detail value from KFWeapon
|
||||
KFScopeDetail = class'KFMod.KFWeapon'.default.KFScopeDetail;
|
||||
|
||||
UpdateScopeMode();
|
||||
}
|
||||
|
||||
// Handles initializing and swithing between different scope modes
|
||||
simulated function UpdateScopeMode()
|
||||
{
|
||||
if (Level.NetMode != NM_DedicatedServer && Instigator != none && Instigator.IsLocallyControlled() &&
|
||||
Instigator.IsHumanControlled() )
|
||||
{
|
||||
if( KFScopeDetail == KF_ModelScope )
|
||||
{
|
||||
scopePortalFOV = default.scopePortalFOV;
|
||||
ZoomedDisplayFOV = default.ZoomedDisplayFOV;
|
||||
//bPlayerFOVZooms = false;
|
||||
if (bUsingSights)
|
||||
{
|
||||
PlayerViewOffset = XoffsetScoped;
|
||||
}
|
||||
|
||||
if( ScopeScriptedTexture == none )
|
||||
{
|
||||
ScopeScriptedTexture = ScriptedTexture(Level.ObjectPool.AllocateObject(class'ScriptedTexture'));
|
||||
}
|
||||
|
||||
ScopeScriptedTexture.FallBackMaterial = ScriptedTextureFallback;
|
||||
ScopeScriptedTexture.SetSize(512,512);
|
||||
ScopeScriptedTexture.Client = Self;
|
||||
|
||||
|
||||
if( ScriptedScopeCombiner == none )
|
||||
{
|
||||
// Construct the Combiner
|
||||
ScriptedScopeCombiner = Combiner(Level.ObjectPool.AllocateObject(class'Combiner'));
|
||||
ScriptedScopeCombiner.Material1 = CrosshairTex;
|
||||
ScriptedScopeCombiner.FallbackMaterial = Shader'ScopeShaders.Zoomblur.LensShader';
|
||||
ScriptedScopeCombiner.CombineOperation = CO_Multiply;
|
||||
ScriptedScopeCombiner.AlphaOperation = AO_Use_Mask;
|
||||
ScriptedScopeCombiner.Material2 = ScopeScriptedTexture;
|
||||
}
|
||||
|
||||
if( ScopeScriptedShader == none )
|
||||
{
|
||||
// Construct the scope shader
|
||||
ScopeScriptedShader = Shader(Level.ObjectPool.AllocateObject(class'Shader'));
|
||||
ScopeScriptedShader.Diffuse = ScriptedScopeCombiner;
|
||||
ScopeScriptedShader.SelfIllumination = ScriptedScopeCombiner;
|
||||
ScopeScriptedShader.FallbackMaterial = Shader'ScopeShaders.Zoomblur.LensShader';
|
||||
}
|
||||
|
||||
bInitializedScope = true;
|
||||
}
|
||||
else if( KFScopeDetail == KF_ModelScopeHigh )
|
||||
{
|
||||
scopePortalFOV = scopePortalFOVHigh;
|
||||
ZoomedDisplayFOV = default.ZoomedDisplayFOVHigh;
|
||||
//bPlayerFOVZooms = false;
|
||||
if (bUsingSights)
|
||||
{
|
||||
PlayerViewOffset = XoffsetHighDetail;
|
||||
}
|
||||
|
||||
if( ScopeScriptedTexture == none )
|
||||
{
|
||||
ScopeScriptedTexture = ScriptedTexture(Level.ObjectPool.AllocateObject(class'ScriptedTexture'));
|
||||
}
|
||||
ScopeScriptedTexture.FallBackMaterial = ScriptedTextureFallback;
|
||||
ScopeScriptedTexture.SetSize(512,512);
|
||||
ScopeScriptedTexture.Client = Self;
|
||||
|
||||
if( ScriptedScopeCombiner == none )
|
||||
{
|
||||
// Construct the Combiner
|
||||
ScriptedScopeCombiner = Combiner(Level.ObjectPool.AllocateObject(class'Combiner'));
|
||||
ScriptedScopeCombiner.Material1 = CrosshairTex;
|
||||
ScriptedScopeCombiner.FallbackMaterial = Shader'ScopeShaders.Zoomblur.LensShader';
|
||||
ScriptedScopeCombiner.CombineOperation = CO_Multiply;
|
||||
ScriptedScopeCombiner.AlphaOperation = AO_Use_Mask;
|
||||
ScriptedScopeCombiner.Material2 = ScopeScriptedTexture;
|
||||
}
|
||||
|
||||
if( ScopeScriptedShader == none )
|
||||
{
|
||||
// Construct the scope shader
|
||||
ScopeScriptedShader = Shader(Level.ObjectPool.AllocateObject(class'Shader'));
|
||||
ScopeScriptedShader.Diffuse = ScriptedScopeCombiner;
|
||||
ScopeScriptedShader.SelfIllumination = ScriptedScopeCombiner;
|
||||
ScopeScriptedShader.FallbackMaterial = Shader'ScopeShaders.Zoomblur.LensShader';
|
||||
}
|
||||
|
||||
bInitializedScope = true;
|
||||
}
|
||||
else if (KFScopeDetail == KF_TextureScope)
|
||||
{
|
||||
ZoomedDisplayFOV = default.ZoomedDisplayFOV;
|
||||
PlayerViewOffset.X = default.PlayerViewOffset.X;
|
||||
//bPlayerFOVZooms = true;
|
||||
|
||||
bInitializedScope = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
simulated event RenderTexture(ScriptedTexture Tex)
|
||||
{
|
||||
local rotator RollMod;
|
||||
|
||||
RollMod = Instigator.GetViewRotation();
|
||||
//RollMod.Roll -= 16384;
|
||||
|
||||
// Rpawn = ROPawn(Instigator);
|
||||
// // Subtract roll from view while leaning - Ramm
|
||||
// if (Rpawn != none && rpawn.LeanAmount != 0)
|
||||
// {
|
||||
// RollMod.Roll += rpawn.LeanAmount;
|
||||
// }
|
||||
|
||||
if(Owner != none && Instigator != none && Tex != none && Tex.Client != none)
|
||||
Tex.DrawPortal(0,0,Tex.USize,Tex.VSize,Owner,(Instigator.Location + Instigator.EyePosition()), RollMod, scopePortalFOV );
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Handles all the functionality for zooming in including
|
||||
* setting the parameters for the weapon, pawn, and playercontroller
|
||||
*
|
||||
* @param bAnimateTransition whether or not to animate this zoom transition
|
||||
*/
|
||||
simulated function ZoomIn(bool bAnimateTransition)
|
||||
{
|
||||
super(BaseKFWeapon).ZoomIn(bAnimateTransition);
|
||||
|
||||
bAimingRifle = True;
|
||||
|
||||
if( KFHumanPawn(Instigator)!=None )
|
||||
KFHumanPawn(Instigator).SetAiming(True);
|
||||
|
||||
if( Level.NetMode != NM_DedicatedServer && KFPlayerController(Instigator.Controller) != none )
|
||||
{
|
||||
if( AimInSound != none )
|
||||
{
|
||||
PlayOwnedSound(AimInSound, SLOT_Interact,,,,, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles all the functionality for zooming out including
|
||||
* setting the parameters for the weapon, pawn, and playercontroller
|
||||
*
|
||||
* @param bAnimateTransition whether or not to animate this zoom transition
|
||||
*/
|
||||
simulated function ZoomOut(bool bAnimateTransition)
|
||||
{
|
||||
super.ZoomOut(bAnimateTransition);
|
||||
|
||||
bAimingRifle = False;
|
||||
|
||||
if( KFHumanPawn(Instigator)!=None )
|
||||
KFHumanPawn(Instigator).SetAiming(False);
|
||||
|
||||
if( Level.NetMode != NM_DedicatedServer && KFPlayerController(Instigator.Controller) != none )
|
||||
{
|
||||
if( AimOutSound != none )
|
||||
{
|
||||
PlayOwnedSound(AimOutSound, SLOT_Interact,,,,, false);
|
||||
}
|
||||
KFPlayerController(Instigator.Controller).TransitionFOV(KFPlayerController(Instigator.Controller).DefaultFOV,0.0);
|
||||
}
|
||||
}
|
||||
|
||||
simulated function WeaponTick(float dt)
|
||||
{
|
||||
super.WeaponTick(dt);
|
||||
|
||||
if( bAimingRifle && ForceZoomOutTime > 0 && Level.TimeSeconds - ForceZoomOutTime > 0 )
|
||||
{
|
||||
ForceZoomOutTime = 0;
|
||||
|
||||
ZoomOut(false);
|
||||
|
||||
if( Role < ROLE_Authority)
|
||||
ServerZoomOut(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 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();
|
||||
}
|
||||
}
|
||||
|
||||
if( Level.NetMode != NM_DedicatedServer && KFPlayerController(Instigator.Controller) != none &&
|
||||
KFScopeDetail == KF_TextureScope )
|
||||
{
|
||||
KFPlayerController(Instigator.Controller).TransitionFOV(PlayerIronSightFOV,0.0);
|
||||
}
|
||||
}
|
||||
|
||||
simulated function bool CanZoomNow()
|
||||
{
|
||||
Return (!FireMode[0].bIsFiring && Instigator!=None && Instigator.Physics!=PHYS_Falling);
|
||||
}
|
||||
|
||||
simulated event RenderOverlays(Canvas Canvas)
|
||||
{
|
||||
local int m;
|
||||
local PlayerController PC;
|
||||
|
||||
if (Instigator == None)
|
||||
return;
|
||||
|
||||
// Lets avoid having to do multiple casts every tick - Ramm
|
||||
PC = PlayerController(Instigator.Controller);
|
||||
|
||||
if(PC == None)
|
||||
return;
|
||||
|
||||
if(!bInitializedScope && PC != none )
|
||||
{
|
||||
UpdateScopeMode();
|
||||
}
|
||||
|
||||
// draw muzzleflashes/smoke for all fire modes so idle state won't
|
||||
// cause emitters to just disappear
|
||||
Canvas.DrawActor(None, false, true); // amb: Clear the z-buffer here
|
||||
|
||||
for (m = 0; m < NUM_FIRE_MODES; m++)
|
||||
{
|
||||
if (FireMode[m] != None)
|
||||
{
|
||||
FireMode[m].DrawMuzzleFlash(Canvas);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
SetLocation( Instigator.Location + Instigator.CalcDrawOffset(self) );
|
||||
SetRotation( Instigator.GetViewRotation() + ZoomRotInterp);
|
||||
|
||||
PreDrawFPWeapon(); // Laurent -- Hook to override things before render (like rotation if using a staticmesh)
|
||||
|
||||
if(bAimingRifle && PC != none && (KFScopeDetail == KF_ModelScope || KFScopeDetail == KF_ModelScopeHigh))
|
||||
{
|
||||
if (ShouldDrawPortal())
|
||||
{
|
||||
if ( ScopeScriptedTexture != none )
|
||||
{
|
||||
Skins[LenseMaterialID] = ScopeScriptedShader;
|
||||
ScopeScriptedTexture.Client = Self; // Need this because this can get corrupted - Ramm
|
||||
ScopeScriptedTexture.Revision = (ScopeScriptedTexture.Revision +1);
|
||||
}
|
||||
}
|
||||
|
||||
bDrawingFirstPerson = true;
|
||||
Canvas.DrawBoundActor(self, false, false,DisplayFOV,PC.Rotation,rot(0,0,0),Instigator.CalcZoomedDrawOffset(self));
|
||||
bDrawingFirstPerson = false;
|
||||
}
|
||||
// Added "bInIronViewCheck here. Hopefully it prevents us getting the scope overlay when not zoomed.
|
||||
// Its a bit of a band-aid solution, but it will work til we get to the root of the problem - Ramm 08/12/04
|
||||
else if( KFScopeDetail == KF_TextureScope && PC.DesiredFOV == PlayerIronSightFOV && bAimingRifle)
|
||||
{
|
||||
Skins[LenseMaterialID] = ScriptedTextureFallback;
|
||||
|
||||
SetZoomBlendColor(Canvas);
|
||||
|
||||
//Black-out either side of the main zoom circle.
|
||||
Canvas.Style = ERenderStyle.STY_Normal;
|
||||
Canvas.SetPos(0, 0);
|
||||
Canvas.DrawTile(ZoomMat, (Canvas.SizeX - Canvas.SizeY) / 2, Canvas.SizeY, 0.0, 0.0, 8, 8);
|
||||
Canvas.SetPos(Canvas.SizeX, 0);
|
||||
Canvas.DrawTile(ZoomMat, -(Canvas.SizeX - Canvas.SizeY) / 2, Canvas.SizeY, 0.0, 0.0, 8, 8);
|
||||
|
||||
//The view through the scope itself.
|
||||
Canvas.Style = 255;
|
||||
Canvas.SetPos((Canvas.SizeX - Canvas.SizeY) / 2,0);
|
||||
Canvas.DrawTile(ZoomMat, Canvas.SizeY, Canvas.SizeY, 0.0, 0.0, 512, 512);
|
||||
|
||||
//Draw some useful text.
|
||||
Canvas.Font = Canvas.MedFont;
|
||||
Canvas.SetDrawColor(200,150,0);
|
||||
|
||||
Canvas.SetPos(Canvas.SizeX * 0.16, Canvas.SizeY * 0.43);
|
||||
Canvas.DrawText(" "); //Canvas.DrawText("Zoom: 2.50");
|
||||
|
||||
Canvas.SetPos(Canvas.SizeX * 0.16, Canvas.SizeY * 0.47);
|
||||
}
|
||||
else
|
||||
{
|
||||
Skins[LenseMaterialID] = ScriptedTextureFallback;
|
||||
bDrawingFirstPerson = true;
|
||||
Canvas.DrawActor(self, false, false, DisplayFOV);
|
||||
bDrawingFirstPerson = false;
|
||||
}
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
// Scopes
|
||||
//=============================================================================
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// SetScopeDetail(RO) - Allow the players to change scope detail while ingame.
|
||||
// Changes are saved to the ini file.
|
||||
//------------------------------------------------------------------------------
|
||||
//simulated exec function SetScopeDetail()
|
||||
//{
|
||||
// if( !bHasScope )
|
||||
// return;
|
||||
//
|
||||
// if (KFScopeDetail == KF_ModelScope)
|
||||
// KFScopeDetail = KF_TextureScope;
|
||||
// else if ( KFScopeDetail == KF_TextureScope)
|
||||
// KFScopeDetail = KF_ModelScopeHigh;
|
||||
// else if ( KFScopeDetail == KF_ModelScopeHigh)
|
||||
// KFScopeDetail = KF_ModelScope;
|
||||
//
|
||||
// AdjustIngameScope();
|
||||
// class'KFMod.KFWeapon'.default.KFScopeDetail = KFScopeDetail;
|
||||
// class'KFMod.KFWeapon'.static.StaticSaveConfig(); // saves the new scope detail value to the ini
|
||||
//}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// AdjustIngameScope(RO) - Takes the changes to the ScopeDetail variable and
|
||||
// sets the scope to the new detail mode. Called when the player switches the
|
||||
// scope setting ingame, or when the scope setting is changed from the menu
|
||||
//------------------------------------------------------------------------------
|
||||
simulated function AdjustIngameScope()
|
||||
{
|
||||
local PlayerController PC;
|
||||
|
||||
// Lets avoid having to do multiple casts every tick - Ramm
|
||||
PC = PlayerController(Instigator.Controller);
|
||||
|
||||
if( !bHasScope )
|
||||
return;
|
||||
|
||||
switch (KFScopeDetail)
|
||||
{
|
||||
case KF_ModelScope:
|
||||
if( bAimingRifle )
|
||||
DisplayFOV = default.ZoomedDisplayFOV;
|
||||
if ( PC.DesiredFOV == PlayerIronSightFOV && bAimingRifle )
|
||||
{
|
||||
if( Level.NetMode != NM_DedicatedServer && KFPlayerController(Instigator.Controller) != none )
|
||||
{
|
||||
KFPlayerController(Instigator.Controller).TransitionFOV(KFPlayerController(Instigator.Controller).DefaultFOV,0.0);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case KF_TextureScope:
|
||||
if( bAimingRifle )
|
||||
DisplayFOV = default.ZoomedDisplayFOV;
|
||||
if ( bAimingRifle && PC.DesiredFOV != PlayerIronSightFOV )
|
||||
{
|
||||
if( Level.NetMode != NM_DedicatedServer && KFPlayerController(Instigator.Controller) != none )
|
||||
{
|
||||
KFPlayerController(Instigator.Controller).TransitionFOV(PlayerIronSightFOV,0.0);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case KF_ModelScopeHigh:
|
||||
if( bAimingRifle )
|
||||
{
|
||||
if( ZoomedDisplayFOVHigh > 0 )
|
||||
DisplayFOV = default.ZoomedDisplayFOVHigh;
|
||||
else
|
||||
DisplayFOV = default.ZoomedDisplayFOV;
|
||||
}
|
||||
if ( bAimingRifle && PC.DesiredFOV == PlayerIronSightFOV )
|
||||
{
|
||||
if( Level.NetMode != NM_DedicatedServer && KFPlayerController(Instigator.Controller) != none )
|
||||
{
|
||||
KFPlayerController(Instigator.Controller).TransitionFOV(KFPlayerController(Instigator.Controller).DefaultFOV,0.0);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// Make any chagned to the scope setup
|
||||
UpdateScopeMode();
|
||||
}
|
||||
|
||||
simulated event Destroyed()
|
||||
{
|
||||
if (ScopeScriptedTexture != None)
|
||||
{
|
||||
ScopeScriptedTexture.Client = None;
|
||||
Level.ObjectPool.FreeObject(ScopeScriptedTexture);
|
||||
ScopeScriptedTexture=None;
|
||||
}
|
||||
|
||||
if (ScriptedScopeCombiner != None)
|
||||
{
|
||||
ScriptedScopeCombiner.Material2 = none;
|
||||
Level.ObjectPool.FreeObject(ScriptedScopeCombiner);
|
||||
ScriptedScopeCombiner = none;
|
||||
}
|
||||
|
||||
if (ScopeScriptedShader != None)
|
||||
{
|
||||
ScopeScriptedShader.Diffuse = none;
|
||||
ScopeScriptedShader.SelfIllumination = none;
|
||||
Level.ObjectPool.FreeObject(ScopeScriptedShader);
|
||||
ScopeScriptedShader = none;
|
||||
}
|
||||
|
||||
Super.Destroyed();
|
||||
}
|
||||
|
||||
simulated function PreTravelCleanUp()
|
||||
{
|
||||
if (ScopeScriptedTexture != None)
|
||||
{
|
||||
ScopeScriptedTexture.Client = None;
|
||||
Level.ObjectPool.FreeObject(ScopeScriptedTexture);
|
||||
ScopeScriptedTexture=None;
|
||||
}
|
||||
|
||||
if (ScriptedScopeCombiner != None)
|
||||
{
|
||||
ScriptedScopeCombiner.Material2 = none;
|
||||
Level.ObjectPool.FreeObject(ScriptedScopeCombiner);
|
||||
ScriptedScopeCombiner = none;
|
||||
}
|
||||
|
||||
if (ScopeScriptedShader != None)
|
||||
{
|
||||
ScopeScriptedShader.Diffuse = none;
|
||||
ScopeScriptedShader.SelfIllumination = none;
|
||||
Level.ObjectPool.FreeObject(ScopeScriptedShader);
|
||||
ScopeScriptedShader = none;
|
||||
}
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
lenseMaterialID=8
|
||||
scopePortalFOVHigh=13.000000
|
||||
scopePortalFOV=13.000000
|
||||
ZoomMatRef="HMG_T.SA80.SA80crosshairs_FB"
|
||||
ScriptedTextureFallbackRef="HMG_T.SA80.alpha_lens_64x64"
|
||||
CrosshairTexRef="HMG_T.SA80.SA80crosshairs"
|
||||
bHasScope=True
|
||||
ZoomedDisplayFOVHigh=50.000000
|
||||
MagCapacity=60
|
||||
ReloadRate=3.500000
|
||||
ReloadAnim="Reload"
|
||||
ReloadAnimRate=1.000000
|
||||
WeaponReloadAnim="Reload_BullPup"
|
||||
Weight=11.000000
|
||||
bHasAimingMode=True
|
||||
IdleAimAnim="Iron_Idle"
|
||||
StandardDisplayFOV=65.000000
|
||||
bModeZeroCanDryFire=True
|
||||
TraderInfoTexture=Texture'HMG_T.SA80.SA80LSW_Trader'
|
||||
MeshRef="HMG_A.SA80LSW_mesh"
|
||||
SkinRefs(0)="HMG_T.SA80.SA80LSW_1"
|
||||
SkinRefs(1)="KF_Weapons3_Trip_T.hands.Priest_Hands_1st_P"
|
||||
SkinRefs(2)="HMG_T.SA80.SA80LSW_2"
|
||||
SkinRefs(3)="HMG_T.SA80.SA80LSW_3"
|
||||
SkinRefs(4)="HMG_T.SA80.SA80LSW_4"
|
||||
SkinRefs(5)="HMG_T.SA80.SA80LSW_5"
|
||||
SkinRefs(6)="HMG_T.SA80.SA80LSW_6"
|
||||
SkinRefs(7)="KF_Weapons_Trip_T.Rifles.CBLens_cmb"
|
||||
SkinRefs(8)="HMG_T.SA80.alpha_lens_64x64"
|
||||
SelectSoundRef="HMG_S.SA80.SA80LSW_select"
|
||||
HudImageRef="HMG_T.SA80.SA80LSW_Unselected"
|
||||
SelectedHudImageRef="HMG_T.SA80.SA80LSW_selected"
|
||||
PlayerIronSightFOV=32.000000
|
||||
ZoomedDisplayFOV=50.000000
|
||||
FireModeClass(0)=Class'ScrnHMG.SA80LSWFire'
|
||||
FireModeClass(1)=Class'KFMod.NoFire'
|
||||
PutDownAnim="PutDown"
|
||||
SelectForce="SwitchToAssaultRifle"
|
||||
AIRating=0.650000
|
||||
CurrentRating=0.650000
|
||||
Description="The SA80 (Small Arms for the 1980s) is a British family of 5.56mm small arms. It is a selective fire, gas-operated assault rifle. Elements of its design, in particular the bullpup configuration, come from the earlier EM-2 rifle."
|
||||
DisplayFOV=65.000000
|
||||
Priority=100
|
||||
CustomCrosshair=11
|
||||
CustomCrossHairTextureName="Crosshairs.HUD.Crosshair_Cross5"
|
||||
InventoryGroup=3
|
||||
GroupOffset=3
|
||||
PickupClass=Class'ScrnHMG.SA80LSWPickup'
|
||||
PlayerViewOffset=(X=20.000000,Y=10.000000,Z=-2.000000)
|
||||
BobDamping=5.000000
|
||||
AttachmentClass=Class'ScrnHMG.SA80LSWAttachment'
|
||||
IconCoords=(X1=253,Y1=146,X2=333,Y2=181)
|
||||
ItemName="SA80 LSW SE"
|
||||
}
|
||||
12
kf_sources/ScrnHMG/Classes/SA80LSWAmmo.uc
Normal file
12
kf_sources/ScrnHMG/Classes/SA80LSWAmmo.uc
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
class SA80LSWAmmo extends KFAmmunition;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoPickupAmount=60
|
||||
MaxAmmo=480
|
||||
InitialAmount=240
|
||||
PickupClass=Class'ScrnHMG.SA80LSWAmmoPickup'
|
||||
IconMaterial=Texture'KillingFloorHUD.Generic.HUD'
|
||||
IconCoords=(X1=336,Y1=82,X2=382,Y2=125)
|
||||
ItemName="5.56x45"
|
||||
}
|
||||
9
kf_sources/ScrnHMG/Classes/SA80LSWAmmoPickup.uc
Normal file
9
kf_sources/ScrnHMG/Classes/SA80LSWAmmoPickup.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
class SA80LSWAmmoPickup extends KFAmmoPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoAmount=60
|
||||
InventoryType=Class'ScrnHMG.SA80LSWAmmo'
|
||||
PickupMessage="5.56x45"
|
||||
StaticMesh=StaticMesh'KillingFloorStatics.L85Ammo'
|
||||
}
|
||||
57
kf_sources/ScrnHMG/Classes/SA80LSWAttachment.uc
Normal file
57
kf_sources/ScrnHMG/Classes/SA80LSWAttachment.uc
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
class SA80LSWAttachment extends KFWeaponAttachment;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
mMuzFlashClass=Class'ROEffects.MuzzleFlash3rdMP'
|
||||
mTracerClass=Class'KFMod.KFNewTracer'
|
||||
mShellCaseEmitterClass=Class'KFMod.KFShellSpewer'
|
||||
MovementAnims(0)="JogF_AK47"
|
||||
MovementAnims(1)="JogB_AK47"
|
||||
MovementAnims(2)="JogL_AK47"
|
||||
MovementAnims(3)="JogR_AK47"
|
||||
TurnLeftAnim="TurnL_AK47"
|
||||
TurnRightAnim="TurnR_AK47"
|
||||
CrouchAnims(0)="CHWalkF_AK47"
|
||||
CrouchAnims(1)="CHWalkB_AK47"
|
||||
CrouchAnims(2)="CHWalkL_AK47"
|
||||
CrouchAnims(3)="CHWalkR_AK47"
|
||||
WalkAnims(0)="WalkF_AK47"
|
||||
WalkAnims(1)="WalkB_AK47"
|
||||
WalkAnims(2)="WalkL_AK47"
|
||||
WalkAnims(3)="WalkR_AK47"
|
||||
CrouchTurnRightAnim="CH_TurnR_AK47"
|
||||
CrouchTurnLeftAnim="CH_TurnL_AK47"
|
||||
IdleCrouchAnim="CHIdle_AK47"
|
||||
IdleWeaponAnim="Idle_AK47"
|
||||
IdleRestAnim="Idle_AK47"
|
||||
IdleChatAnim="Idle_AK47"
|
||||
IdleHeavyAnim="Idle_AK47"
|
||||
IdleRifleAnim="Idle_AK47"
|
||||
FireAnims(0)="Fire_AK47"
|
||||
FireAnims(1)="Fire_AK47"
|
||||
FireAnims(2)="Fire_AK47"
|
||||
FireAnims(3)="Fire_AK47"
|
||||
FireAltAnims(0)="Fire_AK47"
|
||||
FireAltAnims(1)="Fire_AK47"
|
||||
FireAltAnims(2)="Fire_AK47"
|
||||
FireAltAnims(3)="Fire_AK47"
|
||||
FireCrouchAnims(0)="CHFire_AK47"
|
||||
FireCrouchAnims(1)="CHFire_AK47"
|
||||
FireCrouchAnims(2)="CHFire_AK47"
|
||||
FireCrouchAnims(3)="CHFire_AK47"
|
||||
FireCrouchAltAnims(0)="CHFire_AK47"
|
||||
FireCrouchAltAnims(1)="CHFire_AK47"
|
||||
FireCrouchAltAnims(2)="CHFire_AK47"
|
||||
FireCrouchAltAnims(3)="CHFire_AK47"
|
||||
HitAnims(0)="HitF_AK47"
|
||||
HitAnims(1)="HitB_AK47"
|
||||
HitAnims(2)="HitL_AK47"
|
||||
HitAnims(3)="HitR_AK47"
|
||||
PostFireBlendStandAnim="Blend_AK47"
|
||||
PostFireBlendCrouchAnim="CHBlend_AK47"
|
||||
bHeavy=True
|
||||
SplashEffect=Class'ROEffects.BulletSplashEmitter'
|
||||
CullDistance=5000.000000
|
||||
Mesh=SkeletalMesh'HMG_A.SA80LSW_3rd'
|
||||
DrawScale=1.100000
|
||||
}
|
||||
41
kf_sources/ScrnHMG/Classes/SA80LSWFire.uc
Normal file
41
kf_sources/ScrnHMG/Classes/SA80LSWFire.uc
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
//=============================================================================
|
||||
//L86A1 Fire
|
||||
//=============================================================================
|
||||
class SA80LSWFire extends KFFire;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
FireAimedAnim="Iron_Idle"
|
||||
RecoilRate=0.050000
|
||||
maxVerticalRecoilAngle=300
|
||||
maxHorizontalRecoilAngle=100
|
||||
ShellEjectClass=Class'ROEffects.KFShellEjectBullpup'
|
||||
ShellEjectBoneName="Shell_eject"
|
||||
bAccuracyBonusForSemiAuto=True
|
||||
FireSoundRef="HMG_S.SA80.SA80LSW_shot"
|
||||
StereoFireSoundRef="HMG_S.SA80.SA80LSW_shot"
|
||||
NoAmmoSoundRef="HMG_S.SA80.SA80LSW_empty"
|
||||
DamageType=Class'ScrnHMG.DamTypeSA80LSW'
|
||||
DamageMin=42
|
||||
DamageMax=42
|
||||
Momentum=12500.000000
|
||||
bPawnRapidFireAnim=True
|
||||
TransientSoundVolume=1.800000
|
||||
FireLoopAnim="Fire"
|
||||
TweenTime=0.025000
|
||||
FireForce="AssaultRifleFire"
|
||||
FireRate=0.100000
|
||||
AmmoClass=Class'ScrnHMG.SA80LSWAmmo'
|
||||
AmmoPerFire=1
|
||||
ShakeRotMag=(X=75.000000,Y=75.000000,Z=250.000000)
|
||||
ShakeRotRate=(X=10000.000000,Y=10000.000000,Z=10000.000000)
|
||||
ShakeRotTime=0.500000
|
||||
ShakeOffsetMag=(X=6.000000,Y=3.000000,Z=10.000000)
|
||||
ShakeOffsetRate=(X=1000.000000,Y=1000.000000,Z=1000.000000)
|
||||
ShakeOffsetTime=1.000000
|
||||
BotRefireRate=0.990000
|
||||
FlashEmitterClass=Class'ROEffects.MuzzleFlash1stSTG'
|
||||
aimerror=42.000000
|
||||
Spread=0.008500
|
||||
SpreadStyle=SS_Random
|
||||
}
|
||||
26
kf_sources/ScrnHMG/Classes/SA80LSWPickup.uc
Normal file
26
kf_sources/ScrnHMG/Classes/SA80LSWPickup.uc
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
class SA80LSWPickup extends KFWeaponPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Weight=11.000000
|
||||
cost=1000
|
||||
AmmoCost=15
|
||||
BuyClipSize=75
|
||||
PowerValue=41
|
||||
SpeedValue=60
|
||||
RangeValue=60
|
||||
Description="The SA80 (Small Arms for the 1980s) is a British family of 5.56mm small arms. It is a selective fire, gas-operated assault rifle. Elements of its design, in particular the bullpup configuration, come from the earlier EM-2 rifle."
|
||||
ItemName="SA80 LSW SE"
|
||||
ItemShortName="SA80 LSW"
|
||||
AmmoItemName="Rounds 5.56x45"
|
||||
CorrespondingPerkIndex=10
|
||||
EquipmentCategoryID=2
|
||||
InventoryType=Class'ScrnHMG.SA80LSW'
|
||||
PickupMessage="You picked up the SA80 LSW"
|
||||
PickupSound=Sound'HMG_S.SA80.SA80LSW_pickup'
|
||||
PickupForce="AssaultRiflePickup"
|
||||
StaticMesh=StaticMesh'HMG_A.SA80LSW_st'
|
||||
DrawScale=1.500000
|
||||
CollisionRadius=30.000000
|
||||
CollisionHeight=5.000000
|
||||
}
|
||||
159
kf_sources/ScrnHMG/Classes/ScrnVetHeavyMG.uc
Normal file
159
kf_sources/ScrnHMG/Classes/ScrnVetHeavyMG.uc
Normal file
|
|
@ -0,0 +1,159 @@
|
|||
// Inheriting from ScrnVeterancyTypes will include all scrn features -- PooSH
|
||||
class ScrnVetHeavyMG extends ScrnVeterancyTypes
|
||||
abstract;
|
||||
|
||||
/* General tips for making perks ScrN-compatible:
|
||||
- ScrnBalanceSrv must be added to EditPackages in KillingFloor.ini
|
||||
- Replaced all KFPRI.ClientVeteranSkillLevel with GetClientVeteranSkillLevel(KFPRI)
|
||||
- GetMagCapacityMod() replaced with GetMagCapacityModStatic()
|
||||
- GetReloadSpeedModifier() replaced with GetReloadSpeedModifierStatic()
|
||||
- GetFireSpeedMod() replaced with GetFireSpeedModStatic()
|
||||
- Added ClassIsInArray() calls to support PerkedWeapons
|
||||
- Removed AddDefaultInventory() to support SpawnInventory
|
||||
*/
|
||||
|
||||
|
||||
// returns perk specific stat values
|
||||
static function int GetStatValueInt(ClientPerkRepLink StatOther, byte ReqNum)
|
||||
{
|
||||
return StatOther.GetCustomValueInt(Class'BruteGunnerPerkProg');
|
||||
}
|
||||
|
||||
static function AddCustomStats( ClientPerkRepLink Other )
|
||||
{
|
||||
super.AddCustomStats(Other); //init achievements
|
||||
|
||||
Other.AddCustomValue(Class'BruteGunnerPerkProg');
|
||||
}
|
||||
|
||||
|
||||
static function int AddDamage(KFPlayerReplicationInfo KFPRI, KFMonster Injured, KFPawn DamageTaker, int InDamage, class<DamageType> DmgType)
|
||||
{
|
||||
if ( DmgType == default.DefaultDamageTypeNoBonus )
|
||||
return InDamage;
|
||||
|
||||
if ( ClassIsChildOf(DmgType, default.DefaultDamageType)
|
||||
|| ClassIsInArray(default.PerkedDamTypes, DmgType) // check damage type list of custom weapons
|
||||
)
|
||||
{
|
||||
// 30% base bonus + 5% per level
|
||||
InDamage *= 1.30 + 0.05 * GetClientVeteranSkillLevel(KFPRI);
|
||||
}
|
||||
|
||||
return InDamage;
|
||||
}
|
||||
|
||||
static function int AddCarryMaxWeight(KFPlayerReplicationInfo KFPRI)
|
||||
{
|
||||
return 10;
|
||||
}
|
||||
|
||||
static function float AddExtraAmmoFor(KFPlayerReplicationInfo KFPRI, Class<Ammunition> AmmoType)
|
||||
{
|
||||
if ( AmmoType == Class'ScrnHMG.AK47HAmmo'
|
||||
|| AmmoType == Class'ScrnHMG.SA80LSWAmmo'
|
||||
|| AmmoType == Class'ScrnHMG.RPK47Ammo'
|
||||
|| AmmoType == Class'ScrnHMG.PKMAmmo'
|
||||
|| AmmoType == Class'ScrnHMG.M249Ammo'
|
||||
|| AmmoType == Class'ScrnHMG.M41AAmmo'
|
||||
|| AmmoType == Class'ScrnHMG.ChainGunAmmo'
|
||||
|| AmmoType == Class'ScrnHMG.AUG_A1ARAmmo'
|
||||
|| AmmoType == Class'ScrnHMG.StingerAmmo'
|
||||
|| AmmoType == Class'ScrnHMG.XMV850Ammo'
|
||||
|| AmmoType == Class'ScrnHMG.ThompsonHAmmo'
|
||||
|| ClassIsInArray(default.PerkedAmmo, AmmoType) )
|
||||
{
|
||||
return 1.4 + 0.10 * GetClientVeteranSkillLevel(KFPRI);
|
||||
}
|
||||
return 1.0;
|
||||
}
|
||||
|
||||
static function float GetMagCapacityModStatic(KFPlayerReplicationInfo KFPRI, class<KFWeapon> Other)
|
||||
{
|
||||
return AddExtraAmmoFor(KFPRI, Other.default.FiremodeClass[0].default.AmmoClass);
|
||||
}
|
||||
|
||||
static function float GetAmmoPickupMod(KFPlayerReplicationInfo KFPRI, KFAmmunition Other)
|
||||
{
|
||||
return AddExtraAmmoFor(KFPRI, Other.class);
|
||||
}
|
||||
|
||||
static function float ModifyRecoilSpread(KFPlayerReplicationInfo KFPRI, WeaponFire Other, out float Recoil)
|
||||
{
|
||||
Recoil = 0.25;
|
||||
return Recoil;
|
||||
}
|
||||
|
||||
static function float GetMovementSpeedModifier(KFPlayerReplicationInfo KFPRI, KFGameReplicationInfo KFGRI)
|
||||
{
|
||||
return 0.90;
|
||||
}
|
||||
|
||||
static function float GetCostScaling(KFPlayerReplicationInfo KFPRI, class<Pickup> Item)
|
||||
{
|
||||
if ( Item == class'ScrnHMG.AK47HPickup'
|
||||
|| Item == class'ScrnHMG.SA80LSWPickup'
|
||||
|| Item == class'ScrnHMG.RPK47Pickup'
|
||||
|| Item == class'ScrnHMG.PKMPickup'
|
||||
|| Item == class'ScrnHMG.AUG_A1ARPickup'
|
||||
|| Item == class'ScrnHMG.M249Pickup'
|
||||
|| Item == class'ScrnHMG.M41APickup'
|
||||
|| Item == class'ScrnHMG.ChainGunPickup'
|
||||
|| Item == class'ScrnHMG.StingerPickup'
|
||||
|| Item == class'ScrnHMG.XMV850Pickup'
|
||||
|| Item == class'ScrnHMG.ThompsonHPickup'
|
||||
|| ClassIsInArray(default.PerkedPickups, Item) )
|
||||
{
|
||||
// 30% base discount + 5% extra per level
|
||||
return fmax(0.10, 0.70 - 0.05 * GetClientVeteranSkillLevel(KFPRI));
|
||||
}
|
||||
|
||||
return 1.0;
|
||||
}
|
||||
|
||||
// Give Extra Items as default
|
||||
static function AddDefaultInventory(KFPlayerReplicationInfo KFPRI, Pawn P)
|
||||
{
|
||||
if ( default.DefaultInventory.length > 0 )
|
||||
super.AddDefaultInventory(KFPRI, P); // ScrnBalance v6.10+
|
||||
else {
|
||||
// old style
|
||||
if ( GetClientVeteranSkillLevel(KFPRI) >= 6 )
|
||||
KFHumanPawn(P).CreateInventoryVeterancy("ScrnHMG.SA80LSW", GetInitialCostScaling(KFPRI, class'ScrnHMG.SA80LSWPickup'));
|
||||
else if ( GetClientVeteranSkillLevel(KFPRI) == 5 )
|
||||
KFHumanPawn(P).CreateInventoryVeterancy("ScrnHMG.AK47H", GetInitialCostScaling(KFPRI, class'ScrnHMG.AK47HPickup'));
|
||||
}
|
||||
}
|
||||
|
||||
static function string GetCustomLevelInfo( byte Level )
|
||||
{
|
||||
local string S;
|
||||
|
||||
S = Default.CustomLevelInfo;
|
||||
ReplaceText(S,"%L",string(Level));
|
||||
ReplaceText(S,"%x",GetPercentStr(0.30 + 0.05*Level));
|
||||
ReplaceText(S,"%m",GetPercentStr(0.40 + 0.10*Level));
|
||||
ReplaceText(S,"%a",GetPercentStr(0.40 + 0.10*Level));
|
||||
ReplaceText(S,"%$",GetPercentStr(fmin(0.90, 0.30 + 0.05*Level)));
|
||||
return S;
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
DefaultDamageType=Class'ScrnHMG.DamTypeHeavy'
|
||||
DefaultDamageTypeNoBonus=Class'ScrnHMG.DamTypeHeavyBase'
|
||||
OnHUDIcons(0)=(PerkIcon=Texture'ScrnTex.Perks.Perk_HMG_Gray',StarIcon=Texture'ScrnTex.Perks.Hud_Perk_Star_Gray',DrawColor=(B=255,G=255,R=255,A=255))
|
||||
OnHUDIcons(1)=(PerkIcon=Texture'HMG_T.Perks.Perk_HMG_Gold',StarIcon=Texture'KillingFloor2HUD.Perk_Icons.Hud_Perk_Star_Gold',DrawColor=(B=255,G=255,R=255,A=255))
|
||||
OnHUDIcons(2)=(PerkIcon=Texture'HMG_T.Perks.Perk_HMG_Green',StarIcon=Texture'ScrnTex.Perks.Hud_Perk_Star_Green',DrawColor=(B=255,G=255,R=255,A=255))
|
||||
OnHUDIcons(3)=(PerkIcon=Texture'HMG_T.Perks.Perk_HMG_Blue',StarIcon=Texture'ScrnTex.Perks.Hud_Perk_Star_Blue',DrawColor=(B=255,G=255,R=255,A=255))
|
||||
OnHUDIcons(4)=(PerkIcon=Texture'HMG_T.Perks.Perk_HMG_Purple',StarIcon=Texture'ScrnTex.Perks.Hud_Perk_Star_Purple',DrawColor=(B=255,G=255,R=255,A=255))
|
||||
OnHUDIcons(5)=(PerkIcon=Texture'HMG_T.Perks.Perk_HMG_Orange',StarIcon=Texture'ScrnTex.Perks.Hud_Perk_Star_Orange',DrawColor=(B=255,G=255,R=255,A=255))
|
||||
OnHUDIcons(6)=(PerkIcon=Texture'ScrnTex.Perks.Perk_HMG_Blood',StarIcon=Texture'ScrnTex.Perks.Hud_Perk_Star_Blood',DrawColor=(B=255,G=255,R=255,A=255))
|
||||
SkillInfo="PERK SKILLS (HMg v4.00):|75% less recoil with all guns|10 extra weight slots|10% slower movement"
|
||||
CustomLevelInfo="PERK BONUSES (LEVEL %L):|%x more damage with Heavy Guns|%m larger Heavy Gun clips|%a extra Heavy ammo|%$ discount on Heavy Huns"
|
||||
PerkIndex=10
|
||||
OnHUDIcon=Texture'HMG_T.Perks.Perk_HMG'
|
||||
OnHUDGoldIcon=Texture'HMG_T.Perks.Perk_HMG_Gold'
|
||||
VeterancyName="Heavy Machinegunner"
|
||||
Requirements(0)="Deal %x damage with Heavy Guns"
|
||||
}
|
||||
318
kf_sources/ScrnHMG/Classes/Stinger.uc
Normal file
318
kf_sources/ScrnHMG/Classes/Stinger.uc
Normal file
|
|
@ -0,0 +1,318 @@
|
|||
//--------------------------------------//
|
||||
// Weapon Import to kf by Exod (erick610)//
|
||||
// Bugfixed, enhanced and balanced for HMg by [ScrN]PooSH
|
||||
//--------------------------------------//
|
||||
class Stinger extends KFWeapon
|
||||
config(user);
|
||||
|
||||
|
||||
struct AnimSeq {
|
||||
var name AnimName; // sequence name
|
||||
var float AnimRateMult; // additional animation rate multiplier (it will be mulpilied by ReloadAnimRate and ReloadBonus)
|
||||
var float TweenTime;
|
||||
var int SkipFrames; // how many frames to skip from the begining of animation. Animation ending can be skipped by limiting Duration
|
||||
var float Duration; // how long till the next animation (it will be mulpilied by ReloadAnimRate and ReloadBonus)
|
||||
|
||||
var string SoundRef; //reference to the sound that should be played
|
||||
var sound Sound; //sound that should be played during this animation
|
||||
|
||||
};
|
||||
var array<AnimSeq> ReloadAnims;
|
||||
|
||||
var float ReloadBonus; //perked reload multiplier
|
||||
var transient float NextReloadAnimTime; // time when the next part of reload animation sequence must be played
|
||||
var transient int NextReloadAnimIndex; // index of the next animation in ReloadAnims to play
|
||||
|
||||
var transient int OldMagAmmoRemaining;
|
||||
|
||||
|
||||
|
||||
static function PreloadAssets(Inventory Inv, optional bool bSkipRefCount)
|
||||
{
|
||||
local int i;
|
||||
local Stinger W;
|
||||
|
||||
super.PreloadAssets(Inv, bSkipRefCount);
|
||||
|
||||
W = Stinger(Inv);
|
||||
|
||||
for ( i = 0; i < default.ReloadAnims.Length; ++i ) {
|
||||
if ( default.ReloadAnims[i].Sound == none && default.ReloadAnims[i].SoundRef != "" )
|
||||
default.ReloadAnims[i].Sound = sound(DynamicLoadObject(default.ReloadAnims[i].SoundRef, class'sound'));
|
||||
if ( W != none ) {
|
||||
W.ReloadAnims[i].Sound = default.ReloadAnims[i].Sound;
|
||||
}
|
||||
}
|
||||
}
|
||||
static function bool UnloadAssets()
|
||||
{
|
||||
local int i;
|
||||
|
||||
for ( i = 0; i < default.ReloadAnims.Length; ++i ) {
|
||||
if ( default.ReloadAnims[i].SoundRef != "" )
|
||||
default.ReloadAnims[i].Sound = none;
|
||||
}
|
||||
|
||||
return super.UnloadAssets();
|
||||
}
|
||||
|
||||
|
||||
simulated function PostNetReceive()
|
||||
{
|
||||
super.PostNetReceive();
|
||||
|
||||
if ( Role < ROLE_Authority ) {
|
||||
if ( OldMagAmmoRemaining != MagAmmoRemaining ) {
|
||||
if ( OldMagAmmoRemaining < MagAmmoRemaining ) {
|
||||
//just reloaded
|
||||
if ( IsInState('Reloading') )
|
||||
GotoState('');
|
||||
}
|
||||
OldMagAmmoRemaining = MagAmmoRemaining;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
simulated function HandleSleeveSwapping();
|
||||
|
||||
|
||||
|
||||
simulated function bool StartFire(int Mode)
|
||||
{
|
||||
if( !super.StartFire(Mode) ) // returns false when mag is empty
|
||||
return false;
|
||||
|
||||
if( AmmoAmount(Mode) <= 0 )
|
||||
return false;
|
||||
|
||||
AnimStopLooping();
|
||||
|
||||
if( !FireMode[Mode].IsInState('FireLoop') ) {
|
||||
FireMode[Mode].StartFiring();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
simulated function AnimEnd(int channel)
|
||||
{
|
||||
local name anim;
|
||||
local float frame, rate;
|
||||
|
||||
if( !FireMode[0].IsInState('FireLoop') && !FireMode[1].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 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; // Changed from "MagAmmoRemaining--" -- PooSH
|
||||
if ( MagAmmoRemaining < 0 )
|
||||
MagAmmoRemaining = 0;
|
||||
}
|
||||
OldMagAmmoRemaining = MagAmmoRemaining;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
// since we don't have 'Tip' bone, need this hack
|
||||
simulated function vector GetEffectStart()
|
||||
{
|
||||
return super(Weapon).GetEffectStart();
|
||||
}
|
||||
|
||||
|
||||
simulated function ClientReload()
|
||||
{
|
||||
super.ClientReload();
|
||||
|
||||
GotoState('Reloading');
|
||||
}
|
||||
|
||||
|
||||
simulated state Reloading
|
||||
{
|
||||
ignores PlayIdle;
|
||||
|
||||
simulated function BeginState()
|
||||
{
|
||||
NextReloadAnimIndex = 0;
|
||||
NextReloadAnimTime = Level.TimeSeconds - 1; //play now
|
||||
|
||||
if ( KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo) != none && KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo).ClientVeteranSkill != none )
|
||||
ReloadBonus = KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo).ClientVeteranSkill.Static.GetReloadSpeedModifier(KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo), self);
|
||||
else
|
||||
ReloadBonus = 1.0;
|
||||
}
|
||||
|
||||
simulated function PlayNextSeq()
|
||||
{
|
||||
local AnimSeq seq;
|
||||
|
||||
seq = ReloadAnims[NextReloadAnimIndex];
|
||||
if ( seq.AnimName != '' ) {
|
||||
PlayAnim(seq.AnimName, seq.AnimRateMult * ReloadAnimRate * ReloadBonus, seq.TweenTime);
|
||||
if ( seq.SkipFrames > 0 )
|
||||
SetAnimFrame(seq.SkipFrames, 0 , 1);
|
||||
}
|
||||
if ( seq.Sound != none ) {
|
||||
PlaySound(seq.Sound);
|
||||
}
|
||||
NextReloadAnimTime = Level.TimeSeconds + seq.Duration * ReloadAnimRate * ReloadBonus;
|
||||
}
|
||||
|
||||
simulated function WeaponTick(float dt)
|
||||
{
|
||||
super.WeaponTick(dt);
|
||||
|
||||
if ( !bIsReloading ) {
|
||||
GotoState('');
|
||||
return;
|
||||
}
|
||||
|
||||
if ( NextReloadAnimTime <= Level.TimeSeconds && NextReloadAnimIndex < ReloadAnims.length ) {
|
||||
PlayNextSeq();
|
||||
NextReloadAnimIndex++;
|
||||
}
|
||||
}
|
||||
|
||||
simulated function ActuallyFinishReloading()
|
||||
{
|
||||
global.ActuallyFinishReloading();
|
||||
GotoState('');
|
||||
}
|
||||
}
|
||||
|
||||
exec function StingerX(int value)
|
||||
{
|
||||
StingerAttachment(ThirdPersonActor).FlashOffset.X = value;
|
||||
StingerAttachment(ThirdPersonActor).mMuzFlash3rd.Destroy();
|
||||
}
|
||||
exec function StingerY(int value)
|
||||
{
|
||||
StingerAttachment(ThirdPersonActor).FlashOffset.Y = value;
|
||||
StingerAttachment(ThirdPersonActor).mMuzFlash3rd.Destroy();
|
||||
}
|
||||
exec function StingerZ(int value)
|
||||
{
|
||||
StingerAttachment(ThirdPersonActor).FlashOffset.Z = value;
|
||||
StingerAttachment(ThirdPersonActor).mMuzFlash3rd.Destroy();
|
||||
}
|
||||
exec function StingerP(int value)
|
||||
{
|
||||
StingerAttachment(ThirdPersonActor).FlashRotationOffset.Pitch = value;
|
||||
StingerAttachment(ThirdPersonActor).mMuzFlash3rd.Destroy();
|
||||
}
|
||||
exec function StingerYaw(int value)
|
||||
{
|
||||
StingerAttachment(ThirdPersonActor).FlashRotationOffset.Yaw = value;
|
||||
StingerAttachment(ThirdPersonActor).mMuzFlash3rd.Destroy();
|
||||
}
|
||||
exec function StingerR(int value)
|
||||
{
|
||||
StingerAttachment(ThirdPersonActor).FlashRotationOffset.Roll = value;
|
||||
StingerAttachment(ThirdPersonActor).mMuzFlash3rd.Destroy();
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
ReloadAnims(0)=(AnimName="WeaponRampDown",AnimRateMult=4.000000,TweenTime=0.010000,Duration=0.500000,SoundRef="HMG_S.Stinger.StingerRapidStop")
|
||||
ReloadAnims(1)=(AnimName="WeaponPutDown",AnimRateMult=0.600000,TweenTime=0.010000,Duration=0.816667)
|
||||
ReloadAnims(2)=(Duration=0.500000,SoundRef="KF_AA12Snd.AA12_Reload_011")
|
||||
ReloadAnims(3)=(Duration=0.500000,SoundRef="KF_M32Snd.M32_Reload_000")
|
||||
ReloadAnims(4)=(Duration=0.600000,SoundRef="KF_M32Snd.M32_Reload_280")
|
||||
ReloadAnims(5)=(AnimName="WeaponEquip",AnimRateMult=0.800000,TweenTime=0.100000,Duration=0.933333,SoundRef="HMG_S.Stinger.StingerTakeOut")
|
||||
ReloadAnims(6)=(AnimName="WeaponRampDown",AnimRateMult=4.000000,Duration=0.500000,SoundRef="HMG_S.Stinger.StingerRapidStop")
|
||||
MagCapacity=123
|
||||
ReloadRate=4.250000
|
||||
ReloadAnimRate=1.000000
|
||||
FlashBoneName="Stinger-TurretMini"
|
||||
WeaponReloadAnim="Reload_AA12"
|
||||
Weight=13.000000
|
||||
IdleAimAnim="WeaponIdle"
|
||||
StandardDisplayFOV=55.000000
|
||||
bModeZeroCanDryFire=True
|
||||
TraderInfoTexture=Texture'HMG_T.Stinger.Trader_Stinger'
|
||||
bIsTier3Weapon=True
|
||||
MeshRef="HMG_A.SK_WP_Stinger_1P"
|
||||
SkinRefs(0)="HMG_T.Stinger.StingerSkin"
|
||||
SkinRefs(1)="HMG_T.Stinger.T_WP_StingerCord_D"
|
||||
SelectSoundRef="HMG_S.Stinger.StingerTakeOut"
|
||||
HudImageRef="HMG_T.Stinger.Unselected_Stinger"
|
||||
SelectedHudImageRef="HMG_T.Stinger.Selected_Stinger"
|
||||
PlayerIronSightFOV=65.000000
|
||||
ZoomedDisplayFOV=20.000000
|
||||
FireModeClass(0)=Class'ScrnHMG.StingerFire'
|
||||
FireModeClass(1)=Class'ScrnHMG.StingerAltFire'
|
||||
IdleAnim="WeaponIdle"
|
||||
PutDownAnim="WeaponPutDown"
|
||||
SelectForce="SwitchToAssaultRifle"
|
||||
AIRating=0.550000
|
||||
CurrentRating=0.550000
|
||||
bShowChargingBar=True
|
||||
Description="Stinger Minigun first was designed by Liandri corp. as a mining tool, but later converted into military service. Fires shards of unprocessed Tarydium crystal."
|
||||
EffectOffset=(X=100.000000,Y=25.000000,Z=-5.000000)
|
||||
DisplayFOV=55.000000
|
||||
Priority=140
|
||||
SmallEffectOffset=(X=100.000000,Y=25.000000,Z=-5.000000)
|
||||
CustomCrosshair=11
|
||||
CustomCrossHairTextureName="Crosshairs.HUD.Crosshair_Cross5"
|
||||
InventoryGroup=4
|
||||
GroupOffset=7
|
||||
PickupClass=Class'ScrnHMG.StingerPickup'
|
||||
PlayerViewOffset=(X=50.000000,Y=-4.000000,Z=-4.000000)
|
||||
BobDamping=6.000000
|
||||
AttachmentClass=Class'ScrnHMG.StingerAttachment'
|
||||
IconCoords=(X1=245,Y1=39,X2=329,Y2=79)
|
||||
ItemName="Stinger Minigun SE"
|
||||
}
|
||||
151
kf_sources/ScrnHMG/Classes/StingerAltFire.uc
Normal file
151
kf_sources/ScrnHMG/Classes/StingerAltFire.uc
Normal file
|
|
@ -0,0 +1,151 @@
|
|||
class StingerAltFire extends KFHighROFFire;
|
||||
|
||||
|
||||
//overrided to disable FlashEmitter attaching to Stinger
|
||||
simulated function InitEffects()
|
||||
{
|
||||
super(InstantFire).InitEffects();
|
||||
|
||||
// don't even spawn on server
|
||||
if ( (Level.NetMode == NM_DedicatedServer) || (AIController(Instigator.Controller) != None) )
|
||||
return;
|
||||
|
||||
if ( (ShellEjectClass != None) && ((ShellEjectEmitter == None) || ShellEjectEmitter.bDeleteMe) )
|
||||
{
|
||||
ShellEjectEmitter = Weapon.Spawn(ShellEjectClass);
|
||||
Weapon.AttachToBone(ShellEjectEmitter, ShellEjectBoneName);
|
||||
}
|
||||
|
||||
// if ( FlashEmitter != None )
|
||||
// Weapon.AttachToBone(FlashEmitter, KFWeapon(Weapon).FlashBoneName);
|
||||
}
|
||||
|
||||
|
||||
//those functions are used only in FireBurst
|
||||
state FireLoop
|
||||
{
|
||||
function PlayFiring()
|
||||
{
|
||||
local float RandPitch;
|
||||
|
||||
// don't play fire anim, cuz we already are looping it -- PooSH
|
||||
|
||||
// if ( Weapon.Mesh != None )
|
||||
// {
|
||||
// if ( FireCount > 0 )
|
||||
// {
|
||||
// if( KFWeap.bAimingRifle )
|
||||
// {
|
||||
// if ( Weapon.HasAnim(FireLoopAimedAnim) )
|
||||
// {
|
||||
// Weapon.PlayAnim(FireLoopAimedAnim, FireLoopAnimRate, 0.0);
|
||||
// }
|
||||
// else if( Weapon.HasAnim(FireAimedAnim) )
|
||||
// {
|
||||
// Weapon.PlayAnim(FireAimedAnim, FireAnimRate, TweenTime);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// Weapon.PlayAnim(FireAnim, FireAnimRate, TweenTime);
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// if ( Weapon.HasAnim(FireLoopAnim) )
|
||||
// {
|
||||
// Weapon.PlayAnim(FireLoopAnim, FireLoopAnimRate, 0.0);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// Weapon.PlayAnim(FireAnim, FireAnimRate, TweenTime);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// if( KFWeap.bAimingRifle )
|
||||
// {
|
||||
// if( Weapon.HasAnim(FireAimedAnim) )
|
||||
// {
|
||||
// Weapon.PlayAnim(FireAimedAnim, FireAnimRate, TweenTime);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// Weapon.PlayAnim(FireAnim, FireAnimRate, TweenTime);
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// Weapon.PlayAnim(FireAnim, FireAnimRate, TweenTime);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
if( Weapon.Instigator != none && Weapon.Instigator.IsLocallyControlled() &&
|
||||
Weapon.Instigator.IsFirstPerson() && StereoFireSound != none )
|
||||
{
|
||||
if( bRandomPitchFireSound )
|
||||
{
|
||||
RandPitch = FRand() * RandomPitchAdjustAmt;
|
||||
|
||||
if( FRand() < 0.5 )
|
||||
{
|
||||
RandPitch *= -1.0;
|
||||
}
|
||||
}
|
||||
|
||||
Weapon.PlayOwnedSound(StereoFireSound,SLOT_Interact,TransientSoundVolume * 0.85,,TransientSoundRadius,(1.0 + RandPitch),false);
|
||||
}
|
||||
else
|
||||
{
|
||||
if( bRandomPitchFireSound )
|
||||
{
|
||||
RandPitch = FRand() * RandomPitchAdjustAmt;
|
||||
|
||||
if( FRand() < 0.5 )
|
||||
{
|
||||
RandPitch *= -1.0;
|
||||
}
|
||||
}
|
||||
|
||||
Weapon.PlayOwnedSound(FireSound,SLOT_Interact,TransientSoundVolume,,TransientSoundRadius,(1.0 + RandPitch),false);
|
||||
}
|
||||
ClientPlayForceFeedback(FireForce); // jdf
|
||||
|
||||
FireCount++;
|
||||
}
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
RecoilRate=0.075000
|
||||
maxVerticalRecoilAngle=500
|
||||
maxHorizontalRecoilAngle=250
|
||||
ShellEjectClass=Class'ROEffects.KFShellEjectSCAR'
|
||||
ShellEjectBoneName="Stinger-CordFlap"
|
||||
FireSoundRef="HMG_S.Stinger.StingerAltStop"
|
||||
NoAmmoSoundRef="KF_SCARSnd.SCAR_DryFire"
|
||||
DamageType=Class'ScrnHMG.DamTypeStingerAlt'
|
||||
DamageMin=125
|
||||
DamageMax=125
|
||||
Momentum=25500.000000
|
||||
FireAnim="WeaponFire-Secondary"
|
||||
FireLoopAnim="WeaponFire-Secondary"
|
||||
FireEndAnim="WeaponFireEnd"
|
||||
FireLoopAnimRate=2.000000
|
||||
FireRate=0.366667
|
||||
AmmoClass=Class'ScrnHMG.StingerAmmo'
|
||||
AmmoPerFire=3
|
||||
ShakeRotMag=(X=50.000000,Y=50.000000,Z=300.000000)
|
||||
ShakeRotRate=(X=7500.000000,Y=7500.000000,Z=7500.000000)
|
||||
ShakeRotTime=0.650000
|
||||
ShakeOffsetMag=(X=6.000000,Y=3.000000,Z=7.500000)
|
||||
ShakeOffsetRate=(X=1000.000000,Y=1000.000000,Z=1000.000000)
|
||||
ShakeOffsetTime=1.150000
|
||||
BotRefireRate=0.990000
|
||||
FlashEmitterClass=Class'ROEffects.MuzzleFlash1stSPSniper'
|
||||
aimerror=42.000000
|
||||
Spread=0.050000
|
||||
SpreadStyle=SS_Random
|
||||
}
|
||||
14
kf_sources/ScrnHMG/Classes/StingerAmmo.uc
Normal file
14
kf_sources/ScrnHMG/Classes/StingerAmmo.uc
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
class StingerAmmo extends KFAmmunition;
|
||||
|
||||
#EXEC OBJ LOAD FILE=KillingFloorHUD.utx
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoPickupAmount=123
|
||||
MaxAmmo=861
|
||||
InitialAmount=369
|
||||
PickupClass=Class'ScrnHMG.StingerAmmoPickup'
|
||||
IconMaterial=Texture'KillingFloorHUD.Generic.HUD'
|
||||
IconCoords=(X1=336,Y1=82,X2=382,Y2=125)
|
||||
ItemName="Tarydium Crystals"
|
||||
}
|
||||
9
kf_sources/ScrnHMG/Classes/StingerAmmoPickup.uc
Normal file
9
kf_sources/ScrnHMG/Classes/StingerAmmoPickup.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
class StingerAmmoPickup extends KFAmmoPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoAmount=123
|
||||
InventoryType=Class'ScrnHMG.StingerAmmo'
|
||||
PickupMessage="Tarydium Crystals"
|
||||
StaticMesh=StaticMesh'KillingFloorStatics.L85Ammo'
|
||||
}
|
||||
149
kf_sources/ScrnHMG/Classes/StingerAttachment.uc
Normal file
149
kf_sources/ScrnHMG/Classes/StingerAttachment.uc
Normal file
|
|
@ -0,0 +1,149 @@
|
|||
class StingerAttachment extends KFWeaponAttachment;
|
||||
|
||||
var vector FlashOffset;
|
||||
var rotator FlashRotationOffset;
|
||||
|
||||
simulated function DoFlashEmitter()
|
||||
{
|
||||
if ( !Instigator.IsFirstPerson() ) {
|
||||
if (mMuzFlash3rd == None )
|
||||
{
|
||||
mMuzFlash3rd = Spawn(mMuzFlashClass);
|
||||
AttachToBone(mMuzFlash3rd, 'b_gun_barrel');
|
||||
mMuzFlash3rd.SetRelativeRotation(FlashRotationOffset);
|
||||
mMuzFlash3rd.SetRelativeLocation(FlashOffset);
|
||||
}
|
||||
|
||||
if(mMuzFlash3rd != None)
|
||||
mMuzFlash3rd.SpawnParticle(1);
|
||||
}
|
||||
}
|
||||
|
||||
//overrider to enable ROBulletHitEffect on both fire modes -- PooSH
|
||||
simulated event ThirdPersonEffects()
|
||||
{
|
||||
local PlayerController PC;
|
||||
|
||||
if ( (Level.NetMode == NM_DedicatedServer) || (Instigator == None) )
|
||||
return;
|
||||
|
||||
// new Trace FX - Ramm
|
||||
// if (FiringMode == 0)
|
||||
// {
|
||||
if ( OldSpawnHitCount != SpawnHitCount )
|
||||
{
|
||||
OldSpawnHitCount = SpawnHitCount;
|
||||
GetHitInfo();
|
||||
PC = Level.GetLocalPlayerController();
|
||||
if ( ((Instigator != None) && (Instigator.Controller == PC)) || (VSize(PC.ViewTarget.Location - mHitLocation) < 4000) )
|
||||
{
|
||||
if( mHitActor!=None )
|
||||
Spawn(class'ROBulletHitEffect',,, mHitLocation, Rotator(-mHitNormal));
|
||||
CheckForSplash();
|
||||
SpawnTracer();
|
||||
}
|
||||
}
|
||||
//}
|
||||
|
||||
if ( FlashCount>0 )
|
||||
{
|
||||
if( KFPawn(Instigator)!=None )
|
||||
{
|
||||
if (FiringMode == 0)
|
||||
{
|
||||
KFPawn(Instigator).StartFiringX(false,bRapidFire);
|
||||
}
|
||||
else
|
||||
{
|
||||
KFPawn(Instigator).StartFiringX(true,bRapidFire);
|
||||
}
|
||||
}
|
||||
|
||||
if( bDoFiringEffects )
|
||||
{
|
||||
PC = Level.GetLocalPlayerController();
|
||||
|
||||
if ( (Level.TimeSeconds - LastRenderTime > 0.2) && (Instigator.Controller != PC) )
|
||||
return;
|
||||
|
||||
WeaponLight();
|
||||
|
||||
DoFlashEmitter();
|
||||
|
||||
if ( (mShellCaseEmitter == None) && (Level.DetailMode != DM_Low) && !Level.bDropDetail )
|
||||
{
|
||||
mShellCaseEmitter = Spawn(mShellCaseEmitterClass);
|
||||
if ( mShellCaseEmitter != None )
|
||||
AttachToBone(mShellCaseEmitter, ShellEjectBoneName);
|
||||
}
|
||||
if (mShellCaseEmitter != None)
|
||||
mShellCaseEmitter.mStartParticles++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
GotoState('');
|
||||
if( KFPawn(Instigator)!=None )
|
||||
KFPawn(Instigator).StopFiring();
|
||||
}
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
FlashOffset=(Y=40.000000)
|
||||
FlashRotationOffset=(Yaw=16384)
|
||||
mMuzFlashClass=Class'ROEffects.MuzzleFlash3rdSPSniper'
|
||||
mTracerClass=Class'KFMod.SPSniperTracer'
|
||||
mShellCaseEmitterClass=Class'KFMod.KFShellSpewer'
|
||||
ShellEjectBoneName="b_gun_ammo"
|
||||
MovementAnims(0)="JogF_SCAR"
|
||||
MovementAnims(1)="JogB_SCAR"
|
||||
MovementAnims(2)="JogL_SCAR"
|
||||
MovementAnims(3)="JogR_SCAR"
|
||||
TurnLeftAnim="TurnL_SCAR"
|
||||
TurnRightAnim="TurnR_SCAR"
|
||||
CrouchAnims(0)="CHWalkF_SCAR"
|
||||
CrouchAnims(1)="CHWalkB_SCAR"
|
||||
CrouchAnims(2)="CHWalkL_SCAR"
|
||||
CrouchAnims(3)="CHWalkR_SCAR"
|
||||
WalkAnims(0)="WalkF_SCAR"
|
||||
WalkAnims(1)="WalkB_SCAR"
|
||||
WalkAnims(2)="WalkL_SCAR"
|
||||
WalkAnims(3)="WalkR_SCAR"
|
||||
CrouchTurnRightAnim="CH_TurnR_SCAR"
|
||||
CrouchTurnLeftAnim="CH_TurnL_SCAR"
|
||||
IdleCrouchAnim="CHIdle_SCAR"
|
||||
IdleWeaponAnim="Idle_SCAR"
|
||||
IdleRestAnim="Idle_SCAR"
|
||||
IdleChatAnim="Idle_SCAR"
|
||||
IdleHeavyAnim="Idle_SCAR"
|
||||
IdleRifleAnim="Idle_SCAR"
|
||||
FireAnims(0)="Fire_SCAR"
|
||||
FireAnims(1)="Fire_SCAR"
|
||||
FireAnims(2)="Fire_SCAR"
|
||||
FireAnims(3)="Fire_SCAR"
|
||||
FireAltAnims(0)="Fire_SCAR"
|
||||
FireAltAnims(1)="Fire_SCAR"
|
||||
FireAltAnims(2)="Fire_SCAR"
|
||||
FireAltAnims(3)="Fire_SCAR"
|
||||
FireCrouchAnims(0)="CHFire_SCAR"
|
||||
FireCrouchAnims(1)="CHFire_SCAR"
|
||||
FireCrouchAnims(2)="CHFire_SCAR"
|
||||
FireCrouchAnims(3)="CHFire_SCAR"
|
||||
FireCrouchAltAnims(0)="CHFire_SCAR"
|
||||
FireCrouchAltAnims(1)="CHFire_SCAR"
|
||||
FireCrouchAltAnims(2)="CHFire_SCAR"
|
||||
FireCrouchAltAnims(3)="CHFire_SCAR"
|
||||
HitAnims(0)="HitF_SCAR"
|
||||
HitAnims(1)="HitB_SCAR"
|
||||
HitAnims(2)="HitL_SCAR"
|
||||
HitAnims(3)="HitR_SCAR"
|
||||
PostFireBlendStandAnim="Blend_SCAR"
|
||||
PostFireBlendCrouchAnim="CHBlend_SCAR"
|
||||
MeshRef="HMG_A.SK_WP_Stinger_3P_Mid"
|
||||
bHeavy=True
|
||||
bRapidFire=True
|
||||
bAltRapidFire=True
|
||||
SplashEffect=Class'ROEffects.BulletSplashEmitter'
|
||||
CullDistance=5000.000000
|
||||
}
|
||||
83
kf_sources/ScrnHMG/Classes/StingerFire.uc
Normal file
83
kf_sources/ScrnHMG/Classes/StingerFire.uc
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
class StingerFire extends KFHighROFFire;
|
||||
|
||||
var transient float FireRateReminder;
|
||||
|
||||
//overrided to disable FlashEmitter attaching to Stinger
|
||||
simulated function InitEffects()
|
||||
{
|
||||
super(InstantFire).InitEffects();
|
||||
|
||||
// don't even spawn on server
|
||||
if ( (Level.NetMode == NM_DedicatedServer) || (AIController(Instigator.Controller) != None) )
|
||||
return;
|
||||
|
||||
if ( (ShellEjectClass != None) && ((ShellEjectEmitter == None) || ShellEjectEmitter.bDeleteMe) )
|
||||
{
|
||||
ShellEjectEmitter = Weapon.Spawn(ShellEjectClass);
|
||||
Weapon.AttachToBone(ShellEjectEmitter, ShellEjectBoneName);
|
||||
}
|
||||
|
||||
// if ( FlashEmitter != None ) {
|
||||
// Weapon.AttachToBone(FlashEmitter, KFWeapon(Weapon).FlashBoneName);
|
||||
// }
|
||||
}
|
||||
|
||||
event ModeDoFire()
|
||||
{
|
||||
if ( Level.TimeSeconds - LastFireTime > 0.1 )
|
||||
FireRateReminder = 0;
|
||||
else
|
||||
FireRateReminder += fmax(Level.TimeSeconds - FireRate - LastFireTime, 0.f); // do precise fire rate
|
||||
|
||||
super.ModeDoFire();
|
||||
|
||||
if ( FireRateReminder > 0 ) {
|
||||
NextFireTime -= FireRateReminder;
|
||||
if ( NextFireTime < Level.TimeSeconds ) {
|
||||
FireRateReminder = Level.TimeSeconds - NextFireTime;
|
||||
NextFireTime = Level.TimeSeconds;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// simulated function HandleRecoil(float Rec)
|
||||
// {
|
||||
// if ( FireRateReminder > 0.15 )
|
||||
// return; // additional shots
|
||||
|
||||
// super.HandleRecoil(Rec);
|
||||
// }
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
FireEndSoundRef="KF_BasePatriarch.Attack.Kev_MG_TurbineWindDown"
|
||||
AmbientFireSoundRef="HMG_S.Stinger.StingerPrimaryAmb"
|
||||
RecoilRate=0.012500
|
||||
maxVerticalRecoilAngle=65
|
||||
maxHorizontalRecoilAngle=65
|
||||
RecoilVelocityScale=0.000000
|
||||
ShellEjectClass=Class'ROEffects.KFShellEjectSCAR'
|
||||
ShellEjectBoneName="Stinger-CordFlap"
|
||||
NoAmmoSoundRef="HMG_S.M41A.DryFire"
|
||||
DamageType=Class'ScrnHMG.DamTypeStinger'
|
||||
DamageMin=35
|
||||
DamageMax=35
|
||||
Momentum=8500.000000
|
||||
PreFireAnim="WeaponFireStart"
|
||||
FireLoopAnim="WeaponFire"
|
||||
FireEndAnim="WeaponFireEnd"
|
||||
FireLoopAnimRate=1.500000
|
||||
FireRate=0.030000
|
||||
AmmoClass=Class'ScrnHMG.StingerAmmo'
|
||||
ShakeRotMag=(X=50.000000,Y=50.000000,Z=300.000000)
|
||||
ShakeRotRate=(X=7500.000000,Y=7500.000000,Z=7500.000000)
|
||||
ShakeRotTime=0.650000
|
||||
ShakeOffsetMag=(X=6.000000,Y=3.000000,Z=7.500000)
|
||||
ShakeOffsetRate=(X=1000.000000,Y=1000.000000,Z=1000.000000)
|
||||
ShakeOffsetTime=1.150000
|
||||
BotRefireRate=0.590000
|
||||
FlashEmitterClass=Class'ROEffects.MuzzleFlash1stSPSniper'
|
||||
aimerror=42.000000
|
||||
Spread=0.217500
|
||||
SpreadStyle=SS_Random
|
||||
}
|
||||
26
kf_sources/ScrnHMG/Classes/StingerPickup.uc
Normal file
26
kf_sources/ScrnHMG/Classes/StingerPickup.uc
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
class StingerPickup extends KFWeaponPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Weight=13.000000
|
||||
cost=5000
|
||||
AmmoCost=75
|
||||
BuyClipSize=123
|
||||
PowerValue=50
|
||||
SpeedValue=95
|
||||
RangeValue=30
|
||||
Description="Stinger Minigun first was designed by Liandri corp. as a mining tool, but later converted into military service. Fires shards of unprocessed Tarydium crystal."
|
||||
ItemName="Stinger Minigun SE"
|
||||
ItemShortName="Stinger SE "
|
||||
AmmoItemName="7.62x51mm Ammo"
|
||||
AmmoMesh=StaticMesh'KillingFloorStatics.L85Ammo'
|
||||
CorrespondingPerkIndex=10
|
||||
EquipmentCategoryID=3
|
||||
InventoryType=Class'ScrnHMG.Stinger'
|
||||
PickupMessage="You've picked up a Stinger Minigun"
|
||||
PickupSound=Sound'HMG_S.Stinger.StingerTakeOut'
|
||||
PickupForce="AssaultRiflePickup"
|
||||
StaticMesh=StaticMesh'HMG_A.UT3StingerPickup'
|
||||
CollisionRadius=25.000000
|
||||
CollisionHeight=5.000000
|
||||
}
|
||||
113
kf_sources/ScrnHMG/Classes/ThompsonH.uc
Normal file
113
kf_sources/ScrnHMG/Classes/ThompsonH.uc
Normal file
|
|
@ -0,0 +1,113 @@
|
|||
class ThompsonH extends KFWeapon
|
||||
config(user);
|
||||
|
||||
|
||||
function bool RecommendRangedAttack()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
//TODO: LONG ranged?
|
||||
function bool RecommendLongRangedAttack()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
function float SuggestAttackStyle()
|
||||
{
|
||||
return -1.0;
|
||||
}
|
||||
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
MagCapacity=50
|
||||
ReloadRate=3.000000
|
||||
ReloadAnim="Reload"
|
||||
ReloadAnimRate=1.000000
|
||||
WeaponReloadAnim="Reload_AK47"
|
||||
Weight=6.000000
|
||||
bHasAimingMode=True
|
||||
IdleAimAnim="Iron_Idle"
|
||||
StandardDisplayFOV=65.000000
|
||||
bModeZeroCanDryFire=True
|
||||
SleeveNum=0
|
||||
TraderInfoTexture=Texture'HMG_T.Thompson.Thompson_Trader'
|
||||
bIsTier2Weapon=True
|
||||
MeshRef="HMG_A.thompson_mesh"
|
||||
SkinRefs(0)="KF_Weapons_Trip_T.hands.hands_1stP_military_cmb"
|
||||
SkinRefs(1)="HMG_T.Thompson.Main"
|
||||
SkinRefs(2)="HMG_T.Thompson.stuff"
|
||||
SelectSoundRef="KF_IJC_HalloweenSnd.Thompson_Handling_Bolt_Back"
|
||||
HudImageRef="HMG_T.Thompson.Thompson_unselected"
|
||||
SelectedHudImageRef="HMG_T.Thompson.Thompson_selected"
|
||||
PlayerIronSightFOV=65.000000
|
||||
ZoomedDisplayFOV=32.000000
|
||||
FireModeClass(0)=Class'ScrnHMG.ThompsonHFire'
|
||||
FireModeClass(1)=Class'KFMod.NoFire'
|
||||
PutDownAnim="PutDown"
|
||||
SelectForce="SwitchToAssaultRifle"
|
||||
AIRating=0.550000
|
||||
CurrentRating=0.550000
|
||||
bShowChargingBar=True
|
||||
Description="The Thompson is an American submachine gun, invented by John T. Thompson in 1919, that became infamous during the Prohibition era. It was a common sight in the media of the time, being used by both law enforcement officers and criminals."
|
||||
EffectOffset=(X=100.000000,Y=25.000000,Z=-10.000000)
|
||||
DisplayFOV=65.000000
|
||||
Priority=95
|
||||
CustomCrosshair=11
|
||||
CustomCrossHairTextureName="Crosshairs.HUD.Crosshair_Cross5"
|
||||
InventoryGroup=3
|
||||
GroupOffset=7
|
||||
PickupClass=Class'ScrnHMG.ThompsonHPickup'
|
||||
PlayerViewOffset=(X=4.000000,Y=5.000000,Z=-3.000000)
|
||||
BobDamping=4.000000
|
||||
AttachmentClass=Class'ScrnHMG.ThompsonHAttachment'
|
||||
IconCoords=(X1=245,Y1=39,X2=329,Y2=79)
|
||||
ItemName="Heavy Tommy Gun SE"
|
||||
TransientSoundVolume=1.250000
|
||||
}
|
||||
17
kf_sources/ScrnHMG/Classes/ThompsonHAmmo.uc
Normal file
17
kf_sources/ScrnHMG/Classes/ThompsonHAmmo.uc
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
//=============================================================================
|
||||
// Thompson DrumMag Ammo.
|
||||
//=============================================================================
|
||||
class ThompsonHAmmo extends KFAmmunition;
|
||||
|
||||
#EXEC OBJ LOAD FILE=KillingFloorHUD.utx
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoPickupAmount=50
|
||||
MaxAmmo=400
|
||||
InitialAmount=200
|
||||
PickupClass=Class'ScrnHMG.ThompsonHAmmoPickup'
|
||||
IconMaterial=Texture'KillingFloorHUD.Generic.HUD'
|
||||
IconCoords=(X1=336,Y1=82,X2=382,Y2=125)
|
||||
ItemName="45. ACP bullets"
|
||||
}
|
||||
9
kf_sources/ScrnHMG/Classes/ThompsonHAmmoPickup.uc
Normal file
9
kf_sources/ScrnHMG/Classes/ThompsonHAmmoPickup.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
class ThompsonHAmmoPickup extends KFAmmoPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoAmount=50
|
||||
InventoryType=Class'ScrnHMG.ThompsonHAmmo'
|
||||
PickupMessage="Rounds 45. ACP"
|
||||
StaticMesh=StaticMesh'KillingFloorStatics.L85Ammo'
|
||||
}
|
||||
60
kf_sources/ScrnHMG/Classes/ThompsonHAttachment.uc
Normal file
60
kf_sources/ScrnHMG/Classes/ThompsonHAttachment.uc
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
class ThompsonHAttachment extends KFWeaponAttachment;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
mMuzFlashClass=Class'ROEffects.MuzzleFlash3rdMP'
|
||||
mTracerClass=Class'KFMod.KFNewTracer'
|
||||
mShellCaseEmitterClass=Class'KFMod.KFShellSpewer'
|
||||
ShellEjectBoneName="Shell_eject"
|
||||
MovementAnims(0)="JogF_SCAR"
|
||||
MovementAnims(1)="JogB_SCAR"
|
||||
MovementAnims(2)="JogL_SCAR"
|
||||
MovementAnims(3)="JogR_SCAR"
|
||||
TurnLeftAnim="TurnL_SCAR"
|
||||
TurnRightAnim="TurnR_SCAR"
|
||||
CrouchAnims(0)="CHWalkF_SCAR"
|
||||
CrouchAnims(1)="CHWalkB_SCAR"
|
||||
CrouchAnims(2)="CHWalkL_SCAR"
|
||||
CrouchAnims(3)="CHWalkR_SCAR"
|
||||
WalkAnims(0)="WalkF_SCAR"
|
||||
WalkAnims(1)="WalkB_SCAR"
|
||||
WalkAnims(2)="WalkL_SCAR"
|
||||
WalkAnims(3)="WalkR_SCAR"
|
||||
CrouchTurnRightAnim="CH_TurnR_SCAR"
|
||||
CrouchTurnLeftAnim="CH_TurnL_SCAR"
|
||||
IdleCrouchAnim="CHIdle_SCAR"
|
||||
IdleWeaponAnim="Idle_SCAR"
|
||||
IdleRestAnim="Idle_SCAR"
|
||||
IdleChatAnim="Idle_SCAR"
|
||||
IdleHeavyAnim="Idle_SCAR"
|
||||
IdleRifleAnim="Idle_SCAR"
|
||||
FireAnims(0)="Fire_SCAR"
|
||||
FireAnims(1)="Fire_SCAR"
|
||||
FireAnims(2)="Fire_SCAR"
|
||||
FireAnims(3)="Fire_SCAR"
|
||||
FireAltAnims(0)="Fire_SCAR"
|
||||
FireAltAnims(1)="Fire_SCAR"
|
||||
FireAltAnims(2)="Fire_SCAR"
|
||||
FireAltAnims(3)="Fire_SCAR"
|
||||
FireCrouchAnims(0)="CHFire_SCAR"
|
||||
FireCrouchAnims(1)="CHFire_SCAR"
|
||||
FireCrouchAnims(2)="CHFire_SCAR"
|
||||
FireCrouchAnims(3)="CHFire_SCAR"
|
||||
FireCrouchAltAnims(0)="CHFire_SCAR"
|
||||
FireCrouchAltAnims(1)="CHFire_SCAR"
|
||||
FireCrouchAltAnims(2)="CHFire_SCAR"
|
||||
FireCrouchAltAnims(3)="CHFire_SCAR"
|
||||
HitAnims(0)="HitF_SCAR"
|
||||
HitAnims(1)="HitB_SCAR"
|
||||
HitAnims(2)="HitL_SCAR"
|
||||
HitAnims(3)="HitR_SCAR"
|
||||
PostFireBlendStandAnim="Blend_SCAR"
|
||||
PostFireBlendCrouchAnim="CHBlend_SCAR"
|
||||
MeshRef="HMG_A.thompson_3rd"
|
||||
bHeavy=True
|
||||
bRapidFire=True
|
||||
bAltRapidFire=True
|
||||
SplashEffect=Class'ROEffects.BulletSplashEmitter'
|
||||
CullDistance=5000.000000
|
||||
DrawScale=0.800000
|
||||
}
|
||||
40
kf_sources/ScrnHMG/Classes/ThompsonHFire.uc
Normal file
40
kf_sources/ScrnHMG/Classes/ThompsonHFire.uc
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
class ThompsonHFire extends KFFire;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
FireAimedAnim="Fire"
|
||||
RecoilRate=0.010000
|
||||
maxVerticalRecoilAngle=50
|
||||
maxHorizontalRecoilAngle=20
|
||||
bRecoilRightOnly=True
|
||||
ShellEjectClass=Class'ROEffects.KFShellEjectMP5SMG'
|
||||
ShellEjectBoneName="Shell_eject"
|
||||
bAccuracyBonusForSemiAuto=True
|
||||
bRandomPitchFireSound=False
|
||||
FireSoundRef="KF_IJC_HalloweenSnd.Thompson_Fire_Single_M"
|
||||
StereoFireSoundRef="KF_IJC_HalloweenSnd.Thompson_Fire_Single_S"
|
||||
NoAmmoSoundRef="KF_AK47Snd.AK47_DryFire"
|
||||
DamageType=Class'ScrnHMG.DamTypeThompsonH'
|
||||
DamageMin=40
|
||||
DamageMax=41
|
||||
Momentum=7500.000000
|
||||
bPawnRapidFireAnim=True
|
||||
TransientSoundVolume=1.800000
|
||||
FireLoopAnim="Fire"
|
||||
TweenTime=0.025000
|
||||
FireForce="AssaultRifleFire"
|
||||
FireRate=0.079000
|
||||
AmmoClass=Class'ScrnHMG.ThompsonHAmmo'
|
||||
AmmoPerFire=1
|
||||
ShakeRotMag=(X=50.000000,Y=50.000000,Z=350.000000)
|
||||
ShakeRotRate=(X=5000.000000,Y=5000.000000,Z=5000.000000)
|
||||
ShakeRotTime=0.750000
|
||||
ShakeOffsetMag=(X=6.000000,Y=3.000000,Z=7.500000)
|
||||
ShakeOffsetRate=(X=1000.000000,Y=1000.000000,Z=1000.000000)
|
||||
ShakeOffsetTime=1.250000
|
||||
BotRefireRate=0.990000
|
||||
FlashEmitterClass=Class'ROEffects.MuzzleFlash1stMP'
|
||||
aimerror=42.000000
|
||||
Spread=0.015000
|
||||
SpreadStyle=SS_Random
|
||||
}
|
||||
26
kf_sources/ScrnHMG/Classes/ThompsonHPickup.uc
Normal file
26
kf_sources/ScrnHMG/Classes/ThompsonHPickup.uc
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
class ThompsonHPickup extends KFWeaponPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Weight=6.000000
|
||||
cost=750
|
||||
AmmoCost=12
|
||||
BuyClipSize=50
|
||||
PowerValue=30
|
||||
SpeedValue=90
|
||||
RangeValue=50
|
||||
Description="The Thompson is an American submachine gun, invented by John T. Thompson in 1919, that became infamous during the Prohibition era. It was a common sight in the media of the time, being used by both law enforcement officers and criminals."
|
||||
ItemName="Heavy Tommy Gun SE"
|
||||
ItemShortName="Heavy Tommy"
|
||||
AmmoItemName=".45 ACP"
|
||||
AmmoMesh=StaticMesh'KillingFloorStatics.L85Ammo'
|
||||
CorrespondingPerkIndex=10
|
||||
EquipmentCategoryID=2
|
||||
InventoryType=Class'ScrnHMG.ThompsonH'
|
||||
PickupMessage="You've got the Thompson Submachine Gun"
|
||||
PickupSound=Sound'KF_IJC_HalloweenSnd.Handling.Thompson_Handling_Bolt_Back'
|
||||
PickupForce="AssaultRiflePickup"
|
||||
StaticMesh=StaticMesh'HMG_A.thompson_st'
|
||||
CollisionRadius=25.000000
|
||||
CollisionHeight=5.000000
|
||||
}
|
||||
14
kf_sources/ScrnHMG/Classes/XMV850Ammo.uc
Normal file
14
kf_sources/ScrnHMG/Classes/XMV850Ammo.uc
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
class XMV850Ammo extends KFAmmunition;
|
||||
|
||||
#EXEC OBJ LOAD FILE=KillingFloorHUD.utx
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoPickupAmount=100
|
||||
MaxAmmo=600
|
||||
InitialAmount=300
|
||||
PickupClass=Class'ScrnHMG.XMV850AmmoPickup'
|
||||
IconMaterial=Texture'KillingFloorHUD.Generic.HUD'
|
||||
IconCoords=(X1=336,Y1=82,X2=382,Y2=125)
|
||||
ItemName="XMV850 bullets"
|
||||
}
|
||||
9
kf_sources/ScrnHMG/Classes/XMV850AmmoPickup.uc
Normal file
9
kf_sources/ScrnHMG/Classes/XMV850AmmoPickup.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
class XMV850AmmoPickup extends KFAmmoPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoAmount=120
|
||||
InventoryType=Class'ScrnHMG.XMV850Ammo'
|
||||
PickupMessage="Rounds 7.62x51mm"
|
||||
StaticMesh=StaticMesh'KillingFloorStatics.L85Ammo'
|
||||
}
|
||||
91
kf_sources/ScrnHMG/Classes/XMV850Attachment.uc
Normal file
91
kf_sources/ScrnHMG/Classes/XMV850Attachment.uc
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
class XMV850Attachment extends ScrnLaserWeaponAttachment;
|
||||
|
||||
var byte NetBarrelSpeed;
|
||||
var int BarrelTurn;
|
||||
var float BarrelSpeed;
|
||||
|
||||
replication
|
||||
{
|
||||
reliable if(Role == ROLE_Authority)
|
||||
NetBarrelSpeed;
|
||||
}
|
||||
|
||||
simulated event Tick(float dt)
|
||||
{
|
||||
local Rotator bt;
|
||||
|
||||
super.Tick(dt);
|
||||
if(Role == ROLE_Authority)
|
||||
{
|
||||
NetBarrelSpeed = byte(BarrelSpeed * float(255));
|
||||
}
|
||||
else
|
||||
{
|
||||
BarrelSpeed = float(NetBarrelSpeed) / 255.00;
|
||||
}
|
||||
if(Level.NetMode != NM_DedicatedServer)
|
||||
{
|
||||
BarrelTurn += int(BarrelSpeed * float(655360) * dt);
|
||||
bt.Roll = BarrelTurn;
|
||||
SetBoneRotation('Barrels', bt);
|
||||
}
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
LaserAttachmentBone="Muzzle"
|
||||
mMuzFlashClass=Class'ROEffects.MuzzleFlash3rdMP'
|
||||
mTracerClass=Class'KFMod.KFNewTracer'
|
||||
mShellCaseEmitterClass=Class'KFMod.KFShellSpewer'
|
||||
ShellEjectBoneName="ejector"
|
||||
MovementAnims(0)="JogF_SCAR"
|
||||
MovementAnims(1)="JogB_SCAR"
|
||||
MovementAnims(2)="JogL_SCAR"
|
||||
MovementAnims(3)="JogR_SCAR"
|
||||
TurnLeftAnim="TurnL_SCAR"
|
||||
TurnRightAnim="TurnR_SCAR"
|
||||
CrouchAnims(0)="CHWalkF_SCAR"
|
||||
CrouchAnims(1)="CHWalkB_SCAR"
|
||||
CrouchAnims(2)="CHWalkL_SCAR"
|
||||
CrouchAnims(3)="CHWalkR_SCAR"
|
||||
WalkAnims(0)="WalkF_SCAR"
|
||||
WalkAnims(1)="WalkB_SCAR"
|
||||
WalkAnims(2)="WalkL_SCAR"
|
||||
WalkAnims(3)="WalkR_SCAR"
|
||||
CrouchTurnRightAnim="CH_TurnR_SCAR"
|
||||
CrouchTurnLeftAnim="CH_TurnL_SCAR"
|
||||
IdleCrouchAnim="CHIdle_SCAR"
|
||||
IdleWeaponAnim="Idle_SCAR"
|
||||
IdleRestAnim="Idle_SCAR"
|
||||
IdleChatAnim="Idle_SCAR"
|
||||
IdleHeavyAnim="Idle_SCAR"
|
||||
IdleRifleAnim="Idle_SCAR"
|
||||
FireAnims(0)="Fire_SCAR"
|
||||
FireAnims(1)="Fire_SCAR"
|
||||
FireAnims(2)="Fire_SCAR"
|
||||
FireAnims(3)="Fire_SCAR"
|
||||
FireAltAnims(0)="Fire_SCAR"
|
||||
FireAltAnims(1)="Fire_SCAR"
|
||||
FireAltAnims(2)="Fire_SCAR"
|
||||
FireAltAnims(3)="Fire_SCAR"
|
||||
FireCrouchAnims(0)="CHFire_SCAR"
|
||||
FireCrouchAnims(1)="CHFire_SCAR"
|
||||
FireCrouchAnims(2)="CHFire_SCAR"
|
||||
FireCrouchAnims(3)="CHFire_SCAR"
|
||||
FireCrouchAltAnims(0)="CHFire_SCAR"
|
||||
FireCrouchAltAnims(1)="CHFire_SCAR"
|
||||
FireCrouchAltAnims(2)="CHFire_SCAR"
|
||||
FireCrouchAltAnims(3)="CHFire_SCAR"
|
||||
HitAnims(0)="HitF_SCAR"
|
||||
HitAnims(1)="HitB_SCAR"
|
||||
HitAnims(2)="HitL_SCAR"
|
||||
HitAnims(3)="HitR_SCAR"
|
||||
PostFireBlendStandAnim="Blend_SCAR"
|
||||
PostFireBlendCrouchAnim="CHBlend_SCAR"
|
||||
MeshRef="HMG_A.XMV850_3rd"
|
||||
bHeavy=True
|
||||
bRapidFire=True
|
||||
bAltRapidFire=True
|
||||
SplashEffect=Class'ROEffects.BulletSplashEmitter'
|
||||
CullDistance=5000.000000
|
||||
}
|
||||
37
kf_sources/ScrnHMG/Classes/XMV850Fire.uc
Normal file
37
kf_sources/ScrnHMG/Classes/XMV850Fire.uc
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
class XMV850Fire extends KFFire;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
FireAimedAnim="FireLoop"
|
||||
RecoilRate=0.040000
|
||||
maxVerticalRecoilAngle=150
|
||||
maxHorizontalRecoilAngle=125
|
||||
ShellEjectClass=Class'ROEffects.KFShellEjectSCAR'
|
||||
ShellEjectBoneName="ejector"
|
||||
FireSoundRef="HMG_S.XMV.XMV-Fire-1"
|
||||
StereoFireSoundRef="HMG_S.XMV.XMV-Fire-1"
|
||||
NoAmmoSoundRef="HMG_S.M41A.DryFire"
|
||||
DamageType=Class'ScrnHMG.DamTypeXMV850M'
|
||||
DamageMin=39
|
||||
DamageMax=39
|
||||
Momentum=8500.000000
|
||||
bPawnRapidFireAnim=True
|
||||
TransientSoundVolume=4.800000
|
||||
FireAnim="FireLoop"
|
||||
TweenTime=0.025000
|
||||
FireForce="AssaultRifleFire"
|
||||
FireRate=0.065000
|
||||
AmmoClass=Class'ScrnHMG.XMV850Ammo'
|
||||
AmmoPerFire=1
|
||||
ShakeRotMag=(X=50.000000,Y=50.000000,Z=300.000000)
|
||||
ShakeRotRate=(X=7500.000000,Y=7500.000000,Z=7500.000000)
|
||||
ShakeRotTime=0.650000
|
||||
ShakeOffsetMag=(X=6.000000,Y=3.000000,Z=7.500000)
|
||||
ShakeOffsetRate=(X=1000.000000,Y=1000.000000,Z=1000.000000)
|
||||
ShakeOffsetTime=1.150000
|
||||
BotRefireRate=0.990000
|
||||
FlashEmitterClass=Class'ROEffects.MuzzleFlash1stSTG'
|
||||
aimerror=42.000000
|
||||
Spread=0.007500
|
||||
SpreadStyle=SS_Random
|
||||
}
|
||||
406
kf_sources/ScrnHMG/Classes/XMV850M.uc
Normal file
406
kf_sources/ScrnHMG/Classes/XMV850M.uc
Normal file
|
|
@ -0,0 +1,406 @@
|
|||
class XMV850M extends KFWeapon
|
||||
config(user);
|
||||
|
||||
var float DesiredSpeed;
|
||||
var float BarrelSpeed;
|
||||
var int BarrelTurn;
|
||||
|
||||
var() Sound BarrelSpinSound,BarrelStopSound,BarrelStartSound;
|
||||
var() String BarrelSpinSoundRef,BarrelStopSoundRef,BarrelStartSoundRef;
|
||||
|
||||
|
||||
|
||||
|
||||
var const class<ScrnLocalLaserDot> LaserDotClass;
|
||||
var ScrnLocalLaserDot LaserDot; // The first person laser site dot
|
||||
|
||||
var() class<InventoryAttachment> LaserAttachmentClass; // First person laser attachment class
|
||||
var Vector LaserAttachmentOffset; // relative offset from attachment bone
|
||||
var name LaserAttachmentBone; // relative offset from attachment bone
|
||||
var Actor LaserAttachment; // First person laser attachment
|
||||
var byte LaserType;
|
||||
|
||||
|
||||
replication
|
||||
{
|
||||
reliable if(Role < ROLE_Authority)
|
||||
ServerSetLaserType;
|
||||
}
|
||||
|
||||
static function PreloadAssets(Inventory Inv, optional bool bSkipRefCount)
|
||||
{
|
||||
local XMV850M W;
|
||||
|
||||
super.PreloadAssets(Inv, bSkipRefCount);
|
||||
|
||||
default.BarrelSpinSound = sound(DynamicLoadObject(default.BarrelSpinSoundRef, class'sound', true));
|
||||
default.BarrelStopSound = sound(DynamicLoadObject(default.BarrelStopSoundRef, class'sound', true));
|
||||
default.BarrelStartSound = sound(DynamicLoadObject(default.BarrelStartSoundRef, class'sound', true));
|
||||
|
||||
W = XMV850M(Inv);
|
||||
if ( W != none ) {
|
||||
W.BarrelSpinSound = default.BarrelSpinSound;
|
||||
W.BarrelStopSound = default.BarrelStopSound;
|
||||
W.BarrelStartSound = default.BarrelStartSound;
|
||||
}
|
||||
}
|
||||
|
||||
static function bool UnloadAssets()
|
||||
{
|
||||
if ( super.UnloadAssets() )
|
||||
{
|
||||
default.BarrelSpinSound = none;
|
||||
default.BarrelStopSound = none;
|
||||
default.BarrelStartSound = none;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// XMV uses custom hands
|
||||
simulated function HandleSleeveSwapping() { }
|
||||
|
||||
simulated function Destroyed()
|
||||
{
|
||||
if (LaserDot != None)
|
||||
LaserDot.Destroy();
|
||||
if (LaserAttachment != None)
|
||||
LaserAttachment.Destroy();
|
||||
|
||||
super.Destroyed();
|
||||
}
|
||||
|
||||
|
||||
simulated event WeaponTick(float dt)
|
||||
{
|
||||
local Rotator bt;
|
||||
|
||||
super.WeaponTick(dt);
|
||||
|
||||
bt.Roll = BarrelTurn;
|
||||
SetBoneRotation('Barrels', bt);
|
||||
DesiredSpeed = 0.50;
|
||||
}
|
||||
|
||||
simulated event Tick(float dt)
|
||||
{
|
||||
local float OldBarrelTurn;
|
||||
|
||||
super.Tick(dt);
|
||||
|
||||
if(FireMode[0].IsFiring()) {
|
||||
BarrelSpeed = BarrelSpeed + FClamp(DesiredSpeed - BarrelSpeed, -0.20 * dt, 0.40 * dt);
|
||||
BarrelTurn += int(BarrelSpeed * float(655360) * dt);
|
||||
}
|
||||
else {
|
||||
if( BarrelSpeed > 0 ) {
|
||||
BarrelSpeed = FMax(BarrelSpeed - 0.10 * dt, 0.01);
|
||||
OldBarrelTurn = float(BarrelTurn);
|
||||
BarrelTurn += int(BarrelSpeed * float(655360) * dt);
|
||||
if(BarrelSpeed <= 0.03 && (int(OldBarrelTurn / 10922.67) < int(float(BarrelTurn) / 10922.67)))
|
||||
{
|
||||
BarrelTurn = int(float(int(float(BarrelTurn) / 10922.67)) * 10922.67);
|
||||
BarrelSpeed = 0.00;
|
||||
PlaySound(BarrelStopSound, SLOT_None, 0.50,, 32.00, 1.00, true);
|
||||
AmbientSound = none;
|
||||
}
|
||||
}
|
||||
}
|
||||
if( BarrelSpeed > 0 ) {
|
||||
AmbientSound = BarrelSpinSound;
|
||||
SoundPitch = byte(float(32) + float(96) * BarrelSpeed);
|
||||
}
|
||||
|
||||
if( XMV850Attachment(ThirdPersonActor) != none)
|
||||
XMV850Attachment(ThirdPersonActor).BarrelSpeed = BarrelSpeed;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
simulated function bool StartFire(int Mode)
|
||||
{
|
||||
if( Mode == 1 )
|
||||
return super.StartFire(Mode);
|
||||
|
||||
if( !super.StartFire(Mode) )
|
||||
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 function AltFire(float F)
|
||||
{
|
||||
ToggleLaser();
|
||||
}
|
||||
|
||||
|
||||
//bring Laser to current state, which is indicating by LaserType
|
||||
simulated function ApplyLaserState()
|
||||
{
|
||||
if( Role < ROLE_Authority )
|
||||
ServerSetLaserType(LaserType);
|
||||
|
||||
if ( ThirdPersonActor != none )
|
||||
ScrnLaserWeaponAttachment(ThirdPersonActor).SetLaserType(LaserType);
|
||||
|
||||
if ( !Instigator.IsLocallyControlled() )
|
||||
return;
|
||||
|
||||
if(LaserType > 0 ) {
|
||||
if ( LaserDot == none )
|
||||
LaserDot = Spawn(LaserDotClass, self);
|
||||
LaserDot.SetLaserType(LaserType);
|
||||
//spawn 1-st person laser attachment for weapon owner
|
||||
if ( LaserAttachment == none ) {
|
||||
LaserAttachment = Spawn(LaserAttachmentClass,,,,);
|
||||
AttachToBone(LaserAttachment,LaserAttachmentBone);
|
||||
LaserAttachment.SetRelativeLocation(LaserAttachmentOffset);
|
||||
}
|
||||
ConstantColor'ScrnTex.Laser.LaserColor'.Color =
|
||||
LaserDot.GetLaserColor(); // LaserAttachment's color
|
||||
LaserAttachment.bHidden = false;
|
||||
}
|
||||
else {
|
||||
if ( LaserAttachment != none )
|
||||
LaserAttachment.bHidden = true;
|
||||
if ( LaserDot != none )
|
||||
LaserDot.Destroy(); //bHidden = true;
|
||||
}
|
||||
}
|
||||
// Toggle laser on or off
|
||||
simulated function ToggleLaser()
|
||||
{
|
||||
if( !Instigator.IsLocallyControlled() )
|
||||
return;
|
||||
|
||||
if ( LaserType == 0 )
|
||||
LaserType = 3; // Blue
|
||||
else
|
||||
LaserType = 0;
|
||||
|
||||
ApplyLaserState();
|
||||
}
|
||||
|
||||
simulated function BringUp(optional Weapon PrevWeapon)
|
||||
{
|
||||
ApplyLaserState();
|
||||
Super.BringUp(PrevWeapon);
|
||||
}
|
||||
|
||||
simulated function bool PutDown()
|
||||
{
|
||||
TurnOffLaser();
|
||||
return super.PutDown();
|
||||
}
|
||||
|
||||
simulated function DetachFromPawn(Pawn P)
|
||||
{
|
||||
TurnOffLaser();
|
||||
Super.DetachFromPawn(P);
|
||||
}
|
||||
|
||||
simulated function TurnOffLaser()
|
||||
{
|
||||
if( !Instigator.IsLocallyControlled() )
|
||||
return;
|
||||
|
||||
if( Role < ROLE_Authority )
|
||||
ServerSetLaserType(0);
|
||||
|
||||
//don't change Laser type here, because we need to restore it state
|
||||
//when next time weapon will be bringed up
|
||||
if ( LaserAttachment != none )
|
||||
LaserAttachment.bHidden = true;
|
||||
if (LaserDot != None)
|
||||
LaserDot.Destroy();
|
||||
}
|
||||
|
||||
// Set the new fire mode on the server
|
||||
function ServerSetLaserType(byte NewLaserType)
|
||||
{
|
||||
LaserType = NewLaserType;
|
||||
ScrnLaserWeaponAttachment(ThirdPersonActor).SetLaserType(LaserType);
|
||||
}
|
||||
|
||||
simulated function RenderOverlays( Canvas Canvas )
|
||||
{
|
||||
local int i;
|
||||
local Vector StartTrace, EndTrace;
|
||||
local Vector HitLocation, HitNormal;
|
||||
local Actor Other;
|
||||
local vector X,Y,Z;
|
||||
local coords C;
|
||||
local KFFire KFM;
|
||||
local array<Actor> HitActors;
|
||||
|
||||
if (Instigator == None)
|
||||
return;
|
||||
|
||||
if ( Instigator.Controller != None )
|
||||
Hand = Instigator.Controller.Handedness;
|
||||
|
||||
if ((Hand < -1.0) || (Hand > 1.0))
|
||||
return;
|
||||
|
||||
// draw muzzleflashes/smoke for all fire modes so idle state won't
|
||||
// cause emitters to just disappear
|
||||
for ( i = 0; i < NUM_FIRE_MODES; ++i ) {
|
||||
if (FireMode[i] != None)
|
||||
FireMode[i].DrawMuzzleFlash(Canvas);
|
||||
}
|
||||
|
||||
SetLocation( Instigator.Location + Instigator.CalcDrawOffset(self) );
|
||||
SetRotation( Instigator.GetViewRotation() + ZoomRotInterp);
|
||||
|
||||
KFM = KFFire(FireMode[0]);
|
||||
|
||||
// Handle drawing the laser dot
|
||||
if ( LaserDot != None )
|
||||
{
|
||||
//move LaserDot during fire animation too -- PooSH
|
||||
if( bIsReloading )
|
||||
{
|
||||
C = GetBoneCoords(LaserAttachmentBone);
|
||||
X = C.XAxis;
|
||||
Y = C.YAxis;
|
||||
Z = C.ZAxis;
|
||||
}
|
||||
else
|
||||
GetViewAxes(X, Y, Z);
|
||||
|
||||
StartTrace = Instigator.Location + Instigator.EyePosition();
|
||||
EndTrace = StartTrace + 65535 * X;
|
||||
|
||||
while (true) {
|
||||
Other = Trace(HitLocation, HitNormal, EndTrace, StartTrace, true);
|
||||
if ( ROBulletWhipAttachment(Other) != none ) {
|
||||
HitActors[HitActors.Length] = Other;
|
||||
Other.SetCollision(false);
|
||||
StartTrace = HitLocation + X;
|
||||
}
|
||||
else {
|
||||
if (Other != None && Other != Instigator && Other.Base != Instigator )
|
||||
EndBeamEffect = HitLocation;
|
||||
else
|
||||
EndBeamEffect = EndTrace;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// restore collision
|
||||
for ( i=0; i<HitActors.Length; ++i )
|
||||
HitActors[i].SetCollision(true);
|
||||
|
||||
LaserDot.SetLocation(EndBeamEffect - X*LaserDot.ProjectorPullback);
|
||||
|
||||
if( Pawn(Other) != none ) {
|
||||
LaserDot.SetRotation(Rotator(X));
|
||||
LaserDot.SetDrawScale(LaserDot.default.DrawScale * 0.5);
|
||||
}
|
||||
else if( HitNormal == vect(0,0,0) ) {
|
||||
LaserDot.SetRotation(Rotator(-X));
|
||||
LaserDot.SetDrawScale(LaserDot.default.DrawScale);
|
||||
}
|
||||
else {
|
||||
LaserDot.SetRotation(Rotator(-HitNormal));
|
||||
LaserDot.SetDrawScale(LaserDot.default.DrawScale);
|
||||
}
|
||||
}
|
||||
|
||||
//PreDrawFPWeapon(); // Laurent -- Hook to override things before render (like rotation if using a staticmesh)
|
||||
|
||||
bDrawingFirstPerson = true;
|
||||
Canvas.DrawActor(self, false, false, DisplayFOV);
|
||||
bDrawingFirstPerson = false;
|
||||
}
|
||||
|
||||
exec function SwitchModes()
|
||||
{
|
||||
DoToggle();
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
BarrelSpinSoundRef="HMG_S.XMV.XMV-BarrelSpinLoop"
|
||||
BarrelStopSoundRef="HMG_S.XMV.XMV-BarrelSpinEnd"
|
||||
BarrelStartSoundRef="HMG_S.XMV.XMV-BarrelSpinStart"
|
||||
LaserDotClass=Class'ScrnBalanceSrv.ScrnLocalLaserDot'
|
||||
LaserAttachmentClass=Class'ScrnBalanceSrv.ScrnLaserAttachmentFirstPerson'
|
||||
LaserAttachmentOffset=(X=120.000000,Z=-10.000000)
|
||||
LaserAttachmentBone="Muzzle"
|
||||
MagCapacity=100
|
||||
ReloadRate=4.400000
|
||||
ReloadAnim="Reload"
|
||||
ReloadAnimRate=1.000000
|
||||
WeaponReloadAnim="Reload"
|
||||
StandardDisplayFOV=55.000000
|
||||
bModeZeroCanDryFire=True
|
||||
TraderInfoTexture=Texture'HMG_T.XMV.Trader_XMV850'
|
||||
MeshRef="HMG_A.XMV850Mesh"
|
||||
SkinRefs(0)="HMG_T.XMV.XMV850_Main"
|
||||
SkinRefs(1)="HMG_T.XMV.Hands_Shdr"
|
||||
SkinRefs(2)="HMG_T.XMV.XMV850_Barrels_Shdr"
|
||||
SelectSoundRef="HMG_S.XMV.XMV-Pullout"
|
||||
HudImageRef="HMG_T.XMV.XMV850_Unselected"
|
||||
SelectedHudImageRef="HMG_T.XMV.XMV850_Selected"
|
||||
PlayerIronSightFOV=65.000000
|
||||
ZoomedDisplayFOV=20.000000
|
||||
FireModeClass(0)=Class'ScrnHMG.XMV850Fire'
|
||||
FireModeClass(1)=Class'KFMod.NoFire'
|
||||
PutDownAnim="Putaway"
|
||||
SelectForce="SwitchToAssaultRifle"
|
||||
AIRating=0.550000
|
||||
CurrentRating=0.550000
|
||||
bShowChargingBar=True
|
||||
Description="Minigan with reduced fire rate down to 950RPM. But still badass and has laser sight."
|
||||
EffectOffset=(X=100.000000,Y=25.000000,Z=-10.000000)
|
||||
DisplayFOV=55.000000
|
||||
Priority=135
|
||||
CustomCrosshair=11
|
||||
CustomCrossHairTextureName="Crosshairs.HUD.Crosshair_Cross5"
|
||||
InventoryGroup=3
|
||||
GroupOffset=7
|
||||
PickupClass=Class'ScrnHMG.XMV850Pickup'
|
||||
PlayerViewOffset=(X=30.000000,Y=20.000000,Z=-10.000000)
|
||||
BobDamping=6.000000
|
||||
AttachmentClass=Class'ScrnHMG.XMV850Attachment'
|
||||
IconCoords=(X1=245,Y1=39,X2=329,Y2=79)
|
||||
ItemName="XMV850 Minigun SE"
|
||||
TransientSoundVolume=1.250000
|
||||
}
|
||||
29
kf_sources/ScrnHMG/Classes/XMV850Pickup.uc
Normal file
29
kf_sources/ScrnHMG/Classes/XMV850Pickup.uc
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
class XMV850Pickup extends KFWeaponPickup;
|
||||
|
||||
#EXEC OBJ LOAD FILE=HMG_T.utx
|
||||
#EXEC OBJ LOAD FILE=HMG_S.uax
|
||||
#EXEC OBJ LOAD FILE=HMG_A.ukx
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
cost=3000
|
||||
AmmoCost=35
|
||||
BuyClipSize=120
|
||||
PowerValue=40
|
||||
SpeedValue=100
|
||||
RangeValue=50
|
||||
Description="Minigan with reduced fire rate down to 950RPM. But still badass and has laser sight."
|
||||
ItemName="XMV850 Minigun SE"
|
||||
ItemShortName="XMV850 Minigun"
|
||||
AmmoItemName="7.62x51mm Ammo"
|
||||
AmmoMesh=StaticMesh'KillingFloorStatics.L85Ammo'
|
||||
CorrespondingPerkIndex=10
|
||||
EquipmentCategoryID=3
|
||||
InventoryType=Class'ScrnHMG.XMV850M'
|
||||
PickupMessage="You got the XMV850 Minigun."
|
||||
PickupSound=Sound'HMG_S.XMV.XMV-Pullout'
|
||||
PickupForce="AssaultRiflePickup"
|
||||
StaticMesh=StaticMesh'HMG_A.XMV850Pickup'
|
||||
CollisionRadius=25.000000
|
||||
CollisionHeight=5.000000
|
||||
}
|
||||
103
kf_sources/ScrnHMG/Classes/index.html
Normal file
103
kf_sources/ScrnHMG/Classes/index.html
Normal file
|
|
@ -0,0 +1,103 @@
|
|||
<html>
|
||||
<head><title>Index of /kf_sources/ScrnHMG/Classes/</title></head>
|
||||
<body>
|
||||
<h1>Index of /kf_sources/ScrnHMG/Classes/</h1><hr><pre><a href="../">../</a>
|
||||
<a href="AK47H.uc">AK47H.uc</a> 01-Jul-2020 18:12 258
|
||||
<a href="AK47HAmmo.uc">AK47HAmmo.uc</a> 01-Jul-2020 18:12 315
|
||||
<a href="AK47HFire.uc">AK47HFire.uc</a> 01-Jul-2020 18:12 148
|
||||
<a href="AK47HPickup.uc">AK47HPickup.uc</a> 01-Jul-2020 18:12 269
|
||||
<a href="AUG_A1AR.uc">AUG_A1AR.uc</a> 01-Jul-2020 18:12 21024
|
||||
<a href="AUG_A1ARAmmo.uc">AUG_A1ARAmmo.uc</a> 01-Jul-2020 18:12 319
|
||||
<a href="AUG_A1ARAmmoPickup.uc">AUG_A1ARAmmoPickup.uc</a> 01-Jul-2020 18:12 234
|
||||
<a href="AUG_A1ARAttachment.uc">AUG_A1ARAttachment.uc</a> 01-Jul-2020 18:12 2030
|
||||
<a href="AUG_A1ARFire.uc">AUG_A1ARFire.uc</a> 01-Jul-2020 18:12 1459
|
||||
<a href="AUG_A1ARPickup.uc">AUG_A1ARPickup.uc</a> 01-Jul-2020 18:12 714
|
||||
<a href="Ak47HAmmoPickup.uc">Ak47HAmmoPickup.uc</a> 01-Jul-2020 18:12 230
|
||||
<a href="BruteGunnerPerkProg.uc">BruteGunnerPerkProg.uc</a> 01-Jul-2020 18:12 120
|
||||
<a href="CGShellEject.uc">CGShellEject.uc</a> 01-Jul-2020 18:12 3004
|
||||
<a href="ChainGun.uc">ChainGun.uc</a> 01-Jul-2020 18:12 4436
|
||||
<a href="ChainGunAltFire.uc">ChainGunAltFire.uc</a> 01-Jul-2020 18:12 1774
|
||||
<a href="ChainGunAmmo.uc">ChainGunAmmo.uc</a> 01-Jul-2020 18:12 728
|
||||
<a href="ChainGunAmmoPickup.uc">ChainGunAmmoPickup.uc</a> 01-Jul-2020 18:12 779
|
||||
<a href="ChainGunAttachment.uc">ChainGunAttachment.uc</a> 01-Jul-2020 18:12 4308
|
||||
<a href="ChainGunFire.uc">ChainGunFire.uc</a> 01-Jul-2020 18:12 1101
|
||||
<a href="ChainGunPickup.uc">ChainGunPickup.uc</a> 01-Jul-2020 18:12 223
|
||||
<a href="ChainGunPrimaryPickup.uc">ChainGunPrimaryPickup.uc</a> 01-Jul-2020 18:12 972
|
||||
<a href="DamTypeAK47H.uc">DamTypeAK47H.uc</a> 01-Jul-2020 18:12 381
|
||||
<a href="DamTypeAUG_A1AR.uc">DamTypeAUG_A1AR.uc</a> 01-Jul-2020 18:12 377
|
||||
<a href="DamTypeCG.uc">DamTypeCG.uc</a> 01-Jul-2020 18:12 560
|
||||
<a href="DamTypeHeavy.uc">DamTypeHeavy.uc</a> 01-Jul-2020 18:12 131
|
||||
<a href="DamTypeHeavyBase.uc">DamTypeHeavyBase.uc</a> 01-Jul-2020 18:12 446
|
||||
<a href="DamTypeM249SAW.uc">DamTypeM249SAW.uc</a> 01-Jul-2020 18:12 557
|
||||
<a href="DamTypeM41AAssaultRifle.uc">DamTypeM41AAssaultRifle.uc</a> 01-Jul-2020 18:12 578
|
||||
<a href="DamTypePKM.uc">DamTypePKM.uc</a> 01-Jul-2020 18:12 543
|
||||
<a href="DamTypeRPK47MG.uc">DamTypeRPK47MG.uc</a> 01-Jul-2020 18:12 388
|
||||
<a href="DamTypeSA80LSW.uc">DamTypeSA80LSW.uc</a> 01-Jul-2020 18:12 307
|
||||
<a href="DamTypeStinger.uc">DamTypeStinger.uc</a> 01-Jul-2020 18:12 315
|
||||
<a href="DamTypeStingerAlt.uc">DamTypeStingerAlt.uc</a> 01-Jul-2020 18:12 523
|
||||
<a href="DamTypeThompsonH.uc">DamTypeThompsonH.uc</a> 01-Jul-2020 18:12 394
|
||||
<a href="DamTypeXMV850M.uc">DamTypeXMV850M.uc</a> 01-Jul-2020 18:12 290
|
||||
<a href="KFShellEjectPKM.uc">KFShellEjectPKM.uc</a> 01-Jul-2020 18:12 3035
|
||||
<a href="M249Ammo.uc">M249Ammo.uc</a> 01-Jul-2020 18:12 365
|
||||
<a href="M249AmmoPickup.uc">M249AmmoPickup.uc</a> 01-Jul-2020 18:12 236
|
||||
<a href="M249Attachment.uc">M249Attachment.uc</a> 01-Jul-2020 18:12 1998
|
||||
<a href="M249Fire.uc">M249Fire.uc</a> 01-Jul-2020 18:12 1333
|
||||
<a href="M249Pickup.uc">M249Pickup.uc</a> 01-Jul-2020 18:12 966
|
||||
<a href="M249SAW.uc">M249SAW.uc</a> 01-Jul-2020 18:12 8639
|
||||
<a href="M41AALTFire.uc">M41AALTFire.uc</a> 01-Jul-2020 18:12 5990
|
||||
<a href="M41AAmmo.uc">M41AAmmo.uc</a> 01-Jul-2020 18:12 555
|
||||
<a href="M41AAmmoPickup.uc">M41AAmmoPickup.uc</a> 01-Jul-2020 18:12 245
|
||||
<a href="M41AAssaultRifle.uc">M41AAssaultRifle.uc</a> 01-Jul-2020 18:12 4345
|
||||
<a href="M41AAttachment.uc">M41AAttachment.uc</a> 01-Jul-2020 18:12 1870
|
||||
<a href="M41AAttachmentBeta.uc">M41AAttachmentBeta.uc</a> 01-Jul-2020 18:12 406
|
||||
<a href="M41AFire.uc">M41AFire.uc</a> 01-Jul-2020 18:12 1412
|
||||
<a href="M41APickup.uc">M41APickup.uc</a> 01-Jul-2020 18:12 260
|
||||
<a href="M41APrimaryPickup.uc">M41APrimaryPickup.uc</a> 01-Jul-2020 18:12 863
|
||||
<a href="M41AProjectileAmmo.uc">M41AProjectileAmmo.uc</a> 01-Jul-2020 18:12 272
|
||||
<a href="M41AProjectileAmmoPickup.uc">M41AProjectileAmmoPickup.uc</a> 01-Jul-2020 18:12 282
|
||||
<a href="MuzzleFlash1stPKM.uc">MuzzleFlash1stPKM.uc</a> 01-Jul-2020 18:12 1882
|
||||
<a href="MuzzleFlash3rdPKM.uc">MuzzleFlash3rdPKM.uc</a> 01-Jul-2020 18:12 11499
|
||||
<a href="MuzzleFlashM41A.uc">MuzzleFlashM41A.uc</a> 01-Jul-2020 18:12 4616
|
||||
<a href="PKM.uc">PKM.uc</a> 01-Jul-2020 18:12 2759
|
||||
<a href="PKMAmmo.uc">PKMAmmo.uc</a> 01-Jul-2020 18:12 355
|
||||
<a href="PKMAmmoPickup.uc">PKMAmmoPickup.uc</a> 01-Jul-2020 18:12 219
|
||||
<a href="PKMAttachment.uc">PKMAttachment.uc</a> 01-Jul-2020 18:12 2261
|
||||
<a href="PKMFire.uc">PKMFire.uc</a> 01-Jul-2020 18:12 1316
|
||||
<a href="PKMPickup.uc">PKMPickup.uc</a> 01-Jul-2020 18:12 854
|
||||
<a href="PKMShellSpewer.uc">PKMShellSpewer.uc</a> 01-Jul-2020 18:12 908
|
||||
<a href="RPK47Ammo.uc">RPK47Ammo.uc</a> 01-Jul-2020 18:12 290
|
||||
<a href="RPK47AmmoPickup.uc">RPK47AmmoPickup.uc</a> 01-Jul-2020 18:12 223
|
||||
<a href="RPK47Attachment.uc">RPK47Attachment.uc</a> 01-Jul-2020 18:12 2026
|
||||
<a href="RPK47Fire.uc">RPK47Fire.uc</a> 01-Jul-2020 18:12 1328
|
||||
<a href="RPK47MachineGun.uc">RPK47MachineGun.uc</a> 01-Jul-2020 18:12 3212
|
||||
<a href="RPK47Pickup.uc">RPK47Pickup.uc</a> 01-Jul-2020 18:12 936
|
||||
<a href="RocketAmmo.uc">RocketAmmo.uc</a> 01-Jul-2020 18:12 531
|
||||
<a href="RocketAmmoPickup.uc">RocketAmmoPickup.uc</a> 01-Jul-2020 18:12 764
|
||||
<a href="SA80LSW.uc">SA80LSW.uc</a> 01-Jul-2020 18:12 22216
|
||||
<a href="SA80LSWAmmo.uc">SA80LSWAmmo.uc</a> 01-Jul-2020 18:12 314
|
||||
<a href="SA80LSWAmmoPickup.uc">SA80LSWAmmoPickup.uc</a> 01-Jul-2020 18:12 228
|
||||
<a href="SA80LSWAttachment.uc">SA80LSWAttachment.uc</a> 01-Jul-2020 18:12 1953
|
||||
<a href="SA80LSWFire.uc">SA80LSWFire.uc</a> 01-Jul-2020 18:12 1464
|
||||
<a href="SA80LSWPickup.uc">SA80LSWPickup.uc</a> 01-Jul-2020 18:12 931
|
||||
<a href="ScrnVetHeavyMG.uc">ScrnVetHeavyMG.uc</a> 01-Jul-2020 18:12 6842
|
||||
<a href="Stinger.uc">Stinger.uc</a> 01-Jul-2020 18:12 10814
|
||||
<a href="StingerAltFire.uc">StingerAltFire.uc</a> 01-Jul-2020 18:12 5014
|
||||
<a href="StingerAmmo.uc">StingerAmmo.uc</a> 01-Jul-2020 18:12 368
|
||||
<a href="StingerAmmoPickup.uc">StingerAmmoPickup.uc</a> 01-Jul-2020 18:12 239
|
||||
<a href="StingerAttachment.uc">StingerAttachment.uc</a> 01-Jul-2020 18:12 4339
|
||||
<a href="StingerFire.uc">StingerFire.uc</a> 01-Jul-2020 18:12 2667
|
||||
<a href="StingerPickup.uc">StingerPickup.uc</a> 01-Jul-2020 18:12 919
|
||||
<a href="ThompsonH.uc">ThompsonH.uc</a> 01-Jul-2020 18:12 2889
|
||||
<a href="ThompsonHAmmo.uc">ThompsonHAmmo.uc</a> 01-Jul-2020 18:12 558
|
||||
<a href="ThompsonHAmmoPickup.uc">ThompsonHAmmoPickup.uc</a> 01-Jul-2020 18:12 239
|
||||
<a href="ThompsonHAttachment.uc">ThompsonHAttachment.uc</a> 01-Jul-2020 18:12 2033
|
||||
<a href="ThompsonHFire.uc">ThompsonHFire.uc</a> 01-Jul-2020 18:12 1378
|
||||
<a href="ThompsonHPickup.uc">ThompsonHPickup.uc</a> 01-Jul-2020 18:12 1019
|
||||
<a href="XMV850Ammo.uc">XMV850Ammo.uc</a> 01-Jul-2020 18:12 363
|
||||
<a href="XMV850AmmoPickup.uc">XMV850AmmoPickup.uc</a> 01-Jul-2020 18:12 236
|
||||
<a href="XMV850Attachment.uc">XMV850Attachment.uc</a> 01-Jul-2020 18:12 2591
|
||||
<a href="XMV850Fire.uc">XMV850Fire.uc</a> 01-Jul-2020 18:12 1223
|
||||
<a href="XMV850M.uc">XMV850M.uc</a> 01-Jul-2020 18:12 11551
|
||||
<a href="XMV850Pickup.uc">XMV850Pickup.uc</a> 01-Jul-2020 18:12 901
|
||||
</pre><hr></body>
|
||||
</html>
|
||||
Loading…
Add table
Add a link
Reference in a new issue