siren won't scream at low hp zeds, will melee

This commit is contained in:
Shtoyan 2022-01-21 23:07:54 +04:00
parent 01882bdecf
commit 4325a34acf

View File

@ -77,48 +77,62 @@ function DiscardCurrentScreamBall(){
currScreamTiming = -1; currScreamTiming = -1;
} }
} }
function RangedAttack(Actor A) function RangedAttack(Actor A)
{ {
local int LastFireTime; local int LastFireTime;
local float Dist; local float Dist;
if ( bShotAnim )
return; if (bShotAnim)
return;
Dist = VSize(A.Location - Location); Dist = VSize(A.Location - Location);
if ( Physics == PHYS_Swimming )
if (Physics == PHYS_Swimming)
{ {
SetAnimAction('Claw'); SetAnimAction('Claw');
bShotAnim = true; bShotAnim = true;
LastFireTime = Level.TimeSeconds; LastFireTime = Level.TimeSeconds;
} }
else if(Dist < MeleeRange + CollisionRadius + A.CollisionRadius && A != Self) else if (Dist < MeleeRange + CollisionRadius + A.CollisionRadius && A != Self)
{ {
bShotAnim = true; bShotAnim = true;
LastFireTime = Level.TimeSeconds; LastFireTime = Level.TimeSeconds;
SetAnimAction('Claw'); SetAnimAction('Claw');
Controller.bPreparingMove = true; Controller.bPreparingMove = true;
Acceleration = vect(0,0,0); Acceleration = vect(0,0,0);
} }
else if( Dist <= ScreamRadius && !bDecapitated && !bZapped ) // ok se we DO NOT want to scream at other nice zeds
else if (!bNotAHuman() && Dist <= ScreamRadius && !bDecapitated && !bZapped)
{ {
bShotAnim=true; bShotAnim = true;
SetAnimAction('Siren_Scream'); SetAnimAction('Siren_Scream');
if(screamStartTime > 0) if (screamStartTime > 0)
DiscardCurrentScreamBall(); DiscardCurrentScreamBall();
currScreamTiming = 0; currScreamTiming = 0;
screamStartTime = Level.TimeSeconds; screamStartTime = Level.TimeSeconds;
// Only stop moving if we are close // Only stop moving if we are close
if( Dist < ScreamRadius * 0.25 ) if (Dist < ScreamRadius * 0.25)
{ {
Controller.bPreparingMove = true; Controller.bPreparingMove = true;
Acceleration = vect(0,0,0); Acceleration = vect(0,0,0);
} }
else else
{ {
Acceleration = AccelRate * Normal(A.Location - Location); Acceleration = AccelRate * Normal(A.Location - Location);
} }
Acceleration.Z = FMin(Acceleration.Z, 0.0f); Acceleration.Z = FMin(Acceleration.Z, 0.0f);
} }
} }
final private function bool bNotAHuman()
{
if (Controller == none || Controller.Enemy == none)
return false;
// log("Zed enemy classname was " $ Controller.Enemy.class);
return ClassIsChildOf(Controller.Enemy.class, class'NiceMonster');
}
simulated function int DoAnimAction( name AnimName ) simulated function int DoAnimAction( name AnimName )
{ {
if( AnimName=='Siren_Scream' || AnimName=='Siren_Bite' || AnimName=='Siren_Bite2' ) if( AnimName=='Siren_Scream' || AnimName=='Siren_Bite' || AnimName=='Siren_Bite2' )