X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ftape.c;h=0c13baa662c32516b02d2f677a34a3a30928f7aa;hb=924c7a3933d49d4fb53ad39c8f767ac259052404;hp=70e6272a60137df287a3ebc2975cadc02ca44b70;hpb=5dfaa039ed3cb9de43f565346ee4b18b03ec2961;p=rocksndiamonds.git diff --git a/src/tape.c b/src/tape.c index 70e6272a..0c13baa6 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 | \ @@ -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]; @@ -727,57 +668,33 @@ 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_end) - state |= VIDEO_STATE_PBEND(!tape.pausing); - else if (tape.fast_forward) - state |= VIDEO_STATE_FFWD(!tape.pausing); + DrawVideoDisplayPlayState(); - if (tape.playing) - state |= VIDEO_STATE_PLAY_ON; - else - state |= VIDEO_STATE_1STEP(tape.single_step); - - DrawVideoDisplay(state, 0); - - if (tape.warp_forward) + if (tape.deactivate_display) { if (tape.pausing) - { TapeDeactivateDisplayOff(game_status == GAME_MODE_PLAYING); - } - else if (tape.deactivate_display) - { - TapeDeactivateDisplayOn(); - - DrawVideoDisplaySymbol(VIDEO_STATE_WARP_ON); - } else - { - DrawVideoDisplaySymbol(VIDEO_STATE_WARP2_ON); - } + TapeDeactivateDisplayOn(); + } - 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 && @@ -848,9 +765,6 @@ byte *TapePlayAction() { if (TapeTime > tape.length_seconds - TAPE_PAUSE_SECONDS_BEFORE_DEATH) { - tape.fast_forward = FALSE; - tape.pause_before_end = FALSE; - TapeStopWarpForward(); TapeTogglePause(TAPE_TOGGLE_MANUAL); @@ -858,27 +772,38 @@ byte *TapePlayAction() } } - 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); - } - if (tape.counter >= tape.length) /* end of tape reached */ { if (tape.warp_forward && !tape.auto_play) + { + TapeStopWarpForward(); TapeTogglePause(TAPE_TOGGLE_MANUAL); + } else + { TapeStop(); + } return NULL; } + if (update_video_display && !tape.deactivate_display) + { + int state = 0; + + if (tape.warp_forward) + state |= VIDEO_STATE_WARP(update_draw_label_on); + else if (tape.fast_forward) + state |= VIDEO_STATE_FFWD(update_draw_label_on); + + if (tape.pause_before_end) + state |= VIDEO_STATE_PBEND(update_draw_label_on); + + // draw labels and symbols separately to prevent labels overlapping symbols + DrawVideoDisplayLabel(state); + DrawVideoDisplaySymbol(state); + } + for (i = 0; i < MAX_PLAYERS; i++) action[i] = tape.pos[tape.counter].action[i]; @@ -950,43 +875,28 @@ unsigned int GetTapeLengthSeconds() static void TapeStartWarpForward() { + tape.fast_forward = TRUE; tape.warp_forward = TRUE; + tape.deactivate_display = TRUE; - if (!tape.fast_forward && !tape.pause_before_end) - { - tape.pausing = FALSE; - tape.pause_before_end = TRUE; - tape.deactivate_display = TRUE; + tape.pausing = FALSE; - TapeDeactivateDisplayOn(); + TapeDeactivateDisplayOn(); - DrawVideoDisplay(VIDEO_STATE_PBEND_ON, 0); - DrawVideoDisplaySymbol(VIDEO_STATE_WARP_ON); - } - else - { - DrawVideoDisplaySymbol(VIDEO_STATE_WARP2_ON); - } + DrawVideoDisplayPlayState(); } static void TapeStopWarpForward() { - int state = VIDEO_STATE_PAUSE(tape.pausing); - - if (tape.deactivate_display) - tape.pause_before_end = FALSE; - + tape.fast_forward = FALSE; tape.warp_forward = FALSE; tape.deactivate_display = FALSE; - TapeDeactivateDisplayOff(game_status == GAME_MODE_PLAYING); + tape.pause_before_end = FALSE; - state |= VIDEO_STATE_WARP_OFF; - state |= (tape.pause_before_end ? VIDEO_STATE_PBEND_ON : - tape.fast_forward ? VIDEO_STATE_FFWD_ON : - VIDEO_STATE_PLAY_ON); + TapeDeactivateDisplayOff(game_status == GAME_MODE_PLAYING); - DrawVideoDisplay(state, 0); + DrawVideoDisplayPlayState(); } static void TapeSingleStep()