X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame_em%2Fgraphics.c;h=c3d365407b9e53406c93e6149300c8bf5fa37ec5;hb=96e81193abbb278dd3b79d109ff99d061fe43973;hp=800ee03faaf8de2a6022b7f3cb5440c36492a99f;hpb=c0c5862d9ee59c70412b1c35e558101b109a8ec9;p=rocksndiamonds.git diff --git a/src/game_em/graphics.c b/src/game_em/graphics.c index 800ee03f..c3d36540 100644 --- a/src/game_em/graphics.c +++ b/src/game_em/graphics.c @@ -93,7 +93,7 @@ void BlitScreenToBitmap_EM(Bitmap *target_bitmap) } } -void blitscreen(void) +void BackToFront_EM(void) { static boolean scrolling_last = FALSE; int left = screen_x / TILEX; @@ -101,6 +101,8 @@ void blitscreen(void) boolean scrolling = (screen_x % TILEX != 0 || screen_y % TILEY != 0); int x, y; + SyncDisplay(); + if (redraw_tiles > REDRAWTILES_THRESHOLD || scrolling || scrolling_last) { /* blit all (up to four) parts of the scroll buffer to the backbuffer */ @@ -126,6 +128,8 @@ void blitscreen(void) } } + FlushDisplay(); + for (x = 0; x < MAX_BUF_XSIZE; x++) for (y = 0; y < MAX_BUF_YSIZE; y++) redraw[x][y] = FALSE; @@ -134,6 +138,11 @@ void blitscreen(void) scrolling_last = scrolling; } +void blitscreen(void) +{ + BackToFront_EM(); +} + static void DrawLevelField_EM(int x, int y, int sx, int sy, boolean draw_masked) { @@ -239,6 +248,11 @@ static void DrawLevelPlayer_EM(int x1, int y1, int player_nr, int anim, { struct GraphicInfo_EM *g = &graphic_info_em_player[player_nr][anim][frame]; +#if 1 + getGraphicSourceExt_EM(player_nr, anim, frame, + &g->bitmap, &g->src_x, &g->src_y); +#endif + int src_x = g->src_x, src_y = g->src_y; int dst_x, dst_y; @@ -443,9 +457,14 @@ static void blitplayer(struct PLAYER *ply) DrawLevelField_EM(new_x, new_y, new_sx, new_sy, TRUE); } - /* mark screen tiles as dirty */ + /* redraw screen tiles in the next frame (player may have left the tiles) */ screentiles[old_sy][old_sx] = -1; screentiles[new_sy][new_sx] = -1; + + /* mark screen tiles as dirty (force screen refresh with changed content) */ + redraw[old_sx][old_sy] = TRUE; + redraw[new_sx][new_sy] = TRUE; + redraw_tiles += 2; } } @@ -869,14 +888,16 @@ void RedrawPlayfield_EM(boolean force_redraw) blitplayer(&ply[i]); blitscreen(); - FlushDisplay(); + Delay(wait_delay_value); /* scroll second step to align at full tile size */ screen_x -= dxx; screen_y -= dyy; +#if 0 SyncDisplay(); +#endif animscreen(); @@ -884,7 +905,7 @@ void RedrawPlayfield_EM(boolean force_redraw) blitplayer(&ply[i]); blitscreen(); - FlushDisplay(); + Delay(wait_delay_value); } @@ -1028,12 +1049,12 @@ void RedrawPlayfield_EM(boolean force_redraw) for (i = 0; i < MAX_PLAYERS; i++) blitplayer(&ply[i]); +#if 0 #if 0 SyncDisplay(); +#endif blitscreen(); - - FlushDisplay(); #endif }