200 lines
5.7 KiB
Ucode
200 lines
5.7 KiB
Ucode
|
//=============================================================================
|
||
|
// KFProj_MolotovSplash
|
||
|
//=============================================================================
|
||
|
// Projectile class for molotov "splash" residual flames. This projectile's explosion
|
||
|
// is smaller and dimmer than KFProj_MolotoveGrenade, but it lingers.
|
||
|
//=============================================================================
|
||
|
// Killing Floor 2
|
||
|
// Copyright (C) 2015 Tripwire Interactive LLC
|
||
|
// - Jeff Robinson
|
||
|
//=============================================================================
|
||
|
|
||
|
class KFProj_MolotovSplash extends KFProjectile;
|
||
|
|
||
|
/** Blow up on impact */
|
||
|
simulated event HitWall(vector HitNormal, Actor Wall, PrimitiveComponent WallComp)
|
||
|
{
|
||
|
if( StaticMeshComponent(WallComp) != none && StaticMeshComponent(WallComp).CanBecomeDynamic() )
|
||
|
{
|
||
|
// pass through meshes that can move
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
Explode( Location, HitNormal );
|
||
|
}
|
||
|
|
||
|
/** Blow up on impact */
|
||
|
simulated function ProcessTouch( Actor Other, Vector HitLocation, Vector HitNormal )
|
||
|
{
|
||
|
if( Other.bBlockActors )
|
||
|
{
|
||
|
// don't hit pawns because we don't want to see floating flames when the victim pawn dies
|
||
|
if ( Pawn(Other) != None )
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// don't hit client-side destructible actors
|
||
|
// @todo: maybe don't hit any destructibles for the same reason we don't hit pawns (floating flames when destroyed)?
|
||
|
if( KFDestructibleActor(Other) != none && KFDestructibleActor(Other).ReplicationMode == RT_ClientSide )
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
Explode( Location, HitNormal );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/** Overridden to adjust particle system for different surface orientations (wall, ceiling)
|
||
|
* and nudge location
|
||
|
*/
|
||
|
simulated protected function PrepareExplosionActor(GameExplosionActor GEA)
|
||
|
{
|
||
|
local KFExplosion_Molotov KFEM;
|
||
|
local vector ExplosionDir;
|
||
|
|
||
|
super.PrepareExplosionActor( GEA );
|
||
|
|
||
|
// KFProjectile::Explode gives GEA a "nudged" location of 32 units, but it's too much, so use a smaller nudge
|
||
|
GEA.SetLocation( Location + vector(GEA.Rotation) * 10 );
|
||
|
|
||
|
KFEM = KFExplosion_Molotov( GEA );
|
||
|
if( KFEM != none )
|
||
|
{
|
||
|
ExplosionDir = vector( KFEM.Rotation );
|
||
|
|
||
|
if( ExplosionDir.Z < -0.95 )
|
||
|
{
|
||
|
// ceiling
|
||
|
KFEM.LoopingParticleEffect = KFEM.default.LoopingParticleEffectCeiling;
|
||
|
}
|
||
|
else if( ExplosionDir.Z < 0.05 )
|
||
|
{
|
||
|
// wall
|
||
|
KFEM.LoopingParticleEffect = KFEM.default.LoopingParticleEffectWall;
|
||
|
}
|
||
|
// else floor
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Use alternative explosion effects when Ground Fire Perk is active
|
||
|
*/
|
||
|
simulated function PostBeginPlay()
|
||
|
{
|
||
|
local KFPlayerReplicationInfo InstigatorPRI;
|
||
|
|
||
|
if( AltExploEffects != none && Instigator != none )
|
||
|
{
|
||
|
InstigatorPRI = KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo);
|
||
|
if( InstigatorPRI != none )
|
||
|
{
|
||
|
bAltExploEffects = InstigatorPRI.bSplashActive;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
bAltExploEffects = false;
|
||
|
}
|
||
|
|
||
|
super.PostBeginPlay();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Force the fire not to burn the instigator, since setting it in the default props is not working for some reason - Ramm
|
||
|
* Use the alternative FX for the Ground Fire Perk Skill - Tulio
|
||
|
*/
|
||
|
simulated protected function PrepareExplosionTemplate()
|
||
|
{
|
||
|
ExplosionTemplate.bIgnoreInstigator=true;
|
||
|
super.PrepareExplosionTemplate();
|
||
|
|
||
|
if( bAltExploEffects )
|
||
|
{
|
||
|
ExplosionTemplate.ExplosionEffects = AltExploEffects;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
defaultproperties
|
||
|
{
|
||
|
Physics=PHYS_Falling
|
||
|
|
||
|
bCollideComplex=TRUE // Ignore simple collision on StaticMeshes, and collide per poly
|
||
|
|
||
|
// network
|
||
|
bNetTemporary=False
|
||
|
bAlwaysReplicateExplosion=true
|
||
|
AlwaysRelevantDistanceSquared=6250000 // 25m
|
||
|
|
||
|
// gameplay
|
||
|
bBlockedByInstigator=false
|
||
|
GlassShatterType=FMGS_ShatterNone
|
||
|
|
||
|
// audio
|
||
|
bStopAmbientSoundOnExplode=false
|
||
|
bAutoStartAmbientSound=true
|
||
|
bAmbientSoundZedTimeOnly=false
|
||
|
|
||
|
AmbientSoundPlayEvent=AkEvent'WW_WEP_SA_Flamethrower.Play_WEP_SA_Flamethrower_Residual_Fire_Loop'
|
||
|
AmbientSoundStopEvent=AkEvent'WW_WEP_SA_Flamethrower.Stop_WEP_SA_Flamethrower_Residual_Fire_Loop'
|
||
|
|
||
|
Begin Object Class=AkComponent name=AmbientAkSoundComponent
|
||
|
bStopWhenOwnerDestroyed=true
|
||
|
bForceOcclusionUpdateInterval=true
|
||
|
OcclusionUpdateInterval=0.25;
|
||
|
End Object
|
||
|
AmbientComponent=AmbientAkSoundComponent
|
||
|
Components.Add(AmbientAkSoundComponent)
|
||
|
|
||
|
// light
|
||
|
Begin Object Class=PointLightComponent Name=FlamePointLight
|
||
|
LightColor=(R=245,G=190,B=140,A=255)
|
||
|
Brightness=2.f
|
||
|
Radius=300.f
|
||
|
FalloffExponent=10.f
|
||
|
CastShadows=False
|
||
|
CastStaticShadows=FALSE
|
||
|
CastDynamicShadows=FALSE
|
||
|
bCastPerObjectShadows=false
|
||
|
bEnabled=FALSE
|
||
|
LightingChannels=(Indoor=TRUE,Outdoor=TRUE,bInitialized=TRUE)
|
||
|
End Object
|
||
|
|
||
|
// explosion
|
||
|
Begin Object Class=KFGameExplosion Name=ExploTemplate0
|
||
|
Damage=10
|
||
|
DamageRadius=150
|
||
|
DamageFalloffExponent=1.f
|
||
|
DamageDelay=0.f
|
||
|
// Don't burn the guy that tossed it, it's just too much damage with multiple fires, its almost guaranteed to kill the guy that tossed it
|
||
|
bIgnoreInstigator=true
|
||
|
|
||
|
MomentumTransferScale=1
|
||
|
|
||
|
// Damage Effects
|
||
|
MyDamageType=class'KFDT_Fire_Ground_MolotovGrenade'
|
||
|
KnockDownStrength=0
|
||
|
FractureMeshRadius=0
|
||
|
ExplosionEffects=KFImpactEffectInfo'wep_molotov_arch.Molotov_GroundFire'
|
||
|
|
||
|
bDirectionalExplosion=true
|
||
|
|
||
|
// Camera Shake
|
||
|
CamShake=none
|
||
|
|
||
|
// Dynamic Light
|
||
|
ExploLight=FlamePointLight
|
||
|
ExploLightStartFadeOutTime=4.2
|
||
|
ExploLightFadeOutTime=0.3
|
||
|
End Object
|
||
|
ExplosionTemplate=ExploTemplate0
|
||
|
|
||
|
ProjFlightTemplate=ParticleSystem'WEP_3P_Molotov_EMIT.FX_Molotov_Grenade_Spread_01'
|
||
|
ExplosionActorClass=class'KFExplosion_Molotov'
|
||
|
|
||
|
AssociatedPerkClass=class'KFPerk_Firebug'
|
||
|
|
||
|
// Ground Fire Perk Skill Alternative FX
|
||
|
AltExploEffects=KFImpactEffectInfo'WEP_Flamethrower_ARCH.GroundFire_Splash_Impacts'
|
||
|
}
|