Fixed CheckBossDeath not checking for actor replacements.

- A_BossDeath relies upon this function in particular.
- This completes CheckReplacee's purpose, allowing for varied actors to count as one particular actor, such as a Fatso for map07 and avoid lowering the walls until they are all dead.
This commit is contained in:
Major Cooke 2019-10-01 13:17:49 -05:00 committed by Christoph Oelckers
parent e166563ac9
commit d0a256b51c

View file

@ -3050,15 +3050,24 @@ int CheckBossDeath (AActor *actor)
auto iterator = actor->Level->GetThinkerIterator<AActor>(); auto iterator = actor->Level->GetThinkerIterator<AActor>();
AActor *other; AActor *other;
PClassActor *cls = actor->GetClass();
FName type = cls->GetReplacee(actor->Level)->TypeName;
while ( (other = iterator.Next ()) ) while ( (other = iterator.Next ()) )
{ {
if (other != actor && if (other == actor)
(other->health > 0 || (other->flags & MF_ICECORPSE)) continue;
&& other->GetClass() == actor->GetClass())
PClassActor *ocls = other->GetClass();
FName otype = ocls->GetReplacee(other->Level)->TypeName;
if ((other->health > 0 || (other->flags & MF_ICECORPSE))
&& (ocls == cls || otype == type))
{ // Found a living boss { // Found a living boss
// [RH] Frozen bosses don't count as dead until they shatter // [RH] Frozen bosses don't count as dead until they shatter
return false; return false;
} }
} }
// The boss death is good // The boss death is good
return true; return true;