cleanup of unnecessarily convoluted function call
[rocksndiamonds.git] / src / init.c
index 340a00db3ea9e44a170905b3a05d39e608fe6219..e451d99ef862f9cd2d09d081c1ce136e0f8483db 100644 (file)
@@ -244,6 +244,10 @@ static void InitElementSmallImagesScaledUp(int graphic)
 {
   struct GraphicInfo *g = &graphic_info[graphic];
 
+  // if graphic was cloned, scale cloned graphic
+  if (graphic_info[graphic].clone_from != -1)
+    graphic = graphic_info[graphic].clone_from;
+
   // create small and game tile sized bitmaps (and scale up, if needed)
   CreateImageWithSmallImages(graphic, g->scale_up_factor, g->tile_size);
 }
@@ -307,6 +311,10 @@ static void InitScaledImagesScaledUp(int graphic)
 {
   struct GraphicInfo *g = &graphic_info[graphic];
 
+  // if graphic was cloned, scale cloned graphic
+  if (graphic_info[graphic].clone_from != -1)
+    graphic = graphic_info[graphic].clone_from;
+
   ScaleImage(graphic, g->scale_up_factor);
 }
 
@@ -1147,6 +1155,8 @@ static void InitElementGraphicInfo(void)
       // look for special default action graphic (classic game specific)
       if (IS_BD_ELEMENT(i) && element_info[EL_BD_DEFAULT].graphic[act] != -1)
        default_action_graphic = element_info[EL_BD_DEFAULT].graphic[act];
+      if (IS_BDX_ELEMENT(i) && element_info[EL_BDX_DEFAULT].graphic[act] != -1)
+       default_action_graphic = element_info[EL_BDX_DEFAULT].graphic[act];
       if (IS_SP_ELEMENT(i) && element_info[EL_SP_DEFAULT].graphic[act] != -1)
        default_action_graphic = element_info[EL_SP_DEFAULT].graphic[act];
       if (IS_SB_ELEMENT(i) && element_info[EL_SB_DEFAULT].graphic[act] != -1)
@@ -1156,6 +1166,8 @@ static void InitElementGraphicInfo(void)
 
       if (IS_BD_ELEMENT(i) && element_info[EL_BD_DEFAULT].crumbled[act] != -1)
        default_action_crumbled = element_info[EL_BD_DEFAULT].crumbled[act];
+      if (IS_BDX_ELEMENT(i) && element_info[EL_BDX_DEFAULT].crumbled[act] != -1)
+       default_action_crumbled = element_info[EL_BDX_DEFAULT].crumbled[act];
       if (IS_SP_ELEMENT(i) && element_info[EL_SP_DEFAULT].crumbled[act] != -1)
        default_action_crumbled = element_info[EL_SP_DEFAULT].crumbled[act];
       if (IS_SB_ELEMENT(i) && element_info[EL_SB_DEFAULT].crumbled[act] != -1)
@@ -1271,6 +1283,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;
 
@@ -2145,6 +2170,8 @@ static void InitElementSoundInfo(void)
       // look for special default action sound (classic game specific)
       if (IS_BD_ELEMENT(i) && element_info[EL_BD_DEFAULT].sound[act] != -1)
        default_action_sound = element_info[EL_BD_DEFAULT].sound[act];
+      if (IS_BDX_ELEMENT(i) && element_info[EL_BDX_DEFAULT].sound[act] != -1)
+       default_action_sound = element_info[EL_BDX_DEFAULT].sound[act];
       if (IS_SP_ELEMENT(i) && element_info[EL_SP_DEFAULT].sound[act] != -1)
        default_action_sound = element_info[EL_SP_DEFAULT].sound[act];
       if (IS_SB_ELEMENT(i) && element_info[EL_SB_DEFAULT].sound[act] != -1)
@@ -4278,8 +4305,17 @@ void InitElementPropertiesStatic(void)
     EL_AMOEBA_DRY,
     EL_AMOEBA_FULL,
     EL_BD_AMOEBA,
-    EL_BD_AMOEBA_2,
-    EL_BD_ACID,
+    EL_BDX_AMOEBA_1,
+    EL_BDX_AMOEBA_2,
+    EL_BDX_SLIME,
+    EL_BDX_ACID,
+    EL_BDX_BITER,
+    EL_BDX_BITER_RIGHT,
+    EL_BDX_BITER_UP,
+    EL_BDX_BITER_LEFT,
+    EL_BDX_BITER_DOWN,
+    EL_BDX_BLADDER,
+    EL_BDX_NUT,
     EL_EMC_MAGIC_BALL,
     EL_EMC_ANDROID,
     EL_MM_GRAY_BALL,
@@ -4575,7 +4611,8 @@ void InitElementPropertiesStatic(void)
   static int ep_editor_cascade_active[] =
   {
     EL_INTERNAL_CASCADE_BD_ACTIVE,
-    EL_INTERNAL_CASCADE_BD_NATIVE_ACTIVE,
+    EL_INTERNAL_CASCADE_BDX_ACTIVE,
+    EL_INTERNAL_CASCADE_BDX_EFFECTS_ACTIVE,
     EL_INTERNAL_CASCADE_EM_ACTIVE,
     EL_INTERNAL_CASCADE_EMC_ACTIVE,
     EL_INTERNAL_CASCADE_RND_ACTIVE,
@@ -4600,7 +4637,8 @@ void InitElementPropertiesStatic(void)
   static int ep_editor_cascade_inactive[] =
   {
     EL_INTERNAL_CASCADE_BD,
-    EL_INTERNAL_CASCADE_BD_NATIVE,
+    EL_INTERNAL_CASCADE_BDX,
+    EL_INTERNAL_CASCADE_BDX_EFFECTS,
     EL_INTERNAL_CASCADE_EM,
     EL_INTERNAL_CASCADE_EMC,
     EL_INTERNAL_CASCADE_RND,
@@ -5158,6 +5196,7 @@ static void InitGlobal(void)
   global.autoplay_leveldir = NULL;
   global.patchtapes_leveldir = NULL;
   global.convert_leveldir = NULL;
+  global.dumplevelset_leveldir = NULL;
   global.dumplevel_leveldir = NULL;
   global.dumptape_leveldir = NULL;
   global.create_sketch_images_dir = NULL;
@@ -5269,6 +5308,23 @@ static void Execute_Command(char *command)
 
     exit(0);
   }
+  else if (strPrefix(command, "dump levelset "))
+  {
+    char *filename = &command[14];
+
+    if (fileExists(filename) && isLevelsetFilename_BD(filename))
+    {
+      DumpLevelsetFromFilename_BD(filename);
+
+      exit(0);
+    }
+
+    char *leveldir = getStringCopy(filename);  // read command parameters
+
+    global.dumplevelset_leveldir = leveldir;
+
+    program.headless = TRUE;
+  }
   else if (strPrefix(command, "dump level "))
   {
     char *filename = &command[11];
@@ -6247,9 +6303,9 @@ static void InitOverrideArtwork(void)
   gfx.override_level_music    = FALSE;
 
   // now check if this level set has definitions for custom elements
-  if (setup.override_level_graphics == AUTO ||
-      setup.override_level_sounds   == AUTO ||
-      setup.override_level_music    == AUTO)
+  if (setup.override_level_graphics == STATE_AUTO ||
+      setup.override_level_sounds   == STATE_AUTO ||
+      setup.override_level_music    == STATE_AUTO)
     redefined_ce_found =
       (CheckArtworkTypeForRedefinedCustomElements(ARTWORK_TYPE_GRAPHICS) |
        CheckArtworkTypeForRedefinedCustomElements(ARTWORK_TYPE_SOUNDS) |
@@ -6262,14 +6318,14 @@ static void InitOverrideArtwork(void)
 
   if (redefined_ce_found)
   {
-    // this level set has CE definitions: change "AUTO" to "FALSE"
+    // this level set has CE definitions: change "MODE_AUTO" to "FALSE"
     gfx.override_level_graphics = (setup.override_level_graphics == TRUE);
     gfx.override_level_sounds   = (setup.override_level_sounds   == TRUE);
     gfx.override_level_music    = (setup.override_level_music    == TRUE);
   }
   else
   {
-    // this level set has no CE definitions: change "AUTO" to "TRUE"
+    // this level set has no CE definitions: change "MODE_AUTO" to "TRUE"
     gfx.override_level_graphics = (setup.override_level_graphics != FALSE);
     gfx.override_level_sounds   = (setup.override_level_sounds   != FALSE);
     gfx.override_level_music    = (setup.override_level_music    != FALSE);
@@ -6653,6 +6709,11 @@ void OpenAll(void)
     ConvertLevels();
     return;
   }
+  else if (global.dumplevelset_leveldir)
+  {
+    DumpLevelset();
+    return;
+  }
   else if (global.dumplevel_leveldir)
   {
     DumpLevels();
@@ -6691,6 +6752,9 @@ void OpenAll(void)
 
   DrawMainMenu();
 
+  if (options.drop_file != NULL)
+    PushDropEvent(options.drop_file);
+
 #if 0
   Debug("internal:path", "SDL_GetBasePath() == '%s'",
        SDL_GetBasePath());