X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Flibgame%2Ftoons.c;h=34fa8fbb675f157256375535116f9938538f239e;hb=29519e4b412b6fd0b2a18145f010f53ca09fa456;hp=8d0a8ba53a57d515fcecac5b469f5a621c40ec4d;hpb=3ff2e8a0b5c27b99a9920bdf5ed82bc41bf40181;p=rocksndiamonds.git diff --git a/src/libgame/toons.c b/src/libgame/toons.c index 8d0a8ba5..34fa8fbb 100644 --- a/src/libgame/toons.c +++ b/src/libgame/toons.c @@ -13,12 +13,6 @@ #include "misc.h" -/* values for toon animation */ -#define ANIM_START 0 -#define ANIM_CONTINUE 1 -#define ANIM_STOP 2 - - static struct ToonScreenInfo screen_info; @@ -119,8 +113,7 @@ void InitToonScreen(Bitmap *save_buffer, screen_info.frame_delay_value = frame_delay_value; } -void DrawAnim(Bitmap *toon_bitmap, GC toon_clip_gc, - int src_x, int src_y, int width, int height, +void DrawAnim(Bitmap *toon_bitmap, int src_x, int src_y, int width, int height, int dest_x, int dest_y, int pad_x, int pad_y) { int pad_dest_x = dest_x - pad_x; @@ -151,7 +144,6 @@ void DrawAnim(Bitmap *toon_bitmap, GC toon_clip_gc, /* special method to avoid flickering interference with BackToFront() */ BlitBitmap(backbuffer, screen_info.save_buffer, pad_dest_x, pad_dest_y, pad_width, pad_height, buffer_x, buffer_y); - SetClipOrigin(toon_bitmap, toon_clip_gc, dest_x - src_x, dest_y - src_y); BlitBitmapMasked(toon_bitmap, backbuffer, src_x, src_y, width, height, dest_x, dest_y); BlitBitmap(backbuffer, window, pad_dest_x, pad_dest_y, pad_width, pad_height, @@ -162,7 +154,8 @@ void DrawAnim(Bitmap *toon_bitmap, GC toon_clip_gc, BlitBitmap(screen_info.save_buffer, backbuffer, buffer_x, buffer_y, pad_width, pad_height, pad_dest_x, pad_dest_y); - FlushDisplay(); + /* prevent immediate redraw of restored toon area in backbuffer */ + redraw_mask = REDRAW_NONE; } boolean AnimateToon(int toon_nr, boolean restart) @@ -181,7 +174,6 @@ boolean AnimateToon(int toon_nr, boolean restart) static int dest_x, dest_y; struct ToonInfo *anim = &screen_info.toons[toon_nr]; Bitmap *anim_bitmap = screen_info.toons[toon_nr].bitmap; - GC anim_clip_gc = anim_bitmap->stored_clip_gc; int direction = get_toon_direction(anim->direction); if (restart) @@ -257,7 +249,7 @@ boolean AnimateToon(int toon_nr, boolean restart) if (!DelayReached(&anim_delay, anim_delay_value)) { if (screen_info.redraw_needed_function() && !restart) - DrawAnim(anim_bitmap, anim_clip_gc, + DrawAnim(anim_bitmap, src_x + cut_x, src_y + cut_y, width, height, screen_info.startx + dest_x, @@ -304,7 +296,7 @@ boolean AnimateToon(int toon_nr, boolean restart) else if (pos_y > screen_info.height - anim->height) height -= (pos_y - (screen_info.height - anim->height)); - DrawAnim(anim_bitmap, anim_clip_gc, + DrawAnim(anim_bitmap, src_x + cut_x, src_y + cut_y, width, height, screen_info.startx + dest_x, @@ -357,7 +349,7 @@ void HandleAnimation(int mode) case ANIM_STOP: if (anim_running) { - redraw_mask |= (REDRAW_FIELD | REDRAW_FROM_BACKBUFFER); + redraw_mask |= REDRAW_FIELD; screen_info.update_function(); @@ -387,18 +379,3 @@ void HandleAnimation(int mode) anim_restart = reset_delay = AnimateToon(toon_nr, anim_restart); } - -void InitAnimation() -{ - HandleAnimation(ANIM_START); -} - -void StopAnimation() -{ - HandleAnimation(ANIM_STOP); -} - -void DoAnimation() -{ - HandleAnimation(ANIM_CONTINUE); -}