gzdoom/src/g_shared/a_sharedmisc.cpp

152 lines
3.9 KiB
C++
Raw Normal View History

#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)
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)
PROP_Flags (MF_NOBLOCKMAP)
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)
PROP_Flags (MF_NOBLOCKMAP)
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),
#define S_HBLOOD (S_DBLOOD+3)
S_NORMAL (BLOD, 'C', 8, NULL , &States[S_HBLOOD+1]),
S_NORMAL (BLOD, 'B', 8, NULL , &States[S_HBLOOD+2]),
S_NORMAL (BLOD, 'A', 8, NULL , NULL),
#define S_SBLOOD (S_HBLOOD+3)
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)
PROP_Mass (5)
END_DEFAULTS
AT_GAME_SET (Blood)
{
ABlood *def = GetDefault<ABlood>();
def->SpawnState = &ABlood::States[gameinfo.gametype == GAME_Doom ? S_DBLOOD : S_HBLOOD];
}
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)
{
SetState (&States[S_HBLOOD]);
}
else if (damage >= 7)
{
SetState (&States[S_HBLOOD+1]);
}
else
{
SetState (&States[S_HBLOOD+2]);
}
}
}
// Map spot ----------------------------------------------------------------
IMPLEMENT_STATELESS_ACTOR (AMapSpot, Any, 9001, 0)
PROP_Flags (MF_NOBLOCKMAP|MF_NOSECTOR|MF_NOGRAVITY)
PROP_RenderStyle (STYLE_None)
END_DEFAULTS
// Map spot with gravity ---------------------------------------------------
IMPLEMENT_STATELESS_ACTOR (AMapSpotGravity, Any, 9013, 0)
PROP_Flags (0)
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