diff --git a/source/duke3d/src/actors.cpp b/source/duke3d/src/actors.cpp index d78702fc76a7ec1ddbcdddcf1e7ec1c9a6850f96..f74b5e0636e5a6288d22ea1f2687f33ab575efc8 100644 --- a/source/duke3d/src/actors.cpp +++ b/source/duke3d/src/actors.cpp @@ -3974,6 +3974,8 @@ ACTOR_STATIC void G_MoveTransports(void) if (!pPlayer->jetpack_on || TEST_SYNC_KEY(thisPlayer.input.bits, SK_JUMP) || TEST_SYNC_KEY(thisPlayer.input.bits, SK_CROUCH)) { + auto posdiff = pPlayer->opos - pPlayer->pos; + pPlayer->pos.x += sprite[OW(spriteNum)].x - SX(spriteNum); pPlayer->pos.y += sprite[OW(spriteNum)].y - SY(spriteNum); pPlayer->pos.z = (pPlayer->jetpack_on && (TEST_SYNC_KEY(thisPlayer.input.bits, SK_JUMP) @@ -3982,7 +3984,7 @@ ACTOR_STATIC void G_MoveTransports(void) : sprite[OW(spriteNum)].z + 6144; actor[pPlayer->i].bpos = pPlayer->pos; - pPlayer->opos = pPlayer->pos; + pPlayer->opos = pPlayer->pos + posdiff; pPlayer->bobpos = pPlayer->pos.xy; changespritesect(sectSprite, sprite[OW(spriteNum)].sectnum);