rnd-20030104-1-src
[rocksndiamonds.git] / src / init.c
index 255cbc63f5863de2b48257d5e4eca50423946bbb..66083aeb87d888a3a550f65ceb875a4e6bfc760d 100644 (file)
@@ -124,10 +124,11 @@ void OpenAll(void)
 
   InitImages();                        /* needs to know current level directory */
   InitSound();                 /* needs to know current level directory */
+#if 0
   InitGadgets();               /* needs images + number of level series */
+#endif
 
   InitGfxBackground();
-  InitToons();
 
   if (global.autoplay_leveldir)
   {
@@ -218,6 +219,9 @@ static void ReinitializeGraphics()
               new_graphic_info[IMG_MENU_FONT_MEDIUM].bitmap,
               new_graphic_info[IMG_MENU_FONT_SMALL].bitmap,
               new_graphic_info[IMG_MENU_FONT_EM].bitmap);
+
+  InitGadgets();
+  InitToons();
 }
 
 static void InitImages()
@@ -582,6 +586,10 @@ void ReloadCustomArtwork()
     }
 #endif
 
+#if 0
+    SyncDisplay();
+#endif
+
     ReinitializeGraphics();
 
     FreeTileClipmasks();
@@ -647,13 +655,29 @@ void ReloadCustomArtwork()
 #endif
 }
 
+void FreeGadgets()
+{
+  FreeLevelEditorGadgets();
+  FreeGameButtons();
+  FreeTapeButtons();
+  FreeToolButtons();
+  FreeScreenGadgets();
+}
+
 void InitGadgets()
 {
+  static boolean gadgets_initialized = FALSE;
+
+  if (gadgets_initialized)
+    FreeGadgets();
+
   CreateLevelEditorGadgets();
   CreateGameButtons();
   CreateTapeButtons();
   CreateToolButtons();
   CreateScreenGadgets();
+
+  gadgets_initialized = TRUE;
 }
 
 void InitElementInfo()
@@ -677,9 +701,9 @@ void InitElementInfo()
     element_info[i].graphic[GFX_ACTION_DEFAULT] =
       IMG_CHAR_START + (i - EL_CHAR_START);
 
-  for (i=EL_GENERIC_START; i<=EL_GENERIC_END; i++)
+  for (i=EL_CUSTOM_START; i<=EL_CUSTOM_END; i++)
     element_info[i].graphic[GFX_ACTION_DEFAULT] =
-      IMG_GENERIC_START + (i - EL_GENERIC_START);
+      IMG_CUSTOM_START + (i - EL_CUSTOM_START);
 
   i = 0;
   while (element_to_graphic[i].element > -1)
@@ -852,14 +876,34 @@ static void InitGraphicInfo()
     if (src_x < 0 || src_y < 0 ||
        src_x + TILEX > src_bitmap->width ||
        src_y + TILEY > src_bitmap->height)
-      Error(ERR_EXIT, "InitGraphicInfo: first frame of graphic animation object %d outside of image bitmap file '%s'", i, src_bitmap->source_filename);
+    {
+      Error(ERR_RETURN, "custom artwork configuration error:");
+      Error(ERR_RETURN, "- config file: '%s'",
+           getImageConfigFilename());
+      Error(ERR_RETURN, "- config token: '%s'",
+           getTokenFromImageID(i));
+      Error(ERR_RETURN, "- image file: '%s'",
+           src_bitmap->source_filename);
+      Error(ERR_EXIT, "error: first animation frame out of bounds (%d,%d)",
+           src_x, src_y);
+    }
 
     last_frame = new_graphic_info[i].anim_frames - 1;
     getGraphicSource(i, last_frame, &src_bitmap, &src_x, &src_y);
     if (src_x < 0 || src_y < 0 ||
        src_x + TILEX > src_bitmap->width ||
        src_y + TILEY > src_bitmap->height)
-      Error(ERR_EXIT, "InitGraphicInfo: last frame of graphic animation object %d outside of image bitmap file '%s'", i, src_bitmap->source_filename);
+    {
+      Error(ERR_RETURN, "custom artwork configuration error:");
+      Error(ERR_RETURN, "- config file: '%s'",
+           getImageConfigFilename());
+      Error(ERR_RETURN, "- config token: '%s'",
+           getTokenFromImageID(i));
+      Error(ERR_RETURN, "- image file: '%s'",
+           src_bitmap->source_filename);
+      Error(ERR_EXIT, "error: last animation frame out of bounds (%d,%d)",
+           src_x, src_y);
+    }
   }
 }