added support for separate busy animation for initial loading screen
authorHolger Schemel <info@artsoft.org>
Wed, 30 Mar 2022 21:46:58 +0000 (23:46 +0200)
committerHolger Schemel <info@artsoft.org>
Wed, 30 Mar 2022 21:46:58 +0000 (23:46 +0200)
src/conf_gfx.c
src/init.c
src/main.h

index 8ba2e7f62ea8c85b9ad3d40e45fe73020f85c684..3db31650269c7111931c90375f696569703d4091 100644 (file)
@@ -7328,6 +7328,14 @@ struct ConfigInfo image_config[] =
 
   { "global.door",                             "RocksDoor.png"         },
 
+  { "global.busy_initial",                     "RocksBusy.png"         },
+  { "global.busy_initial.x",                   "0"                     },
+  { "global.busy_initial.y",                   "0"                     },
+  { "global.busy_initial.width",               "32"                    },
+  { "global.busy_initial.height",              "32"                    },
+  { "global.busy_initial.frames",              "28"                    },
+  { "global.busy_initial.frames_per_line",     "7"                     },
+  { "global.busy_initial.delay",               "2"                     },
   { "global.busy",                             "RocksBusy.png"         },
   { "global.busy.x",                           "0"                     },
   { "global.busy.y",                           "0"                     },
@@ -7886,6 +7894,10 @@ struct ConfigInfo image_config[] =
 
   { "border.draw_masked_when_fading",          "true"                  },
 
+  { "init.busy_initial.x",                     "-1"                    },
+  { "init.busy_initial.y",                     "-1"                    },
+  { "init.busy_initial.align",                 "center"                },
+  { "init.busy_initial.valign",                        "middle"                },
   { "init.busy.x",                             "-1"                    },
   { "init.busy.y",                             "-1"                    },
   { "init.busy.align",                         "center"                },
index 42adf59f2238484634e1a346caed100ddc30d83c..8b0d8ef39600de69f49b8916bea19047334d759c 100644 (file)
 
 
 #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_BACKGROUND_LOADING_INITIAL        "background.LOADING_INITIAL"
 #define CONFIG_TOKEN_BACKGROUND_LOADING                "background.LOADING"
 
-#define INITIAL_IMG_GLOBAL_BUSY                        0
-#define INITIAL_IMG_BACKGROUND_LOADING_INITIAL 1
-#define INITIAL_IMG_BACKGROUND_LOADING         2
+#define INITIAL_IMG_GLOBAL_BUSY_INITIAL                0
+#define INITIAL_IMG_GLOBAL_BUSY                        1
+#define INITIAL_IMG_BACKGROUND_LOADING_INITIAL 2
+#define INITIAL_IMG_BACKGROUND_LOADING         3
 
-#define NUM_INITIAL_IMAGES                     3
+#define NUM_INITIAL_IMAGES                     4
 
 
 static struct FontBitmapInfo font_initial[NUM_INITIAL_FONTS];
@@ -121,35 +123,41 @@ static void SetLoadingBackgroundImage(void)
 static void DrawInitAnim(void)
 {
   struct GraphicInfo *graphic_info_last = graphic_info;
-  int graphic = 0;
+  int graphic = (game_status_last_screen == -1 ?
+                INITIAL_IMG_GLOBAL_BUSY_INITIAL :
+                INITIAL_IMG_GLOBAL_BUSY);
+  struct MenuPosInfo *busy = (game_status_last_screen == -1 ?
+                             &init_last.busy_initial :
+                             &init_last.busy);
   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)
     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 = WIN_XSIZE / 2;
+  if (busy->y == -1)
+    busy->y = WIN_YSIZE / 2;
 
-  x = ALIGNED_TEXT_XPOS(&init_last.busy);
-  y = ALIGNED_TEXT_YPOS(&init_last.busy);
+  x = ALIGNED_TEXT_XPOS(busy);
+  y = 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;
@@ -5574,6 +5582,7 @@ 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_BACKGROUND_LOADING_INITIAL,
     CONFIG_TOKEN_BACKGROUND_LOADING
index b4a572917258cc0b9aee085baabb609446049d45..64795686dff5bb10b5dc23eba21ae7f333790b15 100644 (file)
@@ -2853,6 +2853,7 @@ struct TitleMessageInfo
 
 struct InitInfo
 {
+  struct MenuPosInfo busy_initial;
   struct MenuPosInfo busy;
 };