104 lines
3.4 KiB
Ucode
104 lines
3.4 KiB
Ucode
//=============================================================================
|
|
// Stun Nade
|
|
//=============================================================================
|
|
class StunProj extends Grenade;
|
|
|
|
var() vector RotMag; // how far to rot view
|
|
var() vector RotRate; // how fast to rot view
|
|
var() float RotTime; // how much time to rot the instigator's view
|
|
var() vector OffsetMag; // max view offset vertically
|
|
var() vector OffsetRate; // how fast to offset view vertically
|
|
var() float OffsetTime; // how much time to offset view
|
|
|
|
#exec OBJ LOAD FILE=PatchSounds.uax
|
|
|
|
simulated function Explode(vector HitLocation, vector HitNormal)
|
|
{
|
|
local Controller C;
|
|
local PlayerController LocalPlayer;
|
|
|
|
BlowUp(HitLocation);
|
|
PlaySound(sound'PatchSounds.StunNadeBoomSound',,100.5*TransientSoundVolume);
|
|
if ( EffectIsRelevant(Location,false) )
|
|
{
|
|
Spawn(class'KFmod.KFMiniExplosion',,, HitLocation, rotator(vect(0,0,1)));
|
|
Spawn(ExplosionDecal,self,,HitLocation, rotator(-HitNormal));
|
|
}
|
|
Destroy();
|
|
|
|
// Shake nearby players screens
|
|
|
|
LocalPlayer = Level.GetLocalPlayerController();
|
|
if ( (LocalPlayer != None) && (VSize(Location - LocalPlayer.ViewTarget.Location) < DamageRadius) )
|
|
LocalPlayer.ShakeView(RotMag, RotRate, RotTime, OffsetMag, OffsetRate, OffsetTime);
|
|
|
|
for ( C=Level.ControllerList; C!=None; C=C.NextController )
|
|
if ( (PlayerController(C) != None) && (C != LocalPlayer)
|
|
&& (VSize(Location - PlayerController(C).ViewTarget.Location) < DamageRadius) )
|
|
C.ShakeView(RotMag, RotRate, RotTime, OffsetMag, OffsetRate, OffsetTime);
|
|
}
|
|
|
|
simulated function Destroyed()
|
|
{
|
|
if ( Trail == None )
|
|
Trail.mRegen = false; // stop the emitter from regenerating
|
|
Super.Destroyed();
|
|
}
|
|
|
|
|
|
simulated function PostBeginPlay()
|
|
{
|
|
local PlayerController PC;
|
|
|
|
Super.PostBeginPlay();
|
|
|
|
if ( Level.NetMode != NM_DedicatedServer)
|
|
{
|
|
PC = Level.GetLocalPlayerController();
|
|
if ( (PC.ViewTarget != None) && VSize(PC.ViewTarget.Location - Location) < 5500 )
|
|
}
|
|
|
|
if ( Role == ROLE_Authority )
|
|
{
|
|
Velocity = Speed * Vector(Rotation);
|
|
RandSpin(25000);
|
|
bCanHitOwner = false;
|
|
if (Instigator.HeadVolume.bWaterVolume)
|
|
{
|
|
bHitWater = true;
|
|
Velocity = 0.6*Velocity;
|
|
}
|
|
}
|
|
}
|
|
|
|
simulated function ProcessTouch( actor Other, vector HitLocation )
|
|
{
|
|
// if ( !Other.bWorldGeometry && (Other != Instigator || bCanHitOwner) )
|
|
//{
|
|
// Explode(HitLocation, Normal(HitLocation-Other.Location));
|
|
// }
|
|
}
|
|
|
|
defaultproperties
|
|
{
|
|
RotMag=(X=100.000000,Y=100.000000,Z=100.000000)
|
|
RotRate=(X=500.000000,Y=500.000000,Z=500.000000)
|
|
RotTime=3.000000
|
|
OffsetMag=(X=40.000000,Y=40.000000,Z=40.000000)
|
|
OffsetRate=(X=500.000000,Y=500.000000,Z=500.000000)
|
|
OffsetTime=3.000000
|
|
DampenFactor=0.250000
|
|
DampenFactorParallel=0.400000
|
|
HitEffectClass=None
|
|
Speed=160.000000
|
|
MaxSpeed=350.000000
|
|
Damage=25.000000
|
|
DamageRadius=350.000000
|
|
MomentumTransfer=25000.000000
|
|
MyDamageType=Class'KFMod.DamTypeStunNade'
|
|
StaticMesh=StaticMesh'PatchStatics.StunProjectile'
|
|
DrawScale=0.400000
|
|
AmbientGlow=0
|
|
bUnlit=False
|
|
}
|