added playing next level when leaving hall of fame via back link
[rocksndiamonds.git] / src / tape.c
index e0491485339bab365025f3fc24363b5c6c656eb7..cd07263f007f2e4842c1395e13a5c17f6d6adecf 100644 (file)
@@ -1378,17 +1378,6 @@ boolean PlaySolutionTape(void)
   return TRUE;
 }
 
-static void PlayScoreTape_UpdateBusyState(void)
-{
-  int game_status_last = game_status;
-
-  SetGameStatus(GAME_MODE_LOADING);
-
-  UPDATE_BUSY_STATE();
-
-  SetGameStatus(game_status_last);
-}
-
 static boolean PlayScoreTape_WaitForDownload(void)
 {
   unsigned int download_delay = 0;
@@ -1402,7 +1391,7 @@ static boolean PlayScoreTape_WaitForDownload(void)
     if (DelayReached(&download_delay, download_delay_value))
       return FALSE;
 
-    PlayScoreTape_UpdateBusyState();
+    UPDATE_BUSY_STATE_NOT_LOADING();
 
     Delay(20);
   }
@@ -1413,11 +1402,20 @@ static boolean PlayScoreTape_WaitForDownload(void)
 boolean PlayScoreTape(int entry_nr)
 {
   struct ScoreEntry *entry = &scores.entry[entry_nr];
-  char *tape_filename = getScoreTapeFilename(entry->tape_basename, level_nr);
+  char *tape_filename =
+    (entry->id == -1 ?
+     getScoreTapeFilename(entry->tape_basename, level_nr) :
+     getScoreCacheTapeFilename(entry->tape_basename, level_nr));
   boolean download_tape = (!fileExists(tape_filename));
 
-  if (entry->id == -1)
+  if (download_tape && entry->id == -1)
+  {
+    FadeSkipNextFadeIn();
+
+    Request("Cannot find score tape!", REQ_CONFIRM);
+
     return FALSE;
+  }
 
   server_scores.tape_downloaded = FALSE;
 
@@ -1444,7 +1442,10 @@ boolean PlayScoreTape(int entry_nr)
   // if tape recorder already contains a tape, remove it without asking
   TapeErase();
 
-  LoadScoreTape(entry->tape_basename, level_nr);
+  if (entry->id == -1)
+    LoadScoreTape(entry->tape_basename, level_nr);
+  else
+    LoadScoreCacheTape(entry->tape_basename, level_nr);
 
   if (TAPE_IS_EMPTY(tape))
   {