rnd-20070114-1-src
[rocksndiamonds.git] / src / init.c
index ee3a1552501dc795292f30884c4af9d54fd45189..55fb2e7be5daac74b1fd92f3fcc8a23fcd0c62da 100644 (file)
@@ -104,6 +104,8 @@ void InitGadgets()
   CreateToolButtons();
   CreateScreenGadgets();
 
+  InitGadgetsSoundCallback(PlaySoundActivating, PlaySoundSelecting);
+
   gadgets_initialized = TRUE;
 }
 
@@ -165,7 +167,7 @@ static int getFontBitmapID(int font_nr)
 {
   int special = -1;
 
-  if (game_status >= GAME_MODE_MAIN && game_status <= GAME_MODE_PSEUDO_PREVIEW)
+  if (game_status >= GAME_MODE_TITLE && game_status <= GAME_MODE_PSEUDO_PREVIEW)
     special = game_status;
   else if (game_status == GAME_MODE_PSEUDO_TYPENAME)
     special = GFX_SPECIAL_ARG_MAIN;
@@ -1233,6 +1235,7 @@ static void InitGraphicInfo()
 
     IMG_BACKGROUND,
     IMG_BACKGROUND_TITLE,
+    IMG_BACKGROUND_MESSAGE,
     IMG_BACKGROUND_MAIN,
     IMG_BACKGROUND_LEVELS,
     IMG_BACKGROUND_SCORES,
@@ -2020,6 +2023,7 @@ void InitElementPropertiesStatic()
     /* (if amoeba can grow into anything diggable, maybe keep these out) */
 #if 0
     EL_LANDMINE,
+    EL_DC_LANDMINE,
     EL_TRAP_ACTIVE,
     EL_SP_BUGGY_BASE_ACTIVE,
     EL_EMC_PLANT,
@@ -2069,6 +2073,11 @@ void InitElementPropertiesStatic()
     EL_EMC_LENSES,
     EL_EMC_MAGNIFIER,
 
+#if 0
+    /* !!! handle separately !!! */
+    EL_DC_LANDMINE,    /* deadly when running into, but can be snapped */
+#endif
+
     -1
   };
 
@@ -2095,6 +2104,7 @@ void InitElementPropertiesStatic()
     /* !!! maybe this should better be handled by 'ep_diggable' !!! */
 #if 1
     EL_LANDMINE,
+    EL_DC_LANDMINE,
     EL_TRAP_ACTIVE,
     EL_SP_BUGGY_BASE_ACTIVE,
     EL_EMC_PLANT,
@@ -2173,13 +2183,42 @@ void InitElementPropertiesStatic()
     EL_SIGN_STOP,
     EL_SIGN_WHEELCHAIR,
     EL_SIGN_PARKING,
-    EL_SIGN_ONEWAY,
+    EL_SIGN_NO_ENTRY,
+    EL_SIGN_UNUSED_1,
+    EL_SIGN_GIVE_WAY,
+    EL_SIGN_ENTRY_FORBIDDEN,
+    EL_SIGN_EMERGENCY_EXIT,
+    EL_SIGN_YIN_YANG,
+    EL_SIGN_UNUSED_2,
+    EL_SIGN_SPERMS,
+    EL_SIGN_BULLET,
     EL_SIGN_HEART,
-    EL_SIGN_TRIANGLE,
-    EL_SIGN_ROUND,
-    EL_SIGN_EXIT,
-    EL_SIGN_YINYANG,
-    EL_SIGN_OTHER,
+    EL_SIGN_CROSS,
+    EL_SIGN_FRANKIE,
+    EL_STEEL_EXIT_CLOSED,
+    EL_STEEL_EXIT_OPEN,
+    EL_DC_STEELWALL_1_LEFT,
+    EL_DC_STEELWALL_1_RIGHT,
+    EL_DC_STEELWALL_1_TOP,
+    EL_DC_STEELWALL_1_BOTTOM,
+    EL_DC_STEELWALL_1_HORIZONTAL,
+    EL_DC_STEELWALL_1_VERTICAL,
+    EL_DC_STEELWALL_1_TOPLEFT,
+    EL_DC_STEELWALL_1_TOPRIGHT,
+    EL_DC_STEELWALL_1_BOTTOMLEFT,
+    EL_DC_STEELWALL_1_BOTTOMRIGHT,
+    EL_DC_STEELWALL_1_TOPLEFT_2,
+    EL_DC_STEELWALL_1_TOPRIGHT_2,
+    EL_DC_STEELWALL_1_BOTTOMLEFT_2,
+    EL_DC_STEELWALL_1_BOTTOMRIGHT_2,
+    EL_DC_STEELWALL_2_LEFT,
+    EL_DC_STEELWALL_2_RIGHT,
+    EL_DC_STEELWALL_2_TOP,
+    EL_DC_STEELWALL_2_BOTTOM,
+    EL_DC_STEELWALL_2_HORIZONTAL,
+    EL_DC_STEELWALL_2_VERTICAL,
+    EL_DC_STEELWALL_2_MIDDLE,
+    EL_DC_STEELWALL_2_SINGLE,
     EL_STEELWALL_SLIPPERY,
     EL_EMC_STEELWALL_1,
     EL_EMC_STEELWALL_2,
@@ -2226,17 +2265,17 @@ void InitElementPropertiesStatic()
     EL_SWITCHGATE_OPENING,
     EL_SWITCHGATE_CLOSED,
     EL_SWITCHGATE_CLOSING,
-#if 0
-    EL_SWITCHGATE_SWITCH_UP,
-    EL_SWITCHGATE_SWITCH_DOWN,
+#if 1
+    EL_DC_SWITCHGATE_SWITCH_UP,
+    EL_DC_SWITCHGATE_SWITCH_DOWN,
 #endif
     EL_TIMEGATE_OPEN,
     EL_TIMEGATE_OPENING,
     EL_TIMEGATE_CLOSED,
     EL_TIMEGATE_CLOSING,
-#if 0
-    EL_TIMEGATE_SWITCH,
-    EL_TIMEGATE_SWITCH_ACTIVE,
+#if 1
+    EL_DC_TIMEGATE_SWITCH,
+    EL_DC_TIMEGATE_SWITCH_ACTIVE,
 #endif
     EL_TUBE_ANY,
     EL_TUBE_VERTICAL,
@@ -2249,6 +2288,9 @@ void InitElementPropertiesStatic()
     EL_TUBE_LEFT_DOWN,
     EL_TUBE_RIGHT_UP,
     EL_TUBE_RIGHT_DOWN,
+    EL_EXPANDABLE_STEELWALL_HORIZONTAL,
+    EL_EXPANDABLE_STEELWALL_VERTICAL,
+    EL_EXPANDABLE_STEELWALL_ANY,
 
     -1
   };
@@ -2472,6 +2514,7 @@ void InitElementPropertiesStatic()
     EL_EXIT_OPEN,
     EL_SP_EXIT_OPEN,
     EL_SP_EXIT_OPENING,
+    EL_STEEL_EXIT_OPEN,
     EL_GATE_1,
     EL_GATE_2,
     EL_GATE_3,
@@ -2798,9 +2841,12 @@ void InitElementPropertiesStatic()
     EL_CONVEYOR_BELT_4_SWITCH_RIGHT,
     EL_SWITCHGATE_SWITCH_UP,
     EL_SWITCHGATE_SWITCH_DOWN,
+    EL_DC_SWITCHGATE_SWITCH_UP,
+    EL_DC_SWITCHGATE_SWITCH_DOWN,
     EL_LIGHT_SWITCH,
     EL_LIGHT_SWITCH_ACTIVE,
     EL_TIMEGATE_SWITCH,
+    EL_DC_TIMEGATE_SWITCH,
     EL_BALLOON_SWITCH_LEFT,
     EL_BALLOON_SWITCH_RIGHT,
     EL_BALLOON_SWITCH_UP,
@@ -3136,8 +3182,12 @@ void InitElementPropertiesStatic()
     EL_INVISIBLE_WALL_ACTIVE,
     EL_SWITCHGATE_SWITCH_UP,
     EL_SWITCHGATE_SWITCH_DOWN,
+    EL_DC_SWITCHGATE_SWITCH_UP,
+    EL_DC_SWITCHGATE_SWITCH_DOWN,
     EL_TIMEGATE_SWITCH,
     EL_TIMEGATE_SWITCH_ACTIVE,
+    EL_DC_TIMEGATE_SWITCH,
+    EL_DC_TIMEGATE_SWITCH_ACTIVE,
     EL_EMC_WALL_1,
     EL_EMC_WALL_2,
     EL_EMC_WALL_3,
@@ -3192,13 +3242,42 @@ void InitElementPropertiesStatic()
     EL_SIGN_STOP,
     EL_SIGN_WHEELCHAIR,
     EL_SIGN_PARKING,
-    EL_SIGN_ONEWAY,
+    EL_SIGN_NO_ENTRY,
+    EL_SIGN_UNUSED_1,
+    EL_SIGN_GIVE_WAY,
+    EL_SIGN_ENTRY_FORBIDDEN,
+    EL_SIGN_EMERGENCY_EXIT,
+    EL_SIGN_YIN_YANG,
+    EL_SIGN_UNUSED_2,
+    EL_SIGN_SPERMS,
+    EL_SIGN_BULLET,
     EL_SIGN_HEART,
-    EL_SIGN_TRIANGLE,
-    EL_SIGN_ROUND,
-    EL_SIGN_EXIT,
-    EL_SIGN_YINYANG,
-    EL_SIGN_OTHER,
+    EL_SIGN_CROSS,
+    EL_SIGN_FRANKIE,
+    EL_STEEL_EXIT_CLOSED,
+    EL_STEEL_EXIT_OPEN,
+    EL_DC_STEELWALL_1_LEFT,
+    EL_DC_STEELWALL_1_RIGHT,
+    EL_DC_STEELWALL_1_TOP,
+    EL_DC_STEELWALL_1_BOTTOM,
+    EL_DC_STEELWALL_1_HORIZONTAL,
+    EL_DC_STEELWALL_1_VERTICAL,
+    EL_DC_STEELWALL_1_TOPLEFT,
+    EL_DC_STEELWALL_1_TOPRIGHT,
+    EL_DC_STEELWALL_1_BOTTOMLEFT,
+    EL_DC_STEELWALL_1_BOTTOMRIGHT,
+    EL_DC_STEELWALL_1_TOPLEFT_2,
+    EL_DC_STEELWALL_1_TOPRIGHT_2,
+    EL_DC_STEELWALL_1_BOTTOMLEFT_2,
+    EL_DC_STEELWALL_1_BOTTOMRIGHT_2,
+    EL_DC_STEELWALL_2_LEFT,
+    EL_DC_STEELWALL_2_RIGHT,
+    EL_DC_STEELWALL_2_TOP,
+    EL_DC_STEELWALL_2_BOTTOM,
+    EL_DC_STEELWALL_2_HORIZONTAL,
+    EL_DC_STEELWALL_2_VERTICAL,
+    EL_DC_STEELWALL_2_MIDDLE,
+    EL_DC_STEELWALL_2_SINGLE,
     EL_STEELWALL_SLIPPERY,
     EL_EMC_STEELWALL_1,
     EL_EMC_STEELWALL_2,
@@ -3610,13 +3689,40 @@ void InitElementPropertiesStatic()
     EL_SIGN_STOP,
     EL_SIGN_WHEELCHAIR,
     EL_SIGN_PARKING,
-    EL_SIGN_ONEWAY,
+    EL_SIGN_NO_ENTRY,
+    EL_SIGN_UNUSED_1,
+    EL_SIGN_GIVE_WAY,
+    EL_SIGN_ENTRY_FORBIDDEN,
+    EL_SIGN_EMERGENCY_EXIT,
+    EL_SIGN_YIN_YANG,
+    EL_SIGN_UNUSED_2,
+    EL_SIGN_SPERMS,
+    EL_SIGN_BULLET,
     EL_SIGN_HEART,
-    EL_SIGN_TRIANGLE,
-    EL_SIGN_ROUND,
-    EL_SIGN_EXIT,
-    EL_SIGN_YINYANG,
-    EL_SIGN_OTHER,
+    EL_SIGN_CROSS,
+    EL_SIGN_FRANKIE,
+    EL_DC_STEELWALL_1_LEFT,
+    EL_DC_STEELWALL_1_RIGHT,
+    EL_DC_STEELWALL_1_TOP,
+    EL_DC_STEELWALL_1_BOTTOM,
+    EL_DC_STEELWALL_1_HORIZONTAL,
+    EL_DC_STEELWALL_1_VERTICAL,
+    EL_DC_STEELWALL_1_TOPLEFT,
+    EL_DC_STEELWALL_1_TOPRIGHT,
+    EL_DC_STEELWALL_1_BOTTOMLEFT,
+    EL_DC_STEELWALL_1_BOTTOMRIGHT,
+    EL_DC_STEELWALL_1_TOPLEFT_2,
+    EL_DC_STEELWALL_1_TOPRIGHT_2,
+    EL_DC_STEELWALL_1_BOTTOMLEFT_2,
+    EL_DC_STEELWALL_1_BOTTOMRIGHT_2,
+    EL_DC_STEELWALL_2_LEFT,
+    EL_DC_STEELWALL_2_RIGHT,
+    EL_DC_STEELWALL_2_TOP,
+    EL_DC_STEELWALL_2_BOTTOM,
+    EL_DC_STEELWALL_2_HORIZONTAL,
+    EL_DC_STEELWALL_2_VERTICAL,
+    EL_DC_STEELWALL_2_MIDDLE,
+    EL_DC_STEELWALL_2_SINGLE,
     EL_STEELWALL_SLIPPERY,
     EL_EMC_STEELWALL_1,
     EL_EMC_STEELWALL_2,
@@ -3655,6 +3761,7 @@ void InitElementPropertiesStatic()
   {
     EL_SAND,
     EL_LANDMINE,
+    EL_DC_LANDMINE,
     EL_TRAP,
     EL_TRAP_ACTIVE,
 
@@ -3672,6 +3779,7 @@ void InitElementPropertiesStatic()
     EL_INTERNAL_CASCADE_DC_ACTIVE,
     EL_INTERNAL_CASCADE_DX_ACTIVE,
     EL_INTERNAL_CASCADE_CHARS_ACTIVE,
+    EL_INTERNAL_CASCADE_STEEL_CHARS_ACTIVE,
     EL_INTERNAL_CASCADE_CE_ACTIVE,
     EL_INTERNAL_CASCADE_GE_ACTIVE,
     EL_INTERNAL_CASCADE_REF_ACTIVE,
@@ -3692,6 +3800,7 @@ void InitElementPropertiesStatic()
     EL_INTERNAL_CASCADE_DC,
     EL_INTERNAL_CASCADE_DX,
     EL_INTERNAL_CASCADE_CHARS,
+    EL_INTERNAL_CASCADE_STEEL_CHARS,
     EL_INTERNAL_CASCADE_CE,
     EL_INTERNAL_CASCADE_GE,
     EL_INTERNAL_CASCADE_REF,
@@ -3808,6 +3917,10 @@ void InitElementPropertiesStatic()
       if (HAS_PROPERTY(copy_properties[j][0], i))
        for (k = 1; k <= 4; k++)
          SET_PROPERTY(copy_properties[j][k], i, TRUE);
+
+  /* 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);
 }
 
 void InitElementPropertiesEngine(int engine_version)
@@ -3862,7 +3975,10 @@ void InitElementPropertiesEngine(int engine_version)
   for (i = 0; i < MAX_NUM_ELEMENTS; i++)
   {
     /* ---------- INACTIVE ------------------------------------------------- */
-    SET_PROPERTY(i, EP_INACTIVE, (i >= EL_CHAR_START && i <= EL_CHAR_END));
+    SET_PROPERTY(i, EP_INACTIVE, ((i >= EL_CHAR_START &&
+                                  i <= EL_CHAR_END) ||
+                                 (i >= EL_STEEL_CHAR_START &&
+                                  i <= EL_STEEL_CHAR_END)));
 
     /* ---------- WALKABLE, PASSABLE, ACCESSIBLE --------------------------- */
     SET_PROPERTY(i, EP_WALKABLE, (IS_WALKABLE_OVER(i) ||
@@ -3916,7 +4032,6 @@ void InitElementPropertiesEngine(int engine_version)
                                             !IS_COLLECTIBLE(i)));
 
     /* ---------- DRAGONFIRE_PROOF ----------------------------------------- */
-
     if (IS_HISTORIC_SOLID(i) || i == EL_EXPLOSION)
       SET_PROPERTY(i, EP_DRAGONFIRE_PROOF, TRUE);
     else
@@ -4039,12 +4154,16 @@ void InitElementPropertiesEngine(int engine_version)
   {
     static int ep_em_slippery_wall[] =
     {
-      EL_STEELWALL,
       EL_WALL,
+      EL_STEELWALL,
       EL_EXPANDABLE_WALL,
       EL_EXPANDABLE_WALL_HORIZONTAL,
       EL_EXPANDABLE_WALL_VERTICAL,
       EL_EXPANDABLE_WALL_ANY,
+      EL_EXPANDABLE_STEELWALL_HORIZONTAL,
+      EL_EXPANDABLE_STEELWALL_VERTICAL,
+      EL_EXPANDABLE_STEELWALL_ANY,
+      EL_EXPANDABLE_STEELWALL_GROWING,
       -1
     };
 
@@ -4096,6 +4215,10 @@ static void InitGlobal()
     element_info[i].token_name = element_name_info[i].token_name;
     element_info[i].class_name = element_name_info[i].class_name;
     element_info[i].editor_description=element_name_info[i].editor_description;
+
+#if 0
+    printf("%04d: %s\n", i, element_name_info[i].token_name);
+#endif
   }
 
   global.autoplay_leveldir = NULL;
@@ -4572,11 +4695,15 @@ void InitGfx()
 
   font_height = getFontHeight(FC_RED);
 
+#if 1
+  DrawInitText(getWindowTitleString(), 20, FC_YELLOW);
+#else
   DrawInitText(getProgramInitString(), 20, FC_YELLOW);
+#endif
   DrawInitText(PROGRAM_COPYRIGHT_STRING, 50, FC_RED);
   DrawInitText(PROGRAM_WEBSITE_STRING, WIN_YSIZE - 20 - font_height, FC_RED);
 
-  DrawInitText("Loading graphics:", 120, FC_GREEN);
+  DrawInitText("Loading graphics", 120, FC_GREEN);
 }
 
 void RedrawBackground()
@@ -4591,7 +4718,6 @@ void InitGfxBackground()
 {
   int x, y;
 
-  drawto = backbuffer;
   fieldbuffer = bitmap_db_field;
   SetDrawtoField(DRAW_BACKBUFFER);
 
@@ -4906,8 +5032,7 @@ void OpenAll()
   InitJoysticks();
 
   InitVideoDisplay();
-  InitVideoBuffer(&backbuffer, &window, WIN_XSIZE, WIN_YSIZE, DEFAULT_DEPTH,
-                 setup.fullscreen);
+  InitVideoBuffer(WIN_XSIZE, WIN_YSIZE, DEFAULT_DEPTH, setup.fullscreen);
 
   InitEventFilter(FilterMouseMotionEvents);
 
@@ -4916,8 +5041,11 @@ void OpenAll()
 
   InitGfx();
 
+  // debug_print_timestamp(0, "INIT");
   InitLevelInfo();
+  // debug_print_timestamp(0, "TIME InitLevelInfo:        ");
   InitLevelArtworkInfo();
+  // debug_print_timestamp(0, "TIME InitLevelArtworkInfo: ");
 
   InitImages();                        /* needs to know current level directory */
   InitSound(NULL);             /* needs to know current level directory */