cleanup of tape recorder display activation/deactivation
[rocksndiamonds.git] / src / tape.c
index 2e0bee8796c51883506316c4302f47f3f72c42a2..24adbca12074afb8ab928d583a0dc8f99e7827e6 100644 (file)
@@ -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,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);
-
-  if (tape.playing)
-    state |= VIDEO_STATE_PLAY_ON;
-  else
-    state |= VIDEO_STATE_1STEP(tape.single_step);
-
-  DrawVideoDisplay(state, 0);
+  DrawVideoDisplayPlayState();
 
-  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 &&
@@ -769,6 +775,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 +796,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];