X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ftape.c;h=a07ebbded9d568cbd028329c4fb6fd247787984c;hb=97c25dcac5f23b62ca152112eb48f8e9b14156ef;hp=f16e7ec9451a20ab68068add00155ed01870088a;hpb=ea1ac518cfa502e41c036aaf35c97231387c8067;p=rocksndiamonds.git diff --git a/src/tape.c b/src/tape.c index f16e7ec9..a07ebbde 100644 --- a/src/tape.c +++ b/src/tape.c @@ -629,6 +629,30 @@ static void CloseTapeLogfile(void) // tape control functions // ============================================================================ +void TapeSetDateFromIsoDateString(char *date) +{ + int i; + + // check ISO date string for correct length + if (strlen(date) != 10) + return; + + // check ISO date string for correct format + for (i = 0; i < strlen(date); i++) + if (((i != 4 && i != 7) && (date[i] < '0' || date[i] > '9')) || + ((i == 4 || i == 7) && (date[i] != '-'))) + return; + + int yy = (date[2] - '0') * 10 + (date[3] - '0'); + int mm = (date[5] - '0') * 10 + (date[6] - '0'); + int dd = (date[8] - '0') * 10 + (date[9] - '0'); + + if (mm < 1 || mm > 12 || dd < 1 || dd > 31) + return; + + tape.date = 10000 * yy + 100 * (mm - 1) + dd; +} + void TapeSetDateFromEpochSeconds(time_t epoch_seconds) { struct tm *lt = localtime(&epoch_seconds); @@ -984,7 +1008,7 @@ void TapeStopPlaying(void) MapTapeEjectButton(); } -byte *TapePlayAction(void) +byte *TapePlayActionExt(boolean bd_replay) { int update_delay = FRAMES_PER_SECOND / 2; boolean update_video_display = (FrameCounter % update_delay == 0); @@ -995,6 +1019,12 @@ byte *TapePlayAction(void) if (!tape.playing || tape.pausing) return NULL; + if (!checkGameRunning()) + return NULL; + + if (tape.bd_replay && !bd_replay) + return NULL; + if (tape.pause_before_end) // stop some seconds before end of tape { if (TapeTime > (int)tape.length_seconds - TAPE_PAUSE_SECONDS_BEFORE_DEATH) @@ -1073,7 +1103,7 @@ byte *TapePlayAction(void) } tape.delay_played++; - if (tape.delay_played >= tape.pos[tape.counter].delay) + if (tape.delay_played >= tape.pos[tape.counter].delay || tape.bd_replay) { tape.counter++; tape.delay_played = 0; @@ -1088,6 +1118,16 @@ byte *TapePlayAction(void) return action; } +byte *TapePlayAction_BD(void) +{ + return TapePlayActionExt(TRUE); +} + +byte *TapePlayAction(void) +{ + return TapePlayActionExt(FALSE); +} + void TapeStop(void) { if (tape.pausing) @@ -1349,6 +1389,11 @@ void TapeReplayAndPauseBeforeEnd(void) tape.quick_resume = TRUE; } +boolean TapeIsPlaying_ReplayBD(void) +{ + return (tape.playing && tape.bd_replay); +} + boolean hasSolutionTape(void) { boolean tape_file_exists = fileExists(getSolutionTapeFilename(level_nr));