- Changed P_XYMovement() to not call P_SlideMove() if the act of being

blocked changed the actor's velocity. I'm not entirely happy with this,
  but it gets push-activated force fields to work.


SVN r1875 (trunk)
This commit is contained in:
Randy Heit 2009-09-25 02:54:13 +00:00
parent 6a5ab0edc0
commit 2ad438d696
3 changed files with 40 additions and 24 deletions

View file

@ -1,4 +1,7 @@
September 24, 2009
- Changed P_XYMovement() to not call P_SlideMove() if the act of being
blocked changed the actor's velocity. I'm not entirely happy with this,
but it gets push-activated force fields to work.
- Fixed: FMultiPatchTexture::CopyTrueColorPixels() should clear the buffer
first before drawing into it if the copy op passed to it is OP_OVERWRITE.
FTexture::FillBuffer() sets this to erase whatever texture might have been

View file

@ -2796,7 +2796,9 @@ FUNC(LS_ForceField)
if (it != NULL)
{
P_DamageMobj (it, NULL, NULL, 16, NAME_None);
P_ThrustMobj (it, it->angle + ANGLE_180, 0x7D000);
angle_t an = (it->angle + ANGLE_180) >> ANGLETOFINESHIFT;
it->velx = FixedMul(0x7D000, finecosine[an]);
it->vely = FixedMul(0x7D000, finesine[an]);
}
return true;
}

View file

@ -1736,6 +1736,8 @@ fixed_t P_XYMovement (AActor *mo, fixed_t scrollx, fixed_t scrolly)
*/
// [RH] If walking on a slope, stay on the slope
// killough 3/15/98: Allow objects to drop off
fixed_t startvelx = mo->velx, startvely = mo->vely;
if (!P_TryMove (mo, ptryx, ptryy, true, walkplane, tm))
{
// blocked move
@ -1759,6 +1761,10 @@ fixed_t P_XYMovement (AActor *mo, fixed_t scrollx, fixed_t scrolly)
{
mo->velz = WATER_JUMP_SPEED;
}
// If the blocked move executed any push specials that changed the
// actor's velocity, do not attempt to slide.
if (mo->velx == startvelx && mo->vely == startvely)
{
if (player && (i_compatflags & COMPATF_WALLRUN))
{
// [RH] Here is the key to wall running: The move is clipped using its full speed.
@ -1790,6 +1796,11 @@ fixed_t P_XYMovement (AActor *mo, fixed_t scrollx, fixed_t scrolly)
}
}
else
{
steps = 0;
}
}
else
{ // slide against another actor
fixed_t tx, ty;
tx = 0, ty = onestepy;