X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame_em%2Fgraphics.c;h=5e53a433708cac6e390b9000cb28266d5aa2d298;hb=931481fe085a820997fc0184263ced9d6475aea5;hp=ff6e4c6c9aced59ab9c596449eae3dfd7e424533;hpb=1d3eff06cde10309320341fa92abec5b14f1c6f6;p=rocksndiamonds.git diff --git a/src/game_em/graphics.c b/src/game_em/graphics.c index ff6e4c6c..5e53a433 100644 --- a/src/game_em/graphics.c +++ b/src/game_em/graphics.c @@ -65,6 +65,22 @@ void BlitScreenToBitmap_EM(Bitmap *target_bitmap) { int x = screen_x % (MAX_BUF_XSIZE * TILEX); int y = screen_y % (MAX_BUF_YSIZE * TILEY); + int sx, sy, sxsize, sysize; + int xsize = SXSIZE; + int ysize = SYSIZE; + int full_xsize = lev.width * TILEX; + int full_ysize = lev.height * TILEY; + +#if 0 + printf("::: %d, %d\n", screenBitmap->width, screenBitmap->height); + printf("::: %d / %d, %d / %d\n", + MAX_BUF_XSIZE, MAX_BUF_YSIZE, SXSIZE, SYSIZE); +#endif + + 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 printf("::: %d, %d\n", screenBitmap->width, screenBitmap->height); @@ -72,6 +88,46 @@ void BlitScreenToBitmap_EM(Bitmap *target_bitmap) return; #endif +#if 1 + if (x < 2 * TILEX && y < 2 * TILEY) + { + BlitBitmap(screenBitmap, target_bitmap, x, y, + sxsize, sysize, sx, sy); + } + else if (x < 2 * TILEX && y >= 2 * TILEY) + { + BlitBitmap(screenBitmap, target_bitmap, x, y, + sxsize, MAX_BUF_YSIZE * TILEY - y, + sx, sy); + BlitBitmap(screenBitmap, target_bitmap, x, 0, + sxsize, y - 2 * TILEY, + sx, sy + MAX_BUF_YSIZE * TILEY - y); + } + else if (x >= 2 * TILEX && y < 2 * TILEY) + { + BlitBitmap(screenBitmap, target_bitmap, x, y, + MAX_BUF_XSIZE * TILEX - x, sysize, + sx, sy); + BlitBitmap(screenBitmap, target_bitmap, 0, y, + x - 2 * TILEX, sysize, + sx + MAX_BUF_XSIZE * TILEX - x, sy); + } + else + { + 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); + } +#else if (x < 2 * TILEX && y < 2 * TILEY) { BlitBitmap(screenBitmap, target_bitmap, x, y, @@ -110,6 +166,7 @@ void BlitScreenToBitmap_EM(Bitmap *target_bitmap) x - 2 * TILEX, y - 2 * TILEY, SX + MAX_BUF_XSIZE * TILEX - x, SY + MAX_BUF_YSIZE * TILEY - y); } +#endif } void BackToFront_EM(void) @@ -150,6 +207,22 @@ void BackToFront_EM(void) boolean half_shifted_y = (EVEN(SCR_FIELDY) && screen_y % TILEY != 0); #endif + int sx, sy; +#if 0 + int sxsize, sysize; +#endif + int xsize = SXSIZE; + int ysize = SYSIZE; + int full_xsize = lev.width * TILEX; + int full_ysize = lev.height * TILEY; + +#if 0 + sxsize = (full_xsize < xsize ? full_xsize : xsize); + sysize = (full_ysize < ysize ? full_ysize : ysize); +#endif + 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); @@ -176,8 +249,8 @@ void BackToFront_EM(void) if (redraw[xx][yy]) BlitBitmap(screenBitmap, window, xx * TILEX, yy * TILEY, TILEX, TILEY, - SX + x * TILEX - scroll_xoffset, - SY + y * TILEY - scroll_yoffset); + sx + x * TILEX - scroll_xoffset, + sy + y * TILEY - scroll_yoffset); } } @@ -546,9 +619,9 @@ static void blitplayer(struct PLAYER *ply) int new_x = old_x + SIGN(dx); int new_y = old_y + SIGN(dy); int old_sx = old_x % MAX_BUF_XSIZE; - int old_sy = old_y % MAX_BUF_XSIZE; + int old_sy = old_y % MAX_BUF_YSIZE; int new_sx = new_x % MAX_BUF_XSIZE; - int new_sy = new_y % MAX_BUF_XSIZE; + int new_sy = new_y % MAX_BUF_YSIZE; #if 0 int old_crm = crumbled_state[old_sy][old_sx]; #endif @@ -946,9 +1019,9 @@ void RedrawPlayfield_EM(boolean force_redraw) if (draw_new_player_location && !quick_relocation) { #if 1 - unsigned long game_frame_delay_value = getGameFrameDelay_EM(20); + unsigned int game_frame_delay_value = getGameFrameDelay_EM(20); #else - unsigned long game_frame_delay_value = getGameFrameDelay_EM(25); + unsigned int game_frame_delay_value = getGameFrameDelay_EM(25); #endif int wait_delay_value = game_frame_delay_value; int screen_xx = VALID_SCREEN_X(sx);