mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-30 15:52:09 +00:00
d4c0ee9e43
This function calculated everything correctly but ultimately set the vertical velocity wrong. Most importantly this meant that the actual velocity vector and actor pitch - if CMF_SAVEPITCH was used - did not match. Since this bug has been present since the pitch parameter was added, this deprecates A_CustomMissile and replaces it with a properly implemented A_SpawnProjectile function and handling the compatibility case with a new flag and a scripted wrapper function. All internal uses of A_CustomMissile have been replaced as well.
223 lines
3.7 KiB
Text
223 lines
3.7 KiB
Text
// Centaur ------------------------------------------------------------------
|
|
|
|
class Centaur : Actor
|
|
{
|
|
Default
|
|
{
|
|
Health 200;
|
|
Painchance 135;
|
|
Speed 13;
|
|
Height 64;
|
|
Mass 120;
|
|
Monster;
|
|
+FLOORCLIP
|
|
+TELESTOMP
|
|
+SHIELDREFLECT
|
|
SeeSound "CentaurSight";
|
|
AttackSound "CentaurAttack";
|
|
PainSound "CentaurPain";
|
|
DeathSound "CentaurDeath";
|
|
ActiveSound "CentaurActive";
|
|
HowlSound "PuppyBeat";
|
|
Obituary "$OB_CENTAUR";
|
|
DamageFactor "Electric", 3;
|
|
}
|
|
States
|
|
{
|
|
Spawn:
|
|
CENT AB 10 A_Look;
|
|
Loop;
|
|
See:
|
|
CENT ABCD 4 A_Chase;
|
|
Loop;
|
|
Pain:
|
|
CENT G 6 A_Pain;
|
|
CENT G 6 A_SetReflectiveInvulnerable;
|
|
CENT EEE 15 A_CentaurDefend;
|
|
CENT E 1 A_UnsetReflectiveInvulnerable;
|
|
Goto See;
|
|
Melee:
|
|
CENT H 5 A_FaceTarget;
|
|
CENT I 4 A_FaceTarget;
|
|
CENT J 7 A_CustomMeleeAttack(random[CentaurAttack](3,9));
|
|
Goto See;
|
|
Death:
|
|
CENT K 4;
|
|
CENT L 4 A_Scream;
|
|
CENT MN 4;
|
|
CENT O 4 A_NoBlocking;
|
|
CENT PQ 4;
|
|
CENT R 4 A_QueueCorpse;
|
|
CENT S 4;
|
|
CENT T -1;
|
|
Stop;
|
|
XDeath:
|
|
CTXD A 4;
|
|
CTXD B 4 A_NoBlocking;
|
|
CTXD C 4
|
|
{
|
|
A_SpawnItemEx("CentaurSword", 0, 0, 45,
|
|
1 + random[CentaurDrop](-128,127)*0.03125,
|
|
1 + random[CentaurDrop](-128,127)*0.03125,
|
|
8 + random[CentaurDrop](0,255)*0.015625, 270);
|
|
A_SpawnItemEx("CentaurShield", 0, 0, 45,
|
|
1 + random[CentaurDrop](-128,127)*0.03125,
|
|
1 + random[CentaurDrop](-128,127)*0.03125,
|
|
8 + random[CentaurDrop](0,255)*0.015625, 90);
|
|
}
|
|
CTXD D 3 A_Scream;
|
|
CTXD E 4 A_QueueCorpse;
|
|
CTXD F 3;
|
|
CTXD G 4;
|
|
CTXD H 3;
|
|
CTXD I 4;
|
|
CTXD J 3;
|
|
CTXD K -1;
|
|
Ice:
|
|
CENT U 5 A_FreezeDeath;
|
|
CENT U 1 A_FreezeDeathChunks;
|
|
Wait;
|
|
}
|
|
}
|
|
|
|
extend class Actor
|
|
{
|
|
void A_CentaurDefend()
|
|
{
|
|
A_FaceTarget ();
|
|
if (CheckMeleeRange() && random[CentaurDefend]() < 32)
|
|
{
|
|
// This should unset REFLECTIVE as well
|
|
// (unless you want the Centaur to reflect projectiles forever!)
|
|
bReflective = false;
|
|
bInvulnerable = false;
|
|
SetState(MeleeState);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Centaur Leader -----------------------------------------------------------
|
|
|
|
class CentaurLeader : Centaur
|
|
{
|
|
Default
|
|
{
|
|
Health 250;
|
|
PainChance 96;
|
|
Speed 10;
|
|
Obituary "$OB_SLAUGHTAUR";
|
|
HitObituary "$OB_SLAUGHTAURHIT";
|
|
}
|
|
States
|
|
{
|
|
Missile:
|
|
CENT E 10 A_FaceTarget;
|
|
CENT F 8 Bright A_SpawnProjectile("CentaurFX", 45, 0, 0, CMF_AIMOFFSET);
|
|
CENT E 10 A_FaceTarget;
|
|
CENT F 8 Bright A_SpawnProjectile("CentaurFX", 45, 0, 0, CMF_AIMOFFSET);
|
|
Goto See;
|
|
}
|
|
}
|
|
|
|
// Mashed centaur -----------------------------------------------------------
|
|
//
|
|
// The mashed centaur is only placed through ACS. Nowhere in the game source
|
|
// is it ever referenced.
|
|
|
|
class CentaurMash : Centaur
|
|
{
|
|
Default
|
|
{
|
|
+NOBLOOD
|
|
+BLASTED
|
|
-TELESTOMP
|
|
+NOICEDEATH
|
|
RenderStyle "Translucent";
|
|
Alpha 0.4;
|
|
}
|
|
States
|
|
{
|
|
Death:
|
|
XDeath:
|
|
Ice:
|
|
Stop;
|
|
}
|
|
}
|
|
|
|
// Centaur projectile -------------------------------------------------------
|
|
|
|
class CentaurFX : Actor
|
|
{
|
|
Default
|
|
{
|
|
Speed 20;
|
|
Damage 4;
|
|
Projectile;
|
|
+SPAWNSOUNDSOURCE
|
|
RenderStyle "Add";
|
|
SeeSound "CentaurLeaderAttack";
|
|
DeathSound "CentaurMissileExplode";
|
|
}
|
|
States
|
|
{
|
|
Spawn:
|
|
CTFX A -1 Bright;
|
|
Stop;
|
|
Death:
|
|
CTFX B 4 Bright;
|
|
CTFX C 3 Bright;
|
|
CTFX D 4 Bright;
|
|
CTFX E 3 Bright;
|
|
CTFX F 2 Bright;
|
|
Stop;
|
|
}
|
|
}
|
|
|
|
// Centaur shield (debris) --------------------------------------------------
|
|
|
|
class CentaurShield : Actor
|
|
{
|
|
Default
|
|
{
|
|
+DROPOFF
|
|
+CORPSE
|
|
+NOTELEPORT
|
|
}
|
|
States
|
|
{
|
|
Spawn:
|
|
CTDP ABCDEF 3;
|
|
Goto Spawn+2;
|
|
Crash:
|
|
CTDP G 4;
|
|
CTDP H 4 A_QueueCorpse;
|
|
CTDP I 4;
|
|
CTDP J -1;
|
|
Stop;
|
|
}
|
|
}
|
|
|
|
// Centaur sword (debris) ---------------------------------------------------
|
|
|
|
class CentaurSword : Actor
|
|
{
|
|
Default
|
|
{
|
|
+DROPOFF
|
|
+CORPSE
|
|
+NOTELEPORT
|
|
}
|
|
States
|
|
{
|
|
Spawn:
|
|
CTDP KLMNOPQ 3;
|
|
Goto Spawn+2;
|
|
Crash:
|
|
CTDP R 4;
|
|
CTDP S 4 A_QueueCorpse;
|
|
CTDP T -1;
|
|
Stop;
|
|
}
|
|
}
|
|
|
|
|