//============================================================================= // KFSM_Zed_Taunt //============================================================================= // Play a taunt animation sequence //============================================================================= // Killing Floor 2 // Copyright (C) 2015 Tripwire Interactive LLC //============================================================================= class KFSM_Zed_Taunt extends KFSM_PlaySingleAnim; enum ETauntType { TAUNT_Standard, TAUNT_EnemyKilled, TAUNT_Enraged, }; var byte CurrentTauntType; /** Generic flags for player controlled zeds (versus) */ static function byte PackFlagsBase(KFPawn P) { return PackSMFlags(P, TAUNT_Standard); } static function byte PackSMFlags( KFPawn P, byte InTauntType ) { local byte Variant; local KFPawnAnimInfo PAI; PAI = P.PawnAnimInfo; Variant = 255; // Get the number of taunt anims from the AnimInfo class switch ( InTauntType ) { case TAUNT_Enraged: if( PAI.TauntEnragedAnims.Length > 0 ) { Variant = Rand(PAI.TauntEnragedAnims.Length); } break; case TAUNT_EnemyKilled: if( PAI.TauntKillAnims.Length > 0 ) { Variant = Rand(PAI.TauntKillAnims.Length); } break; case TAUNT_Standard: if( PAI.TauntAnims.Length > 0 ) { Variant = Rand(PAI.TauntAnims.Length); } break; } if ( Variant != 255 ) { return InTauntType + (Variant << 4); } else { return 255; } } function PlayAnimation() { local byte Variant; CurrentTauntType = KFPOwner.SpecialMoveFlags & 15; Variant = KFPOwner.SpecialMoveFlags >> 4; switch ( CurrentTauntType ) { case TAUNT_Enraged: AnimName = KFPOwner.PawnAnimInfo.TauntEnragedAnims[Variant]; break; case TAUNT_EnemyKilled: AnimName = KFPOwner.PawnAnimInfo.TauntKillAnims[Variant]; break; default: AnimName = KFPOwner.PawnAnimInfo.TauntAnims[Variant]; break; } `AILog_Ext( GetFuncName()$" "$self$" chose taunt animation "$AnimName, 'AIController', AIOwner ); //KFAIController(PawnOwner.Controller).msg( GetFuncName()$": "$AnimName$" BlendIn: "$BlendInTime$" BlendOut: "$BlendOutTime ); PlaySpecialMoveAnim( AnimName, AnimStance, BlendInTime, BlendOutTime, 1.f ); } function SpecialMoveEnded(Name PrevMove, Name NextMove) { // abort animation if something ended the taunt early if ( KFPOwner.BodyStanceNodes[AnimStance].bIsPlayingCustomAnim ) { KFPOwner.StopBodyAnim(AnimStance, 0.2); } if( AIOwner != none ) { AIOwner.AIZeroMovementVariables(); } Super.SpecialMoveEnded(PrevMove, NextMove); } DefaultProperties { // --------------------------------------------- // SpecialMove Handle=KFSM_Taunt bDisableMovement=true bDisablesWeaponFiring=true }