2020-12-13 15:01:13 +00:00
|
|
|
//=============================================================================
|
|
|
|
// KFProj_DynamiteGrenade
|
|
|
|
//=============================================================================
|
|
|
|
// Dynamite projectile class
|
|
|
|
//=============================================================================
|
|
|
|
// Killing Floor 2
|
|
|
|
// Copyright (C) 2015 Tripwire Interactive LLC
|
|
|
|
// - John "Ramm-Jaeger" Gibson and Jeff Robinson
|
|
|
|
//=============================================================================
|
|
|
|
|
|
|
|
class KFProj_DynamiteGrenade extends KFProj_Grenade
|
|
|
|
hidedropdown;
|
|
|
|
|
|
|
|
/** On Contact demo skill can turn our grenade into an insta boom device */
|
|
|
|
var bool bExplodeOnContact;
|
|
|
|
|
|
|
|
/** Ambient sound to play */
|
|
|
|
var AkEvent FuseEvent;
|
|
|
|
|
|
|
|
/** Dynamic light */
|
|
|
|
var PointLightComponent FuseLight;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Set the initial velocity and cook time
|
|
|
|
*/
|
|
|
|
simulated function PostBeginPlay()
|
|
|
|
{
|
|
|
|
PlaySoundBase( FuseEvent, true,, true );
|
|
|
|
|
|
|
|
Super.PostBeginPlay();
|
|
|
|
}
|
|
|
|
|
|
|
|
/** Overridden to turn off dynamic light */
|
|
|
|
simulated function TriggerExplosion(Vector HitLocation, Vector HitNormal, Actor HitActor)
|
|
|
|
{
|
|
|
|
super.TriggerExplosion( HitLocation, HitNormal, HitActor );
|
|
|
|
|
|
|
|
FuseLight.SetEnabled( false );
|
|
|
|
}
|
|
|
|
|
|
|
|
//==============
|
|
|
|
// Touching
|
|
|
|
simulated function ProcessTouch(Actor Other, Vector HitLocation, Vector HitNormal)
|
|
|
|
{
|
|
|
|
local Pawn ActorPawn;
|
|
|
|
|
|
|
|
if( Other != Instigator && !Other.bWorldGeometry )
|
|
|
|
{
|
|
|
|
ActorPawn = Pawn(other);
|
|
|
|
if ( ActorPawn != None )
|
|
|
|
{
|
|
|
|
// For opposing team, make the grenade explode instantly
|
|
|
|
if( ActorPawn.GetTeamNum() != GetTeamNum() )
|
|
|
|
{
|
|
|
|
if (!bHasExploded && !bHasDisintegrated)
|
|
|
|
{
|
|
|
|
GetExplodeEffectLocation( HitLocation, HitNormal, Other );
|
|
|
|
TriggerExplosion( HitLocation, HitNormal, Other );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
super.ProcessTouch( Other, HitLocation, HitNormal );
|
|
|
|
}
|
|
|
|
|
|
|
|
// for nukes && concussive force
|
|
|
|
simulated protected function PrepareExplosionTemplate()
|
|
|
|
{
|
|
|
|
class'KFPerk_Demolitionist'.static.PrepareExplosive( Instigator, self );
|
|
|
|
|
2022-11-27 21:49:25 +00:00
|
|
|
GetRadialDamageValues(ExplosionTemplate.Damage, ExplosionTemplate.DamageRadius, ExplosionTemplate.DamageFalloffExponent);
|
|
|
|
|
|
|
|
// super.PrepareExplosionTemplate();
|
2020-12-13 15:01:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
simulated protected function SetExplosionActorClass()
|
|
|
|
{
|
|
|
|
local KFPlayerReplicationInfo InstigatorPRI;
|
|
|
|
|
|
|
|
if( WorldInfo.TimeDilation < 1.f && Instigator != none )
|
|
|
|
{
|
|
|
|
InstigatorPRI = KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo);
|
|
|
|
if( InstigatorPRI != none )
|
|
|
|
{
|
|
|
|
if( InstigatorPRI.bNukeActive && class'KFPerk_Demolitionist'.static.ProjectileShouldNuke( self ) )
|
|
|
|
{
|
|
|
|
ExplosionActorClass = class'KFPerk_Demolitionist'.static.GetNukeExplosionActorClass();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
super.SetExplosionActorClass();
|
|
|
|
}
|
|
|
|
|
|
|
|
defaultproperties
|
|
|
|
{
|
|
|
|
bWarnAIWhenFired=true
|
|
|
|
|
|
|
|
Speed=1500
|
|
|
|
TossZ=400
|
|
|
|
|
|
|
|
LandedTranslationOffset=(X=-8)
|
|
|
|
|
|
|
|
FuseTime=3.0
|
|
|
|
|
|
|
|
DampenFactor=0.200000
|
|
|
|
DampenFactorParallel=0.300000
|
|
|
|
|
|
|
|
ProjFlightTemplate=ParticleSystem'WEP_Dynamite_EMIT.FX_Dynamite_Grenade_Mesh'
|
|
|
|
ExplosionActorClass=class'KFExplosionActor'
|
|
|
|
WeaponSelectTexture=Texture2D'wep_ui_dynamite_tex.UI_WeaponSelect_Dynamite'
|
|
|
|
|
|
|
|
AltExploEffects=KFImpactEffectInfo'WEP_Dynamite_ARCH.Dynamite_Explosion_Concussive_Force'
|
|
|
|
|
|
|
|
// fuse light
|
|
|
|
Begin Object Class=PointLightComponent Name=FusePointLight
|
|
|
|
LightColor=(R=255,G=200,B=63,A=255)
|
|
|
|
Brightness=1.f
|
|
|
|
Radius=300.f
|
|
|
|
FalloffExponent=10.f
|
|
|
|
CastShadows=False
|
|
|
|
CastStaticShadows=FALSE
|
|
|
|
CastDynamicShadows=False
|
|
|
|
bCastPerObjectShadows=false
|
|
|
|
bEnabled=TRUE
|
|
|
|
LightingChannels=(Indoor=TRUE,Outdoor=TRUE,bInitialized=TRUE)
|
|
|
|
Translation=(Z=6)
|
|
|
|
|
|
|
|
// light anim
|
|
|
|
AnimationType=1 // LightAnim_Flicker
|
|
|
|
AnimationFrequency=2.f
|
|
|
|
MinBrightness=0.5f
|
|
|
|
MaxBrightness=1.5f
|
|
|
|
End Object
|
|
|
|
FuseLight=FusePointLight
|
|
|
|
Components.Add(FusePointLight);
|
|
|
|
|
|
|
|
// explosion
|
|
|
|
Begin Object Class=KFGameExplosion Name=ExploTemplate0
|
|
|
|
Damage=300 //400
|
|
|
|
DamageRadius=400 //900
|
|
|
|
DamageFalloffExponent=2 //3
|
|
|
|
DamageDelay=0.f
|
|
|
|
|
|
|
|
// Damage Effects
|
|
|
|
MyDamageType=class'KFDT_Explosive_DynamiteGrenade'
|
|
|
|
KnockDownStrength=0
|
|
|
|
FractureMeshRadius=200.0
|
|
|
|
FracturePartVel=500.0
|
|
|
|
ExplosionEffects=KFImpactEffectInfo'WEP_Dynamite_ARCH.Dynamite_Explosion'
|
|
|
|
ExplosionSound=AkEvent'WW_WEP_EXP_Dynamite.Play_WEP_EXP_Dynamite_Explosion'
|
|
|
|
|
|
|
|
// Dynamic Light
|
|
|
|
ExploLight=ExplosionPointLight
|
|
|
|
ExploLightStartFadeOutTime=0.0
|
|
|
|
ExploLightFadeOutTime=0.2
|
|
|
|
|
|
|
|
// Camera Shake
|
|
|
|
CamShake=CameraShake'FX_CameraShake_Arch.Grenades.Default_Grenade'
|
|
|
|
CamShakeInnerRadius=200
|
|
|
|
CamShakeOuterRadius=900
|
|
|
|
CamShakeFalloff=1.5f
|
|
|
|
bOrientCameraShakeTowardsEpicenter=true
|
|
|
|
End Object
|
|
|
|
ExplosionTemplate=ExploTemplate0
|
|
|
|
|
|
|
|
// Temporary effect (5.14.14)
|
|
|
|
ProjDisintegrateTemplate=ParticleSystem'ZED_Siren_EMIT.FX_Siren_grenade_disable_01'
|
|
|
|
|
|
|
|
GlassShatterType=FMGS_ShatterNone
|
|
|
|
|
|
|
|
FuseEvent=AkEvent'WW_WEP_EXP_Dynamite.Play_WEP_EXP_Dynamite_Fuse_LP'
|
|
|
|
|
|
|
|
AssociatedPerkClass=class'KFPerk_Demolitionist'
|
|
|
|
}
|
|
|
|
|
|
|
|
|