- 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) August 6, 2008 (SBARINfO update)
- Added: fullscreenoffsets flag for status bars. This changes the coordinate - 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 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(SpectralLightning)
ACTOR(SpectreChunkSmall) ACTOR(SpectreChunkSmall)
ACTOR(SpectreChunkLarge) ACTOR(SpectreChunkLarge)
ACTOR(Spectre2Attack)
ACTOR(Spectre3Attack) ACTOR(Spectre3Attack)
ACTOR(Spectre4Attack)
ACTOR(Spectre5Attack)
ACTOR(SpotLightning) ACTOR(SpotLightning)
ACTOR(AlienSpectreDeath)
ACTOR(EntityDeath)
ACTOR(EntityAttack)
ACTOR(SubEntityDeath)
ACTOR(SpawnEntity)
// 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)

View file

@ -12,337 +12,11 @@
static FRandom pr_spectrespawn ("AlienSpectreSpawn"); static FRandom pr_spectrespawn ("AlienSpectreSpawn");
static FRandom pr_spectrechunk ("212e4"); 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); 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 () static void GenericSpectreSpawn (AActor *actor, const char *type)
{
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)
{ {
AActor *spectre = Spawn (type, actor->x, actor->y, actor->z, ALLOW_REPLACE); AActor *spectre = Spawn (type, actor->x, actor->y, actor->z, ALLOW_REPLACE);
if (spectre != NULL) if (spectre != NULL)
@ -353,22 +27,22 @@ static void GenericSpectreSpawn (AActor *actor, const PClass *type)
void A_SpawnSpectre3 (AActor *actor) void A_SpawnSpectre3 (AActor *actor)
{ {
GenericSpectreSpawn (actor, RUNTIME_CLASS(AAlienSpectre3)); GenericSpectreSpawn (actor, "AlienSpectre3");
} }
void A_SpawnSpectre4 (AActor *actor) void A_SpawnSpectre4 (AActor *actor)
{ {
GenericSpectreSpawn (actor, RUNTIME_CLASS(AAlienSpectre4)); GenericSpectreSpawn (actor, "AlienSpectre4");
} }
void A_SpawnSpectre5 (AActor *actor) void A_SpawnSpectre5 (AActor *actor)
{ {
GenericSpectreSpawn (actor, RUNTIME_CLASS(AAlienSpectre5)); GenericSpectreSpawn (actor, "AlienSpectre5");
} }
void A_SpectreChunkSmall (AActor *self) 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) if (foo != NULL)
{ {
@ -386,7 +60,7 @@ void A_SpectreChunkSmall (AActor *self)
void A_SpectreChunkLarge (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) 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) void A_Spectre3Attack (AActor *self)
{ {
if (self->target == NULL) if (self->target == NULL)
@ -530,7 +161,7 @@ void A_AlienSpectreDeath (AActor *self)
log = 87; log = 87;
} }
else else
{ // You weild the power of the complete Sigil. { // You wield the power of the complete Sigil.
log = 85; log = 85;
} }
EV_DoDoor (DDoor::doorOpen, NULL, NULL, 222, 8*FRACUNIT, 0, 0, 0); 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>(); sigil = player->FindInventory<ASigil>();
if (sigil != NULL && sigil->NumPieces == 5) if (sigil != NULL && sigil->NumPieces == 5)
{ // You weild the power of the complete Sigil. { // You wield the power of the complete Sigil.
log = 85; log = 85;
} }
else else

View file

@ -8,280 +8,6 @@
static FRandom pr_entity ("Entity"); 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) void A_SubEntityDeath (AActor *self)
{ {
if (CheckBossDeath (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) void A_EntityAttack (AActor *self)
{ {
// Apparent Strife bug: Case 5 was unreachable because they used % 5 instead of % 6. // Apparent Strife bug: Case 5 was unreachable because they used % 5 instead of % 6.
@ -301,7 +46,7 @@ void A_EntityAttack (AActor *self)
break; break;
case 2: case 2:
A_Spectre2Attack (self); A_SpectralMissile (self, "SpectralLightningH3");
break; break;
case 3: case 3:
@ -309,12 +54,12 @@ void A_EntityAttack (AActor *self)
break; break;
case 4: case 4:
A_Spectre4Attack (self); A_SpectralMissile (self, "SpectralLightningBigV2");
break; break;
case 1: case 1:
case 5: case 5:
A_Spectre5Attack (self); A_SpectralMissile (self, "SpectralLightningBigBall2");
break; break;
} }
} }
@ -322,26 +67,32 @@ void A_EntityAttack (AActor *self)
void A_SpawnEntity (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) if (entity != NULL)
{ {
entity->angle = self->angle; entity->angle = self->angle;
entity->CopyFriendliness(self, true); entity->CopyFriendliness(self, true);
//entity->target = self->target;
entity->momz = 5*FRACUNIT; entity->momz = 5*FRACUNIT;
entity->tracer = self;
} }
} }
void A_SpawnSubEntities (AActor *selfa) void A_EntityDeath (AActor *self)
{ {
AEntityBoss *self = static_cast<AEntityBoss *>(selfa); AActor *second;
AEntitySecond *second; fixed_t secondRadius = GetDefaultByName("EntitySecond")->radius * 2;
fixed_t secondRadius = GetDefault<AEntitySecond>()->radius * 2;
angle_t an; 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; an = self->angle >> ANGLETOFINESHIFT;
second = Spawn<AEntitySecond> (self->SpawnX + FixedMul (secondRadius, finecosine[an]), second = Spawn("EntitySecond", SpawnX + FixedMul (secondRadius, finecosine[an]),
self->SpawnY + FixedMul (secondRadius, finesine[an]), self->SpawnZ, ALLOW_REPLACE); SpawnY + FixedMul (secondRadius, finesine[an]), SpawnZ, ALLOW_REPLACE);
second->CopyFriendliness(self, true); second->CopyFriendliness(self, true);
//second->target = self->target; //second->target = self->target;
A_FaceTarget (second); A_FaceTarget (second);
@ -350,8 +101,8 @@ void A_SpawnSubEntities (AActor *selfa)
second->momy += FixedMul (finesine[an], 320000); second->momy += FixedMul (finesine[an], 320000);
an = (self->angle + ANGLE_90) >> ANGLETOFINESHIFT; an = (self->angle + ANGLE_90) >> ANGLETOFINESHIFT;
second = Spawn<AEntitySecond> (self->SpawnX + FixedMul (secondRadius, finecosine[an]), second = Spawn("EntitySecond", SpawnX + FixedMul (secondRadius, finecosine[an]),
self->SpawnY + FixedMul (secondRadius, finesine[an]), self->SpawnZ, ALLOW_REPLACE); SpawnY + FixedMul (secondRadius, finesine[an]), SpawnZ, ALLOW_REPLACE);
second->CopyFriendliness(self, true); second->CopyFriendliness(self, true);
//second->target = self->target; //second->target = self->target;
second->momx = FixedMul (secondRadius, finecosine[an]) << 2; second->momx = FixedMul (secondRadius, finecosine[an]) << 2;
@ -359,8 +110,8 @@ void A_SpawnSubEntities (AActor *selfa)
A_FaceTarget (second); A_FaceTarget (second);
an = (self->angle - ANGLE_90) >> ANGLETOFINESHIFT; an = (self->angle - ANGLE_90) >> ANGLETOFINESHIFT;
second = Spawn<AEntitySecond> (self->SpawnX + FixedMul (secondRadius, finecosine[an]), second = Spawn("EntitySecond", SpawnX + FixedMul (secondRadius, finecosine[an]),
self->SpawnY + FixedMul (secondRadius, finesine[an]), self->SpawnZ, ALLOW_REPLACE); SpawnY + FixedMul (secondRadius, finesine[an]), SpawnZ, ALLOW_REPLACE);
second->CopyFriendliness(self, true); second->CopyFriendliness(self, true);
//second->target = self->target; //second->target = self->target;
second->momx = FixedMul (secondRadius, finecosine[an]) << 2; second->momx = FixedMul (secondRadius, finecosine[an]) << 2;

View file

@ -59,7 +59,7 @@ void AOracle::NoBlockingSet ()
void A_WakeOracleSpectre (AActor *self) void A_WakeOracleSpectre (AActor *self)
{ {
TThinkerIterator<AAlienSpectre3> it; TThinkerIterator<AActor> it(NAME_AlienSpectre3);
AActor *spectre = it.Next(); AActor *spectre = it.Next();
if (spectre != NULL) if (spectre != NULL)

View file

@ -22,20 +22,6 @@ class AFlameMissile : public AActor
DECLARE_ACTOR (AFlameMissile, 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 class ADegninOre : public AInventory
{ {
DECLARE_ACTOR (ADegninOre, AInventory) DECLARE_ACTOR (ADegninOre, AInventory)

View file

@ -742,7 +742,8 @@ ACTOR BlasterFX1 native
Loop Loop
Death: Death:
FX18 A 3 BRIGHT A_SpawnRippers FX18 A 3 BRIGHT A_SpawnRippers
FX18 BCDEFG 4 BRIGHT FX18 B 3 BRIGHT
FX18 CDEFG 4 BRIGHT
Stop Stop
} }
} }
@ -930,8 +931,8 @@ ACTOR HornRodFX2 native
Death: Death:
FX00 H 5 BRIGHT A_AddPlayerRain FX00 H 5 BRIGHT A_AddPlayerRain
FX00 I 5 BRIGHT FX00 I 5 BRIGHT
FX00 JK 4 BRIGHT FX00 J 4 BRIGHT
FX00 LM 3 BRIGHT FX00 KLM 3 BRIGHT
FX00 G 1 A_HideInCeiling FX00 G 1 A_HideInCeiling
FX00 G 1 A_SkullRodStorm FX00 G 1 A_SkullRodStorm
Wait Wait

View file

@ -118,7 +118,6 @@ ACTOR FlamePuff2 : FlamePuff
ACTOR CircleFlame ACTOR CircleFlame
{ {
Game Hexen
Radius 6 Radius 6
Damage 2 Damage 2
DamageType "Fire" 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_SpectreChunkSmall ();
action native A_SpectreChunkLarge (); action native A_SpectreChunkLarge ();
action native A_Spectre2Attack ();
action native A_Spectre3Attack (); action native A_Spectre3Attack ();
action native A_Spectre4Attack ();
action native A_Spectre5Attack ();
action native A_SpotLightning (); action native A_SpotLightning ();
} }

View file

@ -100,8 +100,10 @@
#include "actors/strife/strifeplayer.txt" #include "actors/strife/strifeplayer.txt"
#include "actors/strife/spectral.txt" #include "actors/strife/spectral.txt"
#include "actors/strife/acolyte.txt" #include "actors/strife/acolyte.txt"
#include "actors/strife/alienspectres.txt"
#include "actors/strife/beggars.txt" #include "actors/strife/beggars.txt"
#include "actors/strife/crusader.txt" #include "actors/strife/crusader.txt"
#include "actors/strife/entityboss.txt"
#include "actors/strife/inquisitor.txt" #include "actors/strife/inquisitor.txt"
#include "actors/strife/merchants.txt" #include "actors/strife/merchants.txt"
#include "actors/strife/peasants.txt" #include "actors/strife/peasants.txt"