fixed playing "game.losing" sound also if not asking to play again
[rocksndiamonds.git] / src / game.c
index 49874ed7a437dbf6d2d1ac380eb90708d698cd6a..1cbea93f65185b803d2d0c6087be03a9227e3c9b 100644 (file)
@@ -15639,15 +15639,21 @@ void RequestRestartGame(char *message)
 
   boolean has_started_game = hasStartedNetworkGame();
   int request_mode = (has_started_game ? REQ_ASK : REQ_CONFIRM);
+  int door_state = DOOR_CLOSE_1;
 
-  if (Request(message, request_mode | REQ_STAY_CLOSED) && has_started_game)
+  if (Request(message, request_mode | REQ_STAY_OPEN) && has_started_game)
   {
+    CloseDoor(door_state);
+
     StartGameActions(network.enabled, setup.autorecord, level.random_seed);
   }
   else
   {
-    // needed in case of envelope request to close game panel
-    CloseDoor(DOOR_CLOSE_1);
+    // if game was invoked from level editor, also close tape recorder door
+    if (level_editor_test_game)
+      door_state = DOOR_CLOSE_ALL;
+
+    CloseDoor(door_state);
 
     SetGameStatus(GAME_MODE_MAIN);
 
@@ -15655,6 +15661,23 @@ void RequestRestartGame(char *message)
   }
 }
 
+static char *getRestartGameMessage(void)
+{
+  boolean play_again = hasStartedNetworkGame();
+  static char message[MAX_OUTPUT_LINESIZE];
+  char *game_over_text = "Game over!";
+  char *play_again_text = " Play it again?";
+
+  if (level.game_engine_type == GAME_ENGINE_TYPE_MM &&
+      game_mm.game_over_message != NULL)
+    game_over_text = game_mm.game_over_message;
+
+  snprintf(message, MAX_OUTPUT_LINESIZE, "%s%s", game_over_text,
+          (play_again ? play_again_text : ""));
+
+  return message;
+}
+
 void CheckGameOver(void)
 {
   static boolean last_game_over = FALSE;
@@ -15680,7 +15703,7 @@ void CheckGameOver(void)
 
   if (game_over_delay > 0)
   {
-    if (game_over_delay == game_over_delay_value)
+    if (game_over_delay == game_over_delay_value / 2)
       PlaySound(SND_GAME_LOSING);
 
     game_over_delay--;
@@ -15688,10 +15711,12 @@ void CheckGameOver(void)
     return;
   }
 
+  // do not ask to play again if this was disabled in setup menu
+  if (!setup.ask_on_game_over)
+    return;
+
   if (last_game_over != game_over)
-    game.restart_game_message = (hasStartedNetworkGame() ?
-                                "Game over! Play it again?" :
-                                "Game over!");
+    game.restart_game_message = getRestartGameMessage();
 
   last_game_over = game_over;
 }