X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ftape.c;h=3c39d5abc17c3c9e99ea3726d22c666ac004cc00;hb=9a7426789c04bf396df78eb915522f9e57af985e;hp=8cbc41f6b50189b3dbf3285ecfec01bc66e948ee;hpb=69e8efac8d856859c55237e085ff8b514ae1aa3c;p=rocksndiamonds.git diff --git a/src/tape.c b/src/tape.c index 8cbc41f6..3c39d5ab 100644 --- a/src/tape.c +++ b/src/tape.c @@ -35,6 +35,7 @@ /* forward declaration for internal use */ static void HandleTapeButtons(struct GadgetInfo *); +static void TapeStopIndexSearch(); static struct GadgetInfo *tape_gadget[NUM_TAPE_BUTTONS]; @@ -290,29 +291,50 @@ void DrawCompleteVideoDisplay() /* tape control functions */ /* ========================================================================= */ -void TapeStartRecording() +void TapeErase() { - time_t zeit1 = time(NULL); - struct tm *zeit2 = localtime(&zeit1); + time_t epoch_seconds = time(NULL); + struct tm *time = localtime(&epoch_seconds); int i; - if (!TAPE_IS_STOPPED(tape)) - TapeStop(); - - tape.level_nr = level_nr; tape.length = 0; tape.counter = 0; + + tape.level_nr = level_nr; tape.pos[tape.counter].delay = 0; - tape.recording = TRUE; - tape.playing = FALSE; - tape.pausing = FALSE; tape.changed = TRUE; - tape.date = 10000*(zeit2->tm_year%100) + 100*zeit2->tm_mon + zeit2->tm_mday; - tape.random_seed = InitRND(NEW_RANDOMIZE); + tape.date = 10000*(time->tm_year % 100) + 100*time->tm_mon + time->tm_mday; tape.game_version = GAME_VERSION_ACTUAL; + tape.random_seed = InitRND(NEW_RANDOMIZE); for(i=0; i tape.length_seconds - TAPE_PAUSE_SECONDS_BEFORE_DEATH) { - TapeTogglePause(); + TapeTogglePause(TAPE_TOGGLE_MANUAL); return NULL; } } @@ -538,7 +554,7 @@ byte *TapePlayAction() if (tape.counter >= tape.length) /* end of tape reached */ { if (tape.index_search) - TapeTogglePause(); + TapeTogglePause(TAPE_TOGGLE_MANUAL); else TapeStop(); @@ -571,11 +587,6 @@ void TapeStop() } } -void TapeErase() -{ - tape.length = 0; -} - unsigned int GetTapeLength() { unsigned int tape_length = 0; @@ -590,17 +601,41 @@ unsigned int GetTapeLength() return(tape_length * GAME_FRAME_DELAY / 1000); } -void TapeIndexSearch() +static void TapeStartIndexSearch() { tape.index_search = TRUE; if (!tape.fast_forward || tape.pause_before_death) { + tape.pausing = FALSE; + SetDrawDeactivationMask(REDRAW_FIELD | REDRAW_DOOR_1); audio.sound_deactivated = TRUE; } } +static void TapeStopIndexSearch() +{ + tape.index_search = FALSE; + + SetDrawDeactivationMask(REDRAW_NONE); + audio.sound_deactivated = FALSE; + + RedrawPlayfield(TRUE, 0,0,0,0); + DrawGameDoorValues(); +} + +static void TapeSingleStep() +{ + if (options.network) + return; + + if (!tape.pausing) + TapeTogglePause(TAPE_TOGGLE_MANUAL); + + tape.single_step = !tape.single_step; +} + void TapeQuickSave() { if (game_status == PLAYING) @@ -628,7 +663,7 @@ void TapeQuickLoad() if (!TAPE_IS_EMPTY(tape)) { TapeStartGamePlaying(); - TapeIndexSearch(); + TapeStartIndexSearch(); tape.quick_resume = TRUE; } @@ -797,9 +832,9 @@ static void HandleTapeButtons(struct GadgetInfo *gi) case TAPE_CTRL_ID_INDEX: if (tape.playing) - TapeIndexSearch(); + TapeStartIndexSearch(); else if (tape.recording) - ; /* setting index mark -- not yet implemented */ + TapeSingleStep(); break; case TAPE_CTRL_ID_STOP: @@ -807,7 +842,7 @@ static void HandleTapeButtons(struct GadgetInfo *gi) break; case TAPE_CTRL_ID_PAUSE: - TapeTogglePause(); + TapeTogglePause(TAPE_TOGGLE_MANUAL); break; case TAPE_CTRL_ID_RECORD: @@ -818,7 +853,7 @@ static void HandleTapeButtons(struct GadgetInfo *gi) if (tape.playing) /* PLAYING -> PAUSING -> RECORDING */ TapeAppendRecording(); else - TapeTogglePause(); + TapeTogglePause(TAPE_TOGGLE_MANUAL); } break; @@ -834,7 +869,7 @@ static void HandleTapeButtons(struct GadgetInfo *gi) { if (tape.pausing) /* PAUSE -> PLAY */ { - TapeTogglePause(); + TapeTogglePause(TAPE_TOGGLE_MANUAL); } else if (!tape.fast_forward) /* PLAY -> FAST FORWARD PLAY */ {