fixed bug not updating game panel values in visible warp forward mode
[rocksndiamonds.git] / src / game.c
index ba066ed9bd6f740064244ccbbbf6d1f775ceded0..57c7b87326383a566c1e09974e3d4d1aafa928e8 100644 (file)
@@ -2519,17 +2519,11 @@ void DisplayGameControlValues()
        height = graphic_info[graphic].height * size / TILESIZE;
 
        if (draw_masked)
-       {
-         SetClipOrigin(src_bitmap, src_bitmap->stored_clip_gc,
-                       dst_x - src_x, dst_y - src_y);
          BlitBitmapMasked(src_bitmap, drawto, src_x, src_y, width, height,
                           dst_x, dst_y);
-       }
        else
-       {
          BlitBitmap(src_bitmap, drawto, src_x, src_y, width, height,
                     dst_x, dst_y);
-       }
       }
     }
     else if (type == TYPE_STRING)
@@ -2581,7 +2575,7 @@ void DisplayGameControlValues()
 
 void UpdateAndDisplayGameControlValues()
 {
-  if (tape.warp_forward)
+  if (tape.deactivate_display)
     return;
 
   UpdateGameControlValues();
@@ -3915,6 +3909,14 @@ void InitGame()
 
   FadeIn(REDRAW_FIELD);
 
+#if 1
+  // full screen redraw is required at this point in the following cases:
+  // - special editor door undrawn when game was started from level editor
+  // - drawing area (playfield) was changed and has to be removed completely
+  redraw_mask = REDRAW_ALL;
+  BackToFront();
+#endif
+
   if (!game.restart_level)
   {
     /* copy default game door content to main double buffer */
@@ -5007,7 +5009,6 @@ void DrawRelocateScreen(int old_x, int old_y, int x, int y, int move_dir,
 
       /* scroll in two steps of half tile size to make things smoother */
       BlitBitmap(drawto_field, window, fx, fy, SXSIZE, SYSIZE, SX, SY);
-      FlushDisplay();
       Delay(wait_delay_value);
 
       /* scroll second step to align at full tile size */
@@ -10831,6 +10832,9 @@ static void CheckLevelTime()
       DrawVideoDisplay(VIDEO_STATE_TIME_ON, TapeTime);
   }
 
+  if (tape.recording || tape.playing)
+    DrawVideoDisplay(VIDEO_STATE_FRAME_ON, FrameCounter);
+
   UpdateAndDisplayGameControlValues();
 }
 
@@ -11074,7 +11078,8 @@ void GameActions()
     TapeRecordAction(tape_action);
 
 #if USE_NEW_PLAYER_ASSIGNMENTS
-  if (game.team_mode)
+  // !!! also map player actions in single player mode !!!
+  // if (game.team_mode)
   {
     byte mapped_action[MAX_PLAYERS];
 
@@ -14695,7 +14700,7 @@ boolean CheckEngineSnapshot()
 static struct
 {
   int graphic;
-  struct Rect *pos;
+  struct XY *pos;
   int gadget_id;
   char *infotext;
 } gamebutton_info[NUM_GAME_BUTTONS] =
@@ -14741,7 +14746,7 @@ void CreateGameButtons()
   for (i = 0; i < NUM_GAME_BUTTONS; i++)
   {
     struct GraphicInfo *gfx = &graphic_info[gamebutton_info[i].graphic];
-    struct Rect *pos = gamebutton_info[i].pos;
+    struct XY *pos = gamebutton_info[i].pos;
     struct GadgetInfo *gi;
     int button_type;
     boolean checked;