X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ftape.c;h=b219109fb3528b85246a1059312da05891ea742f;hb=c9433eab5c4317ed4f89164b386a7d33562e29be;hp=8cbc41f6b50189b3dbf3285ecfec01bc66e948ee;hpb=69e8efac8d856859c55237e085ff8b514ae1aa3c;p=rocksndiamonds.git diff --git a/src/tape.c b/src/tape.c index 8cbc41f6..b219109f 100644 --- a/src/tape.c +++ b/src/tape.c @@ -1,7 +1,7 @@ /*********************************************************** * Rocks'n'Diamonds -- McDuffin Strikes Back! * *----------------------------------------------------------* -* (c) 1995-2001 Artsoft Entertainment * +* (c) 1995-2002 Artsoft Entertainment * * Holger Schemel * * Detmolder Strasse 189 * * 33604 Bielefeld * @@ -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,54 @@ 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.date = 10000*(time->tm_year % 100) + 100*time->tm_mon + time->tm_mday; tape.random_seed = InitRND(NEW_RANDOMIZE); + + tape.file_version = FILE_VERSION_ACTUAL; tape.game_version = GAME_VERSION_ACTUAL; + tape.engine_version = level.game_version; for(i=0; i tape.length_seconds - TAPE_PAUSE_SECONDS_BEFORE_DEATH) { - TapeTogglePause(); + TapeTogglePause(TAPE_TOGGLE_MANUAL); return NULL; } } @@ -538,7 +552,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 +585,6 @@ void TapeStop() } } -void TapeErase() -{ - tape.length = 0; -} - unsigned int GetTapeLength() { unsigned int tape_length = 0; @@ -590,17 +599,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 +661,7 @@ void TapeQuickLoad() if (!TAPE_IS_EMPTY(tape)) { TapeStartGamePlaying(); - TapeIndexSearch(); + TapeStartIndexSearch(); tape.quick_resume = TRUE; } @@ -797,9 +830,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 +840,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 +851,7 @@ static void HandleTapeButtons(struct GadgetInfo *gi) if (tape.playing) /* PLAYING -> PAUSING -> RECORDING */ TapeAppendRecording(); else - TapeTogglePause(); + TapeTogglePause(TAPE_TOGGLE_MANUAL); } break; @@ -834,7 +867,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 */ {