- 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)
- 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

View file

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

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);
}
//============================================================================
//
// 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);
}

View file

@ -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<APoisonBag> (
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<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);
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;

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

View file

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

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_Punch();
action native A_Feathers();
action native A_ClassBossHealth();
}
class Inventory extends Actor

View file

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

View file

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