Merge branch 'master' into global-anims
[rocksndiamonds.git] / src / libgame / toons.c
index b60ebe38a58b679bb5245cfe99f38480c30ccd65..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,33 +113,15 @@ 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;
   int pad_dest_y = dest_y - pad_y;
   int pad_width  = width  + 2 * pad_x;
   int pad_height = height + 2 * pad_y;
-#if 1
   int buffer_x = 0;
   int buffer_y = 0;
-#else
-  int buffer_x = DOOR_GFX_PAGEX3;
-  int buffer_y = DOOR_GFX_PAGEY1;
-#endif
-
-#if 0
-  printf("::: (%d, %d), (%d, %d), (%d, %d), (%d, %d) -> (%d, %d), (%d, %d), (%d, %d)\n",
-        src_x, src_y,
-        width, height,
-        dest_x, dest_y,
-        pad_x, pad_y,
-
-        pad_dest_x, pad_dest_y,
-        pad_width, pad_height,
-        buffer_x, buffer_y);
-#endif
 
   /* correct values to avoid off-screen blitting (start position) */
   if (pad_dest_x < screen_info.startx)
@@ -168,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,
@@ -179,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)
@@ -198,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)
@@ -274,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,
@@ -321,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,
@@ -374,11 +349,9 @@ void HandleAnimation(int mode)
     case ANIM_STOP:
       if (anim_running)
       {
-#if 1
-       redraw_mask |= (REDRAW_FIELD | REDRAW_FROM_BACKBUFFER);
+       redraw_mask |= REDRAW_FIELD;
 
        screen_info.update_function();
-#endif
 
        anim_running = FALSE;
       }
@@ -406,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);
-}