From c8538efda9272b3fdc6a60d08a6d50e0c176e4d7 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Wed, 6 Aug 2008 17:49:22 +0000 Subject: [PATCH] - Fixed a few minor DECORATE bugs. - Changed coordinate storage for EntityBoss so that it works properly even when the pod is not used to spawn it. - Converted Strife's Spectres and Entity to DECORATE. SVN r1117 (trunk) --- docs/rh-log.txt | 6 + src/codepointers.h | 8 +- src/g_strife/a_alienspectres.cpp | 385 +----------------- src/g_strife/a_entityboss.cpp | 329 ++------------- src/g_strife/a_oracle.cpp | 2 +- src/g_strife/a_strifeglobal.h | 14 - wadsrc/static/actors/heretic/hereticweaps.txt | 7 +- wadsrc/static/actors/hexen/clericflame.txt | 1 - wadsrc/static/actors/strife/alienspectres.txt | 212 ++++++++++ wadsrc/static/actors/strife/entityboss.txt | 207 ++++++++++ wadsrc/static/actors/strife/spectral.txt | 4 - wadsrc/static/decorate.txt | 2 + 12 files changed, 485 insertions(+), 692 deletions(-) create mode 100644 wadsrc/static/actors/strife/alienspectres.txt create mode 100644 wadsrc/static/actors/strife/entityboss.txt diff --git a/docs/rh-log.txt b/docs/rh-log.txt index 5b9f3f23b..2cbd8392e 100644 --- a/docs/rh-log.txt +++ b/docs/rh-log.txt @@ -1,3 +1,9 @@ +August 6, 2008 (Changes by Graf Zahl) +- Fixed a few minor DECORATE bugs. +- Changed coordinate storage for EntityBoss so that it works properly even + when the pod is not used to spawn it. +- Converted Strife's Spectres and Entity to DECORATE. + August 6, 2008 (SBARINfO update) - Added: fullscreenoffsets flag for status bars. This changes the coordinate system to be relative to the top left corner of the screen. This is useful diff --git a/src/codepointers.h b/src/codepointers.h index 44a5efa37..2c24c2903 100644 --- a/src/codepointers.h +++ b/src/codepointers.h @@ -261,11 +261,13 @@ ACTOR(SpectralBigBallLightning) ACTOR(SpectralLightning) ACTOR(SpectreChunkSmall) ACTOR(SpectreChunkLarge) -ACTOR(Spectre2Attack) ACTOR(Spectre3Attack) -ACTOR(Spectre4Attack) -ACTOR(Spectre5Attack) ACTOR(SpotLightning) +ACTOR(AlienSpectreDeath) +ACTOR(EntityDeath) +ACTOR(EntityAttack) +ACTOR(SubEntityDeath) +ACTOR(SpawnEntity) // 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 5a0e23192..82bd1ae60 100644 --- a/src/g_strife/a_alienspectres.cpp +++ b/src/g_strife/a_alienspectres.cpp @@ -12,337 +12,11 @@ static FRandom pr_spectrespawn ("AlienSpectreSpawn"); static FRandom pr_spectrechunk ("212e4"); -void A_SentinelBob (AActor *); -void A_SpectreMelee (AActor *); -void A_SpotLightning (AActor *); -void A_SpectreChunkSmall (AActor *); -void A_SpectreChunkLarge (AActor *); -void A_Spectre2Attack (AActor *); -void A_Spectre4Attack (AActor *); -void A_Spectre5Attack (AActor *); -void A_Spectre3Attack (AActor *); -void A_AlienSpectreDeath (AActor *); - -void A_AlertMonsters (AActor *); -void A_Tracer2 (AActor *); - AActor *P_SpawnSubMissile (AActor *source, const PClass *type, AActor *target); -// Alien Spectre 1 ----------------------------------------------------------- - -FState AAlienSpectre1::States[] = -{ -#define S_ALIEN_STND 0 // 796 - S_NORMAL (ALN1, 'A', 10, A_Look, &States[S_ALIEN_STND+1]), - S_NORMAL (ALN1, 'B', 10, A_SentinelBob, &States[S_ALIEN_STND]), - -#define S_ALIEN_CHASE (S_ALIEN_STND+2) // 798 - S_BRIGHT (ALN1, 'A', 4, A_Chase, &States[S_ALIEN_CHASE+1]), - S_BRIGHT (ALN1, 'B', 4, A_Chase, &States[S_ALIEN_CHASE+2]), - S_BRIGHT (ALN1, 'C', 4, A_SentinelBob, &States[S_ALIEN_CHASE+3]), - S_BRIGHT (ALN1, 'D', 4, A_Chase, &States[S_ALIEN_CHASE+4]), - S_BRIGHT (ALN1, 'E', 4, A_Chase, &States[S_ALIEN_CHASE+5]), - S_BRIGHT (ALN1, 'F', 4, A_Chase, &States[S_ALIEN_CHASE+6]), - S_BRIGHT (ALN1, 'G', 4, A_SentinelBob, &States[S_ALIEN_CHASE+7]), - S_BRIGHT (ALN1, 'H', 4, A_Chase, &States[S_ALIEN_CHASE+8]), - S_BRIGHT (ALN1, 'I', 4, A_Chase, &States[S_ALIEN_CHASE+9]), - S_BRIGHT (ALN1, 'J', 4, A_Chase, &States[S_ALIEN_CHASE+10]), - S_BRIGHT (ALN1, 'K', 4, A_SentinelBob, &States[S_ALIEN_CHASE]), - -#define S_ALIEN_MELEE (S_ALIEN_CHASE+11) // 809 - S_BRIGHT (ALN1, 'J', 4, A_FaceTarget, &States[S_ALIEN_MELEE+1]), - S_BRIGHT (ALN1, 'I', 4, A_SpectreMelee, &States[S_ALIEN_MELEE+2]), - S_BRIGHT (ALN1, 'H', 4, NULL, &States[S_ALIEN_CHASE+2]), - -#define S_ALIEN_MISSILE (S_ALIEN_MELEE+3) // 812 - S_BRIGHT (ALN1, 'J', 4, A_FaceTarget, &States[S_ALIEN_MISSILE+1]), - S_BRIGHT (ALN1, 'I', 4, A_SpotLightning, &States[S_ALIEN_MISSILE+2]), - S_BRIGHT (ALN1, 'H', 4, NULL, &States[S_ALIEN_CHASE+10]), - -#define S_ALIEN_PAIN (S_ALIEN_MISSILE+3) // 815 - S_NORMAL (ALN1, 'J', 2, A_Pain, &States[S_ALIEN_CHASE+6]), - -#define S_ALIEN_DIE (S_ALIEN_PAIN+1) // 816 - S_BRIGHT (AL1P, 'A', 6, A_SpectreChunkSmall, &States[S_ALIEN_DIE+1]), - S_BRIGHT (AL1P, 'B', 6, A_Scream, &States[S_ALIEN_DIE+2]), - S_BRIGHT (AL1P, 'C', 6, A_SpectreChunkSmall, &States[S_ALIEN_DIE+3]), - S_BRIGHT (AL1P, 'D', 6, NULL, &States[S_ALIEN_DIE+4]), - S_BRIGHT (AL1P, 'E', 6, NULL, &States[S_ALIEN_DIE+5]), - S_BRIGHT (AL1P, 'F', 6, A_SpectreChunkSmall, &States[S_ALIEN_DIE+6]), - S_BRIGHT (AL1P, 'G', 6, NULL, &States[S_ALIEN_DIE+7]), - S_BRIGHT (AL1P, 'H', 6, A_SpectreChunkSmall, &States[S_ALIEN_DIE+8]), - S_BRIGHT (AL1P, 'I', 6, NULL, &States[S_ALIEN_DIE+9]), - S_BRIGHT (AL1P, 'J', 6, NULL, &States[S_ALIEN_DIE+10]), - S_BRIGHT (AL1P, 'K', 6, NULL, &States[S_ALIEN_DIE+11]), - S_BRIGHT (AL1P, 'L', 5, NULL, &States[S_ALIEN_DIE+12]), - S_BRIGHT (AL1P, 'M', 5, NULL, &States[S_ALIEN_DIE+13]), - S_BRIGHT (AL1P, 'N', 5, A_SpectreChunkLarge, &States[S_ALIEN_DIE+14]), - S_BRIGHT (AL1P, 'O', 5, NULL, &States[S_ALIEN_DIE+15]), - S_BRIGHT (AL1P, 'P', 5, NULL, &States[S_ALIEN_DIE+16]), - S_BRIGHT (AL1P, 'Q', 5, NULL, &States[S_ALIEN_DIE+17]), - S_BRIGHT (AL1P, 'R', 5, A_AlienSpectreDeath, NULL), - -#define S_ALIEN2_MISSILE (S_ALIEN_DIE+18) // 852 - S_NORMAL (ALN1, 'F', 4, A_FaceTarget, &States[S_ALIEN2_MISSILE+1]), - S_NORMAL (ALN1, 'I', 4, A_Spectre2Attack, &States[S_ALIEN2_MISSILE+2]), - S_NORMAL (ALN1, 'E', 4, NULL, &States[S_ALIEN_CHASE+10]), - -#define S_ALIEN4_MISSILE (S_ALIEN2_MISSILE+3) // 884 - S_NORMAL (ALN1, 'F', 4, A_FaceTarget, &States[S_ALIEN4_MISSILE+1]), - S_NORMAL (ALN1, 'I', 4, A_Spectre4Attack, &States[S_ALIEN4_MISSILE+2]), - S_NORMAL (ALN1, 'E', 4, NULL, &States[S_ALIEN_CHASE+10]), - -#define S_ALIEN5_MISSILE (S_ALIEN4_MISSILE+3) // 887 - S_NORMAL (ALN1, 'F', 4, A_FaceTarget, &States[S_ALIEN5_MISSILE+1]), - S_NORMAL (ALN1, 'I', 4, A_Spectre5Attack, &States[S_ALIEN5_MISSILE+2]), - S_NORMAL (ALN1, 'E', 4, NULL, &States[S_ALIEN_CHASE]) -}; - -IMPLEMENT_ACTOR (AAlienSpectre1, Strife, 129, 0) - PROP_StrifeType (67) - PROP_SpawnState (S_ALIEN_STND) - PROP_SpawnHealth (1000) - PROP_SeeState (S_ALIEN_CHASE) - PROP_PainState (S_ALIEN_PAIN) - PROP_PainChance (250) - PROP_MeleeState (S_ALIEN_MELEE) - PROP_MissileState (S_ALIEN_MISSILE) - PROP_DeathState (S_ALIEN_DIE) - PROP_SpeedFixed (12) - PROP_RadiusFixed (64) - PROP_HeightFixed (64) - PROP_FloatSpeed (5) - PROP_Mass (1000) - PROP_Flags (MF_SPECIAL|MF_SOLID|MF_SHOOTABLE|MF_NOGRAVITY| - MF_FLOAT|MF_SHADOW|MF_COUNTKILL|MF_NOTDMATCH|MF_STRIFEx8000000) - PROP_Flags2 (MF2_PASSMOBJ|MF2_PUSHWALL|MF2_MCROSS) - PROP_Flags3 (MF3_DONTMORPH|MF3_NOBLOCKMONST) - PROP_Flags4 (MF4_INCOMBAT|MF4_LOOKALLAROUND|MF4_SPECTRAL|MF4_NOICEDEATH) - PROP_MinMissileChance (150) - PROP_RenderStyle (STYLE_Translucent) - PROP_Alpha (TRANSLUC66) - PROP_SeeSound ("alienspectre/sight") - PROP_AttackSound ("alienspectre/blade") - PROP_PainSound ("alienspectre/pain") - PROP_DeathSound ("alienspectre/death") - PROP_ActiveSound ("alienspectre/active") - PROP_Obituary ("$OB_ALIENSPECTE") -END_DEFAULTS - -void AAlienSpectre1::Touch (AActor *toucher) -{ - P_DamageMobj (toucher, this, this, 5, NAME_Melee); -} - -// Alien Spectre 2 ----------------------------------------------------------- - -class AAlienSpectre2 : public AAlienSpectre1 -{ - DECLARE_STATELESS_ACTOR (AAlienSpectre2, AAlienSpectre1) -public: - void NoBlockingSet (); -}; - -IMPLEMENT_STATELESS_ACTOR (AAlienSpectre2, Strife, 75, 0) - PROP_StrifeType (70) - PROP_SpawnHealth (1200) - PROP_PainChance (50) - PROP_MissileState (S_ALIEN2_MISSILE) - PROP_RadiusFixed (24) -END_DEFAULTS - -//============================================================================ -// -// AAlienSpectre2 :: NoBlockingSet -// //============================================================================ -void AAlienSpectre2::NoBlockingSet () -{ - P_DropItem (this, "Sigil2", -1, 256); -} - -// Alien Spectre 3 ---------------------------------------------------------- -// This is the Oracle's personal spectre, so it's a little different. - -FState AAlienSpectre3::States[] = -{ -#define S_ALIEN3_STND 0 // 855 - S_NORMAL (ALN1, 'A', 5, NULL, &States[S_ALIEN3_STND+1]), - S_NORMAL (ALN1, 'B', 5, NULL, &States[S_ALIEN3_STND+2]), - S_NORMAL (ALN1, 'C', 5, NULL, &States[S_ALIEN3_STND+3]), - S_NORMAL (ALN1, 'D', 5, NULL, &States[S_ALIEN3_STND+4]), - S_NORMAL (ALN1, 'E', 5, NULL, &States[S_ALIEN3_STND+5]), - S_NORMAL (ALN1, 'F', 5, NULL, &States[S_ALIEN3_STND+6]), - S_NORMAL (ALN1, 'G', 5, NULL, &States[S_ALIEN3_STND+7]), - S_NORMAL (ALN1, 'H', 5, NULL, &States[S_ALIEN3_STND+8]), - S_NORMAL (ALN1, 'I', 5, NULL, &States[S_ALIEN3_STND+9]), - S_NORMAL (ALN1, 'J', 5, NULL, &States[S_ALIEN3_STND+10]), - S_NORMAL (ALN1, 'K', 5, NULL, &States[S_ALIEN3_STND]), - -#define S_ALIEN3_CHASE (S_ALIEN3_STND+11) // 866 - S_NORMAL (ALN1, 'A', 5, A_Chase, &States[S_ALIEN3_CHASE+1]), - S_NORMAL (ALN1, 'B', 5, A_Chase, &States[S_ALIEN3_CHASE+2]), - S_NORMAL (ALN1, 'C', 5, A_SentinelBob, &States[S_ALIEN3_CHASE+3]), - S_NORMAL (ALN1, 'D', 5, A_Chase, &States[S_ALIEN3_CHASE+4]), - S_NORMAL (ALN1, 'E', 5, A_Chase, &States[S_ALIEN3_CHASE+5]), - S_NORMAL (ALN1, 'F', 5, A_Chase, &States[S_ALIEN3_CHASE+6]), - S_NORMAL (ALN1, 'G', 5, A_SentinelBob, &States[S_ALIEN3_CHASE+7]), - S_NORMAL (ALN1, 'H', 5, A_Chase, &States[S_ALIEN3_CHASE+8]), - S_NORMAL (ALN1, 'I', 5, A_Chase, &States[S_ALIEN3_CHASE+9]), - S_NORMAL (ALN1, 'J', 5, A_Chase, &States[S_ALIEN3_CHASE+10]), - S_NORMAL (ALN1, 'K', 5, A_SentinelBob, &States[S_ALIEN3_CHASE]), - -#define S_ALIEN3_MELEE (S_ALIEN3_CHASE+11) // 877 - S_NORMAL (ALN1, 'J', 4, A_FaceTarget, &States[S_ALIEN3_MELEE+1]), - S_NORMAL (ALN1, 'I', 4, A_SpectreMelee, &States[S_ALIEN3_MELEE+2]), - S_NORMAL (ALN1, 'C', 4, NULL, &States[S_ALIEN3_CHASE+2]), - -#define S_ALIEN3_MISSILE (S_ALIEN3_MELEE+3) // 880 - S_NORMAL (ALN1, 'F', 4, A_FaceTarget, &States[S_ALIEN3_MISSILE+1]), - S_NORMAL (ALN1, 'I', 4, A_Spectre3Attack, &States[S_ALIEN3_MISSILE+2]), - S_NORMAL (ALN1, 'E', 4, NULL, &States[S_ALIEN3_CHASE+10]), - -#define S_ALIEN3_PAIN (S_ALIEN3_MISSILE+3) // 883 - S_NORMAL (ALN1, 'J', 2, A_Pain, &States[S_ALIEN3_CHASE+6]) -}; - -IMPLEMENT_ACTOR (AAlienSpectre3, Strife, 76, 0) - PROP_StrifeType (71) - PROP_SpawnState (S_ALIEN3_STND) - PROP_SpawnHealth (1500) - PROP_SeeState (S_ALIEN3_CHASE) - PROP_PainState (S_ALIEN3_PAIN) - PROP_PainChance (50) - PROP_MeleeState (S_ALIEN3_MELEE) - PROP_MissileState (S_ALIEN3_MISSILE) - PROP_RadiusFixed (24) - PROP_FlagsSet (MF_SPAWNCEILING) - PROP_Flags3 (MF3_DONTMORPH|MF3_NOBLOCKMONST) -END_DEFAULTS - -//============================================================================ -// -// AAlienSpectre3 :: NoBlockingSet -// -//============================================================================ - -void AAlienSpectre3::NoBlockingSet () -{ - P_DropItem (this, "Sigil3", -1, 256); -} - -// Alien Spectre 4 ----------------------------------------------------------- - -class AAlienSpectre4 : public AAlienSpectre1 -{ - DECLARE_STATELESS_ACTOR (AAlienSpectre4, AAlienSpectre1) -public: - void NoBlockingSet (); -}; - -IMPLEMENT_STATELESS_ACTOR (AAlienSpectre4, Strife, 167, 0) - PROP_StrifeType (72) - PROP_SpawnHealth (1700) - PROP_PainChance (50) - PROP_MissileState (S_ALIEN4_MISSILE) - PROP_RadiusFixed (24) -END_DEFAULTS - -//============================================================================ -// -// AAlienSpectre4 :: NoBlockingSet -// -//============================================================================ - -void AAlienSpectre4::NoBlockingSet () -{ - P_DropItem (this, "Sigil4", -1, 256); -} - -// Alien Spectre 5 ----------------------------------------------------------- - -class AAlienSpectre5 : public AAlienSpectre1 -{ - DECLARE_STATELESS_ACTOR (AAlienSpectre5, AAlienSpectre1) -public: - void NoBlockingSet (); -}; - -IMPLEMENT_STATELESS_ACTOR (AAlienSpectre5, Strife, 168, 0) - PROP_StrifeType (73) - PROP_SpawnHealth (2000) - PROP_PainChance (50) - PROP_MissileState (S_ALIEN5_MISSILE) - PROP_RadiusFixed (24) -END_DEFAULTS - -//============================================================================ -// -// AAlienSpectre5 :: NoBlockingSet -// -//============================================================================ - -void AAlienSpectre5::NoBlockingSet () -{ - P_DropItem (this, "Sigil5", -1, 256); -} - -// Small Alien Chunk -------------------------------------------------------- - -class AAlienChunkSmall : public AActor -{ - DECLARE_ACTOR (AAlienChunkSmall, AActor) -}; - -FState AAlienChunkSmall::States[] = -{ - S_BRIGHT (NODE, 'A', 6, NULL, &States[1]), - S_BRIGHT (NODE, 'B', 6, NULL, &States[2]), - S_BRIGHT (NODE, 'C', 6, NULL, &States[3]), - S_BRIGHT (NODE, 'D', 6, NULL, &States[4]), - S_BRIGHT (NODE, 'E', 6, NULL, &States[5]), - S_BRIGHT (NODE, 'F', 6, NULL, &States[6]), - S_BRIGHT (NODE, 'G', 6, NULL, NULL), -}; - -IMPLEMENT_ACTOR (AAlienChunkSmall, Strife, -1, 0) - PROP_StrifeType (68) - PROP_SpawnState (0) - PROP_Flags (MF_NOBLOCKMAP|MF_NOCLIP|MF_NOTDMATCH) -END_DEFAULTS - -// Large Alien Chunk -------------------------------------------------------- - -class AAlienChunkLarge : public AActor -{ - DECLARE_ACTOR (AAlienChunkLarge, AActor) -}; - -FState AAlienChunkLarge::States[] = -{ - S_BRIGHT (MTHD, 'A', 5, NULL, &States[1]), - S_BRIGHT (MTHD, 'B', 5, NULL, &States[2]), - S_BRIGHT (MTHD, 'C', 5, NULL, &States[3]), - S_BRIGHT (MTHD, 'D', 5, NULL, &States[4]), - S_BRIGHT (MTHD, 'E', 5, NULL, &States[5]), - S_BRIGHT (MTHD, 'F', 5, NULL, &States[6]), - S_BRIGHT (MTHD, 'G', 5, NULL, &States[7]), - S_BRIGHT (MTHD, 'H', 5, NULL, &States[8]), - S_BRIGHT (MTHD, 'I', 5, NULL, &States[9]), - S_BRIGHT (MTHD, 'J', 5, NULL, &States[10]), - S_BRIGHT (MTHD, 'K', 5, NULL, NULL), -}; - -IMPLEMENT_ACTOR (AAlienChunkLarge, Strife, -1, 0) - PROP_StrifeType (69) - PROP_SpawnState (0) - PROP_Flags (MF_NOBLOCKMAP|MF_NOCLIP|MF_NOTDMATCH) -END_DEFAULTS - -//============================================================================ - -static void GenericSpectreSpawn (AActor *actor, const PClass *type) +static void GenericSpectreSpawn (AActor *actor, const char *type) { AActor *spectre = Spawn (type, actor->x, actor->y, actor->z, ALLOW_REPLACE); if (spectre != NULL) @@ -353,22 +27,22 @@ static void GenericSpectreSpawn (AActor *actor, const PClass *type) void A_SpawnSpectre3 (AActor *actor) { - GenericSpectreSpawn (actor, RUNTIME_CLASS(AAlienSpectre3)); + GenericSpectreSpawn (actor, "AlienSpectre3"); } void A_SpawnSpectre4 (AActor *actor) { - GenericSpectreSpawn (actor, RUNTIME_CLASS(AAlienSpectre4)); + GenericSpectreSpawn (actor, "AlienSpectre4"); } void A_SpawnSpectre5 (AActor *actor) { - GenericSpectreSpawn (actor, RUNTIME_CLASS(AAlienSpectre5)); + GenericSpectreSpawn (actor, "AlienSpectre5"); } void A_SpectreChunkSmall (AActor *self) { - AActor *foo = Spawn (self->x, self->y, self->z + 10*FRACUNIT, ALLOW_REPLACE); + AActor *foo = Spawn("AlienChunkSmall", self->x, self->y, self->z + 10*FRACUNIT, ALLOW_REPLACE); if (foo != NULL) { @@ -386,7 +60,7 @@ void A_SpectreChunkSmall (AActor *self) void A_SpectreChunkLarge (AActor *self) { - AActor *foo = Spawn (self->x, self->y, self->z + 10*FRACUNIT, ALLOW_REPLACE); + AActor *foo = Spawn("AlienChunkLarge", self->x, self->y, self->z + 10*FRACUNIT, ALLOW_REPLACE); if (foo != NULL) { @@ -403,49 +77,6 @@ void A_SpectreChunkLarge (AActor *self) } -void A_Spectre4Attack (AActor *self) -{ - if (self->target != NULL) - { - AActor *missile = P_SpawnMissileXYZ (self->x, self->y, self->z + 32*FRACUNIT, - self, self->target, PClass::FindClass("SpectralLightningBigV2"), false); - if (missile != NULL) - { - missile->tracer = self->target; - missile->health = -2; - P_CheckMissileSpawn(missile); - } - } -} - -void A_Spectre2Attack (AActor *self) -{ - if (self->target != NULL) - { - AActor *missile = P_SpawnMissileXYZ (self->x, self->y, self->z + 32*FRACUNIT, - self, self->target, PClass::FindClass("SpectralLightningH3"), false); - if (missile != NULL) - { - missile->health = -2; - P_CheckMissileSpawn(missile); - } - } -} - -void A_Spectre5Attack (AActor *self) -{ - if (self->target != NULL) - { - AActor *missile = P_SpawnMissileXYZ (self->x, self->y, self->z + 32*FRACUNIT, - self, self->target, PClass::FindClass("SpectralLightningBigBall2"), false); - if (missile != NULL) - { - missile->health = -2; - P_CheckMissileSpawn(missile); - } - } -} - void A_Spectre3Attack (AActor *self) { if (self->target == NULL) @@ -530,7 +161,7 @@ void A_AlienSpectreDeath (AActor *self) log = 87; } else - { // You weild the power of the complete Sigil. + { // You wield the power of the complete Sigil. log = 85; } EV_DoDoor (DDoor::doorOpen, NULL, NULL, 222, 8*FRACUNIT, 0, 0, 0); @@ -562,7 +193,7 @@ void A_AlienSpectreDeath (AActor *self) } sigil = player->FindInventory(); if (sigil != NULL && sigil->NumPieces == 5) - { // You weild the power of the complete Sigil. + { // You wield the power of the complete Sigil. log = 85; } else diff --git a/src/g_strife/a_entityboss.cpp b/src/g_strife/a_entityboss.cpp index d9c66c1c1..4ae23cc7d 100644 --- a/src/g_strife/a_entityboss.cpp +++ b/src/g_strife/a_entityboss.cpp @@ -8,280 +8,6 @@ static FRandom pr_entity ("Entity"); -void A_SpotLightning (AActor *); - -void A_SpawnEntity (AActor *); -void A_EntityAttack (AActor *); -void A_SpawnSubEntities (AActor *); - -void A_SpectreMelee (AActor *); -void A_SpectreChunkSmall (AActor *); -void A_SpectreChunkLarge (AActor *); -void A_Spectre2Attack (AActor *); -void A_Spectre3Attack (AActor *); -void A_Spectre4Attack (AActor *); -void A_Spectre5Attack (AActor *); -void A_SentinelBob (AActor *); -void A_TossGib (AActor *); - -// Entity Nest -------------------------------------------------------------- - -class AEntityNest : public AActor -{ - DECLARE_ACTOR (AEntityNest, AActor) -}; - -FState AEntityNest::States[] = -{ - S_NORMAL (NEST, 'A', -1, NULL, NULL) -}; - -IMPLEMENT_ACTOR (AEntityNest, Strife, 26, 0) - PROP_SpawnState (0) - PROP_RadiusFixed (84) - PROP_HeightFixed (47) - PROP_Flags (MF_SOLID|MF_NOTDMATCH) - PROP_Flags2 (MF2_FLOORCLIP) - PROP_StrifeType (76) -END_DEFAULTS - -// Entity Pod --------------------------------------------------------------- - -class AEntityPod : public AActor -{ - DECLARE_ACTOR (AEntityPod, AActor) -}; - -FState AEntityPod::States[] = -{ - S_NORMAL (PODD, 'A', 60, A_Look, &States[0]), - - S_NORMAL (PODD, 'A', 360, NULL, &States[2]), - S_NORMAL (PODD, 'B', 9, A_NoBlocking, &States[3]), - S_NORMAL (PODD, 'C', 9, NULL, &States[4]), - S_NORMAL (PODD, 'D', 9, A_SpawnEntity, &States[5]), - S_NORMAL (PODD, 'E', -1, NULL, NULL) -}; - -IMPLEMENT_ACTOR (AEntityPod, Strife, 198, 0) - PROP_SpawnState (0) - PROP_SeeState (1) - PROP_RadiusFixed (25) - PROP_HeightFixed (91) - PROP_Flags (MF_SOLID|MF_NOTDMATCH) - PROP_StrifeType (77) - PROP_SeeSound ("misc/gibbed") -END_DEFAULTS - -// Entity Boss -------------------------------------------------------------- - -class AEntityBoss : public AActor -{ - DECLARE_ACTOR (AEntityBoss, AActor) -public: - void Serialize (FArchive &arc); - void BeginPlay (); - void Touch (AActor *toucher); - - fixed_t SpawnX, SpawnY, SpawnZ; -}; - -FState AEntityBoss::States[] = -{ -#define S_ENTITY_SPAWN 0 - S_NORMAL (MNAM, 'A', 100, NULL, &States[S_ENTITY_SPAWN+1]), - S_BRIGHT (MNAM, 'B', 60, NULL, &States[S_ENTITY_SPAWN+2]), - S_BRIGHT (MNAM, 'C', 4, NULL, &States[S_ENTITY_SPAWN+3]), - S_BRIGHT (MNAM, 'D', 4, NULL, &States[S_ENTITY_SPAWN+4]), - S_BRIGHT (MNAM, 'E', 4, NULL, &States[S_ENTITY_SPAWN+5]), - S_BRIGHT (MNAM, 'F', 4, NULL, &States[S_ENTITY_SPAWN+6]), - S_BRIGHT (MNAM, 'G', 4, NULL, &States[S_ENTITY_SPAWN+7]), - S_BRIGHT (MNAM, 'H', 4, NULL, &States[S_ENTITY_SPAWN+8]), - S_BRIGHT (MNAM, 'I', 4, NULL, &States[S_ENTITY_SPAWN+9]), - S_BRIGHT (MNAM, 'J', 4, NULL, &States[S_ENTITY_SPAWN+10]), - S_BRIGHT (MNAM, 'K', 4, NULL, &States[S_ENTITY_SPAWN+11]), - S_BRIGHT (MNAM, 'L', 4, NULL, &States[S_ENTITY_SPAWN+12]), - S_BRIGHT (MNAL, 'A', 4, A_Look, &States[S_ENTITY_SPAWN+13]), - S_BRIGHT (MNAL, 'B', 4, A_SentinelBob, &States[S_ENTITY_SPAWN+12]), - -#define S_ENTITY_SEE (S_ENTITY_SPAWN+14) - S_BRIGHT (MNAL, 'A', 4, A_Chase, &States[S_ENTITY_SEE+1]), - S_BRIGHT (MNAL, 'B', 4, A_Chase, &States[S_ENTITY_SEE+2]), - S_BRIGHT (MNAL, 'C', 4, A_SentinelBob, &States[S_ENTITY_SEE+3]), - S_BRIGHT (MNAL, 'D', 4, A_Chase, &States[S_ENTITY_SEE+4]), - S_BRIGHT (MNAL, 'E', 4, A_Chase, &States[S_ENTITY_SEE+5]), - S_BRIGHT (MNAL, 'F', 4, A_Chase, &States[S_ENTITY_SEE+6]), - S_BRIGHT (MNAL, 'G', 4, A_SentinelBob, &States[S_ENTITY_SEE+7]), - S_BRIGHT (MNAL, 'H', 4, A_Chase, &States[S_ENTITY_SEE+8]), - S_BRIGHT (MNAL, 'I', 4, A_Chase, &States[S_ENTITY_SEE+9]), - S_BRIGHT (MNAL, 'J', 4, A_Chase, &States[S_ENTITY_SEE+10]), - S_BRIGHT (MNAL, 'K', 4, A_SentinelBob, &States[S_ENTITY_SEE]), - -#define S_ENTITY_MELEE (S_ENTITY_SEE+11) - S_BRIGHT (MNAL, 'J', 4, A_FaceTarget, &States[S_ENTITY_MELEE+1]), - S_BRIGHT (MNAL, 'I', 4, A_SpectreMelee, &States[S_ENTITY_MELEE+2]), - S_BRIGHT (MNAL, 'C', 4, NULL, &States[S_ENTITY_SEE+2]), - -#define S_ENTITY_MISSILE (S_ENTITY_MELEE+3) - S_BRIGHT (MNAL, 'F', 4, A_FaceTarget, &States[S_ENTITY_MISSILE+1]), - S_BRIGHT (MNAL, 'I', 4, A_EntityAttack, &States[S_ENTITY_MISSILE+2]), - S_BRIGHT (MNAL, 'E', 4, NULL, &States[S_ENTITY_SEE+10]), - -#define S_ENTITY_PAIN (S_ENTITY_MISSILE+3) - S_BRIGHT (MNAL, 'J', 2, A_Pain, &States[S_ENTITY_SEE+6]), - -#define S_ENTITY_DIE (S_ENTITY_PAIN+1) - S_BRIGHT (MNAL, 'L', 7, A_SpectreChunkSmall, &States[S_ENTITY_DIE+1]), - S_BRIGHT (MNAL, 'M', 7, A_Scream, &States[S_ENTITY_DIE+2]), - S_BRIGHT (MNAL, 'N', 7, A_SpectreChunkSmall, &States[S_ENTITY_DIE+3]), - S_BRIGHT (MNAL, 'O', 7, A_SpectreChunkSmall, &States[S_ENTITY_DIE+4]), - S_BRIGHT (MNAL, 'P', 7, A_SpectreChunkLarge, &States[S_ENTITY_DIE+5]), - S_BRIGHT (MNAL, 'Q', 64, A_SpectreChunkSmall, &States[S_ENTITY_DIE+6]), - S_BRIGHT (MNAL, 'Q', 6, A_SpawnSubEntities, NULL), -}; - -IMPLEMENT_ACTOR (AEntityBoss, Strife, 128, 0) - PROP_StrifeType (74) - PROP_SpawnHealth (2500) - PROP_SpawnState (S_ENTITY_SPAWN) - PROP_SeeState (S_ENTITY_SEE) - PROP_PainState (S_ENTITY_PAIN) - PROP_PainChance (255) - PROP_MeleeState (S_ENTITY_MELEE) - PROP_MissileState (S_ENTITY_MISSILE) - PROP_DeathState (S_ENTITY_DIE) - PROP_SpeedFixed (13) - PROP_RadiusFixed (130) - PROP_HeightFixed (200) - PROP_FloatSpeed (5) - PROP_Mass (1000) - PROP_Flags (MF_SPECIAL|MF_SOLID|MF_SHOOTABLE|MF_NOGRAVITY| - MF_FLOAT|MF_SHADOW|MF_COUNTKILL|MF_NOTDMATCH| - MF_STRIFEx8000000) - PROP_Flags2 (MF2_PASSMOBJ|MF2_PUSHWALL|MF2_MCROSS) - PROP_Flags3 (MF3_NOTARGET|MF3_NOBLOCKMONST) - PROP_Flags4 (MF4_INCOMBAT|MF4_LOOKALLAROUND|MF4_SPECTRAL|MF4_NOICEDEATH) - PROP_MinMissileChance (150) - PROP_RenderStyle (STYLE_Translucent) - PROP_Alpha (TRANSLUC50) - PROP_SeeSound ("entity/sight") - PROP_AttackSound ("entity/melee") - PROP_PainSound ("entity/pain") - PROP_DeathSound ("entity/death") - PROP_ActiveSound ("entity/active") - PROP_Obituary ("$OB_ENTITY") -END_DEFAULTS - -void AEntityBoss::Serialize (FArchive &arc) -{ - Super::Serialize (arc); - arc << SpawnX << SpawnY << SpawnZ; -} - -void AEntityBoss::BeginPlay () -{ - SpawnX = x; - SpawnY = y; - SpawnZ = z; -} - -void AEntityBoss::Touch (AActor *toucher) -{ - P_DamageMobj (toucher, this, this, 5, NAME_Melee); -} - -// Second Entity Boss ------------------------------------------------------- - -void A_SubEntityDeath (AActor *); - -class AEntitySecond : public AActor -{ - DECLARE_ACTOR (AEntitySecond, AActor) -public: - void Touch (AActor *toucher); -}; - -FState AEntitySecond::States[] = -{ -#define S_ENTITY2_SPAWN 0 - S_BRIGHT (MNAL, 'R', 10, A_Look, &States[S_ENTITY2_SPAWN]), - -#define S_ENTITY2_SEE (S_ENTITY2_SPAWN+1) - S_BRIGHT (MNAL, 'R', 5, A_SentinelBob, &States[S_ENTITY2_SEE+1]), - S_BRIGHT (MNAL, 'S', 5, A_Chase, &States[S_ENTITY2_SEE+2]), - S_BRIGHT (MNAL, 'T', 5, A_Chase, &States[S_ENTITY2_SEE+3]), - S_BRIGHT (MNAL, 'U', 5, A_SentinelBob, &States[S_ENTITY2_SEE+4]), - S_BRIGHT (MNAL, 'V', 5, A_Chase, &States[S_ENTITY2_SEE+5]), - S_BRIGHT (MNAL, 'W', 5, A_SentinelBob, &States[S_ENTITY2_SEE]), - -#define S_ENTITY2_MELEE (S_ENTITY2_SEE+6) - S_BRIGHT (MNAL, 'S', 4, A_FaceTarget, &States[S_ENTITY2_MELEE+1]), - S_BRIGHT (MNAL, 'R', 4, A_SpectreMelee, &States[S_ENTITY2_MELEE+2]), - S_BRIGHT (MNAL, 'T', 4, A_SentinelBob, &States[S_ENTITY2_SEE+1]), - -#define S_ENTITY2_MISSILE (S_ENTITY2_MELEE+3) - S_BRIGHT (MNAL, 'W', 4, A_FaceTarget, &States[S_ENTITY2_MISSILE+1]), - S_BRIGHT (MNAL, 'U', 4, A_Spectre2Attack, &States[S_ENTITY2_MISSILE+2]), - S_BRIGHT (MNAL, 'V', 4, A_SentinelBob, &States[S_ENTITY2_SEE+4]), - -#define S_ENTITY2_PAIN (S_ENTITY2_MISSILE+3) - S_BRIGHT (MNAL, 'R', 2, A_Pain, &States[S_ENTITY2_SEE]), - -#define S_ENTITY2_DIE (S_ENTITY2_PAIN+1) - S_BRIGHT (MDTH, 'A', 3, A_Scream, &States[S_ENTITY2_DIE+1]), - S_BRIGHT (MDTH, 'B', 3, A_TossGib, &States[S_ENTITY2_DIE+2]), - S_BRIGHT (MDTH, 'C', 3, A_NoBlocking, &States[S_ENTITY2_DIE+3]), - S_BRIGHT (MDTH, 'D', 3, A_TossGib, &States[S_ENTITY2_DIE+4]), - S_BRIGHT (MDTH, 'E', 3, A_TossGib, &States[S_ENTITY2_DIE+5]), - S_BRIGHT (MDTH, 'F', 3, A_TossGib, &States[S_ENTITY2_DIE+6]), - S_BRIGHT (MDTH, 'G', 3, A_TossGib, &States[S_ENTITY2_DIE+7]), - S_BRIGHT (MDTH, 'H', 3, A_TossGib, &States[S_ENTITY2_DIE+8]), - S_BRIGHT (MDTH, 'I', 3, A_TossGib, &States[S_ENTITY2_DIE+9]), - S_BRIGHT (MDTH, 'J', 3, A_TossGib, &States[S_ENTITY2_DIE+10]), - S_BRIGHT (MDTH, 'K', 3, A_TossGib, &States[S_ENTITY2_DIE+11]), - S_BRIGHT (MDTH, 'L', 3, A_TossGib, &States[S_ENTITY2_DIE+12]), - S_BRIGHT (MDTH, 'M', 3, A_TossGib, &States[S_ENTITY2_DIE+13]), - S_BRIGHT (MDTH, 'N', 3, A_TossGib, &States[S_ENTITY2_DIE+14]), - S_BRIGHT (MDTH, 'O', 3, A_SubEntityDeath, NULL) -}; - -IMPLEMENT_ACTOR (AEntitySecond, Strife, -1, 0) - PROP_StrifeType (75) - PROP_SpawnHealth (990) - PROP_SpawnState (S_ENTITY2_SPAWN) - PROP_SeeState (S_ENTITY2_SEE) - PROP_PainState (S_ENTITY2_PAIN) - PROP_PainChance (255) - PROP_MeleeState (S_ENTITY2_MELEE) - PROP_MissileState (S_ENTITY2_MISSILE) - PROP_DeathState (S_ENTITY2_DIE) - PROP_SpeedFixed (14) - PROP_RadiusFixed (130) - PROP_HeightFixed (200) - PROP_FloatSpeed (5) - PROP_Mass (1000) - PROP_Flags (MF_SPECIAL|MF_SOLID|MF_SHOOTABLE|MF_NOGRAVITY| - MF_FLOAT|MF_SHADOW|MF_COUNTKILL|MF_NOTDMATCH| - MF_STRIFEx8000000) - PROP_Flags2 (MF2_PASSMOBJ|MF2_PUSHWALL|MF2_MCROSS) - PROP_Flags3 (MF3_NOBLOCKMONST) - PROP_Flags4 (MF4_INCOMBAT|MF4_LOOKALLAROUND|MF4_SPECTRAL|MF4_NOICEDEATH) - PROP_MinMissileChance (150) - PROP_RenderStyle (STYLE_Translucent) - PROP_Alpha (TRANSLUC25) - PROP_SeeSound ("alienspectre/sight") - PROP_AttackSound ("alienspectre/blade") - PROP_PainSound ("alienspectre/pain") - PROP_DeathSound ("alienspectre/death") - PROP_ActiveSound ("alienspectre/active") - PROP_Obituary ("$OB_ENTITY") -END_DEFAULTS - -void AEntitySecond::Touch (AActor *toucher) -{ - P_DamageMobj (toucher, this, this, 5, NAME_Melee); -} - void A_SubEntityDeath (AActor *self) { if (CheckBossDeath (self)) @@ -290,6 +16,25 @@ void A_SubEntityDeath (AActor *self) } } +void A_SpectralMissile (AActor *self, const char *missilename) +{ + if (self->target != NULL) + { + AActor *missile = P_SpawnMissileXYZ (self->x, self->y, self->z + 32*FRACUNIT, + self, self->target, PClass::FindClass("SpectralLightningBigV2"), false); + if (missile != NULL) + { + missile->tracer = self->target; + missile->health = -2; + P_CheckMissileSpawn(missile); + } + } +} + +void A_SpotLightning (AActor *); +void A_Spectre3Attack (AActor *); + + void A_EntityAttack (AActor *self) { // Apparent Strife bug: Case 5 was unreachable because they used % 5 instead of % 6. @@ -301,7 +46,7 @@ void A_EntityAttack (AActor *self) break; case 2: - A_Spectre2Attack (self); + A_SpectralMissile (self, "SpectralLightningH3"); break; case 3: @@ -309,12 +54,12 @@ void A_EntityAttack (AActor *self) break; case 4: - A_Spectre4Attack (self); + A_SpectralMissile (self, "SpectralLightningBigV2"); break; case 1: case 5: - A_Spectre5Attack (self); + A_SpectralMissile (self, "SpectralLightningBigBall2"); break; } } @@ -322,26 +67,32 @@ void A_EntityAttack (AActor *self) void A_SpawnEntity (AActor *self) { - AActor *entity = Spawn (self->x, self->y, self->z + 70*FRACUNIT, ALLOW_REPLACE); + AActor *entity = Spawn("EntityBoss", self->x, self->y, self->z + 70*FRACUNIT, ALLOW_REPLACE); if (entity != NULL) { entity->angle = self->angle; entity->CopyFriendliness(self, true); - //entity->target = self->target; entity->momz = 5*FRACUNIT; + entity->tracer = self; } } -void A_SpawnSubEntities (AActor *selfa) +void A_EntityDeath (AActor *self) { - AEntityBoss *self = static_cast(selfa); - AEntitySecond *second; - fixed_t secondRadius = GetDefault()->radius * 2; + AActor *second; + fixed_t secondRadius = GetDefaultByName("EntitySecond")->radius * 2; angle_t an; + + AActor *spot = self->tracer; + if (spot == NULL) spot = self; + + fixed_t SpawnX = spot->x; + fixed_t SpawnY = spot->y; + fixed_t SpawnZ = spot->z + self->tracer? 70*FRACUNIT : 0; an = self->angle >> ANGLETOFINESHIFT; - second = Spawn (self->SpawnX + FixedMul (secondRadius, finecosine[an]), - self->SpawnY + FixedMul (secondRadius, finesine[an]), self->SpawnZ, ALLOW_REPLACE); + second = Spawn("EntitySecond", SpawnX + FixedMul (secondRadius, finecosine[an]), + SpawnY + FixedMul (secondRadius, finesine[an]), SpawnZ, ALLOW_REPLACE); second->CopyFriendliness(self, true); //second->target = self->target; A_FaceTarget (second); @@ -350,8 +101,8 @@ void A_SpawnSubEntities (AActor *selfa) second->momy += FixedMul (finesine[an], 320000); an = (self->angle + ANGLE_90) >> ANGLETOFINESHIFT; - second = Spawn (self->SpawnX + FixedMul (secondRadius, finecosine[an]), - self->SpawnY + FixedMul (secondRadius, finesine[an]), self->SpawnZ, ALLOW_REPLACE); + second = Spawn("EntitySecond", SpawnX + FixedMul (secondRadius, finecosine[an]), + SpawnY + FixedMul (secondRadius, finesine[an]), SpawnZ, ALLOW_REPLACE); second->CopyFriendliness(self, true); //second->target = self->target; second->momx = FixedMul (secondRadius, finecosine[an]) << 2; @@ -359,8 +110,8 @@ void A_SpawnSubEntities (AActor *selfa) A_FaceTarget (second); an = (self->angle - ANGLE_90) >> ANGLETOFINESHIFT; - second = Spawn (self->SpawnX + FixedMul (secondRadius, finecosine[an]), - self->SpawnY + FixedMul (secondRadius, finesine[an]), self->SpawnZ, ALLOW_REPLACE); + second = Spawn("EntitySecond", SpawnX + FixedMul (secondRadius, finecosine[an]), + SpawnY + FixedMul (secondRadius, finesine[an]), SpawnZ, ALLOW_REPLACE); second->CopyFriendliness(self, true); //second->target = self->target; second->momx = FixedMul (secondRadius, finecosine[an]) << 2; diff --git a/src/g_strife/a_oracle.cpp b/src/g_strife/a_oracle.cpp index e30b6e722..a282af7ad 100644 --- a/src/g_strife/a_oracle.cpp +++ b/src/g_strife/a_oracle.cpp @@ -59,7 +59,7 @@ void AOracle::NoBlockingSet () void A_WakeOracleSpectre (AActor *self) { - TThinkerIterator it; + TThinkerIterator it(NAME_AlienSpectre3); AActor *spectre = it.Next(); if (spectre != NULL) diff --git a/src/g_strife/a_strifeglobal.h b/src/g_strife/a_strifeglobal.h index d57570cd2..38b111ddf 100644 --- a/src/g_strife/a_strifeglobal.h +++ b/src/g_strife/a_strifeglobal.h @@ -22,20 +22,6 @@ class AFlameMissile : public AActor DECLARE_ACTOR (AFlameMissile, AActor) }; -class AAlienSpectre1 : public AActor -{ - DECLARE_ACTOR (AAlienSpectre1, AActor) -public: - void Touch (AActor *toucher); -}; - -class AAlienSpectre3 : public AAlienSpectre1 -{ - DECLARE_ACTOR (AAlienSpectre3, AAlienSpectre1) -public: - void NoBlockingSet (); -}; - class ADegninOre : public AInventory { DECLARE_ACTOR (ADegninOre, AInventory) diff --git a/wadsrc/static/actors/heretic/hereticweaps.txt b/wadsrc/static/actors/heretic/hereticweaps.txt index ccd9142ef..caf52ada0 100644 --- a/wadsrc/static/actors/heretic/hereticweaps.txt +++ b/wadsrc/static/actors/heretic/hereticweaps.txt @@ -742,7 +742,8 @@ ACTOR BlasterFX1 native Loop Death: FX18 A 3 BRIGHT A_SpawnRippers - FX18 BCDEFG 4 BRIGHT + FX18 B 3 BRIGHT + FX18 CDEFG 4 BRIGHT Stop } } @@ -930,8 +931,8 @@ ACTOR HornRodFX2 native Death: FX00 H 5 BRIGHT A_AddPlayerRain FX00 I 5 BRIGHT - FX00 JK 4 BRIGHT - FX00 LM 3 BRIGHT + FX00 J 4 BRIGHT + FX00 KLM 3 BRIGHT FX00 G 1 A_HideInCeiling FX00 G 1 A_SkullRodStorm Wait diff --git a/wadsrc/static/actors/hexen/clericflame.txt b/wadsrc/static/actors/hexen/clericflame.txt index bfb6cd732..5b07afa26 100644 --- a/wadsrc/static/actors/hexen/clericflame.txt +++ b/wadsrc/static/actors/hexen/clericflame.txt @@ -118,7 +118,6 @@ ACTOR FlamePuff2 : FlamePuff ACTOR CircleFlame { - Game Hexen Radius 6 Damage 2 DamageType "Fire" diff --git a/wadsrc/static/actors/strife/alienspectres.txt b/wadsrc/static/actors/strife/alienspectres.txt new file mode 100644 index 000000000..f0da99f28 --- /dev/null +++ b/wadsrc/static/actors/strife/alienspectres.txt @@ -0,0 +1,212 @@ + +// Alien Spectre 1 ----------------------------------------------------------- + +ACTOR AlienSpectre1 : SpectralMonster 129 +{ + Game Strife + ConversationID 67,-1,-1 + Health 1000 + Painchance 250 + Speed 12 + Radius 64 + Height 64 + FloatSpeed 5 + Mass 1000 + MinMissileChance 150 + RenderStyle Translucent + Alpha 0.666 + SeeSound "alienspectre/sight" + AttackSound "alienspectre/blade" + PainSound "alienspectre/pain" + DeathSound "alienspectre/death" + ActiveSound "alienspectre/active" + +NOGRAVITY + +FLOAT + +SHADOW + +NOTDMATCH + +DONTMORPH + +NOBLOCKMONST + +INCOMBAT + +LOOKALLAROUND + +NOICEDEATH + + action native A_AlienSpectreDeath (); + + states + { + Spawn: + ALN1 A 10 A_Look + ALN1 B 10 A_SentinelBob + Loop + See: + ALN1 AB 4 Bright A_Chase + ALN1 C 4 Bright A_SentinelBob + ALN1 DEF 4 Bright A_Chase + ALN1 G 4 Bright A_SentinelBob + ALN1 HIJ 4 Bright A_Chase + ALN1 K 4 Bright A_SentinelBob + Loop + Melee: + ALN1 J 4 Bright A_FaceTarget + ALN1 I 4 Bright A_CustomMeleeAttack((random[SpectreMelee](0,255)&9)*5) + ALN1 H 4 Bright + Goto See + Missile: + ALN1 J 4 Bright A_FaceTarget + ALN1 I 4 Bright A_SpotLightning + ALN1 H 4 Bright + Goto See+10 + Pain: + ALN1 J 2 A_Pain + Goto See+6 + Death: + AL1P A 6 Bright A_SpectreChunkSmall + AL1P B 6 Bright A_Scream + AL1P C 6 Bright A_SpectreChunkSmall + AL1P DE 6 Bright + AL1P F 6 Bright A_SpectreChunkSmall + AL1P G 6 Bright + AL1P H 6 Bright A_SpectreChunkSmall + AL1P IJK 6 Bright + AL1P LM 5 Bright + AL1P N 5 Bright A_SpectreChunkLarge + AL1P OPQ 5 Bright + AL1P R 5 Bright A_AlienSpectreDeath + Stop + } +} + + +// Alien Spectre 2 ----------------------------------------------------------- + +ACTOR AlienSpectre2 : AlienSpectre1 75 +{ + Game Strife + ConversationID 70 + Health 1200 + Painchance 50 + Radius 24 + DropItem "Sigil2" + States + { + Missile: + ALN1 F 4 A_FaceTarget + ALN1 I 4 A_CustomMissile("SpectralLightningH3", 32, 0) + ALN1 E 4 + Goto See+10 + } +} + +// Alien Spectre 3 ---------------------------------------------------------- +// This is the Oracle's personal spectre, so it's a little different. + +ACTOR AlienSpectre3 : AlienSpectre1 76 +{ + Game Strife + ConversationID 71,-1,-1 + Health 1500 + Painchance 50 + Radius 24 + +SPAWNCEILING + DropItem "Sigil3" + states + { + Spawn: + ALN1 ABCDEFGHIJK 5 + Loop + See: + ALN1 AB 5 A_Chase + ALN1 C 5 A_SentinelBob + ALN1 DEF 5 A_Chase + ALN1 G 5 A_SentinelBob + ALN1 HIJ 5 A_Chase + ALN1 K 5 A_SentinelBob + Loop + Melee: + ALN1 J 4 A_FaceTarget + ALN1 I 4 A_CustomMeleeAttack((random[SpectreMelee](0,255)&9)*5) + ALN1 C 4 + Goto See+2 + Missile: + ALN1 F 4 A_FaceTarget + ALN1 I 4 A_Spectre3Attack + ALN1 E 4 + Goto See+10 + Pain: + ALN1 J 2 A_Pain + Goto See+6 + } +} + + +// Alien Spectre 4 ----------------------------------------------------------- + +ACTOR AlienSpectre4 : AlienSpectre1 167 +{ + Game Strife + ConversationID 72,-1,-1 + Health 1700 + Painchance 50 + Radius 24 + DropItem "Sigil4" + States + { + Missile: + ALN1 F 4 A_FaceTarget + ALN1 I 4 A_CustomMissile("SpectralLightningBigV2", 32, 0) + ALN1 E 4 + Goto See+10 + } +} + + +// Alien Spectre 5 ----------------------------------------------------------- + +ACTOR AlienSpectre5 : AlienSpectre1 168 +{ + Game Strife + ConversationID 73,-1,-1 + Health 2000 + Painchance 50 + Radius 24 + DropItem "Sigil5" + States + { + Missile: + ALN1 F 4 A_FaceTarget + ALN1 I 4 A_CustomMissile("SpectralLightningBigBall2", 32, 0) + ALN1 E 4 + Goto See+10 + } +} + +// Small Alien Chunk -------------------------------------------------------- + +ACTOR AlienChunkSmall +{ + ConversationID 68,-1,-1 + +NOBLOCKMAP + +NOCLIP + States + { + Spawn: + NODE ABCDEFG 6 Bright + Stop + } +} + +// Large Alien Chunk -------------------------------------------------------- + +ACTOR AlienChunkLarge +{ + ConversationID 69,-1,-1 + +NOBLOCKMAP + +NOCLIP + States + { + Spawn: + MTHD ABCDEFGHIJK 5 Bright + Stop + } +} + diff --git a/wadsrc/static/actors/strife/entityboss.txt b/wadsrc/static/actors/strife/entityboss.txt new file mode 100644 index 000000000..b6ec8ac5f --- /dev/null +++ b/wadsrc/static/actors/strife/entityboss.txt @@ -0,0 +1,207 @@ + +// Entity Nest -------------------------------------------------------------- + +ACTOR EntityNest 26 +{ + Game Strife + ConversationID 76,-1,-1 + Radius 84 + Height 47 + +SOLID + +NOTDMATCH + +FLOORCLIP + States + { + Spawn: + NEST A -1 + Stop + } +} + +// Entity Pod --------------------------------------------------------------- + +ACTOR EntityPod 198 +{ + Game Strife + ConversationID 77,-1,-1 + Radius 25 + Height 91 + +SOLID + +NOTDMATCH + SeeSound "misc/gibbed" + + action native A_SpawnEntity (); + + States + { + Spawn: + PODD A 60 A_Look + Loop + See: + PODD A 360 + PODD B 9 A_NoBlocking + PODD C 9 + PODD D 9 A_SpawnEntity + PODD E -1 + Stop + } +} + + +// Entity Boss -------------------------------------------------------------- + +ACTOR EntityBoss : SpectralMonster 128 +{ + Game Strife + ConversationID 74,-1,-1 + Health 2500 + Painchance 255 + Speed 13 + Radius 130 + Height 200 + FloatSpeed 5 + Mass 1000 + Monster + +SPECIAL + +NOGRAVITY + +FLOAT + +SHADOW + +NOTDMATCH + +DONTMORPH + +NOTARGET + +NOBLOCKMONST + +INCOMBAT + +LOOKALLAROUND + +SPECTRAL + +NOICEDEATH + MinMissileChance 150 + RenderStyle Translucent + Alpha 0.5 + SeeSound "entity/sight" + AttackSound "entity/melee" + PainSound "entity/pain" + DeathSound "entity/death" + ActiveSound "entity/active" + Obituary "$OB_ENTITY" + + action native A_EntityAttack(); + action native A_EntityDeath(); + + States + { + Spawn: + MNAM A 100 A_SentinelBob + MNAM B 60 Bright A_SentinelBob + MNAM CDEFGHIJKL 4 Bright A_SentinelBob + MNAL A 4 Bright A_Look + MNAL B 4 Bright A_SentinelBob + Goto Spawn+12 + See: + MNAL AB 4 Bright A_Chase + MNAL C 4 Bright A_SentinelBob + MNAL DEF 4 Bright A_Chase + MNAL G 4 Bright A_SentinelBob + MNAL HIJ 4 Bright A_Chase + MNAL K 4 Bright A_SentinelBob + Loop + Melee: + MNAL J 4 Bright A_FaceTarget + MNAL I 4 Bright A_CustomMeleeAttack((random[SpectreMelee](0,255)&9)*5) + MNAL C 4 Bright + Goto See+2 + Missile: + MNAL F 4 Bright A_FaceTarget + MNAL I 4 Bright A_EntityAttack + MNAL E 4 Bright + Goto See+10 + Pain: + MNAL J 2 Bright A_Pain + Goto See+6 + Death: + MNAL L 7 Bright A_SpectreChunkSmall + MNAL M 7 Bright A_Scream + MNAL NO 7 Bright A_SpectreChunkSmall + MNAL P 7 Bright A_SpectreChunkLarge + MNAL Q 64 Bright A_SpectreChunkSmall + MNAL Q 6 Bright A_EntityDeath + Stop + } +} + +// Second Entity Boss ------------------------------------------------------- + +ACTOR EntitySecond : SpectralMonster +{ + ConversationID 75,-1,-1 + Health 990 + Painchance 255 + Speed 14 + Radius 130 + Height 200 + FloatSpeed 5 + Mass 1000 + Monster + +SPECIAL + +NOGRAVITY + +FLOAT + +SHADOW + +NOTDMATCH + +DONTMORPH + +NOBLOCKMONST + +INCOMBAT + +LOOKALLAROUND + +SPECTRAL + +NOICEDEATH + MinMissileChance 150 + RenderStyle Translucent + Alpha 0.25 + SeeSound "alienspectre/sight" + AttackSound "alienspectre/blade" + PainSound "alienspectre/pain" + DeathSound "alienspectre/death" + ActiveSound "alienspectre/active" + Obituary "$OB_ENTITY" + + action native A_SubEntityDeath (); + + States + { + Spawn: + MNAL R 10 Bright A_Look + Loop + See: + MNAL R 5 Bright A_SentinelBob + MNAL ST 5 Bright A_Chase + MNAL U 5 Bright A_SentinelBob + MNAL V 5 Bright A_Chase + MNAL W 5 Bright A_SentinelBob + Loop + Melee: + MNAL S 4 Bright A_FaceTarget + MNAL R 4 Bright A_CustomMeleeAttack((random[SpectreMelee](0,255)&9)*5) + MNAL T 4 Bright A_SentinelBob + Goto See+1 + Missile: + MNAL W 4 Bright A_FaceTarget + MNAL U 4 Bright A_CustomMissile("SpectralLightningH3",32,0) + + MNAL V 4 Bright A_SentinelBob + Goto See+4 + Pain: + MNAL R 2 Bright A_Pain + Goto See + Death: + MDTH A 3 Bright A_Scream + MDTH B 3 Bright A_TossGib + MDTH C 3 Bright A_NoBlocking + MDTH DEFGHIJKLMN 3 Bright A_TossGib + MDTH O 3 Bright A_SubEntityDeath + Stop + } +} + + + + + + diff --git a/wadsrc/static/actors/strife/spectral.txt b/wadsrc/static/actors/strife/spectral.txt index a19c60bfa..e3048baa9 100644 --- a/wadsrc/static/actors/strife/spectral.txt +++ b/wadsrc/static/actors/strife/spectral.txt @@ -11,12 +11,8 @@ ACTOR SpectralMonster native 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 (); - } diff --git a/wadsrc/static/decorate.txt b/wadsrc/static/decorate.txt index 024079b4c..296245a29 100644 --- a/wadsrc/static/decorate.txt +++ b/wadsrc/static/decorate.txt @@ -100,8 +100,10 @@ #include "actors/strife/strifeplayer.txt" #include "actors/strife/spectral.txt" #include "actors/strife/acolyte.txt" +#include "actors/strife/alienspectres.txt" #include "actors/strife/beggars.txt" #include "actors/strife/crusader.txt" +#include "actors/strife/entityboss.txt" #include "actors/strife/inquisitor.txt" #include "actors/strife/merchants.txt" #include "actors/strife/peasants.txt"