From 11fbfc5b1f67c6324f8c5e181a8595cd188c5259 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sun, 3 Aug 2008 16:13:23 +0000 Subject: [PATCH] - Added more DECORATE conversions by Karate Chris. SVN r1106 (trunk) --- docs/rh-log.txt | 1 + src/codepointers.h | 8 ++ src/g_hexen/a_clericboss.cpp | 138 --------------------- src/g_hexen/a_clericholy.cpp | 15 +++ src/g_hexen/a_fighterboss.cpp | 120 ------------------ src/g_hexen/a_fighterquietus.cpp | 39 +++--- src/g_hexen/a_flechette.cpp | 82 +----------- src/g_hexen/a_mageboss.cpp | 134 -------------------- src/g_hexen/a_magestaff.cpp | 73 +++++------ src/g_hexen/a_summon.cpp | 68 +--------- wadsrc/static/actors/hexen/clericboss.txt | 81 ++++++++++++ wadsrc/static/actors/hexen/fighterboss.txt | 82 ++++++++++++ wadsrc/static/actors/hexen/flechette.txt | 67 ++++++++++ wadsrc/static/actors/hexen/mageboss.txt | 85 +++++++++++++ wadsrc/static/actors/hexen/summon.txt | 41 ++++++ wadsrc/static/actors/nativeclasses.txt | 1 + wadsrc/static/decorate.txt | 5 + zdoom.vcproj | 12 -- 18 files changed, 450 insertions(+), 602 deletions(-) delete mode 100644 src/g_hexen/a_clericboss.cpp delete mode 100644 src/g_hexen/a_fighterboss.cpp delete mode 100644 src/g_hexen/a_mageboss.cpp create mode 100644 wadsrc/static/actors/hexen/clericboss.txt create mode 100644 wadsrc/static/actors/hexen/fighterboss.txt create mode 100644 wadsrc/static/actors/hexen/flechette.txt create mode 100644 wadsrc/static/actors/hexen/mageboss.txt create mode 100644 wadsrc/static/actors/hexen/summon.txt diff --git a/docs/rh-log.txt b/docs/rh-log.txt index 326535438..d45604ade 100644 --- a/docs/rh-log.txt +++ b/docs/rh-log.txt @@ -1,4 +1,5 @@ August 3, 2008 (Changes by Graf Zahl) +- Added more DECORATE conversions by Karate Chris. - Cleaned up the new bridge code and exported all related actors to DECORATE so that the exported code pointers can be used. - Separated Heretic's and Hexen's invulnerability items for stability diff --git a/src/codepointers.h b/src/codepointers.h index 8043b93a7..7eb5f7e86 100644 --- a/src/codepointers.h +++ b/src/codepointers.h @@ -160,6 +160,14 @@ ACTOR(FiredSplotch) ACTOR(SmBounce) ACTOR(FogSpawn) ACTOR(FogMove) +ACTOR(Summon) +ACTOR(PoisonBagInit) +ACTOR(CheckThrowBomb) +ACTOR(CheckThrowBomb2) +ACTOR(ClassBossHealth) +ACTOR(ClericAttack) +ACTOR(FighterAttack) +ACTOR(MageAttack) // Special code pointers for Strife's player - not to be used elsewhere! ACTOR(ItBurnsItBurns) diff --git a/src/g_hexen/a_clericboss.cpp b/src/g_hexen/a_clericboss.cpp deleted file mode 100644 index 35d7d8fc4..000000000 --- a/src/g_hexen/a_clericboss.cpp +++ /dev/null @@ -1,138 +0,0 @@ -#include "actor.h" -#include "info.h" -#include "p_local.h" -#include "s_sound.h" -#include "p_enemy.h" -#include "a_action.h" -#include "m_random.h" - -void A_ClericAttack (AActor *); -void A_ClericBurnScream (AActor *); - -// Cleric Boss (Traductus) -------------------------------------------------- - -class AClericBoss : public AActor -{ - DECLARE_ACTOR (AClericBoss, AActor) -}; - -FState AClericBoss::States[] = -{ -#define S_CLERIC 0 - S_NORMAL (CLER, 'A', 2, NULL , &States[S_CLERIC+1]), - S_NORMAL (CLER, 'A', 3, A_ClassBossHealth , &States[S_CLERIC+2]), - S_NORMAL (CLER, 'A', 5, A_Look , &States[S_CLERIC+2]), - -#define S_CLERIC_RUN1 (S_CLERIC+3) - S_NORMAL (CLER, 'A', 4, A_FastChase , &States[S_CLERIC_RUN1+1]), - S_NORMAL (CLER, 'B', 4, A_FastChase , &States[S_CLERIC_RUN1+2]), - S_NORMAL (CLER, 'C', 4, A_FastChase , &States[S_CLERIC_RUN1+3]), - S_NORMAL (CLER, 'D', 4, A_FastChase , &States[S_CLERIC_RUN1]), - -#define S_CLERIC_PAIN (S_CLERIC_RUN1+4) - S_NORMAL (CLER, 'H', 4, NULL , &States[S_CLERIC_PAIN+1]), - S_NORMAL (CLER, 'H', 4, A_Pain , &States[S_CLERIC_RUN1]), - -#define S_CLERIC_ATK1 (S_CLERIC_PAIN+2) - S_NORMAL (CLER, 'E', 8, A_FaceTarget , &States[S_CLERIC_ATK1+1]), - S_NORMAL (CLER, 'F', 8, A_FaceTarget , &States[S_CLERIC_ATK1+2]), - S_NORMAL (CLER, 'G', 10, A_ClericAttack , &States[S_CLERIC_RUN1]), - -#define S_CLERIC_DIE1 (S_CLERIC_ATK1+3) - S_NORMAL (CLER, 'I', 6, NULL , &States[S_CLERIC_DIE1+1]), - S_NORMAL (CLER, 'K', 6, A_Scream , &States[S_CLERIC_DIE1+2]), - S_NORMAL (CLER, 'L', 6, NULL , &States[S_CLERIC_DIE1+3]), - S_NORMAL (CLER, 'L', 6, NULL , &States[S_CLERIC_DIE1+4]), - S_NORMAL (CLER, 'M', 6, A_NoBlocking , &States[S_CLERIC_DIE1+5]), - S_NORMAL (CLER, 'N', 6, NULL , &States[S_CLERIC_DIE1+6]), - S_NORMAL (CLER, 'O', 6, NULL , &States[S_CLERIC_DIE1+7]), - S_NORMAL (CLER, 'P', 6, NULL , &States[S_CLERIC_DIE1+8]), - S_NORMAL (CLER, 'Q', -1, NULL , NULL), - -#define S_CLERIC_XDIE1 (S_CLERIC_DIE1+9) - S_NORMAL (CLER, 'R', 5, A_Scream , &States[S_CLERIC_XDIE1+1]), - S_NORMAL (CLER, 'S', 5, NULL , &States[S_CLERIC_XDIE1+2]), - S_NORMAL (CLER, 'T', 5, A_NoBlocking , &States[S_CLERIC_XDIE1+3]), - S_NORMAL (CLER, 'U', 5, NULL , &States[S_CLERIC_XDIE1+4]), - S_NORMAL (CLER, 'V', 5, NULL , &States[S_CLERIC_XDIE1+5]), - S_NORMAL (CLER, 'W', 5, NULL , &States[S_CLERIC_XDIE1+6]), - S_NORMAL (CLER, 'X', 5, NULL , &States[S_CLERIC_XDIE1+7]), - S_NORMAL (CLER, 'Y', 5, NULL , &States[S_CLERIC_XDIE1+8]), - S_NORMAL (CLER, 'Z', 5, NULL , &States[S_CLERIC_XDIE1+9]), - S_NORMAL (CLER, '[', -1, NULL , NULL), - -#define S_CLERIC_ICE (S_CLERIC_XDIE1+10) - S_NORMAL (CLER, '\\', 5, A_FreezeDeath , &States[S_CLERIC_ICE+1]), - S_NORMAL (CLER, '\\', 1, A_FreezeDeathChunks , &States[S_CLERIC_ICE+1]), - -#define S_CLERIC_BURN (S_CLERIC_ICE+2) - S_BRIGHT (FDTH, 'C', 5, A_ClericBurnScream , &States[S_CLERIC_BURN+1]), - S_BRIGHT (FDTH, 'D', 4, NULL , &States[S_CLERIC_BURN+2]), - S_BRIGHT (FDTH, 'G', 5, NULL , &States[S_CLERIC_BURN+3]), - S_BRIGHT (FDTH, 'H', 4, A_Scream , &States[S_CLERIC_BURN+4]), - S_BRIGHT (FDTH, 'I', 5, NULL , &States[S_CLERIC_BURN+5]), - S_BRIGHT (FDTH, 'J', 4, NULL , &States[S_CLERIC_BURN+6]), - S_BRIGHT (FDTH, 'K', 5, NULL , &States[S_CLERIC_BURN+7]), - S_BRIGHT (FDTH, 'L', 4, NULL , &States[S_CLERIC_BURN+8]), - S_BRIGHT (FDTH, 'M', 5, NULL , &States[S_CLERIC_BURN+9]), - S_BRIGHT (FDTH, 'N', 4, NULL , &States[S_CLERIC_BURN+10]), - S_BRIGHT (FDTH, 'O', 5, NULL , &States[S_CLERIC_BURN+11]), - S_BRIGHT (FDTH, 'P', 4, NULL , &States[S_CLERIC_BURN+12]), - S_BRIGHT (FDTH, 'Q', 5, NULL , &States[S_CLERIC_BURN+13]), - S_BRIGHT (FDTH, 'R', 4, NULL , &States[S_CLERIC_BURN+14]), - S_BRIGHT (FDTH, 'S', 5, A_NoBlocking , &States[S_CLERIC_BURN+15]), - S_BRIGHT (FDTH, 'T', 4, NULL , &States[S_CLERIC_BURN+16]), - S_BRIGHT (FDTH, 'U', 5, NULL , &States[S_CLERIC_BURN+17]), - S_BRIGHT (FDTH, 'V', 4, NULL , NULL), - -}; - -IMPLEMENT_ACTOR (AClericBoss, Hexen, 10101, 0) - PROP_SpawnHealth (800) - PROP_PainChance (50) - PROP_SpeedFixed (25) - PROP_RadiusFixed (16) - PROP_HeightFixed (64) - PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL) - PROP_Flags2 (MF2_FLOORCLIP|MF2_PASSMOBJ|MF2_TELESTOMP|MF2_PUSHWALL|MF2_MCROSS) - PROP_Flags3 (MF3_DONTMORPH) - - PROP_SpawnState (S_CLERIC) - PROP_SeeState (S_CLERIC_RUN1) - PROP_PainState (S_CLERIC_PAIN) - PROP_MeleeState (S_CLERIC_ATK1) - PROP_MissileState (S_CLERIC_ATK1) - PROP_DeathState (S_CLERIC_DIE1) - PROP_XDeathState (S_CLERIC_XDIE1) - PROP_BDeathState (S_CLERIC_BURN) - PROP_IDeathState (S_CLERIC_ICE) - - PROP_PainSound ("PlayerClericPain") - PROP_DeathSound ("PlayerClericCrazyDeath") - PROP_Obituary ("$OB_CBOSS") -END_DEFAULTS - -//============================================================================ -// -// A_ClericAttack -// -//============================================================================ - -void A_ClericAttack (AActor *actor) -{ - extern void A_CHolyAttack3 (AActor *actor); - - if (!actor->target) return; - A_CHolyAttack3 (actor); -} - -//============================================================================ -// -// A_ClericBurnScream -// -//============================================================================ - -void A_ClericBurnScream (AActor *actor) -{ - S_Sound (actor, CHAN_BODY, "PlayerClericBurnDeath", 1, ATTN_NORM); -} diff --git a/src/g_hexen/a_clericholy.cpp b/src/g_hexen/a_clericholy.cpp index d13aa7e84..4c25e4307 100644 --- a/src/g_hexen/a_clericholy.cpp +++ b/src/g_hexen/a_clericholy.cpp @@ -913,3 +913,18 @@ void A_DropWraithvergePieces (AActor *actor) } } } + +//============================================================================ +// +// A_ClericAttack +// (for the ClericBoss) +// +//============================================================================ + +void A_ClericAttack (AActor *actor) +{ + extern void A_CHolyAttack3 (AActor *actor); + + if (!actor->target) return; + A_CHolyAttack3 (actor); +} \ No newline at end of file diff --git a/src/g_hexen/a_fighterboss.cpp b/src/g_hexen/a_fighterboss.cpp deleted file mode 100644 index b51b24dd5..000000000 --- a/src/g_hexen/a_fighterboss.cpp +++ /dev/null @@ -1,120 +0,0 @@ -#include "actor.h" -#include "info.h" -#include "p_local.h" -#include "s_sound.h" -#include "p_enemy.h" -#include "a_action.h" -#include "m_random.h" - -void A_FighterAttack (AActor *); -void A_FighterBurnScream (AActor *); - -// Fighter Boss (Zedek) ----------------------------------------------------- - -class AFighterBoss : public AActor -{ - DECLARE_ACTOR (AFighterBoss, AActor) -}; - -FState AFighterBoss::States[] = -{ -#define S_FIGHTER 0 - S_NORMAL (PLAY, 'A', 2, NULL , &States[S_FIGHTER+1]), - S_NORMAL (PLAY, 'A', 3, A_ClassBossHealth , &States[S_FIGHTER+2]), - S_NORMAL (PLAY, 'A', 5, A_Look , &States[S_FIGHTER+2]), - -#define S_FIGHTER_RUN1 (S_FIGHTER+3) - S_NORMAL (PLAY, 'A', 4, A_FastChase , &States[S_FIGHTER_RUN1+1]), - S_NORMAL (PLAY, 'B', 4, A_FastChase , &States[S_FIGHTER_RUN1+2]), - S_NORMAL (PLAY, 'C', 4, A_FastChase , &States[S_FIGHTER_RUN1+3]), - S_NORMAL (PLAY, 'D', 4, A_FastChase , &States[S_FIGHTER_RUN1]), - -#define S_FIGHTER_PAIN (S_FIGHTER_RUN1+4) - S_NORMAL (PLAY, 'G', 4, NULL , &States[S_FIGHTER_PAIN+1]), - S_NORMAL (PLAY, 'G', 4, A_Pain , &States[S_FIGHTER_RUN1]), - -#define S_FIGHTER_ATK1 (S_FIGHTER_PAIN+2) - S_NORMAL (PLAY, 'E', 8, A_FaceTarget , &States[S_FIGHTER_ATK1+1]), - S_NORMAL (PLAY, 'F', 8, A_FighterAttack , &States[S_FIGHTER_RUN1]), - -#define S_FIGHTER_DIE1 (S_FIGHTER_ATK1+2) - S_NORMAL (PLAY, 'H', 6, NULL , &States[S_FIGHTER_DIE1+1]), - S_NORMAL (PLAY, 'I', 6, A_Scream , &States[S_FIGHTER_DIE1+2]), - S_NORMAL (PLAY, 'J', 6, NULL , &States[S_FIGHTER_DIE1+3]), - S_NORMAL (PLAY, 'K', 6, NULL , &States[S_FIGHTER_DIE1+4]), - S_NORMAL (PLAY, 'L', 6, A_NoBlocking , &States[S_FIGHTER_DIE1+5]), - S_NORMAL (PLAY, 'M', 6, NULL , &States[S_FIGHTER_DIE1+6]), - S_NORMAL (PLAY, 'N', -1, NULL , NULL), - -#define S_FIGHTER_XDIE1 (S_FIGHTER_DIE1+7) - S_NORMAL (PLAY, 'O', 5, A_Scream , &States[S_FIGHTER_XDIE1+1]), - S_NORMAL (PLAY, 'P', 5, A_SkullPop , &States[S_FIGHTER_XDIE1+2]), - S_NORMAL (PLAY, 'R', 5, A_NoBlocking , &States[S_FIGHTER_XDIE1+3]), - S_NORMAL (PLAY, 'S', 5, NULL , &States[S_FIGHTER_XDIE1+4]), - S_NORMAL (PLAY, 'T', 5, NULL , &States[S_FIGHTER_XDIE1+5]), - S_NORMAL (PLAY, 'U', 5, NULL , &States[S_FIGHTER_XDIE1+6]), - S_NORMAL (PLAY, 'V', 5, NULL , &States[S_FIGHTER_XDIE1+7]), - S_NORMAL (PLAY, 'W', -1, NULL , NULL), - -#define S_FIGHTER_ICE (S_FIGHTER_XDIE1+8) - S_NORMAL (PLAY, 'X', 5, A_FreezeDeath , &States[S_FIGHTER_ICE+1]), - S_NORMAL (PLAY, 'X', 1, A_FreezeDeathChunks , &States[S_FIGHTER_ICE+1]), - -#define S_FIGHTER_BURN (S_FIGHTER_ICE+2) - S_BRIGHT (FDTH, 'A', 5, A_FighterBurnScream , &States[S_FIGHTER_BURN+1]), - S_BRIGHT (FDTH, 'B', 4, NULL , &States[S_FIGHTER_BURN+2]), - S_BRIGHT (FDTH, 'G', 5, NULL , &States[S_FIGHTER_BURN+3]), - S_BRIGHT (FDTH, 'H', 4, A_Scream , &States[S_FIGHTER_BURN+4]), - S_BRIGHT (FDTH, 'I', 5, NULL , &States[S_FIGHTER_BURN+5]), - S_BRIGHT (FDTH, 'J', 4, NULL , &States[S_FIGHTER_BURN+6]), - S_BRIGHT (FDTH, 'K', 5, NULL , &States[S_FIGHTER_BURN+7]), - S_BRIGHT (FDTH, 'L', 4, NULL , &States[S_FIGHTER_BURN+8]), - S_BRIGHT (FDTH, 'M', 5, NULL , &States[S_FIGHTER_BURN+9]), - S_BRIGHT (FDTH, 'N', 4, NULL , &States[S_FIGHTER_BURN+10]), - S_BRIGHT (FDTH, 'O', 5, NULL , &States[S_FIGHTER_BURN+11]), - S_BRIGHT (FDTH, 'P', 4, NULL , &States[S_FIGHTER_BURN+12]), - S_BRIGHT (FDTH, 'Q', 5, NULL , &States[S_FIGHTER_BURN+13]), - S_BRIGHT (FDTH, 'R', 4, NULL , &States[S_FIGHTER_BURN+14]), - S_BRIGHT (FDTH, 'S', 5, A_NoBlocking , &States[S_FIGHTER_BURN+15]), - S_BRIGHT (FDTH, 'T', 4, NULL , &States[S_FIGHTER_BURN+16]), - S_BRIGHT (FDTH, 'U', 5, NULL , &States[S_FIGHTER_BURN+17]), - S_BRIGHT (FDTH, 'V', 4, NULL , NULL), -}; - -IMPLEMENT_ACTOR (AFighterBoss, Hexen, 10100, 0) - PROP_SpawnHealth (800) - PROP_PainChance (50) - PROP_SpeedFixed (25) - PROP_RadiusFixed (16) - PROP_HeightFixed (64) - PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL) - PROP_Flags2 (MF2_FLOORCLIP|MF2_PASSMOBJ|MF2_TELESTOMP|MF2_PUSHWALL|MF2_MCROSS) - PROP_Flags3 (MF3_DONTMORPH) - - PROP_SpawnState (S_FIGHTER) - PROP_SeeState (S_FIGHTER_RUN1) - PROP_PainState (S_FIGHTER_PAIN) - PROP_MeleeState (S_FIGHTER_ATK1) - PROP_MissileState (S_FIGHTER_ATK1) - PROP_DeathState (S_FIGHTER_DIE1) - PROP_XDeathState (S_FIGHTER_XDIE1) - PROP_IDeathState (S_FIGHTER_ICE) - PROP_BDeathState (S_FIGHTER_BURN) - - PROP_PainSound ("PlayerFighterPain") - PROP_DeathSound ("PlayerFighterCrazyDeath") - PROP_Obituary ("$OB_FBOSS") -END_DEFAULTS - -void A_FighterAttack (AActor *actor) -{ - extern void A_FSwordAttack2 (AActor *actor); - - if (!actor->target) return; - A_FSwordAttack2 (actor); -} - -void A_FighterBurnScream (AActor *actor) -{ - S_Sound (actor, CHAN_BODY, "PlayerFighterBurnDeath", 1, ATTN_NORM); -} diff --git a/src/g_hexen/a_fighterquietus.cpp b/src/g_hexen/a_fighterquietus.cpp index 5cee8bac3..ec88eaf07 100644 --- a/src/g_hexen/a_fighterquietus.cpp +++ b/src/g_hexen/a_fighterquietus.cpp @@ -325,24 +325,6 @@ void A_FSwordAttack (AActor *actor) S_Sound (actor, CHAN_WEAPON, "FighterSwordFire", 1, ATTN_NORM); } -//============================================================================ -// -// A_FSwordAttack2 -// -//============================================================================ - -void A_FSwordAttack2 (AActor *actor) -{ - angle_t angle = actor->angle; - - P_SpawnMissileAngle (actor, RUNTIME_CLASS(AFSwordMissile), angle+ANG45/4, 0); - P_SpawnMissileAngle (actor, RUNTIME_CLASS(AFSwordMissile), angle+ANG45/8, 0); - P_SpawnMissileAngle (actor, RUNTIME_CLASS(AFSwordMissile), angle, 0); - P_SpawnMissileAngle (actor, RUNTIME_CLASS(AFSwordMissile), angle-ANG45/8, 0); - P_SpawnMissileAngle (actor, RUNTIME_CLASS(AFSwordMissile), angle-ANG45/4, 0); - S_Sound (actor, CHAN_WEAPON, "FighterSwordFire", 1, ATTN_NORM); -} - //============================================================================ // // A_FSwordFlames @@ -397,3 +379,24 @@ void AFighterWeaponPiece::BeginPlay () Super::BeginPlay (); FourthWeaponClass = RUNTIME_CLASS(AFWeapQuietus); } + +//============================================================================ +// +// A_FighterAttack +// +//============================================================================ + +void A_FighterAttack (AActor *actor) +{ + if (!actor->target) return; + + angle_t angle = actor->angle; + + P_SpawnMissileAngle (actor, RUNTIME_CLASS(AFSwordMissile), angle+ANG45/4, 0); + P_SpawnMissileAngle (actor, RUNTIME_CLASS(AFSwordMissile), angle+ANG45/8, 0); + P_SpawnMissileAngle (actor, RUNTIME_CLASS(AFSwordMissile), angle, 0); + P_SpawnMissileAngle (actor, RUNTIME_CLASS(AFSwordMissile), angle-ANG45/8, 0); + P_SpawnMissileAngle (actor, RUNTIME_CLASS(AFSwordMissile), angle-ANG45/4, 0); + S_Sound (actor, CHAN_WEAPON, "FighterSwordFire", 1, ATTN_NORM); +} + diff --git a/src/g_hexen/a_flechette.cpp b/src/g_hexen/a_flechette.cpp index cb17682ff..b2985cc3b 100644 --- a/src/g_hexen/a_flechette.cpp +++ b/src/g_hexen/a_flechette.cpp @@ -21,30 +21,6 @@ void A_PoisonBagCheck (AActor *); void A_CheckThrowBomb (AActor *); void A_CheckThrowBomb2 (AActor *); -// Poison Bag (Flechette used by Cleric) ------------------------------------ - -class APoisonBag : public AActor -{ - DECLARE_ACTOR (APoisonBag, AActor) -}; - -FState APoisonBag::States[] = -{ -#define S_POISONBAG1 0 - S_BRIGHT (PSBG, 'A', 18, NULL , &States[S_POISONBAG1+1]), - S_BRIGHT (PSBG, 'B', 4, NULL , &States[S_POISONBAG1+2]), - S_NORMAL (PSBG, 'C', 3, NULL , &States[S_POISONBAG1+3]), - S_NORMAL (PSBG, 'C', 1, A_PoisonBagInit , NULL), -}; - -IMPLEMENT_ACTOR (APoisonBag, Hexen, -1, 0) - PROP_RadiusFixed (5) - PROP_HeightFixed (5) - PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY) - - PROP_SpawnState (S_POISONBAG1) -END_DEFAULTS - // Fire Bomb (Flechette used by Mage) --------------------------------------- class AFireBomb : public AActor @@ -86,58 +62,6 @@ IMPLEMENT_ACTOR (AFireBomb, Hexen, -1, 0) PROP_DeathSound ("FlechetteExplode") END_DEFAULTS -// Throwing Bomb (Flechette used by Fighter) -------------------------------- - -class AThrowingBomb : public AActor -{ - DECLARE_ACTOR (AThrowingBomb, AActor) -}; - -FState AThrowingBomb::States[] = -{ -#define S_THROWINGBOMB1 0 - S_NORMAL (THRW, 'A', 4, A_CheckThrowBomb , &States[S_THROWINGBOMB1+1]), - S_NORMAL (THRW, 'B', 3, A_CheckThrowBomb , &States[S_THROWINGBOMB1+2]), - S_NORMAL (THRW, 'C', 3, A_CheckThrowBomb , &States[S_THROWINGBOMB1+3]), - S_NORMAL (THRW, 'D', 3, A_CheckThrowBomb , &States[S_THROWINGBOMB1+4]), - S_NORMAL (THRW, 'E', 3, A_CheckThrowBomb , &States[S_THROWINGBOMB1+5]), - S_NORMAL (THRW, 'F', 3, A_CheckThrowBomb2 , &States[S_THROWINGBOMB1]), - -#define S_THROWINGBOMB7 (S_THROWINGBOMB1+6) - S_NORMAL (THRW, 'G', 6, A_CheckThrowBomb , &States[S_THROWINGBOMB7+1]), - S_NORMAL (THRW, 'F', 4, A_CheckThrowBomb , &States[S_THROWINGBOMB7+2]), - S_NORMAL (THRW, 'H', 6, A_CheckThrowBomb , &States[S_THROWINGBOMB7+3]), - S_NORMAL (THRW, 'F', 4, A_CheckThrowBomb , &States[S_THROWINGBOMB7+4]), - S_NORMAL (THRW, 'G', 6, A_CheckThrowBomb , &States[S_THROWINGBOMB7+5]), - S_NORMAL (THRW, 'F', 3, A_CheckThrowBomb , &States[S_THROWINGBOMB7+5]), - -#define S_THROWINGBOMB_X1 (S_THROWINGBOMB7+6) - S_BRIGHT (CFCF, 'Q', 4, A_NoGravity , &States[S_THROWINGBOMB_X1+1]), - S_BRIGHT (CFCF, 'R', 3, A_Scream , &States[S_THROWINGBOMB_X1+2]), - S_BRIGHT (CFCF, 'S', 4, A_Explode , &States[S_THROWINGBOMB_X1+3]), - S_BRIGHT (CFCF, 'T', 3, NULL , &States[S_THROWINGBOMB_X1+4]), - S_BRIGHT (CFCF, 'U', 4, NULL , &States[S_THROWINGBOMB_X1+5]), - S_BRIGHT (CFCF, 'W', 3, NULL , &States[S_THROWINGBOMB_X1+6]), - S_BRIGHT (CFCF, 'X', 4, NULL , &States[S_THROWINGBOMB_X1+7]), - S_BRIGHT (CFCF, 'Z', 3, NULL , NULL), -}; - -IMPLEMENT_ACTOR (AThrowingBomb, Hexen, -1, 0) - PROP_SpawnHealth (48) - PROP_SpeedFixed (12) - PROP_RadiusFixed (8) - PROP_HeightFixed (10) - PROP_DamageType (NAME_Fire) - PROP_Flags (MF_NOBLOCKMAP|MF_DROPOFF|MF_MISSILE) - PROP_Flags2 (MF2_HEXENBOUNCE) - - PROP_SpawnState (S_THROWINGBOMB1) - PROP_DeathState (S_THROWINGBOMB_X1) - - PROP_SeeSound ("FlechetteBounce") - PROP_DeathSound ("FlechetteExplode") -END_DEFAULTS - // Poison Bag Artifact (Flechette) ------------------------------------------ class AArtiPoisonBag : public AInventory @@ -184,7 +108,7 @@ bool AArtiPoisonBag1::Use (bool pickup) angle_t angle = Owner->angle >> ANGLETOFINESHIFT; AActor *mo; - mo = Spawn ( + mo = Spawn ("PoisonBag", Owner->x+16*finecosine[angle], Owner->y+24*finesine[angle], Owner->z- Owner->floorclip+8*FRACUNIT, ALLOW_REPLACE); @@ -243,7 +167,7 @@ bool AArtiPoisonBag3::Use (bool pickup) { AActor *mo; - mo = Spawn (Owner->x, Owner->y, + mo = Spawn ("ThrowingBomb", Owner->x, Owner->y, Owner->z-Owner->floorclip+35*FRACUNIT + (Owner->player? Owner->player->crouchoffset : 0), ALLOW_REPLACE); if (mo) { @@ -547,7 +471,7 @@ void A_CheckThrowBomb2 (AActor *actor) TMulScale32 (actor->momx, actor->momx, actor->momy, actor->momy, actor->momz, actor->momz) < (3*3)/(2*2)) { - actor->SetState (&AThrowingBomb::States[S_THROWINGBOMB7]); + actor->SetState (actor->SpawnState + 6); actor->z = actor->floorz; actor->momz = 0; actor->flags2 &= ~MF2_BOUNCETYPE; diff --git a/src/g_hexen/a_mageboss.cpp b/src/g_hexen/a_mageboss.cpp deleted file mode 100644 index e45c47375..000000000 --- a/src/g_hexen/a_mageboss.cpp +++ /dev/null @@ -1,134 +0,0 @@ -#include "actor.h" -#include "info.h" -#include "p_local.h" -#include "s_sound.h" -#include "p_enemy.h" -#include "a_action.h" - -void A_MageAttack (AActor *); -void A_MageBurnScream (AActor *); - -// Mage Boss (Menelkir) ----------------------------------------------------- - -class AMageBoss : public AActor -{ - DECLARE_ACTOR (AMageBoss, AActor) -}; - -FState AMageBoss::States[] = -{ -#define S_MAGE 0 - S_NORMAL (MAGE, 'A', 2, NULL , &States[S_MAGE+1]), - S_NORMAL (MAGE, 'A', 3, A_ClassBossHealth , &States[S_MAGE+2]), - S_NORMAL (MAGE, 'A', 5, A_Look , &States[S_MAGE+2]), - -#define S_MAGE_RUN1 (S_MAGE+3) - S_NORMAL (MAGE, 'A', 4, A_FastChase , &States[S_MAGE_RUN1+1]), - S_NORMAL (MAGE, 'B', 4, A_FastChase , &States[S_MAGE_RUN1+2]), - S_NORMAL (MAGE, 'C', 4, A_FastChase , &States[S_MAGE_RUN1+3]), - S_NORMAL (MAGE, 'D', 4, A_FastChase , &States[S_MAGE_RUN1]), - -#define S_MAGE_PAIN (S_MAGE_RUN1+4) - S_NORMAL (MAGE, 'G', 4, NULL , &States[S_MAGE_PAIN+1]), - S_NORMAL (MAGE, 'G', 4, A_Pain , &States[S_MAGE_RUN1]), - -#define S_MAGE_ATK1 (S_MAGE_PAIN+2) - S_NORMAL (MAGE, 'E', 8, A_FaceTarget , &States[S_MAGE_ATK1+1]), - S_BRIGHT (MAGE, 'F', 8, A_MageAttack , &States[S_MAGE_RUN1]), - -#define S_MAGE_DIE1 (S_MAGE_ATK1+2) - S_NORMAL (MAGE, 'H', 6, NULL , &States[S_MAGE_DIE1+1]), - S_NORMAL (MAGE, 'I', 6, A_Scream , &States[S_MAGE_DIE1+2]), - S_NORMAL (MAGE, 'J', 6, NULL , &States[S_MAGE_DIE1+3]), - S_NORMAL (MAGE, 'K', 6, NULL , &States[S_MAGE_DIE1+4]), - S_NORMAL (MAGE, 'L', 6, A_NoBlocking , &States[S_MAGE_DIE1+5]), - S_NORMAL (MAGE, 'M', 6, NULL , &States[S_MAGE_DIE1+6]), - S_NORMAL (MAGE, 'N', -1, NULL , NULL), - -#define S_MAGE_XDIE1 (S_MAGE_DIE1+7) - S_NORMAL (MAGE, 'O', 5, A_Scream , &States[S_MAGE_XDIE1+1]), - S_NORMAL (MAGE, 'P', 5, NULL , &States[S_MAGE_XDIE1+2]), - S_NORMAL (MAGE, 'R', 5, A_NoBlocking , &States[S_MAGE_XDIE1+3]), - S_NORMAL (MAGE, 'S', 5, NULL , &States[S_MAGE_XDIE1+4]), - S_NORMAL (MAGE, 'T', 5, NULL , &States[S_MAGE_XDIE1+5]), - S_NORMAL (MAGE, 'U', 5, NULL , &States[S_MAGE_XDIE1+6]), - S_NORMAL (MAGE, 'V', 5, NULL , &States[S_MAGE_XDIE1+7]), - S_NORMAL (MAGE, 'W', 5, NULL , &States[S_MAGE_XDIE1+8]), - S_NORMAL (MAGE, 'X', -1, NULL , NULL), - -#define S_MAGE_ICE (S_MAGE_XDIE1+9) - S_NORMAL (MAGE, 'Y', 5, A_FreezeDeath , &States[S_MAGE_ICE+1]), - S_NORMAL (MAGE, 'Y', 1, A_FreezeDeathChunks , &States[S_MAGE_ICE+1]), - -#define S_MAGE_BURN (S_MAGE_ICE+2) - S_BRIGHT (FDTH, 'E', 5, A_MageBurnScream , &States[S_MAGE_BURN+1]), - S_BRIGHT (FDTH, 'F', 4, NULL , &States[S_MAGE_BURN+2]), - S_BRIGHT (FDTH, 'G', 5, NULL , &States[S_MAGE_BURN+3]), - S_BRIGHT (FDTH, 'H', 4, A_Scream , &States[S_MAGE_BURN+4]), - S_BRIGHT (FDTH, 'I', 5, NULL , &States[S_MAGE_BURN+5]), - S_BRIGHT (FDTH, 'J', 4, NULL , &States[S_MAGE_BURN+6]), - S_BRIGHT (FDTH, 'K', 5, NULL , &States[S_MAGE_BURN+7]), - S_BRIGHT (FDTH, 'L', 4, NULL , &States[S_MAGE_BURN+8]), - S_BRIGHT (FDTH, 'M', 5, NULL , &States[S_MAGE_BURN+9]), - S_BRIGHT (FDTH, 'N', 4, NULL , &States[S_MAGE_BURN+10]), - S_BRIGHT (FDTH, 'O', 5, NULL , &States[S_MAGE_BURN+11]), - S_BRIGHT (FDTH, 'P', 4, NULL , &States[S_MAGE_BURN+12]), - S_BRIGHT (FDTH, 'Q', 5, NULL , &States[S_MAGE_BURN+13]), - S_BRIGHT (FDTH, 'R', 4, NULL , &States[S_MAGE_BURN+14]), - S_BRIGHT (FDTH, 'S', 5, A_NoBlocking , &States[S_MAGE_BURN+15]), - S_BRIGHT (FDTH, 'T', 4, NULL , &States[S_MAGE_BURN+16]), - S_BRIGHT (FDTH, 'U', 5, NULL , &States[S_MAGE_BURN+17]), - S_BRIGHT (FDTH, 'V', 4, NULL , NULL), - -}; - -IMPLEMENT_ACTOR (AMageBoss, Hexen, 10102, 0) - PROP_SpawnHealth (800) - PROP_PainChance (50) - PROP_SpeedFixed (25) - PROP_RadiusFixed (16) - PROP_HeightFixed (64) - PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL) - PROP_Flags2 (MF2_FLOORCLIP|MF2_PASSMOBJ|MF2_TELESTOMP|MF2_PUSHWALL|MF2_MCROSS) - PROP_Flags3 (MF3_DONTMORPH) - - PROP_SpawnState (S_MAGE) - PROP_SeeState (S_MAGE_RUN1) - PROP_PainState (S_MAGE_PAIN) - PROP_MeleeState (S_MAGE_ATK1) - PROP_MissileState (S_MAGE_ATK1) - PROP_DeathState (S_MAGE_DIE1) - PROP_XDeathState (S_MAGE_XDIE1) - PROP_IDeathState (S_MAGE_ICE) - PROP_BDeathState (S_MAGE_BURN) - - PROP_PainSound ("PlayerMagePain") - PROP_DeathSound ("PlayerMageCrazyDeath") - PROP_Obituary ("$OB_MBOSS") -END_DEFAULTS - - -//============================================================================ -// -// A_MageAttack -// -//============================================================================ - -void A_MageAttack (AActor *actor) -{ - extern void A_MStaffAttack2 (AActor *actor); - - if (!actor->target) return; - A_MStaffAttack2 (actor); -} - -//============================================================================ -// -// A_MageBurnScream -// -//============================================================================ - -void A_MageBurnScream (AActor *actor) -{ - S_Sound (actor, CHAN_BODY, "PlayerMageBurnDeath", 1, ATTN_NORM); -} diff --git a/src/g_hexen/a_magestaff.cpp b/src/g_hexen/a_magestaff.cpp index ac8a253b1..7ba7a49a9 100644 --- a/src/g_hexen/a_magestaff.cpp +++ b/src/g_hexen/a_magestaff.cpp @@ -343,41 +343,6 @@ bool AMageStaffFX2::SpecialBlastHandling (AActor *source, fixed_t strength) //============================================================================ -//============================================================================ -// -// MStaffSpawn2 - for use by mage class boss -// -//============================================================================ - -void MStaffSpawn2 (AActor *actor, angle_t angle) -{ - AActor *mo; - - mo = P_SpawnMissileAngleZ (actor, actor->z+40*FRACUNIT, - RUNTIME_CLASS(AMageStaffFX2), angle, 0); - if (mo) - { - mo->target = actor; - mo->tracer = P_BlockmapSearch (mo, 10, FrontBlockCheck); - } -} - -//============================================================================ -// -// A_MStaffAttack2 - for use by mage class boss -// -//============================================================================ - -void A_MStaffAttack2 (AActor *actor) -{ - angle_t angle; - angle = actor->angle; - MStaffSpawn2 (actor, angle); - MStaffSpawn2 (actor, angle-ANGLE_1*5); - MStaffSpawn2 (actor, angle+ANGLE_1*5); - S_Sound (actor, CHAN_WEAPON, "MageStaffFire", 1, ATTN_NORM); -} - //============================================================================ // // MStaffSpawn @@ -534,3 +499,41 @@ static AActor *FrontBlockCheck (AActor *mo, int index) } return NULL; } + +//============================================================================ +// +// MStaffSpawn2 - for use by mage class boss +// +//============================================================================ + +void MStaffSpawn2 (AActor *actor, angle_t angle) +{ + AActor *mo; + + mo = P_SpawnMissileAngleZ (actor, actor->z+40*FRACUNIT, + RUNTIME_CLASS(AMageStaffFX2), angle, 0); + if (mo) + { + mo->target = actor; + mo->tracer = P_BlockmapSearch (mo, 10, FrontBlockCheck); + } +} + +//============================================================================ +// +// A_MStaffAttack2 - for use by mage class boss +// +//============================================================================ + +void A_MageAttack (AActor *actor) +{ + if (!actor->target) return; + + angle_t angle; + angle = actor->angle; + MStaffSpawn2 (actor, angle); + MStaffSpawn2 (actor, angle-ANGLE_1*5); + MStaffSpawn2 (actor, angle+ANGLE_1*5); + S_Sound (actor, CHAN_WEAPON, "MageStaffFire", 1, ATTN_NORM); +} + diff --git a/src/g_hexen/a_summon.cpp b/src/g_hexen/a_summon.cpp index 7636ffcf6..2bdc86458 100644 --- a/src/g_hexen/a_summon.cpp +++ b/src/g_hexen/a_summon.cpp @@ -37,70 +37,6 @@ IMPLEMENT_ACTOR (AArtiDarkServant, Hexen, 86, 16) PROP_Inventory_PickupMessage("$TXT_ARTISUMMON") END_DEFAULTS -// Summoning Doll ----------------------------------------------------------- - -class ASummoningDoll : public AActor -{ - DECLARE_ACTOR (ASummoningDoll, AActor) -}; - -FState ASummoningDoll::States[] = -{ -#define S_SUMMON_FX1_1 0 - S_NORMAL (SUMN, 'A', 4, NULL , &States[S_SUMMON_FX1_1]), - -#define S_SUMMON_FX2_1 (S_SUMMON_FX1_1+1) - S_NORMAL (SUMN, 'A', 4, NULL , &States[S_SUMMON_FX2_1+1]), - S_NORMAL (SUMN, 'A', 4, NULL , &States[S_SUMMON_FX2_1+2]), - S_NORMAL (SUMN, 'A', 4, A_Summon , NULL), -}; - -IMPLEMENT_ACTOR (ASummoningDoll, Hexen, -1, 0) - PROP_SpeedFixed (20) - PROP_Flags (MF_NOBLOCKMAP|MF_DROPOFF|MF_MISSILE) - PROP_Flags2 (MF2_NOTELEPORT) - - PROP_SpawnState (S_SUMMON_FX1_1) - PROP_DeathState (S_SUMMON_FX2_1) -END_DEFAULTS - -// Minotaur Smoke ----------------------------------------------------------- - -class AMinotaurSmoke : public AActor -{ - DECLARE_ACTOR (AMinotaurSmoke, AActor) -}; - -FState AMinotaurSmoke::States[] = -{ - S_NORMAL (MNSM, 'A', 3, NULL , &States[1]), - S_NORMAL (MNSM, 'B', 3, NULL , &States[2]), - S_NORMAL (MNSM, 'C', 3, NULL , &States[3]), - S_NORMAL (MNSM, 'D', 3, NULL , &States[4]), - S_NORMAL (MNSM, 'E', 3, NULL , &States[5]), - S_NORMAL (MNSM, 'F', 3, NULL , &States[6]), - S_NORMAL (MNSM, 'G', 3, NULL , &States[7]), - S_NORMAL (MNSM, 'H', 3, NULL , &States[8]), - S_NORMAL (MNSM, 'I', 3, NULL , &States[9]), - S_NORMAL (MNSM, 'J', 3, NULL , &States[10]), - S_NORMAL (MNSM, 'K', 3, NULL , &States[11]), - S_NORMAL (MNSM, 'L', 3, NULL , &States[12]), - S_NORMAL (MNSM, 'M', 3, NULL , &States[13]), - S_NORMAL (MNSM, 'N', 3, NULL , &States[14]), - S_NORMAL (MNSM, 'O', 3, NULL , &States[15]), - S_NORMAL (MNSM, 'P', 3, NULL , &States[16]), - S_NORMAL (MNSM, 'Q', 3, NULL , NULL), -}; - -IMPLEMENT_ACTOR (AMinotaurSmoke, Hexen, -1, 0) - PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY) - PROP_Flags2 (MF2_NOTELEPORT) - PROP_RenderStyle (STYLE_Translucent) - PROP_Alpha (HX_SHADOW) - - PROP_SpawnState (0) -END_DEFAULTS - //============================================================================ // @@ -110,7 +46,7 @@ END_DEFAULTS bool AArtiDarkServant::Use (bool pickup) { - AActor *mo = P_SpawnPlayerMissile (Owner, RUNTIME_CLASS(ASummoningDoll)); + AActor *mo = P_SpawnPlayerMissile (Owner, PClass::FindClass ("SummoningDoll")); if (mo) { mo->target = Owner; @@ -158,7 +94,7 @@ void A_Summon (AActor *actor) } // Make smoke puff - Spawn (actor->x, actor->y, actor->z, ALLOW_REPLACE); + Spawn ("MinotaurSmoke", actor->x, actor->y, actor->z, ALLOW_REPLACE); S_Sound (actor, CHAN_VOICE, mo->ActiveSound, 1, ATTN_NORM); } } diff --git a/wadsrc/static/actors/hexen/clericboss.txt b/wadsrc/static/actors/hexen/clericboss.txt new file mode 100644 index 000000000..c94b4e39b --- /dev/null +++ b/wadsrc/static/actors/hexen/clericboss.txt @@ -0,0 +1,81 @@ + +// Cleric Boss (Traductus) -------------------------------------------------- + +ACTOR ClericBoss 10101 +{ + Game Hexen + Health 800 + PainChance 50 + Speed 25 + Radius 16 + Height 64 + Monster + +FLOORCLIP +TELESTOMP + +DONTMORPH + -CANUSEWALLS + PainSound "PlayerClericPain" + DeathSound "PlayerClericCrazyDeath" + Obituary "$OBCBOSS" + + action native A_ClericAttack(); + + States + { + Spawn: + CLER A 2 + CLER A 3 A_ClassBossHealth + CLER A 5 A_Look + Wait + See: + CLER ABCD 4 A_FastChase + Loop + Pain: + CLER H 4 + CLER H 4 A_Pain + Goto See + Melee: + Missile: + CLER EF 8 A_FaceTarget + CLER G 10 A_ClericAttack + Goto See + Death: + CLER I 6 + CLER K 6 A_Scream + CLER LL 6 + CLER M 6 A_NoBlocking + CLER NOP 6 + CLER Q -1 + Stop + XDeath: + CLER R 5 A_Scream + CLER S 5 + CLER T 5 A_NoBlocking + CLER UVWXYZ 5 + CLER "[" -1 + Stop + Ice: + CLER "\" 5 A_FreezeDeath + CLER "\" 1 A_FreezeDeathChunks + Wait + Burn: + CLER C 5 Bright A_PlaySound("PlayerClericBurnDeath") + FDTH D 4 Bright + FDTH G 5 Bright + FDTH H 4 Bright A_Scream + FDTH I 5 Bright + FDTH J 4 Bright + FDTH K 5 Bright + FDTH L 4 Bright + FDTH M 5 Bright + FDTH N 4 Bright + FDTH O 5 Bright + FDTH P 4 Bright + FDTH Q 5 Bright + FDTH R 4 Bright + FDTH S 5 Bright A_NoBlocking + FDTH T 4 Bright + FDTH U 5 Bright + FDTH V 4 Bright + Stop + } +} diff --git a/wadsrc/static/actors/hexen/fighterboss.txt b/wadsrc/static/actors/hexen/fighterboss.txt new file mode 100644 index 000000000..d0832f5dc --- /dev/null +++ b/wadsrc/static/actors/hexen/fighterboss.txt @@ -0,0 +1,82 @@ + +// Fighter Boss (Zedek) ----------------------------------------------------- + +ACTOR FighterBoss 10100 +{ + Game Hexen + health 800 + PainChance 50 + Speed 25 + Radius 16 + Height 64 + Monster + +FLOORCLIP + +TELESTOMP + +DONTMORPH + -CANUSEWALLS + PainSound "PlayerFighterPain" + DeathSound "PlayerFighterCrazyDeath" + Obituary "$OB_FBOSS" + + action native A_FighterAttack(); + + States + { + Spawn: + PLAY A 2 + PLAY A 3 A_ClassBossHealth + PLAY A 5 A_Look + Wait + See: + PLAY ABCD 4 A_FastChase + Loop + Pain: + PLAY G 4 + PLAY G 4 A_Pain + Goto See + Melee: + Missile: + PLAY E 8 A_FaceTarget + PLAY F 8 A_FighterAttack + Goto See + Death: + PLAY H 6 + PLAY I 6 A_Scream + PLAY JK 6 + PLAY L 6 A_NoBlocking + PLAY M 6 + PLAY N -1 + Stop + XDeath: + PLAY O 5 A_Scream + PLAY P 5 A_SkullPop + PLAY R 5 A_NoBlocking + PLAY STUV 5 + PLAY W -1 + Stop + Ice: + PLAY X 5 A_FreezeDeath + PLAY X 1 A_FreezeDeathChunks + Wait + Burn: + FDTH A 5 Bright A_PlaySound("PlayerFighterBurnDeath") + FDTH B 4 Bright + FDTH G 5 Bright + FDTH H 4 Bright A_Scream + FDTH I 5 Bright + FDTH J 4 Bright + FDTH K 5 Bright + FDTH L 4 Bright + FDTH M 5 Bright + FDTH N 4 Bright + FDTH O 5 Bright + FDTH P 4 Bright + FDTH Q 5 Bright + FDTH R 4 Bright + FDTH S 5 Bright A_NoBlocking + FDTH T 4 Bright + FDTH U 5 Bright + FDTH V 4 Bright + Stop + } +} diff --git a/wadsrc/static/actors/hexen/flechette.txt b/wadsrc/static/actors/hexen/flechette.txt new file mode 100644 index 000000000..9e64cf4be --- /dev/null +++ b/wadsrc/static/actors/hexen/flechette.txt @@ -0,0 +1,67 @@ + +// Poison Bag (Flechette used by Cleric) ------------------------------------ + +ACTOR PoisonBag +{ + Game Hexen + Radius 5 + Height 5 + +NOBLOCKMAP +NOGRAVITY + + action native A_PoisonBagInit(); + + States + { + Spawn: + PSBG A 18 Bright + PSBG B 4 Bright + PSBG C 3 + PSBG C 1 A_PoisonBagInit + Stop + } +} + +// Throwing Bomb (Flechette used by Fighter) -------------------------------- + +ACTOR ThrowingBomb +{ + Game Hexen + Health 48 + Speed 12 + Radius 8 + Height 10 + DamageType "Fire" + +NOBLOCKMAP +DROPOFF +MISSILE + +HEXENBOUNCE + SeeSound "FlechetteBounce" + DeathSound "FlechetteExplode" + + action native A_CheckThrowBomb(); + action native A_CheckThrowBomb2(); + + States + { + Spawn: + THRW A 4 A_CheckThrowBomb + THRW BCDE 3 A_CheckThrowBomb + THRW F 3 A_CheckThrowBomb2 + Loop + THRW G 6 A_CheckThrowBomb + THRW F 4 A_CheckThrowBomb + THRW H 6 A_CheckThrowBomb + THRW F 4 A_CheckThrowBomb + THRW G 6 A_CheckThrowBomb + THRW F 3 A_CheckThrowBomb + Wait + Death: + CFCF Q 4 Bright A_NoGravity + CFCF R 3 Bright A_Scream + CFCF S 4 Bright A_Explode + CFCF T 3 Bright + CFCF U 4 Bright + CFCF W 3 Bright + CFCF X 4 Bright + CFCF Z 3 Bright + Stop + } +} diff --git a/wadsrc/static/actors/hexen/mageboss.txt b/wadsrc/static/actors/hexen/mageboss.txt new file mode 100644 index 000000000..0eb78e6a9 --- /dev/null +++ b/wadsrc/static/actors/hexen/mageboss.txt @@ -0,0 +1,85 @@ + +// Mage Boss (Menelkir) ----------------------------------------------------- + +ACTOR MageBoss 10102 +{ + Game Hexen + Health 800 + PainChance 50 + Speed 25 + Radius 16 + Height 64 + Monster + +FLOORCLIP +TELESTOMP + +DONTMORPH + -CANUSEWALLS + PainSound "PlayerMagePain" + DeathSound "PlayerMageCrazyDeath" + Obituary "$OB_MBOSS" + + action native A_MageAttack(); + + States + { + Spawn: + MAGE A 2 + MAGE A 3 A_ClassBossHealth + MAGE A 5 A_Look + Wait + See: + MAGE ABCD 4 A_FastChase + Loop + Pain: + MAGE G 4 + MAGE G 4 A_Pain + Goto See + Melee: + Missile: + MAGE E 8 A_FaceTarget + MAGE F 8 Bright A_MageAttack + Goto See + Death: + MAGE H 6 + MAGE I 6 A_Scream + MAGE JK 6 + MAGE L 6 A_NoBlocking + MAGE M 6 + MAGE N -1 + Stop + XDeath: + MAGE O 5 A_Scream + MAGE P 5 + MAGE R 5 A_NoBlocking + MAGE S 5 + MAGE T 5 + MAGE U 5 + MAGE V 5 + MAGE W 5 + MAGE X -1 + Stop + Ice: + MAGE Y 5 A_FreezeDeath + MAGE Y 1 A_FreezeDeathChunks + Wait + Burn: + FDTH E 5 Bright A_PlaySound("PlayerMageBurnDeath") + FDTH F 4 Bright + FDTH G 5 Bright + FDTH H 4 Bright A_Scream + FDTH I 5 Bright + FDTH J 4 Bright + FDTH K 5 Bright + FDTH L 4 Bright + FDTH M 5 Bright + FDTH N 4 Bright + FDTH O 5 Bright + FDTH P 4 Bright + FDTH Q 5 Bright + FDTH R 4 Bright + FDTH S 5 Bright A_NoBlocking + FDTH T 4 Bright + FDTH U 5 Bright + FDTH V 4 Bright + Stop + } +} diff --git a/wadsrc/static/actors/hexen/summon.txt b/wadsrc/static/actors/hexen/summon.txt new file mode 100644 index 000000000..3ea10713f --- /dev/null +++ b/wadsrc/static/actors/hexen/summon.txt @@ -0,0 +1,41 @@ + +// Summoning Doll ----------------------------------------------------------- + +ACTOR SummoningDoll +{ + Game Hexen + Speed 20 + +NOBLOCKMAP +DROPOFF +MISSILE + +NOTELEPORT + + action native A_Summon(); + + States + { + Spawn: + SUMN A 4 + Loop + Death: + SUMN AA 4 + SUMN A 4 A_Summon + Stop + } +} + +// Minotaur Smoke ----------------------------------------------------------- + +ACTOR MinotaurSmoke +{ + Game Hexen + +NOBLOCKMAP +NOGRAVITY + +NOTELEPORT + RenderStyle Translucent + Alpha 0.6 + + States + { + Spawn: + MNSM ABCDEFGHIJKLMNOPQ 3 + Stop + } +} diff --git a/wadsrc/static/actors/nativeclasses.txt b/wadsrc/static/actors/nativeclasses.txt index b14247318..07de37e50 100644 --- a/wadsrc/static/actors/nativeclasses.txt +++ b/wadsrc/static/actors/nativeclasses.txt @@ -179,6 +179,7 @@ class Actor extends Thinker action native A_SelectWeapon(class whichweapon); action native A_Punch(); action native A_Feathers(); + action native A_ClassBossHealth(); } class Inventory extends Actor diff --git a/wadsrc/static/decorate.txt b/wadsrc/static/decorate.txt index f5849761f..cd53a92b6 100644 --- a/wadsrc/static/decorate.txt +++ b/wadsrc/static/decorate.txt @@ -81,6 +81,11 @@ #include "actors/hexen/clericmace.txt" #include "actors/hexen/firedemon.txt" #include "actors/hexen/fog.txt" +#include "actors/hexen/summon.txt" +#include "actors/hexen/flechette.txt" +#include "actors/hexen/clericboss.txt" +#include "actors/hexen/fighterboss.txt" +#include "actors/hexen/mageboss.txt" #include "actors/strife/strifeplayer.txt" #include "actors/strife/beggars.txt" diff --git a/zdoom.vcproj b/zdoom.vcproj index 36c27bd79..5477eb8ae 100644 --- a/zdoom.vcproj +++ b/zdoom.vcproj @@ -2304,10 +2304,6 @@ RelativePath=".\src\g_hexen\a_centaur.cpp" > - - @@ -2332,10 +2328,6 @@ RelativePath=".\src\g_hexen\a_fighteraxe.cpp" > - - @@ -2384,10 +2376,6 @@ RelativePath=".\src\g_hexen\a_korax.cpp" > - -