fixed showing game actions after game end when request door opens/closes
authorHolger Schemel <holger.schemel@virtion.de>
Wed, 11 Sep 2024 16:56:54 +0000 (18:56 +0200)
committerHolger Schemel <holger.schemel@virtion.de>
Wed, 11 Sep 2024 17:05:56 +0000 (19:05 +0200)
This fixes a bug in commit 90028d7d. It occurs when "ask on game over"
is disabled, the player has died in a game and a key to restart the
game is pressed (like "restart game", "replay & pause before end" or
"quick load game"), which causes the newly started game to immediately
freeze (although it can still be stopped with the "space" or "escape"
key).

src/game.c
src/game.h

index 92460ceaeec9d0bcaa39fcd686a5905cb8ee0551..c813f82386da15706b86f70460085c848133016f 100644 (file)
@@ -3679,6 +3679,9 @@ void InitGame(void)
   int initial_move_dir = MV_DOWN;
   int i, j, x, y;
 
+  // required to prevent handling game actions when moving doors (via "checkGameEnded()")
+  game.InitGameRequested = TRUE;
+
   // required here to update video display before fading (FIX THIS)
   DrawMaskedBorder(REDRAW_DOOR_2);
 
@@ -4657,6 +4660,8 @@ void InitGame(void)
   }
 
   SetPlayfieldMouseCursorEnabled(!game.use_mouse_actions);
+
+  game.InitGameRequested = FALSE;
 }
 
 void UpdateEngineValues(int actual_scroll_x, int actual_scroll_y,
@@ -16451,6 +16456,10 @@ boolean checkGameFailed(void)
 
 boolean checkGameEnded(void)
 {
+  // required to prevent handling game actions when moving doors (during "InitGame()")
+  if (game.InitGameRequested)
+    return FALSE;
+
   return (checkGameSolved() || checkGameFailed());
 }
 
index c5eba4f155939e7296315d0bee1acc780b9b6287..0a5b7c2694305507b05932d99d4bb310fa28debd 100644 (file)
@@ -290,6 +290,7 @@ struct GameInfo
   int LevelSolved_CountingHealth;
 
   boolean RestartGameRequested;
+  boolean InitGameRequested;
 };
 
 struct PlayerInfo