removed unused image file for native Boulder Dash graphics
[rocksndiamonds.git] / src / init.c
index 33c47f98e9c423f7c056b7d74a53ded8173e8826..975f1cbce85c7c69d62b4005b1061ad5633c379d 100644 (file)
@@ -1271,6 +1271,19 @@ static void InitElementSpecialGraphicInfo(void)
       action = -1;
     }
 
+    // for BD effect editor graphics, replace element with effect element, if exists
+    if (action != -1 && special == GFX_SPECIAL_ARG_EDITOR)
+    {
+      int element_bd = map_element_RND_to_BD_effect(element, action);
+      int element_ef = map_element_BD_to_RND_cave(element_bd);
+
+      if (element_ef != EL_UNKNOWN)
+      {
+       element = element_ef;
+       action = -1;
+      }
+    }
+
     if (element >= MAX_NUM_ELEMENTS)
       continue;
 
@@ -1550,7 +1563,7 @@ static void set_graphic_parameters_ext(int graphic, int *parameter,
 
   // optionally, the second movement tile can be specified as start tile
   if (parameter[GFX_ARG_2ND_SWAP_TILES] != ARG_UNDEFINED_VALUE)
-    g->swap_double_tiles= parameter[GFX_ARG_2ND_SWAP_TILES];
+    g->swap_double_tiles = parameter[GFX_ARG_2ND_SWAP_TILES];
 
   // automatically determine correct number of frames, if not defined
   if (parameter[GFX_ARG_FRAMES] != ARG_UNDEFINED_VALUE)
@@ -1649,7 +1662,7 @@ static void set_graphic_parameters_ext(int graphic, int *parameter,
   g->draw_yoffset = parameter[GFX_ARG_DRAW_YOFFSET];
 
   // use a different default value for global animations and toons
-  if ((graphic >= IMG_GFX_GLOBAL_ANIM_1 && graphic <= IMG_GFX_GLOBAL_ANIM_8) ||
+  if ((graphic >= IMG_GFX_GLOBAL_ANIM_1 && graphic <= IMG_GFX_GLOBAL_ANIM_32) ||
       (graphic >= IMG_TOON_1            && graphic <= IMG_TOON_20))
     g->draw_masked = TRUE;
 
@@ -2446,6 +2459,8 @@ static void ReinitializeGraphics(void)
   InitImageTextures();                 // create textures for certain images
   print_timestamp_time("InitImageTextures");
 
+  InitGraphicInfo_BD();                        // graphic mapping for BD engine
+  print_timestamp_time("InitGraphicInfo_BD");
   InitGraphicInfo_EM();                        // graphic mapping for EM engine
   print_timestamp_time("InitGraphicInfo_EM");
 
@@ -3615,15 +3630,15 @@ void InitElementPropertiesStatic(void)
     EL_PLAYER_3,
     EL_PLAYER_4,
     EL_BD_FIREFLY,
-    EL_BD_FIREFLY_1,
-    EL_BD_FIREFLY_2,
-    EL_BD_FIREFLY_3,
-    EL_BD_FIREFLY_4,
+    EL_BD_FIREFLY_LEFT,
+    EL_BD_FIREFLY_DOWN,
+    EL_BD_FIREFLY_RIGHT,
+    EL_BD_FIREFLY_UP,
     EL_BD_BUTTERFLY,
-    EL_BD_BUTTERFLY_1,
-    EL_BD_BUTTERFLY_2,
-    EL_BD_BUTTERFLY_3,
-    EL_BD_BUTTERFLY_4,
+    EL_BD_BUTTERFLY_DOWN,
+    EL_BD_BUTTERFLY_LEFT,
+    EL_BD_BUTTERFLY_UP,
+    EL_BD_BUTTERFLY_RIGHT,
     EL_BD_AMOEBA,
     EL_CHAR_QUESTION,
     EL_UNKNOWN,
@@ -4276,6 +4291,16 @@ void InitElementPropertiesStatic(void)
     EL_AMOEBA_DRY,
     EL_AMOEBA_FULL,
     EL_BD_AMOEBA,
+    EL_BD_AMOEBA_2,
+    EL_BD_SLIME,
+    EL_BD_ACID,
+    EL_BD_BITER,
+    EL_BD_BITER_RIGHT,
+    EL_BD_BITER_UP,
+    EL_BD_BITER_LEFT,
+    EL_BD_BITER_DOWN,
+    EL_BD_BLADDER,
+    EL_BD_NUT,
     EL_EMC_MAGIC_BALL,
     EL_EMC_ANDROID,
     EL_MM_GRAY_BALL,
@@ -4571,6 +4596,8 @@ void InitElementPropertiesStatic(void)
   static int ep_editor_cascade_active[] =
   {
     EL_INTERNAL_CASCADE_BD_ACTIVE,
+    EL_INTERNAL_CASCADE_BD_NATIVE_ACTIVE,
+    EL_INTERNAL_CASCADE_BD_EFFECTS_ACTIVE,
     EL_INTERNAL_CASCADE_EM_ACTIVE,
     EL_INTERNAL_CASCADE_EMC_ACTIVE,
     EL_INTERNAL_CASCADE_RND_ACTIVE,
@@ -4595,6 +4622,8 @@ void InitElementPropertiesStatic(void)
   static int ep_editor_cascade_inactive[] =
   {
     EL_INTERNAL_CASCADE_BD,
+    EL_INTERNAL_CASCADE_BD_NATIVE,
+    EL_INTERNAL_CASCADE_BD_EFFECTS,
     EL_INTERNAL_CASCADE_EM,
     EL_INTERNAL_CASCADE_EMC,
     EL_INTERNAL_CASCADE_RND,
@@ -5028,7 +5057,7 @@ static void InitGlobal(void)
 
     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;
+    element_info[i].editor_description = element_name_info[i].editor_description;
   }
 
   for (i = 0; i < NUM_GLOBAL_ANIM_TOKENS + 1; i++)
@@ -5051,6 +5080,13 @@ static void InitGlobal(void)
                 image_config[i].token,
                 image_config[i].value);
 
+  // create hash from sound config list
+  sound_config_hash = newSetupFileHash();
+  for (i = 0; sound_config[i].token != NULL; i++)
+    setHashEntry(sound_config_hash,
+                sound_config[i].token,
+                sound_config[i].value);
+
   // create hash from element token list
   element_token_hash = newSetupFileHash();
   for (i = 0; element_name_info[i].token_name != NULL; i++)
@@ -5493,9 +5529,7 @@ static void InitSetup(void)
 static void InitGameInfo(void)
 {
   game.restart_level = FALSE;
-
   game.request_active = FALSE;
-  game.request_active_or_moving = FALSE;
 
   game.use_masked_elements_initial = FALSE;
 }
@@ -5595,10 +5629,15 @@ static void InitArtworkConfig(void)
 
   // dynamically determine list of sound tokens to be ignored
   num_ignore_sound_tokens = num_ignore_generic_tokens;
+  for (i = 0; sound_config_vars[i].token != NULL; i++)
+    num_ignore_sound_tokens++;
   ignore_sound_tokens =
     checked_malloc((num_ignore_sound_tokens + 1) * sizeof(char *));
   for (i = 0; i < num_ignore_generic_tokens; i++)
     ignore_sound_tokens[i] = ignore_generic_tokens[i];
+  for (i = 0; i < num_ignore_sound_tokens - num_ignore_generic_tokens; i++)
+    ignore_sound_tokens[num_ignore_generic_tokens + i] =
+      sound_config_vars[i].token;
   ignore_sound_tokens[num_ignore_sound_tokens] = NULL;
 
   // dynamically determine list of music tokens to be ignored
@@ -5715,6 +5754,7 @@ void InitGfxBuffers(void)
   // required if door size definitions have changed
   InitGraphicCompatibilityInfo_Doors();
 
+  InitGfxBuffers_BD();
   InitGfxBuffers_EM();
   InitGfxBuffers_SP();
   InitGfxBuffers_MM();
@@ -5940,6 +5980,29 @@ static void InitGfxBackground(void)
   redraw_mask = REDRAW_ALL;
 }
 
+static void InitSnd(void)
+{
+  InitSoundSettings_Static();
+
+  // read settings for initial sounds from default custom artwork config
+  char *snd_config_filename = getPath3(options.sounds_directory,
+                                      SND_DEFAULT_SUBDIR,
+                                      SOUNDSINFO_FILENAME);
+
+  if (fileExists(snd_config_filename))
+  {
+    SetupFileHash *setup_file_hash = loadSetupFileHash(snd_config_filename);
+
+    if (setup_file_hash)
+    {
+      // read values from custom sounds config file
+      InitSoundSettings_FromHash(setup_file_hash, FALSE);
+
+      freeSetupFileHash(setup_file_hash);
+    }
+  }
+}
+
 static void InitLevelInfo(void)
 {
   LoadLevelInfo();                             // global level info
@@ -6038,6 +6101,9 @@ static void InitSound(void)
   InitReloadCustomSounds();
   print_timestamp_time("InitReloadCustomSounds");
 
+  LoadSoundSettings();
+  print_timestamp_time("LoadSoundSettings");
+
   ReinitializeSounds();
   print_timestamp_time("ReinitializeSounds");
 
@@ -6479,8 +6545,8 @@ void DisplayExitMessage(char *format, va_list ap)
 
   BackToFront();
 
-  // deactivate toons on error message screen
-  setup.toons = FALSE;
+  // deactivate toons and global animations on error message screen
+  setup.global_animations = FALSE;
 
   WaitForEventToContinue();
 }
@@ -6561,6 +6627,7 @@ void OpenAll(void)
   print_timestamp_time("[init element properties stuff]");
 
   InitGfx();
+  InitSnd();
 
   print_timestamp_time("InitGfx");
 
@@ -6589,6 +6656,7 @@ void OpenAll(void)
 
   InitGfxBackground();
 
+  bd_open_all();
   em_open_all();
   sp_open_all();
   mm_open_all();
@@ -6673,7 +6741,7 @@ static boolean WaitForApiThreads(void)
     return TRUE;
 
   // deactivate global animations (not accessible in game state "loading")
-  setup.toons = FALSE;
+  setup.global_animations = FALSE;
 
   // set game state to "loading" to be able to show busy animation
   SetGameStatus(GAME_MODE_LOADING);
@@ -6707,6 +6775,7 @@ void CloseAllAndExit(int exit_value)
   FreeAllMusic();
   CloseAudio();                // called after freeing sounds (needed for SDL)
 
+  bd_close_all();
   em_close_all();
   sp_close_all();