X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ftape.c;h=bba4d4d297c31d5998a9e170aec333d1da2c4792;hb=f1f974498c1691431a5755d917f674c7cf56eb53;hp=a14690d3b23daaf4c7bf1c5150699ff945ef66c3;hpb=f6bcc10ce7b517f04eb5cddf01c9ec29ee729b7e;p=rocksndiamonds.git diff --git a/src/tape.c b/src/tape.c index a14690d3..bba4d4d2 100644 --- a/src/tape.c +++ b/src/tape.c @@ -17,7 +17,7 @@ #include "tools.h" #include "files.h" #include "network.h" -#include "cartoons.h" +#include "anim.h" #define DEBUG_TAPE_WHEN_PLAYING FALSE @@ -200,23 +200,23 @@ static void DrawVideoDisplay_Graphics(unsigned int state, unsigned int value) video_pos[NUM_TAPE_FUNCTIONS][NUM_TAPE_FUNCTION_PARTS] = { { - { IMG_TAPE_LABEL_GFX_PLAY, &tape.label.play }, - { IMG_TAPE_SYMBOL_GFX_PLAY, &tape.symbol.play }, + { IMG_GFX_TAPE_LABEL_PLAY, &tape.label.play }, + { IMG_GFX_TAPE_SYMBOL_PLAY, &tape.symbol.play }, }, { - { IMG_TAPE_LABEL_GFX_RECORD, &tape.label.record }, - { IMG_TAPE_SYMBOL_GFX_RECORD, &tape.symbol.record }, + { IMG_GFX_TAPE_LABEL_RECORD, &tape.label.record }, + { IMG_GFX_TAPE_SYMBOL_RECORD, &tape.symbol.record }, }, { - { IMG_TAPE_LABEL_GFX_PAUSE, &tape.label.pause }, - { IMG_TAPE_SYMBOL_GFX_PAUSE, &tape.symbol.pause }, + { IMG_GFX_TAPE_LABEL_PAUSE, &tape.label.pause }, + { IMG_GFX_TAPE_SYMBOL_PAUSE, &tape.symbol.pause }, }, { - { IMG_TAPE_LABEL_GFX_DATE, &tape.label.date }, + { IMG_GFX_TAPE_LABEL_DATE, &tape.label.date }, { -1, NULL }, }, { - { IMG_TAPE_LABEL_GFX_TIME, &tape.label.time }, + { IMG_GFX_TAPE_LABEL_TIME, &tape.label.time }, { -1, NULL }, }, { @@ -225,24 +225,24 @@ static void DrawVideoDisplay_Graphics(unsigned int state, unsigned int value) { -1, NULL }, }, { - { IMG_TAPE_LABEL_GFX_FAST_FORWARD, &tape.label.fast_forward }, - { IMG_TAPE_SYMBOL_GFX_FAST_FORWARD, &tape.symbol.fast_forward }, + { IMG_GFX_TAPE_LABEL_FAST_FORWARD, &tape.label.fast_forward }, + { IMG_GFX_TAPE_SYMBOL_FAST_FORWARD, &tape.symbol.fast_forward }, }, { - { IMG_TAPE_LABEL_GFX_PAUSE_BEFORE_END, &tape.label.pause_before_end }, - { IMG_TAPE_SYMBOL_GFX_PAUSE_BEFORE_END, &tape.symbol.pause_before_end }, + { IMG_GFX_TAPE_LABEL_PAUSE_BEFORE_END, &tape.label.pause_before_end }, + { IMG_GFX_TAPE_SYMBOL_PAUSE_BEFORE_END, &tape.symbol.pause_before_end }, }, { - { IMG_TAPE_LABEL_GFX_WARP_FORWARD_BLIND, &tape.label.warp_forward_blind}, - { IMG_TAPE_SYMBOL_GFX_WARP_FORWARD_BLIND, &tape.symbol.warp_forward_blind}, + { IMG_GFX_TAPE_LABEL_WARP_FORWARD_BLIND, &tape.label.warp_forward_blind}, + { IMG_GFX_TAPE_SYMBOL_WARP_FORWARD_BLIND, &tape.symbol.warp_forward_blind}, }, { - { IMG_TAPE_LABEL_GFX_WARP_FORWARD, &tape.label.warp_forward }, - { IMG_TAPE_SYMBOL_GFX_WARP_FORWARD, &tape.symbol.warp_forward }, + { IMG_GFX_TAPE_LABEL_WARP_FORWARD, &tape.label.warp_forward }, + { IMG_GFX_TAPE_SYMBOL_WARP_FORWARD, &tape.symbol.warp_forward }, }, { - { IMG_TAPE_LABEL_GFX_SINGLE_STEP, &tape.label.single_step }, - { IMG_TAPE_SYMBOL_GFX_SINGLE_STEP, &tape.symbol.single_step }, + { IMG_GFX_TAPE_LABEL_SINGLE_STEP, &tape.label.single_step }, + { IMG_GFX_TAPE_SYMBOL_SINGLE_STEP, &tape.symbol.single_step }, }, }; @@ -289,6 +289,8 @@ static void DrawVideoDisplay_Graphics(unsigned int state, unsigned int value) if (gd_bitmap != NULL) BlitBitmap(gd_bitmap, drawto, gd_x, gd_y, gfx->width, gfx->height, VX + pos->x, VY + pos->y); + + redraw_mask |= REDRAW_DOOR_2; } } } @@ -431,8 +433,6 @@ void DrawVideoDisplay(unsigned int state, unsigned int value) { DrawVideoDisplay_Graphics(state, value); DrawVideoDisplay_DateTime(state, value); - - redraw_mask |= REDRAW_DOOR_2; } void DrawCompleteVideoDisplay() @@ -493,7 +493,7 @@ void TapeDeactivateDisplayOff(boolean redraw_display) if (redraw_display) { - RedrawPlayfield(TRUE, 0,0,0,0); + RedrawPlayfield(); DrawGameDoorValues(); } } @@ -739,15 +739,23 @@ void TapeTogglePause(boolean toggle_manual) TapeAppendRecording(); - if (!CheckEngineSnapshot()) + if (!CheckEngineSnapshotSingle()) SaveEngineSnapshotSingle(); + + // restart step/move snapshots after quick loading tape + SaveEngineSnapshotToListInitial(); } } - if (tape.pausing) - MapUndoRedoButtons(); - else - MapStopPlayButtons(); + if (setup.show_snapshot_buttons && + game_status == GAME_MODE_PLAYING && + CheckEngineSnapshotList()) + { + if (tape.pausing) + MapUndoRedoButtons(); + else if (!tape.single_step) + UnmapUndoRedoButtons(); + } } void TapeStartPlaying() @@ -1032,7 +1040,7 @@ void TapeQuickLoad() if (game_status != GAME_MODE_PLAYING && game_status != GAME_MODE_MAIN) return; - if (CheckEngineSnapshot()) + if (CheckEngineSnapshotSingle()) { TapeStartGamePlaying(); @@ -1046,6 +1054,9 @@ void TapeQuickLoad() TapeStopWarpForward(); TapeAppendRecording(); + // restart step/move snapshots after quick loading tape + SaveEngineSnapshotToListInitial(); + if (FrameCounter > 0) return; } @@ -1114,7 +1125,9 @@ void AutoPlayTape() else { DrawCompleteVideoDisplay(); + audio.sound_enabled = FALSE; + setup.engine_snapshot_mode = getStringCopy(STR_SNAPSHOT_MODE_OFF); autoplay_leveldir = getTreeInfoFromIdentifier(leveldir_first, global.autoplay_leveldir); @@ -1186,7 +1199,12 @@ void AutoPlayTape() printf("playing tape ... "); TapeStartGamePlaying(); - TapeStartWarpForward(); + + if (global.autoplay_mode == AUTOPLAY_FFWD) + tape.fast_forward = TRUE; + + if (global.autoplay_mode != AUTOPLAY_PLAY) + TapeStartWarpForward(); return; } @@ -1228,28 +1246,28 @@ static struct } tapebutton_info[NUM_TAPE_BUTTONS] = { { - IMG_TAPE_BUTTON_GFX_EJECT, &tape.button.eject, + IMG_GFX_TAPE_BUTTON_EJECT, &tape.button.eject, TAPE_CTRL_ID_EJECT, "eject tape" }, { /* (same position as "eject" button) */ - IMG_TAPE_BUTTON_GFX_EXTRA, &tape.button.eject, + IMG_GFX_TAPE_BUTTON_EXTRA, &tape.button.eject, TAPE_CTRL_ID_EXTRA, "extra functions" }, { - IMG_TAPE_BUTTON_GFX_STOP, &tape.button.stop, + IMG_GFX_TAPE_BUTTON_STOP, &tape.button.stop, TAPE_CTRL_ID_STOP, "stop tape" }, { - IMG_TAPE_BUTTON_GFX_PAUSE, &tape.button.pause, + IMG_GFX_TAPE_BUTTON_PAUSE, &tape.button.pause, TAPE_CTRL_ID_PAUSE, "pause tape" }, { - IMG_TAPE_BUTTON_GFX_RECORD, &tape.button.record, + IMG_GFX_TAPE_BUTTON_RECORD, &tape.button.record, TAPE_CTRL_ID_RECORD, "record tape" }, { - IMG_TAPE_BUTTON_GFX_PLAY, &tape.button.play, + IMG_GFX_TAPE_BUTTON_PLAY, &tape.button.play, TAPE_CTRL_ID_PLAY, "play tape" } }; @@ -1403,6 +1421,13 @@ static void HandleTapeButtonsExt(int id) break; case TAPE_CTRL_ID_PLAY: + if (tape.recording && tape.pausing) /* PAUSE -> RECORD */ + { + // ("TAPE_IS_EMPTY(tape)" is TRUE here -- probably fix this) + + TapeTogglePause(TAPE_TOGGLE_MANUAL); + } + if (TAPE_IS_EMPTY(tape)) break;