From 7f409f08bb35423e9962213c6e640b467f3ba4f9 Mon Sep 17 00:00:00 2001 From: helixhorned Date: Tue, 26 Jun 2012 19:49:56 +0000 Subject: [PATCH] When teleporting silently, also set g_player[].ps->bobposx/y to the new position This fixes an integer overflow when a distance is calculated later. git-svn-id: https://svn.eduke32.com/eduke32@2785 1a8010ca-5511-0410-912e-c29ae57300e0 --- polymer/eduke32/source/actors.c | 4 ++-- polymer/eduke32/source/player.c | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/polymer/eduke32/source/actors.c b/polymer/eduke32/source/actors.c index 4c7309590..1d2976f0a 100644 --- a/polymer/eduke32/source/actors.c +++ b/polymer/eduke32/source/actors.c @@ -3247,8 +3247,8 @@ ACTOR_STATIC void G_MoveTransports(void) if ((g_player[p].ps->jetpack_on == 0) || (g_player[p].ps->jetpack_on && TEST_SYNC_KEY(g_player[p].sync->bits, SK_JUMP)) || (g_player[p].ps->jetpack_on && TEST_SYNC_KEY(g_player[p].sync->bits, SK_CROUCH))) { - g_player[p].ps->opos.x = g_player[p].ps->pos.x += sprite[OW].x-SX; - g_player[p].ps->opos.y = g_player[p].ps->pos.y += sprite[OW].y-SY; + g_player[p].ps->bobposx = g_player[p].ps->opos.x = g_player[p].ps->pos.x += sprite[OW].x-SX; + g_player[p].ps->bobposy = g_player[p].ps->opos.y = g_player[p].ps->pos.y += sprite[OW].y-SY; if (g_player[p].ps->jetpack_on && (TEST_SYNC_KEY(g_player[p].sync->bits, SK_JUMP) || g_player[p].ps->jetpack_on < 11)) g_player[p].ps->pos.z = sprite[OW].z-6144; diff --git a/polymer/eduke32/source/player.c b/polymer/eduke32/source/player.c index 251716d4a..d9bdf89af 100644 --- a/polymer/eduke32/source/player.c +++ b/polymer/eduke32/source/player.c @@ -4686,6 +4686,8 @@ void P_ProcessInput(int32_t snum) } else p->weapon_sway = p->bobcounter; + // NOTE: This overflows if the difference is too great, e.g. used to do + // that when teleported by silent SE7s. s->xvel = ksqrt((p->pos.x-p->bobposx)*(p->pos.x-p->bobposx)+(p->pos.y-p->bobposy)*(p->pos.y-p->bobposy)); if (p->on_ground)