From fe2e64aa40087463e8016458c3a7f31f815c166e Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Tue, 5 Aug 2008 17:58:38 +0000 Subject: [PATCH] - Converted Strife's Acolytes, Rebels, Sentinel, Reaver and Templar to DECORATE. SVN r1113 (trunk) --- docs/rh-log.txt | 2 + src/codepointers.h | 10 + src/g_strife/a_acolyte.cpp | 319 +----------------- src/g_strife/a_reaver.cpp | 118 ------- src/g_strife/a_rebels.cpp | 217 +----------- src/g_strife/a_sentinel.cpp | 120 +------ src/g_strife/a_templar.cpp | 116 +------ src/namedef.h | 2 + src/p_enemy.h | 1 + src/thingdef/thingdef_codeptr.cpp | 11 +- wadsrc/static/actors/heretic/hereticweaps.txt | 2 + wadsrc/static/actors/nativeclasses.txt | 3 +- wadsrc/static/actors/strife/acolyte.txt | 203 +++++++++++ wadsrc/static/actors/strife/reaver.txt | 66 ++++ wadsrc/static/actors/strife/rebels.txt | 142 ++++++++ wadsrc/static/actors/strife/sentinel.txt | 95 ++++++ wadsrc/static/actors/strife/strifebishop.txt | 6 +- wadsrc/static/actors/strife/templar.txt | 67 ++++ wadsrc/static/decorate.txt | 5 + 19 files changed, 618 insertions(+), 887 deletions(-) create mode 100644 wadsrc/static/actors/strife/acolyte.txt create mode 100644 wadsrc/static/actors/strife/reaver.txt create mode 100644 wadsrc/static/actors/strife/rebels.txt create mode 100644 wadsrc/static/actors/strife/sentinel.txt create mode 100644 wadsrc/static/actors/strife/templar.txt diff --git a/docs/rh-log.txt b/docs/rh-log.txt index 714405641..68b05f9c2 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 Acolytes, Rebels, Sentinel, Reaver and Templar to + DECORATE. - Added DECORATE conversions for Hexen's Cleric weapons by Karate Chris. - Added a check to Zipdir that excludes files with a .orig extension. These can be left behind by patch.exe and create problems. diff --git a/src/codepointers.h b/src/codepointers.h index 4282e87b1..be9d179e7 100644 --- a/src/codepointers.h +++ b/src/codepointers.h @@ -235,6 +235,16 @@ ACTOR(ClericAttack) ACTOR(FighterAttack) ACTOR(MageAttack) +ACTOR(TemplarAttack) +ACTOR(SentinelAttack) +ACTOR(ReaverRanged) +ACTOR(BeShadowyFoe) +ACTOR(AcolyteBits) +ACTOR(AcolyteDie) +ACTOR(HideDecepticon) +ACTOR(Beacon) +ACTOR(ShootGun) + // Special code pointers for Strife's player - not to be used elsewhere! ACTOR(ItBurnsItBurns) ACTOR(CrispyPlayer) diff --git a/src/g_strife/a_acolyte.cpp b/src/g_strife/a_acolyte.cpp index 9ac26feb6..fc3235311 100644 --- a/src/g_strife/a_acolyte.cpp +++ b/src/g_strife/a_acolyte.cpp @@ -6,321 +6,6 @@ #include "s_sound.h" #include "a_strifeglobal.h" #include "doomdata.h" -#include "r_translate.h" - -void A_BeShadowyFoe (AActor *); -void A_AcolyteBits (AActor *); -void A_AcolyteDie (AActor *); -void A_HideDecepticon (AActor *); - -void A_ShootGun (AActor *); -void A_TossGib (AActor *); -void A_ClearShadow (AActor *); -void A_SetShadow (AActor *); - -// Base class for the acolytes ---------------------------------------------- - -class AAcolyte : public AStrifeHumanoid -{ - DECLARE_ACTOR (AAcolyte, AStrifeHumanoid) -}; - -FState AAcolyte::States[] = -{ -#define S_ACOLYTE_STND 0 - S_NORMAL (AGRD, 'A', 5, A_Look2, &States[S_ACOLYTE_STND]), - S_NORMAL (AGRD, 'B', 8, A_ClearShadow, &States[S_ACOLYTE_STND]), - S_NORMAL (AGRD, 'D', 8, NULL, &States[S_ACOLYTE_STND]), - -#define S_ACOLYTE_WANDER (S_ACOLYTE_STND+3) - S_NORMAL (AGRD, 'A', 5, A_Wander, &States[S_ACOLYTE_WANDER+1]), - S_NORMAL (AGRD, 'B', 5, A_Wander, &States[S_ACOLYTE_WANDER+2]), - S_NORMAL (AGRD, 'C', 5, A_Wander, &States[S_ACOLYTE_WANDER+3]), - S_NORMAL (AGRD, 'D', 5, A_Wander, &States[S_ACOLYTE_WANDER+4]), - S_NORMAL (AGRD, 'A', 5, A_Wander, &States[S_ACOLYTE_WANDER+5]), - S_NORMAL (AGRD, 'B', 5, A_Wander, &States[S_ACOLYTE_WANDER+6]), - S_NORMAL (AGRD, 'C', 5, A_Wander, &States[S_ACOLYTE_WANDER+7]), - S_NORMAL (AGRD, 'D', 5, A_Wander, &States[S_ACOLYTE_STND]), - -#define S_ACOLYTE_ALTCHASE (S_ACOLYTE_WANDER+8) - S_NORMAL (AGRD, 'A', 6, A_BeShadowyFoe, &States[S_ACOLYTE_ALTCHASE+2]), - -#define S_ACOLYTE_CHASE (S_ACOLYTE_ALTCHASE+1) - S_NORMAL (AGRD, 'A', 6, A_AcolyteBits, &States[S_ACOLYTE_CHASE+1]), - S_NORMAL (AGRD, 'B', 6, A_Chase, &States[S_ACOLYTE_CHASE+2]), - S_NORMAL (AGRD, 'C', 6, A_Chase, &States[S_ACOLYTE_CHASE+3]), - S_NORMAL (AGRD, 'D', 6, A_Chase, &States[S_ACOLYTE_CHASE]), - -#define S_ACOLYTE_ATK (S_ACOLYTE_CHASE+4) - S_NORMAL (AGRD, 'E', 8, A_FaceTarget, &States[S_ACOLYTE_ATK+1]), - S_NORMAL (AGRD, 'F', 4, A_ShootGun, &States[S_ACOLYTE_ATK+2]), - S_NORMAL (AGRD, 'E', 4, A_ShootGun, &States[S_ACOLYTE_ATK+3]), - S_NORMAL (AGRD, 'F', 6, A_ShootGun, &States[S_ACOLYTE_CHASE]), - -#define S_ACOLYTE_ALTPAIN (S_ACOLYTE_ATK+4) - S_NORMAL (AGRD, 'O', 0, A_SetShadow, &States[S_ACOLYTE_ALTPAIN+1]), - S_NORMAL (AGRD, 'O', 8, A_Pain, &States[S_ACOLYTE_ALTCHASE]), - -#define S_ACOLYTE_PAIN (S_ACOLYTE_ALTPAIN+2) - S_NORMAL (AGRD, 'O', 8, A_Pain, &States[S_ACOLYTE_CHASE]), - -#define S_ACOLYTE_DIE (S_ACOLYTE_PAIN+1) - S_NORMAL (AGRD, 'G', 4, NULL, &States[S_ACOLYTE_DIE+1]), - S_NORMAL (AGRD, 'H', 4, A_Scream, &States[S_ACOLYTE_DIE+2]), - S_NORMAL (AGRD, 'I', 4, NULL, &States[S_ACOLYTE_DIE+3]), - S_NORMAL (AGRD, 'J', 3, NULL, &States[S_ACOLYTE_DIE+4]), - S_NORMAL (AGRD, 'K', 3, A_NoBlocking, &States[S_ACOLYTE_DIE+5]), - S_NORMAL (AGRD, 'L', 3, NULL, &States[S_ACOLYTE_DIE+6]), - S_NORMAL (AGRD, 'M', 3, A_AcolyteDie, &States[S_ACOLYTE_DIE+7]), - S_NORMAL (AGRD, 'N', 1400, NULL, NULL), - -#define S_ACOLYTE_XDIE (S_ACOLYTE_DIE+8) - S_NORMAL (GIBS, 'A', 5, A_NoBlocking, &States[S_ACOLYTE_XDIE+1]), - S_NORMAL (GIBS, 'B', 5, A_TossGib, &States[S_ACOLYTE_XDIE+2]), - S_NORMAL (GIBS, 'C', 5, A_TossGib, &States[S_ACOLYTE_XDIE+3]), - S_NORMAL (GIBS, 'D', 4, A_TossGib, &States[S_ACOLYTE_XDIE+4]), - S_NORMAL (GIBS, 'E', 4, A_XScream, &States[S_ACOLYTE_XDIE+5]), - S_NORMAL (GIBS, 'F', 4, A_TossGib, &States[S_ACOLYTE_XDIE+6]), - S_NORMAL (GIBS, 'G', 4, NULL, &States[S_ACOLYTE_XDIE+7]), - S_NORMAL (GIBS, 'H', 4, NULL, &States[S_ACOLYTE_XDIE+8]), - S_NORMAL (GIBS, 'I', 5, NULL, &States[S_ACOLYTE_XDIE+9]), - S_NORMAL (GIBS, 'J', 5, A_AcolyteDie, &States[S_ACOLYTE_XDIE+10]), - S_NORMAL (GIBS, 'K', 5, NULL, &States[S_ACOLYTE_XDIE+11]), - S_NORMAL (GIBS, 'L', 1400, NULL, NULL), -}; - -IMPLEMENT_ACTOR (AAcolyte, Strife, -1, 0) - PROP_SpawnState (S_ACOLYTE_STND) - PROP_SeeState (S_ACOLYTE_CHASE) - PROP_PainState (S_ACOLYTE_PAIN) - PROP_MissileState (S_ACOLYTE_ATK) - PROP_DeathState (S_ACOLYTE_DIE) - PROP_XDeathState (S_ACOLYTE_XDIE) - - PROP_SpawnHealth (70) - PROP_PainChance (150) - PROP_SpeedFixed (7) - PROP_RadiusFixed (24) - PROP_HeightFixed (64) - PROP_Mass (400) - PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL) - PROP_Flags2 (MF2_FLOORCLIP|MF2_PASSMOBJ|MF2_PUSHWALL|MF2_MCROSS) - PROP_Flags4 (MF4_SEESDAGGERS|MF4_NOSPLASHALERT) - PROP_MinMissileChance (150) - PROP_Tag ("ACOLYTE") - - PROP_SeeSound ("acolyte/sight") - PROP_PainSound ("acolyte/pain") - PROP_AttackSound ("acolyte/rifle") - PROP_DeathSound ("acolyte/death") - PROP_ActiveSound ("acolyte/active") - PROP_Obituary ("$OB_ACOLYTE") -END_DEFAULTS - -// Acolyte 1 ---------------------------------------------------------------- - -class AAcolyteTan : public AAcolyte -{ - DECLARE_STATELESS_ACTOR (AAcolyteTan, AAcolyte) -public: - void NoBlockingSet (); -}; - -IMPLEMENT_STATELESS_ACTOR (AAcolyteTan, Strife, 3002, 0) - PROP_StrifeType (53) - PROP_StrifeTeaserType (52) - PROP_StrifeTeaserType2 (53) - PROP_Flags4 (MF4_MISSILEMORE|MF4_MISSILEEVENMORE|MF4_SEESDAGGERS|MF4_NOSPLASHALERT) - PROP_Tag ("ACOLYTE") -END_DEFAULTS - -//============================================================================ -// -// AAcolyteTan :: NoBlockingSet -// -// This and the shadow acolyte are the only ones that drop clips by default. -// -//============================================================================ - -void AAcolyteTan::NoBlockingSet () -{ - P_DropItem (this, "ClipOfBullets", -1, 256); -} - -// Acolyte 2 ---------------------------------------------------------------- - -class AAcolyteRed : public AAcolyte -{ - DECLARE_STATELESS_ACTOR (AAcolyteRed, AAcolyte) -}; - -IMPLEMENT_STATELESS_ACTOR (AAcolyteRed, Strife, 142, 0) - PROP_Translation (TRANSLATION_Standard, 0) - PROP_StrifeType (54) - PROP_StrifeTeaserType (53) - PROP_StrifeTeaserType2 (54) - PROP_Flags4 (MF4_MISSILEMORE|MF4_MISSILEEVENMORE|MF4_SEESDAGGERS|MF4_NOSPLASHALERT) - PROP_Tag ("ACOLYTE") -END_DEFAULTS - -// Acolyte 3 ---------------------------------------------------------------- - -class AAcolyteRust : public AAcolyte -{ - DECLARE_STATELESS_ACTOR (AAcolyteRust, AAcolyte) -}; - -IMPLEMENT_STATELESS_ACTOR (AAcolyteRust, Strife, 143, 0) - PROP_Translation (TRANSLATION_Standard, 1) - PROP_StrifeType (55) - PROP_StrifeTeaserType (54) - PROP_StrifeTeaserType2 (55) - PROP_Flags4 (MF4_MISSILEMORE|MF4_MISSILEEVENMORE|MF4_SEESDAGGERS|MF4_NOSPLASHALERT) - PROP_Tag ("ACOLYTE") -END_DEFAULTS - -// Acolyte 4 ---------------------------------------------------------------- - -class AAcolyteGray : public AAcolyte -{ - DECLARE_STATELESS_ACTOR (AAcolyteGray, AAcolyte) -}; - -IMPLEMENT_STATELESS_ACTOR (AAcolyteGray, Strife, 146, 0) - PROP_Translation (TRANSLATION_Standard, 2) - PROP_StrifeType (56) - PROP_StrifeTeaserType (55) - PROP_StrifeTeaserType2 (56) - PROP_Flags4 (MF4_MISSILEMORE|MF4_MISSILEEVENMORE|MF4_SEESDAGGERS|MF4_NOSPLASHALERT) - PROP_Tag ("ACOLYTE") -END_DEFAULTS - -// Acolyte 5 ---------------------------------------------------------------- - -class AAcolyteDGreen : public AAcolyte -{ - DECLARE_STATELESS_ACTOR (AAcolyteDGreen, AAcolyte) -}; - -IMPLEMENT_STATELESS_ACTOR (AAcolyteDGreen, Strife, 147, 0) - PROP_Translation (TRANSLATION_Standard, 3) - PROP_StrifeType (57) - PROP_StrifeTeaserType (56) - PROP_StrifeTeaserType2 (57) - PROP_Flags4 (MF4_MISSILEMORE|MF4_MISSILEEVENMORE|MF4_SEESDAGGERS|MF4_NOSPLASHALERT) - PROP_Tag ("ACOLYTE") -END_DEFAULTS - -// Acolyte 6 ---------------------------------------------------------------- - -class AAcolyteGold : public AAcolyte -{ - DECLARE_STATELESS_ACTOR (AAcolyteGold, AAcolyte) -}; - -IMPLEMENT_STATELESS_ACTOR (AAcolyteGold, Strife, 148, 0) - PROP_Translation (TRANSLATION_Standard, 4) - PROP_StrifeType (58) - PROP_StrifeTeaserType (57) - PROP_StrifeTeaserType2 (58) - PROP_Flags4 (MF4_MISSILEMORE|MF4_MISSILEEVENMORE|MF4_SEESDAGGERS|MF4_NOSPLASHALERT) - PROP_Tag ("ACOLYTE") -END_DEFAULTS - -// Acolyte 7 ---------------------------------------------------------------- - -class AAcolyteLGreen : public AAcolyte -{ - DECLARE_STATELESS_ACTOR (AAcolyteLGreen, AAcolyte) -}; - -IMPLEMENT_STATELESS_ACTOR (AAcolyteLGreen, Strife, 232, 0) - PROP_Translation (TRANSLATION_Standard, 5) - PROP_SpawnHealth (60) - PROP_StrifeType (59) - PROP_Tag ("ACOLYTE") -END_DEFAULTS - -// Acolyte 8 ---------------------------------------------------------------- - -class AAcolyteBlue : public AAcolyte -{ - DECLARE_STATELESS_ACTOR (AAcolyteBlue, AAcolyte) -}; - -IMPLEMENT_STATELESS_ACTOR (AAcolyteBlue, Strife, 231, 0) - PROP_Translation (TRANSLATION_Standard, 6) - PROP_SpawnHealth (60) - PROP_StrifeType (60) - PROP_Tag ("ACOLYTE") -END_DEFAULTS - -// Shadow Acolyte ----------------------------------------------------------- - -class AAcolyteShadow : public AAcolyte -{ - DECLARE_STATELESS_ACTOR (AAcolyteShadow, AAcolyte) -public: - void NoBlockingSet (); -}; - -IMPLEMENT_STATELESS_ACTOR (AAcolyteShadow, Strife, 58, 0) - PROP_SeeState (S_ACOLYTE_ALTCHASE) - PROP_PainState (S_ACOLYTE_ALTPAIN) - PROP_StrifeType (61) - PROP_StrifeTeaserType (58) - PROP_StrifeTeaserType2 (59) - PROP_Flags4 (MF4_MISSILEMORE|MF4_SEESDAGGERS|MF4_NOSPLASHALERT) - PROP_Tag ("ACOLYTE") -END_DEFAULTS - -//============================================================================ -// -// AAcolyteShadow :: NoBlockingSet -// -// This and the tan acolyte are the only ones that drop clips by default. -// -//============================================================================ - -void AAcolyteShadow::NoBlockingSet () -{ - P_DropItem (this, "ClipOfBullets", -1, 256); -} - -// Some guy turning into an acolyte ----------------------------------------- - -class AAcolyteToBe : public AAcolyte -{ - DECLARE_ACTOR (AAcolyteToBe, AAcolyte) -}; - -FState AAcolyteToBe::States[] = -{ -#define S_BECOMING_STND 0 - S_NORMAL (ARMR, 'A', -1, NULL, NULL), - -#define S_BECOMING_PAIN (S_BECOMING_STND+1) - S_NORMAL (ARMR, 'A', -1, A_HideDecepticon, NULL), - -#define S_BECOMING_DIEJUMP (S_BECOMING_PAIN+1) - S_NORMAL (GIBS, 'A', 0, NULL, &AAcolyte::States[S_ACOLYTE_XDIE]), -}; - -IMPLEMENT_ACTOR (AAcolyteToBe, Strife, 201, 0) - PROP_SpawnState (S_BECOMING_STND) - PROP_PainState (S_BECOMING_PAIN) - PROP_DeathState (S_BECOMING_DIEJUMP) - - PROP_FlagsClear (MF_COUNTKILL) - - PROP_SpawnHealth (61) - PROP_PainChance (255) - PROP_RadiusFixed (20) - PROP_HeightFixed (56) - PROP_StrifeType (29) - - PROP_DeathSound ("becoming/death") -END_DEFAULTS //============================================================================ // @@ -359,7 +44,7 @@ void A_AcolyteDie (AActor *self) self->RenderStyle = STYLE_Normal; // Only the Blue Acolyte does extra stuff on death. - if (!self->IsKindOf (RUNTIME_CLASS(AAcolyteBlue))) + if (self->GetClass()->TypeName != NAME_AcolyteBlue) return; // Make sure somebody is still alive @@ -372,7 +57,7 @@ void A_AcolyteDie (AActor *self) return; // Make sure all the other blue acolytes are dead. - TThinkerIterator iterator; + TThinkerIterator iterator(NAME_AcolyteBlue); AActor *other; while ( (other = iterator.Next ()) ) diff --git a/src/g_strife/a_reaver.cpp b/src/g_strife/a_reaver.cpp index 7b4305384..d5f17c47d 100644 --- a/src/g_strife/a_reaver.cpp +++ b/src/g_strife/a_reaver.cpp @@ -6,126 +6,8 @@ #include "p_local.h" #include "a_strifeglobal.h" -void A_TossGib (AActor *); -void A_XXScream (AActor *); - static FRandom pr_reaverattack ("ReaverAttack"); -// Reaver ------------------------------------------------------------------- - -void A_ReaverMelee (AActor *self); -void A_ReaverRanged (AActor *self); - -void A_21230 (AActor *) {} - -class AReaver : public AActor -{ - DECLARE_ACTOR (AReaver, AActor) -public: - void GetExplodeParms (int &damage, int &dist, bool &hurtSource) - { - damage = dist = 32; - } -}; - -FState AReaver::States[] = -{ -#define S_REAVER_STND (0) - S_NORMAL (ROB1, 'A', 10, A_Look, &States[S_REAVER_STND]), - // Needless duplication of the previous state removed - -#define S_REAVER_RUN (S_REAVER_STND+1) - S_NORMAL (ROB1, 'B', 3, A_Chase, &States[S_REAVER_RUN+1]), - S_NORMAL (ROB1, 'B', 3, A_Chase, &States[S_REAVER_RUN+2]), - S_NORMAL (ROB1, 'C', 3, A_Chase, &States[S_REAVER_RUN+3]), - S_NORMAL (ROB1, 'C', 3, A_Chase, &States[S_REAVER_RUN+4]), - S_NORMAL (ROB1, 'D', 3, A_Chase, &States[S_REAVER_RUN+5]), - S_NORMAL (ROB1, 'D', 3, A_Chase, &States[S_REAVER_RUN+6]), - S_NORMAL (ROB1, 'E', 3, A_Chase, &States[S_REAVER_RUN+7]), - S_NORMAL (ROB1, 'E', 3, A_Chase, &States[S_REAVER_RUN]), - -#define S_REAVER_MELEE (S_REAVER_RUN+8) - S_NORMAL (ROB1, 'H', 6, A_FaceTarget, &States[S_REAVER_MELEE+1]), - S_NORMAL (ROB1, 'I', 8, A_ReaverMelee, &States[S_REAVER_MELEE+2]), - S_NORMAL (ROB1, 'H', 6, NULL, &States[S_REAVER_RUN]), - -#define S_REAVER_MISSILE (S_REAVER_MELEE+3) - S_NORMAL (ROB1, 'F', 8, A_FaceTarget, &States[S_REAVER_MISSILE+1]), - S_BRIGHT (ROB1, 'G', 11, A_ReaverRanged, &States[S_REAVER_RUN]), - -#define S_REAVER_PAIN (S_REAVER_MISSILE+2) - S_NORMAL (ROB1, 'A', 2, NULL, &States[S_REAVER_PAIN+1]), - S_NORMAL (ROB1, 'A', 2, A_Pain, &States[S_REAVER_RUN]), - -#define S_REAVER_DEATH (S_REAVER_PAIN+2) - S_BRIGHT (ROB1, 'J', 6, NULL, &States[S_REAVER_DEATH+1]), - S_BRIGHT (ROB1, 'K', 6, A_Scream, &States[S_REAVER_DEATH+2]), - S_BRIGHT (ROB1, 'L', 5, NULL, &States[S_REAVER_DEATH+3]), - S_BRIGHT (ROB1, 'M', 5, A_NoBlocking, &States[S_REAVER_DEATH+4]), - S_BRIGHT (ROB1, 'N', 5, NULL, &States[S_REAVER_DEATH+5]), - S_BRIGHT (ROB1, 'O', 5, NULL, &States[S_REAVER_DEATH+6]), - S_BRIGHT (ROB1, 'P', 5, NULL, &States[S_REAVER_DEATH+7]), - S_BRIGHT (ROB1, 'Q', 6, A_ExplodeAndAlert, &States[S_REAVER_DEATH+8]), - S_NORMAL (ROB1, 'R', -1, NULL, NULL), - -#define S_REAVER_XDEATH (S_REAVER_DEATH+9) - S_BRIGHT (ROB1, 'L', 5, A_TossGib, &States[S_REAVER_XDEATH+1]), - S_BRIGHT (ROB1, 'M', 5, A_XXScream, &States[S_REAVER_XDEATH+2]), - S_BRIGHT (ROB1, 'N', 5, A_TossGib, &States[S_REAVER_XDEATH+3]), - S_BRIGHT (ROB1, 'O', 5, A_NoBlocking, &States[S_REAVER_XDEATH+4]), - S_BRIGHT (ROB1, 'P', 5, A_TossGib, &States[S_REAVER_XDEATH+5]), - S_BRIGHT (ROB1, 'Q', 6, A_ExplodeAndAlert, &States[S_REAVER_XDEATH+6]), - S_NORMAL (ROB1, 'R', -1, NULL, NULL), -}; - -IMPLEMENT_ACTOR (AReaver, Strife, 3001, 0) - PROP_SpawnHealth (150) - PROP_PainChance (128) - PROP_SpeedFixed (12) - PROP_RadiusFixed (20) - PROP_HeightFixed (60) - PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_NOBLOOD|MF_COUNTKILL) - PROP_Flags2 (MF2_MCROSS|MF2_PASSMOBJ|MF2_PUSHWALL|MF2_FLOORCLIP) - PROP_Flags4 (MF4_INCOMBAT) - PROP_MinMissileChance (150) - PROP_MaxDropOffHeight (32) - - PROP_Mass (500) - PROP_SpawnState (S_REAVER_STND) - PROP_SeeState (S_REAVER_RUN) - PROP_PainState (S_REAVER_PAIN) - PROP_MeleeState (S_REAVER_MELEE) - PROP_MissileState (S_REAVER_MISSILE) - PROP_DeathState (S_REAVER_DEATH) - PROP_XDeathState (S_REAVER_XDEATH) - PROP_StrifeType (52) - - PROP_SeeSound ("reaver/sight") - PROP_PainSound ("reaver/pain") - PROP_DeathSound ("reaver/death") - PROP_ActiveSound ("reaver/active") - PROP_HitObituary ("$OB_REAVERHIT") - PROP_Obituary ("$OB_REAVER") -END_DEFAULTS - -void A_ReaverMelee (AActor *self) -{ - if (self->target != NULL) - { - A_FaceTarget (self); - - if (self->CheckMeleeRange ()) - { - int damage; - - S_Sound (self, CHAN_WEAPON, "reaver/blade", 1, ATTN_NORM); - damage = ((pr_reaverattack() & 7) + 1) * 3; - P_DamageMobj (self->target, self, self, damage, NAME_Melee); - P_TraceBleed (damage, self->target, self); - } - } -} - void A_ReaverRanged (AActor *self) { if (self->target != NULL) diff --git a/src/g_strife/a_rebels.cpp b/src/g_strife/a_rebels.cpp index cc3a6dcdb..1f193bc71 100644 --- a/src/g_strife/a_rebels.cpp +++ b/src/g_strife/a_rebels.cpp @@ -10,101 +10,6 @@ static FRandom pr_shootgun ("ShootGun"); -void A_ShootGun (AActor *); -void A_TossGib (AActor *); -void A_Beacon (AActor *); - -// Base class for the rebels ------------------------------------------------ - -class ARebel : public AStrifeHumanoid -{ - DECLARE_ACTOR (ARebel, AStrifeHumanoid) -}; - -FState ARebel::States[] = -{ -#define S_REBEL_STND 0 - S_NORMAL (HMN1, 'P', 5, A_Look2, &States[S_REBEL_STND]), - S_NORMAL (HMN1, 'Q', 8, NULL, &States[S_REBEL_STND]), - S_NORMAL (HMN1, 'R', 8, NULL, &States[S_REBEL_STND]), - -#define S_REBEL_WAND (S_REBEL_STND+3) - S_NORMAL (HMN1, 'A', 6, A_Wander, &States[S_REBEL_WAND+1]), - S_NORMAL (HMN1, 'B', 6, A_Wander, &States[S_REBEL_WAND+2]), - S_NORMAL (HMN1, 'C', 6, A_Wander, &States[S_REBEL_WAND+3]), - S_NORMAL (HMN1, 'D', 6, A_Wander, &States[S_REBEL_WAND+4]), - S_NORMAL (HMN1, 'A', 6, A_Wander, &States[S_REBEL_WAND+5]), - S_NORMAL (HMN1, 'B', 6, A_Wander, &States[S_REBEL_WAND+6]), - S_NORMAL (HMN1, 'C', 6, A_Wander, &States[S_REBEL_WAND+7]), - S_NORMAL (HMN1, 'D', 6, A_Wander, &States[S_REBEL_STND]), - -#define S_REBEL_CHASE (S_REBEL_WAND+8) - S_NORMAL (HMN1, 'A', 3, A_Chase, &States[S_REBEL_CHASE+1]), - S_NORMAL (HMN1, 'A', 3, A_Chase, &States[S_REBEL_CHASE+2]), - S_NORMAL (HMN1, 'B', 3, A_Chase, &States[S_REBEL_CHASE+3]), - S_NORMAL (HMN1, 'B', 3, A_Chase, &States[S_REBEL_CHASE+4]), - S_NORMAL (HMN1, 'C', 3, A_Chase, &States[S_REBEL_CHASE+5]), - S_NORMAL (HMN1, 'C', 3, A_Chase, &States[S_REBEL_CHASE+6]), - S_NORMAL (HMN1, 'D', 3, A_Chase, &States[S_REBEL_CHASE+7]), - S_NORMAL (HMN1, 'D', 3, A_Chase, &States[S_REBEL_CHASE]), - -#define S_REBEL_ATK (S_REBEL_CHASE+8) - S_NORMAL (HMN1, 'E', 10, A_FaceTarget, &States[S_REBEL_ATK+1]), - S_BRIGHT (HMN1, 'F', 10, A_ShootGun, &States[S_REBEL_ATK+2]), - S_NORMAL (HMN1, 'E', 10, A_ShootGun, &States[S_REBEL_CHASE]), - -#define S_REBEL_PAIN (S_REBEL_ATK+3) - S_NORMAL (HMN1, 'O', 3, NULL, &States[S_REBEL_PAIN+1]), - S_NORMAL (HMN1, 'O', 3, A_Pain, &States[S_REBEL_CHASE]), - -#define S_REBEL_DIE (S_REBEL_PAIN+2) - S_NORMAL (HMN1, 'G', 5, NULL, &States[S_REBEL_DIE+1]), - S_NORMAL (HMN1, 'H', 5, A_Scream, &States[S_REBEL_DIE+2]), - S_NORMAL (HMN1, 'I', 3, A_NoBlocking, &States[S_REBEL_DIE+3]), - S_NORMAL (HMN1, 'J', 4, NULL, &States[S_REBEL_DIE+4]), - S_NORMAL (HMN1, 'K', 3, NULL, &States[S_REBEL_DIE+5]), - S_NORMAL (HMN1, 'L', 3, NULL, &States[S_REBEL_DIE+6]), - S_NORMAL (HMN1, 'M', 3, NULL, &States[S_REBEL_DIE+7]), - S_NORMAL (HMN1, 'N', -1, NULL, NULL), - -#define S_REBEL_XDIE (S_REBEL_DIE+8) - S_NORMAL (RGIB, 'A', 4, A_TossGib, &States[S_REBEL_XDIE+1]), - S_NORMAL (RGIB, 'B', 4, A_XScream, &States[S_REBEL_XDIE+2]), - S_NORMAL (RGIB, 'C', 3, A_NoBlocking, &States[S_REBEL_XDIE+3]), - S_NORMAL (RGIB, 'D', 3, A_TossGib, &States[S_REBEL_XDIE+4]), - S_NORMAL (RGIB, 'E', 3, A_TossGib, &States[S_REBEL_XDIE+5]), - S_NORMAL (RGIB, 'F', 3, A_TossGib, &States[S_REBEL_XDIE+6]), - S_NORMAL (RGIB, 'G', 3, NULL, &States[S_REBEL_XDIE+7]), - S_NORMAL (RGIB, 'H', 1400, NULL, NULL) -}; - -IMPLEMENT_ACTOR (ARebel, Strife, -1, 0) - PROP_SpawnState (S_REBEL_STND) - PROP_SeeState (S_REBEL_CHASE) - PROP_PainState (S_REBEL_PAIN) - PROP_MissileState (S_REBEL_ATK) - PROP_DeathState (S_REBEL_DIE) - PROP_XDeathState (S_REBEL_XDIE) - - PROP_SpawnHealth (60) - PROP_PainChance (250) - PROP_SpeedFixed (8) - PROP_RadiusFixed (20) - PROP_HeightFixed (56) - PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_FRIENDLY) - PROP_Flags2 (MF2_FLOORCLIP|MF2_PASSMOBJ|MF2_PUSHWALL|MF2_MCROSS) - PROP_Flags3 (MF3_ISMONSTER) - PROP_Flags4 (MF4_NOSPLASHALERT) - PROP_MinMissileChance (150) - PROP_Tag ("Rebel") - - PROP_SeeSound ("rebel/sight") - PROP_PainSound ("rebel/pain") - PROP_DeathSound ("rebel/death") - PROP_ActiveSound ("rebel/active") - PROP_Obituary ("$OB_REBEL") -END_DEFAULTS - //============================================================================ // // A_ShootGun @@ -126,130 +31,16 @@ void A_ShootGun (AActor *self) 3*(pr_shootgun() % 5 + 1), NAME_None, RUNTIME_CLASS(AStrifePuff)); } -// Rebel 1 ------------------------------------------------------------------ - -class ARebel1 : public ARebel -{ - DECLARE_STATELESS_ACTOR (ARebel1, ARebel) -public: - void NoBlockingSet (); -}; - -IMPLEMENT_STATELESS_ACTOR (ARebel1, Strife, 9, 0) - PROP_StrifeType (43) - PROP_StrifeTeaserType (42) - PROP_StrifeTeaserType2 (43) -END_DEFAULTS - -//============================================================================ -// -// ARebel1 :: NoBlockingSet -// -// Only this type of rebel drops bullet clips by default. -// -//============================================================================ - -void ARebel1::NoBlockingSet () -{ - P_DropItem (this, "ClipOfBullets", -1, 256); -} - -// Rebel 2 ------------------------------------------------------------------ - -class ARebel2 : public ARebel -{ - DECLARE_STATELESS_ACTOR (ARebel2, ARebel) -}; - -IMPLEMENT_STATELESS_ACTOR (ARebel2, Strife, 144, 0) - PROP_StrifeType (44) - PROP_StrifeTeaserType (43) - PROP_StrifeTeaserType2 (44) -END_DEFAULTS - -// Rebel 3 ------------------------------------------------------------------ - -class ARebel3 : public ARebel -{ - DECLARE_STATELESS_ACTOR (ARebel3, ARebel) -}; - -IMPLEMENT_STATELESS_ACTOR (ARebel3, Strife, 145, 0) - PROP_StrifeType (45) - PROP_StrifeTeaserType (44) - PROP_StrifeTeaserType2 (45) -END_DEFAULTS - -// Rebel 4 ------------------------------------------------------------------ - -class ARebel4 : public ARebel -{ - DECLARE_STATELESS_ACTOR (ARebel4, ARebel) -}; - -IMPLEMENT_STATELESS_ACTOR (ARebel4, Strife, 149, 0) - PROP_StrifeType (46) - PROP_StrifeTeaserType (45) - PROP_StrifeTeaserType2 (46) -END_DEFAULTS - -// Rebel 5 ------------------------------------------------------------------ - -class ARebel5 : public ARebel -{ - DECLARE_STATELESS_ACTOR (ARebel5, ARebel) -}; - -IMPLEMENT_STATELESS_ACTOR (ARebel5, Strife, 150, 0) - PROP_StrifeType (47) - PROP_StrifeTeaserType (46) - PROP_StrifeTeaserType2 (47) -END_DEFAULTS - -// Rebel 6 ------------------------------------------------------------------ - -class ARebel6 : public ARebel -{ - DECLARE_STATELESS_ACTOR (ARebel6, ARebel) -}; - -IMPLEMENT_STATELESS_ACTOR (ARebel6, Strife, 151, 0) - PROP_StrifeType (48) - PROP_StrifeTeaserType (47) - PROP_StrifeTeaserType2 (48) -END_DEFAULTS - // Teleporter Beacon -------------------------------------------------------- class ATeleporterBeacon : public AInventory { - DECLARE_ACTOR (ATeleporterBeacon, AInventory) + DECLARE_CLASS (ATeleporterBeacon, AInventory) public: bool Use (bool pickup); }; -FState ATeleporterBeacon::States[] = -{ - S_NORMAL (BEAC, 'A', -1, NULL, NULL), - - S_NORMAL (BEAC, 'A', 30, NULL, &States[2]), - S_NORMAL (BEAC, 'A', 160, A_Beacon, &States[1]) -}; - -IMPLEMENT_ACTOR (ATeleporterBeacon, Strife, 10, 0) - PROP_StrifeType (166) - PROP_SpawnHealth (5) - PROP_SpawnState (0) - PROP_SeeState (1) - PROP_RadiusFixed (16) - PROP_HeightFixed (16) - PROP_Inventory_MaxAmount (3) - PROP_Flags (MF_SPECIAL|MF_DROPPED) - PROP_Inventory_FlagsSet (IF_INVBAR) - PROP_Inventory_Icon ("I_BEAC") - PROP_Tag ("Teleporter_Beacon") - PROP_Inventory_PickupMessage("$TXT_BEACON") -END_DEFAULTS +IMPLEMENT_CLASS (ATeleporterBeacon) bool ATeleporterBeacon::Use (bool pickup) { @@ -277,10 +68,10 @@ bool ATeleporterBeacon::Use (bool pickup) void A_Beacon (AActor *self) { AActor *owner = self->target; - ARebel *rebel; + AActor *rebel; angle_t an; - rebel = Spawn (self->x, self->y, ONFLOORZ, ALLOW_REPLACE); + rebel = Spawn("Rebel1", self->x, self->y, ONFLOORZ, ALLOW_REPLACE); if (!P_TryMove (rebel, rebel->x, rebel->y, true)) { rebel->Destroy (); diff --git a/src/g_strife/a_sentinel.cpp b/src/g_strife/a_sentinel.cpp index a1fc5e78a..d50883194 100644 --- a/src/g_strife/a_sentinel.cpp +++ b/src/g_strife/a_sentinel.cpp @@ -6,122 +6,6 @@ static FRandom pr_sentinelrefire ("SentinelRefire"); -void A_TossGib (AActor *); - -// Sentinel ----------------------------------------------------------------- - -void A_SentinelBob (AActor *); -void A_SentinelAttack (AActor *); -void A_SentinelRefire (AActor *); - -class ASentinel : public AActor -{ - DECLARE_ACTOR (ASentinel, AActor) -}; - -FState ASentinel::States[] = -{ -#define S_SENTINEL_STND 0 - S_NORMAL (SEWR, 'A', 10, A_Look, &States[S_SENTINEL_STND]), - -#define S_SENTINEL_RUN (S_SENTINEL_STND+1) - S_NORMAL (SEWR, 'A', 6, A_SentinelBob, &States[S_SENTINEL_RUN+1]), - S_NORMAL (SEWR, 'A', 6, A_Chase, &States[S_SENTINEL_RUN]), - -#define S_SENTINEL_ATK (S_SENTINEL_RUN+2) - S_NORMAL (SEWR, 'B', 4, A_FaceTarget, &States[S_SENTINEL_ATK+1]), - S_BRIGHT (SEWR, 'C', 8, A_SentinelAttack, &States[S_SENTINEL_ATK+2]), - S_BRIGHT (SEWR, 'C', 4, A_SentinelRefire, &States[S_SENTINEL_ATK+1]), - -#define S_SENTINEL_PAIN (S_SENTINEL_ATK+3) - S_NORMAL (SEWR, 'D', 5, A_Pain, &States[S_SENTINEL_ATK+2]), - -#define S_SENTINEL_DIE (S_SENTINEL_PAIN+1) - S_NORMAL (SEWR, 'D', 7, A_NoBlocking, &States[S_SENTINEL_DIE+1]), - S_BRIGHT (SEWR, 'E', 8, A_TossGib, &States[S_SENTINEL_DIE+2]), - S_BRIGHT (SEWR, 'F', 5, A_Scream, &States[S_SENTINEL_DIE+3]), - S_BRIGHT (SEWR, 'G', 4, A_TossGib, &States[S_SENTINEL_DIE+4]), - S_BRIGHT (SEWR, 'H', 4, A_TossGib, &States[S_SENTINEL_DIE+5]), - S_NORMAL (SEWR, 'I', 4, NULL, &States[S_SENTINEL_DIE+6]), - S_NORMAL (SEWR, 'J', 5, NULL, NULL) -}; - -IMPLEMENT_ACTOR (ASentinel, Strife, 3006, 0) - PROP_SpawnState (S_SENTINEL_STND) - PROP_SeeState (S_SENTINEL_RUN) - PROP_PainState (S_SENTINEL_PAIN) - PROP_MissileState (S_SENTINEL_ATK) - PROP_DeathState (S_SENTINEL_DIE) - - PROP_SpawnHealth (100) - PROP_PainChance (255) - PROP_SpeedFixed (7) - PROP_RadiusFixed (23) - PROP_HeightFixed (53) - PROP_Mass (300) - PROP_StrifeType (91) - PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_SPAWNCEILING|MF_NOGRAVITY|MF_DROPOFF| - /*MF_FLOAT|*/MF_NOBLOOD|MF_COUNTKILL) - PROP_Flags2 (MF2_PASSMOBJ|MF2_PUSHWALL|MF2_MCROSS) - PROP_Flags3 (MF3_NOBLOCKMONST) - PROP_Flags4 (MF4_INCOMBAT|MF4_MISSILEMORE|MF4_LOOKALLAROUND) - PROP_MinMissileChance (150) - - PROP_SeeSound ("sentinel/sight") - PROP_DeathSound ("sentinel/death") - PROP_ActiveSound ("sentinel/active") - PROP_Obituary ("$OB_SENTINEL") -END_DEFAULTS - -// Sentinel FX 1 ------------------------------------------------------------ - -class ASentinelFX1 : public AActor -{ - DECLARE_ACTOR (ASentinelFX1, AActor) -}; - -FState ASentinelFX1::States[] = -{ - S_NORMAL (SHT1, 'A', 4, NULL, &States[1]), - S_NORMAL (SHT1, 'B', 4, NULL, &States[0]), - -#define S_SENTINELFX2_X 2 - S_NORMAL (POW1, 'F', 4, NULL, &States[S_SENTINELFX2_X+1]), - S_NORMAL (POW1, 'G', 4, NULL, &States[S_SENTINELFX2_X+2]), - S_NORMAL (POW1, 'H', 4, NULL, &States[S_SENTINELFX2_X+3]), - S_NORMAL (POW1, 'I', 4, NULL, &States[S_SENTINELFX2_X+4]), -#define S_SENTINELFX1_X (S_SENTINELFX2_X+4) - S_NORMAL (POW1, 'J', 4, NULL, NULL), -}; - -IMPLEMENT_ACTOR (ASentinelFX1, Strife, -1, 0) - PROP_SpawnState (0) - PROP_DeathState (S_SENTINELFX1_X) - PROP_SpeedFixed (40) - PROP_RadiusFixed (10) - PROP_HeightFixed (8) - PROP_Damage (0) - PROP_DamageType (NAME_Disintegrate) - PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE) - PROP_Flags2 (MF2_NOTELEPORT|MF2_IMPACT|MF2_PCROSS) - PROP_Flags4 (MF4_STRIFEDAMAGE) - PROP_MaxStepHeight (4) - PROP_RenderStyle (STYLE_Add) -END_DEFAULTS - -// Sentinel FX 2 ------------------------------------------------------------ - -class ASentinelFX2 : public ASentinelFX1 -{ - DECLARE_STATELESS_ACTOR (ASentinelFX2, ASentinelFX1) -}; - -IMPLEMENT_STATELESS_ACTOR (ASentinelFX2, Strife, -1, 0) - PROP_DeathState (S_SENTINELFX2_X) - PROP_Damage (1) - PROP_SeeSound ("sentinel/plasma") -END_DEFAULTS - void A_SentinelBob (AActor *self) { fixed_t minz, maxz; @@ -155,13 +39,13 @@ void A_SentinelAttack (AActor *self) { AActor *missile, *trail; - missile = P_SpawnMissileZAimed (self, self->z + 32*FRACUNIT, self->target, RUNTIME_CLASS(ASentinelFX2)); + missile = P_SpawnMissileZAimed (self, self->z + 32*FRACUNIT, self->target, PClass::FindClass("SentinelFX2")); if (missile != NULL && (missile->momx|missile->momy) != 0) { for (int i = 8; i > 1; --i) { - trail = Spawn ( + trail = Spawn("SentinelFX1", self->x + FixedMul (missile->radius * i, finecosine[missile->angle >> ANGLETOFINESHIFT]), self->y + FixedMul (missile->radius * i, finesine[missile->angle >> ANGLETOFINESHIFT]), missile->z + (missile->momz / 4 * i), ALLOW_REPLACE); diff --git a/src/g_strife/a_templar.cpp b/src/g_strife/a_templar.cpp index ad375d18c..7c0f558ef 100644 --- a/src/g_strife/a_templar.cpp +++ b/src/g_strife/a_templar.cpp @@ -8,119 +8,7 @@ static FRandom pr_templar ("Templar"); -void A_ReaverMelee (AActor *); -void A_TossGib (AActor *); -void A_1fce8 (AActor *); - -// Templar ------------------------------------------------------------------ - -class ATemplar : public AActor -{ - DECLARE_ACTOR (ATemplar, AActor) -public: - void NoBlockingSet (); -}; - -FState ATemplar::States[] = -{ -#define S_TEMPLAR_STAND 0 - S_NORMAL (PGRD, 'A', 5, A_Look2, &States[S_TEMPLAR_STAND]), - S_NORMAL (PGRD, 'B', 10, NULL, &States[S_TEMPLAR_STAND]), - S_NORMAL (PGRD, 'C', 10, NULL, &States[S_TEMPLAR_STAND]), - S_NORMAL (PGRD, 'B', 10, A_Wander, &States[S_TEMPLAR_STAND]), - -#define S_TEMPLAR_CHASE (S_TEMPLAR_STAND+4) - S_NORMAL (PGRD, 'A', 3, A_Chase, &States[S_TEMPLAR_CHASE+1]), - S_NORMAL (PGRD, 'A', 3, A_Chase, &States[S_TEMPLAR_CHASE+2]), - S_NORMAL (PGRD, 'B', 3, A_Chase, &States[S_TEMPLAR_CHASE+3]), - S_NORMAL (PGRD, 'B', 3, A_Chase, &States[S_TEMPLAR_CHASE+4]), - S_NORMAL (PGRD, 'C', 3, A_Chase, &States[S_TEMPLAR_CHASE+5]), - S_NORMAL (PGRD, 'C', 3, A_Chase, &States[S_TEMPLAR_CHASE+6]), - S_NORMAL (PGRD, 'D', 3, A_Chase, &States[S_TEMPLAR_CHASE+7]), - S_NORMAL (PGRD, 'D', 3, A_Chase, &States[S_TEMPLAR_CHASE]), - -#define S_TEMPLAR_MELEE (S_TEMPLAR_CHASE+8) - S_NORMAL (PGRD, 'E', 8, A_FaceTarget, &States[S_TEMPLAR_MELEE+1]), - S_NORMAL (PGRD, 'F', 8, A_ReaverMelee, &States[S_TEMPLAR_CHASE]), - -#define S_TEMPLAR_MISSILE (S_TEMPLAR_MELEE+2) - S_BRIGHT (PGRD, 'G', 8, A_FaceTarget, &States[S_TEMPLAR_MISSILE+1]), - S_BRIGHT (PGRD, 'H', 8, A_1fce8, &States[S_TEMPLAR_CHASE]), - -#define S_TEMPLAR_PAIN (S_TEMPLAR_MISSILE+2) - S_NORMAL (PGRD, 'A', 2, NULL, &States[S_TEMPLAR_PAIN+1]), - S_NORMAL (PGRD, 'A', 2, A_Pain, &States[S_TEMPLAR_CHASE]), - -#define S_TEMPLAR_DIE (S_TEMPLAR_PAIN+2) - S_BRIGHT (PGRD, 'I', 4, A_TossGib, &States[S_TEMPLAR_DIE+1]), - S_BRIGHT (PGRD, 'J', 4, A_Scream, &States[S_TEMPLAR_DIE+2]), - S_BRIGHT (PGRD, 'K', 4, A_TossGib, &States[S_TEMPLAR_DIE+3]), - S_BRIGHT (PGRD, 'L', 4, A_NoBlocking, &States[S_TEMPLAR_DIE+4]), - S_BRIGHT (PGRD, 'M', 4, NULL, &States[S_TEMPLAR_DIE+5]), - S_BRIGHT (PGRD, 'N', 4, NULL, &States[S_TEMPLAR_DIE+6]), - S_NORMAL (PGRD, 'O', 4, A_TossGib, &States[S_TEMPLAR_DIE+7]), - S_NORMAL (PGRD, 'P', 4, NULL, &States[S_TEMPLAR_DIE+8]), - S_NORMAL (PGRD, 'Q', 4, NULL, &States[S_TEMPLAR_DIE+9]), - S_NORMAL (PGRD, 'R', 4, NULL, &States[S_TEMPLAR_DIE+10]), - S_NORMAL (PGRD, 'S', 4, NULL, &States[S_TEMPLAR_DIE+11]), - S_NORMAL (PGRD, 'T', 4, NULL, &States[S_TEMPLAR_DIE+12]), - S_NORMAL (PGRD, 'U', 4, NULL, &States[S_TEMPLAR_DIE+13]), - S_NORMAL (PGRD, 'V', 4, NULL, &States[S_TEMPLAR_DIE+14]), - S_NORMAL (PGRD, 'W', 4, NULL, &States[S_TEMPLAR_DIE+15]), - S_NORMAL (PGRD, 'X', 4, NULL, &States[S_TEMPLAR_DIE+16]), - S_NORMAL (PGRD, 'Y', 4, NULL, &States[S_TEMPLAR_DIE+17]), - S_NORMAL (PGRD, 'Z', 4, NULL, &States[S_TEMPLAR_DIE+18]), - S_NORMAL (PGRD, '[', 4, NULL, &States[S_TEMPLAR_DIE+19]), - S_NORMAL (PGRD, '\\',-1, NULL, NULL), -}; - -IMPLEMENT_ACTOR (ATemplar, Strife, 3003, 0) - PROP_StrifeType (62) - PROP_StrifeTeaserType (61) - PROP_StrifeTeaserType2 (62) - PROP_SpawnHealth (300) - PROP_SpawnState (S_TEMPLAR_STAND) - PROP_SeeState (S_TEMPLAR_CHASE) - PROP_PainState (S_TEMPLAR_PAIN) - PROP_PainChance (100) - PROP_MeleeState (S_TEMPLAR_MELEE) - PROP_MissileState (S_TEMPLAR_MISSILE) - PROP_DeathState (S_TEMPLAR_DIE) - PROP_SpeedFixed (8) - PROP_RadiusFixed (20) - PROP_HeightFixed (60) - PROP_Mass (500) - PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_NOBLOOD|MF_COUNTKILL) - PROP_Flags2 (MF2_FLOORCLIP|MF2_PASSMOBJ|MF2_PUSHWALL|MF2_MCROSS) - PROP_Flags4 (MF4_SEESDAGGERS|MF4_NOSPLASHALERT) - PROP_MaxDropOffHeight (32) - PROP_MinMissileChance (150) - PROP_SeeSound ("templar/sight") - PROP_PainSound ("templar/pain") - PROP_DeathSound ("templar/death") - PROP_ActiveSound ("templar/active") - PROP_Tag ("TEMPLAR") // Known as "Enforcer" in earlier versions. - PROP_HitObituary ("$OB_TEMPLARHIT") - PROP_Obituary ("$OB_TEMPLAR") -END_DEFAULTS - -//============================================================================ -// -// ATemplar :: NoBlockingSet -// -//============================================================================ - -void ATemplar::NoBlockingSet () -{ - P_DropItem (this, "EnergyPod", 20, 256); -} - -class AMaulerPuff : public AActor -{ - DECLARE_ACTOR (AMaulerPuff, AActor) -}; - -void A_1fce8 (AActor *self) +void A_TemplarAttack (AActor *self) { int damage; angle_t angle; @@ -139,6 +27,6 @@ void A_1fce8 (AActor *self) damage = (pr_templar() & 4) * 2; angle = self->angle + (pr_templar.Random2() << 19); pitchdiff = pr_templar.Random2() * 332063; - P_LineAttack (self, angle, MISSILERANGE+64*FRACUNIT, pitch+pitchdiff, damage, NAME_Disintegrate, RUNTIME_CLASS(AMaulerPuff)); + P_LineAttack (self, angle, MISSILERANGE+64*FRACUNIT, pitch+pitchdiff, damage, NAME_Disintegrate, "MaulerPuff"); } } diff --git a/src/namedef.h b/src/namedef.h index dcd15bfda..a0af2bf49 100644 --- a/src/namedef.h +++ b/src/namedef.h @@ -122,6 +122,8 @@ xx(MiniMissileLauncher) xx(StrifeGrenadeLauncher) xx(Mauler) +xx(AcolyteBlue) + xx(Chicken) xx(Pig) diff --git a/src/p_enemy.h b/src/p_enemy.h index c79f916cb..179a4568f 100644 --- a/src/p_enemy.h +++ b/src/p_enemy.h @@ -19,6 +19,7 @@ enum dirtype_t extern fixed_t xspeed[8], yspeed[8]; +void P_RecursiveSound (sector_t *sec, AActor *soundtarget, bool splash, int soundblocks); bool P_HitFriend (AActor *self); void P_NoiseAlert (AActor *target, AActor *emmiter, bool splash=false); bool P_CheckMeleeRange2 (AActor *actor); diff --git a/src/thingdef/thingdef_codeptr.cpp b/src/thingdef/thingdef_codeptr.cpp index 478eaad55..a61ad2b8c 100644 --- a/src/thingdef/thingdef_codeptr.cpp +++ b/src/thingdef/thingdef_codeptr.cpp @@ -606,8 +606,9 @@ void A_ExplodeParms (AActor *self) int damage; int distance; bool hurtSource; + bool alert; - int index=CheckIndex(3); + int index=CheckIndex(4); if (index>=0) { damage = EvalExpressionI (StateParameters[index], self); @@ -615,12 +616,14 @@ void A_ExplodeParms (AActor *self) hurtSource = EvalExpressionN (StateParameters[index+2], self); if (damage == 0) damage = 128; if (distance == 0) distance = damage; + alert = !!EvalExpressionI (StateParameters[index+3], self); } else { damage = self->GetClass()->Meta.GetMetaInt (ACMETA_ExplosionDamage, 128); distance = self->GetClass()->Meta.GetMetaInt (ACMETA_ExplosionRadius, damage); hurtSource = !self->GetClass()->Meta.GetMetaInt (ACMETA_DontHurtShooter); + alert = false; } P_RadiusAttack (self, self->target, damage, distance, self->DamageType, hurtSource); @@ -628,9 +631,13 @@ void A_ExplodeParms (AActor *self) { P_HitFloor (self); } + if (alert && self->target != NULL && self->target->player != NULL) + { + validcount++; + P_RecursiveSound (self->Sector, self->target, false, 0); + } } - //========================================================================== // // A_RadiusThrust diff --git a/wadsrc/static/actors/heretic/hereticweaps.txt b/wadsrc/static/actors/heretic/hereticweaps.txt index 80f7d3434..ccd9142ef 100644 --- a/wadsrc/static/actors/heretic/hereticweaps.txt +++ b/wadsrc/static/actors/heretic/hereticweaps.txt @@ -457,6 +457,7 @@ ACTOR GauntletPuff1 VSpeed 0.8 States { + Spawn: PUF1 ABCD 4 BRIGHT Stop } @@ -468,6 +469,7 @@ ACTOR GauntletPuff2 : GauntletPuff1 { States { + Spawn: PUF1 EFGH 4 BRIGHT Stop } diff --git a/wadsrc/static/actors/nativeclasses.txt b/wadsrc/static/actors/nativeclasses.txt index 07de37e50..683baae0e 100644 --- a/wadsrc/static/actors/nativeclasses.txt +++ b/wadsrc/static/actors/nativeclasses.txt @@ -165,7 +165,7 @@ class Actor extends Thinker action native A_CustomComboAttack(class missiletype, eval float spawnheight, eval int damage, optional sound meleesound, optional name damagetype, optional evalnot bool bleed); action native A_Burst(class chunktype); action native A_RadiusThrust(optional eval int force, optional eval int distance, optional evalnot bool affectsource); - action native A_Explode(optional eval int damage, optional eval int distance, optional evalnot bool hurtsource); + action native A_Explode(optional eval int damage, optional eval int distance, optional evalnot bool hurtsource, optional eval bool alert); action native A_Stop(); action native A_Respawn(optional evalnot bool fog); action native A_BarrelDestroy(); @@ -180,6 +180,7 @@ class Actor extends Thinker action native A_Punch(); action native A_Feathers(); action native A_ClassBossHealth(); + action native A_ShootGun(); } class Inventory extends Actor diff --git a/wadsrc/static/actors/strife/acolyte.txt b/wadsrc/static/actors/strife/acolyte.txt new file mode 100644 index 000000000..c9b8d688f --- /dev/null +++ b/wadsrc/static/actors/strife/acolyte.txt @@ -0,0 +1,203 @@ + +// Base class for the acolytes ---------------------------------------------- + +ACTOR Acolyte : StrifeHumanoid +{ + Health 70 + PainChance 150 + Speed 7 + Radius 24 + Height 64 + Mass 400 + Monster + +SEESDAGGERS + +NOSPLASHALERT + MinMissileChance 150 + Tag "ACOLYTE" + SeeSound "acolyte/sight" + PainSound "acolyte/pain" + AttackSound "acolyte/rifle" + DeathSound "acolyte/death" + ActiveSound "acolyte/active" + Obituary "$OB_ACOLYTE" + + action native A_BeShadowyFoe (); + action native A_AcolyteBits (); + action native A_AcolyteDie (); + + States + { + Spawn: + AGRD A 5 A_Look2 + Wait + AGRD B 8 A_ClearShadow + Loop + AGRD D 8 + Loop + AGRD ABCDABCD 5 A_Wander + Loop + See: + AGRD A 6 A_AcolyteBits + AGRD BCD 6 A_Chase + Loop + Missile: + AGRD E 8 A_FaceTarget + AGRD FE 4 A_ShootGun + AGRD F 6 A_ShootGun + Goto See + Pain: + AGRD O 8 A_Pain + Goto See + Death: + AGRD G 4 + AGRD H 4 A_Scream + AGRD I 4 + AGRD J 3 + AGRD K 3 A_NoBlocking + AGRD L 3 + AGRD M 3 A_AcolyteDie + AGRD N 1400 + Stop + XDeath: + GIBS A 5 A_NoBlocking + GIBS BC 5 A_TossGib + GIBS D 4 A_TossGib + GIBS E 4 A_XScream + GIBS F 4 A_TossGib + GIBS GH 4 + GIBS I 5 + GIBS J 5 A_AcolyteDie + GIBS K 5 + GIBS L 1400 + Stop + } +} + + +// Acolyte 1 ---------------------------------------------------------------- + +ACTOR AcolyteTan : Acolyte 3002 +{ + Game Strife + ConversationID 53, 52, 53 + +MISSILEMORE +MISSILEEVENMORE + DropItem "ClipOfBullets" +} + +// Acolyte 2 ---------------------------------------------------------------- + +ACTOR AcolyteRed : Acolyte 142 +{ + Game Strife + ConversationID 54, 53, 54 + +MISSILEMORE +MISSILEEVENMORE + Translation 0 +} + +// Acolyte 3 ---------------------------------------------------------------- + +ACTOR AcolyteRust : Acolyte 143 +{ + Game Strife + ConversationID 55, 54, 55 + +MISSILEMORE +MISSILEEVENMORE + Translation 1 +} + +// Acolyte 4 ---------------------------------------------------------------- + +ACTOR AcolyteGray : Acolyte 146 +{ + Game Strife + ConversationID 56, 55, 56 + +MISSILEMORE +MISSILEEVENMORE + Translation 2 +} + +// Acolyte 5 ---------------------------------------------------------------- + +ACTOR AcolyteDGreen : Acolyte 147 +{ + Game Strife + ConversationID 57, 56, 57 + +MISSILEMORE +MISSILEEVENMORE + Translation 3 +} + +// Acolyte 6 ---------------------------------------------------------------- + +ACTOR AcolyteGold : Acolyte 148 +{ + Game Strife + ConversationID 58, 57, 58 + +MISSILEMORE +MISSILEEVENMORE + Translation 4 +} + +// Acolyte 7 ---------------------------------------------------------------- + +ACTOR AcolyteLGreen : Acolyte 232 +{ + Game Strife + Health 60 + ConversationID 59, -1, -1 + Translation 5 +} + +// Acolyte 8 ---------------------------------------------------------------- + +ACTOR AcolyteBlue : Acolyte 231 +{ + Game Strife + Health 60 + ConversationID 60, -1, -1 + Translation 6 +} + +// Shadow Acolyte ----------------------------------------------------------- + +ACTOR AcolyteShadow : Acolyte 58 +{ + Game Strife + ConversationID 61, 58, 59 + +MISSILEMORE + DropItem "ClipOfBullets" + States + { + See: + AGRD A 6 A_BeShadowyFoe + Goto Super::See+1 + Pain: + AGRD O 0 A_SetShadow + AGRD O 8 A_Pain + Goto See + } +} + +// Some guy turning into an acolyte ----------------------------------------- + +ACTOR AcolyteToBe : Acolyte 201 +{ + Game Strife + ConversationID 29, -1, -1 + Health 61 + Radius 20 + Height 56 + DeathSound "becoming/death" + -COUNTKILL + -ISMONSTER + + action native A_HideDecepticon (); + + States + { + Spawn: + ARMR A -1 + Stop + Pain: + ARMR A -1 A_HideDecepticon + Stop + Death: + Goto XDeath + } +} diff --git a/wadsrc/static/actors/strife/reaver.txt b/wadsrc/static/actors/strife/reaver.txt new file mode 100644 index 000000000..23439b9ba --- /dev/null +++ b/wadsrc/static/actors/strife/reaver.txt @@ -0,0 +1,66 @@ + +ACTOR Reaver 3001 +{ + Game Strife + Health 150 + Painchance 128 + Speed 12 + Radius 20 + Height 60 + Monster + +NOBLOOD + +INCOMBAT + MinMissileChance 150 + MaxDropoffHeight 32 + Mass 500 + ConversationID 52, -1, -1 + SeeSound "reaver/sight" + PainSound "reaver/pain" + DeathSound "reaver/death" + ActiveSound "reaver/active" + HitObituary "$OB_REAVERHIT" + Obituary "$OB_REAVER" + + action native A_ReaverRanged (); + + States + { + Spawn: + ROB1 A 10 A_Look + Loop + See: + ROB1 BBCCDDEE 3 A_Chase + Loop + Melee: + ROB1 H 6 A_FaceTarget + ROB1 I 8 A_CustomMeleeAttack(random[ReaverMelee](1,8)*3, "reaver/blade") + ROB1 H 6 + Goto See + Missile: + ROB1 F 8 A_FaceTarget + ROB1 G 11 BRIGHT A_ReaverRanged + Goto See + Pain: + ROB1 A 2 + ROB1 A 2 A_Pain + Goto See + Death: + ROB1 J 6 + ROB1 K 6 A_Scream + ROB1 L 5 + ROB1 M 5 A_NoBlocking + ROB1 NOP 5 + ROB1 Q 6 A_Explode(32,32,1,1) + ROB1 R -1 + Stop + XDeath: + ROB1 L 5 A_TossGib + ROB1 M 5 A_Scream + ROB1 N 5 A_TossGib + ROB1 O 5 A_NoBlocking + ROB1 P 5 A_TossGib + Goto Death+7 + } + +} + \ No newline at end of file diff --git a/wadsrc/static/actors/strife/rebels.txt b/wadsrc/static/actors/strife/rebels.txt new file mode 100644 index 000000000..7b6ac8fff --- /dev/null +++ b/wadsrc/static/actors/strife/rebels.txt @@ -0,0 +1,142 @@ + + +// Base class for the rebels ------------------------------------------------ + +ACTOR Rebel : StrifeHumanoid +{ + Health 60 + Painchance 250 + Speed 8 + Radius 20 + Height 56 + Monster + +FRIENDLY + -COUNTKILL + +NOSPLASHALERT + MinMissileChance 150 + Tag "Rebel" + SeeSound "rebel/sight" + PainSound "rebel/pain" + DeathSound "rebel/death" + ActiveSound "rebel/active" + Obituary "$OB_REBEL" + States + { + Spawn: + HMN1 P 5 A_Look2 + Loop + HMN1 Q 8 + Loop + HMN1 R 8 + Loop + HMN1 ABCDABCD 6 A_Wander + Loop + See: + HMN1 AABBCCDD 3 A_Chase + Loop + Missile: + HMN1 E 10 A_FaceTarget + HMN1 F 10 BRIGHT A_ShootGun + HMN1 E 10 A_ShootGun + Goto See + Pain: + HMN1 O 3 + HMN1 O 3 A_Pain + Goto See + Death: + HMN1 G 5 + HMN1 H 5 A_Scream + HMN1 I 3 A_NoBlocking + HMN1 J 4 + HMN1 KLM 3 + HMN1 N -1 + Stop + XDeath: + RGIB A 4 A_TossGib + RGIB B 4 A_XScream + RGIB C 3 A_NoBlocking + RGIB DEF 3 A_TossGib + RGIB G 3 + RGIB H 1400 + Stop + } +} + +// Rebel 1 ------------------------------------------------------------------ + +ACTOR Rebel1 : Rebel 9 +{ + Game Strife + ConversationID 43, 42, 43 + DropItem "ClipOfBullets" +} + +// Rebel 2 ------------------------------------------------------------------ + +ACTOR Rebel2 : Rebel 144 +{ + Game Strife + ConversationID 44, 43, 44 +} + +// Rebel 3 ------------------------------------------------------------------ + +ACTOR Rebel3 : Rebel 145 +{ + Game Strife + ConversationID 45, 44, 45 +} + +// Rebel 4 ------------------------------------------------------------------ + +ACTOR Rebel4 : Rebel 149 +{ + Game Strife + ConversationID 46, 45, 56 +} + +// Rebel 5 ------------------------------------------------------------------ + +ACTOR Rebel5 : Rebel 150 +{ + Game Strife + ConversationID 47, 46, 47 +} + +// Rebel 6 ------------------------------------------------------------------ + +ACTOR Rebel6 : Rebel 151 +{ + Game Strife + ConversationID 48, 47, 48 +} + +// Teleporter Beacon -------------------------------------------------------- + +ACTOR TeleporterBeacon : Inventory 10 native +{ + Game Strife + ConversationID 166,-1,-1 + Health 5 + Radius 16 + Height 16 + Inventory.MaxAmount 3 + +DROPPED + +INVENTORY.INVBAR + Inventory.Icon "I_BEAC" + Tag "Teleporter_Beacon" + Inventory.PickupMessage "$TXT_BEACON" + + action native A_Beacon (); + + States + { + Spawn: + BEAC A -1 + Stop + Drop: + BEAC A 30 + BEAC A 160 A_Beacon + Wait + } +} \ No newline at end of file diff --git a/wadsrc/static/actors/strife/sentinel.txt b/wadsrc/static/actors/strife/sentinel.txt new file mode 100644 index 000000000..b046b3d24 --- /dev/null +++ b/wadsrc/static/actors/strife/sentinel.txt @@ -0,0 +1,95 @@ + +// Sentinel ----------------------------------------------------------------- + +ACTOR Sentinel 3006 +{ + Game Strife + ConversationID 91,-1,-1 + Health 100 + Painchance 255 + Speed 7 + Radius 23 + Height 53 + Mass 300 + Monster + +SPAWNCEILING + +NOGRAVITY + +DROPOFF + +NOBLOOD + +NOBLOCKMONST + +INCOMBAT + +MISSILEMORE + +LOOKALLAROUND + MinMissileChance 150 + SeeSound "sentinel/sight" + DeathSound "sentinel/death" + ActiveSound "sentinel/active" + Obituary "$OB_SENTINEL" + + action native A_SentinelAttack (); + + States + { + Spawn: + SEWR A 10 A_Look + Loop + See: + SEWR A 6 A_SentinelBob + SEWR A 6 A_Chase + Loop + Missile: + SEWR B 4 A_FaceTarget + SEWR C 8 Bright A_SentinelAttack + SEWR C 4 Bright A_SentinelRefire + Goto Missile+1 + Pain: + SEWR D 5 A_Pain + Goto Missile+2 + Death: + SEWR D 7 A_Fall + SEWR E 8 Bright A_TossGib + SEWR F 5 Bright A_Scream + SEWR GH 4 Bright A_TossGib + SEWR I 4 + SEWR J 5 + Stop + } +} + +// Sentinel FX 1 ------------------------------------------------------------ + +ACTOR SentinelFX1 +{ + Speed 40 + Radius 10 + Height 8 + Damage 0 + DamageType Disintegrate + Projectile + +STRIFEDAMAGE + MaxStepHeight 4 + RenderStyle Add + States + { + Spawn: + SHT1 AB 4 + Loop + Death: + POW1 J 4 + Stop + } +} + +// Sentinel FX 2 ------------------------------------------------------------ + +ACTOR SentinelFX2 : SentinelFX1 +{ + SeeSound "sentinel/plasma" + States + { + Death: + POW1 FGHI 4 + Goto Super::Death + } +} + diff --git a/wadsrc/static/actors/strife/strifebishop.txt b/wadsrc/static/actors/strife/strifebishop.txt index 5f7eb5788..22d613c47 100644 --- a/wadsrc/static/actors/strife/strifebishop.txt +++ b/wadsrc/static/actors/strife/strifebishop.txt @@ -45,8 +45,7 @@ ACTOR StrifeBishop 187 MLDR G 3 Bright MLDR H 5 Bright A_Scream MLDR I 4 Bright A_TossGib - MLDR J 0 Bright A_AlertMonsters - MLDR J 4 Bright A_Explode(64,64) + MLDR J 4 Bright A_Explode(64,64,1,1) MLDR KL 3 Bright MLDR M 4 Bright A_NoBlocking MLDR N 4 Bright @@ -89,8 +88,7 @@ ACTOR BishopMissile Death: SMIS A 0 Bright A_SetTranslucent(1,1) SMIS A 0 Bright A_StopSoundEx("Voice") - SMIS A 0 Bright A_AlertMonsters - SMIS A 5 Bright A_Explode(64,64) + SMIS A 5 Bright A_Explode(64,64,1,1) SMIS B 5 Bright SMIS C 4 Bright SMIS DEFG 2 Bright diff --git a/wadsrc/static/actors/strife/templar.txt b/wadsrc/static/actors/strife/templar.txt new file mode 100644 index 000000000..fd8351c89 --- /dev/null +++ b/wadsrc/static/actors/strife/templar.txt @@ -0,0 +1,67 @@ + +ACTOR Templar 3003 +{ + Game Strife + ConversationID 62, 61, 62 + Health 300 + Painchance 100 + Speed 8 + Radius 20 + Height 60 + Mass 500 + Monster + +NOBLOOD + +SEESDAGGERS + +NOSPLASHALERT + MaxdropoffHeight 32 + MinMissileChance 200 + SeeSound "templar/sight" + PainSound "templar/pain" + DeathSound "templar/death" + ActiveSound "templar/active" + Tag "TEMPLAR" + HitObituary "$OB_TEMPLARHIT" + Obituary "$OB_TEMPLAR" + DropItem "EnergyPod" + + action native A_TemplarAttack(); + + States + { + Spawn: + PGRD A 5 A_Look2 + Loop + PGRD B 10 + Loop + PGRD C 10 + Loop + PGRD B 10 A_Wander + Loop + See: + PGRD AABBCCDD 3 A_Chase + Loop + Melee: + PGRD E 8 A_FaceTarget + PGRD F 8 A_CustomMeleeAttack(random[ReaverMelee](1,8)*3, "reaver/blade") + Goto See + Missile: + PGRD G 8 BRIGHT A_FaceTarget + PGRD H 8 BRIGHT A_TemplarAttack + Goto See + Pain: + PGRD A 2 + PGRD A 2 A_Pain + Goto See + Death: + PGRD I 4 A_TossGib + PGRD J 4 A_Scream + PGRD K 4 A_TossGib + PGRD L 4 A_NoBlocking + PGRD MN 4 + PGRD O 4 A_TossGib + PGRD "PQRSTUVWXYZ[" 4 + PGRD "\" -1 + Stop + } +} + diff --git a/wadsrc/static/decorate.txt b/wadsrc/static/decorate.txt index 597aa50f4..cab284bec 100644 --- a/wadsrc/static/decorate.txt +++ b/wadsrc/static/decorate.txt @@ -98,15 +98,20 @@ #include "actors/hexen/clericstaff.txt" #include "actors/strife/strifeplayer.txt" +#include "actors/strife/acolyte.txt" #include "actors/strife/beggars.txt" #include "actors/strife/merchants.txt" #include "actors/strife/peasants.txt" #include "actors/strife/strifebishop.txt" #include "actors/strife/questitems.txt" #include "actors/strife/ratbuddy.txt" +#include "actors/strife/rebels.txt" +#include "actors/strife/reaver.txt" +#include "actors/strife/sentinel.txt" #include "actors/strife/strifeammo.txt" #include "actors/strife/strifearmor.txt" #include "actors/strife/strifeitems.txt" #include "actors/strife/strifekeys.txt" #include "actors/strife/strifestuff.txt" +#include "actors/strife/templar.txt" #include "actors/strife/zombie.txt"