#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"
#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];
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;
SetDrawDeactivationMask(REDRAW_NONE);
SetDrawBackgroundMask(REDRAW_ALL);
- SetWindowBackgroundImage(background_image);
+ SetLoadingWindowBackgroundImage(background_image);
graphic_info = graphic_info_last;
}
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();
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)
// animation synchronized with global frame counter, not move position
g->anim_global_sync = parameter[GFX_ARG_GLOBAL_SYNC];
+ // animation synchronized with global anim frame counter, not move position
+ g->anim_global_anim_sync = parameter[GFX_ARG_GLOBAL_ANIM_SYNC];
+
// optional element for cloning crumble graphics
if (parameter[GFX_ARG_CRUMBLED_LIKE] != ARG_UNDEFINED_VALUE)
g->crumbled_like = parameter[GFX_ARG_CRUMBLED_LIKE];
// 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[] =
{
{
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);
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
};
print_timestamp_done("InitImages");
}
-static void InitSound(char *identifier)
+static void InitSound(void)
{
print_timestamp_init("InitSound");
- if (identifier == NULL)
- identifier = artwork.snd_current->identifier;
-
// set artwork path to send it to the sound server process
setLevelArtworkDir(artwork.snd_first);
- InitReloadCustomSounds(identifier);
+ InitReloadCustomSounds();
print_timestamp_time("InitReloadCustomSounds");
ReinitializeSounds();
print_timestamp_done("InitSound");
}
-static void InitMusic(char *identifier)
+static void InitMusic(void)
{
print_timestamp_init("InitMusic");
- if (identifier == NULL)
- identifier = artwork.mus_current->identifier;
-
// set artwork path to send it to the sound server process
setLevelArtworkDir(artwork.mus_first);
- InitReloadCustomMusic(identifier);
+ InitReloadCustomMusic();
print_timestamp_time("InitReloadCustomMusic");
ReinitializeMusic();
if (snd_new_identifier != NULL || force_reload_snd)
{
- InitSound(snd_new_identifier);
+ InitSound();
print_timestamp_time("InitSound");
}
if (mus_new_identifier != NULL || force_reload_mus)
{
- InitMusic(mus_new_identifier);
+ InitMusic();
print_timestamp_time("InitMusic");
}
InitImages(); // needs to know current level directory
print_timestamp_time("InitImages");
- InitSound(NULL); // needs to know current level directory
+ InitSound(); // needs to know current level directory
print_timestamp_time("InitSound");
- InitMusic(NULL); // needs to know current level directory
+ InitMusic(); // needs to know current level directory
print_timestamp_time("InitMusic");
InitArtworkDone();
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;
// 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");