Interpolation fixes for SW:

draw.cpp: Fix the lack of interpolation while walking on a sector
object, like the bus roof or the floor of the train in Seppuku Station.
track.cpp: Make sure the player's location and angle aren't mistakenly
interpolated while standing on a moving sector object as a consequence.
This commit is contained in:
NY00123 2020-04-13 22:47:19 +03:00 committed by Christoph Oelckers
parent eaefc2576c
commit cc4f1f21f9
2 changed files with 11 additions and 5 deletions

View file

@ -2056,10 +2056,13 @@ drawscreen(PLAYERp pp)
if (pp->sop_riding || pp->sop_control) if (pp->sop_riding || pp->sop_control)
{ {
tx = pp->posx; if (pp->sop_control)
ty = pp->posy; {
tz = pp->posz; tx = pp->posx;
tq16ang = pp->q16ang; ty = pp->posy;
tz = pp->posz;
tq16ang = pp->q16ang;
}
tsectnum = pp->cursectnum; tsectnum = pp->cursectnum;
updatesectorz(tx, ty, tz, &tsectnum); updatesectorz(tx, ty, tz, &tsectnum);
} }

View file

@ -1630,6 +1630,8 @@ MovePlayer(PLAYERp pp, SECTOR_OBJECTp sop, int nx, int ny)
pp->posx += BOUND_4PIX(nx); pp->posx += BOUND_4PIX(nx);
pp->posy += BOUND_4PIX(ny); pp->posy += BOUND_4PIX(ny);
pp->oposx = pp->posx;
pp->oposy = pp->posy;
if (TEST(sop->flags, SOBJ_DONT_ROTATE)) if (TEST(sop->flags, SOBJ_DONT_ROTATE))
{ {
@ -1674,7 +1676,7 @@ MovePlayer(PLAYERp pp, SECTOR_OBJECTp sop, int nx, int ny)
// New angle is formed by taking last known angle and // New angle is formed by taking last known angle and
// adjusting by the delta angle // adjusting by the delta angle
pp->q16ang = fix16_from_int(NORM_ANGLE(pp->RevolveAng + pp->RevolveDeltaAng)); pp->oq16ang = pp->q16ang = fix16_from_int(NORM_ANGLE(pp->RevolveAng + pp->RevolveDeltaAng));
UpdatePlayerSprite(pp); UpdatePlayerSprite(pp);
} }
@ -1927,6 +1929,7 @@ PlayerPart:
pp->SpriteP->z = pp->loz; pp->SpriteP->z = pp->loz;
} }
} }
pp->oposz = pp->posz;
} }
else else
{ {