GADGET_ID_BD_AMOEBA_2_CONTENT_LOOKS_LIKE,
GADGET_ID_BD_ACID_EATS_ELEMENT,
GADGET_ID_BD_ACID_TURNS_TO_ELEMENT,
+ GADGET_ID_BD_BITER_EATS_ELEMENT,
GADGET_ID_START_ELEMENT,
GADGET_ID_ARTWORK_ELEMENT,
GADGET_ID_EXPLOSION_ELEMENT,
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_BD_BITER_EATS_ELEMENT,
ED_DRAWING_ID_START_ELEMENT,
ED_DRAWING_ID_ARTWORK_ELEMENT,
ED_DRAWING_ID_EXPLOSION_ELEMENT,
&level.bd_acid_turns_to_element, 1, 1,
"Can leave behind:", NULL, NULL, NULL, "Turns to this element after spreading"
},
+ {
+ ED_DRAWING_ID_BD_BITER_EATS_ELEMENT,
+ ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(2),
+ ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF,
+ GADGET_ID_BD_BITER_EATS_ELEMENT, GADGET_ID_NONE,
+ &level.bd_biter_eats_element, 1, 1,
+ "Can eat:", NULL, NULL, NULL, "Eats this element when moving"
+ },
// ---------- level start element -------------------------------------------
#define TEXT_PERMEABILITY_BITS "slime permeability bits"
#define TEXT_RANDOM_SEED "slime random number seed"
#define TEXT_ACID_SPREAD_RATE "Spread rate (percent)"
+#define TEXT_BITER_MOVE_DELAY "Move delay (BD frames)"
static struct
{
-1, 65535 },
{ EL_BD_ACID, &level.bd_acid_spread_rate, TEXT_ACID_SPREAD_RATE,
0, 100 },
+ { EL_BD_BITER, &level.bd_biter_move_delay, TEXT_BITER_MOVE_DELAY,
+ 0, 3 },
+ { EL_BD_BITER_RIGHT, &level.bd_biter_move_delay, TEXT_BITER_MOVE_DELAY,
+ 0, 3 },
+ { EL_BD_BITER_UP, &level.bd_biter_move_delay, TEXT_BITER_MOVE_DELAY,
+ 0, 3 },
+ { EL_BD_BITER_LEFT, &level.bd_biter_move_delay, TEXT_BITER_MOVE_DELAY,
+ 0, 3 },
+ { EL_BD_BITER_DOWN, &level.bd_biter_move_delay, TEXT_BITER_MOVE_DELAY,
+ 0, 3 },
{ 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 },
MapDrawingArea(ED_DRAWING_ID_BD_ACID_EATS_ELEMENT);
MapDrawingArea(ED_DRAWING_ID_BD_ACID_TURNS_TO_ELEMENT);
}
+ else if (IS_BD_BITER(properties_element))
+ {
+ MapDrawingArea(ED_DRAWING_ID_BD_BITER_EATS_ELEMENT);
+ }
else if (properties_element == EL_YAMYAM ||
properties_element == EL_YAMYAM_LEFT ||
properties_element == EL_YAMYAM_RIGHT ||
&li.bd_acid_turns_to_element, EL_EMPTY
},
+ {
+ EL_BD_BITER, -1,
+ TYPE_INTEGER, CONF_VALUE_8_BIT(1),
+ &li.bd_biter_move_delay, 0
+ },
+ {
+ EL_BD_BITER, -1,
+ TYPE_ELEMENT, CONF_VALUE_16_BIT(1),
+ &li.bd_biter_eats_element, EL_BD_DIAMOND
+ },
+
// (the following values are related to various game elements)
{
cave->acid_spread_ratio = level->bd_acid_spread_rate * 10000;
cave->acid_turns_to = map_element_RND_to_BD(level->bd_acid_turns_to_element);
+ cave->biter_delay_frame = level->bd_biter_move_delay;
+ cave->biter_eat = map_element_RND_to_BD(level->bd_biter_eats_element);
+
// level name
strncpy(cave->name, level->name, sizeof(GdString));
cave->name[sizeof(GdString) - 1] = '\0';
level->bd_acid_spread_rate = cave->acid_spread_ratio / 10000;
level->bd_acid_turns_to_element = map_element_BD_to_RND(cave->acid_turns_to);
+ level->bd_biter_move_delay = cave->biter_delay_frame;
+ level->bd_biter_eats_element = map_element_BD_to_RND(cave->biter_eat);
+
// level name
char *cave_name = getStringPrint("%s / %d", cave->name, bd_level_nr + 1);
(e) == EL_BD_PLAYER_GLUED || \
(e) == EL_BD_PLAYER_STIRRING)
+#define IS_BD_BITER(e) ((e) == EL_BD_BITER || \
+ (e) == EL_BD_BITER_RIGHT || \
+ (e) == EL_BD_BITER_UP || \
+ (e) == EL_BD_BITER_LEFT || \
+ (e) == EL_BD_BITER_DOWN)
+
#define IS_SOKOBAN_OBJECT_OR_FIELD(e) ((e) == EL_SOKOBAN_OBJECT || \
(e) == EL_SOKOBAN_FIELD_EMPTY || \
(e) == EL_SOKOBAN_FIELD_FULL)
int bd_acid_eats_element; // BD acid eats this game element when spreading
int bd_acid_spread_rate; // BD acid probability of spreading (in percent)
int bd_acid_turns_to_element; // BD acid target element after spreading
+ int bd_biter_move_delay; // BD biter delay between movements (in BD frames)
+ int bd_biter_eats_element; // BD biter eats this game element when moving
boolean em_slippery_gems; // EM style "gems slip from wall" behaviour
boolean em_explodes_by_fire; // EM style chain explosion behaviour