rnd-20040411-1-src
[rocksndiamonds.git] / src / tape.c
index 7f4545b5c591e172f09735c12c2142b741d063d3..479adfbfc0f2cb4767f73cdc8d76f5f5b2f381b2 100644 (file)
@@ -99,7 +99,7 @@ static struct GadgetInfo *tape_gadget[NUM_TAPE_BUTTONS];
 #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         126
+#define VIDEO_FFWD_SYMBOL_YPOS         193
 #define VIDEO_FFWD_SYMBOL_XSIZE                27
 #define VIDEO_FFWD_SYMBOL_YSIZE                VIDEO_SYMBOL_YSIZE
 
@@ -108,7 +108,7 @@ static struct GadgetInfo *tape_gadget[NUM_TAPE_BUTTONS];
 #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                126
+#define VIDEO_PBEND_SYMBOL_YPOS                221
 #define VIDEO_PBEND_SYMBOL_XSIZE       27
 #define VIDEO_PBEND_SYMBOL_YSIZE       VIDEO_SYMBOL_YSIZE
 
@@ -117,16 +117,16 @@ static struct GadgetInfo *tape_gadget[NUM_TAPE_BUTTONS];
 #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         152
+#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                139
+#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                113
+#define VIDEO_1STEP_SYMBOL_YPOS                139
 #define VIDEO_1STEP_SYMBOL_XSIZE       (VIDEO_SYMBOL_XSIZE - 18)
 #define VIDEO_1STEP_SYMBOL_YSIZE       VIDEO_SYMBOL_YSIZE
 
@@ -654,10 +654,16 @@ void TapeDeactivateDisplayOff(boolean redraw_display)
 /* tape control functions                                                    */
 /* ========================================================================= */
 
-void TapeErase()
+static void TapeSetDate()
 {
   time_t epoch_seconds = time(NULL);
-  struct tm *time = localtime(&epoch_seconds);
+  struct tm *now = localtime(&epoch_seconds);
+
+  tape.date = 10000 * (now->tm_year % 100) + 100 * now->tm_mon + now->tm_mday;
+}
+
+void TapeErase()
+{
   int i;
 
   tape.length = 0;
@@ -670,13 +676,14 @@ void TapeErase()
   tape.pos[tape.counter].delay = 0;
   tape.changed = TRUE;
 
-  tape.date = 10000*(time->tm_year % 100) + 100*time->tm_mon + time->tm_mday;
   tape.random_seed = InitRND(NEW_RANDOMIZE);
 
   tape.file_version = FILE_VERSION_ACTUAL;
   tape.game_version = GAME_VERSION_ACTUAL;
   tape.engine_version = level.game_version;
 
+  TapeSetDate();
+
 #if 0
   printf("::: tape.engine_version = level.game_version = %d \n",
         level.game_version);
@@ -749,7 +756,10 @@ static void TapeAppendRecording()
   tape.recording = TRUE;
   tape.changed = TRUE;
 
-  DrawVideoDisplay(VIDEO_STATE_PLAY_OFF | VIDEO_STATE_REC_ON,0);
+  TapeSetDate();
+
+  DrawVideoDisplay(VIDEO_STATE_DATE_ON, tape.date);
+  DrawVideoDisplay(VIDEO_STATE_PLAY_OFF | VIDEO_STATE_REC_ON, 0);
 }
 
 void TapeHaltRecording()
@@ -973,6 +983,8 @@ byte *TapePlayAction()
        DrawVideoDisplay(VIDEO_STATE_WARP2_ON, VIDEO_DISPLAY_SYMBOL_ONLY);
     }
   }
+#if 0
+  /* !!! this makes things much slower !!! */
   else if (tape.warp_forward)
   {
     if ((FrameCounter / 20) % 2)
@@ -982,6 +994,7 @@ byte *TapePlayAction()
 
     DrawVideoDisplay(VIDEO_STATE_WARP_ON, VIDEO_DISPLAY_SYMBOL_ONLY);
   }
+#endif
 
   if (tape.counter >= tape.length)     /* end of tape reached */
   {
@@ -1139,6 +1152,17 @@ void TapeQuickSave()
 
 void TapeQuickLoad()
 {
+  if (tape.recording && !Request("Stop recording and load tape ?",
+                                REQ_ASK | REQ_STAY_CLOSED))
+  {
+    BlitBitmap(bitmap_db_door, bitmap_db_door,
+              DOOR_GFX_PAGEX2, DOOR_GFX_PAGEY1, DXSIZE, DYSIZE,
+              DOOR_GFX_PAGEX1, DOOR_GFX_PAGEY1);
+    OpenDoor(DOOR_OPEN_1);
+
+    return;
+  }
+
   if (game_status == GAME_MODE_PLAYING || game_status == GAME_MODE_MAIN)
   {
     TapeStop();