gzdoom/wadsrc/static/zscript/hexen/serpent.txt
2016-10-18 18:11:13 +02:00

238 lines
4.2 KiB
Text

// Serpent ------------------------------------------------------------------
class Serpent : Actor
{
Default
{
Health 90;
PainChance 96;
Speed 12;
Radius 32;
Height 70;
Mass 0x7fffffff;
Monster;
-SHOOTABLE
+NOBLOOD
+CANTLEAVEFLOORPIC +NONSHOOTABLE
+STAYMORPHED +DONTBLAST +NOTELEOTHER
+INVISIBLE
SeeSound "SerpentSight";
AttackSound "SerpentAttack";
PainSound "SerpentPain";
DeathSound "SerpentDeath";
HitObituary "$OB_SERPENTHIT";
}
action native void A_SerpentHumpDecide();
action native void A_SerpentHide();
action native void A_SerpentCheckForAttack();
action native void A_SerpentSpawnGibs();
action native void A_SerpentUnHide();
action native void A_SerpentRaiseHump();
action native void A_SerpentLowerHump();
action native void A_SerpentChooseAttack();
action native void A_SerpentMeleeAttack();
States
{
Spawn:
SSPT H 10 A_Look;
Loop;
See:
SSPT HH 1 A_Chase("Melee", "None", CHF_NIGHTMAREFAST|CHF_NOPLAYACTIVE);
SSPT H 2 A_SerpentHumpDecide;
Loop;
Pain:
SSPT L 5;
SSPT L 5 A_Pain;
Dive:
SSDV ABC 4;
SSDV D 4 A_UnSetShootable;
SSDV E 3 A_PlaySound("SerpentActive", CHAN_BODY);
SSDV F 3;
SSDV GH 4;
SSDV I 3;
SSDV J 3 A_SerpentHide;
Goto See;
Melee:
SSPT A 1 A_UnHideThing;
SSPT A 1 A_PlaySound("SerpentBirth", CHAN_BODY);
SSPT B 3 A_SetShootable;
SSPT C 3;
SSPT D 4 A_SerpentCheckForAttack;
Goto Dive;
Death:
SSPT O 4;
SSPT P 4 A_Scream;
SSPT Q 4 A_NoBlocking;
SSPT RSTUVWXYZ 4;
Stop;
XDeath:
SSXD A 4;
SSXD B 4 A_SpawnItemEx("SerpentHead", 0, 0, 45);
SSXD C 4 A_NoBlocking;
SSXD DE 4;
SSXD FG 3;
SSXD H 3 A_SerpentSpawnGibs;
Stop;
Ice:
SSPT [ 5 A_FreezeDeath;
SSPT [ 1 A_FreezeDeathChunks;
Wait;
Walk:
SSPT IJI 5 A_Chase("Attack", "None", CHF_NIGHTMAREFAST);
SSPT J 5 A_SerpentCheckForAttack;
Goto Dive;
Hump:
SSPT H 3 A_SerpentUnHide;
SSPT EFGEF 3 A_SerpentRaiseHump;
SSPT GEF 3;
SSPT GEFGE 3 A_SerpentLowerHump;
SSPT F 3 A_SerpentHide;
Goto See;
Attack:
SSPT K 6 A_FaceTarget;
SSPT L 5 A_SerpentChooseAttack;
Goto MeleeAttack;
MeleeAttack:
SSPT N 5 A_SerpentMeleeAttack;
Goto Dive;
}
}
// Serpent Leader -----------------------------------------------------------
class SerpentLeader : Serpent
{
Default
{
Mass 200;
Obituary "$OB_SERPENT";
}
States
{
Missile:
SSPT N 5 A_CustomMissile("SerpentFX", 32, 0);
Goto Dive;
}
}
// Serpent Missile Ball -----------------------------------------------------
class SerpentFX : Actor
{
Default
{
Speed 15;
Radius 8;
Height 10;
Damage 4;
Projectile;
-ACTIVATEIMPACT -ACTIVATEPCROSS
RenderStyle "Add";
DeathSound "SerpentFXHit";
}
States
{
Spawn:
SSFX A 0;
SSFX A 3 Bright A_PlaySound("SerpentFXContinuous", CHAN_BODY, 1.0, 1);
SSFX BAB 3 Bright;
Goto Spawn+1;
Death:
SSFX C 4 Bright A_StopSound(CHAN_BODY);
SSFX DEFGH 4 Bright;
Stop;
}
}
// Serpent Head -------------------------------------------------------------
class SerpentHead : Actor
{
Default
{
Radius 5;
Height 10;
Gravity 0.125;
+NOBLOCKMAP
}
action native void A_SerpentHeadCheck();
States
{
Spawn:
SSXD IJKLMNOP 4 A_SerpentHeadCheck;
Loop;
Death:
SSXD S -1;
Loop;
}
}
// Serpent Gib 1 ------------------------------------------------------------
class SerpentGib1 : Actor
{
Default
{
Radius 3;
Height 3;
+NOBLOCKMAP +NOGRAVITY
}
action native void A_FloatGib();
action native void A_DelayGib();
action native void A_SinkGib();
States
{
Spawn:
SSXD Q 6;
SSXD Q 6 A_FloatGib;
SSXD QQ 8 A_FloatGib;
SSXD QQ 12 A_FloatGib;
SSXD Q 232 A_DelayGib;
SSXD QQ 12 A_SinkGib;
SSXD QQQ 8 A_SinkGib;
Stop;
}
}
// Serpent Gib 2 ------------------------------------------------------------
class SerpentGib2 : SerpentGib1
{
States
{
Spawn:
SSXD R 6;
SSXD R 6 A_FloatGib;
SSXD RR 8 A_FloatGib;
SSXD RR 12 A_FloatGib;
SSXD R 232 A_DelayGib;
SSXD RR 12 A_SinkGib;
SSXD RRR 8 A_SinkGib;
Stop;
}
}
// Serpent Gib 3 ------------------------------------------------------------
class SerpentGib3 : SerpentGib1
{
States
{
Spawn:
SSXD T 6;
SSXD T 6 A_FloatGib;
SSXD TT 8 A_FloatGib;
SSXD TT 12 A_FloatGib;
SSXD T 232 A_DelayGib;
SSXD TT 12 A_SinkGib;
SSXD TTT 8 A_SinkGib;
Stop;
}
}