Load the attached file and start on MAP07 (hard skill to ensure the fatsos are randomized). Kill all of one color, and the walls will lower, which is not supposed to happen.
CheckReplacee was developed with the idea of not needing to to use RandomSpawners or any custom spawners. In particular, RandomSpawners rely upon the BOSS flag, which makes sense for cyberdemon and spider mastermind classes, but not barons, fatsos and arachnotrons.
The problematic code lies in CheckBossDeath function in p_enemy.cpp:
Code: Select all
while ( (other = iterator.Next ()) )
{
if (other != actor &&
(other->health > 0 || (other->flags & MF_ICECORPSE))
&& other->GetClass() == actor->GetClass())
{ // Found a living boss
// [RH] Frozen bosses don't count as dead until they shatter
return false;
}
}
In particular this only compares direct classes instead of checking the replacees. As seen in my example package, I have an event handler set up to indicate the replacee of Fatsos 1 & 2 to be Fatso itself.
Load the attached file and start on MAP07 (hard skill to ensure the fatsos are randomized). Kill all of one color, and the walls will lower, which is not supposed to happen.
CheckReplacee was developed with the idea of not needing to to use RandomSpawners or any custom spawners. In particular, RandomSpawners rely upon the BOSS flag, which makes sense for cyberdemon and spider mastermind classes, but not barons, fatsos and arachnotrons.
The problematic code lies in CheckBossDeath function in p_enemy.cpp:
[code]while ( (other = iterator.Next ()) )
{
if (other != actor &&
(other->health > 0 || (other->flags & MF_ICECORPSE))
&& other->GetClass() == actor->GetClass())
{ // Found a living boss
// [RH] Frozen bosses don't count as dead until they shatter
return false;
}
}[/code]
In particular this only compares direct classes instead of checking the replacees. As seen in my example package, I have an event handler set up to indicate the replacee of Fatsos 1 & 2 to be Fatso itself.