added function to remove player and cleanup last player field
[rocksndiamonds.git] / src / game.c
index 5a97b201b510b71676ae0f3a64253e5d8a5098ba..7076d52c6c70bfbb809c435d9ecd83d94929f8a7 100644 (file)
@@ -1112,6 +1112,7 @@ void TestIfGoodThingGetsHitByBadThing(int, int, int);
 void KillPlayer(struct PlayerInfo *);
 void BuryPlayer(struct PlayerInfo *);
 void RemovePlayer(struct PlayerInfo *);
+void RemovePlayerWithCleanup(struct PlayerInfo *);
 
 static int getInvisibleActiveFromInvisibleElement(int);
 static int getInvisibleFromInvisibleActiveElement(int);
@@ -4696,22 +4697,33 @@ void GameEnd()
   {
     level_nr++;                /* advance to next level */
     TapeErase();       /* start with empty tape */
+
+    if (setup.auto_play_next_level)
+    {
+      LoadLevel(level_nr);
+
+      SaveLevelSetup_SeriesInfo();
+    }
   }
 
   hi_pos = NewHiScore(last_level_nr);
 
-  if (hi_pos >= 0)
+  if (hi_pos >= 0 && !setup.skip_scores_after_game)
   {
     SetGameStatus(GAME_MODE_SCORES);
 
     DrawHallOfFame(last_level_nr, hi_pos);
   }
-  else
+  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)
@@ -12630,8 +12642,7 @@ void ScrollPlayer(struct PlayerInfo *player, int mode)
        Feld[jx][jy] == EL_SP_EXIT_OPEN ||
        Feld[jx][jy] == EL_SP_EXIT_OPENING)     /* <-- special case */
     {
-      DrawPlayer(player);      /* needed here only to cleanup last field */
-      RemovePlayer(player);
+      RemovePlayerWithCleanup(player);
 
       if (local_player->friends_still_needed == 0 ||
          IS_SP_ELEMENT(Feld[jx][jy]))
@@ -13391,6 +13402,12 @@ void RemovePlayer(struct PlayerInfo *player)
   ExitY = ZY = jy;
 }
 
+void RemovePlayerWithCleanup(struct PlayerInfo *player)
+{
+  DrawPlayer(player);  /* needed here only to cleanup last field */
+  RemovePlayer(player);
+}
+
 static void setFieldForSnapping(int x, int y, int element, int direction)
 {
   struct ElementInfo *ei = &element_info[element];