mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-28 06:53:58 +00:00
- Fixed a few minor DECORATE bugs.
- Changed coordinate storage for EntityBoss so that it works properly even when the pod is not used to spawn it. - Converted Strife's Spectres and Entity to DECORATE. SVN r1117 (trunk)
This commit is contained in:
parent
3908c71510
commit
c8538efda9
12 changed files with 485 additions and 692 deletions
|
@ -1,3 +1,9 @@
|
|||
August 6, 2008 (Changes by Graf Zahl)
|
||||
- Fixed a few minor DECORATE bugs.
|
||||
- Changed coordinate storage for EntityBoss so that it works properly even
|
||||
when the pod is not used to spawn it.
|
||||
- Converted Strife's Spectres and Entity to DECORATE.
|
||||
|
||||
August 6, 2008 (SBARINfO update)
|
||||
- Added: fullscreenoffsets flag for status bars. This changes the coordinate
|
||||
system to be relative to the top left corner of the screen. This is useful
|
||||
|
|
|
@ -261,11 +261,13 @@ ACTOR(SpectralBigBallLightning)
|
|||
ACTOR(SpectralLightning)
|
||||
ACTOR(SpectreChunkSmall)
|
||||
ACTOR(SpectreChunkLarge)
|
||||
ACTOR(Spectre2Attack)
|
||||
ACTOR(Spectre3Attack)
|
||||
ACTOR(Spectre4Attack)
|
||||
ACTOR(Spectre5Attack)
|
||||
ACTOR(SpotLightning)
|
||||
ACTOR(AlienSpectreDeath)
|
||||
ACTOR(EntityDeath)
|
||||
ACTOR(EntityAttack)
|
||||
ACTOR(SubEntityDeath)
|
||||
ACTOR(SpawnEntity)
|
||||
|
||||
// Special code pointers for Strife's player - not to be used elsewhere!
|
||||
ACTOR(ItBurnsItBurns)
|
||||
|
|
|
@ -12,337 +12,11 @@
|
|||
static FRandom pr_spectrespawn ("AlienSpectreSpawn");
|
||||
static FRandom pr_spectrechunk ("212e4");
|
||||
|
||||
void A_SentinelBob (AActor *);
|
||||
void A_SpectreMelee (AActor *);
|
||||
void A_SpotLightning (AActor *);
|
||||
void A_SpectreChunkSmall (AActor *);
|
||||
void A_SpectreChunkLarge (AActor *);
|
||||
void A_Spectre2Attack (AActor *);
|
||||
void A_Spectre4Attack (AActor *);
|
||||
void A_Spectre5Attack (AActor *);
|
||||
void A_Spectre3Attack (AActor *);
|
||||
void A_AlienSpectreDeath (AActor *);
|
||||
|
||||
void A_AlertMonsters (AActor *);
|
||||
void A_Tracer2 (AActor *);
|
||||
|
||||
AActor *P_SpawnSubMissile (AActor *source, const PClass *type, AActor *target);
|
||||
|
||||
// Alien Spectre 1 -----------------------------------------------------------
|
||||
|
||||
FState AAlienSpectre1::States[] =
|
||||
{
|
||||
#define S_ALIEN_STND 0 // 796
|
||||
S_NORMAL (ALN1, 'A', 10, A_Look, &States[S_ALIEN_STND+1]),
|
||||
S_NORMAL (ALN1, 'B', 10, A_SentinelBob, &States[S_ALIEN_STND]),
|
||||
|
||||
#define S_ALIEN_CHASE (S_ALIEN_STND+2) // 798
|
||||
S_BRIGHT (ALN1, 'A', 4, A_Chase, &States[S_ALIEN_CHASE+1]),
|
||||
S_BRIGHT (ALN1, 'B', 4, A_Chase, &States[S_ALIEN_CHASE+2]),
|
||||
S_BRIGHT (ALN1, 'C', 4, A_SentinelBob, &States[S_ALIEN_CHASE+3]),
|
||||
S_BRIGHT (ALN1, 'D', 4, A_Chase, &States[S_ALIEN_CHASE+4]),
|
||||
S_BRIGHT (ALN1, 'E', 4, A_Chase, &States[S_ALIEN_CHASE+5]),
|
||||
S_BRIGHT (ALN1, 'F', 4, A_Chase, &States[S_ALIEN_CHASE+6]),
|
||||
S_BRIGHT (ALN1, 'G', 4, A_SentinelBob, &States[S_ALIEN_CHASE+7]),
|
||||
S_BRIGHT (ALN1, 'H', 4, A_Chase, &States[S_ALIEN_CHASE+8]),
|
||||
S_BRIGHT (ALN1, 'I', 4, A_Chase, &States[S_ALIEN_CHASE+9]),
|
||||
S_BRIGHT (ALN1, 'J', 4, A_Chase, &States[S_ALIEN_CHASE+10]),
|
||||
S_BRIGHT (ALN1, 'K', 4, A_SentinelBob, &States[S_ALIEN_CHASE]),
|
||||
|
||||
#define S_ALIEN_MELEE (S_ALIEN_CHASE+11) // 809
|
||||
S_BRIGHT (ALN1, 'J', 4, A_FaceTarget, &States[S_ALIEN_MELEE+1]),
|
||||
S_BRIGHT (ALN1, 'I', 4, A_SpectreMelee, &States[S_ALIEN_MELEE+2]),
|
||||
S_BRIGHT (ALN1, 'H', 4, NULL, &States[S_ALIEN_CHASE+2]),
|
||||
|
||||
#define S_ALIEN_MISSILE (S_ALIEN_MELEE+3) // 812
|
||||
S_BRIGHT (ALN1, 'J', 4, A_FaceTarget, &States[S_ALIEN_MISSILE+1]),
|
||||
S_BRIGHT (ALN1, 'I', 4, A_SpotLightning, &States[S_ALIEN_MISSILE+2]),
|
||||
S_BRIGHT (ALN1, 'H', 4, NULL, &States[S_ALIEN_CHASE+10]),
|
||||
|
||||
#define S_ALIEN_PAIN (S_ALIEN_MISSILE+3) // 815
|
||||
S_NORMAL (ALN1, 'J', 2, A_Pain, &States[S_ALIEN_CHASE+6]),
|
||||
|
||||
#define S_ALIEN_DIE (S_ALIEN_PAIN+1) // 816
|
||||
S_BRIGHT (AL1P, 'A', 6, A_SpectreChunkSmall, &States[S_ALIEN_DIE+1]),
|
||||
S_BRIGHT (AL1P, 'B', 6, A_Scream, &States[S_ALIEN_DIE+2]),
|
||||
S_BRIGHT (AL1P, 'C', 6, A_SpectreChunkSmall, &States[S_ALIEN_DIE+3]),
|
||||
S_BRIGHT (AL1P, 'D', 6, NULL, &States[S_ALIEN_DIE+4]),
|
||||
S_BRIGHT (AL1P, 'E', 6, NULL, &States[S_ALIEN_DIE+5]),
|
||||
S_BRIGHT (AL1P, 'F', 6, A_SpectreChunkSmall, &States[S_ALIEN_DIE+6]),
|
||||
S_BRIGHT (AL1P, 'G', 6, NULL, &States[S_ALIEN_DIE+7]),
|
||||
S_BRIGHT (AL1P, 'H', 6, A_SpectreChunkSmall, &States[S_ALIEN_DIE+8]),
|
||||
S_BRIGHT (AL1P, 'I', 6, NULL, &States[S_ALIEN_DIE+9]),
|
||||
S_BRIGHT (AL1P, 'J', 6, NULL, &States[S_ALIEN_DIE+10]),
|
||||
S_BRIGHT (AL1P, 'K', 6, NULL, &States[S_ALIEN_DIE+11]),
|
||||
S_BRIGHT (AL1P, 'L', 5, NULL, &States[S_ALIEN_DIE+12]),
|
||||
S_BRIGHT (AL1P, 'M', 5, NULL, &States[S_ALIEN_DIE+13]),
|
||||
S_BRIGHT (AL1P, 'N', 5, A_SpectreChunkLarge, &States[S_ALIEN_DIE+14]),
|
||||
S_BRIGHT (AL1P, 'O', 5, NULL, &States[S_ALIEN_DIE+15]),
|
||||
S_BRIGHT (AL1P, 'P', 5, NULL, &States[S_ALIEN_DIE+16]),
|
||||
S_BRIGHT (AL1P, 'Q', 5, NULL, &States[S_ALIEN_DIE+17]),
|
||||
S_BRIGHT (AL1P, 'R', 5, A_AlienSpectreDeath, NULL),
|
||||
|
||||
#define S_ALIEN2_MISSILE (S_ALIEN_DIE+18) // 852
|
||||
S_NORMAL (ALN1, 'F', 4, A_FaceTarget, &States[S_ALIEN2_MISSILE+1]),
|
||||
S_NORMAL (ALN1, 'I', 4, A_Spectre2Attack, &States[S_ALIEN2_MISSILE+2]),
|
||||
S_NORMAL (ALN1, 'E', 4, NULL, &States[S_ALIEN_CHASE+10]),
|
||||
|
||||
#define S_ALIEN4_MISSILE (S_ALIEN2_MISSILE+3) // 884
|
||||
S_NORMAL (ALN1, 'F', 4, A_FaceTarget, &States[S_ALIEN4_MISSILE+1]),
|
||||
S_NORMAL (ALN1, 'I', 4, A_Spectre4Attack, &States[S_ALIEN4_MISSILE+2]),
|
||||
S_NORMAL (ALN1, 'E', 4, NULL, &States[S_ALIEN_CHASE+10]),
|
||||
|
||||
#define S_ALIEN5_MISSILE (S_ALIEN4_MISSILE+3) // 887
|
||||
S_NORMAL (ALN1, 'F', 4, A_FaceTarget, &States[S_ALIEN5_MISSILE+1]),
|
||||
S_NORMAL (ALN1, 'I', 4, A_Spectre5Attack, &States[S_ALIEN5_MISSILE+2]),
|
||||
S_NORMAL (ALN1, 'E', 4, NULL, &States[S_ALIEN_CHASE])
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AAlienSpectre1, Strife, 129, 0)
|
||||
PROP_StrifeType (67)
|
||||
PROP_SpawnState (S_ALIEN_STND)
|
||||
PROP_SpawnHealth (1000)
|
||||
PROP_SeeState (S_ALIEN_CHASE)
|
||||
PROP_PainState (S_ALIEN_PAIN)
|
||||
PROP_PainChance (250)
|
||||
PROP_MeleeState (S_ALIEN_MELEE)
|
||||
PROP_MissileState (S_ALIEN_MISSILE)
|
||||
PROP_DeathState (S_ALIEN_DIE)
|
||||
PROP_SpeedFixed (12)
|
||||
PROP_RadiusFixed (64)
|
||||
PROP_HeightFixed (64)
|
||||
PROP_FloatSpeed (5)
|
||||
PROP_Mass (1000)
|
||||
PROP_Flags (MF_SPECIAL|MF_SOLID|MF_SHOOTABLE|MF_NOGRAVITY|
|
||||
MF_FLOAT|MF_SHADOW|MF_COUNTKILL|MF_NOTDMATCH|MF_STRIFEx8000000)
|
||||
PROP_Flags2 (MF2_PASSMOBJ|MF2_PUSHWALL|MF2_MCROSS)
|
||||
PROP_Flags3 (MF3_DONTMORPH|MF3_NOBLOCKMONST)
|
||||
PROP_Flags4 (MF4_INCOMBAT|MF4_LOOKALLAROUND|MF4_SPECTRAL|MF4_NOICEDEATH)
|
||||
PROP_MinMissileChance (150)
|
||||
PROP_RenderStyle (STYLE_Translucent)
|
||||
PROP_Alpha (TRANSLUC66)
|
||||
PROP_SeeSound ("alienspectre/sight")
|
||||
PROP_AttackSound ("alienspectre/blade")
|
||||
PROP_PainSound ("alienspectre/pain")
|
||||
PROP_DeathSound ("alienspectre/death")
|
||||
PROP_ActiveSound ("alienspectre/active")
|
||||
PROP_Obituary ("$OB_ALIENSPECTE")
|
||||
END_DEFAULTS
|
||||
|
||||
void AAlienSpectre1::Touch (AActor *toucher)
|
||||
{
|
||||
P_DamageMobj (toucher, this, this, 5, NAME_Melee);
|
||||
}
|
||||
|
||||
// Alien Spectre 2 -----------------------------------------------------------
|
||||
|
||||
class AAlienSpectre2 : public AAlienSpectre1
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (AAlienSpectre2, AAlienSpectre1)
|
||||
public:
|
||||
void NoBlockingSet ();
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (AAlienSpectre2, Strife, 75, 0)
|
||||
PROP_StrifeType (70)
|
||||
PROP_SpawnHealth (1200)
|
||||
PROP_PainChance (50)
|
||||
PROP_MissileState (S_ALIEN2_MISSILE)
|
||||
PROP_RadiusFixed (24)
|
||||
END_DEFAULTS
|
||||
|
||||
//============================================================================
|
||||
//
|
||||
// AAlienSpectre2 :: NoBlockingSet
|
||||
//
|
||||
//============================================================================
|
||||
|
||||
void AAlienSpectre2::NoBlockingSet ()
|
||||
{
|
||||
P_DropItem (this, "Sigil2", -1, 256);
|
||||
}
|
||||
|
||||
// Alien Spectre 3 ----------------------------------------------------------
|
||||
// This is the Oracle's personal spectre, so it's a little different.
|
||||
|
||||
FState AAlienSpectre3::States[] =
|
||||
{
|
||||
#define S_ALIEN3_STND 0 // 855
|
||||
S_NORMAL (ALN1, 'A', 5, NULL, &States[S_ALIEN3_STND+1]),
|
||||
S_NORMAL (ALN1, 'B', 5, NULL, &States[S_ALIEN3_STND+2]),
|
||||
S_NORMAL (ALN1, 'C', 5, NULL, &States[S_ALIEN3_STND+3]),
|
||||
S_NORMAL (ALN1, 'D', 5, NULL, &States[S_ALIEN3_STND+4]),
|
||||
S_NORMAL (ALN1, 'E', 5, NULL, &States[S_ALIEN3_STND+5]),
|
||||
S_NORMAL (ALN1, 'F', 5, NULL, &States[S_ALIEN3_STND+6]),
|
||||
S_NORMAL (ALN1, 'G', 5, NULL, &States[S_ALIEN3_STND+7]),
|
||||
S_NORMAL (ALN1, 'H', 5, NULL, &States[S_ALIEN3_STND+8]),
|
||||
S_NORMAL (ALN1, 'I', 5, NULL, &States[S_ALIEN3_STND+9]),
|
||||
S_NORMAL (ALN1, 'J', 5, NULL, &States[S_ALIEN3_STND+10]),
|
||||
S_NORMAL (ALN1, 'K', 5, NULL, &States[S_ALIEN3_STND]),
|
||||
|
||||
#define S_ALIEN3_CHASE (S_ALIEN3_STND+11) // 866
|
||||
S_NORMAL (ALN1, 'A', 5, A_Chase, &States[S_ALIEN3_CHASE+1]),
|
||||
S_NORMAL (ALN1, 'B', 5, A_Chase, &States[S_ALIEN3_CHASE+2]),
|
||||
S_NORMAL (ALN1, 'C', 5, A_SentinelBob, &States[S_ALIEN3_CHASE+3]),
|
||||
S_NORMAL (ALN1, 'D', 5, A_Chase, &States[S_ALIEN3_CHASE+4]),
|
||||
S_NORMAL (ALN1, 'E', 5, A_Chase, &States[S_ALIEN3_CHASE+5]),
|
||||
S_NORMAL (ALN1, 'F', 5, A_Chase, &States[S_ALIEN3_CHASE+6]),
|
||||
S_NORMAL (ALN1, 'G', 5, A_SentinelBob, &States[S_ALIEN3_CHASE+7]),
|
||||
S_NORMAL (ALN1, 'H', 5, A_Chase, &States[S_ALIEN3_CHASE+8]),
|
||||
S_NORMAL (ALN1, 'I', 5, A_Chase, &States[S_ALIEN3_CHASE+9]),
|
||||
S_NORMAL (ALN1, 'J', 5, A_Chase, &States[S_ALIEN3_CHASE+10]),
|
||||
S_NORMAL (ALN1, 'K', 5, A_SentinelBob, &States[S_ALIEN3_CHASE]),
|
||||
|
||||
#define S_ALIEN3_MELEE (S_ALIEN3_CHASE+11) // 877
|
||||
S_NORMAL (ALN1, 'J', 4, A_FaceTarget, &States[S_ALIEN3_MELEE+1]),
|
||||
S_NORMAL (ALN1, 'I', 4, A_SpectreMelee, &States[S_ALIEN3_MELEE+2]),
|
||||
S_NORMAL (ALN1, 'C', 4, NULL, &States[S_ALIEN3_CHASE+2]),
|
||||
|
||||
#define S_ALIEN3_MISSILE (S_ALIEN3_MELEE+3) // 880
|
||||
S_NORMAL (ALN1, 'F', 4, A_FaceTarget, &States[S_ALIEN3_MISSILE+1]),
|
||||
S_NORMAL (ALN1, 'I', 4, A_Spectre3Attack, &States[S_ALIEN3_MISSILE+2]),
|
||||
S_NORMAL (ALN1, 'E', 4, NULL, &States[S_ALIEN3_CHASE+10]),
|
||||
|
||||
#define S_ALIEN3_PAIN (S_ALIEN3_MISSILE+3) // 883
|
||||
S_NORMAL (ALN1, 'J', 2, A_Pain, &States[S_ALIEN3_CHASE+6])
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AAlienSpectre3, Strife, 76, 0)
|
||||
PROP_StrifeType (71)
|
||||
PROP_SpawnState (S_ALIEN3_STND)
|
||||
PROP_SpawnHealth (1500)
|
||||
PROP_SeeState (S_ALIEN3_CHASE)
|
||||
PROP_PainState (S_ALIEN3_PAIN)
|
||||
PROP_PainChance (50)
|
||||
PROP_MeleeState (S_ALIEN3_MELEE)
|
||||
PROP_MissileState (S_ALIEN3_MISSILE)
|
||||
PROP_RadiusFixed (24)
|
||||
PROP_FlagsSet (MF_SPAWNCEILING)
|
||||
PROP_Flags3 (MF3_DONTMORPH|MF3_NOBLOCKMONST)
|
||||
END_DEFAULTS
|
||||
|
||||
//============================================================================
|
||||
//
|
||||
// AAlienSpectre3 :: NoBlockingSet
|
||||
//
|
||||
//============================================================================
|
||||
|
||||
void AAlienSpectre3::NoBlockingSet ()
|
||||
{
|
||||
P_DropItem (this, "Sigil3", -1, 256);
|
||||
}
|
||||
|
||||
// Alien Spectre 4 -----------------------------------------------------------
|
||||
|
||||
class AAlienSpectre4 : public AAlienSpectre1
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (AAlienSpectre4, AAlienSpectre1)
|
||||
public:
|
||||
void NoBlockingSet ();
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (AAlienSpectre4, Strife, 167, 0)
|
||||
PROP_StrifeType (72)
|
||||
PROP_SpawnHealth (1700)
|
||||
PROP_PainChance (50)
|
||||
PROP_MissileState (S_ALIEN4_MISSILE)
|
||||
PROP_RadiusFixed (24)
|
||||
END_DEFAULTS
|
||||
|
||||
//============================================================================
|
||||
//
|
||||
// AAlienSpectre4 :: NoBlockingSet
|
||||
//
|
||||
//============================================================================
|
||||
|
||||
void AAlienSpectre4::NoBlockingSet ()
|
||||
{
|
||||
P_DropItem (this, "Sigil4", -1, 256);
|
||||
}
|
||||
|
||||
// Alien Spectre 5 -----------------------------------------------------------
|
||||
|
||||
class AAlienSpectre5 : public AAlienSpectre1
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (AAlienSpectre5, AAlienSpectre1)
|
||||
public:
|
||||
void NoBlockingSet ();
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (AAlienSpectre5, Strife, 168, 0)
|
||||
PROP_StrifeType (73)
|
||||
PROP_SpawnHealth (2000)
|
||||
PROP_PainChance (50)
|
||||
PROP_MissileState (S_ALIEN5_MISSILE)
|
||||
PROP_RadiusFixed (24)
|
||||
END_DEFAULTS
|
||||
|
||||
//============================================================================
|
||||
//
|
||||
// AAlienSpectre5 :: NoBlockingSet
|
||||
//
|
||||
//============================================================================
|
||||
|
||||
void AAlienSpectre5::NoBlockingSet ()
|
||||
{
|
||||
P_DropItem (this, "Sigil5", -1, 256);
|
||||
}
|
||||
|
||||
// Small Alien Chunk --------------------------------------------------------
|
||||
|
||||
class AAlienChunkSmall : public AActor
|
||||
{
|
||||
DECLARE_ACTOR (AAlienChunkSmall, AActor)
|
||||
};
|
||||
|
||||
FState AAlienChunkSmall::States[] =
|
||||
{
|
||||
S_BRIGHT (NODE, 'A', 6, NULL, &States[1]),
|
||||
S_BRIGHT (NODE, 'B', 6, NULL, &States[2]),
|
||||
S_BRIGHT (NODE, 'C', 6, NULL, &States[3]),
|
||||
S_BRIGHT (NODE, 'D', 6, NULL, &States[4]),
|
||||
S_BRIGHT (NODE, 'E', 6, NULL, &States[5]),
|
||||
S_BRIGHT (NODE, 'F', 6, NULL, &States[6]),
|
||||
S_BRIGHT (NODE, 'G', 6, NULL, NULL),
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AAlienChunkSmall, Strife, -1, 0)
|
||||
PROP_StrifeType (68)
|
||||
PROP_SpawnState (0)
|
||||
PROP_Flags (MF_NOBLOCKMAP|MF_NOCLIP|MF_NOTDMATCH)
|
||||
END_DEFAULTS
|
||||
|
||||
// Large Alien Chunk --------------------------------------------------------
|
||||
|
||||
class AAlienChunkLarge : public AActor
|
||||
{
|
||||
DECLARE_ACTOR (AAlienChunkLarge, AActor)
|
||||
};
|
||||
|
||||
FState AAlienChunkLarge::States[] =
|
||||
{
|
||||
S_BRIGHT (MTHD, 'A', 5, NULL, &States[1]),
|
||||
S_BRIGHT (MTHD, 'B', 5, NULL, &States[2]),
|
||||
S_BRIGHT (MTHD, 'C', 5, NULL, &States[3]),
|
||||
S_BRIGHT (MTHD, 'D', 5, NULL, &States[4]),
|
||||
S_BRIGHT (MTHD, 'E', 5, NULL, &States[5]),
|
||||
S_BRIGHT (MTHD, 'F', 5, NULL, &States[6]),
|
||||
S_BRIGHT (MTHD, 'G', 5, NULL, &States[7]),
|
||||
S_BRIGHT (MTHD, 'H', 5, NULL, &States[8]),
|
||||
S_BRIGHT (MTHD, 'I', 5, NULL, &States[9]),
|
||||
S_BRIGHT (MTHD, 'J', 5, NULL, &States[10]),
|
||||
S_BRIGHT (MTHD, 'K', 5, NULL, NULL),
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AAlienChunkLarge, Strife, -1, 0)
|
||||
PROP_StrifeType (69)
|
||||
PROP_SpawnState (0)
|
||||
PROP_Flags (MF_NOBLOCKMAP|MF_NOCLIP|MF_NOTDMATCH)
|
||||
END_DEFAULTS
|
||||
|
||||
//============================================================================
|
||||
|
||||
static void GenericSpectreSpawn (AActor *actor, const PClass *type)
|
||||
static void GenericSpectreSpawn (AActor *actor, const char *type)
|
||||
{
|
||||
AActor *spectre = Spawn (type, actor->x, actor->y, actor->z, ALLOW_REPLACE);
|
||||
if (spectre != NULL)
|
||||
|
@ -353,22 +27,22 @@ static void GenericSpectreSpawn (AActor *actor, const PClass *type)
|
|||
|
||||
void A_SpawnSpectre3 (AActor *actor)
|
||||
{
|
||||
GenericSpectreSpawn (actor, RUNTIME_CLASS(AAlienSpectre3));
|
||||
GenericSpectreSpawn (actor, "AlienSpectre3");
|
||||
}
|
||||
|
||||
void A_SpawnSpectre4 (AActor *actor)
|
||||
{
|
||||
GenericSpectreSpawn (actor, RUNTIME_CLASS(AAlienSpectre4));
|
||||
GenericSpectreSpawn (actor, "AlienSpectre4");
|
||||
}
|
||||
|
||||
void A_SpawnSpectre5 (AActor *actor)
|
||||
{
|
||||
GenericSpectreSpawn (actor, RUNTIME_CLASS(AAlienSpectre5));
|
||||
GenericSpectreSpawn (actor, "AlienSpectre5");
|
||||
}
|
||||
|
||||
void A_SpectreChunkSmall (AActor *self)
|
||||
{
|
||||
AActor *foo = Spawn<AAlienChunkSmall> (self->x, self->y, self->z + 10*FRACUNIT, ALLOW_REPLACE);
|
||||
AActor *foo = Spawn("AlienChunkSmall", self->x, self->y, self->z + 10*FRACUNIT, ALLOW_REPLACE);
|
||||
|
||||
if (foo != NULL)
|
||||
{
|
||||
|
@ -386,7 +60,7 @@ void A_SpectreChunkSmall (AActor *self)
|
|||
|
||||
void A_SpectreChunkLarge (AActor *self)
|
||||
{
|
||||
AActor *foo = Spawn<AAlienChunkLarge> (self->x, self->y, self->z + 10*FRACUNIT, ALLOW_REPLACE);
|
||||
AActor *foo = Spawn("AlienChunkLarge", self->x, self->y, self->z + 10*FRACUNIT, ALLOW_REPLACE);
|
||||
|
||||
if (foo != NULL)
|
||||
{
|
||||
|
@ -403,49 +77,6 @@ void A_SpectreChunkLarge (AActor *self)
|
|||
|
||||
}
|
||||
|
||||
void A_Spectre4Attack (AActor *self)
|
||||
{
|
||||
if (self->target != NULL)
|
||||
{
|
||||
AActor *missile = P_SpawnMissileXYZ (self->x, self->y, self->z + 32*FRACUNIT,
|
||||
self, self->target, PClass::FindClass("SpectralLightningBigV2"), false);
|
||||
if (missile != NULL)
|
||||
{
|
||||
missile->tracer = self->target;
|
||||
missile->health = -2;
|
||||
P_CheckMissileSpawn(missile);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void A_Spectre2Attack (AActor *self)
|
||||
{
|
||||
if (self->target != NULL)
|
||||
{
|
||||
AActor *missile = P_SpawnMissileXYZ (self->x, self->y, self->z + 32*FRACUNIT,
|
||||
self, self->target, PClass::FindClass("SpectralLightningH3"), false);
|
||||
if (missile != NULL)
|
||||
{
|
||||
missile->health = -2;
|
||||
P_CheckMissileSpawn(missile);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void A_Spectre5Attack (AActor *self)
|
||||
{
|
||||
if (self->target != NULL)
|
||||
{
|
||||
AActor *missile = P_SpawnMissileXYZ (self->x, self->y, self->z + 32*FRACUNIT,
|
||||
self, self->target, PClass::FindClass("SpectralLightningBigBall2"), false);
|
||||
if (missile != NULL)
|
||||
{
|
||||
missile->health = -2;
|
||||
P_CheckMissileSpawn(missile);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void A_Spectre3Attack (AActor *self)
|
||||
{
|
||||
if (self->target == NULL)
|
||||
|
@ -530,7 +161,7 @@ void A_AlienSpectreDeath (AActor *self)
|
|||
log = 87;
|
||||
}
|
||||
else
|
||||
{ // You weild the power of the complete Sigil.
|
||||
{ // You wield the power of the complete Sigil.
|
||||
log = 85;
|
||||
}
|
||||
EV_DoDoor (DDoor::doorOpen, NULL, NULL, 222, 8*FRACUNIT, 0, 0, 0);
|
||||
|
@ -562,7 +193,7 @@ void A_AlienSpectreDeath (AActor *self)
|
|||
}
|
||||
sigil = player->FindInventory<ASigil>();
|
||||
if (sigil != NULL && sigil->NumPieces == 5)
|
||||
{ // You weild the power of the complete Sigil.
|
||||
{ // You wield the power of the complete Sigil.
|
||||
log = 85;
|
||||
}
|
||||
else
|
||||
|
|
|
@ -8,280 +8,6 @@
|
|||
|
||||
static FRandom pr_entity ("Entity");
|
||||
|
||||
void A_SpotLightning (AActor *);
|
||||
|
||||
void A_SpawnEntity (AActor *);
|
||||
void A_EntityAttack (AActor *);
|
||||
void A_SpawnSubEntities (AActor *);
|
||||
|
||||
void A_SpectreMelee (AActor *);
|
||||
void A_SpectreChunkSmall (AActor *);
|
||||
void A_SpectreChunkLarge (AActor *);
|
||||
void A_Spectre2Attack (AActor *);
|
||||
void A_Spectre3Attack (AActor *);
|
||||
void A_Spectre4Attack (AActor *);
|
||||
void A_Spectre5Attack (AActor *);
|
||||
void A_SentinelBob (AActor *);
|
||||
void A_TossGib (AActor *);
|
||||
|
||||
// Entity Nest --------------------------------------------------------------
|
||||
|
||||
class AEntityNest : public AActor
|
||||
{
|
||||
DECLARE_ACTOR (AEntityNest, AActor)
|
||||
};
|
||||
|
||||
FState AEntityNest::States[] =
|
||||
{
|
||||
S_NORMAL (NEST, 'A', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AEntityNest, Strife, 26, 0)
|
||||
PROP_SpawnState (0)
|
||||
PROP_RadiusFixed (84)
|
||||
PROP_HeightFixed (47)
|
||||
PROP_Flags (MF_SOLID|MF_NOTDMATCH)
|
||||
PROP_Flags2 (MF2_FLOORCLIP)
|
||||
PROP_StrifeType (76)
|
||||
END_DEFAULTS
|
||||
|
||||
// Entity Pod ---------------------------------------------------------------
|
||||
|
||||
class AEntityPod : public AActor
|
||||
{
|
||||
DECLARE_ACTOR (AEntityPod, AActor)
|
||||
};
|
||||
|
||||
FState AEntityPod::States[] =
|
||||
{
|
||||
S_NORMAL (PODD, 'A', 60, A_Look, &States[0]),
|
||||
|
||||
S_NORMAL (PODD, 'A', 360, NULL, &States[2]),
|
||||
S_NORMAL (PODD, 'B', 9, A_NoBlocking, &States[3]),
|
||||
S_NORMAL (PODD, 'C', 9, NULL, &States[4]),
|
||||
S_NORMAL (PODD, 'D', 9, A_SpawnEntity, &States[5]),
|
||||
S_NORMAL (PODD, 'E', -1, NULL, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AEntityPod, Strife, 198, 0)
|
||||
PROP_SpawnState (0)
|
||||
PROP_SeeState (1)
|
||||
PROP_RadiusFixed (25)
|
||||
PROP_HeightFixed (91)
|
||||
PROP_Flags (MF_SOLID|MF_NOTDMATCH)
|
||||
PROP_StrifeType (77)
|
||||
PROP_SeeSound ("misc/gibbed")
|
||||
END_DEFAULTS
|
||||
|
||||
// Entity Boss --------------------------------------------------------------
|
||||
|
||||
class AEntityBoss : public AActor
|
||||
{
|
||||
DECLARE_ACTOR (AEntityBoss, AActor)
|
||||
public:
|
||||
void Serialize (FArchive &arc);
|
||||
void BeginPlay ();
|
||||
void Touch (AActor *toucher);
|
||||
|
||||
fixed_t SpawnX, SpawnY, SpawnZ;
|
||||
};
|
||||
|
||||
FState AEntityBoss::States[] =
|
||||
{
|
||||
#define S_ENTITY_SPAWN 0
|
||||
S_NORMAL (MNAM, 'A', 100, NULL, &States[S_ENTITY_SPAWN+1]),
|
||||
S_BRIGHT (MNAM, 'B', 60, NULL, &States[S_ENTITY_SPAWN+2]),
|
||||
S_BRIGHT (MNAM, 'C', 4, NULL, &States[S_ENTITY_SPAWN+3]),
|
||||
S_BRIGHT (MNAM, 'D', 4, NULL, &States[S_ENTITY_SPAWN+4]),
|
||||
S_BRIGHT (MNAM, 'E', 4, NULL, &States[S_ENTITY_SPAWN+5]),
|
||||
S_BRIGHT (MNAM, 'F', 4, NULL, &States[S_ENTITY_SPAWN+6]),
|
||||
S_BRIGHT (MNAM, 'G', 4, NULL, &States[S_ENTITY_SPAWN+7]),
|
||||
S_BRIGHT (MNAM, 'H', 4, NULL, &States[S_ENTITY_SPAWN+8]),
|
||||
S_BRIGHT (MNAM, 'I', 4, NULL, &States[S_ENTITY_SPAWN+9]),
|
||||
S_BRIGHT (MNAM, 'J', 4, NULL, &States[S_ENTITY_SPAWN+10]),
|
||||
S_BRIGHT (MNAM, 'K', 4, NULL, &States[S_ENTITY_SPAWN+11]),
|
||||
S_BRIGHT (MNAM, 'L', 4, NULL, &States[S_ENTITY_SPAWN+12]),
|
||||
S_BRIGHT (MNAL, 'A', 4, A_Look, &States[S_ENTITY_SPAWN+13]),
|
||||
S_BRIGHT (MNAL, 'B', 4, A_SentinelBob, &States[S_ENTITY_SPAWN+12]),
|
||||
|
||||
#define S_ENTITY_SEE (S_ENTITY_SPAWN+14)
|
||||
S_BRIGHT (MNAL, 'A', 4, A_Chase, &States[S_ENTITY_SEE+1]),
|
||||
S_BRIGHT (MNAL, 'B', 4, A_Chase, &States[S_ENTITY_SEE+2]),
|
||||
S_BRIGHT (MNAL, 'C', 4, A_SentinelBob, &States[S_ENTITY_SEE+3]),
|
||||
S_BRIGHT (MNAL, 'D', 4, A_Chase, &States[S_ENTITY_SEE+4]),
|
||||
S_BRIGHT (MNAL, 'E', 4, A_Chase, &States[S_ENTITY_SEE+5]),
|
||||
S_BRIGHT (MNAL, 'F', 4, A_Chase, &States[S_ENTITY_SEE+6]),
|
||||
S_BRIGHT (MNAL, 'G', 4, A_SentinelBob, &States[S_ENTITY_SEE+7]),
|
||||
S_BRIGHT (MNAL, 'H', 4, A_Chase, &States[S_ENTITY_SEE+8]),
|
||||
S_BRIGHT (MNAL, 'I', 4, A_Chase, &States[S_ENTITY_SEE+9]),
|
||||
S_BRIGHT (MNAL, 'J', 4, A_Chase, &States[S_ENTITY_SEE+10]),
|
||||
S_BRIGHT (MNAL, 'K', 4, A_SentinelBob, &States[S_ENTITY_SEE]),
|
||||
|
||||
#define S_ENTITY_MELEE (S_ENTITY_SEE+11)
|
||||
S_BRIGHT (MNAL, 'J', 4, A_FaceTarget, &States[S_ENTITY_MELEE+1]),
|
||||
S_BRIGHT (MNAL, 'I', 4, A_SpectreMelee, &States[S_ENTITY_MELEE+2]),
|
||||
S_BRIGHT (MNAL, 'C', 4, NULL, &States[S_ENTITY_SEE+2]),
|
||||
|
||||
#define S_ENTITY_MISSILE (S_ENTITY_MELEE+3)
|
||||
S_BRIGHT (MNAL, 'F', 4, A_FaceTarget, &States[S_ENTITY_MISSILE+1]),
|
||||
S_BRIGHT (MNAL, 'I', 4, A_EntityAttack, &States[S_ENTITY_MISSILE+2]),
|
||||
S_BRIGHT (MNAL, 'E', 4, NULL, &States[S_ENTITY_SEE+10]),
|
||||
|
||||
#define S_ENTITY_PAIN (S_ENTITY_MISSILE+3)
|
||||
S_BRIGHT (MNAL, 'J', 2, A_Pain, &States[S_ENTITY_SEE+6]),
|
||||
|
||||
#define S_ENTITY_DIE (S_ENTITY_PAIN+1)
|
||||
S_BRIGHT (MNAL, 'L', 7, A_SpectreChunkSmall, &States[S_ENTITY_DIE+1]),
|
||||
S_BRIGHT (MNAL, 'M', 7, A_Scream, &States[S_ENTITY_DIE+2]),
|
||||
S_BRIGHT (MNAL, 'N', 7, A_SpectreChunkSmall, &States[S_ENTITY_DIE+3]),
|
||||
S_BRIGHT (MNAL, 'O', 7, A_SpectreChunkSmall, &States[S_ENTITY_DIE+4]),
|
||||
S_BRIGHT (MNAL, 'P', 7, A_SpectreChunkLarge, &States[S_ENTITY_DIE+5]),
|
||||
S_BRIGHT (MNAL, 'Q', 64, A_SpectreChunkSmall, &States[S_ENTITY_DIE+6]),
|
||||
S_BRIGHT (MNAL, 'Q', 6, A_SpawnSubEntities, NULL),
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AEntityBoss, Strife, 128, 0)
|
||||
PROP_StrifeType (74)
|
||||
PROP_SpawnHealth (2500)
|
||||
PROP_SpawnState (S_ENTITY_SPAWN)
|
||||
PROP_SeeState (S_ENTITY_SEE)
|
||||
PROP_PainState (S_ENTITY_PAIN)
|
||||
PROP_PainChance (255)
|
||||
PROP_MeleeState (S_ENTITY_MELEE)
|
||||
PROP_MissileState (S_ENTITY_MISSILE)
|
||||
PROP_DeathState (S_ENTITY_DIE)
|
||||
PROP_SpeedFixed (13)
|
||||
PROP_RadiusFixed (130)
|
||||
PROP_HeightFixed (200)
|
||||
PROP_FloatSpeed (5)
|
||||
PROP_Mass (1000)
|
||||
PROP_Flags (MF_SPECIAL|MF_SOLID|MF_SHOOTABLE|MF_NOGRAVITY|
|
||||
MF_FLOAT|MF_SHADOW|MF_COUNTKILL|MF_NOTDMATCH|
|
||||
MF_STRIFEx8000000)
|
||||
PROP_Flags2 (MF2_PASSMOBJ|MF2_PUSHWALL|MF2_MCROSS)
|
||||
PROP_Flags3 (MF3_NOTARGET|MF3_NOBLOCKMONST)
|
||||
PROP_Flags4 (MF4_INCOMBAT|MF4_LOOKALLAROUND|MF4_SPECTRAL|MF4_NOICEDEATH)
|
||||
PROP_MinMissileChance (150)
|
||||
PROP_RenderStyle (STYLE_Translucent)
|
||||
PROP_Alpha (TRANSLUC50)
|
||||
PROP_SeeSound ("entity/sight")
|
||||
PROP_AttackSound ("entity/melee")
|
||||
PROP_PainSound ("entity/pain")
|
||||
PROP_DeathSound ("entity/death")
|
||||
PROP_ActiveSound ("entity/active")
|
||||
PROP_Obituary ("$OB_ENTITY")
|
||||
END_DEFAULTS
|
||||
|
||||
void AEntityBoss::Serialize (FArchive &arc)
|
||||
{
|
||||
Super::Serialize (arc);
|
||||
arc << SpawnX << SpawnY << SpawnZ;
|
||||
}
|
||||
|
||||
void AEntityBoss::BeginPlay ()
|
||||
{
|
||||
SpawnX = x;
|
||||
SpawnY = y;
|
||||
SpawnZ = z;
|
||||
}
|
||||
|
||||
void AEntityBoss::Touch (AActor *toucher)
|
||||
{
|
||||
P_DamageMobj (toucher, this, this, 5, NAME_Melee);
|
||||
}
|
||||
|
||||
// Second Entity Boss -------------------------------------------------------
|
||||
|
||||
void A_SubEntityDeath (AActor *);
|
||||
|
||||
class AEntitySecond : public AActor
|
||||
{
|
||||
DECLARE_ACTOR (AEntitySecond, AActor)
|
||||
public:
|
||||
void Touch (AActor *toucher);
|
||||
};
|
||||
|
||||
FState AEntitySecond::States[] =
|
||||
{
|
||||
#define S_ENTITY2_SPAWN 0
|
||||
S_BRIGHT (MNAL, 'R', 10, A_Look, &States[S_ENTITY2_SPAWN]),
|
||||
|
||||
#define S_ENTITY2_SEE (S_ENTITY2_SPAWN+1)
|
||||
S_BRIGHT (MNAL, 'R', 5, A_SentinelBob, &States[S_ENTITY2_SEE+1]),
|
||||
S_BRIGHT (MNAL, 'S', 5, A_Chase, &States[S_ENTITY2_SEE+2]),
|
||||
S_BRIGHT (MNAL, 'T', 5, A_Chase, &States[S_ENTITY2_SEE+3]),
|
||||
S_BRIGHT (MNAL, 'U', 5, A_SentinelBob, &States[S_ENTITY2_SEE+4]),
|
||||
S_BRIGHT (MNAL, 'V', 5, A_Chase, &States[S_ENTITY2_SEE+5]),
|
||||
S_BRIGHT (MNAL, 'W', 5, A_SentinelBob, &States[S_ENTITY2_SEE]),
|
||||
|
||||
#define S_ENTITY2_MELEE (S_ENTITY2_SEE+6)
|
||||
S_BRIGHT (MNAL, 'S', 4, A_FaceTarget, &States[S_ENTITY2_MELEE+1]),
|
||||
S_BRIGHT (MNAL, 'R', 4, A_SpectreMelee, &States[S_ENTITY2_MELEE+2]),
|
||||
S_BRIGHT (MNAL, 'T', 4, A_SentinelBob, &States[S_ENTITY2_SEE+1]),
|
||||
|
||||
#define S_ENTITY2_MISSILE (S_ENTITY2_MELEE+3)
|
||||
S_BRIGHT (MNAL, 'W', 4, A_FaceTarget, &States[S_ENTITY2_MISSILE+1]),
|
||||
S_BRIGHT (MNAL, 'U', 4, A_Spectre2Attack, &States[S_ENTITY2_MISSILE+2]),
|
||||
S_BRIGHT (MNAL, 'V', 4, A_SentinelBob, &States[S_ENTITY2_SEE+4]),
|
||||
|
||||
#define S_ENTITY2_PAIN (S_ENTITY2_MISSILE+3)
|
||||
S_BRIGHT (MNAL, 'R', 2, A_Pain, &States[S_ENTITY2_SEE]),
|
||||
|
||||
#define S_ENTITY2_DIE (S_ENTITY2_PAIN+1)
|
||||
S_BRIGHT (MDTH, 'A', 3, A_Scream, &States[S_ENTITY2_DIE+1]),
|
||||
S_BRIGHT (MDTH, 'B', 3, A_TossGib, &States[S_ENTITY2_DIE+2]),
|
||||
S_BRIGHT (MDTH, 'C', 3, A_NoBlocking, &States[S_ENTITY2_DIE+3]),
|
||||
S_BRIGHT (MDTH, 'D', 3, A_TossGib, &States[S_ENTITY2_DIE+4]),
|
||||
S_BRIGHT (MDTH, 'E', 3, A_TossGib, &States[S_ENTITY2_DIE+5]),
|
||||
S_BRIGHT (MDTH, 'F', 3, A_TossGib, &States[S_ENTITY2_DIE+6]),
|
||||
S_BRIGHT (MDTH, 'G', 3, A_TossGib, &States[S_ENTITY2_DIE+7]),
|
||||
S_BRIGHT (MDTH, 'H', 3, A_TossGib, &States[S_ENTITY2_DIE+8]),
|
||||
S_BRIGHT (MDTH, 'I', 3, A_TossGib, &States[S_ENTITY2_DIE+9]),
|
||||
S_BRIGHT (MDTH, 'J', 3, A_TossGib, &States[S_ENTITY2_DIE+10]),
|
||||
S_BRIGHT (MDTH, 'K', 3, A_TossGib, &States[S_ENTITY2_DIE+11]),
|
||||
S_BRIGHT (MDTH, 'L', 3, A_TossGib, &States[S_ENTITY2_DIE+12]),
|
||||
S_BRIGHT (MDTH, 'M', 3, A_TossGib, &States[S_ENTITY2_DIE+13]),
|
||||
S_BRIGHT (MDTH, 'N', 3, A_TossGib, &States[S_ENTITY2_DIE+14]),
|
||||
S_BRIGHT (MDTH, 'O', 3, A_SubEntityDeath, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AEntitySecond, Strife, -1, 0)
|
||||
PROP_StrifeType (75)
|
||||
PROP_SpawnHealth (990)
|
||||
PROP_SpawnState (S_ENTITY2_SPAWN)
|
||||
PROP_SeeState (S_ENTITY2_SEE)
|
||||
PROP_PainState (S_ENTITY2_PAIN)
|
||||
PROP_PainChance (255)
|
||||
PROP_MeleeState (S_ENTITY2_MELEE)
|
||||
PROP_MissileState (S_ENTITY2_MISSILE)
|
||||
PROP_DeathState (S_ENTITY2_DIE)
|
||||
PROP_SpeedFixed (14)
|
||||
PROP_RadiusFixed (130)
|
||||
PROP_HeightFixed (200)
|
||||
PROP_FloatSpeed (5)
|
||||
PROP_Mass (1000)
|
||||
PROP_Flags (MF_SPECIAL|MF_SOLID|MF_SHOOTABLE|MF_NOGRAVITY|
|
||||
MF_FLOAT|MF_SHADOW|MF_COUNTKILL|MF_NOTDMATCH|
|
||||
MF_STRIFEx8000000)
|
||||
PROP_Flags2 (MF2_PASSMOBJ|MF2_PUSHWALL|MF2_MCROSS)
|
||||
PROP_Flags3 (MF3_NOBLOCKMONST)
|
||||
PROP_Flags4 (MF4_INCOMBAT|MF4_LOOKALLAROUND|MF4_SPECTRAL|MF4_NOICEDEATH)
|
||||
PROP_MinMissileChance (150)
|
||||
PROP_RenderStyle (STYLE_Translucent)
|
||||
PROP_Alpha (TRANSLUC25)
|
||||
PROP_SeeSound ("alienspectre/sight")
|
||||
PROP_AttackSound ("alienspectre/blade")
|
||||
PROP_PainSound ("alienspectre/pain")
|
||||
PROP_DeathSound ("alienspectre/death")
|
||||
PROP_ActiveSound ("alienspectre/active")
|
||||
PROP_Obituary ("$OB_ENTITY")
|
||||
END_DEFAULTS
|
||||
|
||||
void AEntitySecond::Touch (AActor *toucher)
|
||||
{
|
||||
P_DamageMobj (toucher, this, this, 5, NAME_Melee);
|
||||
}
|
||||
|
||||
void A_SubEntityDeath (AActor *self)
|
||||
{
|
||||
if (CheckBossDeath (self))
|
||||
|
@ -290,6 +16,25 @@ void A_SubEntityDeath (AActor *self)
|
|||
}
|
||||
}
|
||||
|
||||
void A_SpectralMissile (AActor *self, const char *missilename)
|
||||
{
|
||||
if (self->target != NULL)
|
||||
{
|
||||
AActor *missile = P_SpawnMissileXYZ (self->x, self->y, self->z + 32*FRACUNIT,
|
||||
self, self->target, PClass::FindClass("SpectralLightningBigV2"), false);
|
||||
if (missile != NULL)
|
||||
{
|
||||
missile->tracer = self->target;
|
||||
missile->health = -2;
|
||||
P_CheckMissileSpawn(missile);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void A_SpotLightning (AActor *);
|
||||
void A_Spectre3Attack (AActor *);
|
||||
|
||||
|
||||
void A_EntityAttack (AActor *self)
|
||||
{
|
||||
// Apparent Strife bug: Case 5 was unreachable because they used % 5 instead of % 6.
|
||||
|
@ -301,7 +46,7 @@ void A_EntityAttack (AActor *self)
|
|||
break;
|
||||
|
||||
case 2:
|
||||
A_Spectre2Attack (self);
|
||||
A_SpectralMissile (self, "SpectralLightningH3");
|
||||
break;
|
||||
|
||||
case 3:
|
||||
|
@ -309,12 +54,12 @@ void A_EntityAttack (AActor *self)
|
|||
break;
|
||||
|
||||
case 4:
|
||||
A_Spectre4Attack (self);
|
||||
A_SpectralMissile (self, "SpectralLightningBigV2");
|
||||
break;
|
||||
|
||||
case 1:
|
||||
case 5:
|
||||
A_Spectre5Attack (self);
|
||||
A_SpectralMissile (self, "SpectralLightningBigBall2");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -322,26 +67,32 @@ void A_EntityAttack (AActor *self)
|
|||
|
||||
void A_SpawnEntity (AActor *self)
|
||||
{
|
||||
AActor *entity = Spawn<AEntityBoss> (self->x, self->y, self->z + 70*FRACUNIT, ALLOW_REPLACE);
|
||||
AActor *entity = Spawn("EntityBoss", self->x, self->y, self->z + 70*FRACUNIT, ALLOW_REPLACE);
|
||||
if (entity != NULL)
|
||||
{
|
||||
entity->angle = self->angle;
|
||||
entity->CopyFriendliness(self, true);
|
||||
//entity->target = self->target;
|
||||
entity->momz = 5*FRACUNIT;
|
||||
entity->tracer = self;
|
||||
}
|
||||
}
|
||||
|
||||
void A_SpawnSubEntities (AActor *selfa)
|
||||
void A_EntityDeath (AActor *self)
|
||||
{
|
||||
AEntityBoss *self = static_cast<AEntityBoss *>(selfa);
|
||||
AEntitySecond *second;
|
||||
fixed_t secondRadius = GetDefault<AEntitySecond>()->radius * 2;
|
||||
AActor *second;
|
||||
fixed_t secondRadius = GetDefaultByName("EntitySecond")->radius * 2;
|
||||
angle_t an;
|
||||
|
||||
AActor *spot = self->tracer;
|
||||
if (spot == NULL) spot = self;
|
||||
|
||||
fixed_t SpawnX = spot->x;
|
||||
fixed_t SpawnY = spot->y;
|
||||
fixed_t SpawnZ = spot->z + self->tracer? 70*FRACUNIT : 0;
|
||||
|
||||
an = self->angle >> ANGLETOFINESHIFT;
|
||||
second = Spawn<AEntitySecond> (self->SpawnX + FixedMul (secondRadius, finecosine[an]),
|
||||
self->SpawnY + FixedMul (secondRadius, finesine[an]), self->SpawnZ, ALLOW_REPLACE);
|
||||
second = Spawn("EntitySecond", SpawnX + FixedMul (secondRadius, finecosine[an]),
|
||||
SpawnY + FixedMul (secondRadius, finesine[an]), SpawnZ, ALLOW_REPLACE);
|
||||
second->CopyFriendliness(self, true);
|
||||
//second->target = self->target;
|
||||
A_FaceTarget (second);
|
||||
|
@ -350,8 +101,8 @@ void A_SpawnSubEntities (AActor *selfa)
|
|||
second->momy += FixedMul (finesine[an], 320000);
|
||||
|
||||
an = (self->angle + ANGLE_90) >> ANGLETOFINESHIFT;
|
||||
second = Spawn<AEntitySecond> (self->SpawnX + FixedMul (secondRadius, finecosine[an]),
|
||||
self->SpawnY + FixedMul (secondRadius, finesine[an]), self->SpawnZ, ALLOW_REPLACE);
|
||||
second = Spawn("EntitySecond", SpawnX + FixedMul (secondRadius, finecosine[an]),
|
||||
SpawnY + FixedMul (secondRadius, finesine[an]), SpawnZ, ALLOW_REPLACE);
|
||||
second->CopyFriendliness(self, true);
|
||||
//second->target = self->target;
|
||||
second->momx = FixedMul (secondRadius, finecosine[an]) << 2;
|
||||
|
@ -359,8 +110,8 @@ void A_SpawnSubEntities (AActor *selfa)
|
|||
A_FaceTarget (second);
|
||||
|
||||
an = (self->angle - ANGLE_90) >> ANGLETOFINESHIFT;
|
||||
second = Spawn<AEntitySecond> (self->SpawnX + FixedMul (secondRadius, finecosine[an]),
|
||||
self->SpawnY + FixedMul (secondRadius, finesine[an]), self->SpawnZ, ALLOW_REPLACE);
|
||||
second = Spawn("EntitySecond", SpawnX + FixedMul (secondRadius, finecosine[an]),
|
||||
SpawnY + FixedMul (secondRadius, finesine[an]), SpawnZ, ALLOW_REPLACE);
|
||||
second->CopyFriendliness(self, true);
|
||||
//second->target = self->target;
|
||||
second->momx = FixedMul (secondRadius, finecosine[an]) << 2;
|
||||
|
|
|
@ -59,7 +59,7 @@ void AOracle::NoBlockingSet ()
|
|||
|
||||
void A_WakeOracleSpectre (AActor *self)
|
||||
{
|
||||
TThinkerIterator<AAlienSpectre3> it;
|
||||
TThinkerIterator<AActor> it(NAME_AlienSpectre3);
|
||||
AActor *spectre = it.Next();
|
||||
|
||||
if (spectre != NULL)
|
||||
|
|
|
@ -22,20 +22,6 @@ class AFlameMissile : public AActor
|
|||
DECLARE_ACTOR (AFlameMissile, AActor)
|
||||
};
|
||||
|
||||
class AAlienSpectre1 : public AActor
|
||||
{
|
||||
DECLARE_ACTOR (AAlienSpectre1, AActor)
|
||||
public:
|
||||
void Touch (AActor *toucher);
|
||||
};
|
||||
|
||||
class AAlienSpectre3 : public AAlienSpectre1
|
||||
{
|
||||
DECLARE_ACTOR (AAlienSpectre3, AAlienSpectre1)
|
||||
public:
|
||||
void NoBlockingSet ();
|
||||
};
|
||||
|
||||
class ADegninOre : public AInventory
|
||||
{
|
||||
DECLARE_ACTOR (ADegninOre, AInventory)
|
||||
|
|
|
@ -742,7 +742,8 @@ ACTOR BlasterFX1 native
|
|||
Loop
|
||||
Death:
|
||||
FX18 A 3 BRIGHT A_SpawnRippers
|
||||
FX18 BCDEFG 4 BRIGHT
|
||||
FX18 B 3 BRIGHT
|
||||
FX18 CDEFG 4 BRIGHT
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
@ -930,8 +931,8 @@ ACTOR HornRodFX2 native
|
|||
Death:
|
||||
FX00 H 5 BRIGHT A_AddPlayerRain
|
||||
FX00 I 5 BRIGHT
|
||||
FX00 JK 4 BRIGHT
|
||||
FX00 LM 3 BRIGHT
|
||||
FX00 J 4 BRIGHT
|
||||
FX00 KLM 3 BRIGHT
|
||||
FX00 G 1 A_HideInCeiling
|
||||
FX00 G 1 A_SkullRodStorm
|
||||
Wait
|
||||
|
|
|
@ -118,7 +118,6 @@ ACTOR FlamePuff2 : FlamePuff
|
|||
|
||||
ACTOR CircleFlame
|
||||
{
|
||||
Game Hexen
|
||||
Radius 6
|
||||
Damage 2
|
||||
DamageType "Fire"
|
||||
|
|
212
wadsrc/static/actors/strife/alienspectres.txt
Normal file
212
wadsrc/static/actors/strife/alienspectres.txt
Normal file
|
@ -0,0 +1,212 @@
|
|||
|
||||
// Alien Spectre 1 -----------------------------------------------------------
|
||||
|
||||
ACTOR AlienSpectre1 : SpectralMonster 129
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 67,-1,-1
|
||||
Health 1000
|
||||
Painchance 250
|
||||
Speed 12
|
||||
Radius 64
|
||||
Height 64
|
||||
FloatSpeed 5
|
||||
Mass 1000
|
||||
MinMissileChance 150
|
||||
RenderStyle Translucent
|
||||
Alpha 0.666
|
||||
SeeSound "alienspectre/sight"
|
||||
AttackSound "alienspectre/blade"
|
||||
PainSound "alienspectre/pain"
|
||||
DeathSound "alienspectre/death"
|
||||
ActiveSound "alienspectre/active"
|
||||
+NOGRAVITY
|
||||
+FLOAT
|
||||
+SHADOW
|
||||
+NOTDMATCH
|
||||
+DONTMORPH
|
||||
+NOBLOCKMONST
|
||||
+INCOMBAT
|
||||
+LOOKALLAROUND
|
||||
+NOICEDEATH
|
||||
|
||||
action native A_AlienSpectreDeath ();
|
||||
|
||||
states
|
||||
{
|
||||
Spawn:
|
||||
ALN1 A 10 A_Look
|
||||
ALN1 B 10 A_SentinelBob
|
||||
Loop
|
||||
See:
|
||||
ALN1 AB 4 Bright A_Chase
|
||||
ALN1 C 4 Bright A_SentinelBob
|
||||
ALN1 DEF 4 Bright A_Chase
|
||||
ALN1 G 4 Bright A_SentinelBob
|
||||
ALN1 HIJ 4 Bright A_Chase
|
||||
ALN1 K 4 Bright A_SentinelBob
|
||||
Loop
|
||||
Melee:
|
||||
ALN1 J 4 Bright A_FaceTarget
|
||||
ALN1 I 4 Bright A_CustomMeleeAttack((random[SpectreMelee](0,255)&9)*5)
|
||||
ALN1 H 4 Bright
|
||||
Goto See
|
||||
Missile:
|
||||
ALN1 J 4 Bright A_FaceTarget
|
||||
ALN1 I 4 Bright A_SpotLightning
|
||||
ALN1 H 4 Bright
|
||||
Goto See+10
|
||||
Pain:
|
||||
ALN1 J 2 A_Pain
|
||||
Goto See+6
|
||||
Death:
|
||||
AL1P A 6 Bright A_SpectreChunkSmall
|
||||
AL1P B 6 Bright A_Scream
|
||||
AL1P C 6 Bright A_SpectreChunkSmall
|
||||
AL1P DE 6 Bright
|
||||
AL1P F 6 Bright A_SpectreChunkSmall
|
||||
AL1P G 6 Bright
|
||||
AL1P H 6 Bright A_SpectreChunkSmall
|
||||
AL1P IJK 6 Bright
|
||||
AL1P LM 5 Bright
|
||||
AL1P N 5 Bright A_SpectreChunkLarge
|
||||
AL1P OPQ 5 Bright
|
||||
AL1P R 5 Bright A_AlienSpectreDeath
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Alien Spectre 2 -----------------------------------------------------------
|
||||
|
||||
ACTOR AlienSpectre2 : AlienSpectre1 75
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 70
|
||||
Health 1200
|
||||
Painchance 50
|
||||
Radius 24
|
||||
DropItem "Sigil2"
|
||||
States
|
||||
{
|
||||
Missile:
|
||||
ALN1 F 4 A_FaceTarget
|
||||
ALN1 I 4 A_CustomMissile("SpectralLightningH3", 32, 0)
|
||||
ALN1 E 4
|
||||
Goto See+10
|
||||
}
|
||||
}
|
||||
|
||||
// Alien Spectre 3 ----------------------------------------------------------
|
||||
// This is the Oracle's personal spectre, so it's a little different.
|
||||
|
||||
ACTOR AlienSpectre3 : AlienSpectre1 76
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 71,-1,-1
|
||||
Health 1500
|
||||
Painchance 50
|
||||
Radius 24
|
||||
+SPAWNCEILING
|
||||
DropItem "Sigil3"
|
||||
states
|
||||
{
|
||||
Spawn:
|
||||
ALN1 ABCDEFGHIJK 5
|
||||
Loop
|
||||
See:
|
||||
ALN1 AB 5 A_Chase
|
||||
ALN1 C 5 A_SentinelBob
|
||||
ALN1 DEF 5 A_Chase
|
||||
ALN1 G 5 A_SentinelBob
|
||||
ALN1 HIJ 5 A_Chase
|
||||
ALN1 K 5 A_SentinelBob
|
||||
Loop
|
||||
Melee:
|
||||
ALN1 J 4 A_FaceTarget
|
||||
ALN1 I 4 A_CustomMeleeAttack((random[SpectreMelee](0,255)&9)*5)
|
||||
ALN1 C 4
|
||||
Goto See+2
|
||||
Missile:
|
||||
ALN1 F 4 A_FaceTarget
|
||||
ALN1 I 4 A_Spectre3Attack
|
||||
ALN1 E 4
|
||||
Goto See+10
|
||||
Pain:
|
||||
ALN1 J 2 A_Pain
|
||||
Goto See+6
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Alien Spectre 4 -----------------------------------------------------------
|
||||
|
||||
ACTOR AlienSpectre4 : AlienSpectre1 167
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 72,-1,-1
|
||||
Health 1700
|
||||
Painchance 50
|
||||
Radius 24
|
||||
DropItem "Sigil4"
|
||||
States
|
||||
{
|
||||
Missile:
|
||||
ALN1 F 4 A_FaceTarget
|
||||
ALN1 I 4 A_CustomMissile("SpectralLightningBigV2", 32, 0)
|
||||
ALN1 E 4
|
||||
Goto See+10
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Alien Spectre 5 -----------------------------------------------------------
|
||||
|
||||
ACTOR AlienSpectre5 : AlienSpectre1 168
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 73,-1,-1
|
||||
Health 2000
|
||||
Painchance 50
|
||||
Radius 24
|
||||
DropItem "Sigil5"
|
||||
States
|
||||
{
|
||||
Missile:
|
||||
ALN1 F 4 A_FaceTarget
|
||||
ALN1 I 4 A_CustomMissile("SpectralLightningBigBall2", 32, 0)
|
||||
ALN1 E 4
|
||||
Goto See+10
|
||||
}
|
||||
}
|
||||
|
||||
// Small Alien Chunk --------------------------------------------------------
|
||||
|
||||
ACTOR AlienChunkSmall
|
||||
{
|
||||
ConversationID 68,-1,-1
|
||||
+NOBLOCKMAP
|
||||
+NOCLIP
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
NODE ABCDEFG 6 Bright
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
// Large Alien Chunk --------------------------------------------------------
|
||||
|
||||
ACTOR AlienChunkLarge
|
||||
{
|
||||
ConversationID 69,-1,-1
|
||||
+NOBLOCKMAP
|
||||
+NOCLIP
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
MTHD ABCDEFGHIJK 5 Bright
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
207
wadsrc/static/actors/strife/entityboss.txt
Normal file
207
wadsrc/static/actors/strife/entityboss.txt
Normal file
|
@ -0,0 +1,207 @@
|
|||
|
||||
// Entity Nest --------------------------------------------------------------
|
||||
|
||||
ACTOR EntityNest 26
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 76,-1,-1
|
||||
Radius 84
|
||||
Height 47
|
||||
+SOLID
|
||||
+NOTDMATCH
|
||||
+FLOORCLIP
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
NEST A -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
// Entity Pod ---------------------------------------------------------------
|
||||
|
||||
ACTOR EntityPod 198
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 77,-1,-1
|
||||
Radius 25
|
||||
Height 91
|
||||
+SOLID
|
||||
+NOTDMATCH
|
||||
SeeSound "misc/gibbed"
|
||||
|
||||
action native A_SpawnEntity ();
|
||||
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
PODD A 60 A_Look
|
||||
Loop
|
||||
See:
|
||||
PODD A 360
|
||||
PODD B 9 A_NoBlocking
|
||||
PODD C 9
|
||||
PODD D 9 A_SpawnEntity
|
||||
PODD E -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Entity Boss --------------------------------------------------------------
|
||||
|
||||
ACTOR EntityBoss : SpectralMonster 128
|
||||
{
|
||||
Game Strife
|
||||
ConversationID 74,-1,-1
|
||||
Health 2500
|
||||
Painchance 255
|
||||
Speed 13
|
||||
Radius 130
|
||||
Height 200
|
||||
FloatSpeed 5
|
||||
Mass 1000
|
||||
Monster
|
||||
+SPECIAL
|
||||
+NOGRAVITY
|
||||
+FLOAT
|
||||
+SHADOW
|
||||
+NOTDMATCH
|
||||
+DONTMORPH
|
||||
+NOTARGET
|
||||
+NOBLOCKMONST
|
||||
+INCOMBAT
|
||||
+LOOKALLAROUND
|
||||
+SPECTRAL
|
||||
+NOICEDEATH
|
||||
MinMissileChance 150
|
||||
RenderStyle Translucent
|
||||
Alpha 0.5
|
||||
SeeSound "entity/sight"
|
||||
AttackSound "entity/melee"
|
||||
PainSound "entity/pain"
|
||||
DeathSound "entity/death"
|
||||
ActiveSound "entity/active"
|
||||
Obituary "$OB_ENTITY"
|
||||
|
||||
action native A_EntityAttack();
|
||||
action native A_EntityDeath();
|
||||
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
MNAM A 100 A_SentinelBob
|
||||
MNAM B 60 Bright A_SentinelBob
|
||||
MNAM CDEFGHIJKL 4 Bright A_SentinelBob
|
||||
MNAL A 4 Bright A_Look
|
||||
MNAL B 4 Bright A_SentinelBob
|
||||
Goto Spawn+12
|
||||
See:
|
||||
MNAL AB 4 Bright A_Chase
|
||||
MNAL C 4 Bright A_SentinelBob
|
||||
MNAL DEF 4 Bright A_Chase
|
||||
MNAL G 4 Bright A_SentinelBob
|
||||
MNAL HIJ 4 Bright A_Chase
|
||||
MNAL K 4 Bright A_SentinelBob
|
||||
Loop
|
||||
Melee:
|
||||
MNAL J 4 Bright A_FaceTarget
|
||||
MNAL I 4 Bright A_CustomMeleeAttack((random[SpectreMelee](0,255)&9)*5)
|
||||
MNAL C 4 Bright
|
||||
Goto See+2
|
||||
Missile:
|
||||
MNAL F 4 Bright A_FaceTarget
|
||||
MNAL I 4 Bright A_EntityAttack
|
||||
MNAL E 4 Bright
|
||||
Goto See+10
|
||||
Pain:
|
||||
MNAL J 2 Bright A_Pain
|
||||
Goto See+6
|
||||
Death:
|
||||
MNAL L 7 Bright A_SpectreChunkSmall
|
||||
MNAL M 7 Bright A_Scream
|
||||
MNAL NO 7 Bright A_SpectreChunkSmall
|
||||
MNAL P 7 Bright A_SpectreChunkLarge
|
||||
MNAL Q 64 Bright A_SpectreChunkSmall
|
||||
MNAL Q 6 Bright A_EntityDeath
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
// Second Entity Boss -------------------------------------------------------
|
||||
|
||||
ACTOR EntitySecond : SpectralMonster
|
||||
{
|
||||
ConversationID 75,-1,-1
|
||||
Health 990
|
||||
Painchance 255
|
||||
Speed 14
|
||||
Radius 130
|
||||
Height 200
|
||||
FloatSpeed 5
|
||||
Mass 1000
|
||||
Monster
|
||||
+SPECIAL
|
||||
+NOGRAVITY
|
||||
+FLOAT
|
||||
+SHADOW
|
||||
+NOTDMATCH
|
||||
+DONTMORPH
|
||||
+NOBLOCKMONST
|
||||
+INCOMBAT
|
||||
+LOOKALLAROUND
|
||||
+SPECTRAL
|
||||
+NOICEDEATH
|
||||
MinMissileChance 150
|
||||
RenderStyle Translucent
|
||||
Alpha 0.25
|
||||
SeeSound "alienspectre/sight"
|
||||
AttackSound "alienspectre/blade"
|
||||
PainSound "alienspectre/pain"
|
||||
DeathSound "alienspectre/death"
|
||||
ActiveSound "alienspectre/active"
|
||||
Obituary "$OB_ENTITY"
|
||||
|
||||
action native A_SubEntityDeath ();
|
||||
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
MNAL R 10 Bright A_Look
|
||||
Loop
|
||||
See:
|
||||
MNAL R 5 Bright A_SentinelBob
|
||||
MNAL ST 5 Bright A_Chase
|
||||
MNAL U 5 Bright A_SentinelBob
|
||||
MNAL V 5 Bright A_Chase
|
||||
MNAL W 5 Bright A_SentinelBob
|
||||
Loop
|
||||
Melee:
|
||||
MNAL S 4 Bright A_FaceTarget
|
||||
MNAL R 4 Bright A_CustomMeleeAttack((random[SpectreMelee](0,255)&9)*5)
|
||||
MNAL T 4 Bright A_SentinelBob
|
||||
Goto See+1
|
||||
Missile:
|
||||
MNAL W 4 Bright A_FaceTarget
|
||||
MNAL U 4 Bright A_CustomMissile("SpectralLightningH3",32,0)
|
||||
|
||||
MNAL V 4 Bright A_SentinelBob
|
||||
Goto See+4
|
||||
Pain:
|
||||
MNAL R 2 Bright A_Pain
|
||||
Goto See
|
||||
Death:
|
||||
MDTH A 3 Bright A_Scream
|
||||
MDTH B 3 Bright A_TossGib
|
||||
MDTH C 3 Bright A_NoBlocking
|
||||
MDTH DEFGHIJKLMN 3 Bright A_TossGib
|
||||
MDTH O 3 Bright A_SubEntityDeath
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -11,12 +11,8 @@ ACTOR SpectralMonster native
|
|||
|
||||
action native A_SpectreChunkSmall ();
|
||||
action native A_SpectreChunkLarge ();
|
||||
action native A_Spectre2Attack ();
|
||||
action native A_Spectre3Attack ();
|
||||
action native A_Spectre4Attack ();
|
||||
action native A_Spectre5Attack ();
|
||||
action native A_SpotLightning ();
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -100,8 +100,10 @@
|
|||
#include "actors/strife/strifeplayer.txt"
|
||||
#include "actors/strife/spectral.txt"
|
||||
#include "actors/strife/acolyte.txt"
|
||||
#include "actors/strife/alienspectres.txt"
|
||||
#include "actors/strife/beggars.txt"
|
||||
#include "actors/strife/crusader.txt"
|
||||
#include "actors/strife/entityboss.txt"
|
||||
#include "actors/strife/inquisitor.txt"
|
||||
#include "actors/strife/merchants.txt"
|
||||
#include "actors/strife/peasants.txt"
|
||||
|
|
Loading…
Reference in a new issue