X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Ftoons.c;h=3868bdb68300f2d59a854561be83090325324744;hb=4c97b1045b53135f75e9324747abb5e9286b813d;hp=300ae70bf3da93d4f8505d87896424cc7bc3ae13;hpb=041e5e848c15b4a07020a6d9fe392fcda53d72a8;p=rocksndiamonds.git diff --git a/src/libgame/toons.c b/src/libgame/toons.c index 300ae70b..3868bdb6 100644 --- a/src/libgame/toons.c +++ b/src/libgame/toons.c @@ -1,15 +1,13 @@ -/*********************************************************** -* Artsoft Retro-Game Library * -*----------------------------------------------------------* -* (c) 1995-2006 Artsoft Entertainment * -* Holger Schemel * -* Detmolder Strasse 189 * -* 33604 Bielefeld * -* Germany * -* e-mail: info@artsoft.org * -*----------------------------------------------------------* -* toons.c * -***********************************************************/ +// ============================================================================ +// Artsoft Retro-Game Library +// ---------------------------------------------------------------------------- +// (c) 1995-2014 by Artsoft Entertainment +// Holger Schemel +// info@artsoft.org +// http://www.artsoft.org/ +// ---------------------------------------------------------------------------- +// toons.c +// ============================================================================ #include "toons.h" #include "misc.h" @@ -121,33 +119,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) @@ -170,7 +150,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, @@ -181,18 +160,19 @@ 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) { - static unsigned long animation_frame_counter = 0; + static unsigned int animation_frame_counter = 0; static int pos_x = 0, pos_y = 0; static int delta_x = 0, delta_y = 0; static int frame = 0; static boolean horiz_move, vert_move; - static unsigned long anim_delay = 0; - static unsigned long anim_delay_value = 0; + static unsigned int anim_delay = 0; + static unsigned int anim_delay_value = 0; static int width,height; static int pad_x,pad_y; static int cut_x,cut_y; @@ -200,7 +180,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) @@ -276,7 +255,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, @@ -323,7 +302,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, @@ -342,8 +321,8 @@ boolean AnimateToon(int toon_nr, boolean restart) void HandleAnimation(int mode) { - static unsigned long animstart_delay = -1; - static unsigned long animstart_delay_value = 0; + static unsigned int animstart_delay = -1; + static unsigned int animstart_delay_value = 0; static boolean anim_running = FALSE; static boolean anim_restart = TRUE; static boolean reset_delay = TRUE; @@ -376,11 +355,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; }