rocksndiamonds-3.1.2
[rocksndiamonds.git] / src / tape.c
index e8fb1b7e4d86410763c02faa029bb28a912b935d..172af415b67bdf451da87957f3dd39926853aa0d 100644 (file)
@@ -345,6 +345,102 @@ void DrawVideoDisplay(unsigned long state, unsigned long value)
     },
   };
 
+#if 0
+  if (state & VIDEO_STATE_FFWD_OFF)
+  {
+#if 1
+    int cx = DOOR_GFX_PAGEX3, cy = DOOR_GFX_PAGEY2;
+
+    if (value != VIDEO_DISPLAY_SYMBOL_ONLY)
+      BlitBitmap(graphic_info[IMG_GLOBAL_DOOR].bitmap, drawto,
+                cx + VIDEO_LABEL_XPOS,
+                cy + VIDEO_LABEL_YPOS,
+                VIDEO_LABEL_XSIZE,
+                VIDEO_LABEL_YSIZE,
+                VX + VIDEO_LABEL_XPOS,
+                VY + VIDEO_LABEL_YPOS);
+
+    cx = DOOR_GFX_PAGEX3;
+    cy = DOOR_GFX_PAGEY2;
+
+    if (value != VIDEO_DISPLAY_LABEL_ONLY)
+      BlitBitmap(graphic_info[IMG_GLOBAL_DOOR].bitmap, drawto,
+                cx + VIDEO_FFWD_SYMBOL_XPOS,
+                cy + VIDEO_SYMBOL_YPOS,
+                VIDEO_FFWD_SYMBOL_XSIZE,
+                VIDEO_FFWD_SYMBOL_YSIZE,
+                VX + VIDEO_SYMBOL_XPOS,
+                VY + VIDEO_SYMBOL_YPOS);
+#else
+    int cx = DOOR_GFX_PAGEX3, cy = DOOR_GFX_PAGEY2;
+
+    BlitBitmap(graphic_info[IMG_GLOBAL_DOOR].bitmap, drawto,
+              cx + VIDEO_PLAY_SYMBOL_XPOS - 9,
+              cy + VIDEO_PLAY_SYMBOL_YPOS,
+              VIDEO_PLAY_SYMBOL_XSIZE - 2,
+              VIDEO_PLAY_SYMBOL_YSIZE,
+              VX + VIDEO_PLAY_SYMBOL_XPOS - 9,
+              VY + VIDEO_PLAY_SYMBOL_YPOS);
+#endif
+  }
+#endif
+
+#if 0
+  if (state & VIDEO_STATE_PBEND_OFF)
+  {
+#if 1
+    int cx = DOOR_GFX_PAGEX3, cy = DOOR_GFX_PAGEY2;
+
+    if (value != VIDEO_DISPLAY_SYMBOL_ONLY)
+      BlitBitmap(graphic_info[IMG_GLOBAL_DOOR].bitmap, drawto,
+                cx + VIDEO_LABEL_XPOS,
+                cy + VIDEO_LABEL_YPOS,
+                VIDEO_LABEL_XSIZE,
+                VIDEO_LABEL_YSIZE,
+                VX + VIDEO_LABEL_XPOS,
+                VY + VIDEO_LABEL_YPOS);
+
+    cx = DOOR_GFX_PAGEX3;
+    cy = DOOR_GFX_PAGEY2;
+
+    if (value != VIDEO_DISPLAY_LABEL_ONLY)
+      BlitBitmap(graphic_info[IMG_GLOBAL_DOOR].bitmap, drawto,
+                cx + VIDEO_PBEND_SYMBOL_XPOS,
+                cy + VIDEO_SYMBOL_YPOS,
+                VIDEO_PBEND_SYMBOL_XSIZE,
+                VIDEO_PBEND_SYMBOL_YSIZE,
+                VX + VIDEO_PBEND_SYMBOL_XPOS,
+                VY + VIDEO_SYMBOL_YPOS);
+#else
+    int cx = DOOR_GFX_PAGEX3, cy = DOOR_GFX_PAGEY2;
+
+    BlitBitmap(graphic_info[IMG_GLOBAL_DOOR].bitmap, drawto,
+              cx + VIDEO_REC_LABEL_XPOS,
+              cy + VIDEO_REC_LABEL_YPOS,
+              VIDEO_PBEND_LABEL_XSIZE,
+              VIDEO_PBEND_LABEL_YSIZE,
+              VX + VIDEO_REC_LABEL_XPOS,
+              VY + VIDEO_REC_LABEL_YPOS);
+#endif
+  }
+#endif
+
+#if 0
+  if (state & VIDEO_STATE_1STEP_OFF)
+  {
+    int cx = DOOR_GFX_PAGEX3, cy = DOOR_GFX_PAGEY2;
+
+    if (value != VIDEO_DISPLAY_LABEL_ONLY)
+      BlitBitmap(graphic_info[IMG_GLOBAL_DOOR].bitmap, drawto,
+                cx + VIDEO_1STEP_SYMBOL_XPOS,
+                cy + VIDEO_SYMBOL_YPOS,
+                VIDEO_1STEP_SYMBOL_XSIZE,
+                VIDEO_1STEP_SYMBOL_YSIZE,
+                VX + VIDEO_1STEP_SYMBOL_XPOS,
+                VY + VIDEO_SYMBOL_YPOS);
+  }
+#endif
+
   for (k = 0; k < NUM_TAPE_FUNCTION_STATES; k++)       /* on or off states */
   {
     for (i = 0; i < NUM_TAPE_FUNCTIONS; i++)           /* record, play, ... */
@@ -380,6 +476,102 @@ void DrawVideoDisplay(unsigned long state, unsigned long value)
     }
   }
 
+#if 0
+  if (state & VIDEO_STATE_FFWD_ON)
+  {
+#if 1
+    int cx = DOOR_GFX_PAGEX6, cy = DOOR_GFX_PAGEY1;
+
+    if (value != VIDEO_DISPLAY_SYMBOL_ONLY)
+      BlitBitmap(graphic_info[IMG_GLOBAL_DOOR].bitmap, drawto,
+                cx + VIDEO_FFWD_LABEL_XPOS,
+                cy + VIDEO_FFWD_LABEL_YPOS,
+                VIDEO_LABEL_XSIZE,
+                VIDEO_LABEL_YSIZE,
+                VX + VIDEO_LABEL_XPOS,
+                VY + VIDEO_LABEL_YPOS);
+
+    cx = DOOR_GFX_PAGEX6;
+    cy = DOOR_GFX_PAGEY1;
+
+    if (value != VIDEO_DISPLAY_LABEL_ONLY)
+      BlitBitmap(graphic_info[IMG_GLOBAL_DOOR].bitmap, drawto,
+                cx + VIDEO_FFWD_SYMBOL_XPOS,
+                cy + VIDEO_FFWD_SYMBOL_YPOS,
+                VIDEO_FFWD_SYMBOL_XSIZE,
+                VIDEO_FFWD_SYMBOL_YSIZE,
+                VX + VIDEO_SYMBOL_XPOS,
+                VY + VIDEO_SYMBOL_YPOS);
+#else
+    int cx = DOOR_GFX_PAGEX4, cy = DOOR_GFX_PAGEY2;
+
+    BlitBitmap(graphic_info[IMG_GLOBAL_DOOR].bitmap, drawto,
+              cx + VIDEO_PLAY_SYMBOL_XPOS,
+              cy + VIDEO_PLAY_SYMBOL_YPOS,
+              VIDEO_PLAY_SYMBOL_XSIZE - 2,
+              VIDEO_PLAY_SYMBOL_YSIZE,
+              VX + VIDEO_PLAY_SYMBOL_XPOS - 9,
+              VY + VIDEO_PLAY_SYMBOL_YPOS);
+#endif
+  }
+#endif
+
+#if 0
+  if (state & VIDEO_STATE_PBEND_ON)
+  {
+#if 1
+    int cx = DOOR_GFX_PAGEX6, cy = DOOR_GFX_PAGEY1;
+
+    if (value != VIDEO_DISPLAY_SYMBOL_ONLY)
+      BlitBitmap(graphic_info[IMG_GLOBAL_DOOR].bitmap, drawto,
+                cx + VIDEO_PBEND_LABEL_XPOS,
+                cy + VIDEO_PBEND_LABEL_YPOS,
+                VIDEO_LABEL_XSIZE,
+                VIDEO_LABEL_YSIZE,
+                VX + VIDEO_LABEL_XPOS,
+                VY + VIDEO_LABEL_YPOS);
+
+    cx = DOOR_GFX_PAGEX6;
+    cy = DOOR_GFX_PAGEY1;
+
+    if (value != VIDEO_DISPLAY_LABEL_ONLY)
+      BlitBitmap(graphic_info[IMG_GLOBAL_DOOR].bitmap, drawto,
+                cx + VIDEO_PBEND_SYMBOL_XPOS,
+                cy + VIDEO_PBEND_SYMBOL_YPOS,
+                VIDEO_PBEND_SYMBOL_XSIZE,
+                VIDEO_PBEND_SYMBOL_YSIZE,
+                VX + VIDEO_SYMBOL_XPOS,
+                VY + VIDEO_SYMBOL_YPOS);
+#else
+    int cx = DOOR_GFX_PAGEX6, cy = DOOR_GFX_PAGEY1;
+
+    BlitBitmap(graphic_info[IMG_GLOBAL_DOOR].bitmap, drawto,
+              cx + VIDEO_PBEND_LABEL_XPOS,
+              cy + VIDEO_PBEND_LABEL_YPOS,
+              VIDEO_PBEND_LABEL_XSIZE,
+              VIDEO_PBEND_LABEL_YSIZE,
+              VX + VIDEO_REC_LABEL_XPOS,
+              VY + VIDEO_REC_LABEL_YPOS);
+#endif
+  }
+#endif
+
+#if 0
+  if (state & VIDEO_STATE_1STEP_ON)
+  {
+    int cx = DOOR_GFX_PAGEX6, cy = DOOR_GFX_PAGEY1;
+
+    if (value != VIDEO_DISPLAY_LABEL_ONLY)
+      BlitBitmap(graphic_info[IMG_GLOBAL_DOOR].bitmap, drawto,
+                cx + VIDEO_1STEP_SYMBOL_XPOS,
+                cy + VIDEO_1STEP_SYMBOL_YPOS,
+                VIDEO_1STEP_SYMBOL_XSIZE,
+                VIDEO_1STEP_SYMBOL_YSIZE,
+                VX + VIDEO_1STEP_SYMBOL_XPOS,
+                VY + VIDEO_SYMBOL_YPOS);
+  }
+#endif
+
   if (state & VIDEO_STATE_DATE_ON)
   {
     int tag = value % 100;
@@ -405,7 +597,16 @@ void DrawVideoDisplay(unsigned long state, unsigned long value)
             int2str(sec, 2), FONT_TAPE_RECORDER);
   }
 
+#if 1
   redraw_mask |= REDRAW_DOOR_2;
+#else
+  if (state & VIDEO_STATE_DATE)
+    redraw_mask |= REDRAW_VIDEO_1;
+  if ((state & ~VIDEO_STATE_DATE) & VIDEO_STATE)
+    redraw_mask |= REDRAW_VIDEO_2;
+  if (state & VIDEO_PRESS)
+    redraw_mask |= REDRAW_VIDEO_3;
+#endif
 }
 
 void DrawCompleteVideoDisplay()
@@ -483,6 +684,11 @@ void TapeErase()
 
   TapeSetDate();
 
+#if 0
+  printf("::: tape.engine_version = level.game_version = %d \n",
+        level.game_version);
+#endif
+
   for (i = 0; i < MAX_PLAYERS; i++)
     tape.player_participates[i] = FALSE;
 }
@@ -505,19 +711,13 @@ static void TapeRewind()
   InitRND(tape.random_seed);
 }
 
-static void TapeSetRandomSeed(long random_seed)
-{
-  tape.random_seed = InitRND(random_seed);
-}
-
-void TapeStartRecording(long random_seed)
+void TapeStartRecording()
 {
   if (!TAPE_IS_STOPPED(tape))
     TapeStop();
 
   TapeErase();
   TapeRewind();
-  TapeSetRandomSeed(random_seed);
 
   tape.recording = TRUE;
 
@@ -532,7 +732,7 @@ void TapeStartRecording(long random_seed)
 
 static void TapeStartGameRecording()
 {
-  TapeStartRecording(NEW_RANDOMIZE);
+  TapeStartRecording();
 
 #if defined(NETWORK_AVALIABLE)
   if (options.network)
@@ -576,6 +776,11 @@ void TapeHaltRecording()
 
 void TapeStopRecording()
 {
+#if 0
+  if (!tape.recording)
+    return;
+#endif
+
   TapeHaltRecording();
 
   tape.recording = FALSE;
@@ -589,8 +794,13 @@ void TapeRecordAction(byte action[MAX_PLAYERS])
 {
   int i;
 
-  if (!tape.recording)         /* (record action even when tape is paused) */
+#if 1
+  if (!tape.recording)         /* record action even when tape is paused! */
     return;
+#else
+  if (!tape.recording || tape.pausing)
+    return;
+#endif
 
   if (tape.counter >= MAX_TAPE_LEN - 1)
   {
@@ -598,6 +808,10 @@ void TapeRecordAction(byte action[MAX_PLAYERS])
     return;
   }
 
+#if 0
+  printf("::: %05d: recording action: %d\n", FrameCounter, action[0]);
+#endif
+
   if (tape.pos[tape.counter].delay > 0)                /* already stored action */
   {
     boolean changed_events = FALSE;
@@ -617,6 +831,11 @@ void TapeRecordAction(byte action[MAX_PLAYERS])
 
   if (tape.pos[tape.counter].delay == 0)       /* store new action */
   {
+
+#if 0
+    printf("::: %05d: new sequence\n", FrameCounter);
+#endif
+
     for (i = 0; i < MAX_PLAYERS; i++)
       tape.pos[tape.counter].action[i] = action[i];
 
@@ -628,6 +847,11 @@ void TapeTogglePause(boolean toggle_manual)
 {
   int state = 0;
 
+#if 0
+  if (!tape.recording && !tape.playing)
+    return;
+#endif
+
   if (tape.pause_before_death)
     state |= VIDEO_STATE_PBEND_OFF;
   else if (tape.fast_forward)
@@ -648,6 +872,11 @@ void TapeTogglePause(boolean toggle_manual)
 
   DrawVideoDisplay(state, 0);
 
+#if 0
+  if (tape.pausing)
+    DrawVideoDisplay(VIDEO_STATE_PAUSE_ON, 0);
+#endif
+
   if (tape.warp_forward)
   {
     TapeStopWarpForward();
@@ -657,6 +886,9 @@ void TapeTogglePause(boolean toggle_manual)
       tape.quick_resume = FALSE;
 
       TapeAppendRecording();
+#if 0
+      TapeTogglePause(toggle_manual);
+#endif
     }
   }
 }
@@ -693,6 +925,11 @@ static void TapeStartGamePlaying()
 
 void TapeStopPlaying()
 {
+#if 0
+  if (!tape.playing)
+    return;
+#endif
+
   tape.playing = FALSE;
   tape.pausing = FALSE;
 
@@ -785,11 +1022,22 @@ byte *TapePlayAction()
     tape.delay_played = 0;
   }
 
+#if 0
+  printf("::: %05d: replaying action: %d\n", FrameCounter, action[0]);
+#endif
+
   return action;
 }
 
 void TapeStop()
 {
+#if 0
+  if (tape.recording)
+    printf("::: stopped recording: %d\n", FrameCounter);
+  else if (tape.playing)
+    printf("::: stopped playing:   %d\n\n", FrameCounter);
+#endif
+
   TapeStopRecording();
   TapeStopPlaying();
 
@@ -825,6 +1073,7 @@ static void TapeStartWarpForward()
 {
   tape.warp_forward = TRUE;
 
+#if 1
   if (!tape.fast_forward && !tape.pause_before_death)
   {
     tape.pausing = FALSE;
@@ -832,6 +1081,15 @@ static void TapeStartWarpForward()
 
     TapeDeactivateDisplayOn();
   }
+#else
+  if (!tape.fast_forward || tape.pause_before_death)
+  {
+    tape.pausing = FALSE;
+    tape.deactivate_display = TRUE;
+
+    TapeDeactivateDisplayOn();
+  }
+#endif
 
   if (tape.fast_forward || tape.pause_before_death)
     DrawVideoDisplay(VIDEO_STATE_WARP_ON, VIDEO_DISPLAY_SYMBOL_ONLY);
@@ -848,6 +1106,16 @@ static void TapeStopWarpForward()
 
   TapeDeactivateDisplayOff(game_status == GAME_MODE_PLAYING);
 
+#if 0
+#if 1
+  if (game_status == GAME_MODE_PLAYING)
+#endif
+  {
+    RedrawPlayfield(TRUE, 0,0,0,0);
+    DrawGameDoorValues();
+  }
+#endif
+
   if (tape.pause_before_death)
     state |= VIDEO_STATE_WARP_OFF | VIDEO_STATE_PBEND_ON;
   else if (tape.fast_forward)
@@ -1029,15 +1297,12 @@ void AutoPlayTape()
       continue;
     }
 
-#if 0
-    /* ACTIVATE THIS FOR LOADING/TESTING OF LEVELS ONLY */
-    printf("(only testing level)\n");
-    continue;
-#endif
-
     LoadSolutionTape(level_nr);
-
+#if 1
     if (tape.no_valid_file)
+#else
+    if (TAPE_IS_EMPTY(tape))
+#endif
     {
       num_tape_missing++;
       if (level_nr >= 0 && level_nr < MAX_TAPES_PER_SET)
@@ -1266,6 +1531,15 @@ static void HandleTapeButtons(struct GadgetInfo *gi)
        else                                    /* WARP FORWARD PLAY -> PLAY */
        {
          TapeStopWarpForward();
+
+#if 0
+         if (tape.pause_before_death)
+           DrawVideoDisplay(VIDEO_STATE_WARP_OFF | VIDEO_STATE_PLAY_ON, 0);
+         else if (tape.fast_forward)
+           DrawVideoDisplay(VIDEO_STATE_WARP_OFF | VIDEO_STATE_FFWD_ON, 0);
+         else
+           DrawVideoDisplay(VIDEO_STATE_WARP_OFF | VIDEO_STATE_PBEND_ON, 0);
+#endif
        }
       }
       else if (tape.recording)
@@ -1314,17 +1588,28 @@ static void HandleTapeButtons(struct GadgetInfo *gi)
        else if (!tape.pause_before_death)      /* FFWD PLAY -> AUTO PAUSE */
        {
          tape.pause_before_death = TRUE;
+#if 1
          DrawVideoDisplay(VIDEO_STATE_FFWD_OFF | VIDEO_STATE_PBEND_ON, 0);
+#else
+         DrawVideoDisplay(VIDEO_STATE_PBEND_ON, VIDEO_DISPLAY_LABEL_ONLY);
+#endif
        }
        else                                    /* AUTO PAUSE -> NORMAL PLAY */
        {
+#if 1
          if (tape.warp_forward)
            TapeStopWarpForward();
-
+#else
+         tape.warp_forward = FALSE;
+#endif
          tape.fast_forward = FALSE;
          tape.pause_before_death = FALSE;
 
+#if 1
          DrawVideoDisplay(VIDEO_STATE_PBEND_OFF | VIDEO_STATE_PLAY_ON, 0);
+#else
+         DrawVideoDisplay(VIDEO_STATE_FFWD_OFF | VIDEO_STATE_PBEND_OFF, 0);
+#endif
        }
       }
       break;