fixed redraw/fade bugs when redefining the playfield size or position
[rocksndiamonds.git] / src / game.c
index ba066ed9bd6f740064244ccbbbf6d1f775ceded0..7b63ee751bfc090fbb93364d9f12612a937d254c 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)
@@ -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 */
@@ -11074,7 +11075,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];