From: Holger Schemel Date: Sun, 24 Apr 2016 19:04:51 +0000 (+0200) Subject: removed obsolete toon animation code (done by global animations now) X-Git-Tag: 4.0.0.0-rc2~5 X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=commitdiff_plain;h=013e137cafaa16827d0f27e10538b6e90ee0aed0 removed obsolete toon animation code (done by global animations now) --- diff --git a/src/cartoons.c b/src/cartoons.c index 95b12ecb..e572b043 100644 --- a/src/cartoons.c +++ b/src/cartoons.c @@ -161,7 +161,6 @@ static void HandleGlobalAnim(int, int); static void DoAnimationExt(void); static struct GlobalAnimControlInfo global_anim_ctrl[NUM_GAME_MODES]; -static struct ToonInfo toons[MAX_NUM_TOONS]; static unsigned int anim_sync_frame = 0; @@ -221,59 +220,6 @@ static int compareGlobalAnimMainControlInfo(const void *obj1, const void *obj2) return compare_result; } -static void PrepareBackbuffer() -{ - if (game_status != GAME_MODE_PLAYING) - return; - - BlitScreenToBitmap(backbuffer); -} - -boolean ToonNeedsRedraw() -{ - return TRUE; -} - -void InitToons() -{ - int num_toons = MAX_NUM_TOONS; - int i; - - if (global.num_toons >= 0 && global.num_toons < MAX_NUM_TOONS) - num_toons = global.num_toons; - - for (i = 0; i < num_toons; i++) - { - int graphic = IMG_TOON_1 + i; - struct FileInfo *image = getImageListEntryFromImageID(graphic); - - toons[i].bitmap = graphic_info[graphic].bitmap; - - toons[i].src_x = graphic_info[graphic].src_x; - toons[i].src_y = graphic_info[graphic].src_y; - - toons[i].width = graphic_info[graphic].width; - toons[i].height = graphic_info[graphic].height; - - toons[i].anim_frames = graphic_info[graphic].anim_frames; - toons[i].anim_delay = graphic_info[graphic].anim_delay; - toons[i].anim_mode = graphic_info[graphic].anim_mode; - toons[i].anim_start_frame = graphic_info[graphic].anim_start_frame; - - toons[i].step_offset = graphic_info[graphic].step_offset; - toons[i].step_delay = graphic_info[graphic].step_delay; - - toons[i].direction = image->parameter[GFX_ARG_DIRECTION]; - toons[i].position = image->parameter[GFX_ARG_POSITION]; - } - - InitToonScreen(bitmap_db_toons, - BackToFront, PrepareBackbuffer, ToonNeedsRedraw, - toons, num_toons, - REAL_SX, REAL_SY, FULL_SXSIZE, FULL_SYSIZE, - GAME_FRAME_DELAY); -} - static void InitToonControls() { int mode_nr_toons = GAME_MODE_PSEUDO_TOONS; @@ -492,7 +438,7 @@ void InitGlobalAnimations() InitGlobalAnimControls(); } -void DrawGlobalAnimExt(int drawing_stage) +void DrawGlobalAnimationsExt(int drawing_stage) { int mode_nr; @@ -643,9 +589,9 @@ void DrawGlobalAnimExt(int drawing_stage) } } -void DrawGlobalAnim(int drawing_stage) +void DrawGlobalAnimations(int drawing_stage) { - DrawGlobalAnimExt(drawing_stage); + DrawGlobalAnimationsExt(drawing_stage); } boolean SetGlobalAnimPart_Viewport(struct GlobalAnimPartControlInfo *part) diff --git a/src/cartoons.h b/src/cartoons.h index 612c6a34..ff84dd0e 100644 --- a/src/cartoons.h +++ b/src/cartoons.h @@ -20,9 +20,7 @@ #define ANIM_STATE_RUNNING (1 << 2) -void InitToons(void); void InitGlobalAnimations(void); - -void DrawGlobalAnim(int); +void DrawGlobalAnimations(int); #endif diff --git a/src/init.c b/src/init.c index eac5ad1f..299166c0 100644 --- a/src/init.c +++ b/src/init.c @@ -2121,8 +2121,6 @@ static void ReinitializeGraphics() InitGadgets(); print_timestamp_time("InitGadgets"); - InitToons(); - print_timestamp_time("InitToons"); InitDoors(); print_timestamp_time("InitDoors"); @@ -5124,7 +5122,6 @@ void InitGfxBuffers() ReCreateBitmap(&bitmap_db_panel, DXSIZE, DYSIZE, DEFAULT_DEPTH); ReCreateBitmap(&bitmap_db_door_1, 3 * DXSIZE, DYSIZE, DEFAULT_DEPTH); ReCreateBitmap(&bitmap_db_door_2, 3 * VXSIZE, VYSIZE, DEFAULT_DEPTH); - ReCreateBitmap(&bitmap_db_toons, FULL_SXSIZE, FULL_SYSIZE, DEFAULT_DEPTH); /* initialize screen properties */ InitGfxFieldInfo(SX, SY, SXSIZE, SYSIZE, @@ -5301,7 +5298,7 @@ void InitGfx() InitMenuDesignSettings_Static(); InitGfxDrawBusyAnimFunction(DrawInitAnim); - InitGfxDrawGlobalAnimFunction(DrawGlobalAnim); + InitGfxDrawGlobalAnimFunction(DrawGlobalAnimations); InitGfxDrawGlobalBorderFunction(DrawMaskedBorderToTarget); gfx.fade_border_source_status = global.border_status; diff --git a/src/libgame/toons.c b/src/libgame/toons.c index 34fa8fbb..50a164af 100644 --- a/src/libgame/toons.c +++ b/src/libgame/toons.c @@ -13,9 +13,6 @@ #include "misc.h" -static struct ToonScreenInfo screen_info; - - /* ========================================================================= */ /* generic animation frame calculation */ /* ========================================================================= */ @@ -71,311 +68,3 @@ int getAnimationFrame(int num_frames, int delay, int mode, int start_frame, return frame; } - - -/* ========================================================================= */ -/* toon animation functions */ -/* ========================================================================= */ - -static int get_toon_direction(char *direction_string_raw) -{ - char *direction_string = getStringToLower(direction_string_raw); - int direction = (strEqual(direction_string, "left") ? MV_LEFT : - strEqual(direction_string, "right") ? MV_RIGHT : - strEqual(direction_string, "up") ? MV_UP : - strEqual(direction_string, "down") ? MV_DOWN : - MV_NONE); - - free(direction_string); - - return direction; -} - -void InitToonScreen(Bitmap *save_buffer, - void (*update_function)(void), - void (*prepare_backbuffer_function)(void), - boolean (*redraw_needed_function)(void), - struct ToonInfo *toons, int num_toons, - int startx, int starty, - int width, int height, - int frame_delay_value) -{ - screen_info.save_buffer = save_buffer; - screen_info.update_function = update_function; - screen_info.prepare_backbuffer_function = prepare_backbuffer_function; - screen_info.redraw_needed_function = redraw_needed_function; - screen_info.toons = toons; - screen_info.num_toons = num_toons; - screen_info.startx = startx; - screen_info.starty = starty; - screen_info.width = width; - screen_info.height = height; - screen_info.frame_delay_value = frame_delay_value; -} - -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; - int buffer_x = 0; - int buffer_y = 0; - - /* correct values to avoid off-screen blitting (start position) */ - if (pad_dest_x < screen_info.startx) - { - pad_width -= (screen_info.startx - pad_dest_x); - pad_dest_x = screen_info.startx; - } - if (pad_dest_y < screen_info.starty) - { - pad_height -= (screen_info.starty - pad_dest_y); - pad_dest_y = screen_info.starty; - } - - /* correct values to avoid off-screen blitting (blit size) */ - if (pad_width > screen_info.width) - pad_width = screen_info.width; - if (pad_height > screen_info.height) - pad_height = screen_info.height; - - /* 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); - 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, - pad_dest_x, pad_dest_y); - - screen_info.update_function(); - - BlitBitmap(screen_info.save_buffer, backbuffer, buffer_x, buffer_y, - pad_width, pad_height, pad_dest_x, pad_dest_y); - - /* prevent immediate redraw of restored toon area in backbuffer */ - redraw_mask = REDRAW_NONE; -} - -boolean AnimateToon(int toon_nr, boolean restart) -{ - 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 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; - static int src_x, src_y; - static int dest_x, dest_y; - struct ToonInfo *anim = &screen_info.toons[toon_nr]; - Bitmap *anim_bitmap = screen_info.toons[toon_nr].bitmap; - int direction = get_toon_direction(anim->direction); - - if (restart) - { - horiz_move = (direction & (MV_LEFT | MV_RIGHT)); - vert_move = (direction & (MV_UP | MV_DOWN)); - anim_delay_value = anim->step_delay * screen_info.frame_delay_value; - - frame = getAnimationFrame(anim->anim_frames, anim->anim_delay, - anim->anim_mode, anim->anim_start_frame, - animation_frame_counter++); - - if (horiz_move) - { - int pos_bottom = screen_info.height - anim->height; - - if (strEqual(anim->position, "top")) - pos_y = 0; - else if (strEqual(anim->position, "bottom")) - pos_y = pos_bottom; - else if (strEqual(anim->position, "upper")) - pos_y = GetSimpleRandom(pos_bottom / 2); - else if (strEqual(anim->position, "lower")) - pos_y = pos_bottom / 2 + GetSimpleRandom(pos_bottom / 2); - else - pos_y = GetSimpleRandom(pos_bottom); - - if (direction == MV_RIGHT) - { - delta_x = anim->step_offset; - pos_x = -anim->width + delta_x; - } - else - { - delta_x = -anim->step_offset; - pos_x = screen_info.width + delta_x; - } - - delta_y = 0; - } - else - { - int pos_right = screen_info.width - anim->width; - - if (strEqual(anim->position, "left")) - pos_x = 0; - else if (strEqual(anim->position, "right")) - pos_x = pos_right; - else - pos_x = GetSimpleRandom(pos_right); - - if (direction == MV_DOWN) - { - delta_y = anim->step_offset; - pos_y = -anim->height + delta_y; - } - else - { - delta_y = -anim->step_offset; - pos_y = screen_info.height + delta_y; - } - - delta_x = 0; - } - } - - if (pos_x <= -anim->width - anim->step_offset || - pos_x >= screen_info.width + anim->step_offset || - pos_y <= -anim->height - anim->step_offset || - pos_y >= screen_info.height + anim->step_offset) - return TRUE; - - if (!DelayReached(&anim_delay, anim_delay_value)) - { - if (screen_info.redraw_needed_function() && !restart) - DrawAnim(anim_bitmap, - src_x + cut_x, src_y + cut_y, - width, height, - screen_info.startx + dest_x, - screen_info.starty + dest_y, - pad_x, pad_y); - - return FALSE; - } - - if (pos_x < -anim->width) - pos_x = -anim->width; - else if (pos_x > screen_info.width) - pos_x = screen_info.width; - if (pos_y < -anim->height) - pos_y = -anim->height; - else if (pos_y > screen_info.height) - pos_y = screen_info.height; - - pad_x = (horiz_move ? anim->step_offset : 0); - pad_y = (vert_move ? anim->step_offset : 0); - src_x = anim->src_x + frame * anim->width; - src_y = anim->src_y; - dest_x = pos_x; - dest_y = pos_y; - cut_x = cut_y = 0; - width = anim->width; - height = anim->height; - - if (pos_x < 0) - { - dest_x = 0; - width += pos_x; - cut_x = -pos_x; - } - else if (pos_x > screen_info.width - anim->width) - width -= (pos_x - (screen_info.width - anim->width)); - - if (pos_y < 0) - { - dest_y = 0; - height += pos_y; - cut_y = -pos_y; - } - else if (pos_y > screen_info.height - anim->height) - height -= (pos_y - (screen_info.height - anim->height)); - - DrawAnim(anim_bitmap, - src_x + cut_x, src_y + cut_y, - width, height, - screen_info.startx + dest_x, - screen_info.starty + dest_y, - pad_x, pad_y); - - pos_x += delta_x; - pos_y += delta_y; - - frame = getAnimationFrame(anim->anim_frames, anim->anim_delay, - anim->anim_mode, anim->anim_start_frame, - animation_frame_counter++); - - return FALSE; -} - -void HandleAnimation(int mode) -{ - 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; - static int toon_nr = 0; - - if (!setup.toons || screen_info.num_toons == 0) - return; - - /* this may happen after reloading graphics and redefining "num_toons" */ - if (toon_nr >= screen_info.num_toons) - anim_restart = TRUE; - - switch(mode) - { - case ANIM_START: - screen_info.prepare_backbuffer_function(); - - anim_running = TRUE; - anim_restart = TRUE; - reset_delay = TRUE; - - return; - - case ANIM_CONTINUE: - if (!anim_running) - return; - - break; - - case ANIM_STOP: - if (anim_running) - { - redraw_mask |= REDRAW_FIELD; - - screen_info.update_function(); - - anim_running = FALSE; - } - - return; - - default: - break; - } - - if (reset_delay) - { - animstart_delay = Counter(); - animstart_delay_value = GetSimpleRandom(3000); - reset_delay = FALSE; - } - - if (anim_restart) - { - if (!DelayReached(&animstart_delay, animstart_delay_value)) - return; - - toon_nr = GetSimpleRandom(screen_info.num_toons); - } - - anim_restart = reset_delay = AnimateToon(toon_nr, anim_restart); -} diff --git a/src/libgame/toons.h b/src/libgame/toons.h index 449687cd..26867df9 100644 --- a/src/libgame/toons.h +++ b/src/libgame/toons.h @@ -21,47 +21,6 @@ #define ANIM_STOP 2 -struct ToonScreenInfo -{ - Bitmap *save_buffer; - void (*update_function)(void); - void (*prepare_backbuffer_function)(void); - boolean (*redraw_needed_function)(void); - - struct ToonInfo *toons; - int num_toons; - - int startx, starty; - int width, height; - - int frame_delay_value; -}; - -struct ToonInfo -{ - Bitmap *bitmap; - - int src_x, src_y; - int width, height; - int anim_frames; - int anim_start_frame; - int anim_delay; - int anim_mode; - int step_offset; - int step_delay; - - char *direction; - char *position; -}; - - int getAnimationFrame(int, int, int, int, int); -void InitToonScreen(Bitmap *, void (*update_function)(void), - void (*prepare_backbuffer_function)(void), - boolean (*redraw_needed_function)(void), - struct ToonInfo *, int, int, int, int, int, int); - -void HandleAnimation(int); - #endif /* TOONS_H */ diff --git a/src/main.c b/src/main.c index 9e5ab1ac..6d76bbc6 100644 --- a/src/main.c +++ b/src/main.c @@ -26,7 +26,6 @@ Bitmap *bitmap_db_field; Bitmap *bitmap_db_panel; Bitmap *bitmap_db_door_1; Bitmap *bitmap_db_door_2; -Bitmap *bitmap_db_toons; DrawBuffer *fieldbuffer; DrawBuffer *drawto_field; diff --git a/src/main.h b/src/main.h index f61c4edc..3cc923c2 100644 --- a/src/main.h +++ b/src/main.h @@ -2978,7 +2978,6 @@ extern Bitmap *bitmap_db_field; extern Bitmap *bitmap_db_panel; extern Bitmap *bitmap_db_door_1; extern Bitmap *bitmap_db_door_2; -extern Bitmap *bitmap_db_toons; extern DrawBuffer *fieldbuffer; extern DrawBuffer *drawto_field; diff --git a/src/tools.c b/src/tools.c index d7c39688..2c605532 100644 --- a/src/tools.c +++ b/src/tools.c @@ -8500,7 +8500,6 @@ void ChangeViewportPropertiesIfNeeded() // printf("::: init_gadgets_and_toons\n"); InitGadgets(); - InitToons(); InitGlobalAnimations(); }