- BlitBitmap(screenBitmap, target_bitmap, x, y,
- MAX_BUF_XSIZE * TILEX - x, MAX_BUF_YSIZE * TILEY - y,
- SX, SY);
- BlitBitmap(screenBitmap, target_bitmap, 0, y,
- x - 2 * TILEX, MAX_BUF_YSIZE * TILEY - y,
- SX + MAX_BUF_XSIZE * TILEX - x, SY);
- BlitBitmap(screenBitmap, target_bitmap, x, 0,
- MAX_BUF_XSIZE * TILEX - x, y - 2 * TILEY,
- SX, SY + MAX_BUF_YSIZE * TILEY - y);
- BlitBitmap(screenBitmap, target_bitmap, 0, 0,
- x - 2 * TILEX, y - 2 * TILEY,
- SX + MAX_BUF_XSIZE * TILEX - x, SY + MAX_BUF_YSIZE * TILEY - y);
- }
-#endif
-}
-
-void BackToFront_EM(void)
-{
- static int screen_x_last = -1, screen_y_last = -1;
- static boolean scrolling_last = FALSE;
- int left = screen_x / TILEX;
- int top = screen_y / TILEY;
-#if 1
- boolean scrolling = (screen_x != screen_x_last || screen_y != screen_y_last);
-#else
- boolean scrolling = (screen_x % TILEX != 0 || screen_y % TILEY != 0);
-#endif
- int x, y;
-
-#if 0
- printf("::: %d, %d\n", screen_x, screen_y);
-#endif
-
- SyncDisplay();
-
- if (redraw_tiles > REDRAWTILES_THRESHOLD || scrolling || scrolling_last)
- {
- /* blit all (up to four) parts of the scroll buffer to the backbuffer */
- BlitScreenToBitmap_EM(backbuffer);
-
- /* blit the completely updated backbuffer to the window (in one blit) */
- BlitBitmap(backbuffer, window, SX, SY, SXSIZE, SYSIZE, SX, SY);
- }
- else
- {
-#if 1
-#if 1
- boolean half_shifted_x = (screen_x % TILEX != 0);
- boolean half_shifted_y = (screen_y % TILEY != 0);
-#else
- boolean half_shifted_x = (EVEN(SCR_FIELDX) && screen_x % TILEX != 0);
- boolean half_shifted_y = (EVEN(SCR_FIELDY) && screen_y % TILEY != 0);
-#endif
-
- int sx, sy, sxsize, sysize;
- int xsize = SXSIZE;
- int ysize = SYSIZE;
- int full_xsize = lev.width * TILEX;
- int full_ysize = lev.height * TILEY;
-
- sxsize = (full_xsize < xsize ? full_xsize : xsize);
- sysize = (full_ysize < ysize ? full_ysize : ysize);
- sx = SX + (full_xsize < xsize ? (xsize - full_xsize) / 2 : 0);
- sy = SY + (full_ysize < ysize ? (ysize - full_ysize) / 2 : 0);
-
-#if 0
-#if 1
- printf("::: %d, %d\n", EVEN(SCR_FIELDX), screen_x);
-#else
- half_shifted_x = TRUE;
- half_shifted_y = FALSE;
-#endif
-#endif
-
- int x1 = 0, x2 = SCR_FIELDX - (half_shifted_x ? 0 : 1);
- int y1 = 0, y2 = SCR_FIELDY - (half_shifted_y ? 0 : 1);
- int scroll_xoffset = (half_shifted_x ? TILEX / 2 : 0);
- int scroll_yoffset = (half_shifted_y ? TILEY / 2 : 0);
-
- InitGfxClipRegion(TRUE, SX, SY, SXSIZE, SYSIZE);
-
- for (x = x1; x <= x2; x++)
- {
- for (y = y1; y <= y2; y++)
- {
- int xx = (left + x) % MAX_BUF_XSIZE;
- int yy = (top + y) % MAX_BUF_YSIZE;
-
- if (redraw[xx][yy])
- BlitBitmap(screenBitmap, window,
- xx * TILEX, yy * TILEY, TILEX, TILEY,
- sx + x * TILEX - scroll_xoffset,
- sy + y * TILEY - scroll_yoffset);
- }
- }
-
- InitGfxClipRegion(FALSE, -1, -1, -1, -1);
-
-#else
-
- for (x = 0; x < SCR_FIELDX; x++)
- {
- for (y = 0; y < SCR_FIELDY; y++)
- {
- int xx = (left + x) % MAX_BUF_XSIZE;
- int yy = (top + y) % MAX_BUF_YSIZE;
-
- if (redraw[xx][yy])
- BlitBitmap(screenBitmap, window,
- xx * TILEX, yy * TILEY, TILEX, TILEY,
- SX + x * TILEX, SY + y * TILEY);
- }
- }
-#endif