- 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
parent 86ed101522
commit 4b7b95663e
2 changed files with 11 additions and 0 deletions

View File

@ -1,3 +1,9 @@
November 24, 2006
- 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.
November 22, 2006
- Added a manifest with a trustinfo section to updaterevision.exe so that
the build process can run uninterrupted under Vista.

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);
}
}