improved tape button logic (mainly warp modes) of the tape recorder
[rocksndiamonds.git] / src / tools.c
index 6dc9129afa775e788a8f9bbefc36dafef01f8fd5..4080f2d2e2621b0c1efbad149a389ab9be829450 100644 (file)
@@ -550,6 +550,10 @@ void BackToFront()
   if (redraw_mask & REDRAW_FPS)
     DrawFramesPerSecond();
 
+  // remove playfield redraw before potentially merging with doors redraw
+  if (DrawingDeactivated(REAL_SX, REAL_SY, FULL_SXSIZE, FULL_SYSIZE))
+    redraw_mask &= ~REDRAW_FIELD;
+
   // redraw complete window if both playfield and (some) doors need redraw
   if (redraw_mask & REDRAW_FIELD && redraw_mask & REDRAW_DOORS)
     redraw_mask = REDRAW_ALL;
@@ -583,14 +587,16 @@ void BackToFront()
       x2 = MAX(x2, DX + DXSIZE);
       y2 = MAX(y2, DY + DYSIZE);
     }
-    else if (redraw_mask & REDRAW_DOOR_2)
+
+    if (redraw_mask & REDRAW_DOOR_2)
     {
       x1 = MIN(x1, VX);
       y1 = MIN(y1, VY);
       x2 = MAX(x2, VX + VXSIZE);
       y2 = MAX(y2, VY + VYSIZE);
     }
-    else if (redraw_mask & REDRAW_DOOR_3)
+
+    if (redraw_mask & REDRAW_DOOR_3)
     {
       x1 = MIN(x1, EX);
       y1 = MIN(y1, EY);
@@ -733,6 +739,9 @@ static void SetScreenStates_AfterFadingIn()
 
 static void SetScreenStates_BeforeFadingOut()
 {
+  // required if "fade_mask != redraw_mask" (fading only affects fade area)
+  BackToFront();
+
   // store new target screen (to use correct masked border for fading)
   gfx.fade_border_target_status = game_status;