Prepare fixtures

This commit is contained in:
dkanus 2026-07-14 20:27:09 +07:00
commit 9c94356263
6021 changed files with 722805 additions and 22 deletions

View 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"
}

View 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"
}

View file

@ -0,0 +1,7 @@
class AK47HFire extends AK47Fire;
defaultproperties
{
DamageType=Class'ScrnHMG.DamTypeAK47H'
AmmoClass=Class'ScrnHMG.AK47HAmmo'
}

View 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"
}

View 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"
}

View 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"
}

View 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'
}

View 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
}

View 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
}

View 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
}

View file

@ -0,0 +1,9 @@
class Ak47HAmmoPickup extends KFAmmoPickup;
defaultproperties
{
AmmoAmount=35
InventoryType=Class'ScrnHMG.AK47HAmmo'
PickupMessage="Rounds 7.62mm"
StaticMesh=StaticMesh'KillingFloorStatics.L85Ammo'
}

View file

@ -0,0 +1,6 @@
class BruteGunnerPerkProg extends SRCustomProgressInt;
defaultproperties
{
ProgressName="Heavy MG Damage"
}

View 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'
}

View 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
}

View 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
}

View 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"
}

View 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
}

View 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'
}

View 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
}

View file

@ -0,0 +1,9 @@
class ChainGunPickup extends ChainGunPrimaryPickup;
defaultproperties
{
AmmoCost=20
BuyClipSize=1
SecondaryAmmoShortName="-- Rockets"
PrimaryWeaponPickup=Class'ScrnHMG.ChainGunPrimaryPickup'
}

View 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
}

View 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
}

View 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
}

View 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
}

View file

@ -0,0 +1,7 @@
// Heavy Machinegunners's base damage type
class DamTypeHeavy extends DamTypeHeavyBase
abstract;
defaultproperties
{
}

View 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
{
}

View 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
}

View 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
}

View 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
}

View 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
}

View 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
}

View 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
}

View 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
}

View 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
}

View 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
}

View 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'
}

View 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"
}

View 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'
}

View 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
}

View 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
}

View 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
}

View 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
}

View 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
}

View 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"
}

View 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'
}

View 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
}

View 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
}

View 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"
}

View 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
}

View 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'
}

View 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
}

View 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"
}

View 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
}

View 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'
}

View 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'
}

View 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'
}

View 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
}

View 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"
}

View file

@ -0,0 +1,9 @@
class PKMAmmoPickup extends KFAmmoPickup;
defaultproperties
{
AmmoAmount=65
InventoryType=Class'ScrnHMG.PKMAmmo'
PickupMessage="7.62mm"
StaticMesh=StaticMesh'KillingFloorStatics.L85Ammo'
}

View 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
}

View 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
}

View 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
}

View 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
}

View 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"
}

View file

@ -0,0 +1,9 @@
class RPK47AmmoPickup extends KFAmmoPickup;
defaultproperties
{
AmmoAmount=40
InventoryType=Class'ScrnHMG.RPK47Ammo'
PickupMessage="7.62mm"
StaticMesh=StaticMesh'KillingFloorStatics.L85Ammo'
}

View 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
}

View 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
}

View 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
}

View 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
}

View 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"
}

View 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
}

View 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"
}

View 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"
}

View file

@ -0,0 +1,9 @@
class SA80LSWAmmoPickup extends KFAmmoPickup;
defaultproperties
{
AmmoAmount=60
InventoryType=Class'ScrnHMG.SA80LSWAmmo'
PickupMessage="5.56x45"
StaticMesh=StaticMesh'KillingFloorStatics.L85Ammo'
}

View 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
}

View 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
}

View 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
}

View 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"
}

View 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"
}

View 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
}

View 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"
}

View file

@ -0,0 +1,9 @@
class StingerAmmoPickup extends KFAmmoPickup;
defaultproperties
{
AmmoAmount=123
InventoryType=Class'ScrnHMG.StingerAmmo'
PickupMessage="Tarydium Crystals"
StaticMesh=StaticMesh'KillingFloorStatics.L85Ammo'
}

View 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
}

View 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
}

View 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
}

View 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
}

View 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"
}

View file

@ -0,0 +1,9 @@
class ThompsonHAmmoPickup extends KFAmmoPickup;
defaultproperties
{
AmmoAmount=50
InventoryType=Class'ScrnHMG.ThompsonHAmmo'
PickupMessage="Rounds 45. ACP"
StaticMesh=StaticMesh'KillingFloorStatics.L85Ammo'
}

View 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
}

View 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
}

View 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
}

View 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"
}

View file

@ -0,0 +1,9 @@
class XMV850AmmoPickup extends KFAmmoPickup;
defaultproperties
{
AmmoAmount=120
InventoryType=Class'ScrnHMG.XMV850Ammo'
PickupMessage="Rounds 7.62x51mm"
StaticMesh=StaticMesh'KillingFloorStatics.L85Ammo'
}

View 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
}

View 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
}

View 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
}

View 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
}

View 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>

View file

@ -0,0 +1,7 @@
<html>
<head><title>Index of /kf_sources/ScrnHMG/</title></head>
<body>
<h1>Index of /kf_sources/ScrnHMG/</h1><hr><pre><a href="../">../</a>
<a href="Classes/">Classes/</a> 29-Jun-2025 19:43 -
</pre><hr></body>
</html>