244 lines
6.8 KiB
Ucode
244 lines
6.8 KiB
Ucode
//=============================================================================
|
|
// Winchester Fire
|
|
//=============================================================================
|
|
class WinchesterFire extends KFFire;
|
|
|
|
// KFTODO - Slomo compensation R&D, finish later if I have time - Ramm
|
|
//var() bool bDoSlomoCompensation;
|
|
//
|
|
//var bool bWasNormal;
|
|
//
|
|
//event ModeTick(float dt)
|
|
//{
|
|
// local name anim;
|
|
// local float frame, rate;
|
|
// local float TimeLeft;
|
|
//
|
|
// if( Weapon.Level.TimeDilation != 1.1 )
|
|
// {
|
|
// if( bWasNormal )
|
|
// {
|
|
// FireRate = default.FireRate * ((Weapon.Level.TimeDilation )/1.1);
|
|
// TweenTime = default.TweenTime * ((Weapon.Level.TimeDilation )/1.1);
|
|
// log("default.FireRate = "$default.FireRate$" FireRate = "$FireRate$" Dilation Factor "$((Weapon.Level.TimeDilation * 2.0)/1.1));
|
|
// //FireRate = default.FireRate/Rec * (Weapon.Level.TimeDilation/1.1);
|
|
// FireAnimRate = default.FireAnimRate/ ((Weapon.Level.TimeDilation )/1.1);
|
|
//
|
|
//
|
|
// Weapon.GetAnimParams(0, anim, frame, rate);
|
|
//
|
|
// if( Anim == FireAnim )
|
|
// {
|
|
// Weapon.PlayAnim(FireAnim, FireAnimRate, /*TweenTime*/);
|
|
// Weapon.SetAnimFrame( frame );
|
|
// }
|
|
//
|
|
// TimeLeft = NextFireTime - (Level.TimeSeconds - LastFireTime);
|
|
// NextFireTime = TimeLeft * ((Weapon.Level.TimeDilation /** 1.75*/)/1.1);
|
|
// }
|
|
//
|
|
// bWasNormal = false;
|
|
// }
|
|
// else
|
|
// {
|
|
// bWasNormal = true;
|
|
// }
|
|
//
|
|
//
|
|
//}
|
|
|
|
// KFTODO - Slomo compensation R&D, finish later if I have time - Ramm
|
|
//function Timer()
|
|
//{
|
|
// if( Weapon.Level.TimeDilation == 1.1 )
|
|
// {
|
|
// KFGameType(Level.Game).DramaticEvent(1.0);
|
|
// }
|
|
//}
|
|
|
|
// Overridden to support interrupting the reload
|
|
simulated function bool AllowFire()
|
|
{
|
|
if( KFWeapon(Weapon).bIsReloading && KFWeapon(Weapon).MagAmmoRemaining < 2)
|
|
return false;
|
|
|
|
if(KFPawn(Instigator).SecondaryItem!=none)
|
|
return false;
|
|
if( KFPawn(Instigator).bThrowingNade )
|
|
return false;
|
|
|
|
if( Level.TimeSeconds - LastClickTime>FireRate )
|
|
{
|
|
LastClickTime = Level.TimeSeconds;
|
|
}
|
|
|
|
if( KFWeaponShotgun(Weapon).MagAmmoRemaining<1 )
|
|
{
|
|
return false;
|
|
}
|
|
|
|
return super(WeaponFire).AllowFire();
|
|
}
|
|
|
|
event ModeDoFire()
|
|
{
|
|
local float Rec;
|
|
|
|
if (!AllowFire())
|
|
return;
|
|
|
|
if( Instigator==None || Instigator.Controller==none )
|
|
return;
|
|
|
|
Rec = GetFireSpeed();
|
|
|
|
// KFTODO - Slomo compensation R&D, finish later if I have time - Ramm
|
|
// if( bDoSlomoCompensation && Weapon.Level.TimeDilation != 1.1 )
|
|
// {
|
|
// FireRate = default.FireRate * ((Weapon.Level.TimeDilation /** 1.75*/)/1.1);
|
|
// TweenTime = default.TweenTime * ((Weapon.Level.TimeDilation /** 1.75*/)/1.1);
|
|
// log("default.FireRate = "$default.FireRate$" FireRate = "$FireRate$" Dilation Factor "$((Weapon.Level.TimeDilation * 2.0)/1.1));
|
|
// //FireRate = default.FireRate/Rec * (Weapon.Level.TimeDilation/1.1);
|
|
// FireAnimRate = default.FireAnimRate*Rec / ((Weapon.Level.TimeDilation /** 1.75*/)/1.1);
|
|
// //ReloadAnimRate = default.ReloadAnimRate*Rec / ((Weapon.Level.TimeDilation * 2.0)/1.1);
|
|
// }
|
|
// else
|
|
// {
|
|
FireRate = default.FireRate/Rec;
|
|
FireAnimRate = default.FireAnimRate;
|
|
ReloadAnimRate = default.ReloadAnimRate*Rec;
|
|
// }
|
|
|
|
Rec = 1;
|
|
|
|
LastFireTime = Level.TimeSeconds;
|
|
|
|
if ( KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo) != none && KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo).ClientVeteranSkill != none )
|
|
{
|
|
Spread *= KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo).ClientVeteranSkill.Static.ModifyRecoilSpread(KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo), self, Rec);
|
|
}
|
|
|
|
|
|
if (MaxHoldTime > 0.0)
|
|
HoldTime = FMin(HoldTime, MaxHoldTime);
|
|
|
|
// server
|
|
if (Weapon.Role == ROLE_Authority)
|
|
{
|
|
Weapon.ConsumeAmmo(ThisModeNum, Load);
|
|
DoFireEffect();
|
|
HoldTime = 0; // if bot decides to stop firing, HoldTime must be reset first
|
|
if ( (Instigator == None) || (Instigator.Controller == None) )
|
|
return;
|
|
|
|
if ( AIController(Instigator.Controller) != None )
|
|
AIController(Instigator.Controller).WeaponFireAgain(BotRefireRate, true);
|
|
|
|
Instigator.DeactivateSpawnProtection();
|
|
}
|
|
|
|
// client
|
|
if (Instigator.IsLocallyControlled())
|
|
{
|
|
ShakeView();
|
|
PlayFiring();
|
|
FlashMuzzleFlash();
|
|
StartMuzzleSmoke();
|
|
}
|
|
else // server
|
|
{
|
|
ServerPlayFiring();
|
|
}
|
|
|
|
Weapon.IncrementFlashCount(ThisModeNum);
|
|
|
|
// set the next firing time. must be careful here so client and server do not get out of sync
|
|
if (bFireOnRelease)
|
|
{
|
|
if (bIsFiring)
|
|
NextFireTime += MaxHoldTime + FireRate;
|
|
else NextFireTime = Level.TimeSeconds + FireRate;
|
|
}
|
|
else
|
|
{
|
|
NextFireTime += FireRate;
|
|
NextFireTime = FMax(NextFireTime, Level.TimeSeconds);
|
|
}
|
|
|
|
Load = AmmoPerFire;
|
|
HoldTime = 0;
|
|
|
|
if (Instigator.PendingWeapon != Weapon && Instigator.PendingWeapon != None)
|
|
{
|
|
bIsFiring = false;
|
|
Weapon.PutDown();
|
|
}
|
|
|
|
if (Weapon.Owner != none && AllowFire() && Weapon.Owner.Physics != PHYS_Falling)
|
|
{
|
|
if (FireRate > 0.25)
|
|
{
|
|
Weapon.Owner.Velocity.x *= 0.1;
|
|
Weapon.Owner.Velocity.y *= 0.1;
|
|
}
|
|
else
|
|
{
|
|
Weapon.Owner.Velocity.x *= 0.5;
|
|
Weapon.Owner.Velocity.y *= 0.5;
|
|
}
|
|
}
|
|
|
|
// client
|
|
if (Instigator.IsLocallyControlled())
|
|
{
|
|
if( bDoClientRagdollShotFX && Weapon.Level.NetMode == NM_Client &&
|
|
Weapon.Level.TimeDilation != Weapon.Level.default.TimeDilation )
|
|
{
|
|
DoClientOnlyFireEffect();
|
|
}
|
|
HandleRecoil(1.0);
|
|
}
|
|
|
|
// KFTODO - Slomo compensation R&D, finish later if I have time - Ramm
|
|
//SetTimer(0.2,False);
|
|
}
|
|
|
|
defaultproperties
|
|
{
|
|
DamageType=Class'KFMod.DamTypeWinchester'
|
|
DamageMin=110 // 150 Original // 85 Deagle
|
|
DamageMax=140 // 180 Original // 105 Deagle
|
|
Momentum=18000.000000
|
|
bPawnRapidFireAnim=True
|
|
bModeExclusive=False
|
|
bAttachSmokeEmitter=True
|
|
TransientSoundVolume=1.8
|
|
FireLoopAnim=
|
|
FireEndAnim=
|
|
FireSound=Sound'KF_RifleSnd.Rifle_Fire'
|
|
StereoFireSoundRef="KF_RifleSnd.Rifle_FireST"
|
|
NoAmmoSound=Sound'KF_RifleSnd.Rifle_DryFire'
|
|
FireForce="ShockRifleFire"
|
|
FireRate=0.900000
|
|
RecoilRate=0.1
|
|
AmmoClass=Class'KFMod.WinchesterAmmo'
|
|
AmmoPerFire=1
|
|
FireAimedAnim=AimFire
|
|
|
|
BotRefireRate=0.650000
|
|
FlashEmitterClass=Class'ROEffects.MuzzleFlash1stKar'
|
|
aimerror=0.000000
|
|
Spread=0.007
|
|
|
|
maxVerticalRecoilAngle=800
|
|
maxHorizontalRecoilAngle=250
|
|
bWaitForRelease=true
|
|
//** View shake **//
|
|
ShakeOffsetMag=(X=10.0,Y=3.0,Z=12.0)
|
|
ShakeOffsetRate=(X=1000.0,Y=1000.0,Z=1000.0)
|
|
ShakeOffsetTime=2.0
|
|
ShakeRotMag=(X=100.0,Y=100.0,Z=500.0)
|
|
ShakeRotRate=(X=10000.0,Y=10000.0,Z=10000.0)
|
|
ShakeRotTime=2.0
|
|
}
|