From 8012cb56ca562fa7c3001fb6acc7b1c7db3f580e Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Wed, 30 Dec 2020 21:57:47 +0100 Subject: [PATCH] fixed bug with playing team mode tapes with changed visible playfield size --- src/engines.h | 3 +++ src/game.c | 4 +++- src/game_em/graphics.c | 6 ++++-- src/tools.c | 10 ++++++++++ src/tools.h | 3 +++ 5 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/engines.h b/src/engines.h index 34838d5a..4e09b72a 100644 --- a/src/engines.h +++ b/src/engines.h @@ -31,6 +31,9 @@ boolean swapTiles_EM(boolean); boolean getTeamMode_EM(void); boolean isActivePlayer_EM(int); +int getScreenFieldSizeX(void); +int getScreenFieldSizeY(void); + void PlayLevelSound_EM(int, int, int, int); void InitGraphicInfo_EM(void); boolean CheckSingleStepMode_EM(byte action[], int, boolean, boolean, boolean); diff --git a/src/game.c b/src/game.c index 768ba2e1..d80e8288 100644 --- a/src/game.c +++ b/src/game.c @@ -12452,6 +12452,8 @@ void GameActions_RND(void) static boolean AllPlayersInSight(struct PlayerInfo *player, int x, int y) { int min_x = x, min_y = y, max_x = x, max_y = y; + int scr_fieldx = getScreenFieldSizeX(); + int scr_fieldy = getScreenFieldSizeY(); int i; for (i = 0; i < MAX_PLAYERS; i++) @@ -12467,7 +12469,7 @@ static boolean AllPlayersInSight(struct PlayerInfo *player, int x, int y) max_y = MAX(max_y, jy); } - return (max_x - min_x < SCR_FIELDX && max_y - min_y < SCR_FIELDY); + return (max_x - min_x < scr_fieldx && max_y - min_y < scr_fieldy); } static boolean AllPlayersInVisibleScreen(void) diff --git a/src/game_em/graphics.c b/src/game_em/graphics.c index a29d2e0e..398ae6e0 100644 --- a/src/game_em/graphics.c +++ b/src/game_em/graphics.c @@ -553,11 +553,13 @@ static void setMinimalPlayerBoundaries(int *sx1, int *sy1, int *sx2, int *sy2) boolean checkIfAllPlayersFitToScreen(void) { int sx1 = 0, sy1 = 0, sx2 = 0, sy2 = 0; + int scr_fieldx = getScreenFieldSizeX(); + int scr_fieldy = getScreenFieldSizeY(); setMinimalPlayerBoundaries(&sx1, &sy1, &sx2, &sy2); - return (sx2 - sx1 <= SCR_FIELDX * TILEX && - sy2 - sy1 <= SCR_FIELDY * TILEY); + return (sx2 - sx1 <= scr_fieldx * TILEX && + sy2 - sy1 <= scr_fieldy * TILEY); } static void setScreenCenteredToAllPlayers(int *sx, int *sy) diff --git a/src/tools.c b/src/tools.c index f0fcae29..21232c2d 100644 --- a/src/tools.c +++ b/src/tools.c @@ -391,6 +391,16 @@ int getLevelFromScreenY(int y) return getLevelFromScreenY_RND(y); } +int getScreenFieldSizeX(void) +{ + return (tape.playing ? tape.scr_fieldx : SCR_FIELDX); +} + +int getScreenFieldSizeY(void) +{ + return (tape.playing ? tape.scr_fieldy : SCR_FIELDY); +} + void DumpTile(int x, int y) { int sx = SCREENX(x); diff --git a/src/tools.h b/src/tools.h index 6d012667..4dffbbd1 100644 --- a/src/tools.h +++ b/src/tools.h @@ -72,6 +72,9 @@ int getFieldbufferOffsetY_RND(int, int); int getLevelFromScreenX(int); int getLevelFromScreenY(int); +int getScreenFieldSizeX(void); +int getScreenFieldSizeY(void); + void DumpTile(int, int); void DumpTileFromScreen(int, int); -- 2.34.1