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