Prepare fixtures
This commit is contained in:
parent
797e5ea192
commit
9c94356263
6021 changed files with 722805 additions and 22 deletions
58
kf_sources/ScrnWeaponPack/Classes/AK12AssaultRifle.uc
Normal file
58
kf_sources/ScrnWeaponPack/Classes/AK12AssaultRifle.uc
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
class AK12AssaultRifle extends AKBaseWeapon;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
ReloadShortAnim="Reload_LLI"
|
||||
ReloadShortRate=2.000000
|
||||
MagCapacity=30
|
||||
ReloadRate=3.000000
|
||||
ReloadAnim="Reload"
|
||||
ReloadAnimRate=1.000000
|
||||
WeaponReloadAnim="Reload_AK47"
|
||||
Weight=6.000000
|
||||
bHasAimingMode=True
|
||||
IdleAimAnim="Idle_Iron"
|
||||
StandardDisplayFOV=55.000000
|
||||
bModeZeroCanDryFire=True
|
||||
SleeveNum=8
|
||||
TraderInfoTexture=Texture'ScrnWeaponPack_T.AK12.AK12_trader'
|
||||
bIsTier3Weapon=True
|
||||
MeshRef="ScrnWeaponPack_A.AK12_mesh"
|
||||
SkinRefs(0)="ScrnWeaponPack_T.AK12.AK12_tex_1_cmb"
|
||||
SkinRefs(1)="ScrnWeaponPack_T.AK12.AK12_tex_2_cmb"
|
||||
SkinRefs(2)="ScrnWeaponPack_T.AK12.AK12_tex_3_cmb"
|
||||
SkinRefs(3)="ScrnWeaponPack_T.AK12.AK12_tex_4_cmb"
|
||||
SkinRefs(4)="ScrnWeaponPack_T.AK12.AK12_tex_5_cmb"
|
||||
SkinRefs(5)="ScrnWeaponPack_T.AK12.AK12_tex_6_cmb"
|
||||
SkinRefs(6)="ScrnWeaponPack_T.AK12.AK12_tex_7_cmb"
|
||||
SkinRefs(7)="ScrnWeaponPack_T.AK12.AK12_aimpoint_sh"
|
||||
SkinRefs(8)="KF_Weapons_Trip_T.hands.hands_1stP_military_cmb"
|
||||
SelectSoundRef="ScrnWeaponPack_SND.AK12.AK12_select"
|
||||
HudImageRef="ScrnWeaponPack_T.AK12.AK12_Unselect"
|
||||
SelectedHudImageRef="ScrnWeaponPack_T.AK12.AK12_select"
|
||||
PlayerIronSightFOV=65.000000
|
||||
ZoomedDisplayFOV=20.000000
|
||||
FireModeClass(0)=Class'ScrnWeaponPack.AK12Fire'
|
||||
FireModeClass(1)=Class'KFMod.NoFire'
|
||||
PutDownAnim="PutDown"
|
||||
SelectAnimRate=1.300000
|
||||
SelectForce="SwitchToAssaultRifle"
|
||||
AIRating=0.550000
|
||||
CurrentRating=0.550000
|
||||
bShowChargingBar=True
|
||||
Description="The Kalashnikov AK-12 (formerly AK-200) is the newest derivative of the Soviet/Russian AK-47 series of assault rifles and was proposed for possible general issue to the Russian Army. This version uses the 5.45x39mm ammo (the same as AK-74)"
|
||||
EffectOffset=(X=100.000000,Y=25.000000,Z=-10.000000)
|
||||
DisplayFOV=55.000000
|
||||
Priority=145
|
||||
CustomCrosshair=11
|
||||
CustomCrossHairTextureName="Crosshairs.HUD.Crosshair_Cross5"
|
||||
InventoryGroup=4
|
||||
GroupOffset=7
|
||||
PickupClass=Class'ScrnWeaponPack.AK12Pickup'
|
||||
PlayerViewOffset=(X=-0.500000,Y=20.000000,Z=-3.000000)
|
||||
BobDamping=6.000000
|
||||
AttachmentClass=Class'ScrnWeaponPack.AK12Attachment'
|
||||
IconCoords=(X1=245,Y1=39,X2=329,Y2=79)
|
||||
ItemName="AK-12 SE"
|
||||
TransientSoundVolume=1.250000
|
||||
}
|
||||
58
kf_sources/ScrnWeaponPack/Classes/AK12Attachment.uc
Normal file
58
kf_sources/ScrnWeaponPack/Classes/AK12Attachment.uc
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
class AK12Attachment extends KFWeaponAttachment;
|
||||
|
||||
simulated function WeaponLight();
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
mMuzFlashClass=Class'ScrnWeaponPack.MuzzleFlashAK12AR'
|
||||
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)="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"
|
||||
MeshRef="ScrnWeaponPack_A.AK12_3rd"
|
||||
bHeavy=True
|
||||
SplashEffect=Class'ROEffects.BulletSplashEmitter'
|
||||
CullDistance=5000.000000
|
||||
}
|
||||
39
kf_sources/ScrnWeaponPack/Classes/AK12Fire.uc
Normal file
39
kf_sources/ScrnWeaponPack/Classes/AK12Fire.uc
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
class AK12Fire extends KFFire;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
FireAimedAnim="Fire_Iron"
|
||||
RecoilRate=0.040000
|
||||
maxVerticalRecoilAngle=250
|
||||
maxHorizontalRecoilAngle=150
|
||||
bRecoilRightOnly=True
|
||||
ShellEjectClass=Class'ScrnWeaponPack.KFShellEjectAK12AR'
|
||||
ShellEjectBoneName="Shell_eject"
|
||||
bAccuracyBonusForSemiAuto=True
|
||||
bRandomPitchFireSound=False
|
||||
FireSoundRef="ScrnWeaponPack_SND.AK12.AK12_shot"
|
||||
StereoFireSoundRef="ScrnWeaponPack_SND.AK12.AK12_shot"
|
||||
NoAmmoSoundRef="ScrnWeaponPack_SND.AK12.AK12_empty"
|
||||
DamageType=Class'ScrnWeaponPack.DamTypeAK12AssaultRifle'
|
||||
DamageMax=50
|
||||
Momentum=18500.000000
|
||||
bPawnRapidFireAnim=True
|
||||
TransientSoundVolume=3.800000
|
||||
FireLoopAnim="Fire"
|
||||
TweenTime=0.025000
|
||||
FireForce="AssaultRifleFire"
|
||||
FireRate=0.095000
|
||||
AmmoClass=Class'ScrnWeaponPack.AK545Ammo'
|
||||
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'ScrnWeaponPack.MuzzleFlashAK12AR'
|
||||
aimerror=42.000000
|
||||
Spread=0.007500
|
||||
SpreadStyle=SS_Random
|
||||
}
|
||||
27
kf_sources/ScrnWeaponPack/Classes/AK12Pickup.uc
Normal file
27
kf_sources/ScrnWeaponPack/Classes/AK12Pickup.uc
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
class AK12Pickup extends KFWeaponPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Weight=6.000000
|
||||
cost=2750
|
||||
AmmoCost=10
|
||||
BuyClipSize=30
|
||||
PowerValue=55
|
||||
SpeedValue=80
|
||||
RangeValue=30
|
||||
Description="The Kalashnikov AK-12 (formerly AK-200) is the newest derivative of the Soviet/Russian AK-47 series of assault rifles and was proposed for possible general issue to the Russian Army. This version uses the 5.45x39mm ammo (the same as AK-74)"
|
||||
ItemName="AK-12 SE"
|
||||
ItemShortName="AK-12 SE"
|
||||
AmmoItemName="5.45x39mm"
|
||||
AmmoMesh=StaticMesh'KillingFloorStatics.L85Ammo'
|
||||
CorrespondingPerkIndex=3
|
||||
EquipmentCategoryID=2
|
||||
InventoryType=Class'ScrnWeaponPack.AK12AssaultRifle'
|
||||
PickupMessage="You got the AK-12"
|
||||
PickupSound=Sound'ScrnWeaponPack_SND.AK12.AK12_select'
|
||||
PickupForce="AssaultRiflePickup"
|
||||
StaticMesh=StaticMesh'ScrnWeaponPack_SM.AK12_st'
|
||||
DrawScale=1.100000
|
||||
CollisionRadius=25.000000
|
||||
CollisionHeight=5.000000
|
||||
}
|
||||
14
kf_sources/ScrnWeaponPack/Classes/AK545Ammo.uc
Normal file
14
kf_sources/ScrnWeaponPack/Classes/AK545Ammo.uc
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
class AK545Ammo extends KFAmmunition;
|
||||
|
||||
#EXEC OBJ LOAD FILE=KillingFloorHUD.utx
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoPickupAmount=30
|
||||
MaxAmmo=300
|
||||
InitialAmount=120
|
||||
PickupClass=Class'ScrnWeaponPack.AK545AmmoPickup'
|
||||
IconMaterial=Texture'KillingFloorHUD.Generic.HUD'
|
||||
IconCoords=(X1=336,Y1=82,X2=382,Y2=125)
|
||||
ItemName="5.45x39mm"
|
||||
}
|
||||
9
kf_sources/ScrnWeaponPack/Classes/AK545AmmoPickup.uc
Normal file
9
kf_sources/ScrnWeaponPack/Classes/AK545AmmoPickup.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
class AK545AmmoPickup extends KFAmmoPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoAmount=30
|
||||
InventoryType=Class'ScrnWeaponPack.AK545Ammo'
|
||||
PickupMessage="Rounds 5.45x39mm"
|
||||
StaticMesh=StaticMesh'KillingFloorStatics.L85Ammo'
|
||||
}
|
||||
462
kf_sources/ScrnWeaponPack/Classes/AKBaseWeapon.uc
Normal file
462
kf_sources/ScrnWeaponPack/Classes/AKBaseWeapon.uc
Normal file
|
|
@ -0,0 +1,462 @@
|
|||
class AKBaseWeapon extends KFWeapon
|
||||
abstract;
|
||||
|
||||
#exec OBJ LOAD FILE=KillingFloorWeapons.utx
|
||||
#exec OBJ LOAD FILE=KillingFloorHUD.utx
|
||||
#exec OBJ LOAD FILE=Inf_Weapons_Foley.uax
|
||||
|
||||
var name ReloadShortAnim;
|
||||
var float ReloadShortRate;
|
||||
|
||||
var transient KFWeaponPickup PendingPickup;
|
||||
var transient bool bShortReload;
|
||||
|
||||
var const int OriginalMaxAmmo;
|
||||
var const bool bSharedAmmoPool;
|
||||
|
||||
var transient class<KFVeterancyTypes> LastClientVeteranSkill;
|
||||
var transient int LastClientVeteranSkillLevel;
|
||||
|
||||
var KFPlayerReplicationInfo OwnerPRI; // don't access it directly! Use GetOwnerPRI() instead.
|
||||
|
||||
simulated function AltFire(float F)
|
||||
{
|
||||
// if(ReadyToFire(0))
|
||||
// {
|
||||
DoToggle();
|
||||
// }
|
||||
}
|
||||
|
||||
exec function SwitchModes()
|
||||
{
|
||||
DoToggle();
|
||||
}
|
||||
|
||||
function byte BestMode()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
simulated function int MaxAmmo(int mode)
|
||||
{
|
||||
if ( Ammo[mode] != none )
|
||||
return Ammo[mode].MaxAmmo;
|
||||
if ( AmmoClass[mode] != None )
|
||||
return AmmoClass[mode].default.MaxAmmo * GetAmmoMulti();
|
||||
return 0;
|
||||
}
|
||||
|
||||
function GiveAmmo(int m, WeaponPickup WP, bool bJustSpawned)
|
||||
{
|
||||
local bool bJustSpawnedAmmo;
|
||||
local int addAmount, InitialAmount;
|
||||
|
||||
UpdateMagCapacity(Instigator.PlayerReplicationInfo);
|
||||
|
||||
if ( FireMode[m] != None && FireMode[m].AmmoClass != None )
|
||||
{
|
||||
Ammo[m] = Ammunition(Instigator.FindInventoryType(FireMode[m].AmmoClass));
|
||||
bJustSpawnedAmmo = false;
|
||||
|
||||
if ( bNoAmmoInstances )
|
||||
{
|
||||
if ( (FireMode[m].AmmoClass == None) || ((m != 0) && (FireMode[m].AmmoClass == FireMode[0].AmmoClass)) )
|
||||
return;
|
||||
|
||||
InitialAmount = FireMode[m].AmmoClass.Default.InitialAmount;
|
||||
|
||||
if(WP!=none && WP.bThrown==true)
|
||||
InitialAmount = WP.AmmoAmount[m];
|
||||
else
|
||||
{
|
||||
// Other change - if not thrown, give the gun a full clip
|
||||
MagAmmoRemaining = MagCapacity;
|
||||
}
|
||||
|
||||
if ( Ammo[m] != None )
|
||||
{
|
||||
addamount = InitialAmount + Ammo[m].AmmoAmount;
|
||||
Ammo[m].Destroy();
|
||||
}
|
||||
else
|
||||
addAmount = InitialAmount;
|
||||
|
||||
AddAmmo(addAmount,m);
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( (Ammo[m] == None) && (FireMode[m].AmmoClass != None) )
|
||||
{
|
||||
Ammo[m] = Spawn(FireMode[m].AmmoClass, Instigator);
|
||||
Instigator.AddInventory(Ammo[m]);
|
||||
bJustSpawnedAmmo = true;
|
||||
}
|
||||
else if ( (m == 0) || (FireMode[m].AmmoClass != FireMode[0].AmmoClass) )
|
||||
bJustSpawnedAmmo = ( bJustSpawned || ((WP != None) && !WP.bWeaponStay) );
|
||||
|
||||
// and here is the modification for instanced ammo actors
|
||||
|
||||
SetMaxAmmo();
|
||||
|
||||
if(WP!=none && WP.bThrown==true)
|
||||
addAmount = WP.AmmoAmount[m];
|
||||
else if ( bJustSpawnedAmmo ) {
|
||||
if (default.MagCapacity == 0)
|
||||
addAmount = 0; // prevent division by zero.
|
||||
else
|
||||
addAmount = Ammo[m].InitialAmount * (float(MagCapacity) / float(default.MagCapacity));
|
||||
}
|
||||
|
||||
// Don't double add ammo if primary and secondary fire modes share the same ammo class
|
||||
if ( WP != none && m > 0 && (FireMode[m].AmmoClass == FireMode[0].AmmoClass) )
|
||||
return;
|
||||
|
||||
Ammo[m].AddAmmo(addAmount);
|
||||
Ammo[m].GotoState('');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
simulated function ClientWeaponSet(bool bPossiblySwitch)
|
||||
{
|
||||
super.ClientWeaponSet(bPossiblySwitch);
|
||||
if ( Instigator != none )
|
||||
SetMaxAmmo();
|
||||
}
|
||||
|
||||
|
||||
simulated function Destroyed()
|
||||
{
|
||||
SetMaxAmmo();
|
||||
super.Destroyed();
|
||||
}
|
||||
|
||||
exec simulated function SetMaxAmmo()
|
||||
{
|
||||
local Inventory Inv;
|
||||
local AKBaseWeapon W;
|
||||
local int c, NewMaxAmmo;
|
||||
local Actor MyOwner;
|
||||
local Ammunition MyAmmo;
|
||||
|
||||
if ( Instigator == none )
|
||||
MyOwner = Instigator;
|
||||
else
|
||||
MyOwner = Owner;
|
||||
|
||||
if ( GetOwnerPRI() != none ) {
|
||||
LastClientVeteranSkill = OwnerPRI.ClientVeteranSkill;
|
||||
LastClientVeteranSkillLevel = OwnerPRI.ClientVeteranSkillLevel;
|
||||
}
|
||||
else
|
||||
LastClientVeteranSkill = none;
|
||||
if ( LastClientVeteranSkill != none )
|
||||
LastAmmoResult = LastClientVeteranSkill.static.AddExtraAmmoFor(OwnerPRI, FireMode[0].AmmoClass);
|
||||
else
|
||||
LastAmmoResult = 1.0;
|
||||
|
||||
MyAmmo = Ammo[0];
|
||||
|
||||
if ( bSharedAmmoPool ) {
|
||||
if ( PendingPickup == none && !bPendingDelete )
|
||||
NewMaxAmmo = OriginalMaxAmmo;
|
||||
for( Inv = MyOwner.Inventory; Inv!=none && (++c)<1000; Inv=Inv.Inventory ) {
|
||||
W = AKBaseWeapon(Inv);
|
||||
if ( W != none && W!= self && !W.bPendingDelete && W.Ammo[0] != none ) {
|
||||
if ( W.Ammo[0] == MyAmmo )
|
||||
NewMaxAmmo += W.OriginalMaxAmmo;
|
||||
else if ( MyAmmo == none && W.Ammo[0].class == FireModeClass[0].default.AmmoClass ) {
|
||||
MyAmmo = W.Ammo[0];
|
||||
NewMaxAmmo += W.OriginalMaxAmmo;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if ( NewMaxAmmo == 0 )
|
||||
NewMaxAmmo = FireMode[0].AmmoClass.default.MaxAmmo;
|
||||
|
||||
if ( MyAmmo != none ) {
|
||||
MyAmmo.MaxAmmo = NewMaxAmmo * LastAmmoResult;
|
||||
LastAmmoResult = float(MyAmmo.MaxAmmo) / MyAmmo.default.MaxAmmo; //used in GetAmmoMulti()
|
||||
if ( MyAmmo.AmmoAmount > MyAmmo.MaxAmmo ) {
|
||||
if ( PendingPickup != none ) {
|
||||
PendingPickup.AmmoAmount[0] += MyAmmo.AmmoAmount - MyAmmo.MaxAmmo;
|
||||
PendingPickup.MagAmmoRemaining = min(MagAmmoRemaining, PendingPickup.AmmoAmount[0]);
|
||||
}
|
||||
MyAmmo.AmmoAmount = MyAmmo.MaxAmmo;
|
||||
}
|
||||
if ( bSharedAmmoPool ) {
|
||||
for( Inv = MyOwner.Inventory; Inv!=none && (++c)<1000; Inv=Inv.Inventory ) {
|
||||
W = AKBaseWeapon(Inv);
|
||||
if ( W != none && W != self ) {
|
||||
W.LastAmmoResult = LastAmmoResult;
|
||||
W.LastClientVeteranSkill = LastClientVeteranSkill;
|
||||
W.LastClientVeteranSkillLevel = LastClientVeteranSkillLevel;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
simulated function float GetAmmoMulti()
|
||||
{
|
||||
if ( GetOwnerPRI() == none ) {
|
||||
LastClientVeteranSkill = none;
|
||||
return 1.0;
|
||||
}
|
||||
if ( OwnerPRI.ClientVeteranSkill != LastClientVeteranSkill || OwnerPRI.ClientVeteranSkillLevel != LastClientVeteranSkillLevel )
|
||||
SetMaxAmmo();
|
||||
|
||||
return LastAmmoResult;
|
||||
}
|
||||
|
||||
simulated function KFPlayerReplicationInfo GetOwnerPRI()
|
||||
{
|
||||
if ( OwnerPRI == none ) {
|
||||
if ( Instigator != none )
|
||||
OwnerPRI = KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo);
|
||||
if ( OwnerPRI == none && Pawn(Owner) != none )
|
||||
OwnerPRI = KFPlayerReplicationInfo(Pawn(Owner).PlayerReplicationInfo);
|
||||
}
|
||||
return OwnerPRI;
|
||||
}
|
||||
|
||||
// ensures that other guns with the same ammunition don't have more bullets in magazine than available
|
||||
simulated function CheckSharedMags()
|
||||
{
|
||||
local int MaxMagAmmo, c;
|
||||
local Inventory Inv;
|
||||
local AKBaseWeapon W;
|
||||
|
||||
if ( !bSharedAmmoPool || Instigator == none || Ammo[0] == none )
|
||||
return;
|
||||
|
||||
MaxMagAmmo = AmmoAmount(0) - MagAmmoRemaining;
|
||||
for( Inv = Instigator.Inventory; Inv!=none && (++c)<1000; Inv=Inv.Inventory ) {
|
||||
W = AKBaseWeapon(Inv);
|
||||
if ( W != none && W!= self && W.Ammo[0] == Ammo[0] ) {
|
||||
if ( W.MagAmmoRemaining > MaxMagAmmo )
|
||||
W.MagAmmoRemaining = min(MaxMagAmmo, W.MagCapacity);
|
||||
MaxMagAmmo -= W.MagAmmoRemaining;
|
||||
if ( MaxMagAmmo < 0)
|
||||
MaxMagAmmo = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
simulated function GetAmmoCount(out float MaxAmmoPrimary, out float CurAmmoPrimary)
|
||||
{
|
||||
if ( Ammo[0] != None ) {
|
||||
MaxAmmoPrimary = Ammo[0].MaxAmmo;
|
||||
CurAmmoPrimary = Ammo[0].AmmoAmount;
|
||||
}
|
||||
else {
|
||||
MaxAmmoPrimary = 0;
|
||||
CurAmmoPrimary = 0;
|
||||
}
|
||||
}
|
||||
|
||||
function DropFrom(vector StartLocation)
|
||||
{
|
||||
local int m;
|
||||
local Pickup Pickup;
|
||||
local vector Direction;
|
||||
|
||||
if (!bCanThrow)
|
||||
return;
|
||||
|
||||
ClientWeaponThrown();
|
||||
|
||||
for (m = 0; m < NUM_FIRE_MODES; m++)
|
||||
{
|
||||
if (FireMode[m].bIsFiring)
|
||||
StopFire(m);
|
||||
}
|
||||
|
||||
if ( Instigator != None )
|
||||
{
|
||||
DetachFromPawn(Instigator);
|
||||
Direction = vector(Instigator.Rotation);
|
||||
}
|
||||
else if ( Owner != none )
|
||||
{
|
||||
Direction = vector(Owner.Rotation);
|
||||
}
|
||||
|
||||
Pickup = Spawn(PickupClass,,, StartLocation);
|
||||
if ( Pickup != None )
|
||||
{
|
||||
Pickup.InitDroppedPickupFor(self);
|
||||
Pickup.Velocity = Velocity + (Direction * 100);
|
||||
if (Instigator.Health > 0)
|
||||
WeaponPickup(Pickup).bThrown = true;
|
||||
}
|
||||
PendingPickup = KFWeaponPickup(Pickup);
|
||||
|
||||
Destroy();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
// copy-pasted to add (MagCapacity+1)
|
||||
simulated function bool AllowReload()
|
||||
{
|
||||
UpdateMagCapacity(Instigator.PlayerReplicationInfo);
|
||||
|
||||
if ( KFInvasionBot(Instigator.Controller) != none && !bIsReloading &&
|
||||
MagAmmoRemaining < MagCapacity && AmmoAmount(0) > MagAmmoRemaining )
|
||||
return true;
|
||||
|
||||
if ( KFFriendlyAI(Instigator.Controller) != none && !bIsReloading &&
|
||||
MagAmmoRemaining < MagCapacity && AmmoAmount(0) > MagAmmoRemaining )
|
||||
return true;
|
||||
|
||||
|
||||
if( FireMode[0].IsFiring() || FireMode[1].IsFiring() ||
|
||||
bIsReloading || MagAmmoRemaining >= MagCapacity ||
|
||||
ClientState == WS_BringUp ||
|
||||
AmmoAmount(0) <= MagAmmoRemaining ||
|
||||
(FireMode[0].NextFireTime - Level.TimeSeconds) > 0.1 )
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
exec function ReloadMeNow()
|
||||
{
|
||||
local float ReloadMulti;
|
||||
|
||||
if(!AllowReload())
|
||||
return;
|
||||
if ( bHasAimingMode && bAimingRifle )
|
||||
{
|
||||
FireMode[1].bIsFiring = False;
|
||||
|
||||
ZoomOut(false);
|
||||
if( Role < ROLE_Authority)
|
||||
ServerZoomOut(false);
|
||||
}
|
||||
if ( GetOwnerPRI() != none && OwnerPRI.ClientVeteranSkill != none )
|
||||
{
|
||||
ReloadMulti = OwnerPRI.ClientVeteranSkill.Static.GetReloadSpeedModifier(OwnerPRI, self);
|
||||
}
|
||||
else
|
||||
{
|
||||
ReloadMulti = 1.0;
|
||||
}
|
||||
bIsReloading = true;
|
||||
ReloadTimer = Level.TimeSeconds;
|
||||
bShortReload = MagAmmoRemaining > 0;
|
||||
if ( bShortReload )
|
||||
ReloadRate = Default.ReloadShortRate / ReloadMulti;
|
||||
else
|
||||
ReloadRate = Default.ReloadRate / ReloadMulti;
|
||||
|
||||
if( bHoldToReload )
|
||||
{
|
||||
NumLoadedThisReload = 0;
|
||||
}
|
||||
ClientReload();
|
||||
Instigator.SetAnimAction(WeaponReloadAnim);
|
||||
if ( Level.Game.NumPlayers > 1 && KFGameType(Level.Game).bWaveInProgress && KFPlayerController(Instigator.Controller) != none &&
|
||||
Level.TimeSeconds - KFPlayerController(Instigator.Controller).LastReloadMessageTime > KFPlayerController(Instigator.Controller).ReloadMessageDelay )
|
||||
{
|
||||
KFPlayerController(Instigator.Controller).Speech('AUTO', 2, "");
|
||||
KFPlayerController(Instigator.Controller).LastReloadMessageTime = Level.TimeSeconds;
|
||||
}
|
||||
}
|
||||
|
||||
simulated function ClientReload()
|
||||
{
|
||||
local float ReloadMulti;
|
||||
if ( bHasAimingMode && bAimingRifle )
|
||||
{
|
||||
FireMode[1].bIsFiring = False;
|
||||
|
||||
ZoomOut(false);
|
||||
if( Role < ROLE_Authority)
|
||||
ServerZoomOut(false);
|
||||
}
|
||||
if ( GetOwnerPRI() != none && OwnerPRI.ClientVeteranSkill != none )
|
||||
ReloadMulti = OwnerPRI.ClientVeteranSkill.Static.GetReloadSpeedModifier(OwnerPRI, self);
|
||||
else
|
||||
ReloadMulti = 1.0;
|
||||
bIsReloading = true;
|
||||
if (MagAmmoRemaining <= 0)
|
||||
{
|
||||
PlayAnim(ReloadAnim, ReloadAnimRate*ReloadMulti, 0.1);
|
||||
}
|
||||
else if (MagAmmoRemaining >= 1)
|
||||
{
|
||||
PlayAnim(ReloadShortAnim, ReloadAnimRate*ReloadMulti, 0.1);
|
||||
}
|
||||
}
|
||||
|
||||
function AddReloadedAmmo()
|
||||
{
|
||||
local int a;
|
||||
|
||||
UpdateMagCapacity(Instigator.PlayerReplicationInfo);
|
||||
|
||||
a = MagCapacity;
|
||||
if ( bShortReload )
|
||||
a++; // 1 bullet already bolted
|
||||
|
||||
if ( AmmoAmount(0) >= a )
|
||||
MagAmmoRemaining = a;
|
||||
else
|
||||
MagAmmoRemaining = AmmoAmount(0);
|
||||
|
||||
// this seems redudant -- PooSH
|
||||
// if( !bHoldToReload )
|
||||
// {
|
||||
// ClientForceKFAmmoUpdate(MagAmmoRemaining,AmmoAmount(0));
|
||||
// }
|
||||
|
||||
if ( PlayerController(Instigator.Controller) != none && KFSteamStatsAndAchievements(PlayerController(Instigator.Controller).SteamStatsAndAchievements) != none )
|
||||
{
|
||||
KFSteamStatsAndAchievements(PlayerController(Instigator.Controller).SteamStatsAndAchievements).OnWeaponReloaded();
|
||||
}
|
||||
}
|
||||
|
||||
simulated function ActuallyFinishReloading()
|
||||
{
|
||||
super.ActuallyFinishReloading();
|
||||
if ( bSharedAmmoPool )
|
||||
CheckSharedMags();
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
ReloadShortAnim="Reload"
|
||||
ReloadShortRate=3.000000
|
||||
OriginalMaxAmmo=300
|
||||
bSharedAmmoPool=True
|
||||
}
|
||||
127
kf_sources/ScrnWeaponPack/Classes/AKC74AssaultRifle.uc
Normal file
127
kf_sources/ScrnWeaponPack/Classes/AKC74AssaultRifle.uc
Normal file
|
|
@ -0,0 +1,127 @@
|
|||
class AKC74AssaultRifle extends AKBaseWeapon
|
||||
config(user);
|
||||
|
||||
simulated function Notify_ShowBullets()
|
||||
{
|
||||
if ( !Instigator.IsLocallyControlled() )
|
||||
return ;
|
||||
if (AmmoAmount(0) == 0)
|
||||
{
|
||||
SetBoneScale (0, 0.0, 'bullet1');
|
||||
SetBoneScale (1, 0.0, 'bullet2');
|
||||
SetBoneScale (2, 0.0, 'bullet3');
|
||||
SetBoneScale (3, 0.0, 'bullet4');
|
||||
}
|
||||
else if (AmmoAmount(0) == 1)
|
||||
{
|
||||
SetBoneScale (0, 1.0, 'bullet1');
|
||||
SetBoneScale (1, 0.0, 'bullet2');
|
||||
SetBoneScale (2, 0.0, 'bullet3');
|
||||
SetBoneScale (3, 0.0, 'bullet4');
|
||||
}
|
||||
else if (AmmoAmount(0) == 2)
|
||||
{
|
||||
SetBoneScale (0, 1.0, 'bullet1');
|
||||
SetBoneScale (1, 1.0, 'bullet2');
|
||||
SetBoneScale (2, 0.0, 'bullet3');
|
||||
SetBoneScale (3, 0.0, 'bullet4');
|
||||
}
|
||||
else if (AmmoAmount(0) == 3)
|
||||
{
|
||||
SetBoneScale (0, 1.0, 'bullet1');
|
||||
SetBoneScale (1, 1.0, 'bullet2');
|
||||
SetBoneScale (2, 1.0, 'bullet3');
|
||||
SetBoneScale (3, 0.0, 'bullet4');
|
||||
}
|
||||
else if (AmmoAmount(0) >= 4)
|
||||
{
|
||||
SetBoneScale (0, 1.0, 'bullet1');
|
||||
SetBoneScale (1, 1.0, 'bullet2');
|
||||
SetBoneScale (2, 1.0, 'bullet3');
|
||||
SetBoneScale (3, 1.0, 'bullet4');
|
||||
}
|
||||
}
|
||||
|
||||
simulated function Notify_HideBullets()
|
||||
{
|
||||
if ( !Instigator.IsLocallyControlled() )
|
||||
return ;
|
||||
if (MagAmmoRemaining <= 1)
|
||||
{
|
||||
SetBoneScale (0, 0.0, 'bullet1');
|
||||
SetBoneScale (1, 0.0, 'bullet2');
|
||||
SetBoneScale (2, 0.0, 'bullet3');
|
||||
SetBoneScale (3, 0.0, 'bullet4');
|
||||
}
|
||||
else if (MagAmmoRemaining == 2)
|
||||
{
|
||||
SetBoneScale (0, 1.0, 'bullet1');
|
||||
SetBoneScale (1, 0.0, 'bullet2');
|
||||
SetBoneScale (2, 0.0, 'bullet3');
|
||||
SetBoneScale (3, 0.0, 'bullet4');
|
||||
}
|
||||
else if (MagAmmoRemaining == 3)
|
||||
{
|
||||
SetBoneScale (0, 1.0, 'bullet1');
|
||||
SetBoneScale (1, 1.0, 'bullet2');
|
||||
SetBoneScale (2, 0.0, 'bullet3');
|
||||
SetBoneScale (3, 0.0, 'bullet4');
|
||||
}
|
||||
else if (MagAmmoRemaining >= 4)
|
||||
{
|
||||
SetBoneScale (0, 1.0, 'bullet1');
|
||||
SetBoneScale (1, 1.0, 'bullet2');
|
||||
SetBoneScale (2, 0.0, 'bullet3');
|
||||
SetBoneScale (3, 0.0, 'bullet4');
|
||||
}
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
ReloadShortRate=2.000000
|
||||
MagCapacity=30
|
||||
ReloadRate=3.000000
|
||||
ReloadAnim="Reload"
|
||||
ReloadAnimRate=1.000000
|
||||
WeaponReloadAnim="Reload_AK47"
|
||||
Weight=5.000000
|
||||
bHasAimingMode=True
|
||||
IdleAimAnim="Iron_Idle"
|
||||
StandardDisplayFOV=65.000000
|
||||
bModeZeroCanDryFire=True
|
||||
TraderInfoTexture=Texture'ScrnWeaponPack_T.AK74.AKC74_Trader'
|
||||
bIsTier2Weapon=True
|
||||
MeshRef="ScrnWeaponPack_A.akc74mesh"
|
||||
SkinRefs(0)="ScrnWeaponPack_T.AK74.wpn_ak74"
|
||||
SkinRefs(1)="KF_Weapons_Trip_T.hands.hands_1stP_military_cmb"
|
||||
SkinRefs(2)="ScrnWeaponPack_T.AK74.wpn_ak74_1"
|
||||
SkinRefs(3)="ScrnWeaponPack_T.AK12.AK12_tex_4_cmb"
|
||||
SelectSoundRef="ScrnWeaponPack_SND.AK74.akc74_draw"
|
||||
HudImageRef="ScrnWeaponPack_T.AK74.AKC74_Unselected"
|
||||
SelectedHudImageRef="ScrnWeaponPack_T.AK74.AKC74_selected"
|
||||
PlayerIronSightFOV=65.000000
|
||||
ZoomedDisplayFOV=42.000000
|
||||
FireModeClass(0)=Class'ScrnWeaponPack.AKC74Fire'
|
||||
FireModeClass(1)=Class'KFMod.NoFire'
|
||||
PutDownAnim="PutDown"
|
||||
SelectAnimRate=1.000000
|
||||
SelectForce="SwitchToAssaultRifle"
|
||||
AIRating=0.550000
|
||||
CurrentRating=0.550000
|
||||
bShowChargingBar=True
|
||||
Description="The AK-74 is an assault rifle developed in the early 1970s in the Soviet Union as the replacement for the earlier AKM (itself a refined version of the AK-47). It uses a smaller intermediate cartridge, the 5.45x39mm, replacing the 7.62x39mm chambering of earlier Kalashnikov-pattern weapons. Smaller ammunition lowers damage, but makes weapon lighter."
|
||||
EffectOffset=(X=100.000000,Y=25.000000,Z=-10.000000)
|
||||
DisplayFOV=65.000000
|
||||
Priority=100
|
||||
CustomCrosshair=11
|
||||
CustomCrossHairTextureName="Crosshairs.HUD.Crosshair_Cross5"
|
||||
InventoryGroup=3
|
||||
GroupOffset=7
|
||||
PickupClass=Class'ScrnWeaponPack.AKC74Pickup'
|
||||
PlayerViewOffset=(X=35.000000,Y=22.000000,Z=-6.000000)
|
||||
BobDamping=5.000000
|
||||
AttachmentClass=Class'ScrnWeaponPack.AKC74Attachment'
|
||||
IconCoords=(X1=245,Y1=39,X2=329,Y2=79)
|
||||
ItemName="AK-74 SE"
|
||||
TransientSoundVolume=1.250000
|
||||
}
|
||||
69
kf_sources/ScrnWeaponPack/Classes/AKC74Attachment.uc
Normal file
69
kf_sources/ScrnWeaponPack/Classes/AKC74Attachment.uc
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
class AKC74Attachment extends KFWeaponAttachment;
|
||||
|
||||
simulated function DoFlashEmitter()
|
||||
{
|
||||
if (mMuzFlash3rd == None)
|
||||
{
|
||||
mMuzFlash3rd = Spawn(mMuzFlashClass);
|
||||
AttachToBone(mMuzFlash3rd, 'wpn_silencer');
|
||||
}
|
||||
if(mMuzFlash3rd != None)
|
||||
mMuzFlash3rd.SpawnParticle(1);
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
mMuzFlashClass=Class'ROEffects.MuzzleFlash3rdMP'
|
||||
mTracerClass=Class'KFMod.KFNewTracer'
|
||||
mShellCaseEmitterClass=Class'KFMod.KFShellSpewer'
|
||||
ShellEjectBoneName="wpn_scope"
|
||||
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"
|
||||
MeshRef="ScrnWeaponPack_A.AKC74_3rd"
|
||||
bHeavy=True
|
||||
SplashEffect=Class'ROEffects.BulletSplashEmitter'
|
||||
CullDistance=5000.000000
|
||||
DrawScale=0.700000
|
||||
}
|
||||
40
kf_sources/ScrnWeaponPack/Classes/AKC74Fire.uc
Normal file
40
kf_sources/ScrnWeaponPack/Classes/AKC74Fire.uc
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
class AKC74Fire extends KFFire;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
FireAimedAnim="Fire_Iron"
|
||||
RecoilRate=0.040000
|
||||
maxVerticalRecoilAngle=400
|
||||
maxHorizontalRecoilAngle=200
|
||||
bRecoilRightOnly=True
|
||||
ShellEjectClass=Class'ROEffects.KFShellEjectAK'
|
||||
ShellEjectBoneName="Shell_eject"
|
||||
bAccuracyBonusForSemiAuto=True
|
||||
bRandomPitchFireSound=False
|
||||
FireSoundRef="ScrnWeaponPack_SND.AK74.akc74_shoot_mono"
|
||||
StereoFireSoundRef="ScrnWeaponPack_SND.AK74.akc74_shoot_stereo"
|
||||
NoAmmoSoundRef="ScrnWeaponPack_SND.AK74.akc74__empty"
|
||||
DamageType=Class'ScrnWeaponPack.DamTypeAK74AssaultRifle'
|
||||
DamageMin=42
|
||||
DamageMax=42
|
||||
Momentum=9500.000000
|
||||
bPawnRapidFireAnim=True
|
||||
TransientSoundVolume=1.800000
|
||||
FireLoopAnim="Fire"
|
||||
TweenTime=0.025000
|
||||
FireForce="AssaultRifleFire"
|
||||
FireRate=0.104000
|
||||
AmmoClass=Class'ScrnWeaponPack.AK545Ammo'
|
||||
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.MuzzleFlash1stSTG'
|
||||
aimerror=42.000000
|
||||
Spread=0.010000
|
||||
SpreadStyle=SS_Random
|
||||
}
|
||||
26
kf_sources/ScrnWeaponPack/Classes/AKC74Pickup.uc
Normal file
26
kf_sources/ScrnWeaponPack/Classes/AKC74Pickup.uc
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
class AKC74Pickup extends KFWeaponPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Weight=5.000000
|
||||
cost=1150
|
||||
AmmoCost=10
|
||||
BuyClipSize=30
|
||||
PowerValue=44
|
||||
SpeedValue=90
|
||||
RangeValue=50
|
||||
Description="The AK-74 is an assault rifle developed in the early 1970s in the Soviet Union as the replacement for the earlier AKM (itself a refined version of the AK-47). It uses a smaller intermediate cartridge, the 5.45x39mm, replacing the 7.62x39mm chambering of earlier Kalashnikov-pattern weapons. Smaller ammunition lowers damage, but makes weapon lighter."
|
||||
ItemName="AK-74 SE"
|
||||
ItemShortName="AK-74 SE"
|
||||
AmmoItemName="5.45x39mm"
|
||||
AmmoMesh=StaticMesh'KillingFloorStatics.L85Ammo'
|
||||
CorrespondingPerkIndex=3
|
||||
EquipmentCategoryID=2
|
||||
InventoryType=Class'ScrnWeaponPack.AKC74AssaultRifle'
|
||||
PickupMessage="You've got a AK-74"
|
||||
PickupSound=Sound'ScrnWeaponPack_SND.AK74.akc74_holster'
|
||||
PickupForce="AssaultRiflePickup"
|
||||
StaticMesh=StaticMesh'ScrnWeaponPack_SM.AKC74_ST'
|
||||
CollisionRadius=25.000000
|
||||
CollisionHeight=5.000000
|
||||
}
|
||||
158
kf_sources/ScrnWeaponPack/Classes/BallisticEmitter.uc
Normal file
158
kf_sources/ScrnWeaponPack/Classes/BallisticEmitter.uc
Normal file
|
|
@ -0,0 +1,158 @@
|
|||
//=============================================================================
|
||||
// BallisticEmitter.
|
||||
//
|
||||
// A Base class for Ballistic Emitters. Includes some default functionality:
|
||||
// -Disables individual particle emitters depedning on effects detail.
|
||||
// -Use EmitterZTestSwitches to auto set ZTest if you want it to be different
|
||||
// depending on players seeing emitter or not.
|
||||
// -Static function, VtoRV() can turn min and max vectors into a range vector
|
||||
// -Static function, ScaleRV() scales a range vector
|
||||
// -Static function, ScaleEmitter() scales an entire emitter (very handy!)
|
||||
// -static function, KillEmitter() is can smoothly remove an emitter instead of
|
||||
// using Destroy(). Obsolete now since Kill() was added...
|
||||
//
|
||||
// by Nolan "Dark Carnivour" Richert.
|
||||
// Copyright(c) 2006 RuneStorm. All Rights Reserved.
|
||||
//=============================================================================
|
||||
class BallisticEmitter extends Emitter
|
||||
placeable;
|
||||
|
||||
enum EZTestMode // ZTest switch settings...
|
||||
{
|
||||
ZM_None, // Don't do anything
|
||||
ZM_OnWhenVisible, // Set ZTest on if the emitter is visible
|
||||
ZM_OffWhenVisible // Set ZTest off if this emitter is visible
|
||||
};
|
||||
var() array<EZTestMode> EmitterZTestSwitches; // Swithes to change ZTest of each emitter depending on LOS
|
||||
|
||||
simulated event PostBeginPlay()
|
||||
{
|
||||
local int i;
|
||||
local bool bLOS;
|
||||
|
||||
super.PostBeginPlay();
|
||||
if (EmitterZTestSwitches.length > 0)
|
||||
{
|
||||
bLOS = Level.GetLocalPlayerController().LineOfSightTo(self);
|
||||
for (i=0;i<Min(EmitterZTestSwitches.length, Emitters.length);i++)
|
||||
{
|
||||
if (EmitterZTestSwitches[i] == ZM_None)
|
||||
continue;
|
||||
if (bLOS)
|
||||
Emitters[i].ZTest = EmitterZTestSwitches[i] == ZM_OnWhenVisible;
|
||||
else
|
||||
Emitters[i].ZTest = EmitterZTestSwitches[i] == ZM_OffWhenVisible;
|
||||
// else if (EmitterZTestSwitches[i] == ZM_OnWhenVisible)
|
||||
// Emitters[i].ZTest = PlayerCanSeeMe();
|
||||
// else if (EmitterZTestSwitches[i] == ZM_OffWhenVisible)
|
||||
// Emitters[i].ZTest = !PlayerCanSeeMe();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//FIXME
|
||||
simulated function InvertY()
|
||||
{
|
||||
local int i;
|
||||
for (i=0;i<Emitters.length;i++)
|
||||
Emitters[i].StartLocationOffset.Y *= -1;
|
||||
}
|
||||
|
||||
// Returns a nice neat RangeVector made of two input vectors, Min and Max.
|
||||
static function RangeVector VtoRV (Vector Max, Vector Min)
|
||||
{
|
||||
local RangeVector RV;
|
||||
RV.X.Max = Max.X; RV.X.Min = Min.X; RV.Y.Max = Max.Y; RV.Y.Min = Min.Y; RV.Z.Max = Max.Z; RV.Z.Min = Min.Z;
|
||||
return RV;
|
||||
}
|
||||
// Scales a RangeVector
|
||||
static function ScaleRV (out RangeVector RV, float Scale)
|
||||
{
|
||||
RV.X.Max*=Scale; RV.Y.Max*=Scale; RV.Z.Max*=Scale;
|
||||
RV.X.Min*=Scale; RV.Y.Min*=Scale; RV.Z.Min*=Scale;
|
||||
}
|
||||
|
||||
// Scales the parameters of an emitter to resize it
|
||||
static function ScaleEmitter (Emitter TheOne, float Scale)
|
||||
{
|
||||
local int i, j;
|
||||
|
||||
for (i=0;i<TheOne.Emitters.Length;i++)
|
||||
{
|
||||
ScaleRV (TheOne.Emitters[i].StartVelocityRange, Scale);
|
||||
TheOne.Emitters[i].SphereRadiusRange.Min*=Scale; TheOne.Emitters[i].SphereRadiusRange.Max*=Scale;
|
||||
TheOne.Emitters[i].StartVelocityRadialRange.Min*=Scale; TheOne.Emitters[i].StartVelocityRadialRange.Max*=Scale;
|
||||
TheOne.Emitters[i].MaxAbsVelocity *= Scale;
|
||||
ScaleRV (TheOne.Emitters[i].StartSizeRange, Scale);
|
||||
TheOne.Emitters[i].Acceleration *= Scale;
|
||||
ScaleRV (TheOne.Emitters[i].StartLocationRange, Scale);
|
||||
TheOne.Emitters[i].StartLocationOffset *= Scale;
|
||||
ScaleRV (TheOne.Emitters[i].MeshScaleRange, Scale);
|
||||
ScaleRV (TheOne.Emitters[i].VelocityScaleRange, Scale);
|
||||
ScaleRV (TheOne.Emitters[i].VelocityLossRange, Scale);
|
||||
if (BeamEmitter(TheOne.Emitters[i]) != None)
|
||||
{
|
||||
for (j=0;j<BeamEmitter(TheOne.Emitters[i]).BeamEndPoints.length;j++)
|
||||
ScaleRV (BeamEmitter(TheOne.Emitters[i]).BeamEndPoints[j].Offset, Scale);
|
||||
ScaleRV (BeamEmitter(TheOne.Emitters[i]).LowFrequencyNoiseRange, Scale);
|
||||
ScaleRV (BeamEmitter(TheOne.Emitters[i]).HighFrequencyNoiseRange, Scale);
|
||||
ScaleRV (BeamEmitter(TheOne.Emitters[i]).DynamicHFNoiseRange, Scale);
|
||||
BeamEmitter(TheOne.Emitters[i]).BeamDistanceRange.Max *= Scale; BeamEmitter(TheOne.Emitters[i]).BeamDistanceRange.Min *= Scale;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Instead of destroying emitters, we can use this to gracefully make them go away
|
||||
static function KillEmitter (Emitter TheOne)
|
||||
{
|
||||
local int i;
|
||||
|
||||
TheOne.AutoDestroy = True;
|
||||
for (i=0; i<TheOne.Emitters.Length; i++)
|
||||
{
|
||||
TheOne.Emitters[i].AutoDestroy = True;
|
||||
TheOne.Emitters[i].AutomaticInitialSpawning = False;
|
||||
TheOne.Emitters[i].RespawnDeadParticles = False;
|
||||
TheOne.Emitters[i].InitialParticlesPerSecond = 0;
|
||||
TheOne.Emitters[i].ParticlesPerSecond = 0;
|
||||
TheOne.Emitters[i].TriggerDisabled=true;
|
||||
// TheOne.Emitters[i].SpawnOnTriggerRange.Min=0;
|
||||
// TheOne.Emitters[i].SpawnOnTriggerRange.Max=0;
|
||||
}
|
||||
}
|
||||
|
||||
// Make the emitter stop producing particles
|
||||
static function StopParticles (Emitter TheOne)
|
||||
{
|
||||
local int i;
|
||||
|
||||
TheOne.AutoDestroy = false;
|
||||
for (i=0; i<TheOne.Emitters.Length; i++)
|
||||
{
|
||||
TheOne.Emitters[i].AutoDestroy = false;
|
||||
TheOne.Emitters[i].AutomaticInitialSpawning = false;
|
||||
TheOne.Emitters[i].RespawnDeadParticles = false;
|
||||
TheOne.Emitters[i].InitialParticlesPerSecond = 0;
|
||||
TheOne.Emitters[i].ParticlesPerSecond = 0;
|
||||
TheOne.Emitters[i].TriggerDisabled=true;
|
||||
}
|
||||
}
|
||||
|
||||
// Make the emitter start producing particles again
|
||||
static function ResumeParticles (Emitter TheOne)
|
||||
{
|
||||
local int i;
|
||||
|
||||
for (i=0; i<TheOne.Emitters.Length; i++)
|
||||
{
|
||||
TheOne.Emitters[i].AutomaticInitialSpawning = TheOne.Emitters[i].default.AutomaticInitialSpawning;
|
||||
TheOne.Emitters[i].RespawnDeadParticles = TheOne.Emitters[i].default.RespawnDeadParticles;
|
||||
TheOne.Emitters[i].InitialParticlesPerSecond = TheOne.Emitters[i].default.InitialParticlesPerSecond;
|
||||
TheOne.Emitters[i].ParticlesPerSecond = TheOne.Emitters[i].default.ParticlesPerSecond;
|
||||
TheOne.Emitters[i].TriggerDisabled = TheOne.Emitters[i].default.TriggerDisabled;
|
||||
}
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
}
|
||||
507
kf_sources/ScrnWeaponPack/Classes/CZ805M.uc
Normal file
507
kf_sources/ScrnWeaponPack/Classes/CZ805M.uc
Normal file
|
|
@ -0,0 +1,507 @@
|
|||
class CZ805M extends MP7MMedicGun;
|
||||
|
||||
var int MaxHealAmmo;
|
||||
|
||||
var MedicDartAttachment FakedHealDartAttach; //faked healing dart attachment
|
||||
|
||||
var name ReloadShortAnim;
|
||||
var float ReloadShortRate;
|
||||
|
||||
var transient bool bShortReload;
|
||||
|
||||
simulated function PostBeginPlay()
|
||||
{
|
||||
super.PostBeginPlay();
|
||||
|
||||
if ( Level.NetMode != NM_DedicatedServer ) {
|
||||
if ( FakedHealDartAttach == none )
|
||||
FakedHealDartAttach = spawn(class'MedicDartAttachment',self);
|
||||
if ( FakedHealDartAttach != none ) {
|
||||
FakedHealDartAttach.SetDrawScale(4.0); //scale
|
||||
AttachToBone(FakedHealDartAttach, 'body'); //attach to the CZ805M main bone, 'body'
|
||||
FakedHealDartAttach.SetRelativeRotation(rot(-250,-16834,0)); //pitch yaw roll
|
||||
FakedHealDartAttach.SetRelativeLocation(vect(1.14, 9.5, 1.13)); //x y z
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//destroy it
|
||||
simulated function Destroyed()
|
||||
{
|
||||
if ( FakedHealDartAttach != None )
|
||||
FakedHealDartAttach.Destroy();
|
||||
super.Destroyed();
|
||||
}
|
||||
|
||||
//hides mag1 bullets when firing, bullets 1 to 10 are in the magwell so you'll never see them though, bullets 11 to 30 are scaled according to magazine size
|
||||
simulated function Notify_HideBullets()
|
||||
{
|
||||
local float MagFloat;
|
||||
local int MyAmmos;
|
||||
|
||||
//don't do any of this stuff on servers
|
||||
if ( (Level.NetMode == NM_DedicatedServer) || (AIController(Instigator.Controller) != None) )
|
||||
return;
|
||||
|
||||
MyAmmos = MagAmmoRemaining;
|
||||
if (MyAmmos > 9)
|
||||
{
|
||||
MagFloat = float(MyAmmos-10)/(MagCapacity-10);
|
||||
}
|
||||
if (MyAmmos < 1)
|
||||
SetBoneScale(1, 0.0, 'mag1b1');
|
||||
if (MyAmmos < 2)
|
||||
SetBoneScale(2, 0.0, 'mag1b2');
|
||||
if (MyAmmos < 3)
|
||||
SetBoneScale(3, 0.0, 'mag1b3');
|
||||
if (MyAmmos < 4)
|
||||
SetBoneScale(4, 0.0, 'mag1b4');
|
||||
if (MyAmmos < 5)
|
||||
SetBoneScale(5, 0.0, 'mag1b5');
|
||||
if (MyAmmos < 6)
|
||||
SetBoneScale(6, 0.0, 'mag1b6');
|
||||
if (MyAmmos < 7)
|
||||
SetBoneScale(7, 0.0, 'mag1b7');
|
||||
if (MyAmmos < 8)
|
||||
SetBoneScale(8, 0.0, 'mag1b8');
|
||||
if (MyAmmos < 9)
|
||||
SetBoneScale(9, 0.0, 'mag1b9');
|
||||
if (MyAmmos < 10)
|
||||
SetBoneScale(10, 0.0, 'mag1b10');
|
||||
if (MagFloat < 0.05)
|
||||
SetBoneScale(11, 0.0, 'mag1b11');
|
||||
if (MagFloat < 0.1)
|
||||
SetBoneScale(12, 0.0, 'mag1b12');
|
||||
if (MagFloat < 0.15)
|
||||
SetBoneScale(13, 0.0, 'mag1b13');
|
||||
if (MagFloat < 0.2)
|
||||
SetBoneScale(14, 0.0, 'mag1b14');
|
||||
if (MagFloat < 0.25)
|
||||
SetBoneScale(15, 0.0, 'mag1b15');
|
||||
if (MagFloat < 0.3)
|
||||
SetBoneScale(16, 0.0, 'mag1b16');
|
||||
if (MagFloat < 0.35)
|
||||
SetBoneScale(17, 0.0, 'mag1b17');
|
||||
if (MagFloat < 0.40)
|
||||
SetBoneScale(18, 0.0, 'mag1b18');
|
||||
if (MagFloat < 0.45)
|
||||
SetBoneScale(19, 0.0, 'mag1b19');
|
||||
if (MagFloat < 0.50)
|
||||
SetBoneScale(20, 0.0, 'mag1b20');
|
||||
if (MagFloat < 0.55)
|
||||
SetBoneScale(21, 0.0, 'mag1b21');
|
||||
if (MagFloat < 0.60)
|
||||
SetBoneScale(22, 0.0, 'mag1b22');
|
||||
if (MagFloat < 0.65)
|
||||
SetBoneScale(23, 0.0, 'mag1b23');
|
||||
if (MagFloat < 0.70)
|
||||
SetBoneScale(24, 0.0, 'mag1b24');
|
||||
if (MagFloat < 0.75)
|
||||
SetBoneScale(25, 0.0, 'mag1b25');
|
||||
if (MagFloat < 0.80)
|
||||
SetBoneScale(26, 0.0, 'mag1b26');
|
||||
if (MagFloat < 0.85)
|
||||
SetBoneScale(27, 0.0, 'mag1b27');
|
||||
if (MagFloat < 0.90)
|
||||
SetBoneScale(28, 0.0, 'mag1b28');
|
||||
if (MagFloat < 0.95)
|
||||
SetBoneScale(29, 0.0, 'mag1b29');
|
||||
if (MagFloat < 1.00)
|
||||
SetBoneScale(30, 0.0, 'mag1b30');
|
||||
}
|
||||
|
||||
//mag2 gets mag1 bullets on reload start and mag1 gets fresh bullets
|
||||
simulated function Notify_ReloadStarted()
|
||||
{
|
||||
local float MagFloat;
|
||||
local int MyAmmos;
|
||||
local float AmmoFloat;
|
||||
|
||||
if ( (Level.NetMode == NM_DedicatedServer) || (AIController(Instigator.Controller) != None) )
|
||||
return;
|
||||
|
||||
MyAmmos = AmmoAmount(0);
|
||||
MagFloat = float(MagAmmoRemaining-10)/(MagCapacity-10);
|
||||
AmmoFloat = float(AmmoAmount(0)-10)/(MagCapacity-10);
|
||||
|
||||
if (MagAmmoRemaining < 1)
|
||||
SetBoneScale(31, 0.0, 'mag2b1');
|
||||
if (MagAmmoRemaining < 2)
|
||||
SetBoneScale(32, 0.0, 'mag2b2');
|
||||
if (MagAmmoRemaining < 3)
|
||||
SetBoneScale(33, 0.0, 'mag2b3');
|
||||
if (MagAmmoRemaining < 4)
|
||||
SetBoneScale(34, 0.0, 'mag2b4');
|
||||
if (MagAmmoRemaining < 5)
|
||||
SetBoneScale(35, 0.0, 'mag2b5');
|
||||
if (MagAmmoRemaining < 6)
|
||||
SetBoneScale(36, 0.0, 'mag2b6');
|
||||
if (MagAmmoRemaining < 7)
|
||||
SetBoneScale(37, 0.0, 'mag2b7');
|
||||
if (MagAmmoRemaining < 8)
|
||||
SetBoneScale(38, 0.0, 'mag2b8');
|
||||
if (MagAmmoRemaining < 9)
|
||||
SetBoneScale(39, 0.0, 'mag2b9');
|
||||
if (MagAmmoRemaining < 10)
|
||||
SetBoneScale(40, 0.0, 'mag2b10');
|
||||
if (MagFloat < 0.05)
|
||||
SetBoneScale(41, 0.0, 'mag2b11');
|
||||
if (MagFloat < 0.1)
|
||||
SetBoneScale(42, 0.0, 'mag2b12');
|
||||
if (MagFloat < 0.15)
|
||||
SetBoneScale(43, 0.0, 'mag2b13');
|
||||
if (MagFloat < 0.2)
|
||||
SetBoneScale(44, 0.0, 'mag2b14');
|
||||
if (MagFloat < 0.25)
|
||||
SetBoneScale(45, 0.0, 'mag2b15');
|
||||
if (MagFloat < 0.3)
|
||||
SetBoneScale(46, 0.0, 'mag2b16');
|
||||
if (MagFloat < 0.35)
|
||||
SetBoneScale(47, 0.0, 'mag2b17');
|
||||
if (MagFloat < 0.40)
|
||||
SetBoneScale(48, 0.0, 'mag2b18');
|
||||
if (MagFloat < 0.45)
|
||||
SetBoneScale(49, 0.0, 'mag2b19');
|
||||
if (MagFloat < 0.50)
|
||||
SetBoneScale(50, 0.0, 'mag2b20');
|
||||
if (MagFloat < 0.55)
|
||||
SetBoneScale(51, 0.0, 'mag2b21');
|
||||
if (MagFloat < 0.60)
|
||||
SetBoneScale(52, 0.0, 'mag2b22');
|
||||
if (MagFloat < 0.65)
|
||||
SetBoneScale(53, 0.0, 'mag2b23');
|
||||
if (MagFloat < 0.70)
|
||||
SetBoneScale(54, 0.0, 'mag2b24');
|
||||
if (MagFloat < 0.75)
|
||||
SetBoneScale(55, 0.0, 'mag2b25');
|
||||
if (MagFloat < 0.80)
|
||||
SetBoneScale(56, 0.0, 'mag2b26');
|
||||
if (MagFloat < 0.85)
|
||||
SetBoneScale(57, 0.0, 'mag2b27');
|
||||
if (MagFloat < 0.90)
|
||||
SetBoneScale(58, 0.0, 'mag2b28');
|
||||
if (MagFloat < 0.95)
|
||||
SetBoneScale(59, 0.0, 'mag2b29');
|
||||
if (MagFloat < 1.00)
|
||||
SetBoneScale(60, 0.0, 'mag2b30');
|
||||
|
||||
//show all mag 1 bullets first
|
||||
SetBoneScale(1, 1.0, 'mag1b1');
|
||||
SetBoneScale(2, 1.0, 'mag1b2');
|
||||
SetBoneScale(3, 1.0, 'mag1b3');
|
||||
SetBoneScale(4, 1.0, 'mag1b4');
|
||||
SetBoneScale(5, 1.0, 'mag1b5');
|
||||
SetBoneScale(6, 1.0, 'mag1b6');
|
||||
SetBoneScale(7, 1.0, 'mag1b7');
|
||||
SetBoneScale(8, 1.0, 'mag1b8');
|
||||
SetBoneScale(9, 1.0, 'mag1b9');
|
||||
SetBoneScale(10, 1.0, 'mag1b10');
|
||||
SetBoneScale(11, 1.0, 'mag1b11');
|
||||
SetBoneScale(12, 1.0, 'mag1b12');
|
||||
SetBoneScale(13, 1.0, 'mag1b13');
|
||||
SetBoneScale(14, 1.0, 'mag1b14');
|
||||
SetBoneScale(15, 1.0, 'mag1b15');
|
||||
SetBoneScale(16, 1.0, 'mag1b16');
|
||||
SetBoneScale(17, 1.0, 'mag1b17');
|
||||
SetBoneScale(18, 1.0, 'mag1b18');
|
||||
SetBoneScale(19, 1.0, 'mag1b19');
|
||||
SetBoneScale(20, 1.0, 'mag1b20');
|
||||
SetBoneScale(21, 1.0, 'mag1b21');
|
||||
SetBoneScale(22, 1.0, 'mag1b22');
|
||||
SetBoneScale(23, 1.0, 'mag1b23');
|
||||
SetBoneScale(24, 1.0, 'mag1b24');
|
||||
SetBoneScale(25, 1.0, 'mag1b25');
|
||||
SetBoneScale(26, 1.0, 'mag1b26');
|
||||
SetBoneScale(27, 1.0, 'mag1b27');
|
||||
SetBoneScale(28, 1.0, 'mag1b28');
|
||||
SetBoneScale(29, 1.0, 'mag1b29');
|
||||
SetBoneScale(30, 1.0, 'mag1b30');
|
||||
|
||||
//hide mag1 bullets depending on AmmoAmount(0)
|
||||
if (MyAmmos < 1)
|
||||
SetBoneScale(1, 0.0, 'mag1b1');
|
||||
if (MyAmmos < 2)
|
||||
SetBoneScale(2, 0.0, 'mag1b2');
|
||||
if (MyAmmos < 3)
|
||||
SetBoneScale(3, 0.0, 'mag1b3');
|
||||
if (MyAmmos < 4)
|
||||
SetBoneScale(4, 0.0, 'mag1b4');
|
||||
if (MyAmmos < 5)
|
||||
SetBoneScale(5, 0.0, 'mag1b5');
|
||||
if (MyAmmos < 6)
|
||||
SetBoneScale(6, 0.0, 'mag1b6');
|
||||
if (MyAmmos < 7)
|
||||
SetBoneScale(7, 0.0, 'mag1b7');
|
||||
if (MyAmmos < 8)
|
||||
SetBoneScale(8, 0.0, 'mag1b8');
|
||||
if (MyAmmos < 9)
|
||||
SetBoneScale(9, 0.0, 'mag1b9');
|
||||
if (MyAmmos < 10)
|
||||
SetBoneScale(10, 0.0, 'mag1b10');
|
||||
if (AmmoFloat < 0.05)
|
||||
SetBoneScale(11, 0.0, 'mag1b11');
|
||||
if (AmmoFloat < 0.1)
|
||||
SetBoneScale(12, 0.0, 'mag1b12');
|
||||
if (AmmoFloat < 0.15)
|
||||
SetBoneScale(13, 0.0, 'mag1b13');
|
||||
if (AmmoFloat < 0.2)
|
||||
SetBoneScale(14, 0.0, 'mag1b14');
|
||||
if (AmmoFloat < 0.25)
|
||||
SetBoneScale(15, 0.0, 'mag1b15');
|
||||
if (AmmoFloat < 0.3)
|
||||
SetBoneScale(16, 0.0, 'mag1b16');
|
||||
if (AmmoFloat < 0.35)
|
||||
SetBoneScale(17, 0.0, 'mag1b17');
|
||||
if (AmmoFloat < 0.40)
|
||||
SetBoneScale(18, 0.0, 'mag1b18');
|
||||
if (AmmoFloat < 0.45)
|
||||
SetBoneScale(19, 0.0, 'mag1b19');
|
||||
if (AmmoFloat < 0.50)
|
||||
SetBoneScale(20, 0.0, 'mag1b20');
|
||||
if (AmmoFloat < 0.55)
|
||||
SetBoneScale(21, 0.0, 'mag1b21');
|
||||
if (AmmoFloat < 0.60)
|
||||
SetBoneScale(22, 0.0, 'mag1b22');
|
||||
if (AmmoFloat < 0.65)
|
||||
SetBoneScale(23, 0.0, 'mag1b23');
|
||||
if (AmmoFloat < 0.70)
|
||||
SetBoneScale(24, 0.0, 'mag1b24');
|
||||
if (AmmoFloat < 0.75)
|
||||
SetBoneScale(25, 0.0, 'mag1b25');
|
||||
if (AmmoFloat < 0.80)
|
||||
SetBoneScale(26, 0.0, 'mag1b26');
|
||||
if (AmmoFloat < 0.85)
|
||||
SetBoneScale(27, 0.0, 'mag1b27');
|
||||
if (AmmoFloat < 0.90)
|
||||
SetBoneScale(28, 0.0, 'mag1b28');
|
||||
if (AmmoFloat < 0.95)
|
||||
SetBoneScale(29, 0.0, 'mag1b29');
|
||||
if (AmmoFloat < 1.00)
|
||||
SetBoneScale(30, 0.0, 'mag1b30');
|
||||
}
|
||||
|
||||
//this function is called somewhere in the reload and on select when mag2 is offscreen, this is needed so subsequent reloads may get full bullets again and just unhides all Mag2 Bullets
|
||||
simulated function Notify_ShowMag2Bullets()
|
||||
{
|
||||
if ( (Level.NetMode == NM_DedicatedServer) || (AIController(Instigator.Controller) != None) )
|
||||
return;
|
||||
|
||||
SetBoneScale(31, 1.0, 'mag2b1');
|
||||
SetBoneScale(32, 1.0, 'mag2b2');
|
||||
SetBoneScale(33, 1.0, 'mag2b3');
|
||||
SetBoneScale(34, 1.0, 'mag2b4');
|
||||
SetBoneScale(35, 1.0, 'mag2b5');
|
||||
SetBoneScale(36, 1.0, 'mag2b6');
|
||||
SetBoneScale(37, 1.0, 'mag2b7');
|
||||
SetBoneScale(38, 1.0, 'mag2b8');
|
||||
SetBoneScale(39, 1.0, 'mag2b9');
|
||||
SetBoneScale(40, 1.0, 'mag2b10');
|
||||
SetBoneScale(41, 1.0, 'mag2b11');
|
||||
SetBoneScale(42, 1.0, 'mag2b12');
|
||||
SetBoneScale(43, 1.0, 'mag2b13');
|
||||
SetBoneScale(44, 1.0, 'mag2b14');
|
||||
SetBoneScale(45, 1.0, 'mag2b15');
|
||||
SetBoneScale(46, 1.0, 'mag2b16');
|
||||
SetBoneScale(47, 1.0, 'mag2b17');
|
||||
SetBoneScale(48, 1.0, 'mag2b18');
|
||||
SetBoneScale(49, 1.0, 'mag2b19');
|
||||
SetBoneScale(50, 1.0, 'mag2b20');
|
||||
SetBoneScale(51, 1.0, 'mag2b21');
|
||||
SetBoneScale(52, 1.0, 'mag2b22');
|
||||
SetBoneScale(53, 1.0, 'mag2b23');
|
||||
SetBoneScale(54, 1.0, 'mag2b24');
|
||||
SetBoneScale(55, 1.0, 'mag2b25');
|
||||
SetBoneScale(56, 1.0, 'mag2b26');
|
||||
SetBoneScale(57, 1.0, 'mag2b27');
|
||||
SetBoneScale(58, 1.0, 'mag2b28');
|
||||
SetBoneScale(59, 1.0, 'mag2b29');
|
||||
SetBoneScale(60, 1.0, 'mag2b30');
|
||||
}
|
||||
|
||||
|
||||
|
||||
exec function ReloadMeNow()
|
||||
{
|
||||
local float ReloadMulti;
|
||||
|
||||
if(!AllowReload())
|
||||
return;
|
||||
if ( bHasAimingMode && bAimingRifle )
|
||||
{
|
||||
FireMode[1].bIsFiring = False;
|
||||
|
||||
ZoomOut(false);
|
||||
if( Role < ROLE_Authority)
|
||||
ServerZoomOut(false);
|
||||
}
|
||||
|
||||
if ( KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo) != none && KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo).ClientVeteranSkill != none )
|
||||
ReloadMulti = KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo).ClientVeteranSkill.Static.GetReloadSpeedModifier(KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo), self);
|
||||
else
|
||||
ReloadMulti = 1.0;
|
||||
|
||||
bIsReloading = true;
|
||||
ReloadTimer = Level.TimeSeconds;
|
||||
bShortReload = MagAmmoRemaining > 0;
|
||||
if ( bShortReload )
|
||||
ReloadRate = Default.ReloadShortRate / ReloadMulti;
|
||||
else
|
||||
ReloadRate = Default.ReloadRate / ReloadMulti;
|
||||
|
||||
if( bHoldToReload )
|
||||
{
|
||||
NumLoadedThisReload = 0;
|
||||
}
|
||||
ClientReload();
|
||||
Instigator.SetAnimAction(WeaponReloadAnim);
|
||||
if ( Level.Game.NumPlayers > 1 && KFGameType(Level.Game).bWaveInProgress && KFPlayerController(Instigator.Controller) != none &&
|
||||
Level.TimeSeconds - KFPlayerController(Instigator.Controller).LastReloadMessageTime > KFPlayerController(Instigator.Controller).ReloadMessageDelay )
|
||||
{
|
||||
KFPlayerController(Instigator.Controller).Speech('AUTO', 2, "");
|
||||
KFPlayerController(Instigator.Controller).LastReloadMessageTime = Level.TimeSeconds;
|
||||
}
|
||||
}
|
||||
|
||||
simulated function ClientReload()
|
||||
{
|
||||
local float ReloadMulti;
|
||||
if ( bHasAimingMode && bAimingRifle )
|
||||
{
|
||||
FireMode[1].bIsFiring = False;
|
||||
|
||||
ZoomOut(false);
|
||||
if( Role < ROLE_Authority)
|
||||
ServerZoomOut(false);
|
||||
}
|
||||
|
||||
if ( KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo) != none && KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo).ClientVeteranSkill != none )
|
||||
ReloadMulti = KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo).ClientVeteranSkill.Static.GetReloadSpeedModifier(KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo), self);
|
||||
else
|
||||
ReloadMulti = 1.0;
|
||||
|
||||
bIsReloading = true;
|
||||
if (MagAmmoRemaining <= 0)
|
||||
{
|
||||
PlayAnim(ReloadAnim, ReloadAnimRate*ReloadMulti, 0.1);
|
||||
}
|
||||
else if (MagAmmoRemaining >= 1)
|
||||
{
|
||||
PlayAnim(ReloadShortAnim, ReloadAnimRate*ReloadMulti, 0.1);
|
||||
}
|
||||
}
|
||||
|
||||
function AddReloadedAmmo()
|
||||
{
|
||||
local int a;
|
||||
|
||||
UpdateMagCapacity(Instigator.PlayerReplicationInfo);
|
||||
|
||||
a = MagCapacity;
|
||||
if ( bShortReload )
|
||||
a++; // 1 bullet already bolted
|
||||
|
||||
if ( AmmoAmount(0) >= a )
|
||||
MagAmmoRemaining = a;
|
||||
else
|
||||
MagAmmoRemaining = AmmoAmount(0);
|
||||
|
||||
// this seems redudant -- PooSH
|
||||
// if( !bHoldToReload )
|
||||
// {
|
||||
// ClientForceKFAmmoUpdate(MagAmmoRemaining,AmmoAmount(0));
|
||||
// }
|
||||
|
||||
if ( PlayerController(Instigator.Controller) != none && KFSteamStatsAndAchievements(PlayerController(Instigator.Controller).SteamStatsAndAchievements) != none )
|
||||
{
|
||||
KFSteamStatsAndAchievements(PlayerController(Instigator.Controller).SteamStatsAndAchievements).OnWeaponReloaded();
|
||||
}
|
||||
}
|
||||
|
||||
simulated function float ChargeBar()
|
||||
{
|
||||
return FClamp(float(HealAmmoCharge)/float(MaxAmmoCount),0,9.99);
|
||||
}
|
||||
|
||||
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 Tick(float dt)
|
||||
{
|
||||
super(KFWeapon).Tick(dt);
|
||||
|
||||
if ( Level.NetMode!=NM_Client && HealAmmoCharge < MaxHealAmmo && RegenTimer<Level.TimeSeconds ) {
|
||||
RegenTimer = Level.TimeSeconds + AmmoRegenRate;
|
||||
|
||||
if ( KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo) != none && KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo).ClientVeteranSkill != none )
|
||||
HealAmmoCharge += 10 * KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo).ClientVeteranSkill.Static.GetSyringeChargeRate(KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo));
|
||||
else
|
||||
HealAmmoCharge += 10;
|
||||
if ( HealAmmoCharge > MaxHealAmmo )
|
||||
HealAmmoCharge = MaxHealAmmo;
|
||||
}
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
MaxHealAmmo=625
|
||||
ReloadShortAnim="Reload"
|
||||
ReloadShortRate=1.830000
|
||||
MagCapacity=30
|
||||
ReloadRate=3.250000
|
||||
WeaponReloadAnim="Reload_AK47"
|
||||
Weight=6.000000
|
||||
StandardDisplayFOV=60.000000
|
||||
TraderInfoTexture=Texture'ScrnWeaponPack_T.cz805.TraderCZ805'
|
||||
MeshRef="ScrnWeaponPack_A.CZ805_Mesh"
|
||||
SkinRefs(0)="ScrnWeaponPack_T.cz805.cz805_cmb"
|
||||
SkinRefs(1)="ScrnWeaponPack_T.cz805.Grip_cmb"
|
||||
SkinRefs(2)="KF_Weapons_Trip_T.hands.hands_1stP_military_cmb"
|
||||
SkinRefs(3)="KF_Weapons_Trip_T.Rifles.reflex_sight_A_unlit"
|
||||
SkinRefs(4)="ScrnWeaponPack_T.cz805.eotech_cmb"
|
||||
SkinRefs(5)="ScrnWeaponPack_T.cz805.Magint_cmb"
|
||||
SkinRefs(6)="ScrnWeaponPack_T.cz805.Magazine_alpha"
|
||||
SelectSoundRef="ScrnWeaponPack_SND.cz805.foldback"
|
||||
HudImageRef="ScrnWeaponPack_T.cz805.UnselectCZ805"
|
||||
SelectedHudImageRef="ScrnWeaponPack_T.cz805.SelectCZ805"
|
||||
ZoomedDisplayFOV=32.000000
|
||||
FireModeClass(0)=Class'ScrnWeaponPack.CZ805MFire'
|
||||
FireModeClass(1)=Class'ScrnWeaponPack.CZ805MAltFire'
|
||||
PutDownAnim="Put_Down"
|
||||
Description="Horzine's modification of CZ-805 BREN rifle with attached healing dart launcher. Usefull for both Medic and Commando perks."
|
||||
DisplayFOV=60.000000
|
||||
Priority=95
|
||||
CustomCrosshair=11
|
||||
CustomCrossHairTextureName="Crosshairs.HUD.Crosshair_Cross5"
|
||||
GroupOffset=7
|
||||
PickupClass=Class'ScrnWeaponPack.CZ805MPickup'
|
||||
PlayerViewOffset=(X=10.000000,Y=12.000000,Z=-3.500000)
|
||||
BobDamping=5.000000
|
||||
AttachmentClass=Class'ScrnWeaponPack.CZ805MAttachment'
|
||||
ItemName="CZ-805M Medic/Assault Rifle SE"
|
||||
}
|
||||
9
kf_sources/ScrnWeaponPack/Classes/CZ805MAltFire.uc
Normal file
9
kf_sources/ScrnWeaponPack/Classes/CZ805MAltFire.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
class CZ805MAltFire extends MP7MAltFire;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
FireRate=0.250000
|
||||
AmmoPerFire=125
|
||||
ProjectileClass=Class'ScrnWeaponPack.CZ805MHealingProjectile'
|
||||
FlashEmitterClass=Class'ScrnWeaponPack.CZ805MMuzzleFlash'
|
||||
}
|
||||
12
kf_sources/ScrnWeaponPack/Classes/CZ805MAmmo.uc
Normal file
12
kf_sources/ScrnWeaponPack/Classes/CZ805MAmmo.uc
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
class CZ805MAmmo extends KFAmmunition;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoPickupAmount=30
|
||||
MaxAmmo=360
|
||||
InitialAmount=180
|
||||
PickupClass=Class'ScrnWeaponPack.CZ805MAmmoPickup'
|
||||
IconMaterial=Texture'KillingFloorHUD.Generic.HUD'
|
||||
IconCoords=(X1=336,Y1=82,X2=382,Y2=125)
|
||||
ItemName="5.56mm bullets"
|
||||
}
|
||||
9
kf_sources/ScrnWeaponPack/Classes/CZ805MAmmoPickup.uc
Normal file
9
kf_sources/ScrnWeaponPack/Classes/CZ805MAmmoPickup.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
class CZ805MAmmoPickup extends KFAmmoPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoAmount=30
|
||||
InventoryType=Class'ScrnWeaponPack.CZ805MAmmo'
|
||||
PickupMessage="Rounds 5.56mm"
|
||||
StaticMesh=StaticMesh'KillingFloorStatics.L85Ammo'
|
||||
}
|
||||
57
kf_sources/ScrnWeaponPack/Classes/CZ805MAttachment.uc
Normal file
57
kf_sources/ScrnWeaponPack/Classes/CZ805MAttachment.uc
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
class CZ805MAttachment extends KFWeaponAttachment;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
mMuzFlashClass=Class'ROEffects.MuzzleFlash3rdMP'
|
||||
mTracerClass=Class'KFMod.KFNewTracer'
|
||||
mShellCaseEmitterClass=Class'KFMod.KFShellSpewer'
|
||||
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="ScrnWeaponPack_A.CZ805Bren_3rd"
|
||||
bRapidFire=True
|
||||
bAltRapidFire=True
|
||||
SplashEffect=Class'ROEffects.BulletSplashEmitter'
|
||||
CullDistance=5000.000000
|
||||
}
|
||||
36
kf_sources/ScrnWeaponPack/Classes/CZ805MFire.uc
Normal file
36
kf_sources/ScrnWeaponPack/Classes/CZ805MFire.uc
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
class CZ805MFire extends KFFire;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
FireAimedAnim="Fire_Iron"
|
||||
RecoilRate=0.060000
|
||||
maxVerticalRecoilAngle=150
|
||||
maxHorizontalRecoilAngle=75
|
||||
ShellEjectClass=Class'ScrnWeaponPack.CZ805MShellEject'
|
||||
ShellEjectBoneName="Shell_eject"
|
||||
bAccuracyBonusForSemiAuto=True
|
||||
FireSoundRef="ScrnWeaponPack_SND.cz805.Firecz805b"
|
||||
NoAmmoSoundRef="KF_SCARSnd.SCAR_DryFire"
|
||||
DamageType=Class'ScrnWeaponPack.DamTypeCZ805M'
|
||||
DamageMax=41
|
||||
Momentum=12500.000000
|
||||
bPawnRapidFireAnim=True
|
||||
TransientSoundVolume=1.800000
|
||||
FireLoopAnim="Fire"
|
||||
TweenTime=0.025000
|
||||
FireForce="AssaultRifleFire"
|
||||
FireRate=0.090000
|
||||
AmmoClass=Class'ScrnWeaponPack.CZ805MAmmo'
|
||||
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'ScrnWeaponPack.CZ805MMuzzleFlash'
|
||||
aimerror=42.000000
|
||||
Spread=0.007500
|
||||
SpreadStyle=SS_Random
|
||||
}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
class CZ805MHealingProjectile extends ScrnHealingProjectile;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
HealBoostAmount=10
|
||||
}
|
||||
44
kf_sources/ScrnWeaponPack/Classes/CZ805MMuzzleFlash.uc
Normal file
44
kf_sources/ScrnWeaponPack/Classes/CZ805MMuzzleFlash.uc
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
class CZ805MMuzzleFlash extends MuzzleFlash1stSTG;
|
||||
|
||||
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=7.000000,Max=7.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'ScrnWeaponPack.CZ805MMuzzleFlash.SpriteEmitter0'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter1
|
||||
RespawnDeadParticles=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
Opacity=0.100000
|
||||
MaxParticles=1
|
||||
StartSizeRange=(X=(Min=35.000000,Max=35.000000))
|
||||
DrawStyle=PTDS_Brighten
|
||||
Texture=Texture'Effects_Tex.Smoke.MuzzleCorona1stP'
|
||||
LifetimeRange=(Min=0.100000,Max=0.100000)
|
||||
End Object
|
||||
Emitters(1)=SpriteEmitter'ScrnWeaponPack.CZ805MMuzzleFlash.SpriteEmitter1'
|
||||
|
||||
}
|
||||
25
kf_sources/ScrnWeaponPack/Classes/CZ805MPickup.uc
Normal file
25
kf_sources/ScrnWeaponPack/Classes/CZ805MPickup.uc
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
class CZ805MPickup extends KFWeaponPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Weight=6.000000
|
||||
cost=3000
|
||||
AmmoCost=14
|
||||
BuyClipSize=31
|
||||
PowerValue=45
|
||||
SpeedValue=85
|
||||
RangeValue=70
|
||||
Description="Horzine's modification of CZ-805 BREN rifle with attached healing dart launcher. Usefull for both Medic and Commando perks."
|
||||
ItemName="CZ-805M SE"
|
||||
ItemShortName="CZ-805M SE"
|
||||
AmmoItemName="5.56mm Ammo"
|
||||
AmmoMesh=StaticMesh'KillingFloorStatics.L85Ammo'
|
||||
EquipmentCategoryID=3
|
||||
InventoryType=Class'ScrnWeaponPack.CZ805M'
|
||||
PickupMessage="You got the CZ-805M"
|
||||
PickupSound=Sound'KF_SCARSnd.SCAR_Pickup'
|
||||
PickupForce="ScrnWeaponPack.cz805bPickup"
|
||||
StaticMesh=StaticMesh'ScrnWeaponPack_SM.CZ805Bren_P'
|
||||
CollisionRadius=25.000000
|
||||
CollisionHeight=5.000000
|
||||
}
|
||||
65
kf_sources/ScrnWeaponPack/Classes/CZ805MShellEject.uc
Normal file
65
kf_sources/ScrnWeaponPack/Classes/CZ805MShellEject.uc
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
class CZ805MShellEject 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=1.750000,Max=1.750000),Y=(Min=1.750000,Max=1.750000),Z=(Min=1.750000,Max=1.750000))
|
||||
LifetimeRange=(Min=5.000000,Max=5.000000)
|
||||
StartVelocityRange=(X=(Min=75.000000,Max=100.000000),Y=(Min=-20.000000,Max=-40.000000),Z=(Min=50.000000,Max=75.000000))
|
||||
End Object
|
||||
Emitters(0)=MeshEmitter'ScrnWeaponPack.CZ805MShellEject.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.350000,Max=0.350000),Y=(Min=0.350000,Max=0.350000),Z=(Min=0.350000,Max=0.350000))
|
||||
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'ScrnWeaponPack.CZ805MShellEject.SpriteEmitter0'
|
||||
|
||||
}
|
||||
475
kf_sources/ScrnWeaponPack/Classes/Colt.uc
Normal file
475
kf_sources/ScrnWeaponPack/Classes/Colt.uc
Normal file
|
|
@ -0,0 +1,475 @@
|
|||
//==================================================
|
||||
//==================================================
|
||||
// Whisky's Colt Python
|
||||
// Balance job by PooSH
|
||||
//==================================================
|
||||
class Colt extends KFWeapon;
|
||||
|
||||
var float ReloadMulti;
|
||||
var float BulletUnloadRate; // how long does it takes to unload empty bullets
|
||||
var float BulletLoadRate; // how long does it takes to load a single bullet
|
||||
var transient bool bInterruptedReload;
|
||||
var transient float NextBulletLoadTime;
|
||||
|
||||
|
||||
// Implemented revolver-specific reloading
|
||||
// Reload State 1 (uninterruptable): opening drum and unloading empty bullets. Lasts BulletUnloadRate seconds.
|
||||
// Reload State 2: loading bullets. Each bullet load takes BulletLoadRate seconds.
|
||||
// Reload State 3: closing drum.
|
||||
simulated function WeaponTick(float dt)
|
||||
{
|
||||
local float LastSeenSeconds;
|
||||
|
||||
if( bHasAimingMode ) {
|
||||
if( bForceLeaveIronsights ) {
|
||||
if( bAimingRifle ) {
|
||||
ZoomOut(true);
|
||||
|
||||
if( Role < ROLE_Authority)
|
||||
ServerZoomOut(false);
|
||||
}
|
||||
bForceLeaveIronsights = false;
|
||||
}
|
||||
|
||||
if( ForceZoomOutTime > 0 ) {
|
||||
if( bAimingRifle ) {
|
||||
if( Level.TimeSeconds - ForceZoomOutTime > 0 ) {
|
||||
ForceZoomOutTime = 0;
|
||||
ZoomOut(true);
|
||||
if( Role < ROLE_Authority)
|
||||
ServerZoomOut(false);
|
||||
}
|
||||
}
|
||||
else {
|
||||
ForceZoomOutTime = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( Role < ROLE_Authority )
|
||||
return;
|
||||
|
||||
if ( bIsReloading ) {
|
||||
if (AmmoAmount(0) <= MagAmmoRemaining )
|
||||
InterruptReload(); //force interrupt if loaded last bullet
|
||||
if( Level.TimeSeconds >= ReloadTimer ) {
|
||||
ActuallyFinishReloading();
|
||||
}
|
||||
else if ( !bInterruptedReload && Level.TimeSeconds >= NextBulletLoadTime ) {
|
||||
if ( MagAmmoRemaining >= MagCapacity || MagAmmoRemaining >= AmmoAmount(0) )
|
||||
NextBulletLoadTime += 1000; // don't load bullets anymore
|
||||
else {
|
||||
MagAmmoRemaining++;
|
||||
NextBulletLoadTime += BulletLoadRate;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if( !Instigator.IsHumanControlled() ) { // bot
|
||||
LastSeenSeconds = Level.TimeSeconds - Instigator.Controller.LastSeenTime;
|
||||
if(MagAmmoRemaining == 0 || ((LastSeenSeconds >= 5 || LastSeenSeconds > MagAmmoRemaining) && MagAmmoRemaining < MagCapacity))
|
||||
ReloadMeNow();
|
||||
}
|
||||
|
||||
// Turn it off on death / battery expenditure
|
||||
if (FlashLight != none)
|
||||
{
|
||||
// Keep the 1Pweapon client beam up to date.
|
||||
AdjustLightGraphic();
|
||||
if (FlashLight.bHasLight)
|
||||
{
|
||||
if (Instigator.Health <= 0 || KFHumanPawn(Instigator).TorchBatteryLife <= 0 || Instigator.PendingWeapon != none )
|
||||
{
|
||||
//Log("Killing Light...you're out of batteries, or switched / dropped weapons");
|
||||
KFHumanPawn(Instigator).bTorchOn = false;
|
||||
ServerSpawnLight();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
simulated function bool AllowReload()
|
||||
{
|
||||
if ( bIsReloading || MagAmmoRemaining >= AmmoAmount(0) )
|
||||
return false;
|
||||
|
||||
UpdateMagCapacity(Instigator.PlayerReplicationInfo);
|
||||
if ( MagAmmoRemaining >= MagCapacity )
|
||||
return false;
|
||||
|
||||
if( KFInvasionBot(Instigator.Controller) != none || KFFriendlyAI(Instigator.Controller) != none )
|
||||
return true;
|
||||
|
||||
return !FireMode[0].IsFiring() && !FireMode[1].IsFiring()
|
||||
&& Level.TimeSeconds > (FireMode[0].NextFireTime - 0.1);
|
||||
}
|
||||
|
||||
|
||||
// Since vanilla reloading replication is totally fucked, I moved base code into separate,
|
||||
// replication-free function, which is executed on both server and client side
|
||||
// -- PooSH
|
||||
simulated function DoReload()
|
||||
{
|
||||
if ( bHasAimingMode && bAimingRifle ) {
|
||||
FireMode[1].bIsFiring = False;
|
||||
ZoomOut(false);
|
||||
// ZoomOut() just a moment ago was executed on server side - why to force it again? -- PooSH
|
||||
// if( Role < ROLE_Authority)
|
||||
// ServerZoomOut(false);
|
||||
}
|
||||
|
||||
if ( KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo) != none && KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo).ClientVeteranSkill != none )
|
||||
ReloadMulti = KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo).ClientVeteranSkill.Static.GetReloadSpeedModifier(KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo), self);
|
||||
else
|
||||
ReloadMulti = 1.0;
|
||||
|
||||
bIsReloading = true;
|
||||
bInterruptedReload = false;
|
||||
|
||||
BulletUnloadRate = default.BulletUnloadRate / ReloadMulti;
|
||||
BulletLoadRate = default.BulletLoadRate / ReloadMulti;
|
||||
NextBulletLoadTime = Level.TimeSeconds + BulletUnloadRate + BulletLoadRate;
|
||||
// more bullets left = less time to reload
|
||||
ReloadRate = default.ReloadRate / ReloadMulti;
|
||||
ReloadRate -= MagAmmoRemaining * BulletLoadRate;
|
||||
ReloadTimer = Level.TimeSeconds + ReloadRate;
|
||||
|
||||
Instigator.SetAnimAction(WeaponReloadAnim);
|
||||
}
|
||||
|
||||
// This function is triggered by client, replicated to server and NOT EXECUTED on client,
|
||||
// even if marked as simulated
|
||||
exec function ReloadMeNow()
|
||||
{
|
||||
local KFPlayerController PC;
|
||||
|
||||
if ( !AllowReload() )
|
||||
return;
|
||||
|
||||
DoReload();
|
||||
ClientReload();
|
||||
|
||||
PC = KFPlayerController(Instigator.Controller);
|
||||
if ( PC != none && Level.Game.NumPlayers > 1 && KFGameType(Level.Game).bWaveInProgress
|
||||
&& Level.TimeSeconds - PC.LastReloadMessageTime > PC.ReloadMessageDelay )
|
||||
{
|
||||
KFPlayerController(Instigator.Controller).Speech('AUTO', 2, "");
|
||||
KFPlayerController(Instigator.Controller).LastReloadMessageTime = Level.TimeSeconds;
|
||||
}
|
||||
}
|
||||
|
||||
function ServerRequestAutoReload()
|
||||
{
|
||||
ReloadMeNow();
|
||||
}
|
||||
|
||||
// This function now is triggered by ReloadMeNow() and executed on local side only
|
||||
simulated function ClientReload()
|
||||
{
|
||||
DoReload();
|
||||
PlayAnim(ReloadAnim, ReloadAnimRate*ReloadMulti, 0.1);
|
||||
}
|
||||
|
||||
|
||||
function AddReloadedAmmo() {} // magazine is filled in WeaponTick now
|
||||
|
||||
|
||||
simulated function bool StartFire(int Mode)
|
||||
{
|
||||
if ( MagAmmoRemaining <= 0 )
|
||||
return false;
|
||||
if ( bIsReloading ) {
|
||||
InterruptReload();
|
||||
return false;
|
||||
}
|
||||
return super(Weapon).StartFire(Mode);
|
||||
}
|
||||
|
||||
simulated function AltFire(float F)
|
||||
{
|
||||
InterruptReload();
|
||||
}
|
||||
|
||||
// another fucked up replication...
|
||||
// By the looks if it, InterruptReload() is called only on client, which triggers ServerInterruptReload().
|
||||
// Anyway, why server would want to interrupt reload by its own?..
|
||||
simulated function bool InterruptReload()
|
||||
{
|
||||
if( bIsReloading && !bInterruptedReload && (ReloadTimer - Level.TimeSeconds)*ReloadMulti > 0.7/ReloadMulti )
|
||||
{
|
||||
// that's very lame how to do stuff like that - don't repeat it at home ;)
|
||||
// in theory client should send server a request to interrupt the reload,
|
||||
// and the server send back accept to client.
|
||||
// But in such case we have a double chance of screwing the shit up, so let's just
|
||||
// do it lazy way.
|
||||
ServerInterruptReload();
|
||||
ClientInterruptReload();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function ServerInterruptReload()
|
||||
{
|
||||
if ( Role == ROLE_Authority ) {
|
||||
ReloadTimer = Level.TimeSeconds + 0.5/ReloadMulti;
|
||||
bInterruptedReload = true;
|
||||
SetAnimFrame(112, 0 , 1); // go to closing drum stage
|
||||
}
|
||||
}
|
||||
|
||||
simulated function ClientInterruptReload()
|
||||
{
|
||||
if ( Role < ROLE_Authority ) {
|
||||
bInterruptedReload = true;
|
||||
SetAnimFrame(112, 0 , 1); // go to closing drum stage
|
||||
ShowAllBullets();
|
||||
}
|
||||
}
|
||||
|
||||
simulated exec function ToggleIronSights()
|
||||
{
|
||||
if( bHasAimingMode ) {
|
||||
if( bAimingRifle )
|
||||
PerformZoom(false);
|
||||
else
|
||||
IronSightZoomIn();
|
||||
}
|
||||
}
|
||||
|
||||
simulated exec function IronSightZoomIn()
|
||||
{
|
||||
if( bHasAimingMode ) {
|
||||
if( Owner != none && Owner.Physics == PHYS_Falling
|
||||
&& Owner.PhysicsVolume.Gravity.Z <= class'PhysicsVolume'.default.Gravity.Z )
|
||||
return;
|
||||
|
||||
if( bIsReloading )
|
||||
InterruptReload(); // finish reloading while zooming in -- PooSH
|
||||
PerformZoom(True);
|
||||
}
|
||||
}
|
||||
|
||||
simulated function bool PutDown()
|
||||
{
|
||||
local int Mode;
|
||||
|
||||
// continue here, because there is nothing to stop us from interrupting the reload -- PooSH
|
||||
if ( bIsReloading )
|
||||
InterruptReload();
|
||||
|
||||
if( bAimingRifle )
|
||||
ZoomOut(False);
|
||||
|
||||
// From Weapon.uc
|
||||
if (ClientState == WS_BringUp || ClientState == WS_ReadyToFire)
|
||||
{
|
||||
if ( (Instigator.PendingWeapon != None) && !Instigator.PendingWeapon.bForceSwitch )
|
||||
{
|
||||
for (Mode = 0; Mode < NUM_FIRE_MODES; Mode++)
|
||||
{
|
||||
// if _RO_
|
||||
if( FireMode[Mode] == none )
|
||||
continue;
|
||||
// End _RO_
|
||||
|
||||
if ( FireMode[Mode].bFireOnRelease && FireMode[Mode].bIsFiring )
|
||||
return false;
|
||||
if ( FireMode[Mode].NextFireTime > Level.TimeSeconds + FireMode[Mode].FireRate*(1.f - MinReloadPct))
|
||||
DownDelay = FMax(DownDelay, FireMode[Mode].NextFireTime - Level.TimeSeconds - FireMode[Mode].FireRate*(1.f - MinReloadPct));
|
||||
}
|
||||
}
|
||||
|
||||
if (Instigator.IsLocallyControlled())
|
||||
{
|
||||
for (Mode = 0; Mode < NUM_FIRE_MODES; Mode++)
|
||||
{
|
||||
// if _RO_
|
||||
if( FireMode[Mode] == none )
|
||||
continue;
|
||||
// End _RO_
|
||||
|
||||
if ( FireMode[Mode].bIsFiring )
|
||||
ClientStopFire(Mode);
|
||||
}
|
||||
|
||||
if ( DownDelay <= 0 || KFPawn(Instigator).bIsQuickHealing > 0)
|
||||
{
|
||||
if ( ClientState == WS_BringUp || KFPawn(Instigator).bIsQuickHealing > 0 )
|
||||
TweenAnim(SelectAnim,PutDownTime);
|
||||
else if ( HasAnim(PutDownAnim) )
|
||||
{
|
||||
if( ClientGrenadeState == GN_TempDown || KFPawn(Instigator).bIsQuickHealing > 0)
|
||||
{
|
||||
PlayAnim(PutDownAnim, PutDownAnimRate * (PutDownTime/QuickPutDownTime), 0.0);
|
||||
}
|
||||
else
|
||||
{
|
||||
PlayAnim(PutDownAnim, PutDownAnimRate, 0.0);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
ClientState = WS_PutDown;
|
||||
if ( Level.GRI.bFastWeaponSwitching )
|
||||
DownDelay = 0;
|
||||
if ( DownDelay > 0 )
|
||||
{
|
||||
SetTimer(DownDelay, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
if( ClientGrenadeState == GN_TempDown )
|
||||
{
|
||||
SetTimer(QuickPutDownTime, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetTimer(PutDownTime, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
for (Mode = 0; Mode < NUM_FIRE_MODES; Mode++)
|
||||
{
|
||||
// if _RO_
|
||||
if( FireMode[Mode] == none )
|
||||
continue;
|
||||
// End _RO_
|
||||
|
||||
FireMode[Mode].bServerDelayStartFire = false;
|
||||
FireMode[Mode].bServerDelayStopFire = false;
|
||||
}
|
||||
Instigator.AmbientSound = None;
|
||||
OldWeapon = None;
|
||||
return true; // return false if preventing weapon switch
|
||||
}
|
||||
|
||||
|
||||
simulated function Notify_DropBullets()
|
||||
{
|
||||
if ( !Instigator.IsLocallyControlled() )
|
||||
return ;
|
||||
// bullets are reloaded in this order: 2,1,5,4,6,3
|
||||
switch ( MagAmmoRemaining ) {
|
||||
case 5:
|
||||
SetBoneScale(1, 0.0, 'b1');
|
||||
SetBoneScale(2, 0.0, 'b2');
|
||||
SetBoneScale(3, 1.0, 'b3');
|
||||
SetBoneScale(4, 0.0, 'b4');
|
||||
SetBoneScale(5, 0.0, 'b5');
|
||||
SetBoneScale(6, 0.0, 'b6');
|
||||
break;
|
||||
case 4:
|
||||
SetBoneScale(1, 0.0, 'b1');
|
||||
SetBoneScale(2, 0.0, 'b2');
|
||||
SetBoneScale(3, 1.0, 'b3');
|
||||
SetBoneScale(4, 0.0, 'b4');
|
||||
SetBoneScale(5, 0.0, 'b5');
|
||||
SetBoneScale(6, 1.0, 'b6');
|
||||
break;
|
||||
case 3:
|
||||
SetBoneScale(1, 0.0, 'b1');
|
||||
SetBoneScale(2, 0.0, 'b2');
|
||||
SetBoneScale(3, 1.0, 'b3');
|
||||
SetBoneScale(4, 1.0, 'b4');
|
||||
SetBoneScale(5, 0.0, 'b5');
|
||||
SetBoneScale(6, 1.0, 'b6');
|
||||
break;
|
||||
case 2:
|
||||
SetBoneScale(1, 0.0, 'b1');
|
||||
SetBoneScale(2, 0.0, 'b2');
|
||||
SetBoneScale(3, 1.0, 'b3');
|
||||
SetBoneScale(4, 1.0, 'b4');
|
||||
SetBoneScale(5, 1.0, 'b5');
|
||||
SetBoneScale(6, 1.0, 'b6');
|
||||
break;
|
||||
case 1:
|
||||
SetBoneScale(1, 1.0, 'b1');
|
||||
SetBoneScale(2, 0.0, 'b2');
|
||||
SetBoneScale(3, 1.0, 'b3');
|
||||
SetBoneScale(4, 1.0, 'b4');
|
||||
SetBoneScale(5, 1.0, 'b5');
|
||||
SetBoneScale(6, 1.0, 'b6');
|
||||
break;
|
||||
default:
|
||||
SetBoneScale(1, 1.0, 'b1');
|
||||
SetBoneScale(2, 1.0, 'b2');
|
||||
SetBoneScale(3, 1.0, 'b3');
|
||||
SetBoneScale(4, 1.0, 'b4');
|
||||
SetBoneScale(5, 1.0, 'b5');
|
||||
SetBoneScale(6, 1.0, 'b6');
|
||||
}
|
||||
}
|
||||
|
||||
simulated function Notify_InsertBullets()
|
||||
{
|
||||
ShowAllBullets();
|
||||
|
||||
switch ( MagAmmoRemaining ) {
|
||||
case 5: SetAnimFrame(82, 0 , 1); break;
|
||||
case 4: SetAnimFrame(71.5, 0 , 1); break;
|
||||
case 3: SetAnimFrame(61, 0 , 1); break;
|
||||
case 2: SetAnimFrame(50.5, 0 , 1); break;
|
||||
case 1: SetAnimFrame(38.5, 0 , 1); break;
|
||||
}
|
||||
}
|
||||
|
||||
simulated function ShowAllBullets()
|
||||
{
|
||||
if ( !Instigator.IsLocallyControlled() )
|
||||
return ;
|
||||
|
||||
// restore bones
|
||||
// bullets are reloaded in this order: 2,1,5,4,6,3
|
||||
SetBoneScale(1, 1.0, 'b1');
|
||||
SetBoneScale(2, 1.0, 'b2');
|
||||
SetBoneScale(3, 1.0, 'b3');
|
||||
SetBoneScale(4, 1.0, 'b4');
|
||||
SetBoneScale(5, 1.0, 'b5');
|
||||
SetBoneScale(6, 1.0, 'b6');
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
BulletUnloadRate=1.000000
|
||||
BulletLoadRate=0.475000
|
||||
FirstPersonFlashlightOffset=(X=-20.000000,Y=-22.000000,Z=8.000000)
|
||||
MagCapacity=6
|
||||
ReloadRate=5.500000
|
||||
ReloadAnim="Reload"
|
||||
ReloadAnimRate=1.200000
|
||||
bHoldToReload=True
|
||||
WeaponReloadAnim="Reload_Revolver"
|
||||
Weight=5.000000
|
||||
bHasAimingMode=True
|
||||
IdleAimAnim="IronIdle"
|
||||
StandardDisplayFOV=70.000000
|
||||
bModeZeroCanDryFire=True
|
||||
SleeveNum=0
|
||||
TraderInfoTexture=Texture'ScrnWeaponPack_T.Colt.Trader_WColt'
|
||||
MeshRef="ScrnWeaponPack_A.colt_weapon"
|
||||
SkinRefs(1)="ScrnWeaponPack_T.Colt.ColtV2_T"
|
||||
HudImageRef="ScrnWeaponPack_T.Colt.WColt_Unselected"
|
||||
SelectedHudImageRef="ScrnWeaponPack_T.Colt.WColt"
|
||||
ZoomedDisplayFOV=65.000000
|
||||
FireModeClass(0)=Class'ScrnWeaponPack.ColtFire'
|
||||
FireModeClass(1)=Class'KFMod.NoFire'
|
||||
PutDownAnim="PutDown"
|
||||
SelectSound=Sound'KF_9MMSnd.9mm_Select'
|
||||
AIRating=0.250000
|
||||
CurrentRating=0.250000
|
||||
bShowChargingBar=True
|
||||
Description="The Colt Python is a double action handgun chambered for the .357 Magnum cartridge, built on Colt's large I-frame. Pythons have a reputation for accuracy, smooth trigger pull, and a tight cylinder lock-up."
|
||||
DisplayFOV=70.000000
|
||||
Priority=110
|
||||
InventoryGroup=2
|
||||
GroupOffset=1
|
||||
PickupClass=Class'ScrnWeaponPack.ColtPickup'
|
||||
PlayerViewOffset=(X=20.000000,Y=25.000000,Z=-10.000000)
|
||||
BobDamping=6.000000
|
||||
AttachmentClass=Class'ScrnWeaponPack.ColtAttachment'
|
||||
IconCoords=(X1=434,Y1=253,X2=506,Y2=292)
|
||||
ItemName="Colt Python SE"
|
||||
}
|
||||
17
kf_sources/ScrnWeaponPack/Classes/ColtAmmo.uc
Normal file
17
kf_sources/ScrnWeaponPack/Classes/ColtAmmo.uc
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
//=============================================================================
|
||||
// ColtAmmo
|
||||
//=============================================================================
|
||||
class ColtAmmo extends KFAmmunition;
|
||||
|
||||
#EXEC OBJ LOAD FILE=InterfaceContent.utx
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoPickupAmount=6
|
||||
MaxAmmo=60
|
||||
InitialAmount=30
|
||||
PickupClass=Class'KFMod.SingleAmmoPickup'
|
||||
IconMaterial=Texture'KillingFloorHUD.Generic.HUD'
|
||||
IconCoords=(X1=413,Y1=82,X2=457,Y2=125)
|
||||
ItemName=".357 bullets"
|
||||
}
|
||||
10
kf_sources/ScrnWeaponPack/Classes/ColtAmmoPickup.uc
Normal file
10
kf_sources/ScrnWeaponPack/Classes/ColtAmmoPickup.uc
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
class ColtAmmoPickup extends KFAmmoPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoAmount=6
|
||||
InventoryType=Class'ScrnWeaponPack.ColtAmmo'
|
||||
RespawnTime=0.000000
|
||||
PickupMessage=".357 Ammo"
|
||||
StaticMesh=StaticMesh'KillingFloorStatics.DualiesAmmo'
|
||||
}
|
||||
51
kf_sources/ScrnWeaponPack/Classes/ColtAttachment.uc
Normal file
51
kf_sources/ScrnWeaponPack/Classes/ColtAttachment.uc
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
class ColtAttachment extends KFWeaponAttachment;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
mMuzFlashClass=Class'ROEffects.MuzzleFlash3rdPistol'
|
||||
mTracerClass=Class'KFMod.KFLargeTracer'
|
||||
MovementAnims(0)="JogF_Single9mm"
|
||||
MovementAnims(1)="JogB_Single9mm"
|
||||
MovementAnims(2)="JogL_Single9mm"
|
||||
MovementAnims(3)="JogR_Single9mm"
|
||||
TurnLeftAnim="TurnL_Single9mm"
|
||||
TurnRightAnim="TurnR_Single9mm"
|
||||
CrouchAnims(0)="CHwalkF_Single9mm"
|
||||
CrouchAnims(1)="CHwalkB_Single9mm"
|
||||
CrouchAnims(2)="CHwalkL_Single9mm"
|
||||
CrouchAnims(3)="CHwalkR_Single9mm"
|
||||
CrouchTurnRightAnim="CH_TurnR_Single9mm"
|
||||
CrouchTurnLeftAnim="CH_TurnL_Single9mm"
|
||||
IdleCrouchAnim="CHIdle_Single9mm"
|
||||
IdleWeaponAnim="Idle_Single9mm"
|
||||
IdleRestAnim="Idle_Single9mm"
|
||||
IdleChatAnim="Idle_Single9mm"
|
||||
IdleHeavyAnim="Idle_Single9mm"
|
||||
IdleRifleAnim="Idle_Single9mm"
|
||||
FireAnims(0)="Fire_Single9mm"
|
||||
FireAnims(1)="Fire_Single9mm"
|
||||
FireAnims(2)="Fire_Single9mm"
|
||||
FireAnims(3)="Fire_Single9mm"
|
||||
FireAltAnims(0)="Fire_Single9mm"
|
||||
FireAltAnims(1)="Fire_Single9mm"
|
||||
FireAltAnims(2)="Fire_Single9mm"
|
||||
FireAltAnims(3)="Fire_Single9mm"
|
||||
FireCrouchAnims(0)="CHFire_Single9mm"
|
||||
FireCrouchAnims(1)="CHFire_Single9mm"
|
||||
FireCrouchAnims(2)="CHFire_Single9mm"
|
||||
FireCrouchAnims(3)="CHFire_Single9mm"
|
||||
FireCrouchAltAnims(0)="CHFire_Single9mm"
|
||||
FireCrouchAltAnims(1)="CHFire_Single9mm"
|
||||
FireCrouchAltAnims(2)="CHFire_Single9mm"
|
||||
FireCrouchAltAnims(3)="CHFire_Single9mm"
|
||||
HitAnims(0)="HitF_Single9mm"
|
||||
HitAnims(1)="HitB_Single9mm"
|
||||
HitAnims(2)="HitL_Single9mm"
|
||||
HitAnims(3)="HitR_Single9mm"
|
||||
PostFireBlendStandAnim="Blend_Single9mm"
|
||||
PostFireBlendCrouchAnim="CHBlend_Single9mm"
|
||||
MeshRef="ScrnWeaponPack_A.W_Colt_Python_3rd"
|
||||
bHeavy=True
|
||||
SplashEffect=Class'ROEffects.BulletSplashEmitter'
|
||||
CullDistance=5000.000000
|
||||
}
|
||||
181
kf_sources/ScrnWeaponPack/Classes/ColtFire.uc
Normal file
181
kf_sources/ScrnWeaponPack/Classes/ColtFire.uc
Normal file
|
|
@ -0,0 +1,181 @@
|
|||
//=============================================================================
|
||||
// Colt Fire
|
||||
//=============================================================================
|
||||
class ColtFire extends KFFire;
|
||||
|
||||
var float PenDmgReduction; //penetration damage reduction. 1.0 - no reduction, 25% reduction
|
||||
var byte MaxPenetrations; //how many enemies can penetrate a single bullet
|
||||
|
||||
function DoTrace(Vector Start, Rotator Dir)
|
||||
{
|
||||
local Vector X,Y,Z, End, HitLocation, HitNormal, ArcEnd;
|
||||
local Actor Other;
|
||||
local byte HitCount, PenCounter, KillCount;
|
||||
local float HitDamage;
|
||||
local array<int> HitPoints;
|
||||
local KFPawn HitPawn;
|
||||
local array<Actor> IgnoreActors;
|
||||
local Pawn DamagePawn;
|
||||
local int i;
|
||||
|
||||
local KFMonster Monster;
|
||||
local bool bWasDecapitated;
|
||||
//local int OldHealth;
|
||||
|
||||
MaxRange();
|
||||
|
||||
Weapon.GetViewAxes(X, Y, Z);
|
||||
if ( Weapon.WeaponCentered() )
|
||||
{
|
||||
ArcEnd = (Instigator.Location + Weapon.EffectOffset.X * X + 1.5 * Weapon.EffectOffset.Z * Z);
|
||||
}
|
||||
else
|
||||
{
|
||||
ArcEnd = (Instigator.Location + Instigator.CalcDrawOffset(Weapon) + Weapon.EffectOffset.X * X +
|
||||
Weapon.Hand * Weapon.EffectOffset.Y * Y + Weapon.EffectOffset.Z * Z);
|
||||
}
|
||||
|
||||
X = Vector(Dir);
|
||||
End = Start + TraceRange * X;
|
||||
HitDamage = DamageMax;
|
||||
|
||||
// HitCount isn't a number of max penetration. It is just to be sure we won't stuck in infinite loop
|
||||
While( ++HitCount < 127 )
|
||||
{
|
||||
DamagePawn = none;
|
||||
Monster = none;
|
||||
|
||||
Other = Instigator.HitPointTrace(HitLocation, HitNormal, End, HitPoints, Start,, 1);
|
||||
if( Other==None )
|
||||
{
|
||||
Break;
|
||||
}
|
||||
else if( Other==Instigator || Other.Base == Instigator )
|
||||
{
|
||||
IgnoreActors[IgnoreActors.Length] = Other;
|
||||
Other.SetCollision(false);
|
||||
Start = HitLocation;
|
||||
Continue;
|
||||
}
|
||||
|
||||
if( ExtendedZCollision(Other)!=None && Other.Owner!=None )
|
||||
{
|
||||
IgnoreActors[IgnoreActors.Length] = Other;
|
||||
IgnoreActors[IgnoreActors.Length] = Other.Owner;
|
||||
Other.SetCollision(false);
|
||||
Other.Owner.SetCollision(false);
|
||||
DamagePawn = Pawn(Other.Owner);
|
||||
Monster = KFMonster(Other.Owner);
|
||||
}
|
||||
|
||||
if ( !Other.bWorldGeometry && Other!=Level )
|
||||
{
|
||||
HitPawn = KFPawn(Other);
|
||||
|
||||
if ( HitPawn != none )
|
||||
{
|
||||
// Hit detection debugging
|
||||
/*log("PreLaunchTrace hit "$HitPawn.PlayerReplicationInfo.PlayerName);
|
||||
HitPawn.HitStart = Start;
|
||||
HitPawn.HitEnd = End;*/
|
||||
if(!HitPawn.bDeleteMe)
|
||||
HitPawn.ProcessLocationalDamage(int(HitDamage), Instigator, HitLocation, Momentum*X,DamageType,HitPoints);
|
||||
|
||||
// Hit detection debugging
|
||||
/*if( Level.NetMode == NM_Standalone)
|
||||
HitPawn.DrawBoneLocation();*/
|
||||
|
||||
IgnoreActors[IgnoreActors.Length] = Other;
|
||||
IgnoreActors[IgnoreActors.Length] = HitPawn.AuxCollisionCylinder;
|
||||
Other.SetCollision(false);
|
||||
HitPawn.AuxCollisionCylinder.SetCollision(false);
|
||||
DamagePawn = HitPawn;
|
||||
}
|
||||
else
|
||||
{
|
||||
if( DamagePawn == none )
|
||||
DamagePawn = Pawn(Other);
|
||||
|
||||
if( KFMonster(Other)!=None )
|
||||
{
|
||||
IgnoreActors[IgnoreActors.Length] = Other;
|
||||
Other.SetCollision(false);
|
||||
Monster = KFMonster(Other);
|
||||
//OldHealth = KFMonster(Other).Health;
|
||||
}
|
||||
bWasDecapitated = Monster != none && Monster.bDecapitated;
|
||||
Other.TakeDamage(int(HitDamage), Instigator, HitLocation, Momentum*X, DamageType);
|
||||
if ( DamagePawn != none && (DamagePawn.Health <= 0 || (Monster != none
|
||||
&& !bWasDecapitated && Monster.bDecapitated)) )
|
||||
{
|
||||
KillCount++;
|
||||
}
|
||||
|
||||
// debug info
|
||||
// if ( KFMonster(Other) != none )
|
||||
// log(String(class) $ ": Damage("$PenCounter$") = "
|
||||
// $ int(HitDamage) $"/"$ (OldHealth-KFMonster(Other).Health)
|
||||
// @ KFMonster(Other).MenuName , class.outer.name);
|
||||
}
|
||||
if( ++PenCounter > MaxPenetrations || DamagePawn==None )
|
||||
{
|
||||
Break;
|
||||
}
|
||||
HitDamage *= PenDmgReduction;
|
||||
Start = HitLocation;
|
||||
}
|
||||
else if ( HitScanBlockingVolume(Other)==None )
|
||||
{
|
||||
if( KFWeaponAttachment(Weapon.ThirdPersonActor)!=None )
|
||||
KFWeaponAttachment(Weapon.ThirdPersonActor).UpdateHit(Other,HitLocation,HitNormal);
|
||||
Break;
|
||||
}
|
||||
}
|
||||
|
||||
// Turn the collision back on for any actors we turned it off
|
||||
if ( IgnoreActors.Length > 0 )
|
||||
{
|
||||
for (i=0; i<IgnoreActors.Length; i++)
|
||||
{
|
||||
if ( IgnoreActors[i] != none )
|
||||
IgnoreActors[i].SetCollision(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
PenDmgReduction=0.500000
|
||||
MaxPenetrations=2
|
||||
RecoilRate=0.400000
|
||||
maxVerticalRecoilAngle=3000
|
||||
maxHorizontalRecoilAngle=500
|
||||
FireSoundRef="ScrnWeaponPack_SND.Colt.357_fire3"
|
||||
StereoFireSoundRef="ScrnWeaponPack_SND.Colt.ScrnWeaponPack.357_fire3_ST"
|
||||
NoAmmoSoundRef="KF_HandcannonSnd.50AE_DryFire"
|
||||
DamageType=Class'ScrnWeaponPack.DamTypeColt'
|
||||
DamageMin=350
|
||||
DamageMax=350
|
||||
Momentum=10000.000000
|
||||
bWaitForRelease=True
|
||||
bAttachSmokeEmitter=True
|
||||
TransientSoundVolume=2.000000
|
||||
TransientSoundRadius=150.000000
|
||||
FireAnimRate=1.500000
|
||||
TweenTime=0.025000
|
||||
FireForce="AssaultRifleFire"
|
||||
FireRate=0.900000
|
||||
AmmoClass=Class'ScrnWeaponPack.ColtAmmo'
|
||||
AmmoPerFire=1
|
||||
ShakeRotMag=(X=75.000000,Y=75.000000,Z=400.000000)
|
||||
ShakeRotRate=(X=12500.000000,Y=12500.000000,Z=10000.000000)
|
||||
ShakeRotTime=3.500000
|
||||
ShakeOffsetMag=(X=6.000000,Y=1.000000,Z=8.000000)
|
||||
ShakeOffsetRate=(X=1000.000000,Y=1000.000000,Z=1000.000000)
|
||||
ShakeOffsetTime=2.500000
|
||||
BotRefireRate=0.350000
|
||||
FlashEmitterClass=Class'ROEffects.MuzzleFlash1stKar'
|
||||
aimerror=30.000000
|
||||
Spread=0.015000
|
||||
SpreadStyle=SS_Random
|
||||
}
|
||||
27
kf_sources/ScrnWeaponPack/Classes/ColtPickup.uc
Normal file
27
kf_sources/ScrnWeaponPack/Classes/ColtPickup.uc
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
//==================================================
|
||||
// Colt Python Pickup.
|
||||
//==================================================
|
||||
class ColtPickup extends KFWeaponPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Weight=5.000000
|
||||
cost=1250
|
||||
AmmoCost=30
|
||||
BuyClipSize=6
|
||||
PowerValue=85
|
||||
SpeedValue=20
|
||||
RangeValue=35
|
||||
Description="The Colt Python is a double action handgun chambered for the .357 Magnum cartridge, built on Colt's large I-frame. Pythons have a reputation for accuracy, smooth trigger pull, and a tight cylinder lock-up."
|
||||
ItemName="Colt Python SE"
|
||||
ItemShortName="Colt SE"
|
||||
AmmoItemName=".357"
|
||||
CorrespondingPerkIndex=8
|
||||
EquipmentCategoryID=1
|
||||
InventoryType=Class'ScrnWeaponPack.Colt'
|
||||
PickupMessage="You got the Colt Python handgun"
|
||||
PickupSound=Sound'KF_9MMSnd.9mm_Pickup'
|
||||
PickupForce="AssaultRiflePickup"
|
||||
StaticMesh=StaticMesh'ScrnWeaponPack_SM.WColt_Pickup'
|
||||
CollisionHeight=5.000000
|
||||
}
|
||||
152
kf_sources/ScrnWeaponPack/Classes/DGVEmitter.uc
Normal file
152
kf_sources/ScrnWeaponPack/Classes/DGVEmitter.uc
Normal file
|
|
@ -0,0 +1,152 @@
|
|||
//=============================================================================
|
||||
// DGVEmitter.
|
||||
//
|
||||
// Directional/Gravitational Velocity Emitter.
|
||||
// X Velocity makes particles move forward according to emitter rotation
|
||||
// Y Velocity makes particles move Left/Right
|
||||
// Z Is Up/Down no matter what angle the emitter is rotated
|
||||
// Unfortunately this is only for the StartVelocityRange
|
||||
// bAutoAlignVelocity can be used to automatically realign the StartVelocity
|
||||
// if the emitter is rotated.
|
||||
//
|
||||
// by Nolan "Dark Carnivour" Richert.
|
||||
// Copyright(c) 2005 RuneStorm. All Rights Reserved.
|
||||
//=============================================================================
|
||||
class DGVEmitter extends BallisticEmitter
|
||||
placeable;
|
||||
|
||||
var() bool bAutoAlignVelocity; //If true, StartVelocityRange is automatically realigned when emitter rotates
|
||||
var Rotator OldRotation; //Last different rotation. Used to check if emitter rotated
|
||||
var Range SVX[8], SVY[8], SVZ[8]; //Arrays used to store initial StartVelocityRange values
|
||||
var() Array<int> DisableDGV; //Disable DVG for individual emitter by entering a value
|
||||
var() bool bAutoInit; //Disable to prevent InitDGV from being run from PostBeginPlay()
|
||||
var() bool bAlignOnTrigger; //Align velocity when triggered
|
||||
var() bool bVerticalZ; //Velocity Z is not relative, it moves particles along world Z axis (useful for simulating gravity)
|
||||
var() bool bYIsSpread; //Y velocity applied to Z axis as emmiter aims up. Only works with bVerticalZ (removes flat looking spread)
|
||||
var() bool bModifyLossRange; //Allow messing with VelocityLossRange...
|
||||
|
||||
simulated event PostBeginPlay ()
|
||||
{
|
||||
Super.PostBeginPlay();
|
||||
if (bAutoInit)
|
||||
InitDGV();
|
||||
}
|
||||
|
||||
simulated function InitDGV()
|
||||
{
|
||||
local int i;
|
||||
|
||||
for (i=0;i<Emitters.Length;i++)
|
||||
{
|
||||
if (DisableDGV.Length > i && DisableDGV[i] != 0)
|
||||
continue;
|
||||
//Remember some stuff...
|
||||
SVX[i] = Emitters[i].StartVelocityRange.X;
|
||||
SVY[i] = Emitters[i].StartVelocityRange.Y;
|
||||
SVZ[i] = Emitters[i].StartVelocityRange.Z;
|
||||
}
|
||||
|
||||
//Set up for auto align
|
||||
if (bAutoAlignVelocity)
|
||||
{
|
||||
OldRotation = Rotation;
|
||||
SetTimer (0.1, True);
|
||||
}
|
||||
//Initial alignment
|
||||
AlignVelocity();
|
||||
}
|
||||
|
||||
event Trigger( Actor Other, Pawn EventInstigator )
|
||||
{
|
||||
if (bAlignOnTrigger)
|
||||
AlignVelocity();
|
||||
Super.Trigger (Other, EventInstigator);
|
||||
}
|
||||
|
||||
// Calculate the StartVelocityRange according to rotation
|
||||
simulated function AlignVelocity ()
|
||||
{
|
||||
// local Range SV0;
|
||||
local int i;
|
||||
local vector X, Y, Z, VMax, VMin;
|
||||
|
||||
GetAxes(Rotation,X,Y,Z);
|
||||
for (i=0;i<Emitters.Length;i++)
|
||||
{
|
||||
if (DisableDGV.Length > i && DisableDGV[i] != 0)
|
||||
continue;
|
||||
// if (SVX[i] == SV0 && SVY[i] == SV0 && SVZ[i] == SV0)
|
||||
// continue;
|
||||
|
||||
//Adjust StartVelocityRange
|
||||
if (bVerticalZ)
|
||||
{
|
||||
VMax = X * SVX[i].Max + Y * SVY[i].Max + Vect(0,0,1) * SVZ[i].Max;
|
||||
VMin = X * SVX[i].Min + Y * SVY[i].Min + Vect(0,0,1) * SVZ[i].Min;
|
||||
if (bYIsSpread)
|
||||
{
|
||||
VMax = VMax + Z * SVY[i].Max * Abs(X.Z);
|
||||
VMin = VMin + Z * SVY[i].Min * Abs(X.Z);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
VMax = X * SVX[i].Max + Y * SVY[i].Max + Z * SVZ[i].Max;
|
||||
VMin = X * SVX[i].Min + Y * SVY[i].Min + Z * SVZ[i].Min;
|
||||
}
|
||||
Emitters[i].StartVelocityRange = VtoRV(VMax, VMin);
|
||||
|
||||
//Adjust StartLocationRange
|
||||
VMax = X * default.Emitters[i].StartLocationRange.X.Max + Y * default.Emitters[i].StartLocationRange.Y.Max + Z * default.Emitters[i].StartLocationRange.Z.Max;
|
||||
VMin = X * default.Emitters[i].StartLocationRange.X.Min + Y * default.Emitters[i].StartLocationRange.Y.Min + Z * default.Emitters[i].StartLocationRange.Z.Min;
|
||||
Emitters[i].StartLocationRange = VtoRV(VMax, VMin);
|
||||
//Adjust StartLocationOffset
|
||||
Emitters[i].StartLocationOffset = X * default.Emitters[i].StartLocationOffset.X + Y * default.Emitters[i].StartLocationOffset.Y + Z * default.Emitters[i].StartLocationOffset.Z;
|
||||
|
||||
if (SpriteEmitter(Emitters[i])!=None)
|
||||
{
|
||||
// Adjust ProjectionNormal
|
||||
SpriteEmitter(Emitters[i]).ProjectionNormal = X * SpriteEmitter(default.Emitters[i]).ProjectionNormal.X + Y * SpriteEmitter(default.Emitters[i]).ProjectionNormal.Y + Z * SpriteEmitter(default.Emitters[i]).ProjectionNormal.Z;
|
||||
}
|
||||
|
||||
//Adjust VelocityLossRange
|
||||
if (bModifyLossRange)
|
||||
{
|
||||
// VMax = Abs(X * default.Emitters[i].VelocityLossRange.X.Max) + Abs(Y * default.Emitters[i].VelocityLossRange.Y.Max) + Abs(Z * default.Emitters[i].VelocityLossRange.Z.Max);
|
||||
// VMin = Abs(X * default.Emitters[i].VelocityLossRange.X.Min) + Abs(Y * default.Emitters[i].VelocityLossRange.Y.Min) + Abs(Z * default.Emitters[i].VelocityLossRange.Z.Min);
|
||||
|
||||
VMax.X = Abs(X.X * default.Emitters[i].VelocityLossRange.X.Max) + Abs(X.Y * default.Emitters[i].VelocityLossRange.X.Max) + Abs(X.Z * default.Emitters[i].VelocityLossRange.X.Max);
|
||||
VMax.Y = Abs(Y.X * default.Emitters[i].VelocityLossRange.Y.Max) + Abs(Y.Y * default.Emitters[i].VelocityLossRange.Y.Max) + Abs(Y.Z * default.Emitters[i].VelocityLossRange.Y.Max);
|
||||
VMax.Z = Abs(Z.X * default.Emitters[i].VelocityLossRange.Z.Max) + Abs(Z.Y * default.Emitters[i].VelocityLossRange.Z.Max) + Abs(Z.Z * default.Emitters[i].VelocityLossRange.Z.Max);
|
||||
|
||||
VMin.X = Abs(X.X * default.Emitters[i].VelocityLossRange.X.Min) + Abs(X.Y * default.Emitters[i].VelocityLossRange.X.Min) + Abs(X.Z * default.Emitters[i].VelocityLossRange.X.Min);
|
||||
VMin.Y = Abs(Y.X * default.Emitters[i].VelocityLossRange.Y.Min) + Abs(Y.Y * default.Emitters[i].VelocityLossRange.Y.Min) + Abs(Y.Z * default.Emitters[i].VelocityLossRange.Y.Min);
|
||||
VMin.Z = Abs(Z.X * default.Emitters[i].VelocityLossRange.Z.Min) + Abs(Z.Y * default.Emitters[i].VelocityLossRange.Z.Min) + Abs(Z.Z * default.Emitters[i].VelocityLossRange.Z.Min);
|
||||
|
||||
Emitters[i].VelocityLossRange = VtoRV(VMax, VMin);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Check to see if we should realign StartVelocityRange every 0.1 seconds
|
||||
simulated event timer ()
|
||||
{
|
||||
if (!bAutoAlignVelocity)
|
||||
return;
|
||||
if (Rotation != OldRotation)
|
||||
{
|
||||
OldRotation = Rotation;
|
||||
AlignVelocity();
|
||||
}
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
bAutoInit=True
|
||||
bAlignOnTrigger=True
|
||||
bVerticalZ=True
|
||||
bYIsSpread=True
|
||||
bModifyLossRange=True
|
||||
bNoDelete=False
|
||||
bDirectional=True
|
||||
}
|
||||
28
kf_sources/ScrnWeaponPack/Classes/DamTypeAK12AssaultRifle.uc
Normal file
28
kf_sources/ScrnWeaponPack/Classes/DamTypeAK12AssaultRifle.uc
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
class DamTypeAK12AssaultRifle extends KFProjectileWeaponDamageType
|
||||
abstract;
|
||||
|
||||
// Award also Shiver kills with 2x Stalker progress
|
||||
// Count only 1 kill from now on, because new version of Shiver.se calls
|
||||
// AwardKill() twice: for the decapitator and for the killer
|
||||
static function AwardKill(KFSteamStatsAndAchievements KFStatsAndAchievements, KFPlayerController Killer, KFMonster Killed )
|
||||
{
|
||||
if( Killed.IsA('ZombieStalker') || Killed.IsA('ZombieShiver') )
|
||||
KFStatsAndAchievements.AddStalkerKill();
|
||||
}
|
||||
|
||||
static function AwardDamage(KFSteamStatsAndAchievements KFStatsAndAchievements, int Amount)
|
||||
{
|
||||
KFStatsAndAchievements.AddBullpupDamage(Amount);
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
HeadShotDamageMult=1.300000
|
||||
WeaponClass=Class'ScrnWeaponPack.AK12AssaultRifle'
|
||||
DeathString="%k killed %o (AK-12)."
|
||||
FemaleSuicide="%o shot herself in the foot."
|
||||
MaleSuicide="%o shot himself in the foot."
|
||||
bRagdollBullet=True
|
||||
KDeathVel=400.000000
|
||||
KDeathUpKick=120.000000
|
||||
}
|
||||
29
kf_sources/ScrnWeaponPack/Classes/DamTypeAK74AssaultRifle.uc
Normal file
29
kf_sources/ScrnWeaponPack/Classes/DamTypeAK74AssaultRifle.uc
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
class DamTypeAK74AssaultRifle extends KFProjectileWeaponDamageType
|
||||
abstract;
|
||||
|
||||
|
||||
// Award also Shiver kills with 2x Stalker progress
|
||||
// Count only 1 kill from now on, because new version of Shiver.se calls
|
||||
// AwardKill() twice: for the decapitator and for the killer
|
||||
static function AwardKill(KFSteamStatsAndAchievements KFStatsAndAchievements, KFPlayerController Killer, KFMonster Killed )
|
||||
{
|
||||
if( Killed.IsA('ZombieStalker') || Killed.IsA('ZombieShiver') )
|
||||
KFStatsAndAchievements.AddStalkerKill();
|
||||
}
|
||||
|
||||
static function AwardDamage(KFSteamStatsAndAchievements KFStatsAndAchievements, int Amount)
|
||||
{
|
||||
KFStatsAndAchievements.AddBullpupDamage(Amount);
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
WeaponClass=Class'ScrnWeaponPack.AKC74AssaultRifle'
|
||||
DeathString="%k killed %o (AK-74)."
|
||||
FemaleSuicide="%o shot herself in the foot."
|
||||
MaleSuicide="%o shot himself in the foot."
|
||||
bRagdollBullet=True
|
||||
KDamageImpulse=6500.000000
|
||||
KDeathVel=250.000000
|
||||
KDeathUpKick=80.000000
|
||||
}
|
||||
26
kf_sources/ScrnWeaponPack/Classes/DamTypeCZ805M.uc
Normal file
26
kf_sources/ScrnWeaponPack/Classes/DamTypeCZ805M.uc
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
class DamTypeCZ805M extends ScrnDamTypeMedic
|
||||
abstract;
|
||||
|
||||
// Award also Shiver kills with 2x Stalker progress
|
||||
// Count only 1 kill from now on, because new version of Shiver.se calls
|
||||
// AwardKill() twice: for the decapitator and for the killer
|
||||
static function AwardKill(KFSteamStatsAndAchievements KFStatsAndAchievements, KFPlayerController Killer, KFMonster Killed )
|
||||
{
|
||||
if( Killed.IsA('ZombieStalker') || Killed.IsA('ZombieShiver') )
|
||||
KFStatsAndAchievements.AddStalkerKill();
|
||||
}
|
||||
|
||||
static function AwardDamage(KFSteamStatsAndAchievements KFStatsAndAchievements, int Amount)
|
||||
{
|
||||
KFStatsAndAchievements.AddBullpupDamage(Amount);
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
HeadShotDamageMult=1.200000
|
||||
WeaponClass=Class'ScrnWeaponPack.CZ805M'
|
||||
DeathString="%k killed %o (CZ 805)."
|
||||
KDamageImpulse=5500.000000
|
||||
KDeathVel=175.000000
|
||||
KDeathUpKick=20.000000
|
||||
}
|
||||
55
kf_sources/ScrnWeaponPack/Classes/DamTypeColt.uc
Normal file
55
kf_sources/ScrnWeaponPack/Classes/DamTypeColt.uc
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
class DamTypeColt extends KFProjectileWeaponDamageType
|
||||
abstract;
|
||||
|
||||
static function AwardKill(KFSteamStatsAndAchievements KFStatsAndAchievements, KFPlayerController Killer, KFMonster Killed )
|
||||
{
|
||||
local SRStatsBase stats;
|
||||
|
||||
// do not count kills of decapitated specimens - those are counted in ScoredHeadshot()
|
||||
if ( Killed != none && Killed.bDecapitated )
|
||||
return;
|
||||
|
||||
stats = SRStatsBase(KFStatsAndAchievements);
|
||||
if( stats !=None && stats.Rep!=None )
|
||||
stats.Rep.ProgressCustomValue(Class'ScrnBalanceSrv.ScrnPistolKillProgress',1);
|
||||
}
|
||||
|
||||
static function ScoredHeadshot(KFSteamStatsAndAchievements KFStatsAndAchievements, class<KFMonster> MonsterClass, bool bLaserSightedM14EBRKill)
|
||||
{
|
||||
local SRStatsBase stats;
|
||||
|
||||
if ( KFStatsAndAchievements != none ) {
|
||||
if ( Default.bSniperWeapon )
|
||||
KFStatsAndAchievements.AddHeadshotKill(bLaserSightedM14EBRKill);
|
||||
|
||||
stats = SRStatsBase(KFStatsAndAchievements);
|
||||
if( stats !=None && stats.Rep!=None )
|
||||
stats.Rep.ProgressCustomValue(Class'ScrnBalanceSrv.ScrnPistolKillProgress',1);
|
||||
}
|
||||
}
|
||||
|
||||
static function AwardDamage(KFSteamStatsAndAchievements KFStatsAndAchievements, int Amount)
|
||||
{
|
||||
local SRStatsBase stats;
|
||||
|
||||
stats = SRStatsBase(KFStatsAndAchievements);
|
||||
if( stats !=None && stats.Rep!=None )
|
||||
stats.Rep.ProgressCustomValue(Class'ScrnBalanceSrv.ScrnPistolDamageProgress',Amount);
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
HeadShotDamageMult=1.150000
|
||||
bSniperWeapon=True
|
||||
WeaponClass=Class'ScrnWeaponPack.Colt'
|
||||
DeathString="%k 'colted' %o."
|
||||
FemaleSuicide="%o shot herself in the foot."
|
||||
MaleSuicide="%o shot himself in the foot."
|
||||
bRagdollBullet=True
|
||||
bBulletHit=True
|
||||
FlashFog=(X=600.000000)
|
||||
KDamageImpulse=1000.000000
|
||||
KDeathVel=500.000000
|
||||
KDeathUpKick=150.000000
|
||||
VehicleDamageScaling=0.700000
|
||||
}
|
||||
29
kf_sources/ScrnWeaponPack/Classes/DamTypeHK417AR.uc
Normal file
29
kf_sources/ScrnWeaponPack/Classes/DamTypeHK417AR.uc
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
class DamTypeHK417AR extends KFProjectileWeaponDamageType;
|
||||
|
||||
// Award also Shiver kills with 2x Stalker progress
|
||||
// Count only 1 kill from now on, because new version of Shiver.se calls
|
||||
// AwardKill() twice: for the decapitator and for the killer
|
||||
static function AwardKill(KFSteamStatsAndAchievements KFStatsAndAchievements, KFPlayerController Killer, KFMonster Killed )
|
||||
{
|
||||
if( Killed.IsA('ZombieStalker') || Killed.IsA('ZombieShiver') )
|
||||
KFStatsAndAchievements.AddStalkerKill();
|
||||
}
|
||||
|
||||
static function AwardDamage(KFSteamStatsAndAchievements KFStatsAndAchievements, int Amount)
|
||||
{
|
||||
KFStatsAndAchievements.AddBullpupDamage(Amount);
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
HeadShotDamageMult=1.300000
|
||||
WeaponClass=Class'ScrnWeaponPack.HK417AR'
|
||||
DeathString="%k killed %o (HK-417)."
|
||||
bRagdollBullet=True
|
||||
bBulletHit=True
|
||||
FlashFog=(X=600.000000)
|
||||
KDamageImpulse=4500.000000
|
||||
KDeathVel=200.000000
|
||||
KDeathUpKick=20.000000
|
||||
VehicleDamageScaling=0.800000
|
||||
}
|
||||
14
kf_sources/ScrnWeaponPack/Classes/DamTypeHuntingRifle.uc
Normal file
14
kf_sources/ScrnWeaponPack/Classes/DamTypeHuntingRifle.uc
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class DamTypeHuntingRifle extends DamTypeKFSnipe
|
||||
abstract;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
HeadShotDamageMult=2.100000
|
||||
WeaponClass=Class'ScrnWeaponPack.HuntingRifle'
|
||||
DeathString="%k killed %o (Hunting Rifle)."
|
||||
FemaleSuicide="%o shot herself in the foot."
|
||||
MaleSuicide="%o shot himself in the foot."
|
||||
}
|
||||
14
kf_sources/ScrnWeaponPack/Classes/DamTypeMedicOvercharge.uc
Normal file
14
kf_sources/ScrnWeaponPack/Classes/DamTypeMedicOvercharge.uc
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
class DamTypeMedicOvercharge extends ScrnDamTypeMedicBase
|
||||
abstract;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
bCheckForHeadShots=False
|
||||
DeathString="%o took overdose from by %k."
|
||||
FemaleSuicide="%o took overdose."
|
||||
MaleSuicide="%o took overdose."
|
||||
bArmorStops=False
|
||||
bAlwaysGibs=True
|
||||
bLocationalHit=False
|
||||
GibPerterbation=1.000000
|
||||
}
|
||||
17
kf_sources/ScrnWeaponPack/Classes/DamTypeMedicPistol.uc
Normal file
17
kf_sources/ScrnWeaponPack/Classes/DamTypeMedicPistol.uc
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
class DamTypeMedicPistol extends ScrnDamTypeMedicBase
|
||||
abstract;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
HeadShotDamageMult=4.000000
|
||||
bSniperWeapon=True
|
||||
WeaponClass=Class'ScrnWeaponPack.MedicPistol'
|
||||
DeathString="%k killed %o (healing darts)."
|
||||
FemaleSuicide="%o overdosed healing injections."
|
||||
MaleSuicide="%o overdosed healing injections."
|
||||
bBulletHit=True
|
||||
FlashFog=(X=600.000000)
|
||||
KDamageImpulse=750.000000
|
||||
KDeathVel=100.000000
|
||||
VehicleDamageScaling=0.700000
|
||||
}
|
||||
11
kf_sources/ScrnWeaponPack/Classes/DamTypeSVD.uc
Normal file
11
kf_sources/ScrnWeaponPack/Classes/DamTypeSVD.uc
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
class DamTypeSVD extends DamTypeKFSnipe;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
HeadShotDamageMult=1.000000
|
||||
WeaponClass=Class'ScrnWeaponPack.SVDS'
|
||||
DeathString="%k killed %o (SVD)."
|
||||
KDamageImpulse=4000.000000
|
||||
KDeathVel=170.000000
|
||||
KDeathUpKick=10.000000
|
||||
}
|
||||
15
kf_sources/ScrnWeaponPack/Classes/DamTypeSVDm.uc
Normal file
15
kf_sources/ScrnWeaponPack/Classes/DamTypeSVDm.uc
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
class DamTypeSVDm extends KFWeaponDamageType
|
||||
abstract;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
HeadShotDamageMult=1.000000
|
||||
bIsMeleeDamage=True
|
||||
WeaponClass=Class'ScrnWeaponPack.SVD'
|
||||
DeathString="%k killed %o (SVD)."
|
||||
PawnDamageSounds(0)=Sound'KFPawnDamageSound.MeleeDamageSounds.axehitflesh'
|
||||
KDamageImpulse=1500.000000
|
||||
KDeathVel=110.000000
|
||||
KDeathUpKick=1.000000
|
||||
VehicleDamageScaling=0.700000
|
||||
}
|
||||
BIN
kf_sources/ScrnWeaponPack/Classes/DamTypeSaiga12c.uc
Normal file
BIN
kf_sources/ScrnWeaponPack/Classes/DamTypeSaiga12c.uc
Normal file
Binary file not shown.
18
kf_sources/ScrnWeaponPack/Classes/DamTypeSpas.uc
Normal file
18
kf_sources/ScrnWeaponPack/Classes/DamTypeSpas.uc
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
class DamTypeSpas extends KFProjectileWeaponDamageType
|
||||
abstract;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
bIsPowerWeapon=True
|
||||
WeaponClass=Class'ScrnWeaponPack.Spas'
|
||||
DeathString="%k killed %o (SPAS-12)."
|
||||
FemaleSuicide="%o shot herself in the foot."
|
||||
MaleSuicide="%o shot himself in the foot."
|
||||
bRagdollBullet=True
|
||||
bBulletHit=True
|
||||
FlashFog=(X=600.000000)
|
||||
KDamageImpulse=10000.000000
|
||||
KDeathVel=300.000000
|
||||
KDeathUpKick=100.000000
|
||||
VehicleDamageScaling=0.700000
|
||||
}
|
||||
30
kf_sources/ScrnWeaponPack/Classes/DamTypeVALDT.uc
Normal file
30
kf_sources/ScrnWeaponPack/Classes/DamTypeVALDT.uc
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
class DamTypeVALDT extends KFProjectileWeaponDamageType
|
||||
abstract;
|
||||
|
||||
|
||||
// Award also Shiver kills with 2x Stalker progress
|
||||
// Count only 1 kill from now on, because new version of Shiver.se calls
|
||||
// AwardKill() twice: for the decapitator and for the killer
|
||||
static function AwardKill(KFSteamStatsAndAchievements KFStatsAndAchievements, KFPlayerController Killer, KFMonster Killed )
|
||||
{
|
||||
if( Killed.IsA('ZombieStalker') || Killed.IsA('ZombieShiver') )
|
||||
KFStatsAndAchievements.AddStalkerKill();
|
||||
}
|
||||
|
||||
static function AwardDamage(KFSteamStatsAndAchievements KFStatsAndAchievements, int Amount)
|
||||
{
|
||||
KFStatsAndAchievements.AddBullpupDamage(Amount);
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
HeadShotDamageMult=1.000000
|
||||
WeaponClass=Class'ScrnWeaponPack.VALDTAssaultRifle'
|
||||
DeathString="%k killed %o (VAL)."
|
||||
FemaleSuicide="%o shot herself in the foot."
|
||||
MaleSuicide="%o shot himself in the foot."
|
||||
bRagdollBullet=True
|
||||
KDamageImpulse=6500.000000
|
||||
KDeathVel=150.000000
|
||||
KDeathUpKick=40.000000
|
||||
}
|
||||
11
kf_sources/ScrnWeaponPack/Classes/DamTypeVSSDT.uc
Normal file
11
kf_sources/ScrnWeaponPack/Classes/DamTypeVSSDT.uc
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
class DamTypeVSSDT extends DamTypeKFSnipe;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
HeadShotDamageMult=1.000000
|
||||
WeaponClass=Class'ScrnWeaponPack.VSSDT'
|
||||
DeathString="%k killed %o (Vintorez)."
|
||||
KDamageImpulse=3000.000000
|
||||
KDeathVel=110.000000
|
||||
KDeathUpKick=10.000000
|
||||
}
|
||||
13
kf_sources/ScrnWeaponPack/Classes/FakedHopMine.uc
Normal file
13
kf_sources/ScrnWeaponPack/Classes/FakedHopMine.uc
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
Class FakedHopMine extends Actor;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
DrawType=DT_Mesh
|
||||
bAlwaysRelevant=True
|
||||
bReplicateMovement=False
|
||||
bSkipActorPropertyReplication=True
|
||||
RemoteRole=ROLE_None
|
||||
Mesh=SkeletalMesh'ScrnWeaponPack_A.HopMineM'
|
||||
DrawScale=0.600000
|
||||
bBlockHitPointTraces=False
|
||||
}
|
||||
217
kf_sources/ScrnWeaponPack/Classes/HK417AR.uc
Normal file
217
kf_sources/ScrnWeaponPack/Classes/HK417AR.uc
Normal file
|
|
@ -0,0 +1,217 @@
|
|||
class HK417AR extends ScopedWeapon;
|
||||
|
||||
var bool bChangedViewOffset; //stores if vieweoffset has been changed
|
||||
|
||||
|
||||
//overidden to add PlayerViewOffset change
|
||||
simulated event OnZoomInFinished()
|
||||
{
|
||||
local name anim;
|
||||
local float frame, rate;
|
||||
|
||||
GetAnimParams(0, anim, frame, rate);
|
||||
|
||||
if ( !bChangedViewOffset) {
|
||||
PlayerViewOffset.X += 1.00; //move the viewmodel further from the camera
|
||||
bChangedViewOffset = True;
|
||||
}
|
||||
if (ClientState == WS_ReadyToFire)
|
||||
{
|
||||
// Play the iron idle anim when we're finished zooming in
|
||||
if (anim == IdleAnim)
|
||||
{
|
||||
PlayIdle();
|
||||
}
|
||||
}
|
||||
Super.OnZoomInFinished(); //needed to draw textured scope
|
||||
}
|
||||
|
||||
|
||||
//overridden to reset bool without having to wait for zoom out to finish, to fix if player spams ironsight toggle
|
||||
simulated exec function ToggleIronSights()
|
||||
{
|
||||
if( bHasAimingMode )
|
||||
{
|
||||
bChangedViewOffset = False; //reset my bool var
|
||||
if( bAimingRifle )
|
||||
{
|
||||
PerformZoom(false);
|
||||
TweenAnim(IdleAnim,ZoomTime/2); //fix zoom out
|
||||
}
|
||||
else
|
||||
{
|
||||
if( Owner != none && Owner.Physics == PHYS_Falling &&
|
||||
Owner.PhysicsVolume.Gravity.Z <= class'PhysicsVolume'.default.Gravity.Z )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
InterruptReload();
|
||||
|
||||
if( bIsReloading || !CanZoomNow() )
|
||||
return;
|
||||
|
||||
PerformZoom(True);
|
||||
TweenAnim(IdleAimAnim,ZoomTime/2); //fix zoom in
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
exec function ReloadMeNow()
|
||||
{
|
||||
local float ReloadMulti;
|
||||
|
||||
if(!AllowReload())
|
||||
return;
|
||||
if ( bHasAimingMode && bAimingRifle )
|
||||
{
|
||||
FireMode[1].bIsFiring = False;
|
||||
|
||||
ZoomOut(false);
|
||||
if( Role < ROLE_Authority)
|
||||
ServerZoomOut(false);
|
||||
}
|
||||
|
||||
if ( KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo) != none && KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo).ClientVeteranSkill != none )
|
||||
ReloadMulti = KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo).ClientVeteranSkill.Static.GetReloadSpeedModifier(KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo), self);
|
||||
else
|
||||
ReloadMulti = 1.0;
|
||||
|
||||
bIsReloading = true;
|
||||
ReloadTimer = Level.TimeSeconds;
|
||||
bShortReload = MagAmmoRemaining > 0;
|
||||
if ( bShortReload )
|
||||
ReloadRate = Default.ReloadShortRate / ReloadMulti;
|
||||
else
|
||||
ReloadRate = Default.ReloadRate / ReloadMulti;
|
||||
|
||||
if( bHoldToReload )
|
||||
{
|
||||
NumLoadedThisReload = 0;
|
||||
}
|
||||
ClientReload();
|
||||
Instigator.SetAnimAction(WeaponReloadAnim);
|
||||
if ( Level.Game.NumPlayers > 1 && KFGameType(Level.Game).bWaveInProgress && KFPlayerController(Instigator.Controller) != none &&
|
||||
Level.TimeSeconds - KFPlayerController(Instigator.Controller).LastReloadMessageTime > KFPlayerController(Instigator.Controller).ReloadMessageDelay )
|
||||
{
|
||||
KFPlayerController(Instigator.Controller).Speech('AUTO', 2, "");
|
||||
KFPlayerController(Instigator.Controller).LastReloadMessageTime = Level.TimeSeconds;
|
||||
}
|
||||
}
|
||||
|
||||
simulated function ClientReload()
|
||||
{
|
||||
local float ReloadMulti;
|
||||
if ( bHasAimingMode && bAimingRifle )
|
||||
{
|
||||
FireMode[1].bIsFiring = False;
|
||||
|
||||
ZoomOut(false);
|
||||
if( Role < ROLE_Authority)
|
||||
ServerZoomOut(false);
|
||||
}
|
||||
|
||||
if ( KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo) != none && KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo).ClientVeteranSkill != none )
|
||||
ReloadMulti = KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo).ClientVeteranSkill.Static.GetReloadSpeedModifier(KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo), self);
|
||||
else
|
||||
ReloadMulti = 1.0;
|
||||
|
||||
bIsReloading = true;
|
||||
if (MagAmmoRemaining <= 0)
|
||||
{
|
||||
PlayAnim(ReloadAnim, ReloadAnimRate*ReloadMulti, 0.1);
|
||||
}
|
||||
else if (MagAmmoRemaining >= 1)
|
||||
{
|
||||
PlayAnim(ReloadShortAnim, ReloadAnimRate*ReloadMulti, 0.1);
|
||||
}
|
||||
}
|
||||
|
||||
function AddReloadedAmmo()
|
||||
{
|
||||
local int a;
|
||||
|
||||
UpdateMagCapacity(Instigator.PlayerReplicationInfo);
|
||||
|
||||
a = MagCapacity;
|
||||
if ( bShortReload )
|
||||
a++; // 1 bullet already bolted
|
||||
|
||||
if ( AmmoAmount(0) >= a )
|
||||
MagAmmoRemaining = a;
|
||||
else
|
||||
MagAmmoRemaining = AmmoAmount(0);
|
||||
|
||||
// this seems redudant -- PooSH
|
||||
// if( !bHoldToReload )
|
||||
// {
|
||||
// ClientForceKFAmmoUpdate(MagAmmoRemaining,AmmoAmount(0));
|
||||
// }
|
||||
|
||||
if ( PlayerController(Instigator.Controller) != none && KFSteamStatsAndAchievements(PlayerController(Instigator.Controller).SteamStatsAndAchievements) != none )
|
||||
{
|
||||
KFSteamStatsAndAchievements(PlayerController(Instigator.Controller).SteamStatsAndAchievements).OnWeaponReloaded();
|
||||
}
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
lenseMaterialID=8
|
||||
scopePortalFOVHigh=40.000000
|
||||
scopePortalFOV=40.000000
|
||||
ZoomMatRef="ScrnWeaponPack_T.HK417AR.HK417Scope_FB"
|
||||
ScriptedTextureFallbackRef="KF_Weapons_Trip_T.Rifles.CBLens_cmb"
|
||||
CrosshairTexRef="ScrnWeaponPack_T.HK417AR.HK417Scope"
|
||||
ReloadShortAnim="Reload"
|
||||
ReloadShortRate=2.570000
|
||||
bHasScope=True
|
||||
ZoomedDisplayFOVHigh=60.000000
|
||||
MagCapacity=15
|
||||
ReloadRate=3.150000
|
||||
ReloadAnim="Reload"
|
||||
ReloadAnimRate=1.000000
|
||||
WeaponReloadAnim="Reload_M4"
|
||||
Weight=8.000000
|
||||
bHasAimingMode=True
|
||||
IdleAimAnim="Iron_Idle"
|
||||
StandardDisplayFOV=65.000000
|
||||
bModeZeroCanDryFire=True
|
||||
SleeveNum=0
|
||||
TraderInfoTexture=Texture'ScrnWeaponPack_T.HK417AR.HK417_Trader'
|
||||
MeshRef="ScrnWeaponPack_A.HK417_mesh"
|
||||
SkinRefs(0)="KF_Weapons3_Trip_T.hands.Priest_Hands_1st_P"
|
||||
SkinRefs(1)="ScrnWeaponPack_T.HK417AR.hk417_sk1_d2"
|
||||
SkinRefs(2)="ScrnWeaponPack_T.HK417AR.mueller"
|
||||
SkinRefs(3)="ScrnWeaponPack_T.HK417AR.body"
|
||||
SkinRefs(4)="ScrnWeaponPack_T.HK417AR.body2"
|
||||
SkinRefs(5)="ScrnWeaponPack_T.HK417AR.hk416_5"
|
||||
SkinRefs(6)="ScrnWeaponPack_T.HK417AR.clip_hk417"
|
||||
SkinRefs(7)="ScrnWeaponPack_T.HK417AR.hk416_8"
|
||||
SkinRefs(8)="KF_Weapons_Trip_T.Rifles.CBLens_cmb"
|
||||
SelectSoundRef="ScrnWeaponPack_SND.HK417AR.HK417_select"
|
||||
HudImageRef="ScrnWeaponPack_T.HK417AR.HK417_Unselected"
|
||||
SelectedHudImageRef="ScrnWeaponPack_T.HK417AR.HK417_selected"
|
||||
PlayerIronSightFOV=32.000000
|
||||
ZoomedDisplayFOV=60.000000
|
||||
FireModeClass(0)=Class'ScrnWeaponPack.HK417Fire'
|
||||
FireModeClass(1)=Class'KFMod.NoFire'
|
||||
PutDownAnim="PutDown"
|
||||
SelectAnimRate=1.000000
|
||||
BringUpTime=1.000000
|
||||
SelectForce="SwitchToAssaultRifle"
|
||||
AIRating=0.650000
|
||||
CurrentRating=0.650000
|
||||
Description="The Heckler & Koch HK417 is a gas-operated, selective fire rifle with a rotating bolt and is essentially an enlarged HK416 assault rifle. Chambered for the full power 7.62x51mm NATO round, instead of a less powerful intermediate cartridge, the HK417 is intended for use as a designated marksman rifle, and in other roles where the greater penetrative power and range of the 7.62x51mm NATO round are required."
|
||||
DisplayFOV=65.000000
|
||||
Priority=100
|
||||
CustomCrosshair=11
|
||||
CustomCrossHairTextureName="Crosshairs.HUD.Crosshair_Cross5"
|
||||
InventoryGroup=4
|
||||
GroupOffset=3
|
||||
PickupClass=Class'ScrnWeaponPack.HK417Pickup'
|
||||
PlayerViewOffset=(X=14.000000,Y=7.000000,Z=-4.000000)
|
||||
BobDamping=6.000000
|
||||
AttachmentClass=Class'ScrnWeaponPack.HK417Attachment'
|
||||
IconCoords=(X1=253,Y1=146,X2=333,Y2=181)
|
||||
ItemName="HK-417 SE"
|
||||
}
|
||||
14
kf_sources/ScrnWeaponPack/Classes/HK417Ammo.uc
Normal file
14
kf_sources/ScrnWeaponPack/Classes/HK417Ammo.uc
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
class HK417Ammo extends KFAmmunition;
|
||||
|
||||
#EXEC OBJ LOAD FILE=InterfaceContent.utx
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoPickupAmount=20
|
||||
MaxAmmo=160
|
||||
InitialAmount=80
|
||||
PickupClass=Class'ScrnWeaponPack.HK417AmmoPickup'
|
||||
IconMaterial=Texture'KillingFloorHUD.Generic.HUD'
|
||||
IconCoords=(X1=338,Y1=40,X2=393,Y2=79)
|
||||
ItemName="7.62x51mm NATO"
|
||||
}
|
||||
8
kf_sources/ScrnWeaponPack/Classes/HK417AmmoPickup.uc
Normal file
8
kf_sources/ScrnWeaponPack/Classes/HK417AmmoPickup.uc
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
class HK417AmmoPickup extends KFAmmoPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoAmount=20
|
||||
InventoryType=Class'ScrnWeaponPack.HK417Ammo'
|
||||
PickupMessage="7.62x51mm NATO"
|
||||
}
|
||||
59
kf_sources/ScrnWeaponPack/Classes/HK417Attachment.uc
Normal file
59
kf_sources/ScrnWeaponPack/Classes/HK417Attachment.uc
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
class HK417Attachment 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="ScrnWeaponPack_A.HK417_3rd"
|
||||
WeaponAmbientScale=2.000000
|
||||
bRapidFire=True
|
||||
bAltRapidFire=True
|
||||
SplashEffect=Class'ROEffects.BulletSplashEmitter'
|
||||
DrawScale=0.600000
|
||||
}
|
||||
62
kf_sources/ScrnWeaponPack/Classes/HK417Fire.uc
Normal file
62
kf_sources/ScrnWeaponPack/Classes/HK417Fire.uc
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
class HK417Fire extends KFFire;
|
||||
|
||||
var vector ScopedShakeOffsetMag; //Shake offset mag used for 3d scopes
|
||||
var vector ScopedShakeOffsetRate; //Shake offset rate used for 3d scopes
|
||||
|
||||
//adds faked recoil to 3d scope zoom
|
||||
event ModeDoFire()
|
||||
{
|
||||
if( KFWeapon(Weapon).bAimingRifle )
|
||||
{
|
||||
if ( KFWeapon(Weapon).KFScopeDetail != KF_TextureScope)
|
||||
{
|
||||
ShakeOffsetMag=default.ScopedShakeOffsetMag;
|
||||
ShakeOffsetRate=default.ScopedShakeOffsetRate;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ShakeOffsetMag=default.ShakeOffsetMag;
|
||||
ShakeOffsetRate=default.ShakeOffsetRate;
|
||||
}
|
||||
Super.ModeDoFire();
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
ScopedShakeOffsetMag=(X=3.000000)
|
||||
ScopedShakeOffsetRate=(X=50.000000,Y=50.000000,Z=50.000000)
|
||||
FireAimedAnim="Iron_Idle"
|
||||
RecoilRate=0.070000
|
||||
maxVerticalRecoilAngle=500
|
||||
maxHorizontalRecoilAngle=250
|
||||
ShellEjectClass=Class'ROEffects.KFShellEjectAK'
|
||||
ShellEjectBoneName="Shell_eject"
|
||||
FireSoundRef="ScrnWeaponPack_SND.HK417AR.HK417_shot"
|
||||
StereoFireSoundRef="ScrnWeaponPack_SND.HK417AR.HK417_shot"
|
||||
NoAmmoSoundRef="ScrnWeaponPack_SND.HK417AR.HK417_empty"
|
||||
DamageType=Class'ScrnWeaponPack.DamTypeHK417AR'
|
||||
DamageMin=75
|
||||
DamageMax=85
|
||||
Momentum=20000.000000
|
||||
bPawnRapidFireAnim=True
|
||||
bWaitForRelease=True
|
||||
TransientSoundVolume=1.800000
|
||||
FireLoopAnim="Fire"
|
||||
TweenTime=0.025000
|
||||
FireForce="AssaultRifleFire"
|
||||
FireRate=0.230000
|
||||
AmmoClass=Class'ScrnWeaponPack.HK417Ammo'
|
||||
AmmoPerFire=1
|
||||
ShakeRotMag=(X=50.000000,Y=50.000000,Z=300.000000)
|
||||
ShakeRotRate=(X=9500.000000,Y=9500.000000,Z=9500.000000)
|
||||
ShakeRotTime=0.650000
|
||||
ShakeOffsetMag=(X=3.000000,Y=3.000000,Z=3.000000)
|
||||
ShakeOffsetRate=(X=1000.000000,Y=1000.000000,Z=1000.000000)
|
||||
ShakeOffsetTime=1.250000
|
||||
BotRefireRate=0.990000
|
||||
FlashEmitterClass=Class'ROEffects.MuzzleFlash1stSTG'
|
||||
aimerror=60.000000
|
||||
Spread=0.002000
|
||||
SpreadStyle=SS_Random
|
||||
}
|
||||
33
kf_sources/ScrnWeaponPack/Classes/HK417Pickup.uc
Normal file
33
kf_sources/ScrnWeaponPack/Classes/HK417Pickup.uc
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
class HK417Pickup extends KFWeaponPickup;
|
||||
|
||||
/*
|
||||
function ShowDeagleInfo(Canvas C)
|
||||
{
|
||||
C.SetPos((C.SizeX - C.SizeY) / 2,0);
|
||||
C.DrawTile( Texture'KillingfloorHUD.ClassMenu.Deagle', C.SizeY, C.SizeY, 0.0, 0.0, 256, 256);
|
||||
}
|
||||
*/
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Weight=8.000000
|
||||
cost=3000
|
||||
BuyClipSize=10
|
||||
PowerValue=60
|
||||
SpeedValue=30
|
||||
RangeValue=95
|
||||
Description="The Heckler & Koch HK417 is a gas-operated, selective fire rifle with a rotating bolt and is essentially an enlarged HK416 assault rifle. Chambered for the full power 7.62x51mm NATO round, instead of a less powerful intermediate cartridge, the HK417 is intended for use as a designated marksman rifle, and in other roles where the greater penetrative power and range of the 7.62x51mm NATO round are required."
|
||||
ItemName="HK-417 SE"
|
||||
ItemShortName="HK-417 SE"
|
||||
AmmoItemName="7.62x51mm NATO"
|
||||
CorrespondingPerkIndex=3
|
||||
EquipmentCategoryID=2
|
||||
InventoryType=Class'ScrnWeaponPack.HK417AR'
|
||||
PickupMessage="You've got a HK-417"
|
||||
PickupSound=Sound'ScrnWeaponPack_SND.HK417AR.HK417_pickup'
|
||||
PickupForce="AssaultRiflePickup"
|
||||
StaticMesh=StaticMesh'ScrnWeaponPack_SM.HK417_st'
|
||||
DrawScale=0.800000
|
||||
CollisionRadius=30.000000
|
||||
CollisionHeight=5.000000
|
||||
}
|
||||
115
kf_sources/ScrnWeaponPack/Classes/HRL.uc
Normal file
115
kf_sources/ScrnWeaponPack/Classes/HRL.uc
Normal file
|
|
@ -0,0 +1,115 @@
|
|||
class HRL extends LAW;
|
||||
|
||||
var float ForceIdleTime; //time at which weapon will play idle anim
|
||||
var float ForceIdleOnFireTime; //time after firing for weapon to play idle anim
|
||||
|
||||
//added this to make the HRL rocket draw smaller
|
||||
simulated function PostBeginPlay()
|
||||
{
|
||||
if ( default.mesh == none )
|
||||
{
|
||||
PreloadAssets(self, true);
|
||||
}
|
||||
|
||||
// Weapon will handle FireMode instantiation
|
||||
Super.PostBeginPlay();
|
||||
|
||||
if ( Level.NetMode == NM_DedicatedServer )
|
||||
return;
|
||||
|
||||
SetBoneScale(1, 0.70, 'Rocket'); //make the LAW rocket smoler by 30%
|
||||
|
||||
if( !bHasScope )
|
||||
{
|
||||
KFScopeDetail = KF_None;
|
||||
}
|
||||
|
||||
InitFOV();
|
||||
}
|
||||
|
||||
//added to support tweening from new idle position to ironsights
|
||||
simulated function ZoomIn(bool bAnimateTransition)
|
||||
{
|
||||
if( Level.TimeSeconds < FireMode[0].NextFireTime )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
super.ZoomIn(bAnimateTransition);
|
||||
|
||||
if( bAnimateTransition )
|
||||
{
|
||||
if( bZoomOutInterrupted )
|
||||
{
|
||||
TweenAnim(IdleAimAnim,ZoomTime/2);
|
||||
}
|
||||
else
|
||||
{
|
||||
TweenAnim(IdleAimAnim,ZoomTime/2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//overwriting to add ForceIdleTime
|
||||
simulated function bool StartFire(int Mode)
|
||||
{
|
||||
local bool RetVal;
|
||||
|
||||
RetVal = super.StartFire(Mode);
|
||||
|
||||
if( RetVal )
|
||||
{
|
||||
if( Mode == 0 && ForceZoomOutOnFireTime > 0 )
|
||||
{
|
||||
ForceZoomOutTime = Level.TimeSeconds + ForceZoomOutOnFireTime;
|
||||
}
|
||||
else if( Mode == 1 && ForceZoomOutOnAltFireTime > 0 )
|
||||
{
|
||||
ForceZoomOutTime = Level.TimeSeconds + ForceZoomOutOnAltFireTime;
|
||||
}
|
||||
if( Mode == 0 && ForceIdleOnFireTime > 0 )
|
||||
{
|
||||
ForceIdleTime = Level.TimeSeconds + ForceIdleOnFireTime;
|
||||
}
|
||||
NumClicks=0;
|
||||
|
||||
InterruptReload();
|
||||
}
|
||||
|
||||
return RetVal;
|
||||
}
|
||||
|
||||
//adds a force idle time
|
||||
simulated function WeaponTick(float dt)
|
||||
{
|
||||
Super.WeaponTick(dt);
|
||||
if( ForceIdleTime > 0 )
|
||||
{
|
||||
if( Level.TimeSeconds - ForceIdleTime > 0 )
|
||||
{
|
||||
ForceIdleTime = 0;
|
||||
PlayIdle();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
ForceIdleOnFireTime=2.250000
|
||||
bHoldToReload=False
|
||||
MinimumFireRange=250
|
||||
Weight=10.000000
|
||||
TraderInfoTexture=Texture'ScrnWeaponPack_T.HRL.Trader_HRL'
|
||||
SkinRefs(0)="ScrnWeaponPack_T.HRL.hrl_cmb"
|
||||
PlayerIronSightFOV=70.000000
|
||||
ZoomedDisplayFOV=40.000000
|
||||
FireModeClass(0)=Class'ScrnWeaponPack.HRLFire'
|
||||
IdleAnim="AimIdle"
|
||||
Description="Horzine's modification of L.A.W. Smaller and lighter rockets not only allowing to carry more of them, but also are much easier to reload."
|
||||
Priority=190
|
||||
PickupClass=Class'ScrnWeaponPack.HRLPickup'
|
||||
PlayerViewOffset=(X=20.000000,Y=15.000000,Z=-17.000000)
|
||||
BobDamping=4.500000
|
||||
AttachmentClass=Class'ScrnWeaponPack.HRLAttachment'
|
||||
ItemName="HRL-1 Rocket Launcher SE"
|
||||
}
|
||||
13
kf_sources/ScrnWeaponPack/Classes/HRLAmmo.uc
Normal file
13
kf_sources/ScrnWeaponPack/Classes/HRLAmmo.uc
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
class HRLAmmo extends KFAmmunition;
|
||||
|
||||
#EXEC OBJ LOAD FILE=KillingFloorHUD.utx
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoPickupAmount=5
|
||||
MaxAmmo=20
|
||||
PickupClass=Class'ScrnWeaponPack.HRLAmmoPickup'
|
||||
IconMaterial=Texture'KillingFloorHUD.Generic.HUD'
|
||||
IconCoords=(X1=458,Y1=34,X2=511,Y2=78)
|
||||
ItemName="HRL-1 Rockets"
|
||||
}
|
||||
11
kf_sources/ScrnWeaponPack/Classes/HRLAmmoPickup.uc
Normal file
11
kf_sources/ScrnWeaponPack/Classes/HRLAmmoPickup.uc
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
class HRLAmmoPickup extends KFAmmoPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoAmount=6
|
||||
InventoryType=Class'ScrnWeaponPack.HRLAmmo'
|
||||
PickupMessage="HRL-1 Rockets"
|
||||
StaticMesh=StaticMesh'KillingFloorStatics.LAWAmmo'
|
||||
DrawScale=0.500000
|
||||
CollisionRadius=40.000000
|
||||
}
|
||||
6
kf_sources/ScrnWeaponPack/Classes/HRLAttachment.uc
Normal file
6
kf_sources/ScrnWeaponPack/Classes/HRLAttachment.uc
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
class HRLAttachment extends ScrnLAWAttachment;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
MeshRef="ScrnWeaponPack_A.HRL_3rd"
|
||||
}
|
||||
7
kf_sources/ScrnWeaponPack/Classes/HRLExplosion.uc
Normal file
7
kf_sources/ScrnWeaponPack/Classes/HRLExplosion.uc
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
class HRLExplosion extends ScrnLAWExplosion;
|
||||
//HRL is a Scrn LAW Explosion with a slightly smaller light radius
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
LightRadius=10.000000
|
||||
}
|
||||
15
kf_sources/ScrnWeaponPack/Classes/HRLFire.uc
Normal file
15
kf_sources/ScrnWeaponPack/Classes/HRLFire.uc
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
class HRLFire extends LAWFire;
|
||||
|
||||
function bool AllowFire()
|
||||
{
|
||||
// allow fire without zooming
|
||||
return ( Weapon.AmmoAmount(ThisModeNum) >= AmmoPerFire);
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
FireAnimRate=1.600000
|
||||
FireRate=2.031250
|
||||
AmmoClass=Class'ScrnWeaponPack.HRLAmmo'
|
||||
ProjectileClass=Class'ScrnWeaponPack.HRLProj'
|
||||
}
|
||||
16
kf_sources/ScrnWeaponPack/Classes/HRLPickup.uc
Normal file
16
kf_sources/ScrnWeaponPack/Classes/HRLPickup.uc
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
class HRLPickup extends LAWPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Weight=10.000000
|
||||
AmmoCost=20
|
||||
PowerValue=90
|
||||
SpeedValue=32
|
||||
Description="Horzine's modification of L.A.W. Smaller and lighter rockets not only allowing to carry them more, but also are much easier to reload."
|
||||
ItemName="HRL-1 Rocket Launcher SE"
|
||||
ItemShortName="HRL-1 SE"
|
||||
AmmoItemName="HRL-1 Rockets"
|
||||
InventoryType=Class'ScrnWeaponPack.HRL'
|
||||
PickupMessage="You got the HRL-1 Rocket Launcher"
|
||||
StaticMesh=StaticMesh'ScrnWeaponPack_SM.HRL_Pickup'
|
||||
}
|
||||
12
kf_sources/ScrnWeaponPack/Classes/HRLProj.uc
Normal file
12
kf_sources/ScrnWeaponPack/Classes/HRLProj.uc
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
class HRLProj extends ScrnLAWProj;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
ExplosionClass=Class'ScrnWeaponPack.HRLExplosion'
|
||||
ImpactDamage=275
|
||||
Speed=3900.000000
|
||||
MaxSpeed=4500.000000
|
||||
Damage=625.000000
|
||||
DamageRadius=450.000000
|
||||
DrawScale=0.350000
|
||||
}
|
||||
12
kf_sources/ScrnWeaponPack/Classes/HopMineAmmo.uc
Normal file
12
kf_sources/ScrnWeaponPack/Classes/HopMineAmmo.uc
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
class HopMineAmmo extends KFAmmunition;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoPickupAmount=2
|
||||
MaxAmmo=16
|
||||
InitialAmount=8
|
||||
PickupClass=Class'ScrnWeaponPack.HopMineAmmoPickup'
|
||||
IconMaterial=Texture'KillingFloorHUD.Generic.HUD'
|
||||
IconCoords=(X1=4,Y1=350,X2=110,Y2=395)
|
||||
ItemName="HopMines"
|
||||
}
|
||||
10
kf_sources/ScrnWeaponPack/Classes/HopMineAmmoPickup.uc
Normal file
10
kf_sources/ScrnWeaponPack/Classes/HopMineAmmoPickup.uc
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
class HopMineAmmoPickup extends KFAmmoPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoAmount=2
|
||||
InventoryType=Class'ScrnWeaponPack.HopMineAmmo'
|
||||
PickupMessage="HopMines"
|
||||
StaticMesh=StaticMesh'KillingFloorStatics.FragPickup'
|
||||
CollisionRadius=25.000000
|
||||
}
|
||||
17
kf_sources/ScrnWeaponPack/Classes/HopMineFire.uc
Normal file
17
kf_sources/ScrnWeaponPack/Classes/HopMineFire.uc
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
class HopMineFire extends CrossbuzzsawFire;
|
||||
|
||||
function Projectile SpawnProjectile(Vector Start, Rotator Dir)
|
||||
{
|
||||
local HopMineProj P;
|
||||
|
||||
P = HopMineProj(Super.SpawnProjectile(Start,Dir));
|
||||
if( P!=None && !P.bNeedsDetonate )
|
||||
HopMineLchr(Weapon).AddMine(P);
|
||||
return P;
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoClass=Class'ScrnWeaponPack.HopMineAmmo'
|
||||
ProjectileClass=Class'ScrnWeaponPack.HopMineProj'
|
||||
}
|
||||
17
kf_sources/ScrnWeaponPack/Classes/HopMineLPickup.uc
Normal file
17
kf_sources/ScrnWeaponPack/Classes/HopMineLPickup.uc
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
class HopMineLPickup extends CrossbuzzsawPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Weight=6.000000
|
||||
cost=2500
|
||||
AmmoCost=30
|
||||
PowerValue=100
|
||||
RangeValue=90
|
||||
Description="The prototype of Hopmine launcher. Alpha version. Have some serious bugs like mines are detonated by each other. But still can be very useful."
|
||||
ItemName="HopMine Launcher SE"
|
||||
ItemShortName="HopMine SE"
|
||||
AmmoItemName="HopMines"
|
||||
CorrespondingPerkIndex=6
|
||||
InventoryType=Class'ScrnWeaponPack.HopMineLchr'
|
||||
PickupMessage="You got the HopMine Launcher."
|
||||
}
|
||||
130
kf_sources/ScrnWeaponPack/Classes/HopMineLchr.uc
Normal file
130
kf_sources/ScrnWeaponPack/Classes/HopMineLchr.uc
Normal file
|
|
@ -0,0 +1,130 @@
|
|||
//=============================================================================
|
||||
// HopMineLchr
|
||||
//=============================================================================
|
||||
class HopMineLchr extends Crossbuzzsaw;
|
||||
|
||||
var byte NumMinesOut;
|
||||
var() byte MaximumMines;
|
||||
var() localized string MinesText;
|
||||
|
||||
var FakedHopMine FakedHopMine;
|
||||
var vector FakedHopMineOffset;
|
||||
|
||||
replication
|
||||
{
|
||||
// Variables the server should send to the client.
|
||||
reliable if( Role==ROLE_Authority && bNetOwner )
|
||||
NumMinesOut;
|
||||
}
|
||||
|
||||
simulated function PostBeginPlay()
|
||||
{
|
||||
super.PostBeginPlay();
|
||||
|
||||
if ( Level.NetMode != NM_DedicatedServer ) {
|
||||
FakedHopMine = spawn(class'FakedHopMine',self);
|
||||
if ( FakedHopMine != none ) {
|
||||
SetBoneLocation('Blade', FakedHopMineOffset );
|
||||
// bone must have a size to properly adjust rotation
|
||||
SetBoneScale (55, 0.0001, 'Blade');
|
||||
AttachToBone(FakedHopMine, 'Blade');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
simulated function Destroyed()
|
||||
{
|
||||
local HopMineProj P;
|
||||
|
||||
if ( FakedHopMine != None )
|
||||
FakedHopMine.Destroy();
|
||||
|
||||
// blow up all mines on weapon destroy (drop) -- PooSH
|
||||
foreach DynamicActors(Class'HopMineProj',P)
|
||||
{
|
||||
if( !P.bDeleteMe && P.WeaponOwner==self && !P.bNeedsDetonate )
|
||||
{
|
||||
if ( P.IsInState('OnWall') ) {
|
||||
P.RepLaunchPos = P.Location;
|
||||
P.bCriticalTarget = true;
|
||||
P.GoToState('LaunchMine');
|
||||
P.NetUpdateTime = Level.TimeSeconds-1;
|
||||
}
|
||||
else {
|
||||
P.Disintegrate(P.Location, vect(0,0,1));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
super.Destroyed();
|
||||
}
|
||||
|
||||
// simulated function AltFire(float F)
|
||||
// {
|
||||
// FakedHopMineOffset.Z += 0.1;
|
||||
// SetBoneLocation('Blade', FakedHopMineOffset );
|
||||
// PlayerController(Instigator.Controller).ClientMessage("FakedHopMineOffset = "$ FakedHopMineOffset);
|
||||
// }
|
||||
|
||||
|
||||
final function AddMine( HopMineProj M )
|
||||
{
|
||||
++NumMinesOut;
|
||||
M.WeaponOwner = Self;
|
||||
if ( Instigator != none && Instigator.PlayerReplicationInfo != none
|
||||
&& Instigator.PlayerReplicationInfo.Team != none )
|
||||
{
|
||||
M.PlacedTeam = Instigator.PlayerReplicationInfo.Team.TeamIndex;
|
||||
}
|
||||
NetUpdateTime = Level.TimeSeconds-1;
|
||||
}
|
||||
final function RemoveMine( HopMineProj M )
|
||||
{
|
||||
--NumMinesOut;
|
||||
M.WeaponOwner = None;
|
||||
NetUpdateTime = Level.TimeSeconds-1;
|
||||
}
|
||||
|
||||
// simulated function RenderOverlays( Canvas Canvas )
|
||||
// {
|
||||
// Super.RenderOverlays(Canvas);
|
||||
// Canvas.SetDrawColor(255,255,255,255);
|
||||
// Canvas.Font = Canvas.MedFont;
|
||||
// Canvas.SetPos(25,Canvas.ClipY*0.5);
|
||||
// Canvas.DrawText(MinesText$NumMinesOut$"/"$MaximumMines,false);
|
||||
// }
|
||||
|
||||
/*
|
||||
function GiveTo(Pawn Other, optional Pickup Pickup)
|
||||
{
|
||||
local HopMineProj P;
|
||||
|
||||
Super.GiveTo(Other,Pickup);
|
||||
NumMinesOut = 0;
|
||||
foreach DynamicActors(Class'HopMineProj',P)
|
||||
{
|
||||
if( P.InstigatorController==Other.Controller && !P.bNeedsDetonate )
|
||||
{
|
||||
P.Instigator = Other;
|
||||
P.WeaponOwner = Self;
|
||||
++NumMinesOut;
|
||||
}
|
||||
else if( P.WeaponOwner==Self )
|
||||
P.WeaponOwner = None;
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
MaximumMines=254
|
||||
MinesText="Mines: "
|
||||
FakedHopMineOffset=(Z=0.320000)
|
||||
RotateRate=500.000000
|
||||
Weight=6.000000
|
||||
AppID=0
|
||||
FireModeClass(0)=Class'ScrnWeaponPack.HopMineFire'
|
||||
Description="The prototype of Hopmine launcher. Alpha version. Have some serious bugs like mines are detonated by each other. But still can be very useful."
|
||||
PickupClass=Class'ScrnWeaponPack.HopMineLPickup'
|
||||
ItemName="HopMine Launcher SE"
|
||||
}
|
||||
42
kf_sources/ScrnWeaponPack/Classes/HopMineLight.uc
Normal file
42
kf_sources/ScrnWeaponPack/Classes/HopMineLight.uc
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
Class HopMineLight extends Effects
|
||||
transient;
|
||||
|
||||
var byte ModeIndex;
|
||||
var() Material Dots[3];
|
||||
|
||||
simulated final function SetMode( bool bA, bool bB )
|
||||
{
|
||||
local byte i;
|
||||
|
||||
if( bB )
|
||||
i = 2;
|
||||
else if( bA )
|
||||
i = 1;
|
||||
else i = 0;
|
||||
|
||||
if( i==ModeIndex )
|
||||
return;
|
||||
Texture = Dots[i];
|
||||
ModeIndex = i;
|
||||
if( ModeIndex==0 )
|
||||
{
|
||||
PlaySound(Sound'ScrnWeaponPack_SND.mine.combine_mine_deactivate1');
|
||||
AmbientSound = None;
|
||||
}
|
||||
else AmbientSound = Sound'ScrnWeaponPack_SND.mine.combine_mine_active_loop1';
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Dots(0)=FinalBlend'ScrnWeaponPack_T.mine.FBBlueDot'
|
||||
Dots(1)=FinalBlend'ScrnWeaponPack_T.mine.FBGreenDot'
|
||||
Dots(2)=FinalBlend'ScrnWeaponPack_T.mine.FBRedDot'
|
||||
Texture=FinalBlend'ScrnWeaponPack_T.mine.FBBlueDot'
|
||||
DrawScale=0.035000
|
||||
bFullVolume=True
|
||||
bHardAttach=True
|
||||
SoundVolume=255
|
||||
SoundRadius=200.000000
|
||||
TransientSoundVolume=2.000000
|
||||
TransientSoundRadius=350.000000
|
||||
}
|
||||
443
kf_sources/ScrnWeaponPack/Classes/HopMineProj.uc
Normal file
443
kf_sources/ScrnWeaponPack/Classes/HopMineProj.uc
Normal file
|
|
@ -0,0 +1,443 @@
|
|||
Class HopMineProj extends Projectile;
|
||||
|
||||
#exec obj load file="KF_GrenadeSnd.uax"
|
||||
#exec OBJ LOAD FILE=ScrnWeaponPack_T.utx
|
||||
#exec OBJ LOAD FILE=ScrnWeaponPack_SND.uax
|
||||
#exec OBJ LOAD FILE=ScrnWeaponPack_A.ukx
|
||||
|
||||
var PanzerfaustTrail SmokeTrail;
|
||||
var vector RepAttachPos,RepAttachDir,RepLaunchPos;
|
||||
var HopMineLight DotLight;
|
||||
var HopMineLchr WeaponOwner;
|
||||
|
||||
var bool bDisintegrated; // This nade has been disintegrated by a siren scream.
|
||||
var() sound DisintegrateSound;// The sound of this projectile disintegrating
|
||||
|
||||
|
||||
var bool bWarningTarget,bCriticalTarget,bPreLaunched,bNeedsDetonate;
|
||||
|
||||
var float MinSpread; // min distance between placed mines. If placed closer, they will trigger each other
|
||||
|
||||
var int PlacedTeam; // TeamIndex of the team that placed this projectile
|
||||
|
||||
|
||||
replication
|
||||
{
|
||||
// Variables the server should send to the client.
|
||||
reliable if( Role==ROLE_Authority )
|
||||
RepAttachPos,RepAttachDir,bWarningTarget,bCriticalTarget,RepLaunchPos;
|
||||
}
|
||||
|
||||
simulated function AddSmoke()
|
||||
{
|
||||
if( SmokeTrail==None )
|
||||
SmokeTrail = Spawn(class'PanzerfaustTrail',self);
|
||||
SmokeTrail.SetBase(self);
|
||||
SmokeTrail.SetRelativeRotation(rot(32768,0,0));
|
||||
}
|
||||
simulated function PostBeginPlay()
|
||||
{
|
||||
Velocity = speed * vector(Rotation);
|
||||
Super.PostBeginPlay();
|
||||
}
|
||||
simulated function Destroyed()
|
||||
{
|
||||
if( WeaponOwner!=None )
|
||||
WeaponOwner.RemoveMine(Self);
|
||||
if ( SmokeTrail != None )
|
||||
SmokeTrail.HandleOwnerDestroyed();
|
||||
if( DotLight!=None )
|
||||
DotLight.Destroy();
|
||||
if( Level.NetMode==NM_Client )
|
||||
BlowUp(Location);
|
||||
Super.Destroyed();
|
||||
}
|
||||
simulated function Landed( vector HitNormal )
|
||||
{
|
||||
HitWall(HitNormal,Base);
|
||||
}
|
||||
simulated function HitWall(vector HitNormal, actor Wall)
|
||||
{
|
||||
if( Level.NetMode==NM_Client )
|
||||
{
|
||||
SetPhysics(PHYS_None);
|
||||
return;
|
||||
}
|
||||
AttachTo(Location,HitNormal,Wall);
|
||||
}
|
||||
simulated final function AttachTo( vector Pos, vector Dir, Actor Wall )
|
||||
{
|
||||
SetPhysics(PHYS_None);
|
||||
SetLocation(Pos + Dir*2);
|
||||
SetRotation(rotator(Dir)-rot(16384,0,0));
|
||||
RepAttachPos = Location;
|
||||
RepAttachDir = Dir*1000.f;
|
||||
if( Wall!=None && !Wall.bStatic )
|
||||
SetBase(Wall);
|
||||
GoToState('OnWall');
|
||||
}
|
||||
simulated function PostNetBeginPlay()
|
||||
{
|
||||
bNetNotify = true;
|
||||
if( Physics==PHYS_None )
|
||||
GoToState('OnWall');
|
||||
else if( Physics==PHYS_Projectile || RepLaunchPos!=vect(0,0,0) )
|
||||
GoToState('LaunchMine');
|
||||
else if ( Level.NetMode!=NM_DedicatedServer )
|
||||
{
|
||||
AddSmoke();
|
||||
TweenAnim('Up',0.01f);
|
||||
PlaySound(Sound'ScrnWeaponPack_SND.mine.blade_in');
|
||||
RandSpin(65000.f);
|
||||
}
|
||||
}
|
||||
simulated function PostNetReceive()
|
||||
{
|
||||
if( RepAttachPos!=vect(0,0,0) )
|
||||
{
|
||||
ClientAttachProj();
|
||||
RepAttachPos = vect(0,0,0);
|
||||
}
|
||||
if( bHidden && !bDisintegrated )
|
||||
{
|
||||
Disintegrate(Location, vect(0,0,1));
|
||||
}
|
||||
}
|
||||
simulated final function ClientAttachProj()
|
||||
{
|
||||
local vector HL,HN,D;
|
||||
local Actor A;
|
||||
|
||||
D = Normal(RepAttachDir);
|
||||
A = Trace(HL,HN,RepAttachPos-D*10.f,RepAttachPos+D,false);
|
||||
if( A==None )
|
||||
{
|
||||
HN = D;
|
||||
HL = RepAttachPos;
|
||||
}
|
||||
AttachTo(HL,HN,A);
|
||||
}
|
||||
simulated function BlowUp(vector HitLocation)
|
||||
{
|
||||
if( Level.NetMode!=NM_DedicatedServer )
|
||||
{
|
||||
PlaySound(ImpactSound,,2.0);
|
||||
if ( EffectIsRelevant(Location,false) )
|
||||
Spawn(class'KFNadeLExplosion',,,HitLocation, rot(16384,0,0));
|
||||
}
|
||||
|
||||
HurtRadius(Damage,DamageRadius, MyDamageType, MomentumTransfer, HitLocation );
|
||||
if ( Role == ROLE_Authority )
|
||||
MakeNoise(1.0);
|
||||
}
|
||||
simulated function Touch(Actor Other);
|
||||
simulated function ClientSideTouch(Actor Other, Vector HitLocation);
|
||||
simulated function ProcessTouch(Actor Other, Vector HitLocation);
|
||||
|
||||
state OnWall
|
||||
{
|
||||
simulated function BeginState()
|
||||
{
|
||||
local HopMineProj Other;
|
||||
|
||||
if ( SmokeTrail != None )
|
||||
{
|
||||
SmokeTrail.HandleOwnerDestroyed();
|
||||
SmokeTrail = None;
|
||||
}
|
||||
bCollideWorld = False;
|
||||
bFixedRotationDir = false;
|
||||
RotationRate = rot(0,0,0);
|
||||
if( Level.NetMode!=NM_DedicatedServer )
|
||||
{
|
||||
TweenAnim('Down',0.05f);
|
||||
PlaySound(Sound'ScrnWeaponPack_SND.mine.blade_cut');
|
||||
DotLight = Spawn(Class'HopMineLight',,,Location + (vect(0,0,5) << Rotation));
|
||||
if( DotLight!=None )
|
||||
{
|
||||
DotLight.SetBase(Self);
|
||||
DotLight.SetRelativeLocation(vect(0,0,5));
|
||||
}
|
||||
}
|
||||
if( Level.NetMode!=NM_Client )
|
||||
{
|
||||
NetUpdateFrequency = 1.f;
|
||||
SetTimer(0.25+FRand()*0.25,true);
|
||||
}
|
||||
|
||||
// destroy other mines around -- PooSH
|
||||
foreach VisibleCollidingActors( class'HopMineProj', Other, MinSpread, Location ) {
|
||||
if ( Other != self && !Other.bDeleteMe && Other.IsInState('OnWall') ) {
|
||||
Other.RepLaunchPos = Location;
|
||||
Other.bCriticalTarget = true;
|
||||
Other.GoToState('LaunchMine');
|
||||
Other.NetUpdateTime = Level.TimeSeconds-1;
|
||||
}
|
||||
}
|
||||
}
|
||||
simulated function EndState()
|
||||
{
|
||||
if( Level.NetMode!=NM_Client )
|
||||
{
|
||||
SetTimer(0,false);
|
||||
NetUpdateFrequency = Default.NetUpdateFrequency;
|
||||
NetUpdateTime = Level.TimeSeconds-1;
|
||||
}
|
||||
}
|
||||
function Timer()
|
||||
{
|
||||
local Controller C;
|
||||
local vector X,Y,Z;
|
||||
local float DotP;
|
||||
local int ThreatLevel;
|
||||
local bool bA,bB;
|
||||
|
||||
GetAxes(Rotation,X,Y,Z);
|
||||
for( C=Level.ControllerList; C!=None; C=C.nextController )
|
||||
if( C.Pawn!=None && C.Pawn.Health>0 && VSizeSquared(C.Pawn.Location-Location)<1000000.f )
|
||||
{
|
||||
X = C.Pawn.Location-Location;
|
||||
DotP = (X Dot Z);
|
||||
if( DotP<0 )
|
||||
continue;
|
||||
DotP = VSizeSquared(X - (Z * DotP));
|
||||
if( DotP>90000.f || !FastTrace(C.Pawn.Location,Location) )
|
||||
continue;
|
||||
if( Monster(C.Pawn)!=None )
|
||||
{
|
||||
bB = true;
|
||||
if( DotP<35500.f )
|
||||
{
|
||||
Y = C.Pawn.Location;
|
||||
ThreatLevel+=C.Pawn.HealthMax;
|
||||
}
|
||||
}
|
||||
else bA = true;
|
||||
}
|
||||
if( bA!=bWarningTarget || bB!=bCriticalTarget )
|
||||
{
|
||||
bWarningTarget = bA;
|
||||
bCriticalTarget = bB;
|
||||
if( DotLight!=None )
|
||||
DotLight.SetMode(bA,bB);
|
||||
NetUpdateTime = Level.TimeSeconds-1;
|
||||
}
|
||||
if( bB && ThreatLevel>400 )
|
||||
{
|
||||
bWarningTarget = false;
|
||||
bCriticalTarget = false;
|
||||
RepLaunchPos = Y;
|
||||
GoToState('LaunchMine');
|
||||
}
|
||||
else if( InstigatorController==None || bNeedsDetonate || (WeaponOwner!=None && WeaponOwner.NumMinesOut>WeaponOwner.MaximumMines) )
|
||||
{
|
||||
bWarningTarget = false;
|
||||
bCriticalTarget = false;
|
||||
RepLaunchPos = Location + Z*(150.f+FRand()*250.f);
|
||||
GoToState('LaunchMine');
|
||||
}
|
||||
}
|
||||
simulated function PostNetReceive()
|
||||
{
|
||||
if( RepLaunchPos!=vect(0,0,0) )
|
||||
GoToState('LaunchMine');
|
||||
else if( DotLight!=None )
|
||||
DotLight.SetMode(bWarningTarget,bCriticalTarget);
|
||||
}
|
||||
}
|
||||
state LaunchMine
|
||||
{
|
||||
simulated function BeginState()
|
||||
{
|
||||
if( WeaponOwner!=None )
|
||||
WeaponOwner.RemoveMine(Self);
|
||||
bNeedsDetonate = true;
|
||||
if( DotLight!=None )
|
||||
DotLight.SetMode(true,true);
|
||||
if( Physics!=PHYS_Projectile )
|
||||
{
|
||||
bFixedRotationDir = false;
|
||||
RotationRate = rot(0,0,0);
|
||||
if( Level.NetMode!=NM_DedicatedServer )
|
||||
{
|
||||
TweenAnim('Up',0.1f);
|
||||
PlaySound(Sound'ScrnWeaponPack_SND.mine.blade_in');
|
||||
PlaySound(Sound'ScrnWeaponPack_SND.mine.combine_mine_deploy1',SLOT_Talk);
|
||||
}
|
||||
SetTimer(0.6,false);
|
||||
}
|
||||
bNetNotify = false;
|
||||
}
|
||||
function HitWall(vector HitNormal, actor Wall)
|
||||
{
|
||||
BlowUp(Location);
|
||||
Destroy();
|
||||
}
|
||||
simulated function Timer()
|
||||
{
|
||||
if( !bPreLaunched )
|
||||
{
|
||||
bPreLaunched = true;
|
||||
if( Level.NetMode!=NM_DedicatedServer )
|
||||
PlaySound(Sound'ScrnWeaponPack_SND.mine.rmine_blip3',SLOT_Misc);
|
||||
SetTimer(0.2,false);
|
||||
}
|
||||
else if( Level.NetMode!=NM_Client && Physics==PHYS_Projectile )
|
||||
{
|
||||
BlowUp(Location);
|
||||
Destroy();
|
||||
}
|
||||
else
|
||||
{
|
||||
if( DotLight!=None )
|
||||
DotLight.Destroy();
|
||||
if ( Level.NetMode != NM_DedicatedServer)
|
||||
{
|
||||
AddSmoke();
|
||||
bFixedRotationDir = true;
|
||||
RandSpin(45000.f);
|
||||
}
|
||||
bCollideWorld = true;
|
||||
SetPhysics(PHYS_Projectile);
|
||||
Velocity = (RepLaunchPos-Location)*2.f;
|
||||
if( Level.NetMode!=NM_Client )
|
||||
SetTimer(0.5,false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
simulated function HurtRadius( float DamageAmount, float DamageRadius, class<DamageType> DamageType, float Momentum, vector HitLocation )
|
||||
{
|
||||
local actor Victims;
|
||||
local float damageScale, dist;
|
||||
local vector dir;
|
||||
|
||||
if ( bHurtEntry )
|
||||
return;
|
||||
|
||||
bHurtEntry = true;
|
||||
foreach VisibleCollidingActors( class 'Actor', Victims, DamageRadius, HitLocation )
|
||||
{
|
||||
// don't let blast damage affect fluid - VisibleCollisingActors doesn't really work for them - jag
|
||||
if( (Victims != self) && (Hurtwall != Victims) && (Victims.Role == ROLE_Authority) && !Victims.IsA('FluidSurfaceInfo') && ExtendedZCollision(Victims)==None )
|
||||
{
|
||||
if( Pawn(Victims)!=None && Monster(Victims)==None && Pawn(Victims).Controller!=InstigatorController )
|
||||
continue;
|
||||
dir = Victims.Location - HitLocation;
|
||||
dist = FMax(1,VSize(dir));
|
||||
dir = dir/dist;
|
||||
damageScale = 1 - FMax(0,(dist - Victims.CollisionRadius)/DamageRadius);
|
||||
if ( Instigator == None || Instigator.Controller == None )
|
||||
Victims.SetDelayedDamageInstigatorController( InstigatorController );
|
||||
if( Monster(Victims)==None )
|
||||
damageScale*=0.15; // Make it a lot less lethal to player self inflicted damage.
|
||||
Victims.TakeDamage
|
||||
(
|
||||
damageScale * DamageAmount,
|
||||
Instigator,
|
||||
Victims.Location - 0.5 * (Victims.CollisionHeight + Victims.CollisionRadius) * dir,
|
||||
(damageScale * Momentum * dir),
|
||||
DamageType
|
||||
);
|
||||
if (Vehicle(Victims) != None && Vehicle(Victims).Health > 0)
|
||||
Vehicle(Victims).DriverRadiusDamage(DamageAmount, DamageRadius, InstigatorController, DamageType, Momentum, HitLocation);
|
||||
}
|
||||
}
|
||||
bHurtEntry = false;
|
||||
}
|
||||
|
||||
function TakeDamage( int Damage, Pawn InstigatedBy, Vector Hitlocation, Vector Momentum, class<DamageType> damageType, optional int HitIndex)
|
||||
{
|
||||
local Class<KFWeaponDamageType> KFDamType;
|
||||
|
||||
if ( InstigatedBy == none )
|
||||
return;
|
||||
|
||||
if ( damageType == class'SirenScreamDamage' ) {
|
||||
Disintegrate(HitLocation, vect(0,0,1));
|
||||
return;
|
||||
}
|
||||
else if ( Monster(InstigatedBy) != none ) {
|
||||
if ( Damage >= 5 )
|
||||
Explode(HitLocation, vect(0,0,1));
|
||||
return;
|
||||
}
|
||||
|
||||
if ( Damage < 30 )
|
||||
return;
|
||||
|
||||
KFDamType = Class<KFWeaponDamageType>(damageType);
|
||||
if ( KFDamType != none && (KFDamType.default.bIsExplosive || KFDamType.default.bIsMeleeDamage) )
|
||||
return;
|
||||
|
||||
// check same team
|
||||
if ( InstigatorController != InstigatedBy.Controller ) {
|
||||
if ( InstigatedBy.PlayerReplicationInfo != none
|
||||
&& InstigatedBy.PlayerReplicationInfo.Team != none
|
||||
&& InstigatedBy.PlayerReplicationInfo.Team.TeamIndex == PlacedTeam )
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Explode(HitLocation, vect(0,0,1));
|
||||
}
|
||||
|
||||
state Destroying
|
||||
{
|
||||
simulated function BeginState()
|
||||
{
|
||||
SetTimer(0.1, true);
|
||||
}
|
||||
|
||||
simulated function Timer()
|
||||
{
|
||||
Destroy();
|
||||
}
|
||||
}
|
||||
|
||||
// Make the projectile distintegrate, instead of explode
|
||||
simulated function Disintegrate(vector HitLocation, vector HitNormal)
|
||||
{
|
||||
bDisintegrated = true;
|
||||
bHidden = true;
|
||||
|
||||
if( Role == ROLE_Authority )
|
||||
{
|
||||
GotoState('Destroying');
|
||||
NetUpdateTime = Level.TimeSeconds - 1;
|
||||
}
|
||||
|
||||
PlaySound(DisintegrateSound,,2.0);
|
||||
|
||||
if ( EffectIsRelevant(Location,false) )
|
||||
{
|
||||
Spawn(Class'KFMod.SirenNadeDeflect',,, HitLocation, rotator(vect(0,0,1)));
|
||||
}
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
DisintegrateSound=Sound'Inf_Weapons.panzerfaust60.faust_explode_distant02'
|
||||
MinSpread=150.000000
|
||||
Speed=5000.000000
|
||||
MaxSpeed=8000.000000
|
||||
Damage=450.000000
|
||||
DamageRadius=400.000000
|
||||
MomentumTransfer=75000.000000
|
||||
MyDamageType=Class'KFMod.DamTypePipeBomb'
|
||||
ImpactSound=SoundGroup'KF_GrenadeSnd.Nade_Explode_1'
|
||||
bNetTemporary=False
|
||||
bAlwaysRelevant=True
|
||||
bSkipActorPropertyReplication=True
|
||||
Physics=PHYS_Falling
|
||||
LifeSpan=0.000000
|
||||
Mesh=SkeletalMesh'ScrnWeaponPack_A.HopMineM'
|
||||
DrawScale=0.600000
|
||||
AmbientGlow=25
|
||||
bUnlit=False
|
||||
TransientSoundVolume=2.000000
|
||||
TransientSoundRadius=350.000000
|
||||
bBounce=True
|
||||
bFixedRotationDir=True
|
||||
}
|
||||
54
kf_sources/ScrnWeaponPack/Classes/HuntingRifle.uc
Normal file
54
kf_sources/ScrnWeaponPack/Classes/HuntingRifle.uc
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
class HuntingRifle extends ScopedWeapon;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
lenseMaterialID=2
|
||||
scopePortalFOVHigh=22.000000
|
||||
scopePortalFOV=12.000000
|
||||
ZoomMatRef="ScrnWeaponPack_T.BDHR.RifleCrossFinal"
|
||||
ScriptedTextureFallbackRef="KF_Weapons_Trip_T.Rifles.CBLens_cmb"
|
||||
CrosshairTexRef="ScrnWeaponPack_T.BDHR.BDHR.HRCross"
|
||||
ReloadShortAnim="Reload"
|
||||
ReloadShortRate=2.780000
|
||||
bHasScope=True
|
||||
ZoomedDisplayFOVHigh=45.000000
|
||||
MagCapacity=5
|
||||
ReloadRate=4.000000
|
||||
ReloadAnim="Reload"
|
||||
ReloadAnimRate=1.150000
|
||||
WeaponReloadAnim="Reload_M14"
|
||||
Weight=7.000000
|
||||
bHasAimingMode=True
|
||||
IdleAimAnim="Idle_Iron"
|
||||
StandardDisplayFOV=65.000000
|
||||
bModeZeroCanDryFire=True
|
||||
TraderInfoTexture=Texture'ScrnWeaponPack_T.BDHR.huntingrifle_Trader'
|
||||
MeshRef="ScrnWeaponPack_A.hunt_rifle"
|
||||
SkinRefs(0)="ScrnWeaponPack_T.BDHR.HR_Final"
|
||||
SkinRefs(1)="KF_Weapons2_Trip_T.hands.BritishPara_Hands_1st_P"
|
||||
SkinRefs(2)="KF_Weapons_Trip_T.Rifles.CBLens_cmb"
|
||||
SelectSoundRef="KF_PumpSGSnd.SG_Select"
|
||||
HudImageRef="ScrnWeaponPack_T.BDHR.HR_Unselected"
|
||||
SelectedHudImageRef="ScrnWeaponPack_T.BDHR.HR_selected"
|
||||
PlayerIronSightFOV=32.000000
|
||||
ZoomedDisplayFOV=60.000000
|
||||
FireModeClass(0)=Class'ScrnWeaponPack.HuntingRifleFire'
|
||||
FireModeClass(1)=Class'KFMod.NoFire'
|
||||
PutDownAnim="PutDown"
|
||||
SelectForce="SwitchToAssaultRifle"
|
||||
AIRating=0.650000
|
||||
CurrentRating=0.650000
|
||||
Description="A recreational hunting weapon, featuring a firing trigger and a powerful integrated scope. "
|
||||
DisplayFOV=65.000000
|
||||
Priority=10
|
||||
CustomCrosshair=11
|
||||
CustomCrossHairTextureName="Crosshairs.HUD.Crosshair_Cross5"
|
||||
InventoryGroup=4
|
||||
GroupOffset=3
|
||||
PickupClass=Class'ScrnWeaponPack.HuntingRiflePickup'
|
||||
PlayerViewOffset=(X=15.000000,Y=16.000000,Z=-4.000000)
|
||||
BobDamping=6.000000
|
||||
AttachmentClass=Class'ScrnWeaponPack.HuntingRifleAttachment'
|
||||
IconCoords=(X1=253,Y1=146,X2=333,Y2=181)
|
||||
ItemName="Hunting Rifle SE"
|
||||
}
|
||||
17
kf_sources/ScrnWeaponPack/Classes/HuntingRifleAmmo.uc
Normal file
17
kf_sources/ScrnWeaponPack/Classes/HuntingRifleAmmo.uc
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
//=============================================================================
|
||||
// HuntingRifle Rifle Ammo.
|
||||
//=============================================================================
|
||||
class HuntingRifleAmmo extends KFAmmunition;
|
||||
|
||||
#EXEC OBJ LOAD FILE=InterfaceContent.utx
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoPickupAmount=10
|
||||
MaxAmmo=50
|
||||
InitialAmount=25
|
||||
PickupClass=Class'ScrnWeaponPack.HuntingRifleAmmoPickup'
|
||||
IconMaterial=Texture'KillingFloorHUD.Generic.HUD'
|
||||
IconCoords=(X1=338,Y1=40,X2=393,Y2=79)
|
||||
ItemName="Rifle bullets"
|
||||
}
|
||||
12
kf_sources/ScrnWeaponPack/Classes/HuntingRifleAmmoPickup.uc
Normal file
12
kf_sources/ScrnWeaponPack/Classes/HuntingRifleAmmoPickup.uc
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
//=============================================================================
|
||||
// HuntingRifle Ammo Pickup.
|
||||
//=============================================================================
|
||||
class HuntingRifleAmmoPickup extends KFAmmoPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoAmount=10
|
||||
InventoryType=Class'ScrnWeaponPack.HuntingRifleAmmo'
|
||||
PickupMessage=".308 rounds"
|
||||
StaticMesh=None
|
||||
}
|
||||
55
kf_sources/ScrnWeaponPack/Classes/HuntingRifleAttachment.uc
Normal file
55
kf_sources/ScrnWeaponPack/Classes/HuntingRifleAttachment.uc
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
class HuntingRifleAttachment extends KFWeaponAttachment;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
mMuzFlashClass=Class'ROEffects.MuzzleFlash3rdSTG'
|
||||
mTracerClass=Class'KFMod.KFNewTracer'
|
||||
MovementAnims(0)="WalkF_Winchester"
|
||||
MovementAnims(1)="WalkB_Winchester"
|
||||
MovementAnims(2)="WalkL_Winchester"
|
||||
MovementAnims(3)="WalkL_Winchester"
|
||||
TurnLeftAnim="TurnL_Winchester"
|
||||
TurnRightAnim="TurnR_Winchester"
|
||||
CrouchAnims(0)="CHwalkF_Winchester"
|
||||
CrouchAnims(1)="CHwalkB_Winchester"
|
||||
CrouchAnims(2)="CHwalkL_Winchester"
|
||||
CrouchAnims(3)="CHwalkR_Winchester"
|
||||
WalkAnims(0)="WalkF_Winchester"
|
||||
WalkAnims(1)="WalkB_Winchester"
|
||||
WalkAnims(2)="WalkL_Winchester"
|
||||
WalkAnims(3)="WalkL_Winchester"
|
||||
CrouchTurnRightAnim="CH_TurnR_Winchester"
|
||||
CrouchTurnLeftAnim="CH_TurnL_Winchester"
|
||||
IdleCrouchAnim="CHIdle_Winchester"
|
||||
IdleWeaponAnim="IS_Idle_Winchester"
|
||||
IdleRestAnim="IS_Idle_Winchester"
|
||||
IdleChatAnim="IS_Idle_Winchester"
|
||||
IdleHeavyAnim="IS_Idle_Winchester"
|
||||
IdleRifleAnim="IS_Idle_Winchester"
|
||||
FireAnims(0)="IS_Fire_spSinper"
|
||||
FireAnims(1)="IS_Fire_spSinper"
|
||||
FireAnims(2)="IS_Fire_spSinper"
|
||||
FireAnims(3)="IS_Fire_spSinper"
|
||||
FireAltAnims(0)="IS_Fire_spSinper"
|
||||
FireAltAnims(1)="IS_Fire_spSinper"
|
||||
FireAltAnims(2)="IS_Fire_spSinper"
|
||||
FireAltAnims(3)="IS_Fire_spSinper"
|
||||
FireCrouchAnims(0)="CHFire_spSinper"
|
||||
FireCrouchAnims(1)="CHFire_spSinper"
|
||||
FireCrouchAnims(2)="CHFire_spSinper"
|
||||
FireCrouchAnims(3)="CHFire_spSinper"
|
||||
FireCrouchAltAnims(0)="CHFire_spSinper"
|
||||
FireCrouchAltAnims(1)="CHFire_spSinper"
|
||||
FireCrouchAltAnims(2)="CHFire_spSinper"
|
||||
FireCrouchAltAnims(3)="CHFire_spSinper"
|
||||
HitAnims(0)="HitF_Winchester"
|
||||
HitAnims(1)="HitB_Winchester"
|
||||
HitAnims(2)="HitL_Winchester"
|
||||
HitAnims(3)="HitR_Winchester"
|
||||
PostFireBlendStandAnim="Blend_Winchester"
|
||||
PostFireBlendCrouchAnim="CHBlend_Winchester"
|
||||
MeshRef="ScrnWeaponPack_A.HuntingRifle3rd"
|
||||
bHeavy=True
|
||||
SplashEffect=Class'ROEffects.BulletSplashEmitter'
|
||||
CullDistance=5000.000000
|
||||
}
|
||||
175
kf_sources/ScrnWeaponPack/Classes/HuntingRifleFire.uc
Normal file
175
kf_sources/ScrnWeaponPack/Classes/HuntingRifleFire.uc
Normal file
|
|
@ -0,0 +1,175 @@
|
|||
//=============================================================================
|
||||
// HuntingRifleFire
|
||||
//=============================================================================
|
||||
class HuntingRifleFire extends KFFire;
|
||||
|
||||
var vector ScopedShakeOffsetMag; //Shake offset mag used for 3d scopes
|
||||
var vector ScopedShakeOffsetRate; //Shake offset rate used for 3d scopes
|
||||
|
||||
//adds limited shot penetration
|
||||
function DoTrace(Vector Start, Rotator Dir)
|
||||
{
|
||||
local Vector X,Y,Z, End, HitLocation, HitNormal, ArcEnd;
|
||||
local Actor Other;
|
||||
local byte HitCount,HCounter;
|
||||
local float HitDamage;
|
||||
local array<int> HitPoints;
|
||||
local KFPawn HitPawn;
|
||||
local array<Actor> IgnoreActors;
|
||||
local Actor DamageActor;
|
||||
local int i;
|
||||
|
||||
MaxRange();
|
||||
|
||||
Weapon.GetViewAxes(X, Y, Z);
|
||||
if ( Weapon.WeaponCentered() )
|
||||
{
|
||||
ArcEnd = (Instigator.Location + Weapon.EffectOffset.X * X + 1.5 * Weapon.EffectOffset.Z * Z);
|
||||
}
|
||||
else
|
||||
{
|
||||
ArcEnd = (Instigator.Location + Instigator.CalcDrawOffset(Weapon) + Weapon.EffectOffset.X * X +
|
||||
Weapon.Hand * Weapon.EffectOffset.Y * Y + Weapon.EffectOffset.Z * Z);
|
||||
}
|
||||
|
||||
X = Vector(Dir);
|
||||
End = Start + TraceRange * X;
|
||||
HitDamage = DamageMax;
|
||||
While( (HitCount++)<10 )
|
||||
{
|
||||
DamageActor = none;
|
||||
|
||||
Other = Instigator.HitPointTrace(HitLocation, HitNormal, End, HitPoints, Start,, 1);
|
||||
if( Other==None )
|
||||
{
|
||||
Break;
|
||||
}
|
||||
else if( Other==Instigator || Other.Base == Instigator )
|
||||
{
|
||||
IgnoreActors[IgnoreActors.Length] = Other;
|
||||
Other.SetCollision(false);
|
||||
Start = HitLocation;
|
||||
Continue;
|
||||
}
|
||||
|
||||
if( ExtendedZCollision(Other)!=None && Other.Owner!=None )
|
||||
{
|
||||
IgnoreActors[IgnoreActors.Length] = Other;
|
||||
IgnoreActors[IgnoreActors.Length] = Other.Owner;
|
||||
Other.SetCollision(false);
|
||||
Other.Owner.SetCollision(false);
|
||||
DamageActor = Pawn(Other.Owner);
|
||||
}
|
||||
|
||||
if ( !Other.bWorldGeometry && Other!=Level )
|
||||
{
|
||||
HitPawn = KFPawn(Other);
|
||||
|
||||
if ( HitPawn != none )
|
||||
{
|
||||
// Hit detection debugging
|
||||
/*log("PreLaunchTrace hit "$HitPawn.PlayerReplicationInfo.PlayerName);
|
||||
HitPawn.HitStart = Start;
|
||||
HitPawn.HitEnd = End;*/
|
||||
if(!HitPawn.bDeleteMe)
|
||||
HitPawn.ProcessLocationalDamage(int(HitDamage), Instigator, HitLocation, Momentum*X,DamageType,HitPoints);
|
||||
|
||||
// Hit detection debugging
|
||||
/*if( Level.NetMode == NM_Standalone)
|
||||
HitPawn.DrawBoneLocation();*/
|
||||
|
||||
IgnoreActors[IgnoreActors.Length] = Other;
|
||||
IgnoreActors[IgnoreActors.Length] = HitPawn.AuxCollisionCylinder;
|
||||
Other.SetCollision(false);
|
||||
HitPawn.AuxCollisionCylinder.SetCollision(false);
|
||||
DamageActor = Other;
|
||||
}
|
||||
else
|
||||
{
|
||||
if( KFMonster(Other)!=None )
|
||||
{
|
||||
IgnoreActors[IgnoreActors.Length] = Other;
|
||||
Other.SetCollision(false);
|
||||
DamageActor = Other;
|
||||
}
|
||||
else if( DamageActor == none )
|
||||
{
|
||||
DamageActor = Other;
|
||||
}
|
||||
Other.TakeDamage(int(HitDamage), Instigator, HitLocation, Momentum*X, DamageType);
|
||||
}
|
||||
if( (HCounter++)>=5 || Pawn(DamageActor)==None )
|
||||
{
|
||||
Break;
|
||||
}
|
||||
HitDamage*=0.75;
|
||||
Start = HitLocation;
|
||||
}
|
||||
else if ( HitScanBlockingVolume(Other)==None )
|
||||
{
|
||||
if( KFWeaponAttachment(Weapon.ThirdPersonActor)!=None )
|
||||
KFWeaponAttachment(Weapon.ThirdPersonActor).UpdateHit(Other,HitLocation,HitNormal);
|
||||
Break;
|
||||
}
|
||||
}
|
||||
|
||||
// Turn the collision back on for any actors we turned it off
|
||||
for (i=0; i<IgnoreActors.Length; i++)
|
||||
if ( IgnoreActors[i] != none )
|
||||
IgnoreActors[i].SetCollision(true);
|
||||
}
|
||||
|
||||
//adds faked recoil to 3d scope zoom
|
||||
event ModeDoFire()
|
||||
{
|
||||
if( KFWeapon(Weapon).bAimingRifle )
|
||||
{
|
||||
if ( KFWeapon(Weapon).KFScopeDetail != KF_TextureScope)
|
||||
{
|
||||
ShakeOffsetMag=default.ScopedShakeOffsetMag;
|
||||
ShakeOffsetRate=default.ScopedShakeOffsetRate;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ShakeOffsetMag=default.ShakeOffsetMag;
|
||||
ShakeOffsetRate=default.ShakeOffsetRate;
|
||||
}
|
||||
Super.ModeDoFire();
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
ScopedShakeOffsetMag=(X=3.000000)
|
||||
ScopedShakeOffsetRate=(X=1000.000000,Y=1000.000000,Z=1000.000000)
|
||||
FireAimedAnim="Fire_Iron"
|
||||
RecoilRate=0.100000
|
||||
maxVerticalRecoilAngle=800
|
||||
maxHorizontalRecoilAngle=250
|
||||
FireSoundRef="ScrnWeaponPack_SND.BDHR.awp1_mono"
|
||||
StereoFireSoundRef="ScrnWeaponPack_SND.BDHR.awp1_stereo"
|
||||
NoAmmoSoundRef="KF_RifleSnd.Rifle_DryFire"
|
||||
DamageType=Class'ScrnWeaponPack.DamTypeHuntingRifle'
|
||||
DamageMin=190
|
||||
DamageMax=220
|
||||
Momentum=18000.000000
|
||||
bWaitForRelease=True
|
||||
bModeExclusive=False
|
||||
bAttachSmokeEmitter=True
|
||||
TransientSoundVolume=1.800000
|
||||
FireLoopAnim=
|
||||
FireEndAnim=
|
||||
FireForce="ShockRifleFire"
|
||||
FireRate=1.900000
|
||||
AmmoClass=Class'ScrnWeaponPack.HuntingRifleAmmo'
|
||||
AmmoPerFire=1
|
||||
ShakeRotMag=(X=100.000000,Y=100.000000,Z=500.000000)
|
||||
ShakeRotRate=(X=10000.000000,Y=10000.000000,Z=10000.000000)
|
||||
ShakeRotTime=2.000000
|
||||
ShakeOffsetRate=(X=1000.000000,Y=1000.000000,Z=1000.000000)
|
||||
ShakeOffsetTime=2.000000
|
||||
BotRefireRate=0.650000
|
||||
FlashEmitterClass=Class'ROEffects.MuzzleFlash1stKar'
|
||||
aimerror=0.000000
|
||||
Spread=0.007000
|
||||
}
|
||||
35
kf_sources/ScrnWeaponPack/Classes/HuntingRiflePickup.uc
Normal file
35
kf_sources/ScrnWeaponPack/Classes/HuntingRiflePickup.uc
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
//=============================================================================
|
||||
// HuntingRifle Pickup.
|
||||
//=============================================================================
|
||||
class HuntingRiflePickup extends KFWeaponPickup;
|
||||
|
||||
/*
|
||||
function ShowDeagleInfo(Canvas C)
|
||||
{
|
||||
C.SetPos((C.SizeX - C.SizeY) / 2,0);
|
||||
C.DrawTile( Texture'KillingfloorHUD.ClassMenu.Deagle', C.SizeY, C.SizeY, 0.0, 0.0, 256, 256);
|
||||
}
|
||||
*/
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Weight=7.000000
|
||||
cost=650
|
||||
BuyClipSize=10
|
||||
PowerValue=55
|
||||
SpeedValue=42
|
||||
RangeValue=95
|
||||
Description="A rugged and reliable scoped rifle."
|
||||
ItemName="Hunting Rifle SE"
|
||||
ItemShortName="Hunter R.SE"
|
||||
AmmoItemName="Rifle bullets"
|
||||
CorrespondingPerkIndex=2
|
||||
EquipmentCategoryID=2
|
||||
InventoryType=Class'ScrnWeaponPack.HuntingRifle'
|
||||
PickupMessage="You got the Hunting Rifle"
|
||||
PickupSound=Sound'KF_RifleSnd.RifleBase.Rifle_Pickup'
|
||||
PickupForce="AssaultRiflePickup"
|
||||
StaticMesh=StaticMesh'ScrnWeaponPack_SM.HR_Pickup'
|
||||
CollisionRadius=30.000000
|
||||
CollisionHeight=5.000000
|
||||
}
|
||||
97
kf_sources/ScrnWeaponPack/Classes/KFShellEjectAK12AR.uc
Normal file
97
kf_sources/ScrnWeaponPack/Classes/KFShellEjectAK12AR.uc
Normal file
|
|
@ -0,0 +1,97 @@
|
|||
class KFShellEjectAK12AR extends KFShellEject;
|
||||
|
||||
simulated function Trigger(Actor Other, Pawn EventInstigator)
|
||||
{
|
||||
Emitters[0].SpawnParticle(1);
|
||||
Emitters[1].SpawnParticle(1);
|
||||
Emitters[2].SpawnParticle(5);
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Begin Object Class=MeshEmitter Name=MeshEmitter0
|
||||
StaticMesh=StaticMesh'ScrnWeaponPack_SM.AK12_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=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=(X=(Min=100.000000,Max=100.000000),Z=(Min=100.000000,Max=150.000000))
|
||||
End Object
|
||||
Emitters(0)=MeshEmitter'ScrnWeaponPack.KFShellEjectAK12AR.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'ScrnWeaponPack.KFShellEjectAK12AR.SpriteEmitter0'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter4
|
||||
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=50
|
||||
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=5.000000,Max=10.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=30.000000))
|
||||
VelocityLossRange=(X=(Max=2.000000))
|
||||
End Object
|
||||
Emitters(2)=SpriteEmitter'ScrnWeaponPack.KFShellEjectAK12AR.SpriteEmitter4'
|
||||
|
||||
}
|
||||
97
kf_sources/ScrnWeaponPack/Classes/KFShellEjectSVD.uc
Normal file
97
kf_sources/ScrnWeaponPack/Classes/KFShellEjectSVD.uc
Normal file
|
|
@ -0,0 +1,97 @@
|
|||
class KFShellEjectSVD extends KFShellEject;
|
||||
|
||||
simulated function Trigger(Actor Other, Pawn EventInstigator)
|
||||
{
|
||||
Emitters[0].SpawnParticle(1);
|
||||
Emitters[1].SpawnParticle(1);
|
||||
Emitters[2].SpawnParticle(5);
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Begin Object Class=MeshEmitter Name=MeshEmitter0
|
||||
StaticMesh=StaticMesh'ScrnWeaponPack_SM.SVD_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=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=(X=(Min=100.000000,Max=100.000000),Z=(Min=100.000000,Max=150.000000))
|
||||
End Object
|
||||
Emitters(0)=MeshEmitter'ScrnWeaponPack.KFShellEjectSVD.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'ScrnWeaponPack.KFShellEjectSVD.SpriteEmitter0'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter4
|
||||
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.700000
|
||||
MaxParticles=50
|
||||
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=5.000000,Max=10.000000))
|
||||
DrawStyle=PTDS_Brighten
|
||||
Texture=Texture'Effects_Tex.Weapons.MP3rdPmuzzle_smoke1frame'
|
||||
LifetimeRange=(Min=1.200000,Max=1.200000)
|
||||
StartVelocityRange=(Y=(Min=-30.000000,Max=30.000000))
|
||||
VelocityLossRange=(X=(Max=2.000000))
|
||||
End Object
|
||||
Emitters(2)=SpriteEmitter'ScrnWeaponPack.KFShellEjectSVD.SpriteEmitter4'
|
||||
|
||||
}
|
||||
35
kf_sources/ScrnWeaponPack/Classes/KFShellSpewerSVD.uc
Normal file
35
kf_sources/ScrnWeaponPack/Classes/KFShellSpewerSVD.uc
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
class KFShellSpewerSVD extends xEmitter;
|
||||
|
||||
var() Sound ShellImpactSnd;
|
||||
|
||||
function CollisionSound()
|
||||
{
|
||||
PlaySound(ShellImpactSnd);
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
ShellImpactSnd=SoundGroup'Inf_Weapons.shells.ShellRifleDirt'
|
||||
mParticleType=PT_Mesh
|
||||
mStartParticles=0
|
||||
mMaxParticles=150
|
||||
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.100000
|
||||
Skins(0)=Texture'PatchTex.NormalCasing'
|
||||
bUnlit=False
|
||||
}
|
||||
12
kf_sources/ScrnWeaponPack/Classes/MTS255Ammo.uc
Normal file
12
kf_sources/ScrnWeaponPack/Classes/MTS255Ammo.uc
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
class MTS255Ammo extends KFAmmunition;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoPickupAmount=10
|
||||
MaxAmmo=35
|
||||
InitialAmount=15
|
||||
PickupClass=Class'ScrnWeaponPack.MTS255AmmoPickup'
|
||||
IconMaterial=Texture'KillingFloorHUD.Generic.HUD'
|
||||
IconCoords=(X1=4,Y1=350,X2=110,Y2=395)
|
||||
ItemName="Explosive 12-gauge Shells"
|
||||
}
|
||||
8
kf_sources/ScrnWeaponPack/Classes/MTS255AmmoPickup.uc
Normal file
8
kf_sources/ScrnWeaponPack/Classes/MTS255AmmoPickup.uc
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
class MTS255AmmoPickup extends KFAmmoPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoAmount=10
|
||||
InventoryType=Class'ScrnWeaponPack.MTS255Ammo'
|
||||
PickupMessage="Explosive 12-gauge Shells"
|
||||
}
|
||||
52
kf_sources/ScrnWeaponPack/Classes/MTS255Attachment.uc
Normal file
52
kf_sources/ScrnWeaponPack/Classes/MTS255Attachment.uc
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
class MTS255Attachment extends KFWeaponAttachment;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
mMuzFlashClass=Class'ROEffects.MuzzleFlash3rdKar'
|
||||
mShellCaseEmitterClass=Class'KFMod.KFShotgunShellSpewer'
|
||||
MovementAnims(0)="JogF_Shotgun"
|
||||
MovementAnims(1)="JogB_Shotgun"
|
||||
MovementAnims(2)="JogL_Shotgun"
|
||||
MovementAnims(3)="JogR_Shotgun"
|
||||
TurnLeftAnim="TurnL_Shotgun"
|
||||
TurnRightAnim="TurnR_Shotgun"
|
||||
CrouchAnims(0)="CHwalkF_Shotgun"
|
||||
CrouchAnims(1)="CHwalkB_Shotgun"
|
||||
CrouchAnims(2)="CHwalkL_Shotgun"
|
||||
CrouchAnims(3)="CHwalkR_Shotgun"
|
||||
WalkAnims(0)="WalkF_Shotgun"
|
||||
WalkAnims(1)="WalkB_Shotgun"
|
||||
WalkAnims(2)="WalkL_Shotgun"
|
||||
WalkAnims(3)="WalkR_Shotgun"
|
||||
CrouchTurnRightAnim="CH_TurnR_Shotgun"
|
||||
CrouchTurnLeftAnim="CH_TurnL_Shotgun"
|
||||
IdleCrouchAnim="CHIdle_Shotgun"
|
||||
IdleWeaponAnim="Idle_Shotgun"
|
||||
IdleRestAnim="Idle_Shotgun"
|
||||
IdleChatAnim="Idle_Shotgun"
|
||||
IdleHeavyAnim="Idle_Shotgun"
|
||||
IdleRifleAnim="Idle_Shotgun"
|
||||
FireAnims(0)="Fire_Benelli"
|
||||
FireAnims(1)="Fire_Benelli"
|
||||
FireAnims(2)="Fire_Benelli"
|
||||
FireAnims(3)="Fire_Benelli"
|
||||
FireAltAnims(0)="Fire_Benelli"
|
||||
FireAltAnims(1)="Fire_Benelli"
|
||||
FireAltAnims(2)="Fire_Benelli"
|
||||
FireAltAnims(3)="Fire_Benelli"
|
||||
FireCrouchAnims(0)="CHFire_Benelli"
|
||||
FireCrouchAnims(1)="CHFire_Benelli"
|
||||
FireCrouchAnims(2)="CHFire_Benelli"
|
||||
FireCrouchAnims(3)="CHFire_Benelli"
|
||||
FireCrouchAltAnims(0)="CHFire_Benelli"
|
||||
FireCrouchAltAnims(1)="CHFire_Benelli"
|
||||
FireCrouchAltAnims(2)="CHFire_Benelli"
|
||||
FireCrouchAltAnims(3)="CHFire_Benelli"
|
||||
HitAnims(0)="HitF_Shotgun"
|
||||
HitAnims(1)="HitB_Shotgun"
|
||||
HitAnims(2)="HitL_Shotgun"
|
||||
HitAnims(3)="HitR_Shotgun"
|
||||
PostFireBlendStandAnim="Blend_Shotgun"
|
||||
PostFireBlendCrouchAnim="CHBlend_Shotgun"
|
||||
MeshRef="ScrnWeaponPack_A.MTS255_3rd"
|
||||
}
|
||||
99
kf_sources/ScrnWeaponPack/Classes/MTS255Fire.uc
Normal file
99
kf_sources/ScrnWeaponPack/Classes/MTS255Fire.uc
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
class MTS255Fire extends KFShotgunFire;
|
||||
|
||||
var() class<Emitter> ShellEjectClass;
|
||||
var() Emitter ShellEjectEmitter;
|
||||
var() name ShellEjectBoneName;
|
||||
|
||||
simulated function InitEffects()
|
||||
{
|
||||
super.InitEffects();
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
function DrawMuzzleFlash(Canvas Canvas)
|
||||
{
|
||||
super.DrawMuzzleFlash(Canvas);
|
||||
if (ShellEjectEmitter != None )
|
||||
{
|
||||
Canvas.DrawActor( ShellEjectEmitter, false, false, Weapon.DisplayFOV );
|
||||
}
|
||||
}
|
||||
|
||||
function FlashMuzzleFlash()
|
||||
{
|
||||
super.FlashMuzzleFlash();
|
||||
|
||||
if (ShellEjectEmitter != None)
|
||||
{
|
||||
ShellEjectEmitter.Trigger(Weapon, Instigator);
|
||||
}
|
||||
}
|
||||
|
||||
simulated function DestroyEffects()
|
||||
{
|
||||
super.DestroyEffects();
|
||||
|
||||
if (ShellEjectEmitter != None)
|
||||
ShellEjectEmitter.Destroy();
|
||||
}
|
||||
|
||||
// Overridden to support interrupting the reload
|
||||
simulated function bool AllowFire()
|
||||
{
|
||||
if( KFWeapon(Weapon).bIsReloading )
|
||||
return false;
|
||||
|
||||
if(KFPawn(Instigator).SecondaryItem!=none)
|
||||
return false;
|
||||
if( KFPawn(Instigator).bThrowingNade )
|
||||
return false;
|
||||
|
||||
if( Level.TimeSeconds - LastClickTime>FireRate )
|
||||
{
|
||||
LastClickTime = Level.TimeSeconds;
|
||||
}
|
||||
|
||||
if( KFWeapon(Weapon).MagAmmoRemaining<1 )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return super(WeaponFire).AllowFire();
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
KickMomentum=(X=-45.000000,Z=10.000000)
|
||||
maxVerticalRecoilAngle=1500
|
||||
maxHorizontalRecoilAngle=900
|
||||
FireAimedAnim="Fire_Iron"
|
||||
bRandomPitchFireSound=False
|
||||
FireSoundRef="KF_PumpSGSnd.SG_Fire"
|
||||
StereoFireSoundRef="KF_PumpSGSnd.SG_FireST"
|
||||
NoAmmoSoundRef="KF_PumpSGSnd.SG_DryFire"
|
||||
ProjPerFire=1
|
||||
bWaitForRelease=True
|
||||
bAttachSmokeEmitter=True
|
||||
TransientSoundVolume=2.000000
|
||||
TransientSoundRadius=500.000000
|
||||
FireRate=0.400000
|
||||
AmmoClass=Class'ScrnWeaponPack.MTS255Ammo'
|
||||
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'ScrnWeaponPack.MTS255Rocket'
|
||||
BotRefireRate=0.200000
|
||||
FlashEmitterClass=Class'ROEffects.MuzzleFlash1stKar'
|
||||
aimerror=1.000000
|
||||
Spread=0.010000
|
||||
}
|
||||
25
kf_sources/ScrnWeaponPack/Classes/MTS255Pickup.uc
Normal file
25
kf_sources/ScrnWeaponPack/Classes/MTS255Pickup.uc
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
class MTS255Pickup extends KFWeaponPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Weight=7.000000
|
||||
cost=2250
|
||||
AmmoCost=35
|
||||
BuyClipSize=5
|
||||
PowerValue=70
|
||||
SpeedValue=60
|
||||
RangeValue=15
|
||||
Description="The MTs-255 is a 12-gauge shotgun fed by a 5-round internal revolving cylinder. Holds up to 5 explosive slugs."
|
||||
ItemName="MTs-255 Shotgun SE"
|
||||
ItemShortName="MTs-255 SE"
|
||||
AmmoItemName="12-gauge explosive shells"
|
||||
CorrespondingPerkIndex=6
|
||||
EquipmentCategoryID=2
|
||||
InventoryType=Class'ScrnWeaponPack.MTS255Shotgun'
|
||||
PickupMessage="You got the MTs-255 Explosive Shotgun"
|
||||
PickupSound=Sound'KF_M4ShotgunSnd.foley.WEP_Benelli_Foley_Pickup'
|
||||
PickupForce="AssaultRiflePickup"
|
||||
StaticMesh=StaticMesh'ScrnWeaponPack_SM.MTS255_Pickup'
|
||||
CollisionRadius=35.000000
|
||||
CollisionHeight=5.000000
|
||||
}
|
||||
125
kf_sources/ScrnWeaponPack/Classes/MTS255Rocket.uc
Normal file
125
kf_sources/ScrnWeaponPack/Classes/MTS255Rocket.uc
Normal file
|
|
@ -0,0 +1,125 @@
|
|||
class MTS255Rocket extends SPGrenadeProjectile;
|
||||
|
||||
var() float StraightFlightTime; // How long the projectile and flies straight
|
||||
var bool bOutOfPropellant; // Projectile is out of propellant
|
||||
var bool bDud;
|
||||
|
||||
replication
|
||||
{
|
||||
reliable if(Role == ROLE_Authority)
|
||||
bDud;
|
||||
}
|
||||
|
||||
simulated function Tick( float DeltaTime )
|
||||
{
|
||||
SetRotation(Rotator(Normal(Velocity)));
|
||||
|
||||
if( !bOutOfPropellant ){
|
||||
if ( StraightFlightTime > 0 )
|
||||
StraightFlightTime -= DeltaTime;
|
||||
else
|
||||
bOutOfPropellant = true;
|
||||
}
|
||||
|
||||
if( bOutOfPropellant && Physics != PHYS_Falling )
|
||||
SetPhysics(PHYS_Falling);
|
||||
}
|
||||
|
||||
simulated function HitWall( vector HitNormal, actor Wall )
|
||||
{
|
||||
if( Instigator != none )
|
||||
{
|
||||
OrigLoc = Instigator.Location;
|
||||
}
|
||||
if( !bDud && ((VSizeSquared(Location - OrigLoc) < ArmDistSquared) || OrigLoc == vect(0,0,0)) )
|
||||
{
|
||||
bDud = true;
|
||||
LifeSpan=1.0;
|
||||
Velocity = vect(0,0,0);
|
||||
SetPhysics(PHYS_Falling);
|
||||
}
|
||||
|
||||
if( !bDud )
|
||||
{
|
||||
super(Projectile).HitWall(HitNormal,Wall);
|
||||
}
|
||||
}
|
||||
|
||||
simulated function Explode(vector HitLocation, vector HitNormal)
|
||||
{
|
||||
bHasExploded = True;
|
||||
|
||||
// Don't explode if this is a dud
|
||||
if( bDud )
|
||||
{
|
||||
Velocity = vect(0,0,0);
|
||||
LifeSpan=1.0;
|
||||
SetPhysics(PHYS_Falling);
|
||||
return;
|
||||
}
|
||||
|
||||
super.Explode(HitLocation, HitNormal);
|
||||
}
|
||||
|
||||
simulated function ProcessTouch(Actor Other, Vector HitLocation)
|
||||
{
|
||||
// Don't let it hit this player, or blow up on another player
|
||||
if ( Other == none || Other == Instigator || Other.Base == Instigator )
|
||||
return;
|
||||
|
||||
// Don't collide with bullet whip attachments
|
||||
if( KFBulletWhipAttachment(Other) != none )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Don't allow hits on poeple on the same team
|
||||
if( KFHumanPawn(Other) != none && Instigator != none
|
||||
&& KFHumanPawn(Other).PlayerReplicationInfo.Team.TeamIndex == Instigator.PlayerReplicationInfo.Team.TeamIndex )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Use the instigator's location if it exists. This fixes issues with
|
||||
// the original location of the projectile being really far away from
|
||||
// the real Origloc due to it taking a couple of milliseconds to
|
||||
// replicate the location to the client and the first replicated location has
|
||||
// already moved quite a bit.
|
||||
if( Instigator != none )
|
||||
{
|
||||
OrigLoc = Instigator.Location;
|
||||
}
|
||||
|
||||
if( !bDud && ((VSizeSquared(Location - OrigLoc) < ArmDistSquared) || OrigLoc == vect(0,0,0)) )
|
||||
{
|
||||
if( Role == ROLE_Authority )
|
||||
{
|
||||
AmbientSound=none;
|
||||
PlaySound(Sound'ProjectileSounds.PTRD_deflect04',,2.0);
|
||||
Other.TakeDamage( ImpactDamage, Instigator, HitLocation, Normal(Velocity), ImpactDamageType );
|
||||
}
|
||||
bDud = true;
|
||||
Velocity = vect(0,0,0);
|
||||
LifeSpan=1.0;
|
||||
SetPhysics(PHYS_Falling);
|
||||
}
|
||||
|
||||
if( !bDud )
|
||||
{
|
||||
Explode(HitLocation,Normal(HitLocation-Other.Location));
|
||||
}
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StraightFlightTime=0.500000
|
||||
ArmDistSquared=62500.000000
|
||||
Speed=5000.000000
|
||||
MaxSpeed=7500.000000
|
||||
TossZ=0.000000
|
||||
Damage=260.000000
|
||||
DamageRadius=300.000000
|
||||
Physics=PHYS_Projectile
|
||||
DrawScale=0.500000
|
||||
bBounce=False
|
||||
}
|
||||
52
kf_sources/ScrnWeaponPack/Classes/MTS255Shotgun.uc
Normal file
52
kf_sources/ScrnWeaponPack/Classes/MTS255Shotgun.uc
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
class MTS255Shotgun extends KFWeapon;
|
||||
|
||||
#exec OBJ LOAD FILE=ScrnWeaponPack_T.utx
|
||||
#exec OBJ LOAD FILE=ScrnWeaponPack_A.ukx
|
||||
#exec OBJ LOAD FILE=ScrnWeaponPack_SM.usx
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
MagCapacity=5
|
||||
ReloadRate=2.200000
|
||||
ReloadAnim="Reload"
|
||||
ReloadAnimRate=1.000000
|
||||
WeaponReloadAnim="Reload_Winchester"
|
||||
Weight=7.000000
|
||||
bHasAimingMode=True
|
||||
IdleAimAnim="Idle_Iron"
|
||||
StandardDisplayFOV=65.000000
|
||||
bModeZeroCanDryFire=True
|
||||
SleeveNum=0
|
||||
TraderInfoTexture=Texture'ScrnWeaponPack_T.MTS.MTS255_Trader'
|
||||
MeshRef="ScrnWeaponPack_A.MTS255_1st"
|
||||
SkinRefs(0)="KF_Weapons_Trip_T.hands.hands_1stP_military_cmb"
|
||||
SkinRefs(1)="ScrnWeaponPack_T.MTS.Osnova_cmb"
|
||||
SkinRefs(2)="ScrnWeaponPack_T.MTS.Pricel_cmb"
|
||||
SkinRefs(3)="ScrnWeaponPack_T.MTS.Zaryadka_cmb"
|
||||
SkinRefs(4)="ScrnWeaponPack_T.MTS.Patron_cmb"
|
||||
SelectSoundRef="KF_M4ShotgunSnd.foley.WEP_Benelli_Foley_Select"
|
||||
HudImageRef="ScrnWeaponPack_T.MTS.MTS255_unselected"
|
||||
SelectedHudImageRef="ScrnWeaponPack_T.MTS.MTS255_selected"
|
||||
PlayerIronSightFOV=80.000000
|
||||
ZoomedDisplayFOV=45.000000
|
||||
FireModeClass(0)=Class'ScrnWeaponPack.MTS255Fire'
|
||||
FireModeClass(1)=Class'KFMod.NoFire'
|
||||
PutDownAnim="PutDown"
|
||||
SelectForce="SwitchToAssaultRifle"
|
||||
AIRating=0.550000
|
||||
CurrentRating=0.550000
|
||||
bShowChargingBar=True
|
||||
Description="The MTs-255 is a 12-gauge shotgun fed by a 5-round internal revolving cylinder. Holds up to 5 explosive slugs."
|
||||
EffectOffset=(X=100.000000,Y=25.000000,Z=-10.000000)
|
||||
DisplayFOV=65.000000
|
||||
Priority=200
|
||||
InventoryGroup=3
|
||||
GroupOffset=10
|
||||
PickupClass=Class'ScrnWeaponPack.MTS255Pickup'
|
||||
PlayerViewOffset=(X=19.700001,Y=18.750000,Z=-7.500000)
|
||||
BobDamping=6.000000
|
||||
AttachmentClass=Class'ScrnWeaponPack.MTS255Attachment'
|
||||
IconCoords=(X1=245,Y1=39,X2=329,Y2=79)
|
||||
ItemName="MTs-255 Shotgun SE"
|
||||
TransientSoundVolume=1.250000
|
||||
}
|
||||
6
kf_sources/ScrnWeaponPack/Classes/MedicDartAttachment.uc
Normal file
6
kf_sources/ScrnWeaponPack/Classes/MedicDartAttachment.uc
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
class MedicDartAttachment extends ScrnFakedProjectile;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
StaticMesh=StaticMesh'ScrnWeaponPack_SM.MedicDartAttachment'
|
||||
}
|
||||
503
kf_sources/ScrnWeaponPack/Classes/MedicPistol.uc
Normal file
503
kf_sources/ScrnWeaponPack/Classes/MedicPistol.uc
Normal file
|
|
@ -0,0 +1,503 @@
|
|||
class MedicPistol extends KFWeapon
|
||||
config(user);
|
||||
|
||||
|
||||
var const class<ScrnLocalLaserDot> LaserDotClass;
|
||||
var ScrnLocalLaserDot LaserDot; // The first person laser site dot
|
||||
|
||||
var() class<InventoryAttachment> LaserAttachmentClass; // First person laser attachment class
|
||||
var Actor LaserAttachment; // First person laser attachment
|
||||
var byte LaserType;
|
||||
|
||||
var transient Vector HealLocation, ClientHealLocation;
|
||||
var transient Rotator HealRotation;
|
||||
|
||||
var Sound HealSound;
|
||||
var string HealSoundRef;
|
||||
|
||||
var name ReloadShortAnim;
|
||||
var float ReloadShortRate;
|
||||
var transient bool bShortReload;
|
||||
|
||||
var bool bFiringLastRound;
|
||||
|
||||
replication
|
||||
{
|
||||
reliable if(Role < ROLE_Authority)
|
||||
ServerSetLaserType;
|
||||
|
||||
reliable if( Role == ROLE_Authority )
|
||||
ClientSuccessfulHeal;
|
||||
|
||||
reliable if( bNetDirty && Role == ROLE_Authority )
|
||||
HealRotation, HealLocation;
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
// Dynamic Asset Load
|
||||
//=============================================================================
|
||||
static function PreloadAssets(Inventory Inv, optional bool bSkipRefCount)
|
||||
{
|
||||
local MedicPistol W;
|
||||
|
||||
super.PreloadAssets(Inv, bSkipRefCount);
|
||||
|
||||
default.HealSound = sound(DynamicLoadObject(default.HealSoundRef, class'Sound', true));
|
||||
|
||||
if ( W != none ) {
|
||||
W.HealSound = default.HealSound;
|
||||
}
|
||||
}
|
||||
|
||||
static function bool UnloadAssets()
|
||||
{
|
||||
if ( super.UnloadAssets() )
|
||||
{
|
||||
default.HealSound = none;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
// Functions
|
||||
//=============================================================================
|
||||
|
||||
simulated function PostNetReceive()
|
||||
{
|
||||
if ( Role < ROLE_Authority && ClientHealLocation != HealLocation ) {
|
||||
ClientHealLocation = HealLocation;
|
||||
HitHealTarget(HealLocation, HealRotation);
|
||||
}
|
||||
}
|
||||
|
||||
simulated function Fire(float f)
|
||||
{
|
||||
if ( f == 0)
|
||||
bFiringLastRound = MagAmmoRemaining == 1;
|
||||
super.Fire(f);
|
||||
}
|
||||
|
||||
simulated function Destroyed()
|
||||
{
|
||||
if (LaserDot != None)
|
||||
LaserDot.Destroy();
|
||||
if (LaserAttachment != None)
|
||||
LaserAttachment.Destroy();
|
||||
|
||||
super.Destroyed();
|
||||
}
|
||||
|
||||
simulated function bool AllowReload()
|
||||
{
|
||||
UpdateMagCapacity(Instigator.PlayerReplicationInfo);
|
||||
|
||||
if(KFInvasionBot(Instigator.Controller) != none && !bIsReloading &&
|
||||
MagAmmoRemaining <= MagCapacity && AmmoAmount(0) > MagAmmoRemaining)
|
||||
return true;
|
||||
|
||||
if(KFFriendlyAI(Instigator.Controller) != none && !bIsReloading &&
|
||||
MagAmmoRemaining <= MagCapacity && AmmoAmount(0) > MagAmmoRemaining)
|
||||
return true;
|
||||
|
||||
|
||||
if(FireMode[0].IsFiring() || FireMode[1].IsFiring() ||
|
||||
bIsReloading || MagAmmoRemaining > MagCapacity ||
|
||||
ClientState == WS_BringUp ||
|
||||
AmmoAmount(0) <= MagAmmoRemaining ||
|
||||
(FireMode[0].NextFireTime - Level.TimeSeconds) > 0.1 )
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
exec function ReloadMeNow()
|
||||
{
|
||||
local float ReloadMulti;
|
||||
|
||||
if(!AllowReload())
|
||||
return;
|
||||
if ( bHasAimingMode && bAimingRifle )
|
||||
{
|
||||
FireMode[1].bIsFiring = False;
|
||||
|
||||
ZoomOut(false);
|
||||
if( Role < ROLE_Authority)
|
||||
ServerZoomOut(false);
|
||||
}
|
||||
|
||||
if ( KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo) != none && KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo).ClientVeteranSkill != none )
|
||||
ReloadMulti = KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo).ClientVeteranSkill.Static.GetReloadSpeedModifier(KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo), self);
|
||||
else
|
||||
ReloadMulti = 1.0;
|
||||
|
||||
bIsReloading = true;
|
||||
ReloadTimer = Level.TimeSeconds;
|
||||
bShortReload = MagAmmoRemaining > 0 && ReloadShortAnim != '';
|
||||
if ( bShortReload )
|
||||
ReloadRate = Default.ReloadShortRate / ReloadMulti;
|
||||
else
|
||||
ReloadRate = Default.ReloadRate / ReloadMulti;
|
||||
|
||||
if( bHoldToReload )
|
||||
{
|
||||
NumLoadedThisReload = 0;
|
||||
}
|
||||
ClientReload();
|
||||
Instigator.SetAnimAction(WeaponReloadAnim);
|
||||
if ( Level.Game.NumPlayers > 1 && KFGameType(Level.Game).bWaveInProgress && KFPlayerController(Instigator.Controller) != none &&
|
||||
Level.TimeSeconds - KFPlayerController(Instigator.Controller).LastReloadMessageTime > KFPlayerController(Instigator.Controller).ReloadMessageDelay )
|
||||
{
|
||||
KFPlayerController(Instigator.Controller).Speech('AUTO', 2, "");
|
||||
KFPlayerController(Instigator.Controller).LastReloadMessageTime = Level.TimeSeconds;
|
||||
}
|
||||
}
|
||||
|
||||
simulated function ClientReload()
|
||||
{
|
||||
local float ReloadMulti;
|
||||
if ( bHasAimingMode && bAimingRifle )
|
||||
{
|
||||
FireMode[1].bIsFiring = False;
|
||||
|
||||
ZoomOut(false);
|
||||
if( Role < ROLE_Authority)
|
||||
ServerZoomOut(false);
|
||||
}
|
||||
|
||||
if ( KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo) != none && KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo).ClientVeteranSkill != none )
|
||||
ReloadMulti = KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo).ClientVeteranSkill.Static.GetReloadSpeedModifier(KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo), self);
|
||||
else
|
||||
ReloadMulti = 1.0;
|
||||
|
||||
bIsReloading = true;
|
||||
if ( MagAmmoRemaining <= 0 || ReloadShortAnim == '' )
|
||||
{
|
||||
PlayAnim(ReloadAnim, ReloadAnimRate*ReloadMulti, 0.1);
|
||||
}
|
||||
else if ( MagAmmoRemaining >= 1 )
|
||||
{
|
||||
PlayAnim(ReloadShortAnim, ReloadAnimRate*ReloadMulti, 0.1);
|
||||
}
|
||||
}
|
||||
|
||||
function AddReloadedAmmo()
|
||||
{
|
||||
local int a;
|
||||
|
||||
UpdateMagCapacity(Instigator.PlayerReplicationInfo);
|
||||
|
||||
a = MagCapacity;
|
||||
if ( bShortReload )
|
||||
a++; // 1 bullet already bolted
|
||||
|
||||
if ( AmmoAmount(0) >= a )
|
||||
MagAmmoRemaining = a;
|
||||
else
|
||||
MagAmmoRemaining = AmmoAmount(0);
|
||||
|
||||
// this seems redudant -- PooSH
|
||||
// if( !bHoldToReload )
|
||||
// {
|
||||
// ClientForceKFAmmoUpdate(MagAmmoRemaining,AmmoAmount(0));
|
||||
// }
|
||||
|
||||
if ( PlayerController(Instigator.Controller) != none && KFSteamStatsAndAchievements(PlayerController(Instigator.Controller).SteamStatsAndAchievements) != none )
|
||||
{
|
||||
KFSteamStatsAndAchievements(PlayerController(Instigator.Controller).SteamStatsAndAchievements).OnWeaponReloaded();
|
||||
}
|
||||
}
|
||||
|
||||
simulated function WeaponTick(float dt)
|
||||
{
|
||||
//Change the various animations depending on whether the last round was fired
|
||||
if (Level.NetMode != NM_DedicatedServer)
|
||||
{
|
||||
if (MagAmmoRemaining >= 1 || bIsReloading)
|
||||
{
|
||||
//ReloadAnim = 'ReloadChambered';
|
||||
IdleAnim = default.IdleAnim;
|
||||
IdleAimAnim = default.IdleAimAnim;
|
||||
SelectAnim = default.SelectAnim;
|
||||
PutDownAnim = default.PutDownAnim;
|
||||
ModeSwitchAnim = default.ModeSwitchAnim;
|
||||
}
|
||||
else if (MagAmmoRemaining == 0)
|
||||
{
|
||||
//ReloadAnim = default.ReloadAnim;
|
||||
IdleAnim = 'IdleEmpty';
|
||||
IdleAimAnim = 'IdleEmpty_Iron';
|
||||
SelectAnim = 'SelectEmpty';
|
||||
PutDownAnim = 'PutDownEmpty';
|
||||
ModeSwitchAnim = 'LightOnEmpty';
|
||||
}
|
||||
}
|
||||
//End animation-swapping stuff
|
||||
super.WeaponTick(dt);
|
||||
|
||||
if ( (FlashLight != none && FlashLight.bHasLight ) == (LaserType > 0) )
|
||||
ToggleLaser(); // automatically turn on laser if flashlight is off
|
||||
}
|
||||
|
||||
//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, FlashBoneName);
|
||||
}
|
||||
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(FlashBoneName);
|
||||
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();
|
||||
}
|
||||
|
||||
|
||||
simulated function ClientSuccessfulHeal(PlayerReplicationInfo HealedPRI)
|
||||
{
|
||||
if( PlayerController(Instigator.Controller) != none )
|
||||
PlayerController(Instigator.controller).ClientMessage(class'KFMod.MP7MMedicGun'.default.SuccessfulHealMessage $ HealedPRI.PlayerName, 'CriticalEvent');
|
||||
}
|
||||
|
||||
simulated function HitHealTarget(vector HitLocation, rotator HitRotation)
|
||||
{
|
||||
HealLocation = HitLocation;
|
||||
HealRotation = HitRotation;
|
||||
|
||||
if( Role == ROLE_Authority ) {
|
||||
NetUpdateTime = Level.TimeSeconds - 1;
|
||||
}
|
||||
|
||||
PlaySound(HealSound,,2.0);
|
||||
|
||||
if ( EffectIsRelevant(Location,false) )
|
||||
{
|
||||
Spawn(Class'KFMod.HealingFX',,, HitLocation, HitRotation);
|
||||
}
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
LaserDotClass=Class'ScrnBalanceSrv.ScrnLocalLaserDot'
|
||||
LaserAttachmentClass=Class'ScrnBalanceSrv.ScrnLaserAttachmentFirstPerson'
|
||||
HealSoundRef="KF_MP7Snd.MP7_DartImpact"
|
||||
ReloadShortAnim="ReloadChambered"
|
||||
ReloadShortRate=1.500000
|
||||
MagCapacity=7
|
||||
ReloadRate=2.000000
|
||||
ReloadAnim="Reload"
|
||||
ReloadAnimRate=1.000000
|
||||
FlashBoneName="LightBone"
|
||||
WeaponReloadAnim="Reload_Single9mm"
|
||||
ModeSwitchAnim="LightOn"
|
||||
Weight=2.000000
|
||||
bTorchEnabled=True
|
||||
bHasAimingMode=True
|
||||
IdleAimAnim="Idle_Iron"
|
||||
StandardDisplayFOV=70.000000
|
||||
bModeZeroCanDryFire=True
|
||||
SleeveNum=0
|
||||
TraderInfoTexture=Texture'ScrnWeaponPack_T.MedicPistol.HUD_Single_UnSelected'
|
||||
MeshRef="ScrnWeaponPack_A.MedicPistol_1st"
|
||||
SkinRefs(1)="ScrnWeaponPack_T.MedicPistol.Slide_cmb"
|
||||
SkinRefs(2)="ScrnWeaponPack_T.MedicPistol.Frame_cmb"
|
||||
SkinRefs(3)="ScrnWeaponPack_T.MedicPistol.Slide_cmb"
|
||||
SkinRefs(4)="ScrnWeaponPack_T.MedicPistol.Slide_shd"
|
||||
SelectSoundRef="KF_9MMSnd.9mm_Select"
|
||||
HudImageRef="ScrnWeaponPack_T.MedicPistol.HUD_Single_UnSelected"
|
||||
SelectedHudImageRef="ScrnWeaponPack_T.MedicPistol.HUD_Single_Selected"
|
||||
ZoomedDisplayFOV=65.000000
|
||||
FireModeClass(0)=Class'ScrnWeaponPack.MedicPistolFire'
|
||||
FireModeClass(1)=Class'ScrnWeaponPack.MedicPistolLightFire'
|
||||
PutDownAnim="PutDown"
|
||||
AIRating=0.250000
|
||||
CurrentRating=0.250000
|
||||
bShowChargingBar=True
|
||||
Description="Primary fire shoots healing darts. Darts heal zeds too, but it doesn't help them much, if titanium needle breaks their skulls first. Shooting multiple dart into the same zed may cause overdose. Alternate fire switch between laser and flashlight."
|
||||
DisplayFOV=70.000000
|
||||
Priority=60
|
||||
InventoryGroup=2
|
||||
GroupOffset=1
|
||||
PickupClass=Class'ScrnWeaponPack.MedicPistolPickup'
|
||||
PlayerViewOffset=(X=20.000000,Y=25.000000,Z=-10.000000)
|
||||
BobDamping=6.000000
|
||||
AttachmentClass=Class'ScrnWeaponPack.MedicPistolAttachment'
|
||||
IconCoords=(X1=434,Y1=253,X2=506,Y2=292)
|
||||
ItemName="KF2 Medic Pistol SE"
|
||||
}
|
||||
17
kf_sources/ScrnWeaponPack/Classes/MedicPistolAmmo.uc
Normal file
17
kf_sources/ScrnWeaponPack/Classes/MedicPistolAmmo.uc
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
//=============================================================================
|
||||
// 9mm Ammo.
|
||||
//=============================================================================
|
||||
class MedicPistolAmmo extends KFAmmunition;
|
||||
|
||||
#EXEC OBJ LOAD FILE=InterfaceContent.utx
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoPickupAmount=14
|
||||
MaxAmmo=98
|
||||
InitialAmount=21
|
||||
PickupClass=Class'ScrnWeaponPack.MedicPistolAmmoPickup'
|
||||
IconMaterial=Texture'KillingFloorHUD.Generic.HUD'
|
||||
IconCoords=(X1=413,Y1=82,X2=457,Y2=125)
|
||||
ItemName="Healing Darts"
|
||||
}
|
||||
10
kf_sources/ScrnWeaponPack/Classes/MedicPistolAmmoPickup.uc
Normal file
10
kf_sources/ScrnWeaponPack/Classes/MedicPistolAmmoPickup.uc
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
class MedicPistolAmmoPickup extends KFAmmoPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoAmount=7
|
||||
InventoryType=Class'ScrnWeaponPack.MedicPistolAmmo'
|
||||
RespawnTime=0.000000
|
||||
PickupMessage="Healing Darts"
|
||||
StaticMesh=StaticMesh'KillingFloorStatics.DualiesAmmo'
|
||||
}
|
||||
121
kf_sources/ScrnWeaponPack/Classes/MedicPistolAttachment.uc
Normal file
121
kf_sources/ScrnWeaponPack/Classes/MedicPistolAttachment.uc
Normal file
|
|
@ -0,0 +1,121 @@
|
|||
class MedicPistolAttachment extends ScrnLaserWeaponAttachment;
|
||||
|
||||
var Actor TacShine;
|
||||
var Effects TacShineCorona;
|
||||
var bool bBeamEnabled;
|
||||
|
||||
replication
|
||||
{
|
||||
reliable if ( Role==ROLE_Authority )
|
||||
bBeamEnabled;
|
||||
}
|
||||
|
||||
// Prevents tracers from spawning if player is using the flashlight function of the 9mm
|
||||
simulated event ThirdPersonEffects()
|
||||
{
|
||||
if( FiringMode==1 )
|
||||
return;
|
||||
Super.ThirdPersonEffects();
|
||||
}
|
||||
|
||||
simulated function Destroyed()
|
||||
{
|
||||
if ( TacShineCorona != None )
|
||||
TacShineCorona.Destroy();
|
||||
if ( TacShine != None )
|
||||
TacShine.Destroy();
|
||||
Super.Destroyed();
|
||||
}
|
||||
|
||||
simulated function UpdateTacBeam( float Dist )
|
||||
{
|
||||
local vector Sc;
|
||||
|
||||
if( !bBeamEnabled )
|
||||
{
|
||||
if (TacShine == none )
|
||||
{
|
||||
TacShine = Spawn(Class'MedicPistol'.Default.TacShineClass,Owner,,,);
|
||||
AttachToBone(TacShine, LaserAttachmentBone);
|
||||
TacShine.RemoteRole = ROLE_None;
|
||||
}
|
||||
else TacShine.bHidden = False;
|
||||
if (TacShineCorona == none )
|
||||
{
|
||||
TacShineCorona = Spawn(class 'KFTacLightCorona',Owner,,,);
|
||||
AttachToBone(TacShineCorona,LaserAttachmentBone);
|
||||
TacShineCorona.RemoteRole = ROLE_None;
|
||||
}
|
||||
TacShineCorona.bHidden = False;
|
||||
bBeamEnabled = True;
|
||||
}
|
||||
Sc = TacShine.DrawScale3D;
|
||||
Sc.Y = FClamp(Dist/90.f,0.02,1.f);
|
||||
if( TacShine.DrawScale3D!=Sc )
|
||||
TacShine.SetDrawScale3D(Sc);
|
||||
}
|
||||
|
||||
simulated function TacBeamGone()
|
||||
{
|
||||
if( bBeamEnabled )
|
||||
{
|
||||
if (TacShine!=none )
|
||||
TacShine.bHidden = True;
|
||||
if (TacShineCorona!=none )
|
||||
TacShineCorona.bHidden = True;
|
||||
bBeamEnabled = False;
|
||||
}
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
LaserAttachmentBone="FlashLight"
|
||||
mMuzFlashClass=Class'ROEffects.MuzzleFlash3rdPistol'
|
||||
mTracerClass=Class'KFMod.KFNewTracer'
|
||||
mShellCaseEmitterClass=Class'KFMod.KFShellSpewer'
|
||||
MovementAnims(0)="JogF_Single9mm"
|
||||
MovementAnims(1)="JogB_Single9mm"
|
||||
MovementAnims(2)="JogL_Single9mm"
|
||||
MovementAnims(3)="JogR_Single9mm"
|
||||
TurnLeftAnim="TurnL_Single9mm"
|
||||
TurnRightAnim="TurnR_Single9mm"
|
||||
CrouchAnims(0)="CHwalkF_Single9mm"
|
||||
CrouchAnims(1)="CHwalkB_Single9mm"
|
||||
CrouchAnims(2)="CHwalkL_Single9mm"
|
||||
CrouchAnims(3)="CHwalkR_Single9mm"
|
||||
CrouchTurnRightAnim="CH_TurnR_Single9mm"
|
||||
CrouchTurnLeftAnim="CH_TurnL_Single9mm"
|
||||
IdleCrouchAnim="CHIdle_Single9mm"
|
||||
IdleWeaponAnim="Idle_Single9mm"
|
||||
IdleRestAnim="Idle_Single9mm"
|
||||
IdleChatAnim="Idle_Single9mm"
|
||||
IdleHeavyAnim="Idle_Single9mm"
|
||||
IdleRifleAnim="Idle_Single9mm"
|
||||
FireAnims(0)="Fire_Single9mm"
|
||||
FireAnims(1)="Fire_Single9mm"
|
||||
FireAnims(2)="Fire_Single9mm"
|
||||
FireAnims(3)="Fire_Single9mm"
|
||||
FireAltAnims(0)="Fire_Single9mm"
|
||||
FireAltAnims(1)="Fire_Single9mm"
|
||||
FireAltAnims(2)="Fire_Single9mm"
|
||||
FireAltAnims(3)="Fire_Single9mm"
|
||||
FireCrouchAnims(0)="CHFire_Single9mm"
|
||||
FireCrouchAnims(1)="CHFire_Single9mm"
|
||||
FireCrouchAnims(2)="CHFire_Single9mm"
|
||||
FireCrouchAnims(3)="CHFire_Single9mm"
|
||||
FireCrouchAltAnims(0)="CHFire_Single9mm"
|
||||
FireCrouchAltAnims(1)="CHFire_Single9mm"
|
||||
FireCrouchAltAnims(2)="CHFire_Single9mm"
|
||||
FireCrouchAltAnims(3)="CHFire_Single9mm"
|
||||
HitAnims(0)="HitF_Single9mm"
|
||||
HitAnims(1)="HitB_Single9mm"
|
||||
HitAnims(2)="HitL_Single9mm"
|
||||
HitAnims(3)="HitR_Single9mm"
|
||||
PostFireBlendStandAnim="Blend_Single9mm"
|
||||
PostFireBlendCrouchAnim="CHBlend_Single9mm"
|
||||
MeshRef="ScrnWeaponPack_A.MedicPistol_3rd"
|
||||
SplashEffect=Class'ROEffects.BulletSplashEmitter'
|
||||
LightType=LT_Pulse
|
||||
LightRadius=0.000000
|
||||
CullDistance=5000.000000
|
||||
}
|
||||
261
kf_sources/ScrnWeaponPack/Classes/MedicPistolFire.uc
Normal file
261
kf_sources/ScrnWeaponPack/Classes/MedicPistolFire.uc
Normal file
|
|
@ -0,0 +1,261 @@
|
|||
class MedicPistolFire extends KFFire;
|
||||
|
||||
var MedicPistol ScrnWeap; // avoid typecasting
|
||||
|
||||
var float PenDmgReduction; //penetration damage reduction. 1.0 - no reduction, 0 - no penetration, 0.75 - 25% reduction
|
||||
var byte MaxPenetrations; //how many enemies can penetrate a single bullet
|
||||
|
||||
var int HealAmount, HealBoost;
|
||||
|
||||
function PostBeginPlay()
|
||||
{
|
||||
super.PostBeginPlay();
|
||||
ScrnWeap = MedicPistol(Weapon);
|
||||
}
|
||||
|
||||
simulated event ModeDoFire()
|
||||
{
|
||||
if ( ScrnWeap.bFiringLastRound ) {
|
||||
FireAnim = 'FireLast';
|
||||
FireAimedAnim = 'FireLast_Iron';
|
||||
}
|
||||
else {
|
||||
FireAnim = default.FireAnim;
|
||||
FireAimedAnim = default.FireAimedAnim;
|
||||
}
|
||||
Super.ModeDoFire();
|
||||
}
|
||||
|
||||
function DoTrace(Vector Start, Rotator Dir)
|
||||
{
|
||||
local Vector X,Y,Z, End, HitLocation, HitNormal, ArcEnd;
|
||||
local Actor Other;
|
||||
local byte HitCount, PenCounter;
|
||||
local float HitDamage;
|
||||
local array<int> HitPoints;
|
||||
local KFPawn HitPawn;
|
||||
local array<Actor> IgnoreActors;
|
||||
local Pawn DamagePawn;
|
||||
local int i;
|
||||
|
||||
local KFMonster Monster;
|
||||
local bool bWasDecapitated;
|
||||
//local int OldHealth;
|
||||
|
||||
MaxRange();
|
||||
|
||||
Weapon.GetViewAxes(X, Y, Z);
|
||||
if ( Weapon.WeaponCentered() )
|
||||
{
|
||||
ArcEnd = (Instigator.Location + Weapon.EffectOffset.X * X + 1.5 * Weapon.EffectOffset.Z * Z);
|
||||
}
|
||||
else
|
||||
{
|
||||
ArcEnd = (Instigator.Location + Instigator.CalcDrawOffset(Weapon) + Weapon.EffectOffset.X * X +
|
||||
Weapon.Hand * Weapon.EffectOffset.Y * Y + Weapon.EffectOffset.Z * Z);
|
||||
}
|
||||
|
||||
X = Vector(Dir);
|
||||
End = Start + TraceRange * X;
|
||||
HitDamage = DamageMax;
|
||||
|
||||
// HitCount isn't a number of max penetration. It is just to be sure we won't stuck in infinite loop
|
||||
While( ++HitCount < 127 )
|
||||
{
|
||||
DamagePawn = none;
|
||||
Monster = none;
|
||||
|
||||
Other = Instigator.HitPointTrace(HitLocation, HitNormal, End, HitPoints, Start,, 1);
|
||||
if( Other==None )
|
||||
Break;
|
||||
else if( Other==Instigator || Other.Base == Instigator ) {
|
||||
IgnoreActors[IgnoreActors.Length] = Other;
|
||||
Other.SetCollision(false);
|
||||
Start = HitLocation;
|
||||
Continue;
|
||||
}
|
||||
else if ( ROBulletWhipAttachment(Other) != none ) {
|
||||
IgnoreActors[IgnoreActors.Length] = Other;
|
||||
Start = HitLocation;
|
||||
continue;
|
||||
}
|
||||
|
||||
if( ExtendedZCollision(Other)!=None && Other.Owner!=None )
|
||||
{
|
||||
IgnoreActors[IgnoreActors.Length] = Other;
|
||||
IgnoreActors[IgnoreActors.Length] = Other.Owner;
|
||||
Other.SetCollision(false);
|
||||
Other.Owner.SetCollision(false);
|
||||
DamagePawn = Pawn(Other.Owner);
|
||||
Monster = KFMonster(Other.Owner);
|
||||
}
|
||||
|
||||
if ( !Other.bWorldGeometry && Other!=Level )
|
||||
{
|
||||
HitPawn = KFPawn(Other);
|
||||
|
||||
if ( HitPawn != none )
|
||||
{
|
||||
if ( HitPawn.Health > 0 ) {
|
||||
MedicPistol(Instigator.Weapon).HitHealTarget(HitLocation, Rotator(-HitNormal));
|
||||
HealPawn(HitPawn);
|
||||
break;
|
||||
}
|
||||
// Hit detection debugging
|
||||
/*log("PreLaunchTrace hit "$HitPawn.PlayerReplicationInfo.PlayerName);
|
||||
HitPawn.HitStart = Start;
|
||||
HitPawn.HitEnd = End;*/
|
||||
|
||||
// Hit detection debugging
|
||||
/*if( Level.NetMode == NM_Standalone)
|
||||
HitPawn.DrawBoneLocation();*/
|
||||
|
||||
IgnoreActors[IgnoreActors.Length] = Other;
|
||||
IgnoreActors[IgnoreActors.Length] = HitPawn.AuxCollisionCylinder;
|
||||
Other.SetCollision(false);
|
||||
HitPawn.AuxCollisionCylinder.SetCollision(false);
|
||||
DamagePawn = HitPawn;
|
||||
}
|
||||
else
|
||||
{
|
||||
if( DamagePawn == none )
|
||||
DamagePawn = Pawn(Other);
|
||||
|
||||
if( KFMonster(Other)!=None )
|
||||
{
|
||||
IgnoreActors[IgnoreActors.Length] = Other;
|
||||
Other.SetCollision(false);
|
||||
Monster = KFMonster(Other);
|
||||
//OldHealth = KFMonster(Other).Health;
|
||||
}
|
||||
bWasDecapitated = Monster != none && Monster.bDecapitated;
|
||||
|
||||
// DAMAGE & HEAL
|
||||
Other.TakeDamage(int(HitDamage), Instigator, HitLocation, Momentum*X, DamageType);
|
||||
if ( Monster != none && !Monster.bDecapitated && Monster.Health > 0 ) {
|
||||
MedicPistol(Instigator.Weapon).HitHealTarget(HitLocation, Rotator(-HitNormal));
|
||||
Monster.Health += int(HitDamage * class<KFWeaponDamageType>(DamageType).default.HeadShotDamageMult);
|
||||
if ( Monster.Health > 2 * Monster.HealthMax ) {
|
||||
Monster.TakeDamage(Monster.Health * 10, Instigator, Monster.Location, vect(0,0,1), class'DamTypeMedicOvercharge' );
|
||||
}
|
||||
}
|
||||
}
|
||||
if( ++PenCounter > MaxPenetrations || DamagePawn==None )
|
||||
{
|
||||
Break;
|
||||
}
|
||||
HitDamage *= PenDmgReduction;
|
||||
Start = HitLocation;
|
||||
}
|
||||
else if ( HitScanBlockingVolume(Other)==None )
|
||||
{
|
||||
if( KFWeaponAttachment(Weapon.ThirdPersonActor)!=None )
|
||||
KFWeaponAttachment(Weapon.ThirdPersonActor).UpdateHit(Other,HitLocation,HitNormal);
|
||||
Break;
|
||||
}
|
||||
}
|
||||
|
||||
// Turn the collision back on for any actors we turned it off
|
||||
if ( IgnoreActors.Length > 0 )
|
||||
{
|
||||
for (i=0; i<IgnoreActors.Length; i++)
|
||||
{
|
||||
if ( IgnoreActors[i] != none )
|
||||
IgnoreActors[i].SetCollision(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function HealPawn(KFPawn Healed)
|
||||
{
|
||||
local KFPlayerReplicationInfo PRI;
|
||||
local SRStatsBase Stats;
|
||||
local int MedicReward;
|
||||
local float HealPotency, HealSum;
|
||||
|
||||
if ( Healed.Health <= 0 )
|
||||
return;
|
||||
|
||||
//if( Instigator != none && Healed.Health > 0 && Healed.Health < Healed.HealthMax ) {
|
||||
PRI = KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo);
|
||||
if ( PRI != none )
|
||||
Stats = SRStatsBase(PRI.SteamStatsAndAchievements);
|
||||
HealPotency = 1.0;
|
||||
|
||||
if ( PRI != none && PRI.ClientVeteranSkill != none )
|
||||
HealPotency = PRI.ClientVeteranSkill.Static.GetHealPotency(PRI);
|
||||
|
||||
MedicReward = HealAmount * HealPotency;
|
||||
HealSum = MedicReward;
|
||||
|
||||
if ( (Healed.Health + Healed.healthToGive + MedicReward) > Healed.HealthMax ) {
|
||||
MedicReward = max(0, Healed.HealthMax - (Healed.Health + Healed.healthToGive));
|
||||
}
|
||||
|
||||
if ( Healed.Controller != none )
|
||||
Healed.Controller.ShakeView(ShakeRotMag, ShakeRotRate, ShakeRotTime, ShakeOffsetMag, ShakeOffsetRate, ShakeOffsetTime);
|
||||
|
||||
if ( ScrnHumanPawn(Healed) != none )
|
||||
ScrnHumanPawn(Healed).TakeHealing(ScrnHumanPawn(Instigator), HealSum, HealPotency, KFWeapon(Instigator.Weapon));
|
||||
else
|
||||
Healed.GiveHealth(HealSum, Healed.HealthMax);
|
||||
|
||||
// instantly raise player health
|
||||
Healed.Health += int(HealBoost * HealPotency);
|
||||
if ( Healed.Health > 250 && Stats != none )
|
||||
class'ScrnAchievements'.static.ProgressAchievementByID(Stats.Rep, 'MedicPistol_250', 1);
|
||||
|
||||
if ( PRI != None && Stats != none ) {
|
||||
Stats.AddDamageHealed(MedicReward + int(HealBoost * HealPotency), false, false);
|
||||
|
||||
// Give the medic reward money as a percentage of how much of the person's health they healed
|
||||
MedicReward *= 0.6;
|
||||
|
||||
if ( class'ScrnBalance'.default.Mut.bMedicRewardFromTeam && Healed.PlayerReplicationInfo != none && Healed.PlayerReplicationInfo.Team != none ) {
|
||||
// give money from team budget
|
||||
if ( Healed.PlayerReplicationInfo.Team.Score >= MedicReward ) {
|
||||
Healed.PlayerReplicationInfo.Team.Score -= MedicReward;
|
||||
PRI.Score += MedicReward;
|
||||
}
|
||||
}
|
||||
else
|
||||
PRI.Score += MedicReward;
|
||||
|
||||
if ( KFHumanPawn(Instigator) != none )
|
||||
KFHumanPawn(Instigator).AlphaAmount = 255;
|
||||
|
||||
MedicPistol(Instigator.Weapon).ClientSuccessfulHeal(Healed.PlayerReplicationInfo);
|
||||
}
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
PenDmgReduction=0.500000
|
||||
HealAmount=20
|
||||
HealBoost=3
|
||||
FireAimedAnim="Fire_Iron"
|
||||
maxVerticalRecoilAngle=250
|
||||
maxHorizontalRecoilAngle=50
|
||||
FireSoundRef="KF_MP7Snd.Medicgun_Fire"
|
||||
StereoFireSoundRef="KF_MP7Snd.Medicgun_FireST"
|
||||
NoAmmoSoundRef="KF_PumpSGSnd.SG_DryFire"
|
||||
DamageType=Class'ScrnWeaponPack.DamTypeMedicPistol'
|
||||
DamageMax=23
|
||||
bWaitForRelease=True
|
||||
TransientSoundVolume=2.000000
|
||||
TransientSoundRadius=500.000000
|
||||
FireRate=0.250000
|
||||
AmmoClass=Class'ScrnWeaponPack.MedicPistolAmmo'
|
||||
AmmoPerFire=1
|
||||
ShakeRotMag=(X=75.000000,Y=75.000000,Z=290.000000)
|
||||
ShakeRotRate=(X=10080.000000,Y=10080.000000,Z=10000.000000)
|
||||
ShakeRotTime=3.500000
|
||||
ShakeOffsetMag=(X=6.000000,Y=1.000000,Z=8.000000)
|
||||
ShakeOffsetRate=(X=1000.000000,Y=1000.000000,Z=1000.000000)
|
||||
ShakeOffsetTime=2.500000
|
||||
BotRefireRate=0.400000
|
||||
FlashEmitterClass=Class'ROEffects.MuzzleFlash1stKar'
|
||||
aimerror=1.000000
|
||||
Spread=0.010000
|
||||
SpreadStyle=SS_Random
|
||||
}
|
||||
19
kf_sources/ScrnWeaponPack/Classes/MedicPistolLightFire.uc
Normal file
19
kf_sources/ScrnWeaponPack/Classes/MedicPistolLightFire.uc
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
class MedicPistolLightFire extends SingleALTFire;
|
||||
|
||||
/*
|
||||
simulated function ModeDoFire()
|
||||
{
|
||||
local MedicPistol W;
|
||||
|
||||
Super.ModeDoFire();
|
||||
|
||||
W = MedicPistol(Weapon);
|
||||
if ( W != none ) {
|
||||
W.ToggleLaser();
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
}
|
||||
25
kf_sources/ScrnWeaponPack/Classes/MedicPistolPickup.uc
Normal file
25
kf_sources/ScrnWeaponPack/Classes/MedicPistolPickup.uc
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
class MedicPistolPickup extends KFWeaponPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Weight=2.000000
|
||||
cost=900
|
||||
AmmoCost=42
|
||||
BuyClipSize=7
|
||||
PowerValue=20
|
||||
SpeedValue=50
|
||||
RangeValue=35
|
||||
Description="Primary fire shoots healing darts. Darts heal zeds too, but it doesn't help them much, if titanium needle breaks their skulls first. Shooting multiple dart into the same zed may cause overdose. Alternate fire switch between laser and flashlight."
|
||||
ItemName="KF2 Medic Pistol SE"
|
||||
ItemShortName="KF2 Medic Pistol SE"
|
||||
AmmoItemName="Healing Darts"
|
||||
AmmoMesh=StaticMesh'KillingFloorStatics.DualiesAmmo'
|
||||
EquipmentCategoryID=1
|
||||
InventoryType=Class'ScrnWeaponPack.MedicPistol'
|
||||
PickupMessage="You got the Medic Pistol"
|
||||
PickupSound=Sound'KF_9MMSnd.9mm_Pickup'
|
||||
PickupForce="AssaultRiflePickup"
|
||||
StaticMesh=StaticMesh'ScrnWeaponPack_SM.MedicPistol_Pickup'
|
||||
DrawScale=0.100000
|
||||
CollisionHeight=5.000000
|
||||
}
|
||||
74
kf_sources/ScrnWeaponPack/Classes/MuzzleFlash1rdSVD.uc
Normal file
74
kf_sources/ScrnWeaponPack/Classes/MuzzleFlash1rdSVD.uc
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
class MuzzleFlash1rdSVD extends ROMuzzleFlash3rd;
|
||||
|
||||
simulated function Trigger(Actor Other, Pawn EventInstigator)
|
||||
{
|
||||
Emitters[0].SpawnParticle(10);
|
||||
Emitters[1].SpawnParticle(10);
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter4
|
||||
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.500000
|
||||
MaxParticles=50
|
||||
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=5.000000,Max=10.000000))
|
||||
DrawStyle=PTDS_Brighten
|
||||
Texture=Texture'Effects_Tex.Weapons.MP3rdPmuzzle_smoke1frame'
|
||||
LifetimeRange=(Min=1.200000,Max=1.200000)
|
||||
StartVelocityRange=(Y=(Min=-30.000000,Max=30.000000))
|
||||
VelocityLossRange=(X=(Max=2.000000))
|
||||
End Object
|
||||
Emitters(0)=SpriteEmitter'ScrnWeaponPack.MuzzleFlash1rdSVD.SpriteEmitter4'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter5
|
||||
UseColorScale=True
|
||||
FadeOut=True
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
UseRandomSubdivision=True
|
||||
UseVelocityScale=True
|
||||
Acceleration=(X=200.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))
|
||||
Opacity=0.400000
|
||||
MaxParticles=50
|
||||
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=25.000000,Max=50.000000))
|
||||
DrawStyle=PTDS_Brighten
|
||||
Texture=Texture'Effects_Tex.Weapons.MP3rdPmuzzle_smoke1frame'
|
||||
LifetimeRange=(Min=1.500000,Max=3.000000)
|
||||
StartVelocityRange=(X=(Min=50.000000,Max=175.000000),Y=(Min=-30.000000,Max=30.000000),Z=(Min=20.000000,Max=50.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(1)=SpriteEmitter'ScrnWeaponPack.MuzzleFlash1rdSVD.SpriteEmitter5'
|
||||
|
||||
}
|
||||
23
kf_sources/ScrnWeaponPack/Classes/MuzzleFlash1stSVDS.uc
Normal file
23
kf_sources/ScrnWeaponPack/Classes/MuzzleFlash1stSVDS.uc
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
class MuzzleFlash1stSVDS extends ROMuzzleFlash1st;
|
||||
|
||||
simulated function Trigger(Actor Other, Pawn EventInstigator)
|
||||
{
|
||||
Emitters[0].SpawnParticle(1);
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
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(0)=SpriteEmitter'ScrnWeaponPack.MuzzleFlash1stSVDS.SpriteEmitter0'
|
||||
|
||||
}
|
||||
78
kf_sources/ScrnWeaponPack/Classes/MuzzleFlash3rdSVD.uc
Normal file
78
kf_sources/ScrnWeaponPack/Classes/MuzzleFlash3rdSVD.uc
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
class MuzzleFlash3rdSVD extends ROMuzzleFlash3rd;
|
||||
|
||||
simulated function Trigger(Actor Other, Pawn EventInstigator)
|
||||
{
|
||||
Emitters[0].SpawnParticle(10);
|
||||
Emitters[1].SpawnParticle(10);
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter4
|
||||
FadeOut=True
|
||||
FadeIn=True
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
BlendBetweenSubdivisions=True
|
||||
UseRandomSubdivision=True
|
||||
UseVelocityScale=True
|
||||
Acceleration=(Z=-700.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))
|
||||
FadeOutStartTime=0.500000
|
||||
MaxParticles=3
|
||||
StartLocationRange=(X=(Min=-10.000000,Max=10.000000))
|
||||
UseRotationFrom=PTRS_Actor
|
||||
StartSpinRange=(X=(Min=0.500000,Max=0.500000))
|
||||
SizeScale(0)=(RelativeSize=2.000000)
|
||||
SizeScale(1)=(RelativeTime=1.000000,RelativeSize=3.000000)
|
||||
StartSizeRange=(X=(Min=3.000000,Max=5.000000))
|
||||
InitialParticlesPerSecond=500.000000
|
||||
DrawStyle=PTDS_AlphaBlend
|
||||
Texture=Texture'Effects_Tex.BulletHits.watersplashcloud'
|
||||
LifetimeRange=(Min=1.500000,Max=1.500000)
|
||||
StartVelocityRange=(X=(Min=250.000000,Max=300.000000),Y=(Min=-10.000000,Max=10.000000),Z=(Min=-10.000000,Max=10.000000))
|
||||
VelocityScale(0)=(RelativeVelocity=(X=1.000000,Y=1.000000,Z=1.000000))
|
||||
VelocityScale(1)=(RelativeTime=0.205000,RelativeVelocity=(X=0.100000,Y=0.500000,Z=0.500000))
|
||||
VelocityScale(2)=(RelativeTime=1.000000,RelativeVelocity=(X=0.150000,Y=0.100000,Z=0.100000))
|
||||
End Object
|
||||
Emitters(0)=SpriteEmitter'ROEffects.WaterSplashEmitter.SpriteEmitter4'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter5
|
||||
UseColorScale=True
|
||||
FadeOut=True
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
UseRandomSubdivision=True
|
||||
UseVelocityScale=True
|
||||
Acceleration=(X=200.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))
|
||||
Opacity=0.600000
|
||||
MaxParticles=50
|
||||
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=25.000000,Max=50.000000))
|
||||
DrawStyle=PTDS_Brighten
|
||||
Texture=Texture'Effects_Tex.Weapons.MP3rdPmuzzle_smoke1frame'
|
||||
LifetimeRange=(Min=1.500000,Max=3.000000)
|
||||
StartVelocityRange=(X=(Min=50.000000,Max=175.000000),Y=(Min=-30.000000,Max=30.000000),Z=(Min=20.000000,Max=50.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(1)=SpriteEmitter'ScrnWeaponPack.MuzzleFlash3rdSVD.SpriteEmitter5'
|
||||
|
||||
}
|
||||
187
kf_sources/ScrnWeaponPack/Classes/MuzzleFlash3rdSVDS.uc
Normal file
187
kf_sources/ScrnWeaponPack/Classes/MuzzleFlash3rdSVDS.uc
Normal file
|
|
@ -0,0 +1,187 @@
|
|||
class MuzzleFlash3rdSVDS 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);
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter0
|
||||
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=10.000000,Max=10.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(0)=SpriteEmitter'ScrnWeaponPack.MuzzleFlash3rdSVDS.SpriteEmitter0'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter1
|
||||
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=10.000000,Max=10.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(1)=SpriteEmitter'ScrnWeaponPack.MuzzleFlash3rdSVDS.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.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=10.000000,Max=10.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(2)=SpriteEmitter'ScrnWeaponPack.MuzzleFlash3rdSVDS.SpriteEmitter2'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter3
|
||||
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(3)=SpriteEmitter'ScrnWeaponPack.MuzzleFlash3rdSVDS.SpriteEmitter3'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter4
|
||||
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=5.000000,Max=10.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(4)=SpriteEmitter'ScrnWeaponPack.MuzzleFlash3rdSVDS.SpriteEmitter4'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter5
|
||||
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=25.000000,Max=50.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(5)=SpriteEmitter'ScrnWeaponPack.MuzzleFlash3rdSVDS.SpriteEmitter5'
|
||||
|
||||
}
|
||||
187
kf_sources/ScrnWeaponPack/Classes/MuzzleFlash3rdVALDT.uc
Normal file
187
kf_sources/ScrnWeaponPack/Classes/MuzzleFlash3rdVALDT.uc
Normal file
|
|
@ -0,0 +1,187 @@
|
|||
class MuzzleFlash3rdVALDT 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);
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter0
|
||||
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=10.000000,Max=10.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(0)=SpriteEmitter'ScrnWeaponPack.MuzzleFlash3rdVALDT.SpriteEmitter0'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter1
|
||||
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=10.000000,Max=10.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(1)=SpriteEmitter'ScrnWeaponPack.MuzzleFlash3rdVALDT.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.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=10.000000,Max=10.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(2)=SpriteEmitter'ScrnWeaponPack.MuzzleFlash3rdVALDT.SpriteEmitter2'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter3
|
||||
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(3)=SpriteEmitter'ScrnWeaponPack.MuzzleFlash3rdVALDT.SpriteEmitter3'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter4
|
||||
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=5.000000,Max=10.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(4)=SpriteEmitter'ScrnWeaponPack.MuzzleFlash3rdVALDT.SpriteEmitter4'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter5
|
||||
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=25.000000,Max=50.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(5)=SpriteEmitter'ScrnWeaponPack.MuzzleFlash3rdVALDT.SpriteEmitter5'
|
||||
|
||||
}
|
||||
187
kf_sources/ScrnWeaponPack/Classes/MuzzleFlash3rdVSSDT.uc
Normal file
187
kf_sources/ScrnWeaponPack/Classes/MuzzleFlash3rdVSSDT.uc
Normal file
|
|
@ -0,0 +1,187 @@
|
|||
class MuzzleFlash3rdVSSDT 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);
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter0
|
||||
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=10.000000,Max=10.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(0)=SpriteEmitter'ScrnWeaponPack.MuzzleFlash3rdVSSDT.SpriteEmitter0'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter1
|
||||
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=10.000000,Max=10.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(1)=SpriteEmitter'ScrnWeaponPack.MuzzleFlash3rdVSSDT.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.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=10.000000,Max=10.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(2)=SpriteEmitter'ScrnWeaponPack.MuzzleFlash3rdVSSDT.SpriteEmitter2'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter3
|
||||
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(3)=SpriteEmitter'ScrnWeaponPack.MuzzleFlash3rdVSSDT.SpriteEmitter3'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter4
|
||||
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=5.000000,Max=10.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(4)=SpriteEmitter'ScrnWeaponPack.MuzzleFlash3rdVSSDT.SpriteEmitter4'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter5
|
||||
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=25.000000,Max=50.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(5)=SpriteEmitter'ScrnWeaponPack.MuzzleFlash3rdVSSDT.SpriteEmitter5'
|
||||
|
||||
}
|
||||
187
kf_sources/ScrnWeaponPack/Classes/MuzzleFlashAK12AR.uc
Normal file
187
kf_sources/ScrnWeaponPack/Classes/MuzzleFlashAK12AR.uc
Normal file
|
|
@ -0,0 +1,187 @@
|
|||
class MuzzleFlashAK12AR 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);
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter0
|
||||
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.350000
|
||||
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=10.000000,Max=10.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(0)=SpriteEmitter'ScrnWeaponPack.MuzzleFlashAK12AR.SpriteEmitter0'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter1
|
||||
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.300000
|
||||
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=10.000000,Max=10.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(1)=SpriteEmitter'ScrnWeaponPack.MuzzleFlashAK12AR.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.350000
|
||||
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=10.000000,Max=10.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(2)=SpriteEmitter'ScrnWeaponPack.MuzzleFlashAK12AR.SpriteEmitter2'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter3
|
||||
RespawnDeadParticles=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
Opacity=0.100000
|
||||
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(3)=SpriteEmitter'ScrnWeaponPack.MuzzleFlashAK12AR.SpriteEmitter3'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter4
|
||||
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.100000
|
||||
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=5.000000,Max=10.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(4)=SpriteEmitter'ScrnWeaponPack.MuzzleFlashAK12AR.SpriteEmitter4'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter5
|
||||
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.100000
|
||||
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=25.000000,Max=50.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(5)=SpriteEmitter'ScrnWeaponPack.MuzzleFlashAK12AR.SpriteEmitter5'
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,73 @@
|
|||
class PanzerfaustTrail_BackBurnTrail extends PanzerfaustTrail;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter0
|
||||
FadeOut=True
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
UseVelocityScale=True
|
||||
Acceleration=(X=70.000000,Z=20.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))
|
||||
FadeOutStartTime=0.950000
|
||||
MaxParticles=200
|
||||
UseRotationFrom=PTRS_Actor
|
||||
SpinsPerSecondRange=(X=(Min=-0.075000,Max=0.075000))
|
||||
SizeScale(0)=(RelativeSize=0.500000)
|
||||
SizeScale(1)=(RelativeTime=0.070000,RelativeSize=0.500000)
|
||||
SizeScale(2)=(RelativeTime=0.370000,RelativeSize=1.100000)
|
||||
SizeScale(3)=(RelativeTime=1.000000,RelativeSize=2.000000)
|
||||
StartSizeRange=(X=(Min=15.000000,Max=30.000000))
|
||||
ParticlesPerSecond=25.000000
|
||||
InitialParticlesPerSecond=25.000000
|
||||
DrawStyle=PTDS_AlphaBlend
|
||||
Texture=Texture'Effects_Tex.explosions.DSmoke_2'
|
||||
LifetimeRange=(Max=8.000000)
|
||||
StartVelocityRange=(X=(Min=45.000000,Max=45.000000),Y=(Min=-45.000000,Max=45.000000),Z=(Min=-45.000000,Max=45.000000))
|
||||
VelocityLossRange=(X=(Min=1.000000,Max=1.000000),Y=(Min=1.000000,Max=1.000000),Z=(Min=1.000000,Max=1.000000))
|
||||
VelocityScale(0)=(RelativeVelocity=(X=1.000000,Y=1.000000,Z=1.000000))
|
||||
VelocityScale(1)=(RelativeTime=0.300000,RelativeVelocity=(X=0.200000,Y=1.000000,Z=1.000000))
|
||||
VelocityScale(2)=(RelativeTime=1.000000,RelativeVelocity=(Y=0.400000,Z=0.400000))
|
||||
End Object
|
||||
Emitters(0)=SpriteEmitter'ScrnWeaponPack.PanzerfaustTrail_BackBurnTrail.SpriteEmitter0'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter1
|
||||
UseColorScale=True
|
||||
FadeOut=True
|
||||
AutoReset=True
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
UseVelocityScale=True
|
||||
Acceleration=(X=70.000000,Z=20.000000)
|
||||
ColorScale(0)=(Color=(B=60,G=60,R=60,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=117,G=117,R=117,A=255))
|
||||
FadeOutStartTime=1.200000
|
||||
MaxParticles=200
|
||||
AutoResetTimeRange=(Min=5.000000,Max=10.000000)
|
||||
UseRotationFrom=PTRS_Actor
|
||||
SpinsPerSecondRange=(X=(Min=-0.075000,Max=0.075000))
|
||||
SizeScale(0)=(RelativeSize=0.500000)
|
||||
SizeScale(1)=(RelativeTime=0.070000,RelativeSize=0.500000)
|
||||
SizeScale(2)=(RelativeTime=0.370000,RelativeSize=1.100000)
|
||||
SizeScale(3)=(RelativeTime=1.000000,RelativeSize=1.500000)
|
||||
StartSizeRange=(X=(Min=11.000000,Max=21.000000))
|
||||
ParticlesPerSecond=25.000000
|
||||
InitialParticlesPerSecond=25.000000
|
||||
DrawStyle=PTDS_AlphaBlend
|
||||
Texture=Texture'Effects_Tex.explosions.DSmoke_2'
|
||||
StartVelocityRange=(X=(Min=40.000000,Max=80.000000),Y=(Min=-45.000000,Max=45.000000),Z=(Min=-45.000000,Max=45.000000))
|
||||
VelocityLossRange=(X=(Min=2.000000,Max=2.000000),Y=(Min=2.000000,Max=2.000000),Z=(Min=2.000000,Max=2.000000))
|
||||
VelocityScale(0)=(RelativeVelocity=(X=1.000000,Y=1.000000,Z=1.000000))
|
||||
VelocityScale(1)=(RelativeTime=0.400000,RelativeVelocity=(X=0.150000,Y=1.000000,Z=1.000000))
|
||||
VelocityScale(2)=(RelativeTime=1.000000,RelativeVelocity=(Y=0.400000,Z=0.400000))
|
||||
End Object
|
||||
Emitters(1)=SpriteEmitter'ScrnWeaponPack.PanzerfaustTrail_BackBurnTrail.SpriteEmitter1'
|
||||
|
||||
}
|
||||
61
kf_sources/ScrnWeaponPack/Classes/Protecta.uc
Normal file
61
kf_sources/ScrnWeaponPack/Classes/Protecta.uc
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
class Protecta extends KFWeaponShotgun;
|
||||
|
||||
// Use alt fire to switch fire modes
|
||||
simulated function AltFire(float F)
|
||||
{
|
||||
if(ReadyToFire(0))
|
||||
{
|
||||
DoToggle();
|
||||
}
|
||||
}
|
||||
|
||||
exec function SwitchModes()
|
||||
{
|
||||
DoToggle();
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
MagCapacity=12
|
||||
ReloadRate=0.455000
|
||||
ReloadAnim="Reload"
|
||||
ReloadAnimRate=2.000000
|
||||
WeaponReloadAnim="Reload_Shotgun"
|
||||
Weight=8.000000
|
||||
bHasAimingMode=True
|
||||
IdleAimAnim="Iron_Idle"
|
||||
StandardDisplayFOV=65.000000
|
||||
bModeZeroCanDryFire=True
|
||||
SleeveNum=3
|
||||
TraderInfoTexture=Texture'ScrnWeaponPack_T.Protecta.Protecta_Trader'
|
||||
MeshRef="ScrnWeaponPack_A.Protecta_mesh"
|
||||
SkinRefs(0)="ScrnWeaponPack_T.Protecta.Protecta_tex_1_cmb"
|
||||
SkinRefs(1)="ScrnWeaponPack_T.Protecta.Protecta_tex_2_cmb"
|
||||
SkinRefs(2)="ScrnWeaponPack_T.Protecta.Protecta_tex_3_cmb"
|
||||
SkinRefs(3)="ScrnWeaponPack_T.Effects.RedColor"
|
||||
SkinRefs(4)="KF_Weapons2_Trip_T.Special.Aimpoint_sight_shdr"
|
||||
SelectSoundRef="ScrnWeaponPack_SND.Protecta.striker_select"
|
||||
HudImageRef="ScrnWeaponPack_T.Protecta.Protecta_Unselected"
|
||||
SelectedHudImageRef="ScrnWeaponPack_T.Protecta.Protecta_selected"
|
||||
PlayerIronSightFOV=70.000000
|
||||
ZoomedDisplayFOV=40.000000
|
||||
FireModeClass(0)=Class'ScrnWeaponPack.ProtectaFire'
|
||||
FireModeClass(1)=Class'KFMod.NoFire'
|
||||
PutDownAnim="PutDown"
|
||||
AIRating=0.600000
|
||||
CurrentRating=0.600000
|
||||
bShowChargingBar=True
|
||||
Description="Protecta Automatic Shotgun was outshined by AA12 in every aspect until Horzine technicians managed to load it with flares..."
|
||||
DisplayFOV=65.000000
|
||||
Priority=199
|
||||
InventoryGroup=4
|
||||
GroupOffset=9
|
||||
PickupClass=Class'ScrnWeaponPack.ProtectaPickup'
|
||||
PlayerViewOffset=(X=25.000000,Y=20.000000,Z=-7.000000)
|
||||
PlayerViewPivot=(Pitch=20,Yaw=20)
|
||||
BobDamping=5.000000
|
||||
AttachmentClass=Class'ScrnWeaponPack.ProtectaAttachment'
|
||||
IconCoords=(X1=169,Y1=172,X2=245,Y2=208)
|
||||
ItemName="Flare Shotgun 'Protecta' SE"
|
||||
TransientSoundVolume=1.250000
|
||||
}
|
||||
10
kf_sources/ScrnWeaponPack/Classes/ProtectaAmmo.uc
Normal file
10
kf_sources/ScrnWeaponPack/Classes/ProtectaAmmo.uc
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
class ProtectaAmmo extends FlareRevolverAmmo;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoPickupAmount=24
|
||||
MaxAmmo=120
|
||||
InitialAmount=36
|
||||
PickupClass=Class'ScrnWeaponPack.ProtectaAmmoPickup'
|
||||
ItemName="Liquid-Gas Shells"
|
||||
}
|
||||
8
kf_sources/ScrnWeaponPack/Classes/ProtectaAmmoPickup.uc
Normal file
8
kf_sources/ScrnWeaponPack/Classes/ProtectaAmmoPickup.uc
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
class ProtectaAmmoPickup extends KFAmmoPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoAmount=12
|
||||
InventoryType=Class'ScrnWeaponPack.ProtectaAmmo'
|
||||
PickupMessage="Liquid-Gas Shells"
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue