Merge branch 'master' into global-anims
[rocksndiamonds.git] / src / libgame / toons.c
index 8d0a8ba53a57d515fcecac5b469f5a621c40ec4d..34fa8fbb675f157256375535116f9938538f239e 100644 (file)
 #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);
-}