fixed drawing pause button on closed door when restarting paused game
[rocksndiamonds.git] / src / game.c
index 51633eb17bac0a776424354fca73b6a7c642f46b..872b4e9b2b769f61906a6063006cfd0b1a5f51e8 100644 (file)
@@ -3095,6 +3095,9 @@ static void InitGameEngine(void)
   game_em.use_single_button =
     (game.engine_version > VERSION_IDENT(4,0,0,2));
 
+  game_em.use_push_delay =
+    (game.engine_version > VERSION_IDENT(4,3,7,1));
+
   game_em.use_snap_key_bug =
     (game.engine_version < VERSION_IDENT(4,0,1,0));
 
@@ -3867,6 +3870,8 @@ void InitGame(void)
   game.LevelSolved_CountingScore = 0;
   game.LevelSolved_CountingHealth = 0;
 
+  game.RestartGameRequested = FALSE;
+
   game.panel.active = TRUE;
 
   game.no_level_time_limit = (level.time == 0);
@@ -3973,6 +3978,10 @@ void InitGame(void)
 
   InitBeltMovement();
 
+  // required if level does not contain any "empty space" element
+  if (element_info[EL_EMPTY].use_gfx_element)
+    game.use_masked_elements = TRUE;
+
   for (i = 0; i < MAX_PLAYERS; i++)
   {
     struct PlayerInfo *player = &stored_player[i];
@@ -4542,9 +4551,7 @@ void InitGame(void)
   }
 
   game.restart_level = FALSE;
-
   game.request_active = FALSE;
-  game.request_active_or_moving = FALSE;
 
   if (level.game_engine_type == GAME_ENGINE_TYPE_MM)
     InitGameActions_MM();
@@ -15797,10 +15804,14 @@ boolean CheckRestartGame(void)
     return FALSE;
   }
 
-  // do not handle game over if request dialog is already active
+  // do not ask to play again if request dialog is already active
   if (game.request_active)
     return FALSE;
 
+  // do not ask to play again if request dialog already handled
+  if (game.RestartGameRequested)
+    return FALSE;
+
   // do not ask to play again if game was never actually played
   if (!game.GamePlayed)
     return FALSE;
@@ -15809,6 +15820,8 @@ boolean CheckRestartGame(void)
   if (!setup.ask_on_game_over)
     return FALSE;
 
+  game.RestartGameRequested = TRUE;
+
   RequestRestartGame();
 
   return TRUE;
@@ -16460,6 +16473,10 @@ void ModifyPauseButtons(void)
   };
   int i;
 
+  // do not redraw pause button on closed door (may happen when restarting game)
+  if (!(GetDoorState() & DOOR_OPEN_1))
+    return;
+
   for (i = 0; ids[i] > -1; i++)
     ModifyGadget(game_gadget[ids[i]], GDI_CHECKED, tape.pausing, GDI_END);
 }