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.

# Conflicts:
#	source/sw/src/track.cpp
This commit is contained in:
NY00123 2020-04-13 22:47:19 +03:00 committed by Christoph Oelckers
parent 43ec16eb55
commit ac8a7ecfbd
2 changed files with 11 additions and 5 deletions

View file

@ -2052,11 +2052,14 @@ drawscreen(PLAYERp pp)
// ASSERT(tsectnum >= 0 && tsectnum <= MAXSECTORS); // ASSERT(tsectnum >= 0 && tsectnum <= MAXSECTORS);
if (pp->sop_riding || pp->sop_control) if (pp->sop_riding || pp->sop_control)
{
if (pp->sop_control)
{ {
tx = pp->posx; tx = pp->posx;
ty = pp->posy; ty = pp->posy;
tz = pp->posz; tz = pp->posz;
tq16ang = pp->q16ang; 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_sadd(pp->RevolveAng, pp->RevolveDeltaAng) & 0x7FFFFFF; pp->oq16ang = pp->q16ang = fix16_sadd(pp->RevolveAng, pp->RevolveDeltaAng) & 0x7FFFFFF;
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
{ {