X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Finit.c;h=b2a6367623180705e8a5067c829d005f0b5f9e6d;hb=64d673ee2b6655f0ade45a3329ee08e32522b3c4;hp=c4b787e78f2a189511e34418bada3d03d4359aa0;hpb=fb402760dddcc06205acbcc8123ee99a11536b84;p=rocksndiamonds.git diff --git a/src/init.c b/src/init.c index c4b787e7..b2a63676 100644 --- a/src/init.c +++ b/src/init.c @@ -37,6 +37,7 @@ #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 "background" #define CONFIG_TOKEN_BACKGROUND_LOADING_INITIAL "background.LOADING_INITIAL" #define CONFIG_TOKEN_BACKGROUND_LOADING "background.LOADING" @@ -46,10 +47,11 @@ #define NUM_INITIAL_IMAGES_BUSY 3 -#define INITIAL_IMG_BACKGROUND_LOADING_INITIAL 3 -#define INITIAL_IMG_BACKGROUND_LOADING 4 +#define INITIAL_IMG_BACKGROUND 3 +#define INITIAL_IMG_BACKGROUND_LOADING_INITIAL 4 +#define INITIAL_IMG_BACKGROUND_LOADING 5 -#define NUM_INITIAL_IMAGES 5 +#define NUM_INITIAL_IMAGES 6 static struct FontBitmapInfo font_initial[NUM_INITIAL_FONTS]; @@ -108,6 +110,16 @@ static int copy_properties[][5] = static int get_graphic_parameter_value(char *, char *, int); +static Bitmap *getLoadingBackgroundBitmap(int graphic) +{ + return getBitmapFromGraphicOrDefault(graphic, INITIAL_IMG_BACKGROUND); +} + +static void SetLoadingWindowBackgroundImage(int graphic) +{ + SetWindowBackgroundBitmap(getLoadingBackgroundBitmap(graphic)); +} + static void SetLoadingBackgroundImage(void) { struct GraphicInfo *graphic_info_last = graphic_info; @@ -120,7 +132,7 @@ static void SetLoadingBackgroundImage(void) SetDrawDeactivationMask(REDRAW_NONE); SetDrawBackgroundMask(REDRAW_ALL); - SetWindowBackgroundImage(background_image); + SetLoadingWindowBackgroundImage(background_image); graphic_info = graphic_info_last; } @@ -138,11 +150,12 @@ static void DrawInitAnim(boolean only_when_loading) game_status == GAME_MODE_LOADING ? &init_last.busy : &init_last.busy_playfield); - static unsigned int action_delay = 0; - unsigned int action_delay_value = GameFrameDelay; + static DelayCounter action_delay = { 0 }; int sync_frame = FrameCounter; int x, y; + action_delay.value = GameFrameDelay; + // prevent OS (Windows) from complaining about program not responding CheckQuitEvent(); @@ -152,7 +165,7 @@ static void DrawInitAnim(boolean only_when_loading) if (image_initial[graphic].bitmap == NULL || window == NULL) return; - if (!DelayReached(&action_delay, action_delay_value)) + if (!DelayReached(&action_delay)) return; if (busy->x == -1) @@ -1966,7 +1979,7 @@ static void InitGraphicCompatibilityInfo(void) // special compatibility handling for "Jue" graphics sets (2007 and 2019) boolean supports_score_info = (menu.draw_xoffset[GAME_MODE_SCOREINFO] != 0); - if (strPrefix(leveldir_current->graphics_set, "jue") && !supports_score_info) + if (strPrefix(artwork.gfx_current_identifier, "jue") && !supports_score_info) { int font_title[] = { @@ -2002,7 +2015,7 @@ static void InitGraphicCompatibilityInfo(void) { for (j = 0; j < 2; j++) { - boolean jue0 = strEqual(leveldir_current->graphics_set, "jue0"); + boolean jue0 = strEqual(artwork.gfx_current_identifier, "jue0"); int font_nr = (j == 0 ? font_text[i] : FONT_ACTIVE(font_text[i])); int font_bitmap_id = font_info[font_nr].special_bitmap_id[mode_old]; int font_yoffset = (jue0 ? 10 : 5); @@ -5670,6 +5683,7 @@ static void InitGfx(void) CONFIG_TOKEN_GLOBAL_BUSY_INITIAL, CONFIG_TOKEN_GLOBAL_BUSY, CONFIG_TOKEN_GLOBAL_BUSY_PLAYFIELD, + CONFIG_TOKEN_BACKGROUND, CONFIG_TOKEN_BACKGROUND_LOADING_INITIAL, CONFIG_TOKEN_BACKGROUND_LOADING }; @@ -6183,7 +6197,7 @@ static void InitOverrideArtwork(void) #endif } -static char *getNewArtworkIdentifier(int type) +static char *setNewArtworkIdentifier(int type) { static char *last_leveldir_identifier[3] = { NULL, NULL, NULL }; static char *last_artwork_identifier[3] = { NULL, NULL, NULL }; @@ -6248,6 +6262,7 @@ static char *getNewArtworkIdentifier(int type) // (we cannot compare string pointers here, so copy string content itself) setString(&last_artwork_identifier[type], artwork_current_identifier); + // ---------- set new artwork identifier ---------- *(ARTWORK_CURRENT_IDENTIFIER_PTR(artwork, type)) = artwork_current_identifier; // ---------- do not reload directly after starting ------------------------- @@ -6259,6 +6274,13 @@ static char *getNewArtworkIdentifier(int type) return artwork_new_identifier; } +static void InitArtworkIdentifier(void) +{ + setNewArtworkIdentifier(ARTWORK_TYPE_GRAPHICS); + setNewArtworkIdentifier(ARTWORK_TYPE_SOUNDS); + setNewArtworkIdentifier(ARTWORK_TYPE_MUSIC); +} + void ReloadCustomArtwork(int force_reload) { int last_game_status = game_status; // save current game status @@ -6275,9 +6297,9 @@ void ReloadCustomArtwork(int force_reload) AdjustGraphicsForEMC(); AdjustSoundsForEMC(); - gfx_new_identifier = getNewArtworkIdentifier(ARTWORK_TYPE_GRAPHICS); - snd_new_identifier = getNewArtworkIdentifier(ARTWORK_TYPE_SOUNDS); - mus_new_identifier = getNewArtworkIdentifier(ARTWORK_TYPE_MUSIC); + gfx_new_identifier = setNewArtworkIdentifier(ARTWORK_TYPE_GRAPHICS); + snd_new_identifier = setNewArtworkIdentifier(ARTWORK_TYPE_SOUNDS); + mus_new_identifier = setNewArtworkIdentifier(ARTWORK_TYPE_MUSIC); reload_needed = (gfx_new_identifier != NULL || force_reload_gfx || snd_new_identifier != NULL || force_reload_snd || @@ -6508,6 +6530,9 @@ void OpenAll(void) InitOverrideArtwork(); // needs to know current level directory print_timestamp_time("InitOverrideArtwork"); + InitArtworkIdentifier(); // needs to know current level directory + print_timestamp_time("InitArtworkIdentifier"); + InitImages(); // needs to know current level directory print_timestamp_time("InitImages"); @@ -6599,8 +6624,7 @@ void OpenAll(void) static boolean WaitForApiThreads(void) { - unsigned int thread_delay = 0; - unsigned int thread_delay_value = 10000; + DelayCounter thread_delay = { 10000 }; if (program.api_thread_count == 0) return TRUE; @@ -6616,7 +6640,7 @@ static boolean WaitForApiThreads(void) // wait for threads to finish (and fail on timeout) while (program.api_thread_count > 0) { - if (DelayReached(&thread_delay, thread_delay_value)) + if (DelayReached(&thread_delay)) { Error("failed waiting for threads - TIMEOUT");