X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Finit.c;h=dbba5f1250154305c8c1412d8ab0255326a72907;hb=368684d4c5e2a59cbea8c5e35171f3fe008b844f;hp=041098f2665f427118e8e5a8bce1b539d17e50f2;hpb=b17343806da99bd24842f0b2e58d8513e0108bb7;p=rocksndiamonds.git diff --git a/src/init.c b/src/init.c index 041098f2..dbba5f12 100644 --- a/src/init.c +++ b/src/init.c @@ -34,13 +34,22 @@ #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 0 -#define INITIAL_IMG_BACKGROUND_LOADING 1 +#define INITIAL_IMG_GLOBAL_BUSY_INITIAL 0 +#define INITIAL_IMG_GLOBAL_BUSY 1 +#define INITIAL_IMG_GLOBAL_BUSY_PLAYFIELD 2 -#define NUM_INITIAL_IMAGES 2 +#define NUM_INITIAL_IMAGES_BUSY 3 + +#define INITIAL_IMG_BACKGROUND_LOADING_INITIAL 3 +#define INITIAL_IMG_BACKGROUND_LOADING 4 + +#define NUM_INITIAL_IMAGES 5 static struct FontBitmapInfo font_initial[NUM_INITIAL_FONTS]; @@ -102,21 +111,33 @@ static int get_graphic_parameter_value(char *, char *, int); static void SetLoadingBackgroundImage(void) { struct GraphicInfo *graphic_info_last = graphic_info; + int background_image = (game_status_last_screen == -1 ? + INITIAL_IMG_BACKGROUND_LOADING_INITIAL : + INITIAL_IMG_BACKGROUND_LOADING); graphic_info = image_initial; SetDrawDeactivationMask(REDRAW_NONE); SetDrawBackgroundMask(REDRAW_ALL); - SetWindowBackgroundImage(INITIAL_IMG_BACKGROUND_LOADING); + SetWindowBackgroundImage(background_image); 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 = 0; + int graphic = (game_status_last_screen == -1 ? + INITIAL_IMG_GLOBAL_BUSY_INITIAL : + 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 : + 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; @@ -125,26 +146,26 @@ static void DrawInitAnim(void) // 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[INITIAL_IMG_GLOBAL_BUSY].bitmap == NULL || window == NULL) + if (image_initial[graphic].bitmap == NULL || window == NULL) return; if (!DelayReached(&action_delay, action_delay_value)) return; - if (init_last.busy.x == -1) - init_last.busy.x = WIN_XSIZE / 2; - if (init_last.busy.y == -1) - init_last.busy.y = WIN_YSIZE / 2; + if (busy->x == -1) + busy->x = (game_status == GAME_MODE_LOADING ? WIN_XSIZE / 2 : SXSIZE / 2); + if (busy->y == -1) + busy->y = (game_status == GAME_MODE_LOADING ? WIN_YSIZE / 2 : SYSIZE / 2); - x = ALIGNED_TEXT_XPOS(&init_last.busy); - y = ALIGNED_TEXT_YPOS(&init_last.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; // graphic == 0 => image_initial + graphic_info = image_initial; - if (sync_frame % image_initial[INITIAL_IMG_GLOBAL_BUSY].anim_delay == 0) + if (sync_frame % image_initial[graphic].anim_delay == 0) { Bitmap *src_bitmap; int src_x, src_y; @@ -1718,6 +1739,8 @@ static void InitGraphicInfo(void) IMG_BACKGROUND_REQUEST, IMG_BACKGROUND, + IMG_BACKGROUND_LOADING_INITIAL, + IMG_BACKGROUND_LOADING, IMG_BACKGROUND_TITLE_INITIAL, IMG_BACKGROUND_TITLE, IMG_BACKGROUND_MAIN, @@ -1725,6 +1748,7 @@ static void InitGraphicInfo(void) IMG_BACKGROUND_LEVELS, IMG_BACKGROUND_LEVELNR, IMG_BACKGROUND_SCORES, + IMG_BACKGROUND_SCOREINFO, IMG_BACKGROUND_EDITOR, IMG_BACKGROUND_INFO, IMG_BACKGROUND_INFO_ELEMENTS, @@ -4888,6 +4912,9 @@ static void InitGlobal(void) global_anim_info[i].token_name = global_anim_name_info[i].token_name; } + // create hash to store URLs for global animations + anim_url_hash = newSetupFileHash(); + // create hash from image config list image_config_hash = newSetupFileHash(); for (i = 0; image_config[i].token != NULL; i++) @@ -5566,9 +5593,18 @@ static void InitGfx(void) char *filename_image_initial[NUM_INITIAL_IMAGES] = { NULL }; char *image_token[NUM_INITIAL_IMAGES] = { + 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_playfield + }; Bitmap *bitmap_font_initial = NULL; int parameter[NUM_INITIAL_IMAGES][NUM_GFX_ARGS]; int i, j, k; @@ -5733,6 +5769,13 @@ static void InitGfx(void) graphic_info = graphic_info_last; + for (i = 0; i < NUM_INITIAL_IMAGES_BUSY; i++) + { + // set image size for busy animations + init_busy[i]->width = image_initial[i].width; + init_busy[i]->height = image_initial[i].height; + } + SetLoadingBackgroundImage(); ClearRectangleOnBackground(window, 0, 0, WIN_XSIZE, WIN_YSIZE);