2006-02-24 04:48:15 +00:00
|
|
|
#include "actor.h"
|
|
|
|
#include "info.h"
|
|
|
|
#include "gi.h"
|
|
|
|
#include "a_sharedglobal.h"
|
|
|
|
|
|
|
|
// Default actor for unregistered doomednums -------------------------------
|
|
|
|
|
|
|
|
FState AUnknown::States[] =
|
|
|
|
{
|
|
|
|
S_NORMAL (UNKN, 'A', -1, NULL , NULL)
|
|
|
|
};
|
|
|
|
|
|
|
|
IMPLEMENT_ACTOR (AUnknown, Any, -1, 0)
|
|
|
|
PROP_RadiusFixed (32)
|
|
|
|
PROP_HeightFixed (56)
|
|
|
|
PROP_Flags (MF_NOGRAVITY|MF_NOBLOCKMAP)
|
2006-04-16 13:29:50 +00:00
|
|
|
PROP_Flags3 (MF3_DONTSPLASH)
|
2006-02-24 04:48:15 +00:00
|
|
|
|
|
|
|
PROP_SpawnState (0)
|
|
|
|
END_DEFAULTS
|
|
|
|
|
|
|
|
// Route node for monster patrols -------------------------------------------
|
|
|
|
|
|
|
|
IMPLEMENT_STATELESS_ACTOR (APatrolPoint, Any, 9024, 0)
|
|
|
|
PROP_RadiusFixed (8)
|
|
|
|
PROP_HeightFixed (8)
|
|
|
|
PROP_Mass (10)
|
2006-04-16 13:29:50 +00:00
|
|
|
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY)
|
|
|
|
PROP_Flags3 (MF3_DONTSPLASH)
|
2006-02-24 04:48:15 +00:00
|
|
|
PROP_RenderStyle (STYLE_None)
|
|
|
|
END_DEFAULTS
|
|
|
|
|
|
|
|
// A special to execute when a monster reaches a matching patrol point ------
|
|
|
|
|
|
|
|
IMPLEMENT_STATELESS_ACTOR (APatrolSpecial, Any, 9047, 0)
|
|
|
|
PROP_RadiusFixed (8)
|
|
|
|
PROP_HeightFixed (8)
|
|
|
|
PROP_Mass (10)
|
2006-04-16 13:29:50 +00:00
|
|
|
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY)
|
|
|
|
PROP_Flags3 (MF3_DONTSPLASH)
|
2006-02-24 04:48:15 +00:00
|
|
|
PROP_RenderStyle (STYLE_None)
|
|
|
|
END_DEFAULTS
|
|
|
|
|
|
|
|
// Blood sprite - adjusts itself for each game -----------------------------
|
|
|
|
|
|
|
|
FState ABlood::States[] =
|
|
|
|
{
|
|
|
|
#define S_DBLOOD 0
|
|
|
|
S_NORMAL (BLUD, 'C', 8, NULL , &States[S_DBLOOD+1]),
|
|
|
|
S_NORMAL (BLUD, 'B', 8, NULL , &States[S_DBLOOD+2]),
|
|
|
|
S_NORMAL (BLUD, 'A', 8, NULL , NULL),
|
|
|
|
|
2006-05-13 12:41:15 +00:00
|
|
|
#define S_SBLOOD (S_DBLOOD+3)
|
2006-02-24 04:48:15 +00:00
|
|
|
S_NORMAL (SPRY, 'A', 3, NULL , &States[S_SBLOOD+1]),
|
|
|
|
S_NORMAL (SPRY, 'B', 3, NULL , &States[S_SBLOOD+2]),
|
|
|
|
S_NORMAL (SPRY, 'C', 3, NULL , &States[S_SBLOOD+3]),
|
|
|
|
S_NORMAL (SPRY, 'D', 3, NULL , &States[S_SBLOOD+4]),
|
|
|
|
S_NORMAL (SPRY, 'E', 3, NULL , &States[S_SBLOOD+5]),
|
|
|
|
S_NORMAL (SPRY, 'F', 3, NULL , &States[S_SBLOOD+6]),
|
|
|
|
S_NORMAL (SPRY, 'G', 2, NULL , NULL),
|
|
|
|
};
|
|
|
|
|
|
|
|
IMPLEMENT_ACTOR (ABlood, Any, -1, 130)
|
|
|
|
PROP_Flags (MF_NOBLOCKMAP)
|
2006-04-11 16:27:41 +00:00
|
|
|
PROP_Flags2 (MF2_NOTELEPORT)
|
2006-05-13 12:41:15 +00:00
|
|
|
PROP_SpawnState(S_DBLOOD)
|
2006-02-24 04:48:15 +00:00
|
|
|
PROP_Mass (5)
|
|
|
|
END_DEFAULTS
|
|
|
|
|
|
|
|
void ABlood::SetDamage (int damage)
|
|
|
|
{
|
|
|
|
if (gameinfo.gametype == GAME_Doom)
|
|
|
|
{
|
|
|
|
if (damage <= 12 && damage >= 9)
|
|
|
|
{
|
|
|
|
SetState (SpawnState + 1);
|
|
|
|
}
|
|
|
|
else if (damage < 9)
|
|
|
|
{
|
|
|
|
SetState (SpawnState + 2);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (gameinfo.gametype == GAME_Strife)
|
|
|
|
{
|
|
|
|
if (damage > 13)
|
|
|
|
{
|
|
|
|
SetState (&States[S_SBLOOD]);
|
|
|
|
}
|
|
|
|
else if (damage >= 10)
|
|
|
|
{
|
2006-05-13 12:41:15 +00:00
|
|
|
SetState (&States[S_DBLOOD]);
|
2006-02-24 04:48:15 +00:00
|
|
|
}
|
|
|
|
else if (damage >= 7)
|
|
|
|
{
|
2006-05-13 12:41:15 +00:00
|
|
|
SetState (&States[S_DBLOOD+1]);
|
2006-02-24 04:48:15 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2006-05-13 12:41:15 +00:00
|
|
|
SetState (&States[S_DBLOOD+2]);
|
2006-02-24 04:48:15 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Map spot ----------------------------------------------------------------
|
|
|
|
|
|
|
|
IMPLEMENT_STATELESS_ACTOR (AMapSpot, Any, 9001, 0)
|
|
|
|
PROP_Flags (MF_NOBLOCKMAP|MF_NOSECTOR|MF_NOGRAVITY)
|
|
|
|
PROP_RenderStyle (STYLE_None)
|
2006-04-16 13:29:50 +00:00
|
|
|
PROP_Flags3 (MF3_DONTSPLASH)
|
2006-02-24 04:48:15 +00:00
|
|
|
END_DEFAULTS
|
|
|
|
|
|
|
|
// Map spot with gravity ---------------------------------------------------
|
|
|
|
|
|
|
|
IMPLEMENT_STATELESS_ACTOR (AMapSpotGravity, Any, 9013, 0)
|
|
|
|
PROP_Flags (0)
|
2006-04-16 13:29:50 +00:00
|
|
|
PROP_Flags3(MF3_DONTSPLASH)
|
2006-02-24 04:48:15 +00:00
|
|
|
END_DEFAULTS
|
|
|
|
|
|
|
|
// Bloody gibs -------------------------------------------------------------
|
|
|
|
|
|
|
|
FState ARealGibs::States[] =
|
|
|
|
{
|
|
|
|
S_NORMAL (POL5, 'A', -1, NULL, NULL)
|
|
|
|
};
|
|
|
|
|
|
|
|
IMPLEMENT_ACTOR (ARealGibs, Any, -1, 0)
|
|
|
|
PROP_SpawnState (0)
|
|
|
|
PROP_Flags (MF_DROPOFF|MF_CORPSE)
|
|
|
|
PROP_Flags2 (MF2_NOTELEPORT)
|
|
|
|
PROP_Flags3 (MF3_DONTGIB)
|
|
|
|
END_DEFAULTS
|
|
|
|
|
|
|
|
// Gibs that can be placed on a map. ---------------------------------------
|
|
|
|
//
|
|
|
|
// These need to be a separate class from the above, in case someone uses
|
|
|
|
// a deh patch to change the gibs, since ZDoom actually creates a gib actor
|
|
|
|
// for actors that get crushed instead of changing their state as Doom did.
|
|
|
|
|
|
|
|
class AGibs : public ARealGibs
|
|
|
|
{
|
|
|
|
DECLARE_STATELESS_ACTOR (AGibs, ARealGibs)
|
|
|
|
};
|
|
|
|
|
|
|
|
IMPLEMENT_STATELESS_ACTOR (AGibs, Doom, 24, 146)
|
|
|
|
PROP_SpawnState (0)
|
|
|
|
END_DEFAULTS
|