X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Ftape.c;h=4bc245234c81d607ab1eb566a24dbc8902b8c7d0;hb=9588c69effe35923d714552e9df1c31baf097bb1;hp=2e0bee8796c51883506316c4302f47f3f72c42a2;hpb=f735e313633757dd62f437beaf48d7daa4a17822;p=rocksndiamonds.git diff --git a/src/tape.c b/src/tape.c index 2e0bee87..4bc24523 100644 --- a/src/tape.c +++ b/src/tape.c @@ -356,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]; @@ -638,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_end) - 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) { @@ -769,6 +785,16 @@ byte *TapePlayAction() } } + if (tape.counter >= tape.length) /* end of tape reached */ + { + if (tape.warp_forward && !tape.auto_play) + TapeTogglePause(TAPE_TOGGLE_MANUAL); + else + TapeStop(); + + return NULL; + } + if (update_video_display && !tape.deactivate_display) { if (tape.pause_before_end) @@ -780,16 +806,6 @@ byte *TapePlayAction() DrawVideoDisplaySymbol(VIDEO_STATE_WARP2_ON); } - if (tape.counter >= tape.length) /* end of tape reached */ - { - if (tape.warp_forward && !tape.auto_play) - TapeTogglePause(TAPE_TOGGLE_MANUAL); - else - TapeStop(); - - return NULL; - } - for (i = 0; i < MAX_PLAYERS; i++) action[i] = tape.pos[tape.counter].action[i];