fixed problems with current level set node being a tree node copy
[rocksndiamonds.git] / src / game.c
index 48f5e7f158e13c68da188ade38a79d427057f63b..07df1fe52a4f6676eb3713d170144b032a45a448 100644 (file)
@@ -15373,12 +15373,12 @@ void RequestQuitGameExt(boolean skip_request, boolean quick_quit, char *message)
 {
   if (skip_request || Request(message, REQ_ASK | REQ_STAY_CLOSED))
   {
-    // closing door required in case of envelope style request dialogs
-    if (!skip_request)
+    if (!quick_quit)
     {
       // prevent short reactivation of overlay buttons while closing door
       SetOverlayActive(FALSE);
 
+      // door may still be open due to skipped or envelope style request
       CloseDoor(DOOR_CLOSE_1);
     }
 
@@ -15406,10 +15406,13 @@ void RequestQuitGameExt(boolean skip_request, boolean quick_quit, char *message)
   }
 }
 
-void RequestQuitGame(boolean ask_if_really_quit)
+void RequestQuitGame(boolean escape_key_pressed)
 {
-  boolean quick_quit = (!ask_if_really_quit || level_editor_test_game);
-  boolean skip_request = game.all_players_gone || quick_quit;
+  boolean ask_on_escape = (setup.ask_on_escape && setup.ask_on_quit_game);
+  boolean quick_quit = ((escape_key_pressed && !ask_on_escape) ||
+                       level_editor_test_game);
+  boolean skip_request = (game.all_players_gone || !setup.ask_on_quit_game ||
+                         quick_quit);
 
   RequestQuitGameExt(skip_request, quick_quit,
                     "Do you really want to quit the game?");
@@ -16271,7 +16274,7 @@ static void HandleGameButtonsExt(int id, int button)
       if (tape.playing)
        TapeStop();
       else
-       RequestQuitGame(TRUE);
+       RequestQuitGame(FALSE);
 
       break;