class SchlonzRocketMultiFire extends RocketMultiFire; function PlayFiring() { // auto fire if loaded last rocket if( Weapon.FireMode[0].bIsFiring ) { if (Load > 1.0) FireAnim = 'AltFire'; else FireAnim = 'Fire'; Super.PlayFiring(); RocketLauncher(Weapon).PlayFiring((Load == 6.0)); } else if( Weapon.FireMode[1].bIsFiring ) { FireAnim = 'Fire'; Super.PlayFiring(); RocketLauncher(Weapon).PlayFiring((Load >= 1)); } Weapon.OutOfAmmo(); } function DoFireEffect() { local Vector StartProj, StartTrace, X,Y,Z; local Rotator Aim, MyAim; local Vector HitLocation, HitNormal,FireLocation; local Actor Other; local int p, SpawnCount; local SchlonzRocket FiredRockets[50]; local float Angle, RocketRad, RocketAngle; local float PlayerSize; if( Instigator == None ) return; Instigator.MakeNoise(1.0); Weapon.GetViewAxes(X,Y,Z); StartTrace = Instigator.Location + Instigator.EyePosition();// + X*Instigator.CollisionRadius; StartProj = StartTrace + X*ProjSpawnOffset.X + Y*ProjSpawnOffset.Y + Z*ProjSpawnOffset.Z; // check if projectile would spawn through a wall and adjust start location accordingly Other = Trace(HitLocation, HitNormal, StartProj, StartTrace, false); if (Other != None) { StartProj = HitLocation; } // adjust rocket size (huarg huarg) PlayerSize = 1; if( SchlonzXPawnBot( Instigator ) != None ) PlayerSize = SchlonzXPawnBot( Instigator ).PlayerSize; Aim = AdjustAim(StartProj, AimError); MyAim = Aim; SpawnCount = Max(1, int(Load)); SpawnCount *= 6; RocketRad = 7; RocketAngle = 0.010484 * (100-SpawnCount); Angle = -RocketAngle * (SpawnCount / 2); for ( p=0; p 0.0 && Load >= Weapon.Ammo[ThisModeNum].AmmoAmount && !bNowWaiting) { bIsFiring = false; } if (Load == 1.0 && HoldTime >= FireRate) { if (Instigator.IsLocallyControlled()) RocketLauncher(Weapon).PlayLoad(false); Load = Load + 1.0; } else if (Load == 2.0 && HoldTime >= FireRate*2.0) { if (Instigator.IsLocallyControlled()) RocketLauncher(Weapon).PlayLoad(false); Load = Load + 1.0; } else if (Load == 3.0 && HoldTime >= FireRate*3.0) { if (Instigator.IsLocallyControlled()) RocketLauncher(Weapon).PlayLoad(false); Load = Load + 1.0; } else if (Load == 4.0 && HoldTime >= FireRate*4.0) { if (Instigator.IsLocallyControlled()) RocketLauncher(Weapon).PlayLoad(false); Load = Load + 1.0; } else if (Load == 5.0 && HoldTime >= FireRate*5.0) { Load = Load + 1.0; } } function Projectile SpawnProjectile(Vector Start, Rotator Dir) { local Projectile p; p = None; if( Weapon != None ) { if( SchlonzRocketLauncher(Weapon) != None ) { p = SchlonzRocketLauncher(Weapon).SpawnProjectile(Start, Dir); p.Damage *= DamageAtten; } } return p; } defaultproperties { FireRate=0.500000 MaxHoldTime=6.000000 ProjectileClass=Class'SchlonzUT.SchlonzRocket' }