- Added more DECORATE conversions by Karate Chris.
SVN r1106 (trunk)
This commit is contained in:
parent
bf0ee1342c
commit
11fbfc5b1f
18 changed files with 450 additions and 602 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue