- 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:
Christoph Oelckers 2008-08-06 17:49:22 +00:00
parent 3908c71510
commit c8538efda9
12 changed files with 485 additions and 692 deletions

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -118,7 +118,6 @@ ACTOR FlamePuff2 : FlamePuff
ACTOR CircleFlame
{
Game Hexen
Radius 6
Damage 2
DamageType "Fire"

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

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

View file

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

View file

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