- Fixed: A_Respawn and P_NightmareRespawn() should not check for collision with world geometry.

The initial spawn did not, so this can prevent respawns of things that were initially
  spawned if they happen to intersect a wall.
- Fixed: Don't respawn actors inside the floor.
- Fixed: The final calls to P_FindFloorCeiling() in P_NightmareRespawn() and A_RestoreSpecialPosition
  also need to pass true as the second parameter. (Because this parameter is onlyspawnpos, not
  onlymidtex.)

SVN r3518 (trunk)
This commit is contained in:
Randy Heit 2012-04-06 04:46:45 +00:00
commit 5358fd594b
5 changed files with 39 additions and 12 deletions

View file

@ -2649,10 +2649,21 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_Respawn)
{
// [KS] DIE DIE DIE DIE erm *ahem* =)
oktorespawn = P_TeleportMove(self, self->x, self->y, self->z, true);
if (oktorespawn)
{ // Need to do this over again, since P_TeleportMove() will redo
// it with the proper point-on-side calculation.
self->UnlinkFromWorld();
self->LinkToWorld(true);
sector_t *sec = self->Sector;
self->dropoffz =
self->floorz = sec->floorplane.ZatPoint(self->x, self->y);
self->ceilingz = sec->ceilingplane.ZatPoint(self->x, self->y);
P_FindFloorCeiling(self, true);
}
}
else
{
oktorespawn = P_TestMobjLocation(self);
oktorespawn = P_CheckPosition(self, self->x, self->z, true);
}
if (oktorespawn)