added support for acid settings in BD engine to level editor
[rocksndiamonds.git] / src / editor.c
index 0a682af53a6409a2b5cbccc7c68e3dd9a48b8258..9345d1b12862002208ffcfd188218e91e5a4805d 100644 (file)
@@ -563,6 +563,8 @@ enum
   GADGET_ID_BD_AMOEBA_2_CONTENT_ENCLOSED,
   GADGET_ID_BD_AMOEBA_2_CONTENT_EXPLODING,
   GADGET_ID_BD_AMOEBA_2_CONTENT_LOOKS_LIKE,
+  GADGET_ID_BD_ACID_EATS_ELEMENT,
+  GADGET_ID_BD_ACID_TURNS_TO_ELEMENT,
   GADGET_ID_START_ELEMENT,
   GADGET_ID_ARTWORK_ELEMENT,
   GADGET_ID_EXPLOSION_ELEMENT,
@@ -724,6 +726,7 @@ enum
   GADGET_ID_BD_VOODOO_HURT_KILLS_PLAYER,
   GADGET_ID_BD_VOODOO_DIES_BY_ROCK,
   GADGET_ID_BD_VOODOO_VANISH_BY_EXPLOSION,
+  GADGET_ID_BD_SLIME_IS_PREDICTABLE,
   GADGET_ID_ENVELOPE_AUTOWRAP,
   GADGET_ID_ENVELOPE_CENTERED,
   GADGET_ID_MM_LASER_RED,
@@ -1068,6 +1071,7 @@ enum
   ED_CHECKBUTTON_ID_BD_VOODOO_HURT_KILLS_PLAYER,
   ED_CHECKBUTTON_ID_BD_VOODOO_DIES_BY_ROCK,
   ED_CHECKBUTTON_ID_BD_VOODOO_VANISH_BY_EXPLOSION,
+  ED_CHECKBUTTON_ID_BD_SLIME_IS_PREDICTABLE,
   ED_CHECKBUTTON_ID_ENVELOPE_AUTOWRAP,
   ED_CHECKBUTTON_ID_ENVELOPE_CENTERED,
   ED_CHECKBUTTON_ID_MM_LASER_RED,
@@ -1170,6 +1174,8 @@ enum
   ED_DRAWING_ID_BD_AMOEBA_2_CONTENT_ENCLOSED,
   ED_DRAWING_ID_BD_AMOEBA_2_CONTENT_EXPLODING,
   ED_DRAWING_ID_BD_AMOEBA_2_CONTENT_LOOKS_LIKE,
+  ED_DRAWING_ID_BD_ACID_EATS_ELEMENT,
+  ED_DRAWING_ID_BD_ACID_TURNS_TO_ELEMENT,
   ED_DRAWING_ID_START_ELEMENT,
   ED_DRAWING_ID_ARTWORK_ELEMENT,
   ED_DRAWING_ID_EXPLOSION_ELEMENT,
@@ -3792,6 +3798,14 @@ static struct
     NULL, NULL,
     "disappears in explosions",                "can be destroyed by explosions"
   },
+  {
+    ED_CHECKBUTTON_ID_BD_SLIME_IS_PREDICTABLE,
+    ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(0),
+    GADGET_ID_BD_SLIME_IS_PREDICTABLE, GADGET_ID_NONE,
+    &level.bd_slime_is_predictable,
+    NULL, NULL,
+    "slime is predictable",            "use predictable random numbers"
+  },
   {
     ED_CHECKBUTTON_ID_ENVELOPE_AUTOWRAP,
     ED_ELEMENT_SETTINGS_XPOS(0),       ED_ELEMENT_SETTINGS_YPOS(1),
@@ -4327,6 +4341,22 @@ static struct
     &level.bd_amoeba_2_content_looks_like,     1, 1,
     "use graphic of element:", NULL, NULL, NULL,       "BD amoeba 2 looks like this element"
   },
+  {
+    ED_DRAWING_ID_BD_ACID_EATS_ELEMENT,
+    ED_AREA_1X1_SETTINGS_XPOS(0),      ED_AREA_1X1_SETTINGS_YPOS(1),
+    ED_AREA_1X1_SETTINGS_XOFF,         ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_BD_ACID_EATS_ELEMENT,    GADGET_ID_NONE,
+    &level.bd_acid_eats_element,       1, 1,
+    "can eat:", NULL, NULL, NULL,              "eats this element when spreading"
+  },
+  {
+    ED_DRAWING_ID_BD_ACID_TURNS_TO_ELEMENT,
+    ED_AREA_1X1_SETTINGS_XPOS(0),      ED_AREA_1X1_SETTINGS_YPOS(3),
+    ED_AREA_1X1_SETTINGS_XOFF,         ED_AREA_1X1_SETTINGS_YOFF,
+    GADGET_ID_BD_ACID_TURNS_TO_ELEMENT,        GADGET_ID_NONE,
+    &level.bd_acid_turns_to_element,   1, 1,
+    "can leave behind:", NULL, NULL, NULL,     "turns to this element after spreading"
+  },
 
   // ---------- level start element -------------------------------------------
 
@@ -10841,6 +10871,10 @@ static void DrawPropertiesInfo(void)
 #define TEXT_GAME_OF_LIFE_4    "Max neighbours to create"
 #define TEXT_TIME_BONUS                "Extra time to solve level"
 #define TEXT_TIME_PENALTY      "Time penalty if destroyed"
+#define TEXT_PERMEABILITY_RATE "slime permeability rate"
+#define TEXT_PERMEABILITY_BITS "slime permeability bits"
+#define TEXT_RANDOM_SEED       "slime random number seed"
+#define TEXT_ACID_SPREAD_RATE  "Spread rate (percent)"
 
 static struct
 {
@@ -10957,6 +10991,14 @@ static struct
                                -100, 100                                                       },
   { EL_BD_VOODOO_DOLL,         &level.bd_voodoo_penalty_time,          TEXT_TIME_PENALTY,
                                0, 100                                                          },
+  { EL_BD_SLIME,               &level.bd_slime_permeability_rate,      TEXT_PERMEABILITY_RATE,
+                               0, 100                                                          },
+  { EL_BD_SLIME,               &level.bd_slime_permeability_bits_c64,  TEXT_PERMEABILITY_BITS,
+                               0, 255                                                          },
+  { EL_BD_SLIME,               &level.bd_slime_random_seed_c64,        TEXT_RANDOM_SEED,
+                               -1, 65535                                                       },
+  { EL_BD_ACID,                        &level.bd_acid_spread_rate,             TEXT_ACID_SPREAD_RATE,
+                               0, 100                                                          },
   { EL_EXTRA_TIME,             &level.extra_time,                      TEXT_TIME_BONUS         },
   { EL_TIME_ORB_FULL,          &level.time_orb_time,                   TEXT_TIME_BONUS         },
   { EL_GAME_OF_LIFE,           &level.game_of_life[0],                 TEXT_GAME_OF_LIFE_1,0,8 },
@@ -11138,6 +11180,8 @@ static void DrawPropertiesConfig(void)
                               (COULD_MOVE_INTO_ACID(properties_element)    ? 1 : 0) +
                               (MAYBE_DONT_COLLIDE_WITH(properties_element) ? 1 : 0) +
                               (properties_element == EL_BD_VOODOO_DOLL     ? 4 : 0) +
+                              (properties_element == EL_BD_SLIME           ? 1 : 0) +
+                              (properties_element == EL_BD_ACID            ? 1 : 0) +
                               (properties_element == EL_EMC_MAGIC_BALL     ? 2 : 0) +
                               num_element_counters);
 
@@ -11188,6 +11232,11 @@ static void DrawPropertiesConfig(void)
     }
     else if (IS_AMOEBOID(properties_element))
       MapDrawingArea(ED_DRAWING_ID_AMOEBA_CONTENT);
+    else if (properties_element == EL_BD_ACID)
+    {
+      MapDrawingArea(ED_DRAWING_ID_BD_ACID_EATS_ELEMENT);
+      MapDrawingArea(ED_DRAWING_ID_BD_ACID_TURNS_TO_ELEMENT);
+    }
     else if (properties_element == EL_YAMYAM ||
             properties_element == EL_YAMYAM_LEFT ||
             properties_element == EL_YAMYAM_RIGHT ||
@@ -11340,6 +11389,11 @@ static void DrawPropertiesConfig(void)
     MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_VOODOO_VANISH_BY_EXPLOSION);
   }
 
+  if (properties_element == EL_BD_SLIME)
+  {
+    MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_SLIME_IS_PREDICTABLE);
+  }
+
   if (properties_element == EL_BD_MAGIC_WALL)
   {
     MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_MAGIC_WALL_WAIT_HATCHING);