fixed bug with short delay in crumbling border elements around explosion
[rocksndiamonds.git] / src / tools.c
index 50846337d52f07e1c19e04769ff4eef12c436ea7..f2cffa56ba65aad73edd527e338b5a2b08eff30e 100644 (file)
@@ -1153,13 +1153,18 @@ void SetBackgroundImage(int graphic, int redraw_mask)
   if (graphic == IMG_UNDEFINED)
     g = &g_undefined;
 
+  // always use original size bitmap for backgrounds, if existing
+  Bitmap *bitmap = (g->bitmaps != NULL &&
+                   g->bitmaps[IMG_BITMAP_PTR_ORIGINAL] != NULL ?
+                   g->bitmaps[IMG_BITMAP_PTR_ORIGINAL] : g->bitmap);
+
   // remove every mask before setting mask for window, and
   // remove window area mask before setting mask for main or door area
   int remove_mask = (redraw_mask == REDRAW_ALL ? 0xffff : REDRAW_ALL);
 
   // (!!! TO BE FIXED: The whole REDRAW_* system really sucks! !!!)
   SetBackgroundBitmap(NULL, remove_mask, 0, 0, 0, 0);  // !!! FIX THIS !!!
-  SetBackgroundBitmap(g->bitmap, redraw_mask,
+  SetBackgroundBitmap(bitmap, redraw_mask,
                      g->src_x, g->src_y,
                      g->width, g->height);
 }
@@ -3322,14 +3327,15 @@ static void ShowEnvelopeRequest(char *text, unsigned int req_state, int action)
   if (game_status == GAME_MODE_PLAYING)
     BlitScreenToBitmap(backbuffer);
 
+  if (game_status == GAME_MODE_PLAYING || action == ACTION_OPENING)
+    BlitBitmap(backbuffer, bitmap_db_store_1, 0, 0, WIN_XSIZE, WIN_YSIZE, 0, 0);
+
   SetDrawtoField(DRAW_TO_BACKBUFFER);
 
   // SetDrawBackgroundMask(REDRAW_NONE);
 
   if (action == ACTION_OPENING)
   {
-    BlitBitmap(backbuffer, bitmap_db_store_1, 0, 0, WIN_XSIZE, WIN_YSIZE, 0, 0);
-
     if (req_state & REQ_ASK)
     {
       MapGadget(tool_gadget[TOOL_CTRL_ID_YES]);