mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-24 21:11:39 +00:00
371712c53a
- fixed emission of the self pointer in FxVMFunctionCall. I did not realize that the self expression only sets up a register for the value, not pushing it onto the stack.
238 lines
4.1 KiB
Text
238 lines
4.1 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";
|
|
}
|
|
|
|
native void A_SerpentHumpDecide();
|
|
native void A_SerpentHide();
|
|
native void A_SerpentCheckForAttack();
|
|
native void A_SerpentSpawnGibs();
|
|
native void A_SerpentUnHide();
|
|
native void A_SerpentRaiseHump();
|
|
native void A_SerpentLowerHump();
|
|
native void A_SerpentChooseAttack();
|
|
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
|
|
}
|
|
|
|
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
|
|
}
|
|
|
|
native void A_FloatGib();
|
|
native void A_DelayGib();
|
|
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;
|
|
}
|
|
}
|