From 88e9ec033d5e0e80e8818924663523af26a54146 Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Wed, 1 Jan 2025 14:32:30 +0100 Subject: [PATCH] fixed bug with scrolling screen towards initially created player --- src/game.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/game.c b/src/game.c index e4caad4c..d0ba9492 100644 --- a/src/game.c +++ b/src/game.c @@ -5857,13 +5857,22 @@ static void DrawRelocateScreen(int old_x, int old_y, int x, int y, { // relocation _without_ centering of screen - // apply distance between old and new player position to scroll position - int shifted_scroll_x = scroll_x + (x - old_x); - int shifted_scroll_y = scroll_y + (y - old_y); + if (IN_LEV_FIELD(old_x, old_y)) + { + // apply distance between old and new player position to scroll position + int shifted_scroll_x = scroll_x + (x - old_x); + int shifted_scroll_y = scroll_y + (y - old_y); - // make sure that shifted scroll position does not scroll beyond screen - new_scroll_x = SCROLL_POSITION_X(shifted_scroll_x + MIDPOSX); - new_scroll_y = SCROLL_POSITION_Y(shifted_scroll_y + MIDPOSY); + // make sure that shifted scroll position does not scroll beyond screen + new_scroll_x = SCROLL_POSITION_X(shifted_scroll_x + MIDPOSX); + new_scroll_y = SCROLL_POSITION_Y(shifted_scroll_y + MIDPOSY); + } + else + { + // player not on playfield before -- scroll to initial player position + new_scroll_x = SCROLL_POSITION_X(x); + new_scroll_y = SCROLL_POSITION_Y(y); + } // special case for teleporting from one end of the playfield to the other // (this kludge prevents the destination area to be shifted by half a tile -- 2.34.1