rocksndiamonds-3.2.4
[rocksndiamonds.git] / src / init.c
index 9ecc59c389c35275d42875619ffd33f0b7e16239..512c2756d2bdb8478cc8d46a9ce99a7deaad5eca 100644 (file)
@@ -2605,6 +2605,8 @@ void ResolveGroupElement(int group_element)
 
 void InitElementPropertiesStatic()
 {
+  static boolean clipboard_elements_initialized = FALSE;
+
   static int ep_diggable[] =
   {
     EL_SAND,
@@ -4553,9 +4555,12 @@ void InitElementPropertiesStatic()
   int i, j, k;
 
   /* always start with reliable default values (element has no properties) */
+  /* (but never initialize clipboard elements after the very first time) */
+  /* (to be able to use clipboard elements between several levels) */
   for (i = 0; i < MAX_NUM_ELEMENTS; i++)
-    for (j = 0; j < NUM_ELEMENT_PROPERTIES; j++)
-      SET_PROPERTY(i, j, FALSE);
+    if (!IS_CLIPBOARD_ELEMENT(i) || !clipboard_elements_initialized)
+      for (j = 0; j < NUM_ELEMENT_PROPERTIES; j++)
+       SET_PROPERTY(i, j, FALSE);
 
   /* set all base element properties from above array definitions */
   for (i = 0; element_properties[i].elements != NULL; i++)
@@ -4573,6 +4578,8 @@ void InitElementPropertiesStatic()
   /* set static element properties that are not listed in array definitions */
   for (i = EL_STEEL_CHAR_START; i <= EL_STEEL_CHAR_END; i++)
     SET_PROPERTY(i, EP_INDESTRUCTIBLE, TRUE);
+
+  clipboard_elements_initialized = TRUE;
 }
 
 void InitElementPropertiesEngine(int engine_version)
@@ -4621,6 +4628,10 @@ void InitElementPropertiesEngine(int engine_version)
   /* set all special, combined or engine dependent element properties */
   for (i = 0; i < MAX_NUM_ELEMENTS; i++)
   {
+    /* do not change (already initialized) clipboard elements here */
+    if (IS_CLIPBOARD_ELEMENT(i))
+      continue;
+
     /* ---------- INACTIVE ------------------------------------------------- */
     SET_PROPERTY(i, EP_INACTIVE, ((i >= EL_CHAR_START &&
                                   i <= EL_CHAR_END) ||
@@ -5402,6 +5413,7 @@ void InitGfx()
   bitmap_db_field = CreateBitmap(FXSIZE, FYSIZE, DEFAULT_DEPTH);
   bitmap_db_panel = CreateBitmap(DXSIZE, DYSIZE, DEFAULT_DEPTH);
   bitmap_db_door  = CreateBitmap(3 * DXSIZE, DYSIZE + VYSIZE, DEFAULT_DEPTH);
+  bitmap_db_toons = CreateBitmap(FULL_SXSIZE, FULL_SYSIZE, DEFAULT_DEPTH);
 
   /* initialize screen properties */
   InitGfxFieldInfo(SX, SY, SXSIZE, SYSIZE,
@@ -5794,11 +5806,13 @@ void ReloadCustomArtwork(int force_reload)
 #endif
   print_timestamp_time("ClearRectangle");
 
+#if 0
   printf("::: fading in ... %d\n", fading.fade_mode);
-
+#endif
   FadeIn(REDRAW_ALL);
-
+#if 0
   printf("::: done\n");
+#endif
 
   if (gfx_new_identifier != NULL || force_reload_gfx)
   {
@@ -5828,9 +5842,18 @@ void ReloadCustomArtwork(int force_reload)
 
   game_status = last_game_status;      /* restore current game status */
 
+#if 0
+  printf("::: ----------------DELAY 1 ...\n");
+  Delay(3000);
+#endif
+
+#if 0
   printf("::: FadeOut @ ReloadCustomArtwork ...\n");
+#endif
   FadeOut(REDRAW_ALL);
+#if 0
   printf("::: FadeOut @ ReloadCustomArtwork done\n");
+#endif
 
   RedrawBackground();
 
@@ -5838,6 +5861,7 @@ void ReloadCustomArtwork(int force_reload)
   SetDoorState(DOOR_OPEN_ALL);
   CloseDoor(DOOR_CLOSE_ALL | DOOR_NO_DELAY);
 
+#if 1
 #if 1
 #if 1
   FadeSetEnterScreen();
@@ -5849,6 +5873,11 @@ void ReloadCustomArtwork(int force_reload)
 #else
   fading = fading_none;
 #endif
+#endif
+
+#if 0
+  redraw_mask = REDRAW_ALL;
+#endif
 
   print_timestamp_done("ReloadCustomArtwork");
 }