X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ftape.c;h=240a149263f0116ab9588dd9265dcfca35c91ded;hb=9c94b5f043a204edb69f88c95d6a44fafa95ddb2;hp=e0491485339bab365025f3fc24363b5c6c656eb7;hpb=84b4d1874b7dfed42ace079941a65baea0ac4ff6;p=rocksndiamonds.git diff --git a/src/tape.c b/src/tape.c index e0491485..240a1492 100644 --- a/src/tape.c +++ b/src/tape.c @@ -664,6 +664,7 @@ void TapeErase(void) tape.level_nr = level_nr; tape.pos[tape.counter].delay = 0; tape.changed = TRUE; + tape.solved = FALSE; tape.random_seed = InitRND(level.random_seed); @@ -760,6 +761,7 @@ static void TapeAppendRecording(void) // start recording tape.recording = TRUE; tape.changed = TRUE; + tape.solved = FALSE; // set current delay (for last played move) tape.pos[tape.counter].delay = tape.delay_played; @@ -1378,31 +1380,19 @@ 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; - unsigned int download_delay_value = 10000; + DelayCounter download_delay = { 10000 }; ResetDelayCounter(&download_delay); // wait for score tape to be successfully downloaded (and fail on timeout) while (!server_scores.tape_downloaded) { - if (DelayReached(&download_delay, download_delay_value)) + if (DelayReached(&download_delay)) return FALSE; - PlayScoreTape_UpdateBusyState(); + UPDATE_BUSY_STATE_NOT_LOADING(); Delay(20); } @@ -1413,11 +1403,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 +1443,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)) { @@ -1577,15 +1579,14 @@ static void AutoPlayTapes_SetScoreEntry(int score, int time) static boolean AutoPlayTapes_WaitForUpload(void) { - unsigned int upload_delay = 0; - unsigned int upload_delay_value = 10000; + DelayCounter upload_delay = { 10000 }; ResetDelayCounter(&upload_delay); // wait for score tape to be successfully uploaded (and fail on timeout) while (!server_scores.uploaded) { - if (DelayReached(&upload_delay, upload_delay_value)) + if (DelayReached(&upload_delay)) { PrintNoLog("\r"); Print("- uploading score tape to score server - TIMEOUT.\n");