added generic solution for naming conventions of extra graphic definitions
[rocksndiamonds.git] / src / tape.c
index bb0f08f8112ec4e065aa8ff28f2b2a4dab3e7e59..c10edefc986db553da8af9b5812452910c84f29c 100644 (file)
@@ -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 },
     },
   };
 
@@ -493,7 +493,7 @@ void TapeDeactivateDisplayOff(boolean redraw_display)
 
   if (redraw_display)
   {
-    RedrawPlayfield(TRUE, 0,0,0,0);
+    RedrawPlayfield();
     DrawGameDoorValues();
   }
 }
@@ -747,7 +747,9 @@ void TapeTogglePause(boolean toggle_manual)
     }
   }
 
-  if (CheckEngineSnapshotList())
+  if (setup.show_snapshot_buttons &&
+      game_status == GAME_MODE_PLAYING &&
+      CheckEngineSnapshotList())
   {
     if (tape.pausing)
       MapUndoRedoButtons();
@@ -1123,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);
@@ -1195,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;
   }
@@ -1237,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"
   }
 };
@@ -1412,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;