gzdoom/wadsrc/static/zscript/actors/doom/demon.zs

99 lines
1.8 KiB
Text
Raw Normal View History

//===========================================================================
//
// Pink Demon
//
//===========================================================================
class Demon : Actor
{
Default
{
Health 150;
PainChance 180;
Speed 10;
Radius 30;
Height 56;
Mass 400;
Monster;
+FLOORCLIP
SeeSound "demon/sight";
AttackSound "demon/melee";
PainSound "demon/pain";
DeathSound "demon/death";
ActiveSound "demon/active";
Obituary "$OB_DEMONHIT";
Tag "$FN_DEMON";
}
States
{
Spawn:
SARG AB 10 A_Look;
Loop;
See:
SARG AABBCCDD 2 Fast A_Chase;
Loop;
Melee:
SARG EF 8 Fast A_FaceTarget;
SARG G 8 Fast A_SargAttack;
Goto See;
Pain:
SARG H 2 Fast;
SARG H 2 Fast A_Pain;
Goto See;
Death:
SARG I 8;
SARG J 8 A_Scream;
SARG K 4;
SARG L 4 A_NoBlocking;
SARG M 4;
SARG N -1;
Stop;
Raise:
SARG N 5;
SARG MLKJI 5;
Goto See;
}
}
//===========================================================================
//
// Spectre
//
//===========================================================================
class Spectre : Demon
{
Default
{
+SHADOW
RenderStyle "OptFuzzy";
Alpha 0.5;
SeeSound "spectre/sight";
AttackSound "spectre/melee";
PainSound "spectre/pain";
DeathSound "spectre/death";
ActiveSound "spectre/active";
Obituary "$OB_SPECTREHIT";
Tag "$FN_SPECTRE";
}
}
//===========================================================================
//
// Code (must be attached to Actor)
//
//===========================================================================
extend class Actor
{
void A_SargAttack()
{
let targ = target;
if (targ && CheckMeleeRange())
{
int damage = random[pr_sargattack](1, 10) * 4;
int newdam = targ.DamageMobj (self, self, damage, "Melee");
targ.TraceBleed (newdam > 0 ? newdam : damage, self);
}
}
}