fixed some issues with reviving monsters
- fixed: Thing_Raise didn't properly set the spawn health. - fixed: Thing_Raise did not the CanRaise state flag. - fixed: Reviving a monster must also reset the damage type. - fixed: Thing_Raise reset the actor after calling the raise state, but it should be before, just as the Archvile code is doing. - consolidated some common code of Thing_Raise and Archvile resurrection into AActor methods.
This commit is contained in:
parent
a9f1b54d2d
commit
93aa1ea2c4
4 changed files with 150 additions and 149 deletions
|
|
@ -6074,6 +6074,49 @@ int AActor::SpawnHealth()
|
|||
}
|
||||
}
|
||||
|
||||
FState *AActor::GetRaiseState()
|
||||
{
|
||||
if (!(flags & MF_CORPSE))
|
||||
{
|
||||
return NULL; // not a monster
|
||||
}
|
||||
|
||||
if (tics != -1 && // not lying still yet
|
||||
state->GetCanRaise()) // or not ready to be raised yet
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (IsKindOf(RUNTIME_CLASS(APlayerPawn)))
|
||||
{
|
||||
return NULL; // do not resurrect players
|
||||
}
|
||||
|
||||
return FindState(NAME_Raise);
|
||||
}
|
||||
|
||||
void AActor::Revive()
|
||||
{
|
||||
AActor *info = GetDefault();
|
||||
flags = info->flags;
|
||||
flags2 = info->flags2;
|
||||
flags3 = info->flags3;
|
||||
flags4 = info->flags4;
|
||||
flags5 = info->flags5;
|
||||
flags6 = info->flags6;
|
||||
flags7 = info->flags7;
|
||||
DamageType = info->DamageType;
|
||||
health = SpawnHealth();
|
||||
target = NULL;
|
||||
lastenemy = NULL;
|
||||
|
||||
// [RH] If it's a monster, it gets to count as another kill
|
||||
if (CountsAsKill())
|
||||
{
|
||||
level.total_monsters++;
|
||||
}
|
||||
}
|
||||
|
||||
FDropItem *AActor::GetDropItems()
|
||||
{
|
||||
unsigned int index = GetClass()->Meta.GetMetaInt (ACMETA_DropItems) - 1;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue