mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-28 06:53:58 +00:00
- Converted Strife's Crusader, Inquisitor and spectral missiles to
DECORATE. SVN r1114 (trunk)
This commit is contained in:
parent
fe2e64aa40
commit
4f0fa50773
20 changed files with 659 additions and 753 deletions
|
@ -1,4 +1,6 @@
|
|||
August 5, 2008 (Changes by Graf Zahl)
|
||||
- Converted Strife's Crusader, Inquisitor and spectral missiles to
|
||||
DECORATE.
|
||||
- Converted Strife's Acolytes, Rebels, Sentinel, Reaver and Templar to
|
||||
DECORATE.
|
||||
- Added DECORATE conversions for Hexen's Cleric weapons by Karate Chris.
|
||||
|
|
|
@ -244,6 +244,28 @@ ACTOR(AcolyteDie)
|
|||
ACTOR(HideDecepticon)
|
||||
ACTOR(Beacon)
|
||||
ACTOR(ShootGun)
|
||||
ACTOR(RocketInFlight)
|
||||
ACTOR(CrusaderChoose)
|
||||
ACTOR(CrusaderSweepLeft)
|
||||
ACTOR(CrusaderSweepRight)
|
||||
ACTOR(CrusaderRefire)
|
||||
ACTOR(CrusaderDeath)
|
||||
ACTOR(InquisitorWalk)
|
||||
ACTOR(InquisitorDecide)
|
||||
ACTOR(InquisitorAttack)
|
||||
ACTOR(InquisitorJump)
|
||||
ACTOR(InquisitorCheckLand)
|
||||
ACTOR(TossArm)
|
||||
ACTOR(SpectralLightningTail)
|
||||
ACTOR(SpectralBigBallLightning)
|
||||
ACTOR(SpectralLightning)
|
||||
ACTOR(SpectreChunkSmall)
|
||||
ACTOR(SpectreChunkLarge)
|
||||
ACTOR(Spectre2Attack)
|
||||
ACTOR(Spectre3Attack)
|
||||
ACTOR(Spectre4Attack)
|
||||
ACTOR(Spectre5Attack)
|
||||
ACTOR(SpotLightning)
|
||||
|
||||
// Special code pointers for Strife's player - not to be used elsewhere!
|
||||
ACTOR(ItBurnsItBurns)
|
||||
|
|
|
@ -26,7 +26,7 @@ void A_AlienSpectreDeath (AActor *);
|
|||
void A_AlertMonsters (AActor *);
|
||||
void A_Tracer2 (AActor *);
|
||||
|
||||
AActor *P_SpawnSubMissile (AActor *source, PClass *type, AActor *target);
|
||||
AActor *P_SpawnSubMissile (AActor *source, const PClass *type, AActor *target);
|
||||
|
||||
// Alien Spectre 1 -----------------------------------------------------------
|
||||
|
||||
|
@ -351,11 +351,6 @@ static void GenericSpectreSpawn (AActor *actor, const PClass *type)
|
|||
}
|
||||
}
|
||||
|
||||
void A_SpawnSpectre1 (AActor *actor)
|
||||
{
|
||||
GenericSpectreSpawn (actor, RUNTIME_CLASS(AAlienSpectre1));
|
||||
}
|
||||
|
||||
void A_SpawnSpectre3 (AActor *actor)
|
||||
{
|
||||
GenericSpectreSpawn (actor, RUNTIME_CLASS(AAlienSpectre3));
|
||||
|
@ -413,7 +408,7 @@ void A_Spectre4Attack (AActor *self)
|
|||
if (self->target != NULL)
|
||||
{
|
||||
AActor *missile = P_SpawnMissileXYZ (self->x, self->y, self->z + 32*FRACUNIT,
|
||||
self, self->target, RUNTIME_CLASS(ASpectralLightningBigV2), false);
|
||||
self, self->target, PClass::FindClass("SpectralLightningBigV2"), false);
|
||||
if (missile != NULL)
|
||||
{
|
||||
missile->tracer = self->target;
|
||||
|
@ -428,7 +423,7 @@ void A_Spectre2Attack (AActor *self)
|
|||
if (self->target != NULL)
|
||||
{
|
||||
AActor *missile = P_SpawnMissileXYZ (self->x, self->y, self->z + 32*FRACUNIT,
|
||||
self, self->target, RUNTIME_CLASS(ASpectralLightningH3), false);
|
||||
self, self->target, PClass::FindClass("SpectralLightningH3"), false);
|
||||
if (missile != NULL)
|
||||
{
|
||||
missile->health = -2;
|
||||
|
@ -442,7 +437,7 @@ void A_Spectre5Attack (AActor *self)
|
|||
if (self->target != NULL)
|
||||
{
|
||||
AActor *missile = P_SpawnMissileXYZ (self->x, self->y, self->z + 32*FRACUNIT,
|
||||
self, self->target, RUNTIME_CLASS(ASpectralLightningBigBall2), false);
|
||||
self, self->target, PClass::FindClass("SpectralLightningBigBall2"), false);
|
||||
if (missile != NULL)
|
||||
{
|
||||
missile->health = -2;
|
||||
|
@ -456,7 +451,7 @@ void A_Spectre3Attack (AActor *self)
|
|||
if (self->target == NULL)
|
||||
return;
|
||||
|
||||
AActor *foo = Spawn<ASpectralLightningV2> (self->x, self->y, self->z + 32*FRACUNIT, ALLOW_REPLACE);
|
||||
AActor *foo = Spawn("SpectralLightningV2", self->x, self->y, self->z + 32*FRACUNIT, ALLOW_REPLACE);
|
||||
|
||||
foo->momz = -12*FRACUNIT;
|
||||
foo->target = self;
|
||||
|
@ -467,7 +462,7 @@ void A_Spectre3Attack (AActor *self)
|
|||
for (int i = 0; i < 20; ++i)
|
||||
{
|
||||
self->angle += ANGLE_180 / 20;
|
||||
P_SpawnSubMissile (self, RUNTIME_CLASS(ASpectralLightningBall2), self);
|
||||
P_SpawnSubMissile (self, PClass::FindClass("SpectralLightningBall2"), self);
|
||||
}
|
||||
self->angle -= ANGLE_180 / 20 * 10;
|
||||
}
|
||||
|
@ -497,18 +492,20 @@ void A_AlienSpectreDeath (AActor *self)
|
|||
return;
|
||||
}
|
||||
|
||||
if (self->GetClass() == RUNTIME_CLASS(AAlienSpectre1))
|
||||
switch (self->GetClass()->TypeName)
|
||||
{
|
||||
case NAME_AlienSpectre1:
|
||||
EV_DoFloor (DFloor::floorLowerToLowest, NULL, 999, FRACUNIT, 0, 0, 0, false);
|
||||
log = 95;
|
||||
}
|
||||
else if (self->GetClass() == RUNTIME_CLASS(AAlienSpectre2))
|
||||
{
|
||||
break;
|
||||
|
||||
case NAME_AlienSpectre2:
|
||||
C_MidPrint(GStrings("TXT_KILLED_BISHOP"));
|
||||
log = 74;
|
||||
player->GiveInventoryType (QuestItemClasses[20]);
|
||||
}
|
||||
else if (self->GetClass() == RUNTIME_CLASS(AAlienSpectre3))
|
||||
break;
|
||||
|
||||
case NAME_AlienSpectre3:
|
||||
{
|
||||
C_MidPrint(GStrings("TXT_KILLED_ORACLE"));
|
||||
// If there are any Oracles still alive, kill them.
|
||||
|
@ -537,9 +534,10 @@ void A_AlienSpectreDeath (AActor *self)
|
|||
log = 85;
|
||||
}
|
||||
EV_DoDoor (DDoor::doorOpen, NULL, NULL, 222, 8*FRACUNIT, 0, 0, 0);
|
||||
break;
|
||||
}
|
||||
else if (self->GetClass() == RUNTIME_CLASS(AAlienSpectre4))
|
||||
{
|
||||
|
||||
case NAME_AlienSpectre4:
|
||||
C_MidPrint(GStrings("TXT_KILLED_MACIL"));
|
||||
player->GiveInventoryType (QuestItemClasses[23]);
|
||||
if (player->FindInventory (QuestItemClasses[24]) == NULL)
|
||||
|
@ -550,9 +548,9 @@ void A_AlienSpectreDeath (AActor *self)
|
|||
{ // Back to the factory for another Sigil!
|
||||
log = 106;
|
||||
}
|
||||
}
|
||||
else if (self->GetClass() == RUNTIME_CLASS(AAlienSpectre5))
|
||||
{
|
||||
break;
|
||||
|
||||
case NAME_AlienSpectre5:
|
||||
C_MidPrint(GStrings("TXT_KILLED_LOREMASTER"));
|
||||
ASigil *sigil;
|
||||
|
||||
|
@ -572,9 +570,9 @@ void A_AlienSpectreDeath (AActor *self)
|
|||
log = 83;
|
||||
}
|
||||
EV_DoFloor (DFloor::floorLowerToLowest, NULL, 666, FRACUNIT, 0, 0, 0, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
|
||||
default:
|
||||
return;
|
||||
}
|
||||
mysnprintf (voc, countof(voc), "svox/voc%d", log);
|
||||
|
|
|
@ -6,152 +6,6 @@
|
|||
#include "s_sound.h"
|
||||
#include "a_strifeglobal.h"
|
||||
|
||||
void A_TossGib (AActor *);
|
||||
|
||||
// Crusader -----------------------------------------------------------------
|
||||
|
||||
void A_CrusaderChoose (AActor *);
|
||||
void A_CrusaderSweepLeft (AActor *);
|
||||
void A_CrusaderSweepRight (AActor *);
|
||||
void A_CrusaderRefire (AActor *);
|
||||
void A_CrusaderDeath (AActor *);
|
||||
|
||||
class ACrusader : public AActor
|
||||
{
|
||||
DECLARE_ACTOR (ACrusader, AActor)
|
||||
public:
|
||||
void GetExplodeParms (int &damage, int &dist, bool &hurtSource)
|
||||
{
|
||||
damage = dist = 64;
|
||||
}
|
||||
void NoBlockingSet ()
|
||||
{
|
||||
P_DropItem (this, "EnergyPod", 20, 256);
|
||||
}
|
||||
};
|
||||
|
||||
FState ACrusader::States[] =
|
||||
{
|
||||
#define S_CRUSADER_STND 0
|
||||
S_NORMAL (ROB2, 'Q', 10, A_Look, &States[S_CRUSADER_STND]),
|
||||
|
||||
#define S_CRUSADER_RUN (S_CRUSADER_STND+1)
|
||||
S_NORMAL (ROB2, 'A', 3, A_Chase, &States[S_CRUSADER_RUN+1]),
|
||||
S_NORMAL (ROB2, 'A', 3, A_Chase, &States[S_CRUSADER_RUN+2]),
|
||||
S_NORMAL (ROB2, 'B', 3, A_Chase, &States[S_CRUSADER_RUN+3]),
|
||||
S_NORMAL (ROB2, 'B', 3, A_Chase, &States[S_CRUSADER_RUN+4]),
|
||||
S_NORMAL (ROB2, 'C', 3, A_Chase, &States[S_CRUSADER_RUN+5]),
|
||||
S_NORMAL (ROB2, 'C', 3, A_Chase, &States[S_CRUSADER_RUN+6]),
|
||||
S_NORMAL (ROB2, 'D', 3, A_Chase, &States[S_CRUSADER_RUN+7]),
|
||||
S_NORMAL (ROB2, 'D', 3, A_Chase, &States[S_CRUSADER_RUN]),
|
||||
|
||||
#define S_CRUSADER_ATTACK (S_CRUSADER_RUN+8)
|
||||
S_NORMAL (ROB2, 'E', 3, A_FaceTarget, &States[S_CRUSADER_ATTACK+1]),
|
||||
S_BRIGHT (ROB2, 'F', 2, A_CrusaderChoose, &States[S_CRUSADER_ATTACK+2]),
|
||||
S_BRIGHT (ROB2, 'E', 2, A_CrusaderSweepLeft, &States[S_CRUSADER_ATTACK+3]),
|
||||
S_BRIGHT (ROB2, 'F', 3, A_CrusaderSweepLeft, &States[S_CRUSADER_ATTACK+4]),
|
||||
S_BRIGHT (ROB2, 'E', 2, A_CrusaderSweepLeft, &States[S_CRUSADER_ATTACK+5]),
|
||||
S_BRIGHT (ROB2, 'F', 2, A_CrusaderSweepLeft, &States[S_CRUSADER_ATTACK+6]),
|
||||
S_BRIGHT (ROB2, 'E', 2, A_CrusaderSweepRight, &States[S_CRUSADER_ATTACK+7]),
|
||||
S_BRIGHT (ROB2, 'F', 2, A_CrusaderSweepRight, &States[S_CRUSADER_ATTACK+8]),
|
||||
S_BRIGHT (ROB2, 'E', 2, A_CrusaderSweepRight, &States[S_CRUSADER_ATTACK+9]),
|
||||
S_BRIGHT (ROB2, 'F', 2, A_CrusaderRefire, &States[S_CRUSADER_ATTACK]),
|
||||
|
||||
#define S_CRUSADER_PAIN (S_CRUSADER_ATTACK+10)
|
||||
S_NORMAL (ROB2, 'D', 1, A_Pain, &States[S_CRUSADER_RUN]),
|
||||
|
||||
#define S_CRUSADER_DEATH (S_CRUSADER_PAIN+1)
|
||||
S_NORMAL (ROB2, 'G', 3, A_Scream, &States[S_CRUSADER_DEATH+1]),
|
||||
S_NORMAL (ROB2, 'H', 5, A_TossGib, &States[S_CRUSADER_DEATH+2]),
|
||||
S_BRIGHT (ROB2, 'I', 4, A_TossGib, &States[S_CRUSADER_DEATH+3]),
|
||||
S_BRIGHT (ROB2, 'J', 4, A_ExplodeAndAlert, &States[S_CRUSADER_DEATH+4]),
|
||||
S_BRIGHT (ROB2, 'K', 4, A_NoBlocking, &States[S_CRUSADER_DEATH+5]),
|
||||
S_NORMAL (ROB2, 'L', 4, A_ExplodeAndAlert, &States[S_CRUSADER_DEATH+6]),
|
||||
S_NORMAL (ROB2, 'M', 4, A_TossGib, &States[S_CRUSADER_DEATH+7]),
|
||||
S_NORMAL (ROB2, 'N', 4, A_TossGib, &States[S_CRUSADER_DEATH+8]),
|
||||
S_NORMAL (ROB2, 'O', 4, A_ExplodeAndAlert, &States[S_CRUSADER_DEATH+9]),
|
||||
S_NORMAL (ROB2, 'P', -1, A_CrusaderDeath, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (ACrusader, Strife, 3005, 0)
|
||||
PROP_SpawnState (S_CRUSADER_STND)
|
||||
PROP_SeeState (S_CRUSADER_RUN)
|
||||
PROP_MissileState (S_CRUSADER_ATTACK)
|
||||
PROP_PainState (S_CRUSADER_PAIN)
|
||||
PROP_DeathState (S_CRUSADER_DEATH)
|
||||
PROP_SpeedFixed (8)
|
||||
PROP_RadiusFixed (40)
|
||||
PROP_HeightFixed (56)
|
||||
PROP_Mass (400)
|
||||
PROP_SpawnHealth (400)
|
||||
PROP_PainChance (128)
|
||||
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_NOBLOOD|MF_COUNTKILL)
|
||||
PROP_Flags2 (MF2_FLOORCLIP|MF2_PASSMOBJ|MF2_PUSHWALL|MF2_MCROSS)
|
||||
PROP_Flags3 (MF3_DONTMORPH)
|
||||
PROP_Flags4 (MF4_MISSILEMORE|MF4_INCOMBAT|MF4_NOICEDEATH)
|
||||
PROP_MinMissileChance (120)
|
||||
PROP_StrifeType (63)
|
||||
PROP_MaxDropOffHeight (32)
|
||||
PROP_SeeSound ("crusader/sight")
|
||||
PROP_PainSound ("crusader/pain")
|
||||
PROP_DeathSound ("crusader/death")
|
||||
PROP_ActiveSound ("crusader/active")
|
||||
PROP_Obituary ("$OB_CRUSADER")
|
||||
END_DEFAULTS
|
||||
|
||||
// Fast Flame Projectile (used by Crusader) ---------------------------------
|
||||
|
||||
class AFastFlameMissile : public AFlameMissile
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (AFastFlameMissile, AFlameMissile)
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (AFastFlameMissile, Strife, -1, 0)
|
||||
PROP_Mass (50)
|
||||
PROP_Damage (1)
|
||||
PROP_SpeedFixed (35)
|
||||
END_DEFAULTS
|
||||
|
||||
// Crusader Missile ---------------------------------------------------------
|
||||
// This is just like the mini missile the player shoots, except it doesn't
|
||||
// explode when it dies, and it does slightly less damage for a direct hit.
|
||||
|
||||
void A_RocketInFlight (AActor *);
|
||||
void A_RocketDead (AActor *);
|
||||
|
||||
class ACrusaderMissile : public AActor
|
||||
{
|
||||
DECLARE_ACTOR (ACrusaderMissile, AActor)
|
||||
};
|
||||
|
||||
FState ACrusaderMissile::States[] =
|
||||
{
|
||||
S_BRIGHT (MICR, 'A', 6, A_RocketInFlight, &States[0]),
|
||||
|
||||
S_BRIGHT (SMIS, 'A', 5, A_RocketDead, &States[2]),
|
||||
S_BRIGHT (SMIS, 'B', 5, NULL, &States[3]),
|
||||
S_BRIGHT (SMIS, 'C', 4, NULL, &States[4]),
|
||||
S_BRIGHT (SMIS, 'D', 2, NULL, &States[5]),
|
||||
S_BRIGHT (SMIS, 'E', 2, NULL, &States[6]),
|
||||
S_BRIGHT (SMIS, 'F', 2, NULL, &States[7]),
|
||||
S_BRIGHT (SMIS, 'G', 2, NULL, NULL),
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (ACrusaderMissile, Strife, -1, 0)
|
||||
PROP_SpawnState (0)
|
||||
PROP_DeathState (1)
|
||||
PROP_SpeedFixed (20)
|
||||
PROP_RadiusFixed (10)
|
||||
PROP_HeightFixed (14)
|
||||
PROP_Damage (7)
|
||||
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
|
||||
PROP_Flags2 (MF2_NOTELEPORT|MF2_PCROSS|MF2_IMPACT)
|
||||
PROP_Flags4 (MF4_STRIFEDAMAGE)
|
||||
PROP_MaxStepHeight (4)
|
||||
PROP_SeeSound ("crusader/misl")
|
||||
PROP_DeathSound ("crusader/mislx")
|
||||
END_DEFAULTS
|
||||
|
||||
bool Sys_1ed64 (AActor *self)
|
||||
{
|
||||
if (P_CheckSight (self, self->target) && self->reactiontime == 0)
|
||||
|
@ -170,18 +24,18 @@ void A_CrusaderChoose (AActor *self)
|
|||
{
|
||||
A_FaceTarget (self);
|
||||
self->angle -= ANGLE_180/16;
|
||||
P_SpawnMissileZAimed (self, self->z + 40*FRACUNIT, self->target, RUNTIME_CLASS(AFastFlameMissile));
|
||||
P_SpawnMissileZAimed (self, self->z + 40*FRACUNIT, self->target, PClass::FindClass("FastFlameMissile"));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (P_CheckMissileRange (self))
|
||||
{
|
||||
A_FaceTarget (self);
|
||||
P_SpawnMissileZAimed (self, self->z + 56*FRACUNIT, self->target, RUNTIME_CLASS(ACrusaderMissile));
|
||||
P_SpawnMissileZAimed (self, self->z + 56*FRACUNIT, self->target, PClass::FindClass("CrusaderMissile"));
|
||||
self->angle -= ANGLE_45/32;
|
||||
P_SpawnMissileZAimed (self, self->z + 40*FRACUNIT, self->target, RUNTIME_CLASS(ACrusaderMissile));
|
||||
P_SpawnMissileZAimed (self, self->z + 40*FRACUNIT, self->target, PClass::FindClass("CrusaderMissile"));
|
||||
self->angle += ANGLE_45/16;
|
||||
P_SpawnMissileZAimed (self, self->z + 40*FRACUNIT, self->target, RUNTIME_CLASS(ACrusaderMissile));
|
||||
P_SpawnMissileZAimed (self, self->z + 40*FRACUNIT, self->target, PClass::FindClass("CrusaderMissile"));
|
||||
self->angle -= ANGLE_45/16;
|
||||
self->reactiontime += 15;
|
||||
}
|
||||
|
@ -192,7 +46,7 @@ void A_CrusaderChoose (AActor *self)
|
|||
void A_CrusaderSweepLeft (AActor *self)
|
||||
{
|
||||
self->angle += ANGLE_90/16;
|
||||
AActor *misl = P_SpawnMissileZAimed (self, self->z + 48*FRACUNIT, self->target, RUNTIME_CLASS(AFastFlameMissile));
|
||||
AActor *misl = P_SpawnMissileZAimed (self, self->z + 48*FRACUNIT, self->target, PClass::FindClass("FastFlameMissile"));
|
||||
if (misl != NULL)
|
||||
{
|
||||
misl->momz += FRACUNIT;
|
||||
|
@ -202,7 +56,7 @@ void A_CrusaderSweepLeft (AActor *self)
|
|||
void A_CrusaderSweepRight (AActor *self)
|
||||
{
|
||||
self->angle -= ANGLE_90/16;
|
||||
AActor *misl = P_SpawnMissileZAimed (self, self->z + 48*FRACUNIT, self->target, RUNTIME_CLASS(AFastFlameMissile));
|
||||
AActor *misl = P_SpawnMissileZAimed (self, self->z + 48*FRACUNIT, self->target, PClass::FindClass("FastFlameMissile"));
|
||||
if (misl != NULL)
|
||||
{
|
||||
misl->momz += FRACUNIT;
|
||||
|
@ -226,28 +80,3 @@ void A_CrusaderDeath (AActor *self)
|
|||
EV_DoFloor (DFloor::floorLowerToLowest, NULL, 667, FRACUNIT, 0, 0, 0, false);
|
||||
}
|
||||
}
|
||||
|
||||
void A_RocketDead (AActor *self)
|
||||
{
|
||||
self->RenderStyle = STYLE_Add;
|
||||
S_StopSound (self, CHAN_VOICE);
|
||||
}
|
||||
|
||||
// Dead Crusader ------------------------------------------------------------
|
||||
|
||||
class ADeadCrusader : public AActor
|
||||
{
|
||||
DECLARE_ACTOR (ADeadCrusader, AActor)
|
||||
};
|
||||
|
||||
FState ADeadCrusader::States[] =
|
||||
{
|
||||
S_NORMAL (ROB2, 'N', 4, A_TossGib, &States[1]),
|
||||
S_NORMAL (ROB2, 'O', 4, A_ExplodeAndAlert, &States[2]),
|
||||
S_NORMAL (ROB2, 'P',-1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (ADeadCrusader, Strife, 22, 0)
|
||||
PROP_SpawnState (0)
|
||||
PROP_StrifeType (230)
|
||||
END_DEFAULTS
|
||||
|
|
|
@ -7,177 +7,6 @@
|
|||
|
||||
static FRandom pr_inq ("Inquisitor");
|
||||
|
||||
void A_InquisitorWalk (AActor *);
|
||||
void A_InquisitorDecide (AActor *);
|
||||
void A_InquisitorAttack (AActor *);
|
||||
void A_InquisitorJump (AActor *);
|
||||
void A_InquisitorCheckLand (AActor *);
|
||||
void A_TossArm (AActor *);
|
||||
void A_ShutUp (AActor *);
|
||||
|
||||
void A_ReaverRanged (AActor *);
|
||||
void A_TossGib (AActor *);
|
||||
void A_Countdown (AActor *);
|
||||
|
||||
// Inquisitor ---------------------------------------------------------------
|
||||
|
||||
class AInquisitor : public AActor
|
||||
{
|
||||
DECLARE_ACTOR (AInquisitor, AActor)
|
||||
};
|
||||
|
||||
FState AInquisitor::States[] =
|
||||
{
|
||||
#define S_INQ_STND 0
|
||||
S_NORMAL (ROB3, 'A', 10, A_Look, &States[S_INQ_STND+1]),
|
||||
S_NORMAL (ROB3, 'B', 10, A_Look, &States[S_INQ_STND]),
|
||||
|
||||
#define S_INQ_CHASE (S_INQ_STND+2)
|
||||
S_NORMAL (ROB3, 'B', 3, A_InquisitorWalk, &States[S_INQ_CHASE+1]),
|
||||
S_NORMAL (ROB3, 'B', 3, A_Chase, &States[S_INQ_CHASE+2]),
|
||||
S_NORMAL (ROB3, 'C', 4, A_Chase, &States[S_INQ_CHASE+3]),
|
||||
S_NORMAL (ROB3, 'C', 4, A_Chase, &States[S_INQ_CHASE+4]),
|
||||
S_NORMAL (ROB3, 'D', 4, A_Chase, &States[S_INQ_CHASE+5]),
|
||||
S_NORMAL (ROB3, 'D', 4, A_Chase, &States[S_INQ_CHASE+6]),
|
||||
S_NORMAL (ROB3, 'E', 3, A_InquisitorWalk, &States[S_INQ_CHASE+7]),
|
||||
S_NORMAL (ROB3, 'E', 3, A_InquisitorDecide, &States[S_INQ_CHASE]),
|
||||
|
||||
#define S_INQ_ATK (S_INQ_CHASE+8)
|
||||
S_NORMAL (ROB3, 'A', 2, A_InquisitorDecide, &States[S_INQ_ATK+1]),
|
||||
S_NORMAL (ROB3, 'F', 6, A_FaceTarget, &States[S_INQ_ATK+2]),
|
||||
S_BRIGHT (ROB3, 'G', 8, A_ReaverRanged, &States[S_INQ_ATK+3]),
|
||||
S_NORMAL (ROB3, 'G', 8, A_ReaverRanged, &States[S_INQ_CHASE]),
|
||||
|
||||
#define S_INQ_ATK2 (S_INQ_ATK+4)
|
||||
S_NORMAL (ROB3, 'K', 12, A_FaceTarget, &States[S_INQ_ATK2+1]),
|
||||
S_BRIGHT (ROB3, 'J', 6, A_InquisitorAttack, &States[S_INQ_ATK2+2]),
|
||||
S_NORMAL (ROB3, 'K', 12, NULL, &States[S_INQ_CHASE]),
|
||||
|
||||
#define S_INQ_BAR (S_INQ_ATK2+3)
|
||||
S_BRIGHT (ROB3, 'H', 8, A_InquisitorJump, &States[S_INQ_BAR+1]),
|
||||
S_BRIGHT (ROB3, 'I', 4, A_InquisitorCheckLand, &States[S_INQ_BAR+2]),
|
||||
S_BRIGHT (ROB3, 'H', 4, A_InquisitorCheckLand, &States[S_INQ_BAR+1]),
|
||||
|
||||
#define S_INQ_DIE (S_INQ_BAR+3)
|
||||
S_NORMAL (ROB3, 'L', 0, A_ShutUp, &States[S_INQ_DIE+1]),
|
||||
S_NORMAL (ROB3, 'L', 4, A_TossGib, &States[S_INQ_DIE+2]),
|
||||
S_NORMAL (ROB3, 'M', 4, A_Scream, &States[S_INQ_DIE+3]),
|
||||
S_NORMAL (ROB3, 'N', 4, A_TossGib, &States[S_INQ_DIE+4]),
|
||||
S_BRIGHT (ROB3, 'O', 4, A_ExplodeAndAlert, &States[S_INQ_DIE+5]),
|
||||
S_BRIGHT (ROB3, 'P', 4, A_TossGib, &States[S_INQ_DIE+6]),
|
||||
S_BRIGHT (ROB3, 'Q', 4, A_NoBlocking, &States[S_INQ_DIE+7]),
|
||||
S_NORMAL (ROB3, 'R', 4, A_TossGib, &States[S_INQ_DIE+8]),
|
||||
S_NORMAL (ROB3, 'S', 4, A_TossGib, &States[S_INQ_DIE+9]),
|
||||
S_NORMAL (ROB3, 'T', 4, A_TossGib, &States[S_INQ_DIE+10]),
|
||||
S_NORMAL (ROB3, 'U', 4, A_TossGib, &States[S_INQ_DIE+11]),
|
||||
S_NORMAL (ROB3, 'V', 4, A_TossGib, &States[S_INQ_DIE+12]),
|
||||
S_BRIGHT (ROB3, 'W', 4, A_ExplodeAndAlert, &States[S_INQ_DIE+13]),
|
||||
S_BRIGHT (ROB3, 'X', 4, A_TossGib, &States[S_INQ_DIE+14]),
|
||||
S_BRIGHT (ROB3, 'Y', 4, A_TossGib, &States[S_INQ_DIE+15]),
|
||||
S_NORMAL (ROB3, 'Z', 4, A_TossGib, &States[S_INQ_DIE+16]),
|
||||
S_NORMAL (ROB3, '[', 4, A_TossGib, &States[S_INQ_DIE+17]),
|
||||
S_NORMAL (ROB3, '\\', 3, A_TossGib, &States[S_INQ_DIE+18]),
|
||||
S_BRIGHT (ROB3, ']', 3, A_ExplodeAndAlert, &States[S_INQ_DIE+19]),
|
||||
S_BRIGHT (RBB3, 'A', 3, A_TossArm, &States[S_INQ_DIE+20]),
|
||||
S_BRIGHT (RBB3, 'B', 3, A_TossGib, &States[S_INQ_DIE+21]),
|
||||
S_NORMAL (RBB3, 'C', 3, A_TossGib, &States[S_INQ_DIE+22]),
|
||||
S_NORMAL (RBB3, 'D', 3, A_TossGib, &States[S_INQ_DIE+23]),
|
||||
S_NORMAL (RBB3, 'E', -1, NULL, NULL),
|
||||
// The Inquisitor called A_BossDeath in Strife, but A_BossDeath doesn't
|
||||
// do anything for it, so there's no reason to call it.
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AInquisitor, Strife, 16, 0)
|
||||
PROP_StrifeType (93)
|
||||
PROP_SpawnHealth (1000)
|
||||
PROP_SpawnState (S_INQ_STND)
|
||||
PROP_SeeState (S_INQ_CHASE)
|
||||
PROP_MissileState (S_INQ_ATK)
|
||||
PROP_DeathState (S_INQ_DIE)
|
||||
PROP_SpeedFixed (12)
|
||||
PROP_RadiusFixed (40)
|
||||
PROP_HeightFixed (110)
|
||||
PROP_MassLong(0x7fffffff)
|
||||
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_DROPOFF|MF_NOBLOOD|MF_COUNTKILL)
|
||||
PROP_Flags2 (MF2_BOSS|MF2_FLOORCLIP|MF2_PASSMOBJ|MF2_PUSHWALL|MF2_MCROSS)
|
||||
PROP_Flags3 (MF3_DONTMORPH|MF3_NORADIUSDMG)
|
||||
PROP_MaxDropOffHeight (32)
|
||||
PROP_MinMissileChance (150)
|
||||
PROP_SeeSound ("inquisitor/sight")
|
||||
PROP_DeathSound ("inquisitor/death")
|
||||
PROP_ActiveSound ("inquisitor/active")
|
||||
PROP_Obituary ("$OB_INQUISITOR")
|
||||
END_DEFAULTS
|
||||
|
||||
// Inquisitor Shot ----------------------------------------------------------
|
||||
|
||||
class AInquisitorShot : public AActor
|
||||
{
|
||||
DECLARE_ACTOR (AInquisitorShot, AActor)
|
||||
public:
|
||||
void GetExplodeParms (int &damage, int &dist, bool &hurtSource);
|
||||
};
|
||||
|
||||
FState AInquisitorShot::States[] =
|
||||
{
|
||||
S_NORMAL (UBAM, 'A', 3, A_Countdown, &States[1]),
|
||||
S_NORMAL (UBAM, 'B', 3, A_Countdown, &States[0]),
|
||||
|
||||
S_BRIGHT (BNG2, 'A', 4, A_ExplodeAndAlert, &States[3]),
|
||||
S_BRIGHT (BNG2, 'B', 4, NULL, &States[4]),
|
||||
S_BRIGHT (BNG2, 'C', 4, NULL, &States[5]),
|
||||
S_BRIGHT (BNG2, 'D', 4, NULL, &States[6]),
|
||||
S_BRIGHT (BNG2, 'E', 4, NULL, &States[7]),
|
||||
S_BRIGHT (BNG2, 'F', 4, NULL, &States[8]),
|
||||
S_BRIGHT (BNG2, 'G', 4, NULL, &States[9]),
|
||||
S_BRIGHT (BNG2, 'H', 4, NULL, &States[10]),
|
||||
S_BRIGHT (BNG2, 'I', 4, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AInquisitorShot, Strife, -1, 0)
|
||||
PROP_StrifeType (108)
|
||||
PROP_SpawnState (0)
|
||||
PROP_DeathState (2)
|
||||
PROP_ReactionTime (15)
|
||||
PROP_SpeedFixed (25)
|
||||
PROP_RadiusFixed (13)
|
||||
PROP_HeightFixed (13)
|
||||
PROP_Mass (15)
|
||||
PROP_Flags (MF_NOBLOCKMAP|MF_DROPOFF|MF_MISSILE)
|
||||
PROP_Flags2 (MF2_NOTELEPORT)
|
||||
PROP_Flags4 (MF4_STRIFEDAMAGE)
|
||||
PROP_MaxStepHeight (4)
|
||||
PROP_SeeSound ("inquisitor/attack")
|
||||
PROP_DeathSound ("inquisitor/atkexplode")
|
||||
END_DEFAULTS
|
||||
|
||||
void AInquisitorShot::GetExplodeParms (int &damage, int &dist, bool &hurtSource)
|
||||
{
|
||||
damage = dist = 192;
|
||||
RenderStyle = STYLE_Add;
|
||||
}
|
||||
|
||||
// The Dead Inquisitor's Detached Arm ---------------------------------------
|
||||
|
||||
class AInquisitorArm : public AActor
|
||||
{
|
||||
DECLARE_ACTOR (AInquisitorArm, AActor)
|
||||
};
|
||||
|
||||
FState AInquisitorArm::States[] =
|
||||
{
|
||||
S_BRIGHT (RBB3, 'F', 5, NULL, &States[1]),
|
||||
S_BRIGHT (RBB3, 'G', 5, NULL, &States[2]),
|
||||
S_NORMAL (RBB3, 'H', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AInquisitorArm, Strife, -1, 0)
|
||||
PROP_StrifeType (94)
|
||||
PROP_SpawnState (0)
|
||||
PROP_SpeedFixed (25)
|
||||
PROP_Flags (MF_NOBLOCKMAP|MF_NOCLIP|MF_NOBLOOD)
|
||||
END_DEFAULTS
|
||||
|
||||
void A_InquisitorWalk (AActor *self)
|
||||
{
|
||||
S_Sound (self, CHAN_BODY, "inquisitor/walk", 1, ATTN_NORM);
|
||||
|
@ -201,13 +30,13 @@ void A_InquisitorDecide (AActor *self)
|
|||
A_FaceTarget (self);
|
||||
if (!InquisitorCheckDistance (self))
|
||||
{
|
||||
self->SetState (&AInquisitor::States[S_INQ_ATK2]);
|
||||
self->SetState (self->FindState("Grenade"));
|
||||
}
|
||||
if (self->target->z != self->z)
|
||||
{
|
||||
if (self->z + self->height + 54*FRACUNIT < self->ceilingz)
|
||||
{
|
||||
self->SetState (&AInquisitor::States[S_INQ_BAR]);
|
||||
self->SetState (self->FindState("Jump"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -223,13 +52,13 @@ void A_InquisitorAttack (AActor *self)
|
|||
|
||||
self->z += 32*FRACBITS;
|
||||
self->angle -= ANGLE_45/32;
|
||||
proj = P_SpawnMissileZAimed (self, self->z, self->target, RUNTIME_CLASS(AInquisitorShot));
|
||||
proj = P_SpawnMissileZAimed (self, self->z, self->target, PClass::FindClass("InquisitorShot"));
|
||||
if (proj != NULL)
|
||||
{
|
||||
proj->momz += 9*FRACUNIT;
|
||||
}
|
||||
self->angle += ANGLE_45/16;
|
||||
proj = P_SpawnMissileZAimed (self, self->z, self->target, RUNTIME_CLASS(AInquisitorShot));
|
||||
proj = P_SpawnMissileZAimed (self, self->z, self->target, PClass::FindClass("InquisitorShot"));
|
||||
if (proj != NULL)
|
||||
{
|
||||
proj->momz += 16*FRACUNIT;
|
||||
|
@ -275,7 +104,7 @@ void A_InquisitorCheckLand (AActor *self)
|
|||
self->SetState (self->SeeState);
|
||||
self->reactiontime = 0;
|
||||
self->flags &= ~MF_NOGRAVITY;
|
||||
A_ShutUp (self);
|
||||
S_StopSound (self, CHAN_ITEM);
|
||||
return;
|
||||
}
|
||||
if (!S_IsActorPlayingSomething (self, CHAN_ITEM, -1))
|
||||
|
@ -287,14 +116,10 @@ void A_InquisitorCheckLand (AActor *self)
|
|||
|
||||
void A_TossArm (AActor *self)
|
||||
{
|
||||
AActor *foo = Spawn<AInquisitorArm> (self->x, self->y, self->z + 24*FRACUNIT, ALLOW_REPLACE);
|
||||
AActor *foo = Spawn("InquisitorArm", self->x, self->y, self->z + 24*FRACUNIT, ALLOW_REPLACE);
|
||||
foo->angle = self->angle - ANGLE_90 + (pr_inq.Random2() << 22);
|
||||
foo->momx = FixedMul (foo->Speed, finecosine[foo->angle >> ANGLETOFINESHIFT]) >> 3;
|
||||
foo->momy = FixedMul (foo->Speed, finesine[foo->angle >> ANGLETOFINESHIFT]) >> 3;
|
||||
foo->momz = pr_inq() << 10;
|
||||
}
|
||||
|
||||
void A_ShutUp (AActor *self)
|
||||
{
|
||||
S_StopSound (self, CHAN_ITEM);
|
||||
}
|
||||
|
|
|
@ -164,7 +164,7 @@ void AMacil2::NoBlockingSet ()
|
|||
|
||||
int AMacil2::TakeSpecialDamage (AActor *inflictor, AActor *source, int damage, FName damagetype)
|
||||
{
|
||||
if (inflictor != NULL && inflictor->IsKindOf (RUNTIME_CLASS(ASpectralLightningV1)))
|
||||
if (inflictor != NULL && inflictor->GetClass()->TypeName == NAME_SpectralLightningV1)
|
||||
return -1;
|
||||
|
||||
return Super::TakeSpecialDamage(inflictor, source, damage, damagetype);
|
||||
|
|
|
@ -81,7 +81,7 @@ void A_WakeOracleSpectre (AActor *self)
|
|||
|
||||
int AOracle::TakeSpecialDamage (AActor *inflictor, AActor *source, int damage, FName damagetype)
|
||||
{
|
||||
if (inflictor != NULL && inflictor->IsKindOf (RUNTIME_CLASS(ASpectralLightningV1)))
|
||||
if (inflictor != NULL && inflictor->GetClass()->TypeName == NAME_SpectralLightningV1)
|
||||
return -1;
|
||||
return Super::TakeSpecialDamage(inflictor, source, damage, damagetype);
|
||||
}
|
||||
|
|
|
@ -248,7 +248,7 @@ void A_SpotLightning (AActor *self)
|
|||
if (self->target == NULL)
|
||||
return;
|
||||
|
||||
spot = Spawn<ASpectralLightningSpot> (self->target->x, self->target->y, ONFLOORZ, ALLOW_REPLACE);
|
||||
spot = Spawn("SpectralLightningSpot", self->target->x, self->target->y, ONFLOORZ, ALLOW_REPLACE);
|
||||
if (spot != NULL)
|
||||
{
|
||||
spot->threshold = 25;
|
||||
|
|
|
@ -7,284 +7,44 @@
|
|||
#include "m_random.h"
|
||||
#include "a_strifeglobal.h"
|
||||
|
||||
void A_SpectralLightning (AActor *);
|
||||
AActor *P_SpawnSubMissile (AActor *source, const PClass *type, AActor *target);
|
||||
|
||||
void A_AlertMonsters (AActor *);
|
||||
void A_Countdown (AActor *);
|
||||
void A_Tracer2 (AActor *);
|
||||
AActor *P_SpawnSubMissile (AActor *source, PClass *type, AActor *target);
|
||||
|
||||
// Container for all spectral lightning deaths ------------------------------
|
||||
|
||||
FState ASpectralLightningBase::States[] =
|
||||
class ASpectralMonster : public AActor
|
||||
{
|
||||
S_NORMAL (ZAP1, 'B', 3, A_Explode, &States[1]),
|
||||
S_NORMAL (ZAP1, 'A', 3, A_AlertMonsters, &States[2]),
|
||||
S_NORMAL (ZAP1, 'B', 3, NULL, &States[3]),
|
||||
S_NORMAL (ZAP1, 'C', 3, NULL, &States[4]),
|
||||
S_NORMAL (ZAP1, 'D', 3, NULL, &States[5]),
|
||||
S_NORMAL (ZAP1, 'E', 3, NULL, &States[6]),
|
||||
S_NORMAL (ZAP1, 'F', 3, NULL, &States[7]),
|
||||
S_NORMAL (ZAP1, 'E', 3, NULL, &States[8]),
|
||||
S_NORMAL (ZAP1, 'D', 2, NULL, &States[9]),
|
||||
S_NORMAL (ZAP1, 'C', 2, NULL, &States[10]),
|
||||
S_NORMAL (ZAP1, 'B', 2, NULL, &States[11]),
|
||||
S_NORMAL (ZAP1, 'A', 1, NULL, NULL),
|
||||
DECLARE_CLASS (ASpectralMonster, AActor)
|
||||
public:
|
||||
void Touch (AActor *toucher);
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (ASpectralLightningBase, Strife, -1, 0)
|
||||
PROP_DeathState (0)
|
||||
PROP_Flags2 (MF2_NOTELEPORT|MF2_IMPACT|MF2_PCROSS)
|
||||
PROP_Flags4 (MF4_STRIFEDAMAGE)
|
||||
PROP_MaxStepHeight (4)
|
||||
PROP_RenderStyle (STYLE_Add)
|
||||
PROP_SeeSound ("weapons/sigil")
|
||||
PROP_DeathSound ("weapons/sigilhit")
|
||||
END_DEFAULTS
|
||||
IMPLEMENT_CLASS (ASpectralMonster)
|
||||
|
||||
void ASpectralLightningBase::GetExplodeParms (int &damage, int &dist, bool &hurtSource)
|
||||
void ASpectralMonster::Touch (AActor *toucher)
|
||||
{
|
||||
damage = dist = 32;
|
||||
P_DamageMobj (toucher, this, this, 5, NAME_Melee);
|
||||
}
|
||||
|
||||
// Spectral Lightning death that does not explode ---------------------------
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (ASpectralLightningDeath1, Strife, -1, 0)
|
||||
PROP_DeathState (1)
|
||||
END_DEFAULTS
|
||||
|
||||
// Spectral Lightning death that does not alert monsters --------------------
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (ASpectralLightningDeath2, Strife, -1, 0)
|
||||
PROP_DeathState (2)
|
||||
END_DEFAULTS
|
||||
|
||||
// Spectral Lightning death that is shorter than the rest -------------------
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (ASpectralLightningDeathShort, Strife, -1, 0)
|
||||
PROP_DeathState (6)
|
||||
END_DEFAULTS
|
||||
|
||||
// Spectral Lightning (Ball Shaped #1) --------------------------------------
|
||||
|
||||
FState ASpectralLightningBall1::States[] =
|
||||
{
|
||||
S_BRIGHT (ZOT3, 'A', 4, NULL, &States[1]),
|
||||
S_BRIGHT (ZOT3, 'B', 4, NULL, &States[2]),
|
||||
S_BRIGHT (ZOT3, 'C', 4, NULL, &States[3]),
|
||||
S_BRIGHT (ZOT3, 'D', 4, NULL, &States[4]),
|
||||
S_BRIGHT (ZOT3, 'E', 4, NULL, &States[0]),
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (ASpectralLightningBall1, Strife, -1, 0)
|
||||
PROP_StrifeType (80)
|
||||
PROP_SpawnState (0)
|
||||
PROP_SpeedFixed (30)
|
||||
PROP_RadiusFixed (8)
|
||||
PROP_HeightFixed (16)
|
||||
PROP_Damage (70)
|
||||
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
|
||||
PROP_Flags4 (MF4_SPECTRAL|MF4_STRIFEDAMAGE)
|
||||
PROP_MaxStepHeight (4)
|
||||
END_DEFAULTS
|
||||
|
||||
// Spectral Lightning (Ball Shaped #2) --------------------------------------
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (ASpectralLightningBall2, Strife, -1, 0)
|
||||
PROP_StrifeType (81)
|
||||
PROP_Damage (20)
|
||||
END_DEFAULTS
|
||||
|
||||
// Spectral Lightning (Horizontal #1) ---------------------------------------
|
||||
|
||||
void A_SpectralLightningTail (AActor *);
|
||||
|
||||
FState ASpectralLightningH1::States[] =
|
||||
{
|
||||
S_BRIGHT (ZAP6, 'A', 4, NULL, &States[1]),
|
||||
S_BRIGHT (ZAP6, 'B', 4, A_SpectralLightningTail, &States[2]),
|
||||
S_BRIGHT (ZAP6, 'C', 4, A_SpectralLightningTail, &States[0])
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (ASpectralLightningH1, Strife, -1, 0)
|
||||
PROP_StrifeType (78)
|
||||
PROP_SpawnState (0)
|
||||
PROP_SpeedFixed (30)
|
||||
PROP_RadiusFixed (8)
|
||||
PROP_HeightFixed (16)
|
||||
PROP_Damage (70)
|
||||
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
|
||||
PROP_Flags4 (MF4_SPECTRAL|MF4_STRIFEDAMAGE)
|
||||
PROP_MaxStepHeight (4)
|
||||
END_DEFAULTS
|
||||
|
||||
// Spectral Lightning (Horizontal #2) -------------------------------------
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (ASpectralLightningH2, Strife, -1, 0)
|
||||
PROP_StrifeType (79)
|
||||
PROP_Damage (20)
|
||||
END_DEFAULTS
|
||||
|
||||
// Spectral Lightning (Horizontal #3) -------------------------------------
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (ASpectralLightningH3, Strife, -1, 0)
|
||||
PROP_StrifeType (82)
|
||||
PROP_Damage (10)
|
||||
END_DEFAULTS
|
||||
|
||||
// ASpectralLightningHTail --------------------------------------------------
|
||||
|
||||
FState ASpectralLightningHTail::States[] =
|
||||
{
|
||||
S_BRIGHT (ZAP6, 'A', 5, NULL, &States[1]),
|
||||
S_BRIGHT (ZAP6, 'B', 5, NULL, &States[2]),
|
||||
S_BRIGHT (ZAP6, 'C', 5, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (ASpectralLightningHTail, Strife, -1, 0)
|
||||
PROP_SpawnState (0)
|
||||
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF)
|
||||
PROP_Flags4Clear (MF4_SPECTRAL)
|
||||
PROP_RenderStyle (STYLE_Add)
|
||||
END_DEFAULTS
|
||||
|
||||
void A_SpectralLightningTail (AActor *self)
|
||||
{
|
||||
AActor *foo = Spawn<ASpectralLightningHTail> (self->x - self->momx, self->y - self->momy, self->z, ALLOW_REPLACE);
|
||||
AActor *foo = Spawn("SpectralLightningHTail", self->x - self->momx, self->y - self->momy, self->z, ALLOW_REPLACE);
|
||||
|
||||
foo->angle = self->angle;
|
||||
foo->health = self->health;
|
||||
}
|
||||
|
||||
// Spectral Lightning (Big Ball #1) -----------------------------------------
|
||||
|
||||
void A_SpectralBigBallLightning (AActor *);
|
||||
|
||||
FState ASpectralLightningBigBall1::States[] =
|
||||
{
|
||||
S_BRIGHT (ZAP7, 'A', 4, A_SpectralBigBallLightning, &States[1]),
|
||||
S_BRIGHT (ZAP7, 'B', 4, A_SpectralBigBallLightning, &States[2]),
|
||||
S_BRIGHT (ZAP7, 'C', 6, A_SpectralBigBallLightning, &States[3]),
|
||||
S_BRIGHT (ZAP7, 'D', 6, A_SpectralBigBallLightning, &States[4]),
|
||||
S_BRIGHT (ZAP7, 'E', 6, A_SpectralBigBallLightning, &States[0]),
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (ASpectralLightningBigBall1, Strife, -1, 0)
|
||||
PROP_StrifeType (84)
|
||||
PROP_SpawnState (0)
|
||||
PROP_SpeedFixed (18)
|
||||
PROP_RadiusFixed (20)
|
||||
PROP_HeightFixed (40)
|
||||
PROP_Damage (130)
|
||||
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
|
||||
PROP_Flags4 (MF4_SPECTRAL|MF4_STRIFEDAMAGE)
|
||||
PROP_MaxStepHeight (4)
|
||||
END_DEFAULTS
|
||||
|
||||
|
||||
void A_SpectralBigBallLightning (AActor *self)
|
||||
{
|
||||
const PClass *cls = PClass::FindClass("SpectralLightningH3");
|
||||
if (cls)
|
||||
{
|
||||
self->angle += ANGLE_90;
|
||||
P_SpawnSubMissile (self, RUNTIME_CLASS(ASpectralLightningH3), self->target);
|
||||
P_SpawnSubMissile (self, cls, self->target);
|
||||
self->angle += ANGLE_180;
|
||||
P_SpawnSubMissile (self, RUNTIME_CLASS(ASpectralLightningH3), self->target);
|
||||
P_SpawnSubMissile (self, cls, self->target);
|
||||
self->angle += ANGLE_90;
|
||||
P_SpawnSubMissile (self, RUNTIME_CLASS(ASpectralLightningH3), self->target);
|
||||
P_SpawnSubMissile (self, cls, self->target);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Spectral Lightning (Big Ball #2 - less damaging) -------------------------
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (ASpectralLightningBigBall2, Strife, -1, 0)
|
||||
PROP_StrifeType (85)
|
||||
PROP_Damage (30)
|
||||
END_DEFAULTS
|
||||
|
||||
// Sigil Lightning (Vertical #1) --------------------------------------------
|
||||
|
||||
FState ASpectralLightningV1::States[] =
|
||||
{
|
||||
S_BRIGHT (ZOT1, 'A', 4, NULL, &States[1]),
|
||||
S_BRIGHT (ZOT1, 'B', 4, NULL, &States[2]),
|
||||
S_BRIGHT (ZOT1, 'C', 6, NULL, &States[3]),
|
||||
S_BRIGHT (ZOT1, 'D', 6, NULL, &States[4]),
|
||||
S_BRIGHT (ZOT1, 'E', 6, NULL, &States[0]),
|
||||
// Apparent Strife bug: The last state for this sprite used frame D
|
||||
// instead of E, even though E is in the wad.
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (ASpectralLightningV1, Strife, -1, 0)
|
||||
PROP_StrifeType (86)
|
||||
PROP_SpawnState (0)
|
||||
PROP_SpeedFixed (22)
|
||||
PROP_RadiusFixed (8)
|
||||
PROP_HeightFixed (24)
|
||||
PROP_Damage (100)
|
||||
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
|
||||
PROP_Flags4 (MF4_SPECTRAL|MF4_STRIFEDAMAGE)
|
||||
PROP_MaxStepHeight (4)
|
||||
END_DEFAULTS
|
||||
|
||||
// Sigil Lightning (Vertical #2 - less damaging) ----------------------------
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (ASpectralLightningV2, Strife, -1, 0)
|
||||
PROP_StrifeType (87)
|
||||
PROP_Damage (50)
|
||||
END_DEFAULTS
|
||||
|
||||
// Sigil Lightning Spot (roams around dropping lightning from above) --------
|
||||
|
||||
FState ASpectralLightningSpot::States[] =
|
||||
{
|
||||
S_BRIGHT (ZAP5, 'A', 4, A_Countdown, &States[1]),
|
||||
S_BRIGHT (ZAP5, 'B', 4, A_SpectralLightning, &States[2]),
|
||||
S_BRIGHT (ZAP5, 'C', 4, A_Countdown, &States[3]),
|
||||
S_BRIGHT (ZAP5, 'D', 4, A_Countdown, &States[0]),
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (ASpectralLightningSpot, Strife, -1, 0)
|
||||
PROP_StrifeType (88)
|
||||
PROP_SpawnState (0)
|
||||
PROP_SpeedFixed (18)
|
||||
PROP_ReactionTime (70)
|
||||
PROP_Flags (MF_NOBLOCKMAP)
|
||||
PROP_Flags3 (MF3_NOBLOCKMONST)
|
||||
PROP_Flags5 (MF5_NODROPOFF)
|
||||
PROP_RenderStyle (STYLE_Translucent)
|
||||
PROP_Alpha (HR_SHADOW)
|
||||
END_DEFAULTS
|
||||
|
||||
// Sigil Lightning (Big Vertical #1) ----------------------------------------
|
||||
|
||||
FState ASpectralLightningBigV1::States[] =
|
||||
{
|
||||
S_BRIGHT (ZOT2, 'A', 4, A_Tracer2, &States[1]),
|
||||
S_BRIGHT (ZOT2, 'B', 4, A_Tracer2, &States[2]),
|
||||
S_BRIGHT (ZOT2, 'C', 4, A_Tracer2, &States[3]),
|
||||
S_BRIGHT (ZOT2, 'D', 4, A_Tracer2, &States[4]),
|
||||
S_BRIGHT (ZOT2, 'E', 4, A_Tracer2, &States[0]),
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (ASpectralLightningBigV1, Strife, -1, 0)
|
||||
PROP_StrifeType (89)
|
||||
PROP_SpawnState (0)
|
||||
PROP_SpeedFixed (28)
|
||||
PROP_RadiusFixed (8)
|
||||
PROP_HeightFixed (16)
|
||||
PROP_Damage (120)
|
||||
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
|
||||
PROP_Flags4 (MF4_SPECTRAL|MF4_STRIFEDAMAGE)
|
||||
PROP_MaxStepHeight (4)
|
||||
END_DEFAULTS
|
||||
|
||||
// Actor 90 -----------------------------------------------------------------
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (ASpectralLightningBigV2, Strife, -1, 0)
|
||||
PROP_StrifeType (90)
|
||||
PROP_Damage (60)
|
||||
END_DEFAULTS
|
||||
|
||||
// "Zap 5" ------------------------------------------------------------------
|
||||
|
||||
static FRandom pr_zap5 ("Zap5");
|
||||
|
||||
|
@ -302,14 +62,14 @@ void A_SpectralLightning (AActor *self)
|
|||
x = self->x + pr_zap5.Random2(3) * FRACUNIT * 50;
|
||||
y = self->y + pr_zap5.Random2(3) * FRACUNIT * 50;
|
||||
|
||||
flash = Spawn (self->threshold > 25 ? RUNTIME_CLASS(ASpectralLightningV2) :
|
||||
RUNTIME_CLASS(ASpectralLightningV1), x, y, ONCEILINGZ, ALLOW_REPLACE);
|
||||
flash = Spawn (self->threshold > 25 ? PClass::FindClass("SpectralLightningV2") :
|
||||
PClass::FindClass("SpectralLightningV1"), x, y, ONCEILINGZ, ALLOW_REPLACE);
|
||||
|
||||
flash->target = self->target;
|
||||
flash->momz = -18*FRACUNIT;
|
||||
flash->health = self->health;
|
||||
|
||||
flash = Spawn<ASpectralLightningV2> (self->x, self->y, ONCEILINGZ, ALLOW_REPLACE);
|
||||
flash = Spawn("SpectralLightningV2", self->x, self->y, ONCEILINGZ, ALLOW_REPLACE);
|
||||
|
||||
flash->target = self->target;
|
||||
flash->momz = -18*FRACUNIT;
|
||||
|
|
|
@ -113,94 +113,4 @@ public:
|
|||
|
||||
extern const PClass *QuestItemClasses[31];
|
||||
|
||||
// Sigil/Spectral projectiles -----------------------------------------------
|
||||
|
||||
class ASpectralLightningBase : public AActor
|
||||
{
|
||||
DECLARE_ACTOR (ASpectralLightningBase, AActor)
|
||||
public:
|
||||
void GetExplodeParms (int &damage, int &dist, bool &hurtSource);
|
||||
};
|
||||
|
||||
class ASpectralLightningDeath1 : public ASpectralLightningBase
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (ASpectralLightningDeath1, ASpectralLightningBase)
|
||||
};
|
||||
|
||||
class ASpectralLightningDeath2 : public ASpectralLightningBase
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (ASpectralLightningDeath2, ASpectralLightningBase)
|
||||
};
|
||||
|
||||
class ASpectralLightningDeathShort : public ASpectralLightningBase
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (ASpectralLightningDeathShort, ASpectralLightningBase)
|
||||
};
|
||||
|
||||
class ASpectralLightningBall1 : public ASpectralLightningBase
|
||||
{
|
||||
DECLARE_ACTOR (ASpectralLightningBall1, ASpectralLightningBase)
|
||||
};
|
||||
|
||||
class ASpectralLightningBall2 : public ASpectralLightningBall1
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (ASpectralLightningBall2, ASpectralLightningBall1)
|
||||
};
|
||||
|
||||
class ASpectralLightningH1 : public ASpectralLightningBase
|
||||
{
|
||||
DECLARE_ACTOR (ASpectralLightningH1, ASpectralLightningBase)
|
||||
};
|
||||
|
||||
class ASpectralLightningH2 : public ASpectralLightningH1
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (ASpectralLightningH2, ASpectralLightningH1)
|
||||
};
|
||||
|
||||
class ASpectralLightningH3 : public ASpectralLightningH1
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (ASpectralLightningH3, ASpectralLightningH1)
|
||||
};
|
||||
|
||||
class ASpectralLightningHTail : public AActor
|
||||
{
|
||||
DECLARE_ACTOR (ASpectralLightningHTail, AActor)
|
||||
};
|
||||
|
||||
class ASpectralLightningBigBall1 : public ASpectralLightningDeath2
|
||||
{
|
||||
DECLARE_ACTOR (ASpectralLightningBigBall1, ASpectralLightningDeath2)
|
||||
};
|
||||
|
||||
class ASpectralLightningBigBall2 : public ASpectralLightningBigBall1
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (ASpectralLightningBigBall2, ASpectralLightningBigBall1)
|
||||
};
|
||||
|
||||
class ASpectralLightningV1 : public ASpectralLightningDeathShort
|
||||
{
|
||||
DECLARE_ACTOR (ASpectralLightningV1, ASpectralLightningDeathShort)
|
||||
};
|
||||
|
||||
class ASpectralLightningV2 : public ASpectralLightningV1
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (ASpectralLightningV2, ASpectralLightningV1)
|
||||
};
|
||||
|
||||
class ASpectralLightningSpot : public ASpectralLightningDeath1
|
||||
{
|
||||
DECLARE_ACTOR (ASpectralLightningSpot, ASpectralLightningDeath1)
|
||||
};
|
||||
|
||||
class ASpectralLightningBigV1 : public ASpectralLightningDeath1
|
||||
{
|
||||
DECLARE_ACTOR (ASpectralLightningBigV1, ASpectralLightningDeath1)
|
||||
};
|
||||
|
||||
class ASpectralLightningBigV2 : public ASpectralLightningBigV1
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (ASpectralLightningBigV2, ASpectralLightningBigV1)
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1371,7 +1371,7 @@ void A_FireMauler2 (AActor *self)
|
|||
//
|
||||
//============================================================================
|
||||
|
||||
AActor *P_SpawnSubMissile (AActor *source, PClass *type, AActor *target);
|
||||
AActor *P_SpawnSubMissile (AActor *source, const PClass *type, AActor *target);
|
||||
|
||||
void A_MaulerTorpedoWave (AActor *self)
|
||||
{
|
||||
|
@ -1393,7 +1393,7 @@ void A_MaulerTorpedoWave (AActor *self)
|
|||
self->z = savedz;
|
||||
}
|
||||
|
||||
AActor *P_SpawnSubMissile (AActor *source, PClass *type, AActor *target)
|
||||
AActor *P_SpawnSubMissile (AActor *source, const PClass *type, AActor *target)
|
||||
{
|
||||
AActor *other = Spawn (type, source->x, source->y, source->z, ALLOW_REPLACE);
|
||||
|
||||
|
@ -2212,7 +2212,7 @@ void A_FireSigil1 (AActor *actor)
|
|||
P_BulletSlope (actor, &linetarget);
|
||||
if (linetarget != NULL)
|
||||
{
|
||||
spot = Spawn<ASpectralLightningSpot> (linetarget->x, linetarget->y, ONFLOORZ, ALLOW_REPLACE);
|
||||
spot = Spawn("SpectralLightningSpot", linetarget->x, linetarget->y, ONFLOORZ, ALLOW_REPLACE);
|
||||
if (spot != NULL)
|
||||
{
|
||||
spot->tracer = linetarget;
|
||||
|
@ -2220,7 +2220,7 @@ void A_FireSigil1 (AActor *actor)
|
|||
}
|
||||
else
|
||||
{
|
||||
spot = Spawn<ASpectralLightningSpot> (actor->x, actor->y, actor->z, ALLOW_REPLACE);
|
||||
spot = Spawn("SpectralLightningSpot", actor->x, actor->y, actor->z, ALLOW_REPLACE);
|
||||
if (spot != NULL)
|
||||
{
|
||||
spot->momx += 28 * finecosine[actor->angle >> ANGLETOFINESHIFT];
|
||||
|
@ -2250,7 +2250,7 @@ void A_FireSigil2 (AActor *actor)
|
|||
P_DamageMobj (actor, actor, NULL, 2*4, 0, DMG_NO_ARMOR);
|
||||
S_Sound (actor, CHAN_WEAPON, "weapons/sigilcharge", 1, ATTN_NORM);
|
||||
|
||||
P_SpawnPlayerMissile (actor, RUNTIME_CLASS(ASpectralLightningH1));
|
||||
P_SpawnPlayerMissile (actor, PClass::FindClass("SpectralLightningH1"));
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
|
@ -2275,7 +2275,7 @@ void A_FireSigil3 (AActor *actor)
|
|||
for (i = 0; i < 20; ++i)
|
||||
{
|
||||
actor->angle += ANGLE_180/20;
|
||||
spot = P_SpawnSubMissile (actor, RUNTIME_CLASS(ASpectralLightningBall1), actor);
|
||||
spot = P_SpawnSubMissile (actor, PClass::FindClass("SpectralLightningBall1"), actor);
|
||||
if (spot != NULL)
|
||||
{
|
||||
spot->z = actor->z + 32*FRACUNIT;
|
||||
|
@ -2305,7 +2305,7 @@ void A_FireSigil4 (AActor *actor)
|
|||
P_BulletSlope (actor, &linetarget);
|
||||
if (linetarget != NULL)
|
||||
{
|
||||
spot = P_SpawnPlayerMissile (actor, 0,0,0, RUNTIME_CLASS(ASpectralLightningBigV1), actor->angle, &linetarget);
|
||||
spot = P_SpawnPlayerMissile (actor, 0,0,0, PClass::FindClass("SpectralLightningBigV1"), actor->angle, &linetarget);
|
||||
if (spot != NULL)
|
||||
{
|
||||
spot->tracer = linetarget;
|
||||
|
@ -2313,7 +2313,7 @@ void A_FireSigil4 (AActor *actor)
|
|||
}
|
||||
else
|
||||
{
|
||||
spot = P_SpawnPlayerMissile (actor, RUNTIME_CLASS(ASpectralLightningBigV1));
|
||||
spot = P_SpawnPlayerMissile (actor, PClass::FindClass("SpectralLightningBigV1"));
|
||||
if (spot != NULL)
|
||||
{
|
||||
spot->momx += FixedMul (spot->Speed, finecosine[actor->angle >> ANGLETOFINESHIFT]);
|
||||
|
@ -2338,7 +2338,7 @@ void A_FireSigil5 (AActor *actor)
|
|||
P_DamageMobj (actor, actor, NULL, 5*4, 0, DMG_NO_ARMOR);
|
||||
S_Sound (actor, CHAN_WEAPON, "weapons/sigilcharge", 1, ATTN_NORM);
|
||||
|
||||
P_SpawnPlayerMissile (actor, RUNTIME_CLASS(ASpectralLightningBigBall1));
|
||||
P_SpawnPlayerMissile (actor, PClass::FindClass("SpectralLightningBigBall1"));
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
|
|
|
@ -123,6 +123,14 @@ xx(StrifeGrenadeLauncher)
|
|||
xx(Mauler)
|
||||
|
||||
xx(AcolyteBlue)
|
||||
xx(SpectralLightningV1)
|
||||
|
||||
// Strife's spectres
|
||||
xx(AlienSpectre1)
|
||||
xx(AlienSpectre2)
|
||||
xx(AlienSpectre3)
|
||||
xx(AlienSpectre4)
|
||||
xx(AlienSpectre5)
|
||||
|
||||
xx(Chicken)
|
||||
xx(Pig)
|
||||
|
|
|
@ -105,6 +105,7 @@ enum
|
|||
static flagdef ActorFlags[]=
|
||||
{
|
||||
DEFINE_FLAG(MF, PICKUP, APlayerPawn, flags),
|
||||
DEFINE_FLAG(MF, SPECIAL, APlayerPawn, flags),
|
||||
DEFINE_FLAG(MF, SOLID, AActor, flags),
|
||||
DEFINE_FLAG(MF, SHOOTABLE, AActor, flags),
|
||||
DEFINE_FLAG(MF, NOSECTOR, AActor, flags),
|
||||
|
|
|
@ -75,7 +75,7 @@
|
|||
// SAVESIG should match SAVEVER.
|
||||
|
||||
// MINSAVEVER is the minimum level snapshot version that can be loaded.
|
||||
#define MINSAVEVER 1107
|
||||
#define MINSAVEVER 1114
|
||||
|
||||
#if SVN_REVISION_NUMBER < MINSAVEVER
|
||||
// Never write a savegame with a version lower than what we need
|
||||
|
|
|
@ -181,6 +181,7 @@ class Actor extends Thinker
|
|||
action native A_Feathers();
|
||||
action native A_ClassBossHealth();
|
||||
action native A_ShootGun();
|
||||
action native A_RocketInFlight();
|
||||
}
|
||||
|
||||
class Inventory extends Actor
|
||||
|
|
128
wadsrc/static/actors/strife/crusader.txt
Normal file
128
wadsrc/static/actors/strife/crusader.txt
Normal file
|
@ -0,0 +1,128 @@
|
|||
|
||||
// Crusader -----------------------------------------------------------------
|
||||
|
||||
ACTOR Crusader 3005
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 63,-1,-1
|
||||
Speed 8
|
||||
Radius 40
|
||||
Height 56
|
||||
Mass 400
|
||||
Health 400
|
||||
Painchance 128
|
||||
Monster
|
||||
+FLOORCLIP
|
||||
+DONTMORPH
|
||||
+MISSILEMORE
|
||||
+INCOMBAT
|
||||
+NOICEDEATH
|
||||
MinMissileChance 120
|
||||
MaxDropoffHeight 32
|
||||
DropItem "EnergyPod", 256, 20
|
||||
SeeSound "crusader/sight"
|
||||
PainSound "crusader/pain"
|
||||
DeathSound "crusader/death"
|
||||
ActiveSound "crusader/active"
|
||||
Obituary "$OB_CRUSADER"
|
||||
|
||||
action native A_CrusaderChoose ();
|
||||
action native A_CrusaderSweepLeft ();
|
||||
action native A_CrusaderSweepRight ();
|
||||
action native A_CrusaderRefire ();
|
||||
action native A_CrusaderDeath ();
|
||||
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
ROB2 Q 10 A_Look
|
||||
Loop
|
||||
See:
|
||||
ROB2 AABBCCDD 3 A_Chase
|
||||
Loop
|
||||
Missile:
|
||||
ROB2 E 3 A_FaceTarget
|
||||
ROB2 F 2 Bright A_CrusaderChoose
|
||||
ROB2 E 2 Bright A_CrusaderSweepLeft
|
||||
ROB2 F 3 Bright A_CrusaderSweepLeft
|
||||
ROB2 E 2 Bright A_CrusaderSweepLeft
|
||||
ROB2 F 2 Bright A_CrusaderSweepLeft
|
||||
ROB2 E 2 Bright A_CrusaderSweepRight
|
||||
ROB2 F 2 Bright A_CrusaderSweepRight
|
||||
ROB2 E 2 Bright A_CrusaderSweepRight
|
||||
ROB2 F 2 A_CrusaderRefire
|
||||
Loop
|
||||
Pain:
|
||||
ROB2 D 1 A_Pain
|
||||
Goto See
|
||||
Death:
|
||||
ROB2 G 3 A_Scream
|
||||
ROB2 H 5 A_TossGib
|
||||
ROB2 I 4 Bright A_TossGib
|
||||
ROB2 J 4 Bright A_Explode(64,64,1,1)
|
||||
ROB2 K 4 Bright A_Fall
|
||||
ROB2 L 4 A_Explode(64,64,1,1)
|
||||
ROB2 MN 4 A_TossGib
|
||||
ROB2 O 4 A_Explode(64,64,1,1)
|
||||
ROB2 P -1 A_CrusaderDeath
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Fast Flame Projectile (used by Crusader) ---------------------------------
|
||||
|
||||
ACTOR FastFlameMissile : FlameMissile
|
||||
{
|
||||
Mass 50
|
||||
Damage 1
|
||||
Speed 35
|
||||
}
|
||||
|
||||
// Crusader Missile ---------------------------------------------------------
|
||||
// This is just like the mini missile the player shoots, except it doesn't
|
||||
// explode when it dies, and it does slightly less damage for a direct hit.
|
||||
|
||||
ACTOR CrusaderMissile
|
||||
{
|
||||
Speed 20
|
||||
Radius 10
|
||||
Height 14
|
||||
Damage 7
|
||||
Projectile
|
||||
+STRIFEDAMAGE
|
||||
MaxStepHeight 4
|
||||
SeeSound "crusader/misl"
|
||||
DeathSound "crusader/mislx"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
MICR A 6 Bright A_RocketInFlight
|
||||
Loop
|
||||
Death:
|
||||
SMIS A 0 Bright A_SetTranslucent(1,1)
|
||||
SMIS A 5 Bright A_StopSoundEx("Voice")
|
||||
SMIS B 5 Bright
|
||||
SMIS C 4 Bright
|
||||
SMIS DEFG 2 Bright
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Dead Crusader ------------------------------------------------------------
|
||||
|
||||
ACTOR DeadCrusader 22
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 230
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
ROB2 N 4
|
||||
ROB2 O 4
|
||||
ROB2 P -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
145
wadsrc/static/actors/strife/inquisitor.txt
Normal file
145
wadsrc/static/actors/strife/inquisitor.txt
Normal file
|
@ -0,0 +1,145 @@
|
|||
|
||||
// Inquisitor ---------------------------------------------------------------
|
||||
|
||||
ACTOR Inquisitor 16
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 93,-1,-1
|
||||
Health 1000
|
||||
Speed 12
|
||||
Radius 40
|
||||
Height 110
|
||||
Mass 0x7fffffff
|
||||
Monster
|
||||
+DROPOFF
|
||||
+NOBLOOD
|
||||
+BOSS
|
||||
+FLOORCLIP
|
||||
+DONTMORPH
|
||||
+NORADIUSDMG
|
||||
MaxDropOffHeight 32
|
||||
MinMissileChance 150
|
||||
SeeSound "inquisitor/sight"
|
||||
DeathSound "inquisitor/death"
|
||||
ActiveSound "inquisitor/active"
|
||||
Obituary "$OB_INQUISITOR"
|
||||
|
||||
action native A_InquisitorWalk ();
|
||||
action native A_InquisitorDecide ();
|
||||
action native A_InquisitorAttack ();
|
||||
action native A_InquisitorJump ();
|
||||
action native A_InquisitorCheckLand ();
|
||||
action native A_TossArm ();
|
||||
action native A_ReaverRanged ();
|
||||
|
||||
states
|
||||
{
|
||||
Spawn:
|
||||
ROB3 AB 10 A_Look
|
||||
Loop
|
||||
See:
|
||||
ROB3 B 3 A_InquisitorWalk
|
||||
ROB3 B 3 A_Chase
|
||||
ROB3 CCDD 4 A_Chase
|
||||
ROB3 E 3 A_InquisitorWalk
|
||||
ROB3 E 3 A_InquisitorDecide
|
||||
Loop
|
||||
Missile:
|
||||
ROB3 A 2 A_InquisitorDecide
|
||||
ROB3 F 6 A_FaceTarget
|
||||
ROB3 G 8 Bright A_ReaverRanged
|
||||
ROB3 G 8 A_ReaverRanged
|
||||
Goto See
|
||||
Grenade:
|
||||
ROB3 K 12 A_FaceTarget
|
||||
ROB3 J 6 Bright A_InquisitorAttack
|
||||
ROB3 K 12
|
||||
Goto See
|
||||
Jump:
|
||||
ROB3 H 8 Bright A_InquisitorJump
|
||||
ROB3 I 4 Bright A_InquisitorCheckLand
|
||||
ROB3 H 4 Bright A_InquisitorCheckLand
|
||||
Goto Jump+1
|
||||
Death:
|
||||
ROB3 L 0 A_StopSoundEx("Item")
|
||||
ROB3 L 4 A_TossGib
|
||||
ROB3 M 4 A_Scream
|
||||
ROB3 N 4 A_TossGib
|
||||
ROB3 O 4 Bright A_Explode(128,128,1,1)
|
||||
ROB3 P 4 Bright A_TossGib
|
||||
ROB3 Q 4 Bright A_NoBlocking
|
||||
ROB3 RSTUV 4 A_TossGib
|
||||
ROB3 W 4 Bright A_Explode(128,128,1,1)
|
||||
ROB3 XY 4 Bright A_TossGib
|
||||
ROB3 Z 4 A_TossGib
|
||||
ROB3 "[" 4 A_TossGib
|
||||
ROB3 "\" 3 A_TossGib
|
||||
ROB3 "]" 3 Bright A_Explode(128,128,1,1)
|
||||
RBB3 A 3 Bright A_TossArm
|
||||
RBB3 B 3 Bright A_TossGib
|
||||
RBB3 CD 3 A_TossGib
|
||||
RBB3 E -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
// Inquisitor Shot ----------------------------------------------------------
|
||||
|
||||
ACTOR InquisitorShot
|
||||
{
|
||||
ConversationID 108,-1,-1
|
||||
ReactionTime 15
|
||||
Speed 25
|
||||
Radius 13
|
||||
Height 13
|
||||
Mass 15
|
||||
Projectile
|
||||
-ACTIVATEIMPACT
|
||||
-ACTIVATEPCROSS
|
||||
-NOGRAVITY
|
||||
+STRIFEDAMAGE
|
||||
MaxStepHeight 4
|
||||
SeeSound "inquisitor/attack"
|
||||
DeathSound "inquisitor/atkexplode"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
UBAM AB 3 A_Countdown
|
||||
Loop
|
||||
Death:
|
||||
BNG2 A 0 Bright A_SetTranslucent(1,1)
|
||||
BNG2 A 4 Bright A_Explode(192, 192, 1, 1)
|
||||
BNG2 B 4 Bright
|
||||
BNG2 C 4 Bright
|
||||
BNG2 D 4 Bright
|
||||
BNG2 E 4 Bright
|
||||
BNG2 F 4 Bright
|
||||
BNG2 G 4 Bright
|
||||
BNG2 H 4 Bright
|
||||
BNG2 I 4 Bright
|
||||
Stop
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
// The Dead Inquisitor's Detached Arm ---------------------------------------
|
||||
|
||||
ACTOR InquisitorArm
|
||||
{
|
||||
ConversationID 94
|
||||
Speed 25
|
||||
+NOBLOCKMAP
|
||||
+NOCLIP
|
||||
+NOBLOOD
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
RBB3 FG 5 Bright
|
||||
RBB3 H -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
277
wadsrc/static/actors/strife/spectral.txt
Normal file
277
wadsrc/static/actors/strife/spectral.txt
Normal file
|
@ -0,0 +1,277 @@
|
|||
|
||||
|
||||
// base for all spectral monsters which hurt when being touched--------------
|
||||
|
||||
ACTOR SpectralMonster native
|
||||
{
|
||||
Monster
|
||||
+SPECIAL
|
||||
+SPECTRAL
|
||||
+NOICEDEATH
|
||||
|
||||
action native A_SpectreChunkSmall ();
|
||||
action native A_SpectreChunkLarge ();
|
||||
action native A_Spectre2Attack ();
|
||||
action native A_Spectre3Attack ();
|
||||
action native A_Spectre4Attack ();
|
||||
action native A_Spectre5Attack ();
|
||||
action native A_SpotLightning ();
|
||||
|
||||
}
|
||||
|
||||
|
||||
// Container for all spectral lightning deaths ------------------------------
|
||||
|
||||
ACTOR SpectralLightningBase
|
||||
{
|
||||
+NOTELEPORT
|
||||
+ACTIVATEIMPACT
|
||||
+ACTIVATEPCROSS
|
||||
+STRIFEDAMAGE
|
||||
MaxStepHeight 4
|
||||
RenderStyle Add
|
||||
SeeSound "weapons/sigil"
|
||||
DeathSound "weapons/sigilhit"
|
||||
States
|
||||
{
|
||||
Death:
|
||||
ZAP1 B 3 A_Explode(32,32)
|
||||
ZAP1 A 3 A_AlertMonsters
|
||||
ZAP1 BCDEFE 3
|
||||
ZAP1 DCB 2
|
||||
ZAP1 A 1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
// Spectral Lightning death that does not explode ---------------------------
|
||||
|
||||
ACTOR SpectralLightningDeath1 : SpectralLightningBase
|
||||
{
|
||||
States
|
||||
{
|
||||
Death:
|
||||
Goto Super::Death+1
|
||||
}
|
||||
}
|
||||
|
||||
// Spectral Lightning death that does not alert monsters --------------------
|
||||
|
||||
ACTOR SpectralLightningDeath2 : SpectralLightningBase
|
||||
{
|
||||
States
|
||||
{
|
||||
Death:
|
||||
Goto Super::Death+2
|
||||
}
|
||||
}
|
||||
|
||||
// Spectral Lightning death that is shorter than the rest -------------------
|
||||
|
||||
ACTOR SpectralLightningDeathShort : SpectralLightningBase
|
||||
{
|
||||
States
|
||||
{
|
||||
Death:
|
||||
Goto Super::Death+6
|
||||
}
|
||||
}
|
||||
|
||||
// Spectral Lightning (Ball Shaped #1) --------------------------------------
|
||||
|
||||
ACTOR SpectralLightningBall1 : SpectralLightningBase
|
||||
{
|
||||
ConversationID 80,-1,-1
|
||||
Speed 30
|
||||
Radius 8
|
||||
Height 16
|
||||
Damage 70
|
||||
Projectile
|
||||
+SPECTRAL
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
ZOT3 ABCDE 4 Bright
|
||||
Loop
|
||||
}
|
||||
}
|
||||
|
||||
// Spectral Lightning (Ball Shaped #2) --------------------------------------
|
||||
|
||||
ACTOR SpectralLightningBall2 : SpectralLightningBall1
|
||||
{
|
||||
ConversationID 81,-1,-1
|
||||
Damage 20
|
||||
}
|
||||
|
||||
// Spectral Lightning (Horizontal #1) ---------------------------------------
|
||||
|
||||
ACTOR SpectralLightningH1 : SpectralLightningBase
|
||||
{
|
||||
ConversationID 78,-1,-1
|
||||
Speed 30
|
||||
Radius 8
|
||||
Height 16
|
||||
Damage 70
|
||||
Projectile
|
||||
+SPECTRAL
|
||||
|
||||
action native A_SpectralLightningTail ();
|
||||
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
ZAP6 A 4 Bright
|
||||
ZAP6 BC 4 Bright A_SpectralLightningTail
|
||||
Loop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Spectral Lightning (Horizontal #2) -------------------------------------
|
||||
|
||||
ACTOR SpectralLightningH2 : SpectralLightningH1
|
||||
{
|
||||
ConversationID 79,-1,-1
|
||||
Damage 20
|
||||
}
|
||||
|
||||
// Spectral Lightning (Horizontal #3) -------------------------------------
|
||||
|
||||
ACTOR SpectralLightningH3 : SpectralLightningH1
|
||||
{
|
||||
ConversationID 82,-1,-1
|
||||
Damage 10
|
||||
}
|
||||
|
||||
// ASpectralLightningHTail --------------------------------------------------
|
||||
|
||||
ACTOR SpectralLightningHTail
|
||||
{
|
||||
+NOBLOCKMAP
|
||||
+NOGRAVITY
|
||||
+DROPOFF
|
||||
RenderStyle Add
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
ZAP6 ABC 5 Bright
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
// Spectral Lightning (Big Ball #1) -----------------------------------------
|
||||
|
||||
ACTOR SpectralLightningBigBall1 : SpectralLightningDeath2
|
||||
{
|
||||
ConversationID 84,-1,-1
|
||||
Speed 18
|
||||
Radius 20
|
||||
Height 40
|
||||
Damage 130
|
||||
Projectile
|
||||
+SPECTRAL
|
||||
|
||||
action native A_SpectralBigBallLightning ();
|
||||
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
ZAP7 AB 4 Bright A_SpectralBigBallLightning
|
||||
ZAP7 CDE 6 Bright A_SpectralBigBallLightning
|
||||
Loop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Spectral Lightning (Big Ball #2 - less damaging) -------------------------
|
||||
|
||||
ACTOR SpectralLightningBigBall2 : SpectralLightningBigBall1
|
||||
{
|
||||
ConversationID 85,-1,-1
|
||||
Damage 30
|
||||
}
|
||||
|
||||
// Sigil Lightning (Vertical #1) --------------------------------------------
|
||||
|
||||
ACTOR SpectralLightningV1 : SpectralLightningDeathShort
|
||||
{
|
||||
ConversationID 86,-1,-1
|
||||
Speed 22
|
||||
Radius 8
|
||||
Height 24
|
||||
Damage 100
|
||||
Projectile
|
||||
+SPECTRAL
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
ZOT1 AB 4 Bright
|
||||
ZOT1 CDE 6 Bright
|
||||
Loop
|
||||
}
|
||||
}
|
||||
|
||||
// Sigil Lightning (Vertical #2 - less damaging) ----------------------------
|
||||
|
||||
ACTOR SpectralLightningV2 : SpectralLightningV1
|
||||
{
|
||||
ConversationID 87,-1,-1
|
||||
Damage 50
|
||||
}
|
||||
|
||||
// Sigil Lightning Spot (roams around dropping lightning from above) --------
|
||||
|
||||
ACTOR SpectralLightningSpot : SpectralLightningDeath1
|
||||
{
|
||||
ConversationID 88,-1,-1
|
||||
Speed 18
|
||||
ReactionTime 70
|
||||
+NOBLOCKMAP
|
||||
+NOBLOCKMONST
|
||||
+NODROPOFF
|
||||
RenderStyle Translucent
|
||||
Alpha 0.6
|
||||
|
||||
action native A_SpectralLightning ();
|
||||
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
ZAP5 A 4 Bright A_Countdown
|
||||
ZAP5 B 4 Bright A_SpectralLightning
|
||||
ZAP5 CD 4 Bright A_Countdown
|
||||
Loop
|
||||
}
|
||||
}
|
||||
|
||||
// Sigil Lightning (Big Vertical #1) ----------------------------------------
|
||||
|
||||
ACTOR SpectralLightningBigV1 : SpectralLightningDeath1
|
||||
{
|
||||
ConversationID 89,-1,-1
|
||||
Speed 28
|
||||
Radius 8
|
||||
Height 16
|
||||
Damage 120
|
||||
Projectile
|
||||
+SPECTRAL
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
ZOT2 ABCDE 4 Bright A_Tracer2
|
||||
Loop
|
||||
}
|
||||
}
|
||||
|
||||
// Actor 90 -----------------------------------------------------------------
|
||||
|
||||
ACTOR SpectralLightningBigV2 : SpectralLightningBigV1
|
||||
{
|
||||
ConversationID 90, -1, -1
|
||||
Damage 60
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -79,12 +79,9 @@ ACTOR BishopMissile
|
|||
States
|
||||
{
|
||||
Spawn:
|
||||
MISS A 4 Bright
|
||||
MISS A 4 Bright A_RocketInFlight
|
||||
MISS B 3 Bright A_Tracer2
|
||||
MISS A 0 Bright A_PlaySoundEx("misc/missileinflight", "Voice")
|
||||
MISS A 0 Bright A_SpawnItemEx("MiniMissilePuff", 0,0, random2[BishopMissile]()*0.015625)
|
||||
MISS A 4 Bright A_SpawnItemEx("RocketTrail", -momx,-momy,0, 0,0,1)
|
||||
Goto Spawn+1
|
||||
Loop
|
||||
Death:
|
||||
SMIS A 0 Bright A_SetTranslucent(1,1)
|
||||
SMIS A 0 Bright A_StopSoundEx("Voice")
|
||||
|
|
|
@ -98,8 +98,11 @@
|
|||
#include "actors/hexen/clericstaff.txt"
|
||||
|
||||
#include "actors/strife/strifeplayer.txt"
|
||||
#include "actors/strife/spectral.txt"
|
||||
#include "actors/strife/acolyte.txt"
|
||||
#include "actors/strife/beggars.txt"
|
||||
#include "actors/strife/crusader.txt"
|
||||
#include "actors/strife/inquisitor.txt"
|
||||
#include "actors/strife/merchants.txt"
|
||||
#include "actors/strife/peasants.txt"
|
||||
#include "actors/strife/strifebishop.txt"
|
||||
|
|
Loading…
Reference in a new issue