fixed bug with playing team mode tapes with changed visible playfield size
authorHolger Schemel <info@artsoft.org>
Wed, 30 Dec 2020 20:57:47 +0000 (21:57 +0100)
committerHolger Schemel <info@artsoft.org>
Wed, 30 Dec 2020 20:57:47 +0000 (21:57 +0100)
src/engines.h
src/game.c
src/game_em/graphics.c
src/tools.c
src/tools.h

index 34838d5a215b00dcd83fdb8c2a1b40c16bfa31f6..4e09b72a2d5fe4e8c891881c92a44b32a5e43dd9 100644 (file)
@@ -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);
index 768ba2e181da6890c0e58287750b3ae09dbcbca7..d80e828866d1663e06156d936777d15ae9f83213 100644 (file)
@@ -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)
index a29d2e0e7208ab4d45cf1e7cad2a4bb1bd1311a0..398ae6e0e303254f319e69931debc5d4b8b0b291 100644 (file)
@@ -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)
index f0fcae2929884c3eb2fc751a08b6a82313584c3d..21232c2d335fd51bb1eaf956cc79bccabe9eb92f 100644 (file)
@@ -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);
index 6d0126672f615fef4560b09c90f4dd344845adaa..4dffbbd1ba1902a293345fc89c419bdcbdcaeb9e 100644 (file)
@@ -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);