X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ftape.c;h=d6c538d9dfd9b6191c180742b993bb2fbed3a8e6;hb=584c5950f79b9d0abbc4698f96dcfeffa64a786a;hp=50838ae638f6b57a5bc7d93783c819f165d5b98b;hpb=dfe9bd5e0191bc1011dd09b32103a808f41b4190;p=rocksndiamonds.git diff --git a/src/tape.c b/src/tape.c index 50838ae6..d6c538d9 100644 --- a/src/tape.c +++ b/src/tape.c @@ -45,99 +45,6 @@ static struct GadgetInfo *tape_gadget[NUM_TAPE_BUTTONS]; /* video tape definitions */ /* ========================================================================= */ -/* some positions in the video tape control window */ -#define VIDEO_DATE_LABEL_XPOS (VIDEO_DISPLAY1_XPOS) -#define VIDEO_DATE_LABEL_YPOS (VIDEO_DISPLAY1_YPOS) -#define VIDEO_DATE_LABEL_XSIZE (VIDEO_DISPLAY_XSIZE) -#define VIDEO_DATE_LABEL_YSIZE (VIDEO_DISPLAY_YSIZE) -#define VIDEO_DATE_XPOS (VIDEO_DISPLAY1_XPOS + 2) -#define VIDEO_DATE_YPOS (VIDEO_DISPLAY1_YPOS + 14) -#define VIDEO_DATE_XSIZE (VIDEO_DISPLAY_XSIZE) -#define VIDEO_DATE_YSIZE 16 -#define VIDEO_REC_LABEL_XPOS (VIDEO_DISPLAY2_XPOS) -#define VIDEO_REC_LABEL_YPOS (VIDEO_DISPLAY2_YPOS) -#define VIDEO_REC_LABEL_XSIZE 20 -#define VIDEO_REC_LABEL_YSIZE 12 -#define VIDEO_REC_SYMBOL_XPOS (VIDEO_DISPLAY2_XPOS + 20) -#define VIDEO_REC_SYMBOL_YPOS (VIDEO_DISPLAY2_YPOS) -#define VIDEO_REC_SYMBOL_XSIZE 16 -#define VIDEO_REC_SYMBOL_YSIZE 16 -#define VIDEO_PLAY_LABEL_XPOS (VIDEO_DISPLAY2_XPOS + 65) -#define VIDEO_PLAY_LABEL_YPOS (VIDEO_DISPLAY2_YPOS) -#define VIDEO_PLAY_LABEL_XSIZE 22 -#define VIDEO_PLAY_LABEL_YSIZE 12 -#define VIDEO_PLAY_SYMBOL_XPOS (VIDEO_DISPLAY2_XPOS + 52) -#define VIDEO_PLAY_SYMBOL_YPOS (VIDEO_DISPLAY2_YPOS) -#define VIDEO_PLAY_SYMBOL_XSIZE 11 -#define VIDEO_PLAY_SYMBOL_YSIZE 13 -#define VIDEO_PAUSE_LABEL_XPOS (VIDEO_DISPLAY2_XPOS) -#define VIDEO_PAUSE_LABEL_YPOS (VIDEO_DISPLAY2_YPOS + 20) -#define VIDEO_PAUSE_LABEL_XSIZE 35 -#define VIDEO_PAUSE_LABEL_YSIZE 8 -#define VIDEO_PAUSE_SYMBOL_XPOS (VIDEO_DISPLAY2_XPOS + 35) -#define VIDEO_PAUSE_SYMBOL_YPOS (VIDEO_DISPLAY2_YPOS) -#define VIDEO_PAUSE_SYMBOL_XSIZE 17 -#define VIDEO_PAUSE_SYMBOL_YSIZE 13 -#define VIDEO_TIME_XPOS (VIDEO_DISPLAY2_XPOS + 39) -#define VIDEO_TIME_YPOS (VIDEO_DISPLAY2_YPOS + 14) -#define VIDEO_TIME_XSIZE 50 -#define VIDEO_TIME_YSIZE 16 - -/* some default values for tape labels and symbols */ -#define VIDEO_LABEL_XPOS 5 -#define VIDEO_LABEL_YPOS 42 -#define VIDEO_LABEL_XSIZE 40 -#define VIDEO_LABEL_YSIZE 28 -#define VIDEO_SYMBOL_XPOS 39 -#define VIDEO_SYMBOL_YPOS 42 -#define VIDEO_SYMBOL_XSIZE 56 -#define VIDEO_SYMBOL_YSIZE 13 - -/* values for certain tape labels and symbols */ -#define VIDEO_FFWD_LABEL_XPOS VIDEO_LABEL_XPOS -#define VIDEO_FFWD_LABEL_YPOS 193 -#define VIDEO_FFWD_LABEL_XSIZE VIDEO_LABEL_XSIZE -#define VIDEO_FFWD_LABEL_YSIZE VIDEO_LABEL_YSIZE -#define VIDEO_FFWD_SYMBOL_XPOS VIDEO_SYMBOL_XPOS -#define VIDEO_FFWD_SYMBOL_YPOS 193 -#define VIDEO_FFWD_SYMBOL_XSIZE 27 -#define VIDEO_FFWD_SYMBOL_YSIZE VIDEO_SYMBOL_YSIZE - -#define VIDEO_PBEND_LABEL_XPOS VIDEO_LABEL_XPOS -#define VIDEO_PBEND_LABEL_YPOS 221 -#define VIDEO_PBEND_LABEL_XSIZE VIDEO_LABEL_XSIZE -#define VIDEO_PBEND_LABEL_YSIZE VIDEO_LABEL_YSIZE -#define VIDEO_PBEND_SYMBOL_XPOS VIDEO_SYMBOL_XPOS -#define VIDEO_PBEND_SYMBOL_YPOS 221 -#define VIDEO_PBEND_SYMBOL_XSIZE 27 -#define VIDEO_PBEND_SYMBOL_YSIZE VIDEO_SYMBOL_YSIZE - -#define VIDEO_WARP_LABEL_XPOS VIDEO_LABEL_XPOS -#define VIDEO_WARP_LABEL_YPOS 165 -#define VIDEO_WARP_LABEL_XSIZE VIDEO_LABEL_XSIZE -#define VIDEO_WARP_LABEL_YSIZE VIDEO_LABEL_YSIZE -#define VIDEO_WARP_SYMBOL_XPOS VIDEO_SYMBOL_XPOS -#define VIDEO_WARP_SYMBOL_YPOS 165 -#define VIDEO_WARP_SYMBOL_XSIZE 27 -#define VIDEO_WARP_SYMBOL_YSIZE VIDEO_SYMBOL_YSIZE -#define VIDEO_WARP2_SYMBOL_XPOS VIDEO_SYMBOL_XPOS -#define VIDEO_WARP2_SYMBOL_YPOS 152 -#define VIDEO_WARP2_SYMBOL_XSIZE 27 -#define VIDEO_WARP2_SYMBOL_YSIZE VIDEO_SYMBOL_YSIZE - -#define VIDEO_1STEP_SYMBOL_XPOS (VIDEO_SYMBOL_XPOS + 18) -#define VIDEO_1STEP_SYMBOL_YPOS 139 -#define VIDEO_1STEP_SYMBOL_XSIZE (VIDEO_SYMBOL_XSIZE - 18) -#define VIDEO_1STEP_SYMBOL_YSIZE VIDEO_SYMBOL_YSIZE - -#define PG_X3(x) (DOOR_GFX_PAGEX3 + (x)) -#define PG_X4(x) (DOOR_GFX_PAGEX4 + (x)) -#define PG_X5(x) (DOOR_GFX_PAGEX5 + (x)) -#define PG_X6(x) (DOOR_GFX_PAGEX6 + (x)) - -#define PG_Y1(y) (DOOR_GFX_PAGEY1 + (y)) -#define PG_Y2(y) (DOOR_GFX_PAGEY2 + (y)) - #define VIDEO_INFO_OFF (VIDEO_STATE_DATE_OFF | \ VIDEO_STATE_TIME_OFF | \ VIDEO_STATE_FRAME_OFF) @@ -145,6 +52,8 @@ static struct GadgetInfo *tape_gadget[NUM_TAPE_BUTTONS]; VIDEO_STATE_REC_OFF | \ VIDEO_STATE_PAUSE_OFF | \ VIDEO_STATE_FFWD_OFF | \ + VIDEO_STATE_WARP_OFF | \ + VIDEO_STATE_WARP2_OFF | \ VIDEO_STATE_PBEND_OFF | \ VIDEO_STATE_1STEP_OFF) #define VIDEO_PRESS_OFF (VIDEO_PRESS_PLAY_OFF | \ @@ -163,6 +72,8 @@ static struct GadgetInfo *tape_gadget[NUM_TAPE_BUTTONS]; VIDEO_STATE_REC_ON | \ VIDEO_STATE_PAUSE_ON | \ VIDEO_STATE_FFWD_ON | \ + VIDEO_STATE_WARP_ON | \ + VIDEO_STATE_WARP2_ON | \ VIDEO_STATE_PBEND_ON | \ VIDEO_STATE_1STEP_ON) #define VIDEO_PRESS_ON (VIDEO_PRESS_PLAY_ON | \ @@ -229,16 +140,16 @@ static void DrawVideoDisplay_Graphics(unsigned int state, unsigned int value) { IMG_GFX_TAPE_SYMBOL_FAST_FORWARD, &tape.symbol.fast_forward }, }, { - { 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_GFX_TAPE_LABEL_WARP_FORWARD, &tape.label.warp_forward }, + { IMG_GFX_TAPE_SYMBOL_WARP_FORWARD, &tape.symbol.warp_forward }, }, { { 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_GFX_TAPE_LABEL_WARP_FORWARD, &tape.label.warp_forward }, - { IMG_GFX_TAPE_SYMBOL_WARP_FORWARD, &tape.symbol.warp_forward }, + { 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_GFX_TAPE_LABEL_SINGLE_STEP, &tape.label.single_step }, @@ -445,6 +356,36 @@ void DrawVideoDisplaySymbol(unsigned int state) DrawVideoDisplay(state, VIDEO_DISPLAY_SYMBOL_ONLY); } +void DrawVideoDisplayPlayState() +{ + int state = 0; + + DrawVideoDisplay(VIDEO_STATE_OFF, 0); + + state |= VIDEO_STATE_PLAY_ON; + + if (tape.pausing) + { + state |= VIDEO_STATE_PAUSE_ON; + } + else + { + if (tape.deactivate_display) + state |= VIDEO_STATE_WARP2_ON; + else if (tape.warp_forward) + state |= VIDEO_STATE_WARP_ON; + else if (tape.fast_forward) + state |= VIDEO_STATE_FFWD_ON; + + if (tape.pause_before_end) + state |= VIDEO_STATE_PBEND_ON; + } + + // draw labels and symbols separately to prevent labels overlapping symbols + DrawVideoDisplayLabel(state); + DrawVideoDisplaySymbol(state); +} + void DrawCompleteVideoDisplay() { struct GraphicInfo *g_tape = &graphic_info[IMG_BACKGROUND_TAPE]; @@ -560,7 +501,7 @@ static void TapeRewind() { tape.counter = 0; tape.delay_played = 0; - tape.pause_before_death = FALSE; + tape.pause_before_end = FALSE; tape.recording = FALSE; tape.playing = FALSE; tape.fast_forward = FALSE; @@ -629,7 +570,7 @@ static void TapeAppendRecording() tape.playing = FALSE; tape.fast_forward = FALSE; tape.warp_forward = FALSE; - tape.pause_before_death = FALSE; + tape.pause_before_end = FALSE; tape.deactivate_display = FALSE; // start recording @@ -727,26 +668,12 @@ void TapeRecordAction(byte action_raw[MAX_PLAYERS]) void TapeTogglePause(boolean toggle_manual) { - int state = 0; - tape.pausing = !tape.pausing; if (tape.single_step && toggle_manual) tape.single_step = FALSE; - state |= VIDEO_STATE_PAUSE(tape.pausing); - - if (tape.pause_before_death) - state |= VIDEO_STATE_PBEND(!tape.pausing); - else if (tape.fast_forward) - state |= VIDEO_STATE_FFWD(!tape.pausing); - - if (tape.playing) - state |= VIDEO_STATE_PLAY_ON; - else - state |= VIDEO_STATE_1STEP(tape.single_step); - - DrawVideoDisplay(state, 0); + DrawVideoDisplayPlayState(); if (tape.warp_forward) { @@ -764,20 +691,20 @@ void TapeTogglePause(boolean toggle_manual) { DrawVideoDisplaySymbol(VIDEO_STATE_WARP2_ON); } + } - if (tape.quick_resume) - { - tape.quick_resume = FALSE; + if (tape.quick_resume) + { + tape.quick_resume = FALSE; - TapeStopWarpForward(); - TapeAppendRecording(); + TapeStopWarpForward(); + TapeAppendRecording(); - if (!CheckEngineSnapshotSingle()) - SaveEngineSnapshotSingle(); + if (!CheckEngineSnapshotSingle()) + SaveEngineSnapshotSingle(); - // restart step/move snapshots after quick loading tape - SaveEngineSnapshotToListInitial(); - } + // restart step/move snapshots after quick loading tape + SaveEngineSnapshotToListInitial(); } if (setup.show_snapshot_buttons && @@ -844,14 +771,12 @@ byte *TapePlayAction() if (!tape.playing || tape.pausing) return NULL; - if (tape.pause_before_death) // stop some seconds before end of tape + if (tape.pause_before_end) // stop some seconds before end of tape { if (TapeTime > tape.length_seconds - TAPE_PAUSE_SECONDS_BEFORE_DEATH) { tape.fast_forward = FALSE; - tape.pause_before_death = FALSE; - - DrawVideoDisplay(VIDEO_STATE_PBEND_OFF, 0); + tape.pause_before_end = FALSE; TapeStopWarpForward(); TapeTogglePause(TAPE_TOGGLE_MANUAL); @@ -860,17 +785,6 @@ byte *TapePlayAction() } } - if (update_video_display && !tape.deactivate_display) - { - if (tape.pause_before_death) - DrawVideoDisplayLabel(VIDEO_STATE_PBEND(update_draw_label_on)); - else if (tape.fast_forward) - DrawVideoDisplayLabel(VIDEO_STATE_FFWD(update_draw_label_on)); - - if (tape.warp_forward) - DrawVideoDisplaySymbol(VIDEO_STATE_WARP2_ON); - } - if (tape.counter >= tape.length) /* end of tape reached */ { if (tape.warp_forward && !tape.auto_play) @@ -881,6 +795,17 @@ byte *TapePlayAction() return NULL; } + if (update_video_display && !tape.deactivate_display) + { + if (tape.pause_before_end) + DrawVideoDisplayLabel(VIDEO_STATE_PBEND(update_draw_label_on)); + else if (tape.fast_forward) + DrawVideoDisplayLabel(VIDEO_STATE_FFWD(update_draw_label_on)); + + if (tape.warp_forward) + DrawVideoDisplaySymbol(VIDEO_STATE_WARP2_ON); + } + for (i = 0; i < MAX_PLAYERS; i++) action[i] = tape.pos[tape.counter].action[i]; @@ -954,10 +879,10 @@ static void TapeStartWarpForward() { tape.warp_forward = TRUE; - if (!tape.fast_forward && !tape.pause_before_death) + if (!tape.fast_forward && !tape.pause_before_end) { tape.pausing = FALSE; - tape.pause_before_death = TRUE; + tape.pause_before_end = TRUE; tape.deactivate_display = TRUE; TapeDeactivateDisplayOn(); @@ -976,7 +901,7 @@ static void TapeStopWarpForward() int state = VIDEO_STATE_PAUSE(tape.pausing); if (tape.deactivate_display) - tape.pause_before_death = FALSE; + tape.pause_before_end = FALSE; tape.warp_forward = FALSE; tape.deactivate_display = FALSE; @@ -984,8 +909,8 @@ static void TapeStopWarpForward() TapeDeactivateDisplayOff(game_status == GAME_MODE_PLAYING); state |= VIDEO_STATE_WARP_OFF; - state |= (tape.pause_before_death ? VIDEO_STATE_PBEND_ON : - tape.fast_forward ? VIDEO_STATE_FFWD_ON : + state |= (tape.pause_before_end ? VIDEO_STATE_PBEND_ON : + tape.fast_forward ? VIDEO_STATE_FFWD_ON : VIDEO_STATE_PLAY_ON); DrawVideoDisplay(state, 0); @@ -1458,7 +1383,7 @@ static void HandleTapeButtonsExt(int id) // continue playing in normal mode tape.fast_forward = FALSE; tape.warp_forward = FALSE; - tape.pause_before_death = FALSE; + tape.pause_before_end = FALSE; tape.deactivate_display = FALSE; TapeTogglePause(TAPE_TOGGLE_MANUAL); @@ -1474,9 +1399,9 @@ static void HandleTapeButtonsExt(int id) DrawVideoDisplay(VIDEO_STATE_FFWD_ON, 0); } - else if (!tape.pause_before_death) /* FFWD PLAY -> AUTO PAUSE */ + else if (!tape.pause_before_end) /* FFWD PLAY -> AUTO PAUSE */ { - tape.pause_before_death = TRUE; + tape.pause_before_end = TRUE; DrawVideoDisplay(VIDEO_STATE_FFWD_OFF | VIDEO_STATE_PBEND_ON, 0); @@ -1489,7 +1414,7 @@ static void HandleTapeButtonsExt(int id) TapeStopWarpForward(); tape.fast_forward = FALSE; - tape.pause_before_death = FALSE; + tape.pause_before_end = FALSE; DrawVideoDisplay(VIDEO_STATE_PBEND_OFF | VIDEO_STATE_PLAY_ON, 0); }