- Fixed: When P_SpawnPlayer() calls DObject::PointerSubstitution() to

redirect player pointers, it affects the bodyque too. That meant that in
  multiplayer games, once the bodyque filled up, anybody was in danger of
  being rudely destroyed the next time somebody respawned.


SVN r386 (trunk)
This commit is contained in:
Randy Heit 2006-11-25 04:26:04 +00:00
commit 4b7b95663e
2 changed files with 11 additions and 0 deletions

View file

@ -53,6 +53,7 @@
#include "a_keys.h"
#include "p_conversation.h"
#include "thingdef.h"
#include "g_game.h"
// MACROS ------------------------------------------------------------------
@ -3556,6 +3557,10 @@ void P_SpawnPlayer (mapthing2_t *mthing, bool tempplayer)
{
assert (oldactor != NULL);
DObject::PointerSubstitution (oldactor, p->mo);
// PointerSubstitution() will also affect the bodyque, so undo that now.
for (int ii=0; ii < BODYQUESIZE; ++ii)
if (bodyque[ii] == p->mo)
bodyque[ii] = oldactor;
FBehavior::StaticStartTypedScripts (SCRIPT_Respawn, p->mo, true);
}
}