X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ftape.c;h=9f2a61f39bae0069976c9587c3d908289051250f;hb=d442dd6ca65b694c37fbd3c93505644fe8478263;hp=fc90ad51461d9beccc831c1cb5c712268ae48074;hpb=5ae3fc5d27076677a95153162abcf527c6dc8e63;p=rocksndiamonds.git diff --git a/src/tape.c b/src/tape.c index fc90ad51..9f2a61f3 100644 --- a/src/tape.c +++ b/src/tape.c @@ -453,12 +453,16 @@ void TapeDeactivateDisplayOff(boolean redraw_display) /* tape control functions */ /* ========================================================================= */ -static void TapeSetDate() +void TapeSetDateFromEpochSeconds(time_t epoch_seconds) { - time_t epoch_seconds = time(NULL); - struct tm *now = localtime(&epoch_seconds); + struct tm *lt = localtime(&epoch_seconds); - tape.date = 10000 * (now->tm_year % 100) + 100 * now->tm_mon + now->tm_mday; + tape.date = 10000 * (lt->tm_year % 100) + 100 * lt->tm_mon + lt->tm_mday; +} + +void TapeSetDateFromNow() +{ + TapeSetDateFromEpochSeconds(time(NULL)); } void TapeErase() @@ -475,13 +479,13 @@ void TapeErase() tape.pos[tape.counter].delay = 0; tape.changed = TRUE; - tape.random_seed = InitRND(NEW_RANDOMIZE); + tape.random_seed = InitRND(level.random_seed); tape.file_version = FILE_VERSION_ACTUAL; tape.game_version = GAME_VERSION_ACTUAL; tape.engine_version = level.game_version; - TapeSetDate(); + TapeSetDateFromNow(); for (i = 0; i < MAX_PLAYERS; i++) tape.player_participates[i] = FALSE; @@ -538,7 +542,7 @@ void TapeStartRecording(long random_seed) static void TapeStartGameRecording() { - TapeStartRecording(NEW_RANDOMIZE); + TapeStartRecording(level.random_seed); #if defined(NETWORK_AVALIABLE) if (options.network) @@ -562,7 +566,7 @@ static void TapeAppendRecording() tape.recording = TRUE; tape.changed = TRUE; - TapeSetDate(); + TapeSetDateFromNow(); DrawVideoDisplay(VIDEO_STATE_DATE_ON, tape.date); DrawVideoDisplay(VIDEO_STATE_PLAY_OFF | VIDEO_STATE_REC_ON, 0); @@ -1295,10 +1299,8 @@ void UnmapTapeButtons() UnmapGadget(tape_gadget[i]); } -static void HandleTapeButtons(struct GadgetInfo *gi) +static void HandleTapeButtonsExt(int id) { - int id = gi->custom_id; - if (game_status != GAME_MODE_MAIN && game_status != GAME_MODE_PLAYING) return; @@ -1403,3 +1405,24 @@ static void HandleTapeButtons(struct GadgetInfo *gi) break; } } + +static void HandleTapeButtons(struct GadgetInfo *gi) +{ + HandleTapeButtonsExt(gi->custom_id); +} + +void HandleTapeButtonKeys(Key key) +{ + boolean use_extra = (tape.recording || tape.playing); + + if (key == setup.shortcut.tape_eject) + HandleTapeButtonsExt(use_extra ? TAPE_CTRL_ID_EXTRA : TAPE_CTRL_ID_EJECT); + else if (key == setup.shortcut.tape_stop) + HandleTapeButtonsExt(TAPE_CTRL_ID_STOP); + else if (key == setup.shortcut.tape_pause) + HandleTapeButtonsExt(TAPE_CTRL_ID_PAUSE); + else if (key == setup.shortcut.tape_record) + HandleTapeButtonsExt(TAPE_CTRL_ID_RECORD); + else if (key == setup.shortcut.tape_play) + HandleTapeButtonsExt(TAPE_CTRL_ID_PLAY); +}