class MeanZombieFleshPound extends NiceZombieFleshPound; #exec OBJ LOAD FILE=MeanZedSkins.utx state RageCharging { Ignores StartChargingFP; function bool CanGetOutOfWay() { return false; } // Don't override speed in this state function bool CanSpeedAdjust() { return false; } function BeginState() { bChargingPlayer = true; if( Level.NetMode!=NM_DedicatedServer ) ClientChargingAnims(); RageEndTime = (Level.TimeSeconds + 15) + (FRand() * 18); NetUpdateTime = Level.TimeSeconds - 1; } function EndState() { bChargingPlayer = false; bFrustrated = false; if(Controller != none) NiceZombieFleshPoundController(Controller).RageFrustrationTimer = 0; if( Level.NetMode!=NM_DedicatedServer ) ClientChargingAnims(); NetUpdateTime = Level.TimeSeconds - 1; } simulated function UpdateGroundSpeed() { super(NiceMonster).UpdateGroundSpeed(); if (!bShotAnim) { groundSpeed *= 2.3; } } function Tick( float Delta ) { // Keep the flesh pound moving toward its target when attacking if( Role == ROLE_Authority && bShotAnim) { if( LookTarget!=none ) { Acceleration = AccelRate * Normal(LookTarget.Location - Location); } } global.Tick(Delta); } function Bump( Actor Other ) { local float RageBumpDamage; local KFMonster KFMonst; KFMonst = KFMonster(Other); // Hurt/Kill enemies that we run into while raging if( !bShotAnim && KFMonst!=none && NiceZombieFleshPound(Other)==none && Pawn(Other).Health>0 ) { // Random chance of doing obliteration damage if( FRand() < 0.4 ) { RageBumpDamage = 501; } else { RageBumpDamage = 450; } RageBumpDamage *= KFMonst.PoundRageBumpDamScale; Other.TakeDamage(RageBumpDamage, self, Other.Location, Velocity * Other.Mass, class'NiceDamTypePoundCrushed'); } else Global.Bump(Other); } // If fleshie hits his target on a charge, then he should settle down for abit. function bool MeleeDamageTarget(int hitdamage, vector pushdir) { local bool RetVal,bWasEnemy; bWasEnemy = (Controller.Target==Controller.Enemy); RetVal = Super(NiceMonster).MeleeDamageTarget(hitdamage*1.75, pushdir*3); // Only stop if you've successfully killed your target if(Pawn(Controller.Target) == none) return RetVal; if( KFPawn(Controller.Target) != none && Pawn(Controller.Target).Health <= 0 && RetVal && bWasEnemy ){ GoToState(''); } return RetVal; } } defaultproperties { MenuName="Mean FleshPound" Skins(0)=Combiner'MeanZedSkins.fleshpound_cmb' }