diff --git a/docs/rh-log.txt b/docs/rh-log.txt index 68b05f9c2..abc195faf 100644 --- a/docs/rh-log.txt +++ b/docs/rh-log.txt @@ -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. diff --git a/src/codepointers.h b/src/codepointers.h index be9d179e7..b51a8f9ca 100644 --- a/src/codepointers.h +++ b/src/codepointers.h @@ -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) diff --git a/src/g_strife/a_alienspectres.cpp b/src/g_strife/a_alienspectres.cpp index 8a0c62874..5a0e23192 100644 --- a/src/g_strife/a_alienspectres.cpp +++ b/src/g_strife/a_alienspectres.cpp @@ -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 (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); diff --git a/src/g_strife/a_crusader.cpp b/src/g_strife/a_crusader.cpp index 58bf70b7c..0de04b76a 100644 --- a/src/g_strife/a_crusader.cpp +++ b/src/g_strife/a_crusader.cpp @@ -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 diff --git a/src/g_strife/a_inquisitor.cpp b/src/g_strife/a_inquisitor.cpp index 41219f744..ceff7abb8 100644 --- a/src/g_strife/a_inquisitor.cpp +++ b/src/g_strife/a_inquisitor.cpp @@ -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 (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); -} diff --git a/src/g_strife/a_macil.cpp b/src/g_strife/a_macil.cpp index 6a3e8d1fb..782f767dd 100644 --- a/src/g_strife/a_macil.cpp +++ b/src/g_strife/a_macil.cpp @@ -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); diff --git a/src/g_strife/a_oracle.cpp b/src/g_strife/a_oracle.cpp index bca209bbc..e30b6e722 100644 --- a/src/g_strife/a_oracle.cpp +++ b/src/g_strife/a_oracle.cpp @@ -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); } diff --git a/src/g_strife/a_programmer.cpp b/src/g_strife/a_programmer.cpp index 71deaef5f..65f07a4ed 100644 --- a/src/g_strife/a_programmer.cpp +++ b/src/g_strife/a_programmer.cpp @@ -248,7 +248,7 @@ void A_SpotLightning (AActor *self) if (self->target == NULL) return; - spot = Spawn (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; diff --git a/src/g_strife/a_spectral.cpp b/src/g_strife/a_spectral.cpp index 1621fab53..157dc1214 100644 --- a/src/g_strife/a_spectral.cpp +++ b/src/g_strife/a_spectral.cpp @@ -7,285 +7,45 @@ #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 (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) { - self->angle += ANGLE_90; - P_SpawnSubMissile (self, RUNTIME_CLASS(ASpectralLightningH3), self->target); - self->angle += ANGLE_180; - P_SpawnSubMissile (self, RUNTIME_CLASS(ASpectralLightningH3), self->target); - self->angle += ANGLE_90; - P_SpawnSubMissile (self, RUNTIME_CLASS(ASpectralLightningH3), self->target); + const PClass *cls = PClass::FindClass("SpectralLightningH3"); + if (cls) + { + self->angle += ANGLE_90; + P_SpawnSubMissile (self, cls, self->target); + self->angle += ANGLE_180; + P_SpawnSubMissile (self, cls, self->target); + self->angle += ANGLE_90; + 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"); void A_SpectralLightning (AActor *self) @@ -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 (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; diff --git a/src/g_strife/a_strifeglobal.h b/src/g_strife/a_strifeglobal.h index bc485614a..d57570cd2 100644 --- a/src/g_strife/a_strifeglobal.h +++ b/src/g_strife/a_strifeglobal.h @@ -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 diff --git a/src/g_strife/a_strifeweapons.cpp b/src/g_strife/a_strifeweapons.cpp index 0b7fbd0e4..61d0dd3e2 100644 --- a/src/g_strife/a_strifeweapons.cpp +++ b/src/g_strife/a_strifeweapons.cpp @@ -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 (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 (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")); } //============================================================================ diff --git a/src/namedef.h b/src/namedef.h index a0af2bf49..036a2149e 100644 --- a/src/namedef.h +++ b/src/namedef.h @@ -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) diff --git a/src/thingdef/thingdef_properties.cpp b/src/thingdef/thingdef_properties.cpp index 24a18f267..3da687db0 100644 --- a/src/thingdef/thingdef_properties.cpp +++ b/src/thingdef/thingdef_properties.cpp @@ -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), diff --git a/src/version.h b/src/version.h index 6cb203d9e..f69331c88 100644 --- a/src/version.h +++ b/src/version.h @@ -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 diff --git a/wadsrc/static/actors/nativeclasses.txt b/wadsrc/static/actors/nativeclasses.txt index 683baae0e..508e4790e 100644 --- a/wadsrc/static/actors/nativeclasses.txt +++ b/wadsrc/static/actors/nativeclasses.txt @@ -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 diff --git a/wadsrc/static/actors/strife/crusader.txt b/wadsrc/static/actors/strife/crusader.txt new file mode 100644 index 000000000..97f705f66 --- /dev/null +++ b/wadsrc/static/actors/strife/crusader.txt @@ -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 + } +} + diff --git a/wadsrc/static/actors/strife/inquisitor.txt b/wadsrc/static/actors/strife/inquisitor.txt new file mode 100644 index 000000000..e792e5803 --- /dev/null +++ b/wadsrc/static/actors/strife/inquisitor.txt @@ -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 + } +} + + + diff --git a/wadsrc/static/actors/strife/spectral.txt b/wadsrc/static/actors/strife/spectral.txt new file mode 100644 index 000000000..a19c60bfa --- /dev/null +++ b/wadsrc/static/actors/strife/spectral.txt @@ -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 +} + + + + diff --git a/wadsrc/static/actors/strife/strifebishop.txt b/wadsrc/static/actors/strife/strifebishop.txt index 22d613c47..427483864 100644 --- a/wadsrc/static/actors/strife/strifebishop.txt +++ b/wadsrc/static/actors/strife/strifebishop.txt @@ -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") diff --git a/wadsrc/static/decorate.txt b/wadsrc/static/decorate.txt index cab284bec..024079b4c 100644 --- a/wadsrc/static/decorate.txt +++ b/wadsrc/static/decorate.txt @@ -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"