X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Flibgame%2Ftoons.c;h=2d0a355014bd05595f2413d6f60d4b31a188da79;hb=ea6e4698905d7440a265e323d03cf13fc323c44b;hp=9f4c1fe49b727e6101605c6bc29ab92085476236;hpb=67df7f8e7d36881be28794e9744dab2136679cc1;p=rocksndiamonds.git diff --git a/src/libgame/toons.c b/src/libgame/toons.c index 9f4c1fe4..2d0a3550 100644 --- a/src/libgame/toons.c +++ b/src/libgame/toons.c @@ -48,7 +48,11 @@ int getAnimationFrame(int num_frames, int delay, int mode, int start_frame, } else if (mode & ANIM_PINGPONG) /* oscillate (border frames once) */ { +#if 1 int max_anim_frames = (num_frames > 1 ? 2 * num_frames - 2 : 1); +#else + int max_anim_frames = 2 * num_frames - 2; +#endif frame = (sync_frame % (delay * max_anim_frames)) / delay; frame = (frame < num_frames ? frame : max_anim_frames - frame); @@ -123,6 +127,7 @@ void DrawAnim(Bitmap *toon_bitmap, GC toon_clip_gc, { int buf_x = DOOR_GFX_PAGEX3, buf_y = DOOR_GFX_PAGEY1; +#if 1 /* special method to avoid flickering interference with BackToFront() */ BlitBitmap(backbuffer, screen_info.save_buffer, dest_x-pad_x, dest_y-pad_y, width+2*pad_x, height+2*pad_y, buf_x, buf_y); @@ -136,6 +141,16 @@ void DrawAnim(Bitmap *toon_bitmap, GC toon_clip_gc, BlitBitmap(screen_info.save_buffer, backbuffer, buf_x, buf_y, width+2*pad_x, height+2*pad_y, dest_x-pad_x, dest_y-pad_y); +#else + /* normal method, causing flickering interference with BackToFront() */ + BlitBitmap(backbuffer, screen_info.save_buffer, dest_x-pad_x, dest_y-pad_y, + width+2*pad_x, height+2*pad_y, buf_x, buf_y); + SetClipOrigin(toon_bitmap,toon_clip_gc, buf_x-src_x+pad_x,buf_y-src_y+pad_y); + BlitBitmapMasked(toon_bitmap, screen_info.save_buffer, + src_x, src_y, width, height, buf_x+pad_x, buf_y+pad_y); + BlitBitmap(screen_info.save_buffer, window, buf_x, buf_y, + width+2*pad_x, height+2*pad_y, dest_x-pad_x, dest_y-pad_y); +#endif FlushDisplay(); } @@ -306,7 +321,7 @@ void HandleAnimation(int mode) static int toon_nr = 0; int draw_mode; - if (!setup.toons || screen_info.num_toons == 0) + if (!setup.toons) return; /* this may happen after reloading graphics and redefining "num_toons" */