rott/kf_sources/KFMod/Classes/DualiesFire.uc
2026-07-14 20:27:09 +07:00

212 lines
5.8 KiB
Ucode

//=============================================================================
// Dualies Fire
//=============================================================================
class DualiesFire extends KFFire;
var() Emitter Flash2Emitter;
var() Emitter ShellEject2Emitter; // The shell eject emitter
var() name ShellEject2BoneName; // name of the shell eject bone
var name FireAnim2, FireAimedAnim2;
var name fa;
//var bool bFlashLeft;
simulated function InitEffects()
{
// don't even spawn on server
if ( (Level.NetMode == NM_DedicatedServer) || (AIController(Instigator.Controller) != None) )
return;
if ( (FlashEmitterClass != None) && ((FlashEmitter == None) || FlashEmitter.bDeleteMe) )
{
FlashEmitter = Weapon.Spawn(FlashEmitterClass);
Weapon.AttachToBone(FlashEmitter, KFWeapon(Weapon).default.FlashBoneName);
}
if ( (FlashEmitterClass != None) && ((Flash2Emitter == None) || Flash2Emitter.bDeleteMe) )
{
Flash2Emitter = Weapon.Spawn(FlashEmitterClass);
Weapon.AttachToBone(Flash2Emitter, Dualies(Weapon).default.altFlashBoneName);
}
if ( (SmokeEmitterClass != None) && ((SmokeEmitter == None) || SmokeEmitter.bDeleteMe) )
{
SmokeEmitter = Weapon.Spawn(SmokeEmitterClass);
}
if ( (ShellEjectClass != None) && ((ShellEjectEmitter == None) || ShellEjectEmitter.bDeleteMe) )
{
ShellEjectEmitter = Weapon.Spawn(ShellEjectClass);
Weapon.AttachToBone(ShellEjectEmitter, ShellEjectBoneName);
}
if ( (ShellEjectClass != None) && ((ShellEject2Emitter == None) || ShellEject2Emitter.bDeleteMe) )
{
ShellEject2Emitter = Weapon.Spawn(ShellEjectClass);
Weapon.AttachToBone(ShellEject2Emitter, ShellEject2BoneName);
}
}
simulated function DestroyEffects()
{
super.DestroyEffects();
if (ShellEject2Emitter != None)
ShellEject2Emitter.Destroy();
if (Flash2Emitter != None)
Flash2Emitter.Destroy();
}
function DrawMuzzleFlash(Canvas Canvas)
{
super.DrawMuzzleFlash(Canvas);
if (ShellEject2Emitter != None )
{
Canvas.DrawActor( ShellEject2Emitter, false, false, Weapon.DisplayFOV );
}
}
function FlashMuzzleFlash()
{
if (Flash2Emitter == none || FlashEmitter == none)
return;
if( KFWeap.bAimingRifle )
{
if( FireAimedAnim == 'FireLeft_Iron' )
{
Flash2Emitter.Trigger(Weapon, Instigator);
if (ShellEjectEmitter != None)
{
ShellEjectEmitter.Trigger(Weapon, Instigator);
}
// bFlashLeft = true;
}
else
{
FlashEmitter.Trigger(Weapon, Instigator);
if (ShellEject2Emitter != None)
{
ShellEject2Emitter.Trigger(Weapon, Instigator);
}
// bFlashLeft = false;
}
}
else
{
if(FireAnim == 'FireLeft')
{
Flash2Emitter.Trigger(Weapon, Instigator);
if (ShellEjectEmitter != None)
{
ShellEjectEmitter.Trigger(Weapon, Instigator);
}
// bFlashLeft = true;
}
else
{
FlashEmitter.Trigger(Weapon, Instigator);
if (ShellEject2Emitter != None)
{
ShellEject2Emitter.Trigger(Weapon, Instigator);
}
// bFlashLeft = false;
}
}
}
event ModeDoFire()
{
local name bn;
bn = Dualies(Weapon).altFlashBoneName;
Dualies(Weapon).altFlashBoneName = Dualies(Weapon).FlashBoneName;
Dualies(Weapon).FlashBoneName = bn;
Super.ModeDoFire();
if( KFWeap.bAimingRifle )
{
fa = FireAimedAnim2;
FireAimedAnim2 = FireAimedAnim;
FireAimedAnim = fa;
}
else
{
fa = FireAnim2;
FireAnim2 = FireAnim;
FireAnim = fa;
}
InitEffects();
}
function StartBerserk()
{
DamageMin = default.DamageMin * 1.33;
DamageMax = default.DamageMax * 1.33;
}
function StopBerserk()
{
DamageMin = default.DamageMin;
DamageMax = default.DamageMax;
}
function StartSuperBerserk()
{
FireRate = default.FireRate * 1.5/Level.GRI.WeaponBerserk;
FireAnimRate = default.FireAnimRate * 0.667 * Level.GRI.WeaponBerserk;
DamageMin = default.DamageMin * 1.5;
DamageMax = default.DamageMax * 1.5;
// KFTODO: Not sure how to replace this
//if (AssaultRifle(Weapon) != None && AssaultRifle(Weapon).bDualMode)
// FireRate *= 0.55;
}
defaultproperties
{
FireAnim2="FireLeft"
FireAimedAnim=FireRight_Iron
FireAimedAnim2=FireLeft_Iron
DamageType=Class'KFMod.DamTypeDualies'
DamageMin=25
DamageMax=35
Momentum=10500.000000
bPawnRapidFireAnim=True
bAttachSmokeEmitter=True
TransientSoundVolume=1.8
FireAnim="FireRight"
FireLoopAnim=
FireEndAnim=
FireSound=Sound'KF_9MMSnd.9mm_Fire'
StereoFireSoundRef="KF_9MMSnd.9mm_FireST"
NoAmmoSound=Sound'KF_9MMSnd.9mm_DryFire'
FireForce="AssaultRifleFire"
FireRate=0.10000
RecoilRate=0.07
maxVerticalRecoilAngle=450
maxHorizontalRecoilAngle=50
TweenTime=0.025
AmmoClass=Class'KFMod.SingleAmmo'
AmmoPerFire=1
BotRefireRate=0.250000
FlashEmitterClass=Class'ROEffects.MuzzleFlash1stMP'
aimerror=30.000000
Spread=0.015000
SpreadStyle=SS_Random
bWaitForRelease=true
//** View shake **//
ShakeOffsetMag=(X=6.0,Y=3.0,Z=10.0)
ShakeOffsetRate=(X=1000.0,Y=1000.0,Z=1000.0)
ShakeOffsetTime=2.0
ShakeRotMag=(X=75.0,Y=75.0,Z=250.0)
ShakeRotRate=(X=10000.0,Y=10000.0,Z=10000.0)
ShakeRotTime=3.0
ShellEjectClass=class'ROEffects.KFShellEject9mm'
ShellEjectBoneName=Shell_eject_left
ShellEject2BoneName=Shell_eject_right
}