// This is the Shrapnel projectile used with High explosives like the landmines and the Frag grenade. class KFShrapnel extends FlakChunk; var () float VelocityDecayAmount; // How much speed does the shrapnel lose in one second var float MinSpeed; var float GlowTime; var float SpawnTime; simulated function PostBeginPlay() { local float r; if ( Level.NetMode != NM_DedicatedServer ) { if ( !PhysicsVolume.bWaterVolume ) { Trail = Spawn(class'KFTracer',self); Trail.Lifespan = GlowTime; } } Velocity = Vector(Rotation) * (Speed); if (PhysicsVolume.bWaterVolume) Velocity *= 0.65; r = FRand(); if (r > 0.75) Bounces = 2; else if (r > 0.25) Bounces = 1; else Bounces = 0; SetRotation(RotRand()); SpawnTime=level.TimeSeconds; super(projectile).PostBeginPlay(); } function Tick( float DeltaTime ) { local Vector NewVelocity; //, OriginalVelocity; /* OriginalVelocity = Velocity; NewVelocity = Velocity; NewVelocity.X /= VelocityDecayAmount; // -984 NewVelocity.Y /= VelocityDecayAmount; // -6.7 //if (Velocity.Z > (OriginalVelocity.Z * 5)) // 2298 NewVelocity.Z /= (-VelocityDecayAmount * 1.5); Velocity = NewVelocity; VelocityDecayAmount *= 1.5; */ AmbientGlow=default.AmbientGlow* FClamp((GlowTime-(level.timeseconds-spawntime))/GlowTime, 0,1); NewVelocity = Velocity; // dirty hack to prevent drag overwhelming gravity if(vsize(velocity) > MinSpeed) //vsize(PhysicsVolume.Gravity*0.5)) { NewVelocity -= (Normal(Velocity)*VelocityDecayAmount*deltaTime); NewVelocity += PhysicsVolume.Gravity*0.5*deltaTime; } else { NewVelocity = Normal(Velocity)*MinSpeed; Disable('Tick'); AmbientGlow = 0; } Velocity = NewVelocity; } defaultproperties { VelocityDecayAmount=3500.000000 MinSpeed=300.000000 GlowTime=0.800000 Speed=3500.000000 MaxSpeed=4000.000000 Damage=25.000000 MyDamageType=Class'KFMod.DamTypeFrag' DrawScale=5.000000 AmbientGlow=40 }