added setup option to skip displaying the high scores after solving a level
[rocksndiamonds.git] / src / game.c
index ca13127d2e7a5866aef72e02591ed0b87daa459a..2cf0e9aa46a468e4eacf98bf528d34964359d322 100644 (file)
@@ -4650,7 +4650,7 @@ void GameWon()
 void GameEnd()
 {
   int hi_pos;
-  boolean raise_level = FALSE;
+  int last_level_nr = level_nr;
 
   local_player->LevelSolved_GameEnd = TRUE;
 
@@ -4693,32 +4693,36 @@ void GameEnd()
 
   if (setup.increment_levels &&
       level_nr < leveldir_current->last_level)
-    raise_level = TRUE;                        /* advance to next level */
-
-  if ((hi_pos = NewHiScore(level_nr)) >= 0)
   {
-    SetGameStatus(GAME_MODE_SCORES);
-
-    DrawHallOfFame(level_nr, hi_pos);
+    level_nr++;                /* advance to next level */
+    TapeErase();       /* start with empty tape */
 
-    if (raise_level)
+    if (setup.auto_play_next_level)
     {
-      level_nr++;
-      TapeErase();
+      LoadLevel(level_nr);
+
+      SaveLevelSetup_SeriesInfo();
     }
   }
-  else
+
+  hi_pos = NewHiScore(last_level_nr);
+
+  if (hi_pos >= 0 && !setup.skip_scores_after_game)
   {
-    SetGameStatus(GAME_MODE_MAIN);
+    SetGameStatus(GAME_MODE_SCORES);
 
-    if (raise_level)
-    {
-      level_nr++;
-      TapeErase();
-    }
+    DrawHallOfFame(last_level_nr, hi_pos);
+  }
+  else if (!setup.auto_play_next_level || !setup.increment_levels)
+  {
+    SetGameStatus(GAME_MODE_MAIN);
 
     DrawMainMenu();
   }
+  else
+  {
+    StartGameActions(network.enabled, setup.autorecord, level.random_seed);
+  }
 }
 
 int NewHiScore(int level_nr)