//============================================================================= // KFSM_PlayerCrawler_Suicide //============================================================================= // Play a suicide attack animation sequence //============================================================================= // Killing Floor 2 // Copyright (C) 2016 Tripwire Interactive LLC //============================================================================= class KFSM_PlayerCrawler_Suicide extends KFSM_PlaySingleAnim; /** Explosion template for suicide gas attack */ var KFGameExplosion SuicideGasExplosionTemplate; /** Damagetype used on owner pawn when exploding */ var class SuicideDamageType; protected function bool InternalCanDoSpecialMove() { if( KFPOwner.WorldInfo.GRI.bMatchIsOver || KFGameReplicationInfoVersus(KFPOwner.WorldInfo.GRI).bRoundIsOver ) { return false; } if( KFPOwner.IsHumanControlled() ) { return KFPOwner.IsAliveAndWell(); } return true; } simulated function SpecialMoveEnded( name PrevMove, name NextMove ) { //if( !bPendingStopFire ) //{ TriggerExplosion( KFPOwner, default.SuicideGasExplosionTemplate ); //} super.SpecialMoveEnded( PrevMove, NextMove ); } /** Called when crawler suicides */ static function TriggerExplosion( KFPawn CrawlerOwner, KFGameExplosion ExplosionTemplate, optional bool bForceExplosion ) { local KFExplosion_PlayerCrawlerSuicide ExploActor; local KFPawn_ZedCrawler_Versus CrawlerOwnerV; // Only living crawlers can explode if( CrawlerOwner != none && (!CrawlerOwner.bPlayedDeath || bForceExplosion) ) { // Cache controller CrawlerOwnerV = KFPawn_ZedCrawler_Versus( CrawlerOwner ); if( CrawlerOwnerV != none ) { KFPawn_ZedCrawler_Versus(CrawlerOwner).OldController = CrawlerOwner.Controller; } // Explode using the given template ExploActor = CrawlerOwner.Spawn( class'KFExplosion_PlayerCrawlerSuicide', CrawlerOwner,, CrawlerOwner.Location, rotator(vect(0,0,1)) ); if( ExploActor != none ) { ExploActor.InstigatorController = CrawlerOwner.Controller; ExploActor.Instigator = CrawlerOwner; ExploActor.Explode( ExplosionTemplate ); } // Make sure we're dead! if( CrawlerOwner.Role == ROLE_Authority && !CrawlerOwner.bPlayedDeath && !bForceExplosion ) { CrawlerOwner.TakeRadiusDamage( none, 10000, default.SuicideGasExplosionTemplate.DamageRadius, default.SuicideDamageType, 1, CrawlerOwner.Location, true, none ); } } } /** Interrupts the special move if the player has released the button */ /*function SpecialMoveFlagsUpdated() { if( !KFPOwner.IsLocallyControlled() && KFPOwner.SpecialMoveFlags == FLAG_SpecialMoveButtonReleased ) { bPendingStopFire = true; bCanBeInterrupted = true; // End the special move on the server if( KFPOwner.Role == ROLE_Authority ) { // Wait 2 frames for the pending stopfire flag to propagate KFPOwner.SetTimer( KFPOwner.WorldInfo.DeltaSeconds*2.f, false, nameOf(KFPOwner.EndSpecialMove) ); } } else { super.SpecialMoveFlagsUpdated(); } }*/ /** Interrupt the move if the button was released */ /*function SpecialMoveButtonReleased() { bPendingStopFire = true; if( KFPOwner.Role < ROLE_Authority && KFPOwner.IsLocallyControlled() ) { KFPOwner.ServerDoSpecialMove( KFPOwner.SpecialMove, true,, FLAG_SpecialMoveButtonReleased ); } KFPOwner.EndSpecialMove(); }*/ defaultproperties { // --------------------------------------------- // SpecialMove Handle=KFSM_PlayerCrawler_Suicide bPawnRotationLocked=true bShouldDeferToPostTick=true // --------------------------------------------- // Animations AnimName=Player_Suicide AnimStance=EAS_FullBody bUseRootMotion=true /** Suicide explosion point light */ /*Begin Object Class=PointLightComponent Name=ExplosionPointLight LightColor=(R=200,G=200,B=0,A=255) Brightness=4.f Radius=500.f FalloffExponent=10.f CastShadows=False CastStaticShadows=FALSE CastDynamicShadows=True bEnabled=FALSE LightingChannels=(Indoor=TRUE,Outdoor=TRUE,bInitialized=TRUE) End Object*/ /** Used for suicide gas AOE attack "explosion" template */ Begin Object Class=KFGameExplosion Name=ExploTemplate1 Damage=10 //10 DamageRadius=450 //600 DamageFalloffExponent=0.f DamageDelay=0.f MyDamageType=class'KFDT_Toxic_PlayerCrawlerSuicide' // Damage Effects KnockDownStrength=0 KnockDownRadius=0 FractureMeshRadius=0 FracturePartVel=0 ExplosionEffects=KFImpactEffectInfo'ZED_Crawler_ARCH.ToxicGasAoE_Explosion' ExplosionSound=AkEvent'WW_WEP_EXP_Dynamite.Play_WEP_EXP_Dynamite_Explosion' MomentumTransferScale=100 // Dynamic Light ExploLight=none //ExploLight=ExplosionPointLight //ExploLightStartFadeOutTime=7.0 //ExploLightFadeOutTime=1.0 //ExploLightFlickerIntensity=5.f //ExploLightFlickerInterpSpeed=15.f // Camera Shake CamShake=CameraShake'FX_CameraShake_Arch.Grenades.Default_Grenade' CamShakeInnerRadius=450 CamShakeOuterRadius=900 CamShakeFalloff=1.f bOrientCameraShakeTowardsEpicenter=true End Object SuicideGasExplosionTemplate=ExploTemplate1 SuicideDamageType=class'KFDT_Explosive_CrawlerSuicide' }