From fdb01adc6805cdc14462a6979dc64d481f29a173 Mon Sep 17 00:00:00 2001 From: Misa Date: Tue, 21 Jul 2020 15:01:08 -0700 Subject: [PATCH] Set oldxp/oldyp when being teleported around during teleport This fixes the bug where Viridian would appear to "zip" when they would be teleported to the position of the teleporter before being flung out of it. As discussed in #393, I've also set the oldxp/oldyp when Viridian is temporarily positioned in the center of the room, even though at this point they should already be invisible. This is just to be safe. Fixes #393. --- desktop_version/src/Game.cpp | 20 ++++++++++++++++++++ desktop_version/src/Script.cpp | 2 ++ 2 files changed, 22 insertions(+) diff --git a/desktop_version/src/Game.cpp b/desktop_version/src/Game.cpp index 20aaaeb3..30339ba2 100644 --- a/desktop_version/src/Game.cpp +++ b/desktop_version/src/Game.cpp @@ -1979,6 +1979,8 @@ void Game::updatestate() { obj.entities[i].xp = obj.entities[j].xp+44; obj.entities[i].yp = obj.entities[j].yp+44; + obj.entities[i].oldxp = obj.entities[i].xp; + obj.entities[i].oldyp = obj.entities[i].yp; } obj.entities[i].ay = -6; obj.entities[i].ax = 6; @@ -3322,6 +3324,8 @@ void Game::updatestate() { obj.entities[i].xp = obj.entities[j].xp+44; obj.entities[i].yp = obj.entities[j].yp+44; + obj.entities[i].oldxp = obj.entities[i].xp; + obj.entities[i].oldyp = obj.entities[i].yp; obj.entities[j].tile = 2; obj.entities[j].colour = 101; } @@ -3435,6 +3439,8 @@ void Game::updatestate() { obj.entities[i].xp = obj.entities[j].xp+44; obj.entities[i].yp = obj.entities[j].yp+44; + obj.entities[i].oldxp = obj.entities[i].xp; + obj.entities[i].oldyp = obj.entities[i].yp; obj.entities[j].tile = 2; obj.entities[j].colour = 101; } @@ -3532,6 +3538,8 @@ void Game::updatestate() { obj.entities[i].xp = obj.entities[j].xp+44; obj.entities[i].yp = obj.entities[j].yp+44; + obj.entities[i].oldxp = obj.entities[i].xp; + obj.entities[i].oldyp = obj.entities[i].yp; obj.entities[j].tile = 2; obj.entities[j].colour = 101; } @@ -3629,6 +3637,8 @@ void Game::updatestate() { obj.entities[i].xp = obj.entities[j].xp+44; obj.entities[i].yp = obj.entities[j].yp+44; + obj.entities[i].oldxp = obj.entities[i].xp; + obj.entities[i].oldyp = obj.entities[i].yp; obj.entities[j].tile = 2; obj.entities[j].colour = 101; } @@ -3731,6 +3741,8 @@ void Game::updatestate() { obj.entities[i].xp = obj.entities[j].xp+44; obj.entities[i].yp = obj.entities[j].yp+44; + obj.entities[i].oldxp = obj.entities[i].xp; + obj.entities[i].oldyp = obj.entities[i].yp; obj.entities[j].tile = 2; obj.entities[j].colour = 101; } @@ -3833,6 +3845,8 @@ void Game::updatestate() { obj.entities[i].xp = obj.entities[j].xp+44; obj.entities[i].yp = obj.entities[j].yp+44; + obj.entities[i].oldxp = obj.entities[i].xp; + obj.entities[i].oldyp = obj.entities[i].yp; obj.entities[j].tile = 2; obj.entities[j].colour = 101; } @@ -3933,6 +3947,8 @@ void Game::updatestate() { obj.entities[i].xp = obj.entities[j].xp+44; obj.entities[i].yp = obj.entities[j].yp+44; + obj.entities[i].oldxp = obj.entities[i].xp; + obj.entities[i].oldyp = obj.entities[i].yp; obj.entities[j].tile = 2; obj.entities[j].colour = 101; } @@ -4030,6 +4046,8 @@ void Game::updatestate() { obj.entities[i].xp = obj.entities[j].xp+44; obj.entities[i].yp = obj.entities[j].yp+44; + obj.entities[i].oldxp = obj.entities[i].xp; + obj.entities[i].oldyp = obj.entities[i].yp; obj.entities[j].tile = 2; obj.entities[j].colour = 101; } @@ -4127,6 +4145,8 @@ void Game::updatestate() { obj.entities[i].xp = obj.entities[j].xp+44; obj.entities[i].yp = obj.entities[j].yp+44; + obj.entities[i].oldxp = obj.entities[i].xp; + obj.entities[i].oldyp = obj.entities[i].yp; obj.entities[j].tile = 2; obj.entities[j].colour = 101; } diff --git a/desktop_version/src/Script.cpp b/desktop_version/src/Script.cpp index f02e5813..cc5a1bfd 100644 --- a/desktop_version/src/Script.cpp +++ b/desktop_version/src/Script.cpp @@ -3427,6 +3427,8 @@ void scriptclass::teleport() obj.entities[i].xp = 150; obj.entities[i].yp = 110; if(game.teleport_to_x==17 && game.teleport_to_y==17) obj.entities[i].xp = 88; //prevent falling! + obj.entities[i].oldxp = obj.entities[i].xp; + obj.entities[i].oldyp = obj.entities[i].yp; } if (game.teleportscript == "levelonecomplete")