fixed bug with game restart request when opening/closing doors
authorHolger Schemel <info@artsoft.org>
Fri, 5 Apr 2024 15:42:08 +0000 (17:42 +0200)
committerHolger Schemel <info@artsoft.org>
Fri, 5 Apr 2024 15:42:08 +0000 (17:42 +0200)
src/game.c
src/game.h
src/tools.c

index 2c16aa62c93d95c8a5344eb9f5d44aea92955c54..5c3cc9d3d36ec3072332dbea5ec6cd6e2ee2fe7d 100644 (file)
@@ -4621,6 +4621,7 @@ void InitGame(void)
   game.restart_level = FALSE;
   game.request_active = FALSE;
   game.envelope_active = FALSE;
+  game.any_door_active = FALSE;
 
   if (level.game_engine_type == GAME_ENGINE_TYPE_MM)
     InitGameActions_MM();
@@ -16342,7 +16343,7 @@ boolean CheckRestartGame(void)
   }
 
   // do not ask to play again if request dialog is already active
-  if (game.request_active)
+  if (checkRequestActive())
     return FALSE;
 
   // do not ask to play again if request dialog already handled
@@ -16411,6 +16412,11 @@ boolean checkGameEnded(void)
   return (checkGameSolved() || checkGameFailed());
 }
 
+boolean checkRequestActive(void)
+{
+  return (game.request_active || game.envelope_active || game.any_door_active);
+}
+
 
 // ----------------------------------------------------------------------------
 // random generator functions
index 6f4f760d34b082ce9fa1d6b86f13cc703ad56311..c5eba4f155939e7296315d0bee1acc780b9b6287 100644 (file)
@@ -258,6 +258,7 @@ struct GameInfo
   // values for special request dialog control
   boolean request_active;
   boolean envelope_active;
+  boolean any_door_active;
 
   // values for special game control
   int centered_player_nr;
@@ -477,6 +478,7 @@ boolean checkGamePlaying(void);
 boolean checkGameSolved(void);
 boolean checkGameFailed(void);
 boolean checkGameEnded(void);
+boolean checkRequestActive(void);
 
 unsigned int InitEngineRandom_RND(int);
 unsigned int RND(int);
index fe1cbc50ba63dcb5af3e7e955742eed1eea36575..d83cb75aada4810bf6a2b235d695e45d54976c10 100644 (file)
@@ -5517,6 +5517,8 @@ unsigned int MoveDoor(unsigned int door_state)
 
     SetDoorBackgroundImage(IMG_BACKGROUND_DOOR);
 
+    game.any_door_active = TRUE;
+
     for (k = start; k < num_move_steps; k++)
     {
       int last_frame = num_move_steps - 1;     // last frame of this "for" loop
@@ -5711,6 +5713,8 @@ unsigned int MoveDoor(unsigned int door_state)
        BackToFront();
       }
     }
+
+    game.any_door_active = FALSE;
   }
 
   if (door_state & DOOR_ACTION_1)