moved (and renamed) global variables to game structure (ExitX/ExitY)
[rocksndiamonds.git] / src / game.c
index 45ad3136b159c200a2a5b46ab8c2617f47ef12eb..c1846d6a147ff6abd76ec6caefe8f0e88b7f0d06 100644 (file)
@@ -3544,7 +3544,6 @@ void InitGame(void)
     SendToServer_MovePlayer(MV_NONE);
 
   ZX = ZY = -1;
-  ExitX = ExitY = -1;
 
   FrameCounter = 0;
   TimeFrames = 0;
@@ -3558,7 +3557,10 @@ void InitGame(void)
 
   ScrollStepSize = 0;  // will be correctly initialized by ScrollScreen()
 
-  AllPlayersGone = FALSE;
+  game.exit_x = -1;
+  game.exit_y = -1;
+
+  game.all_players_gone = FALSE;
 
   game.LevelSolved = FALSE;
   game.GameOver = FALSE;
@@ -4570,30 +4572,35 @@ void GameWon(void)
 
     if (level.game_engine_type == GAME_ENGINE_TYPE_RND)
     {
-      if (ExitX >= 0 && ExitY >= 0)    // local player has left the level
+      // check if last player has left the level
+      if (game.exit_x >= 0 &&
+         game.exit_y >= 0)
       {
+       int x = game.exit_x;
+       int y = game.exit_y;
+       int element = Feld[x][y];
+
        // close exit door after last player
-       if ((AllPlayersGone &&
-            (Feld[ExitX][ExitY] == EL_EXIT_OPEN ||
-             Feld[ExitX][ExitY] == EL_SP_EXIT_OPEN ||
-             Feld[ExitX][ExitY] == EL_STEEL_EXIT_OPEN)) ||
-           Feld[ExitX][ExitY] == EL_EM_EXIT_OPEN ||
-           Feld[ExitX][ExitY] == EL_EM_STEEL_EXIT_OPEN)
+       if ((game.all_players_gone &&
+            (element == EL_EXIT_OPEN ||
+             element == EL_SP_EXIT_OPEN ||
+             element == EL_STEEL_EXIT_OPEN)) ||
+           element == EL_EM_EXIT_OPEN ||
+           element == EL_EM_STEEL_EXIT_OPEN)
        {
-         int element = Feld[ExitX][ExitY];
 
-         Feld[ExitX][ExitY] =
+         Feld[x][y] =
            (element == EL_EXIT_OPEN            ? EL_EXIT_CLOSING :
             element == EL_EM_EXIT_OPEN         ? EL_EM_EXIT_CLOSING :
             element == EL_SP_EXIT_OPEN         ? EL_SP_EXIT_CLOSING:
             element == EL_STEEL_EXIT_OPEN      ? EL_STEEL_EXIT_CLOSING:
             EL_EM_STEEL_EXIT_CLOSING);
 
-         PlayLevelSoundElementAction(ExitX, ExitY, element, ACTION_CLOSING);
+         PlayLevelSoundElementAction(x, y, element, ACTION_CLOSING);
        }
 
        // player disappears
-       DrawLevelField(ExitX, ExitY);
+       DrawLevelField(x, y);
       }
 
       for (i = 0; i < MAX_PLAYERS; i++)
@@ -6813,10 +6820,10 @@ static void TurnRoundExt(int x, int y)
   {
     int attr_x = -1, attr_y = -1;
 
-    if (AllPlayersGone)
+    if (game.all_players_gone)
     {
-      attr_x = ExitX;
-      attr_y = ExitY;
+      attr_x = game.exit_x;
+      attr_y = game.exit_y;
     }
     else
     {
@@ -6877,13 +6884,13 @@ static void TurnRoundExt(int x, int y)
 
     MovDir[x][y] = MV_NONE;
     if (attr_x < x)
-      MovDir[x][y] |= (AllPlayersGone ? MV_RIGHT : MV_LEFT);
+      MovDir[x][y] |= (game.all_players_gone ? MV_RIGHT : MV_LEFT);
     else if (attr_x > x)
-      MovDir[x][y] |= (AllPlayersGone ? MV_LEFT : MV_RIGHT);
+      MovDir[x][y] |= (game.all_players_gone ? MV_LEFT : MV_RIGHT);
     if (attr_y < y)
-      MovDir[x][y] |= (AllPlayersGone ? MV_DOWN : MV_UP);
+      MovDir[x][y] |= (game.all_players_gone ? MV_DOWN : MV_UP);
     else if (attr_y > y)
-      MovDir[x][y] |= (AllPlayersGone ? MV_UP : MV_DOWN);
+      MovDir[x][y] |= (game.all_players_gone ? MV_UP : MV_DOWN);
 
     if (element == EL_ROBOT)
     {
@@ -7182,10 +7189,10 @@ static void TurnRoundExt(int x, int y)
     int newx, newy;
     boolean move_away = (move_pattern == MV_AWAY_FROM_PLAYER);
 
-    if (AllPlayersGone)
+    if (game.all_players_gone)
     {
-      attr_x = ExitX;
-      attr_y = ExitY;
+      attr_x = game.exit_x;
+      attr_y = game.exit_y;
     }
     else
     {
@@ -7950,7 +7957,8 @@ static void StartMoving(int x, int y)
 
        game.friends_still_needed--;
        if (!game.friends_still_needed &&
-           !game.GameOver && AllPlayersGone)
+           !game.GameOver &&
+           game.all_players_gone)
          LevelSolved();
 
        return;
@@ -9096,7 +9104,8 @@ static void CheckExit(int x, int y)
     return;
   }
 
-  if (AllPlayersGone)  // do not re-open exit door closed after last player
+  // do not re-open exit door closed after last player
+  if (game.all_players_gone)
     return;
 
   Feld[x][y] = EL_EXIT_OPENING;
@@ -9120,7 +9129,8 @@ static void CheckExitEM(int x, int y)
     return;
   }
 
-  if (AllPlayersGone)  // do not re-open exit door closed after last player
+  // do not re-open exit door closed after last player
+  if (game.all_players_gone)
     return;
 
   Feld[x][y] = EL_EM_EXIT_OPENING;
@@ -9144,7 +9154,8 @@ static void CheckExitSteel(int x, int y)
     return;
   }
 
-  if (AllPlayersGone)  // do not re-open exit door closed after last player
+  // do not re-open exit door closed after last player
+  if (game.all_players_gone)
     return;
 
   Feld[x][y] = EL_STEEL_EXIT_OPENING;
@@ -9168,7 +9179,8 @@ static void CheckExitSteelEM(int x, int y)
     return;
   }
 
-  if (AllPlayersGone)  // do not re-open exit door closed after last player
+  // do not re-open exit door closed after last player
+  if (game.all_players_gone)
     return;
 
   Feld[x][y] = EL_EM_STEEL_EXIT_OPENING;
@@ -9189,7 +9201,8 @@ static void CheckExitSP(int x, int y)
     return;
   }
 
-  if (AllPlayersGone)  // do not re-open exit door closed after last player
+  // do not re-open exit door closed after last player
+  if (game.all_players_gone)
     return;
 
   Feld[x][y] = EL_SP_EXIT_OPENING;
@@ -11123,11 +11136,11 @@ static void CheckLevelSolved(void)
 
       game_em.game_over = TRUE;
 
-      AllPlayersGone = TRUE;
+      game.all_players_gone = TRUE;
     }
 
     if (game_em.game_over)                             // game lost
-      AllPlayersGone = TRUE;
+      game.all_players_gone = TRUE;
   }
   else if (level.game_engine_type == GAME_ENGINE_TYPE_SP)
   {
@@ -11138,11 +11151,11 @@ static void CheckLevelSolved(void)
 
       game_sp.game_over = TRUE;
 
-      AllPlayersGone = TRUE;
+      game.all_players_gone = TRUE;
     }
 
     if (game_sp.game_over)                             // game lost
-      AllPlayersGone = TRUE;
+      game.all_players_gone = TRUE;
   }
   else if (level.game_engine_type == GAME_ENGINE_TYPE_MM)
   {
@@ -11153,11 +11166,11 @@ static void CheckLevelSolved(void)
 
       game_mm.game_over = TRUE;
 
-      AllPlayersGone = TRUE;
+      game.all_players_gone = TRUE;
     }
 
     if (game_mm.game_over)                             // game lost
-      AllPlayersGone = TRUE;
+      game.all_players_gone = TRUE;
   }
 }
 
@@ -11208,7 +11221,7 @@ static void CheckLevelTime(void)
              KillPlayer(&stored_player[i]);
        }
       }
-      else if (game.no_time_limit && !AllPlayersGone) // level w/o time limit
+      else if (game.no_time_limit && !game.all_players_gone)
       {
        game_panel_controls[GAME_PANEL_TIME].value = TimePlayed;
       }
@@ -11333,7 +11346,7 @@ static void GameActionsExt(void)
   if (game.LevelSolved && !game.LevelSolved_GameEnd)
     GameWon();
 
-  if (AllPlayersGone && !TAPE_IS_STOPPED(tape))
+  if (game.all_players_gone && !TAPE_IS_STOPPED(tape))
     TapeStop();
 
   if (game_status != GAME_MODE_PLAYING)                // status might have changed
@@ -12745,7 +12758,7 @@ void ScrollPlayer(struct PlayerInfo *player, int mode)
          for (i = 0; i < MAX_PLAYERS; i++)
            KillPlayer(&stored_player[i]);
       }
-      else if (game.no_time_limit && !AllPlayersGone) // level w/o time limit
+      else if (game.no_time_limit && !game.all_players_gone)
       {
        game_panel_controls[GAME_PANEL_TIME].value = TimePlayed;
 
@@ -13407,7 +13420,7 @@ void BuryPlayer(struct PlayerInfo *player)
 
   player->buried = TRUE;
 
-  if (AllPlayersGone)
+  if (game.all_players_gone)
     game.GameOver = TRUE;
 }
 
@@ -13431,12 +13444,12 @@ void RemovePlayer(struct PlayerInfo *player)
 
   if (!found)
   {
-    AllPlayersGone = TRUE;
+    game.all_players_gone = TRUE;
     game.GameOver = TRUE;
   }
 
-  ExitX = ZX = jx;
-  ExitY = ZY = jy;
+  game.exit_x = ZX = jx;
+  game.exit_y = ZY = jy;
 }
 
 void ExitPlayer(struct PlayerInfo *player)
@@ -14970,7 +14983,7 @@ void RequestQuitGameExt(boolean skip_request, boolean quick_quit, char *message)
 void RequestQuitGame(boolean ask_if_really_quit)
 {
   boolean quick_quit = (!ask_if_really_quit || level_editor_test_game);
-  boolean skip_request = AllPlayersGone || quick_quit;
+  boolean skip_request = game.all_players_gone || quick_quit;
 
   RequestQuitGameExt(skip_request, quick_quit,
                     "Do you really want to quit the game?");
@@ -15230,8 +15243,6 @@ static ListNode *SaveEngineSnapshotBuffers(void)
 
   SaveSnapshotBuffer(&buffers, ARGS_ADDRESS_AND_SIZEOF(ZX));
   SaveSnapshotBuffer(&buffers, ARGS_ADDRESS_AND_SIZEOF(ZY));
-  SaveSnapshotBuffer(&buffers, ARGS_ADDRESS_AND_SIZEOF(ExitX));
-  SaveSnapshotBuffer(&buffers, ARGS_ADDRESS_AND_SIZEOF(ExitY));
 
   SaveSnapshotBuffer(&buffers, ARGS_ADDRESS_AND_SIZEOF(FrameCounter));
   SaveSnapshotBuffer(&buffers, ARGS_ADDRESS_AND_SIZEOF(TimeFrames));
@@ -15245,8 +15256,6 @@ static ListNode *SaveEngineSnapshotBuffers(void)
 
   SaveSnapshotBuffer(&buffers, ARGS_ADDRESS_AND_SIZEOF(ScrollStepSize));
 
-  SaveSnapshotBuffer(&buffers, ARGS_ADDRESS_AND_SIZEOF(AllPlayersGone));
-
   SaveSnapshotBuffer(&buffers, ARGS_ADDRESS_AND_SIZEOF(AmoebaCnt));
   SaveSnapshotBuffer(&buffers, ARGS_ADDRESS_AND_SIZEOF(AmoebaCnt2));