- Added more DECORATE conversions by Karate Chris.

SVN r1106 (trunk)
This commit is contained in:
Christoph Oelckers 2008-08-03 16:13:23 +00:00
parent bf0ee1342c
commit 11fbfc5b1f
18 changed files with 450 additions and 602 deletions

View file

@ -1,4 +1,5 @@
August 3, 2008 (Changes by Graf Zahl) 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 - Cleaned up the new bridge code and exported all related actors to
DECORATE so that the exported code pointers can be used. DECORATE so that the exported code pointers can be used.
- Separated Heretic's and Hexen's invulnerability items for stability - Separated Heretic's and Hexen's invulnerability items for stability

View file

@ -160,6 +160,14 @@ ACTOR(FiredSplotch)
ACTOR(SmBounce) ACTOR(SmBounce)
ACTOR(FogSpawn) ACTOR(FogSpawn)
ACTOR(FogMove) 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! // Special code pointers for Strife's player - not to be used elsewhere!
ACTOR(ItBurnsItBurns) ACTOR(ItBurnsItBurns)

View file

@ -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);
}

View file

@ -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);
}

View file

@ -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);
}

View file

@ -325,24 +325,6 @@ void A_FSwordAttack (AActor *actor)
S_Sound (actor, CHAN_WEAPON, "FighterSwordFire", 1, ATTN_NORM); 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 // A_FSwordFlames
@ -397,3 +379,24 @@ void AFighterWeaponPiece::BeginPlay ()
Super::BeginPlay (); Super::BeginPlay ();
FourthWeaponClass = RUNTIME_CLASS(AFWeapQuietus); 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);
}

View file

@ -21,30 +21,6 @@ void A_PoisonBagCheck (AActor *);
void A_CheckThrowBomb (AActor *); void A_CheckThrowBomb (AActor *);
void A_CheckThrowBomb2 (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) --------------------------------------- // Fire Bomb (Flechette used by Mage) ---------------------------------------
class AFireBomb : public AActor class AFireBomb : public AActor
@ -86,58 +62,6 @@ IMPLEMENT_ACTOR (AFireBomb, Hexen, -1, 0)
PROP_DeathSound ("FlechetteExplode") PROP_DeathSound ("FlechetteExplode")
END_DEFAULTS 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) ------------------------------------------ // Poison Bag Artifact (Flechette) ------------------------------------------
class AArtiPoisonBag : public AInventory class AArtiPoisonBag : public AInventory
@ -184,7 +108,7 @@ bool AArtiPoisonBag1::Use (bool pickup)
angle_t angle = Owner->angle >> ANGLETOFINESHIFT; angle_t angle = Owner->angle >> ANGLETOFINESHIFT;
AActor *mo; AActor *mo;
mo = Spawn<APoisonBag> ( mo = Spawn ("PoisonBag",
Owner->x+16*finecosine[angle], Owner->x+16*finecosine[angle],
Owner->y+24*finesine[angle], Owner->z- Owner->y+24*finesine[angle], Owner->z-
Owner->floorclip+8*FRACUNIT, ALLOW_REPLACE); Owner->floorclip+8*FRACUNIT, ALLOW_REPLACE);
@ -243,7 +167,7 @@ bool AArtiPoisonBag3::Use (bool pickup)
{ {
AActor *mo; AActor *mo;
mo = Spawn<AThrowingBomb> (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); Owner->z-Owner->floorclip+35*FRACUNIT + (Owner->player? Owner->player->crouchoffset : 0), ALLOW_REPLACE);
if (mo) if (mo)
{ {
@ -547,7 +471,7 @@ void A_CheckThrowBomb2 (AActor *actor)
TMulScale32 (actor->momx, actor->momx, actor->momy, actor->momy, actor->momz, actor->momz) TMulScale32 (actor->momx, actor->momx, actor->momy, actor->momy, actor->momz, actor->momz)
< (3*3)/(2*2)) < (3*3)/(2*2))
{ {
actor->SetState (&AThrowingBomb::States[S_THROWINGBOMB7]); actor->SetState (actor->SpawnState + 6);
actor->z = actor->floorz; actor->z = actor->floorz;
actor->momz = 0; actor->momz = 0;
actor->flags2 &= ~MF2_BOUNCETYPE; actor->flags2 &= ~MF2_BOUNCETYPE;

View file

@ -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);
}

View file

@ -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 // MStaffSpawn
@ -534,3 +499,41 @@ static AActor *FrontBlockCheck (AActor *mo, int index)
} }
return NULL; 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);
}

View file

@ -37,70 +37,6 @@ IMPLEMENT_ACTOR (AArtiDarkServant, Hexen, 86, 16)
PROP_Inventory_PickupMessage("$TXT_ARTISUMMON") PROP_Inventory_PickupMessage("$TXT_ARTISUMMON")
END_DEFAULTS 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) bool AArtiDarkServant::Use (bool pickup)
{ {
AActor *mo = P_SpawnPlayerMissile (Owner, RUNTIME_CLASS(ASummoningDoll)); AActor *mo = P_SpawnPlayerMissile (Owner, PClass::FindClass ("SummoningDoll"));
if (mo) if (mo)
{ {
mo->target = Owner; mo->target = Owner;
@ -158,7 +94,7 @@ void A_Summon (AActor *actor)
} }
// Make smoke puff // Make smoke puff
Spawn<AMinotaurSmoke> (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); S_Sound (actor, CHAN_VOICE, mo->ActiveSound, 1, ATTN_NORM);
} }
} }

View file

@ -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
}
}

View file

@ -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
}
}

View file

@ -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
}
}

View file

@ -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
}
}

View file

@ -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
}
}

View file

@ -179,6 +179,7 @@ class Actor extends Thinker
action native A_SelectWeapon(class<Weapon> whichweapon); action native A_SelectWeapon(class<Weapon> whichweapon);
action native A_Punch(); action native A_Punch();
action native A_Feathers(); action native A_Feathers();
action native A_ClassBossHealth();
} }
class Inventory extends Actor class Inventory extends Actor

View file

@ -81,6 +81,11 @@
#include "actors/hexen/clericmace.txt" #include "actors/hexen/clericmace.txt"
#include "actors/hexen/firedemon.txt" #include "actors/hexen/firedemon.txt"
#include "actors/hexen/fog.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/strifeplayer.txt"
#include "actors/strife/beggars.txt" #include "actors/strife/beggars.txt"

View file

@ -2304,10 +2304,6 @@
RelativePath=".\src\g_hexen\a_centaur.cpp" RelativePath=".\src\g_hexen\a_centaur.cpp"
> >
</File> </File>
<File
RelativePath=".\src\g_hexen\a_clericboss.cpp"
>
</File>
<File <File
RelativePath=".\src\g_hexen\a_clericflame.cpp" RelativePath=".\src\g_hexen\a_clericflame.cpp"
> >
@ -2332,10 +2328,6 @@
RelativePath=".\src\g_hexen\a_fighteraxe.cpp" RelativePath=".\src\g_hexen\a_fighteraxe.cpp"
> >
</File> </File>
<File
RelativePath=".\src\g_hexen\a_fighterboss.cpp"
>
</File>
<File <File
RelativePath=".\src\g_hexen\a_fighterhammer.cpp" RelativePath=".\src\g_hexen\a_fighterhammer.cpp"
> >
@ -2384,10 +2376,6 @@
RelativePath=".\src\g_hexen\a_korax.cpp" RelativePath=".\src\g_hexen\a_korax.cpp"
> >
</File> </File>
<File
RelativePath=".\src\g_hexen\a_mageboss.cpp"
>
</File>
<File <File
RelativePath=".\src\g_hexen\a_magecone.cpp" RelativePath=".\src\g_hexen\a_magecone.cpp"
> >