From 92736512b4fedc65254597f1b3e85a885b0e6e62 Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Wed, 6 Apr 2022 19:26:10 +0200 Subject: [PATCH] added support for busy animation on non-loading screens --- src/conf_gfx.c | 12 ++++++++++++ src/init.c | 35 +++++++++++++++++++++-------------- src/libgame/system.c | 2 +- src/libgame/system.h | 11 ++++++++--- src/main.h | 1 + 5 files changed, 43 insertions(+), 18 deletions(-) diff --git a/src/conf_gfx.c b/src/conf_gfx.c index a3f5cbea..e6f8ebce 100644 --- a/src/conf_gfx.c +++ b/src/conf_gfx.c @@ -7347,6 +7347,14 @@ struct ConfigInfo image_config[] = { "global.busy.frames", "28" }, { "global.busy.frames_per_line", "7" }, { "global.busy.delay", "2" }, + { "global.busy_playfield", "RocksBusy.png" }, + { "global.busy_playfield.x", "0" }, + { "global.busy_playfield.y", "0" }, + { "global.busy_playfield.width", "32" }, + { "global.busy_playfield.height", "32" }, + { "global.busy_playfield.frames", "28" }, + { "global.busy_playfield.frames_per_line", "7" }, + { "global.busy_playfield.delay", "2" }, { "global.tile_cursor", "RocksMore.png" }, { "global.tile_cursor.xpos", "10" }, @@ -7905,6 +7913,10 @@ struct ConfigInfo image_config[] = { "init.busy.y", "-1" }, { "init.busy.align", "center" }, { "init.busy.valign", "middle" }, + { "init.busy_playfield.x", "-1" }, + { "init.busy_playfield.y", "-1" }, + { "init.busy_playfield.align", "center" }, + { "init.busy_playfield.valign", "middle" }, { "menu.enter_menu.fade_mode", "none" }, { "menu.enter_menu.fade_delay", "250" }, diff --git a/src/init.c b/src/init.c index a79bd5bb..541f0750 100644 --- a/src/init.c +++ b/src/init.c @@ -36,18 +36,20 @@ #define CONFIG_TOKEN_FONT_INITIAL "font.initial" #define CONFIG_TOKEN_GLOBAL_BUSY_INITIAL "global.busy_initial" #define CONFIG_TOKEN_GLOBAL_BUSY "global.busy" +#define CONFIG_TOKEN_GLOBAL_BUSY_PLAYFIELD "global.busy_playfield" #define CONFIG_TOKEN_BACKGROUND_LOADING_INITIAL "background.LOADING_INITIAL" #define CONFIG_TOKEN_BACKGROUND_LOADING "background.LOADING" #define INITIAL_IMG_GLOBAL_BUSY_INITIAL 0 #define INITIAL_IMG_GLOBAL_BUSY 1 +#define INITIAL_IMG_GLOBAL_BUSY_PLAYFIELD 2 -#define NUM_INITIAL_IMAGES_BUSY 2 +#define NUM_INITIAL_IMAGES_BUSY 3 -#define INITIAL_IMG_BACKGROUND_LOADING_INITIAL 2 -#define INITIAL_IMG_BACKGROUND_LOADING 3 +#define INITIAL_IMG_BACKGROUND_LOADING_INITIAL 3 +#define INITIAL_IMG_BACKGROUND_LOADING 4 -#define NUM_INITIAL_IMAGES 4 +#define NUM_INITIAL_IMAGES 5 static struct FontBitmapInfo font_initial[NUM_INITIAL_FONTS]; @@ -123,25 +125,28 @@ static void SetLoadingBackgroundImage(void) graphic_info = graphic_info_last; } -static void DrawInitAnim(void) +static void DrawInitAnim(boolean only_when_loading) { struct GraphicInfo *graphic_info_last = graphic_info; int graphic = (game_status_last_screen == -1 ? INITIAL_IMG_GLOBAL_BUSY_INITIAL : - INITIAL_IMG_GLOBAL_BUSY); + game_status == GAME_MODE_LOADING ? + INITIAL_IMG_GLOBAL_BUSY : + INITIAL_IMG_GLOBAL_BUSY_PLAYFIELD); struct MenuPosInfo *busy = (game_status_last_screen == -1 ? &init_last.busy_initial : - &init_last.busy); + game_status == GAME_MODE_LOADING ? + &init_last.busy : + &init_last.busy_playfield); static unsigned int action_delay = 0; unsigned int action_delay_value = GameFrameDelay; int sync_frame = FrameCounter; int x, y; - // prevent OS (Windows) from complaining about program not responding CheckQuitEvent(); - if (game_status != GAME_MODE_LOADING) + if (game_status != GAME_MODE_LOADING && only_when_loading) return; if (image_initial[graphic].bitmap == NULL || window == NULL) @@ -151,12 +156,12 @@ static void DrawInitAnim(void) return; if (busy->x == -1) - busy->x = WIN_XSIZE / 2; + busy->x = (game_status == GAME_MODE_LOADING ? WIN_XSIZE / 2 : SXSIZE / 2); if (busy->y == -1) - busy->y = WIN_YSIZE / 2; + busy->y = (game_status == GAME_MODE_LOADING ? WIN_YSIZE / 2 : SYSIZE / 2); - x = ALIGNED_TEXT_XPOS(busy); - y = ALIGNED_TEXT_YPOS(busy); + x = (game_status == GAME_MODE_LOADING ? 0 : SX) + ALIGNED_TEXT_XPOS(busy); + y = (game_status == GAME_MODE_LOADING ? 0 : SY) + ALIGNED_TEXT_YPOS(busy); graphic_info = image_initial; @@ -5587,13 +5592,15 @@ static void InitGfx(void) { CONFIG_TOKEN_GLOBAL_BUSY_INITIAL, CONFIG_TOKEN_GLOBAL_BUSY, + CONFIG_TOKEN_GLOBAL_BUSY_PLAYFIELD, CONFIG_TOKEN_BACKGROUND_LOADING_INITIAL, CONFIG_TOKEN_BACKGROUND_LOADING }; struct MenuPosInfo *init_busy[NUM_INITIAL_IMAGES_BUSY] = { &init.busy_initial, - &init.busy + &init.busy, + &init.busy_playfield }; Bitmap *bitmap_font_initial = NULL; int parameter[NUM_INITIAL_IMAGES][NUM_GFX_ARGS]; diff --git a/src/libgame/system.c b/src/libgame/system.c index ea8288e0..f9cc4fe8 100644 --- a/src/libgame/system.c +++ b/src/libgame/system.c @@ -273,7 +273,7 @@ void InitGfxClipRegion(boolean enabled, int x, int y, int width, int height) gfx.clip_height = height; } -void InitGfxDrawBusyAnimFunction(void (*draw_busy_anim_function)(void)) +void InitGfxDrawBusyAnimFunction(void (*draw_busy_anim_function)(boolean)) { gfx.draw_busy_anim_function = draw_busy_anim_function; } diff --git a/src/libgame/system.h b/src/libgame/system.h index 24d0d722..aea0130a 100644 --- a/src/libgame/system.h +++ b/src/libgame/system.h @@ -998,7 +998,12 @@ #define UPDATE_BUSY_STATE() \ { \ if (gfx.draw_busy_anim_function != NULL) \ - gfx.draw_busy_anim_function(); \ + gfx.draw_busy_anim_function(TRUE); \ +} +#define UPDATE_BUSY_STATE_NOT_LOADING() \ +{ \ + if (gfx.draw_busy_anim_function != NULL) \ + gfx.draw_busy_anim_function(FALSE); \ } @@ -1220,7 +1225,7 @@ struct GfxInfo int anim_random_frame; - void (*draw_busy_anim_function)(void); + void (*draw_busy_anim_function)(boolean); void (*draw_global_anim_function)(int, int); void (*draw_global_border_function)(int); void (*draw_tile_cursor_function)(int); @@ -1931,7 +1936,7 @@ void InitGfxDoor3Info(int, int, int, int); void InitGfxWindowInfo(int, int); void InitGfxScrollbufferInfo(int, int); void InitGfxClipRegion(boolean, int, int, int, int); -void InitGfxDrawBusyAnimFunction(void (*draw_busy_anim_function)(void)); +void InitGfxDrawBusyAnimFunction(void (*draw_busy_anim_function)(boolean)); void InitGfxDrawGlobalAnimFunction(void (*draw_global_anim_function)(int, int)); void InitGfxDrawGlobalBorderFunction(void (*draw_global_border_function)(int)); void InitGfxDrawTileCursorFunction(void (*draw_tile_cursor_function)(int)); diff --git a/src/main.h b/src/main.h index cd272322..f3e75712 100644 --- a/src/main.h +++ b/src/main.h @@ -2856,6 +2856,7 @@ struct InitInfo { struct MenuPosInfo busy_initial; struct MenuPosInfo busy; + struct MenuPosInfo busy_playfield; }; struct MenuInfo -- 2.34.1