extended support for slime settings in BD engine to level editor
[rocksndiamonds.git] / src / files.c
index c7a523f69982e9e55cc5dd60a13c6828a6f99d57..0e9da238f1c22476a455c9219fd29b015b002ed3 100644 (file)
@@ -743,6 +743,36 @@ static struct LevelFileConfigInfo chunk_config_ELEM[] =
     TYPE_INTEGER,                      CONF_VALUE_32_BIT(1),
     &li.bd_slime_random_seed_c64,      -1
   },
+  {
+    EL_BD_SLIME,                       -1,
+    TYPE_ELEMENT,                      CONF_VALUE_16_BIT(1),
+    &li.bd_slime_eats_element_1,       EL_BD_DIAMOND
+  },
+  {
+    EL_BD_SLIME,                       -1,
+    TYPE_ELEMENT,                      CONF_VALUE_16_BIT(2),
+    &li.bd_slime_converts_to_element_1,        EL_BD_DIAMOND_FALLING
+  },
+  {
+    EL_BD_SLIME,                       -1,
+    TYPE_ELEMENT,                      CONF_VALUE_16_BIT(3),
+    &li.bd_slime_eats_element_2,       EL_BD_ROCK
+  },
+  {
+    EL_BD_SLIME,                       -1,
+    TYPE_ELEMENT,                      CONF_VALUE_16_BIT(4),
+    &li.bd_slime_converts_to_element_2,        EL_BD_ROCK_FALLING
+  },
+  {
+    EL_BD_SLIME,                       -1,
+    TYPE_ELEMENT,                      CONF_VALUE_16_BIT(5),
+    &li.bd_slime_eats_element_3,       EL_BD_NUT
+  },
+  {
+    EL_BD_SLIME,                       -1,
+    TYPE_ELEMENT,                      CONF_VALUE_16_BIT(6),
+    &li.bd_slime_converts_to_element_3,        EL_BD_NUT_FALLING
+  },
 
   {
     EL_BD_ACID,                                -1,
@@ -811,6 +841,12 @@ static struct LevelFileConfigInfo chunk_config_ELEM[] =
     &li.bd_water_cannot_flow_down,     FALSE
   },
 
+  {
+    EL_BD_NUT,                         -1,
+    TYPE_ELEMENT,                      CONF_VALUE_16_BIT(1),
+    &li.bd_nut_content,                        EL_BD_NUT_BREAKING_1
+  },
+
   // (the following values are related to various game elements)
 
   {
@@ -4105,6 +4141,12 @@ static void CopyNativeLevel_RND_to_BD(struct LevelInfo *level)
   cave->level_slime_permeability_c64[0]        = level->bd_slime_permeability_bits_c64;
   cave->level_slime_seed_c64[0]                = level->bd_slime_random_seed_c64;
   cave->level_rand[0]                  = level->bd_cave_random_seed_c64;
+  cave->slime_eats_1                   = map_element_RND_to_BD_cave(level->bd_slime_eats_element_1);
+  cave->slime_converts_1               = map_element_RND_to_BD_cave(level->bd_slime_converts_to_element_1);
+  cave->slime_eats_2                   = map_element_RND_to_BD_cave(level->bd_slime_eats_element_2);
+  cave->slime_converts_2               = map_element_RND_to_BD_cave(level->bd_slime_converts_to_element_2);
+  cave->slime_eats_3                   = map_element_RND_to_BD_cave(level->bd_slime_eats_element_3);
+  cave->slime_converts_3               = map_element_RND_to_BD_cave(level->bd_slime_converts_to_element_3);
 
   cave->acid_eats_this                 = map_element_RND_to_BD_cave(level->bd_acid_eats_element);
   cave->acid_spread_ratio              = level->bd_acid_spread_rate * 10000;
@@ -4125,6 +4167,8 @@ static void CopyNativeLevel_RND_to_BD(struct LevelInfo *level)
 
   cave->water_does_not_flow_down       = level->bd_water_cannot_flow_down;
 
+  cave->nut_turns_to_when_crushed      = map_element_RND_to_BD_cave(level->bd_nut_content);
+
   // level name
   strncpy(cave->name, level->name, sizeof(GdString));
   cave->name[sizeof(GdString) - 1] = '\0';
@@ -4223,6 +4267,12 @@ static void CopyNativeLevel_BD_to_RND(struct LevelInfo *level)
   level->bd_slime_permeability_bits_c64        = cave->level_slime_permeability_c64[bd_level_nr];
   level->bd_slime_random_seed_c64      = cave->level_slime_seed_c64[bd_level_nr];
   level->bd_cave_random_seed_c64       = cave->level_rand[bd_level_nr];
+  level->bd_slime_eats_element_1       = map_element_BD_to_RND_cave(cave->slime_eats_1);
+  level->bd_slime_converts_to_element_1        = map_element_BD_to_RND_cave(cave->slime_converts_1);
+  level->bd_slime_eats_element_2       = map_element_BD_to_RND_cave(cave->slime_eats_2);
+  level->bd_slime_converts_to_element_2        = map_element_BD_to_RND_cave(cave->slime_converts_2);
+  level->bd_slime_eats_element_3       = map_element_BD_to_RND_cave(cave->slime_eats_3);
+  level->bd_slime_converts_to_element_3        = map_element_BD_to_RND_cave(cave->slime_converts_3);
 
   level->bd_acid_eats_element          = map_element_BD_to_RND_cave(cave->acid_eats_this);
   level->bd_acid_spread_rate           = cave->acid_spread_ratio / 10000;
@@ -4243,6 +4293,8 @@ static void CopyNativeLevel_BD_to_RND(struct LevelInfo *level)
 
   level->bd_water_cannot_flow_down     = cave->water_does_not_flow_down;
 
+  level->bd_nut_content                        = map_element_BD_to_RND_cave(cave->nut_turns_to_when_crushed);
+
   // level name
   char *cave_name = getStringPrint("%s / %d", cave->name, bd_level_nr + 1);