From 34156fa132f80cfe30f5b12a4813bb2fc9d4297a Mon Sep 17 00:00:00 2001 From: Mitchell Richters Date: Fri, 7 Oct 2022 19:49:02 +1100 Subject: [PATCH] - Duke3D: Fix player Z interpolation on SE17. * In SE17's first loop, the player's position is unconditionally backed up. This means jumping in the elevator, even while its not in motion is uninterpolated for the player. * Removing these interpolation calls fixes that, however there is a hitch now when the elevator is going back down. * If the sign of `q` is positive, we back up the player's Z coordinate to fix the aforementioned hitch. * Also remove `actor[j].bpos.z = sprite[j].z;` call that's covered `G_RecordOldSpritePos()`. --- source/duke3d/src/actors.cpp | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/source/duke3d/src/actors.cpp b/source/duke3d/src/actors.cpp index d78702fc7..6b6e83e66 100644 --- a/source/duke3d/src/actors.cpp +++ b/source/duke3d/src/actors.cpp @@ -7651,20 +7651,13 @@ ACTOR_STATIC void G_MoveEffectors(void) //STATNUM 3 int const warpPlayer = P_Get(j); auto const pPlayer = g_player[warpPlayer].ps; - if (numplayers < 2 && !g_netServer) - pPlayer->opos.z = pPlayer->pos.z; - pPlayer->pos.z += q; pPlayer->truefz += q; pPlayer->truecz += q; - - if (g_netServer || numplayers > 1) - pPlayer->opos.z = pPlayer->pos.z; } if (sprite[j].statnum != STAT_EFFECTOR) { - actor[j].bpos.z = sprite[j].z; sprite[j].z += q; } @@ -7716,6 +7709,8 @@ ACTOR_STATIC void G_MoveEffectors(void) //STATNUM 3 pPlayer->pos.z = sector[sprite[j].sectnum].floorz - (pSector->floorz - pPlayer->pos.z); pPlayer->opos.z += pPlayer->pos.z; + if (q > 0) pPlayer->opos.z = pPlayer->pos.z; + actor[k].floorz = sector[sprite[j].sectnum].floorz; actor[k].ceilingz = sector[sprite[j].sectnum].ceilingz; pPlayer->opos.xy = pPlayer->pos.xy; @@ -7736,6 +7731,8 @@ ACTOR_STATIC void G_MoveEffectors(void) //STATNUM 3 sprite[k].z = sector[sprite[j].sectnum].floorz - (pSector->floorz - sprite[k].z); actor[k].bpos.z += sprite[k].z; + if (q > 0) actor[k].bpos.z = sprite[k].z; + changespritesect(k,sprite[j].sectnum); setsprite(k,&sprite[k].xyz); -- GitLab