GADGET_ID_BD_HATCHING_DELAY_SECONDS_DOWN,
GADGET_ID_BD_HATCHING_DELAY_SECONDS_TEXT,
GADGET_ID_BD_HATCHING_DELAY_SECONDS_UP,
+ GADGET_ID_BD_PUSHING_PROB_DOWN,
+ GADGET_ID_BD_PUSHING_PROB_TEXT,
+ GADGET_ID_BD_PUSHING_PROB_UP,
+ GADGET_ID_BD_PUSHING_PROB_WITH_SWEET_DOWN,
+ GADGET_ID_BD_PUSHING_PROB_WITH_SWEET_TEXT,
+ GADGET_ID_BD_PUSHING_PROB_WITH_SWEET_UP,
GADGET_ID_ELEMENT_VALUE1_DOWN,
GADGET_ID_ELEMENT_VALUE1_TEXT,
GADGET_ID_ELEMENT_VALUE1_UP,
GADGET_ID_MAGIC_BALL_CONTENT_7,
GADGET_ID_ANDROID_CONTENT,
GADGET_ID_AMOEBA_CONTENT,
+ GADGET_ID_BD_AMOEBA_CONTENT_TOO_BIG,
+ GADGET_ID_BD_AMOEBA_CONTENT_ENCLOSED,
+ GADGET_ID_BD_AMOEBA_2_CONTENT_TOO_BIG,
+ GADGET_ID_BD_AMOEBA_2_CONTENT_ENCLOSED,
+ GADGET_ID_BD_AMOEBA_2_CONTENT_EXPLODING,
+ GADGET_ID_BD_AMOEBA_2_CONTENT_LOOKS_LIKE,
GADGET_ID_START_ELEMENT,
GADGET_ID_ARTWORK_ELEMENT,
GADGET_ID_EXPLOSION_ELEMENT,
GADGET_ID_BD_INTERMISSION,
GADGET_ID_BD_PAL_TIMING,
GADGET_ID_BD_LINE_SHIFTING_BORDERS,
+ GADGET_ID_BD_SCAN_FIRST_AND_LAST_ROW,
+ GADGET_ID_BD_SHORT_EXPLOSIONS,
+ GADGET_ID_BD_GRAVITY_AFFECTS_ALL,
GADGET_ID_STICK_ELEMENT,
GADGET_ID_EM_SLIPPERY_GEMS,
GADGET_ID_EM_EXPLODES_BY_FIRE,
GADGET_ID_CAN_MOVE_INTO_ACID,
GADGET_ID_DONT_COLLIDE_WITH,
GADGET_ID_BD_DIAGONAL_MOVEMENTS,
+ GADGET_ID_BD_TOPMOST_PLAYER_ACTIVE,
+ GADGET_ID_BD_PUSH_MEGA_ROCK_WITH_SWEET,
+ GADGET_ID_BD_MAGIC_WALL_WAIT_HATCHING,
+ GADGET_ID_BD_MAGIC_WALL_STOPS_AMOEBA,
+ GADGET_ID_BD_AMOEBA_WAIT_FOR_HATCHING,
+ GADGET_ID_BD_AMOEBA_START_IMMEDIATELY,
+ GADGET_ID_BD_AMOEBA_2_EXPLODE_BY_AMOEBA,
GADGET_ID_ENVELOPE_AUTOWRAP,
GADGET_ID_ENVELOPE_CENTERED,
GADGET_ID_MM_LASER_RED,
ED_COUNTER_ID_BD_CYCLE_DELAY_C64,
ED_COUNTER_ID_BD_HATCHING_DELAY_CYCLES,
ED_COUNTER_ID_BD_HATCHING_DELAY_SECONDS,
+ ED_COUNTER_ID_BD_PUSHING_PROB,
+ ED_COUNTER_ID_BD_PUSHING_PROB_WITH_SWEET,
ED_COUNTER_ID_ELEMENT_VALUE1,
ED_COUNTER_ID_ELEMENT_VALUE2,
ED_COUNTER_ID_ELEMENT_VALUE3,
ED_CHECKBUTTON_ID_BD_INTERMISSION,
ED_CHECKBUTTON_ID_BD_PAL_TIMING,
ED_CHECKBUTTON_ID_BD_LINE_SHIFTING_BORDERS,
+ ED_CHECKBUTTON_ID_BD_SCAN_FIRST_AND_LAST_ROW,
+ ED_CHECKBUTTON_ID_BD_SHORT_EXPLOSIONS,
+ ED_CHECKBUTTON_ID_BD_GRAVITY_AFFECTS_ALL,
ED_CHECKBUTTON_ID_STICK_ELEMENT,
ED_CHECKBUTTON_ID_EM_SLIPPERY_GEMS,
ED_CHECKBUTTON_ID_EM_EXPLODES_BY_FIRE,
ED_CHECKBUTTON_ID_CAN_MOVE_INTO_ACID,
ED_CHECKBUTTON_ID_DONT_COLLIDE_WITH,
ED_CHECKBUTTON_ID_BD_DIAGONAL_MOVEMENTS,
+ ED_CHECKBUTTON_ID_BD_TOPMOST_PLAYER_ACTIVE,
+ ED_CHECKBUTTON_ID_BD_PUSH_MEGA_ROCK_WITH_SWEET,
+ ED_CHECKBUTTON_ID_BD_MAGIC_WALL_WAIT_HATCHING,
+ ED_CHECKBUTTON_ID_BD_MAGIC_WALL_STOPS_AMOEBA,
+ ED_CHECKBUTTON_ID_BD_AMOEBA_WAIT_FOR_HATCHING,
+ ED_CHECKBUTTON_ID_BD_AMOEBA_START_IMMEDIATELY,
+ ED_CHECKBUTTON_ID_BD_AMOEBA_2_EXPLODE_BY_AMOEBA,
ED_CHECKBUTTON_ID_ENVELOPE_AUTOWRAP,
ED_CHECKBUTTON_ID_ENVELOPE_CENTERED,
ED_CHECKBUTTON_ID_MM_LASER_RED,
#define ED_CHECKBUTTON_ID_EDITOR_LAST ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE_2
#define ED_CHECKBUTTON_ID_ENGINE_FIRST ED_CHECKBUTTON_ID_BD_INTERMISSION
-#define ED_CHECKBUTTON_ID_ENGINE_LAST ED_CHECKBUTTON_ID_BD_LINE_SHIFTING_BORDERS
+#define ED_CHECKBUTTON_ID_ENGINE_LAST ED_CHECKBUTTON_ID_BD_GRAVITY_AFFECTS_ALL
#define ED_CHECKBUTTON_ID_CUSTOM1_FIRST ED_CHECKBUTTON_ID_CUSTOM_USE_GRAPHIC
#define ED_CHECKBUTTON_ID_CUSTOM1_LAST ED_CHECKBUTTON_ID_CUSTOM_INDESTRUCTIBLE
ED_DRAWING_ID_MAGIC_BALL_CONTENT_7,
ED_DRAWING_ID_ANDROID_CONTENT,
ED_DRAWING_ID_AMOEBA_CONTENT,
+ ED_DRAWING_ID_BD_AMOEBA_CONTENT_TOO_BIG,
+ ED_DRAWING_ID_BD_AMOEBA_CONTENT_ENCLOSED,
+ ED_DRAWING_ID_BD_AMOEBA_2_CONTENT_TOO_BIG,
+ 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_START_ELEMENT,
ED_DRAWING_ID_ARTWORK_ELEMENT,
ED_DRAWING_ID_EXPLOSION_ELEMENT,
// ---------- element settings: configure (various elements) ----------------
+ {
+ ED_COUNTER_ID_BD_PUSHING_PROB,
+ ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(2),
+ 0, 100,
+ GADGET_ID_BD_PUSHING_PROB_DOWN, GADGET_ID_BD_PUSHING_PROB_UP,
+ GADGET_ID_BD_PUSHING_PROB_TEXT, GADGET_ID_NONE,
+ &level.bd_pushing_prob,
+ NULL, NULL, "push probability"
+ },
+ {
+ ED_COUNTER_ID_BD_PUSHING_PROB_WITH_SWEET,
+ ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(3),
+ 0, 100,
+ GADGET_ID_BD_PUSHING_PROB_WITH_SWEET_DOWN, GADGET_ID_BD_PUSHING_PROB_WITH_SWEET_UP,
+ GADGET_ID_BD_PUSHING_PROB_WITH_SWEET_TEXT, GADGET_ID_NONE,
+ &level.bd_pushing_prob_with_sweet,
+ NULL, NULL, "push probability with sweet"
+ },
{
ED_COUNTER_ID_ELEMENT_VALUE1,
ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(0),
},
{
ED_CHECKBUTTON_ID_BD_LINE_SHIFTING_BORDERS,
- ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(5),
+ ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(6),
GADGET_ID_BD_LINE_SHIFTING_BORDERS, GADGET_ID_NONE,
&level.bd_line_shifting_borders,
- NULL, NULL,
+ "Compatibility settings:", NULL,
"line-shifting borders", "use line-shifting wrap-around"
},
+ {
+ ED_CHECKBUTTON_ID_BD_SCAN_FIRST_AND_LAST_ROW,
+ ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(7),
+ GADGET_ID_BD_SCAN_FIRST_AND_LAST_ROW, GADGET_ID_NONE,
+ &level.bd_scan_first_and_last_row,
+ NULL, NULL,
+ "scan first and last row", "also process top/bottom border rows"
+ },
+ {
+ ED_CHECKBUTTON_ID_BD_SHORT_EXPLOSIONS,
+ ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(8),
+ GADGET_ID_BD_SHORT_EXPLOSIONS, GADGET_ID_NONE,
+ &level.bd_short_explosions,
+ NULL, NULL,
+ "short explosions", "use four game cycles for explosions"
+ },
+ {
+ ED_CHECKBUTTON_ID_BD_GRAVITY_AFFECTS_ALL,
+ ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(9),
+ GADGET_ID_BD_GRAVITY_AFFECTS_ALL, GADGET_ID_NONE,
+ &level.bd_gravity_affects_all,
+ NULL, NULL,
+ "gravity change affects everything", "gravity affects all falling objects"
+ },
// ---------- element settings: configure (various elements) ----------------
NULL, NULL,
"can move diagonally", "player can move diagonally"
},
+ {
+ ED_CHECKBUTTON_ID_BD_TOPMOST_PLAYER_ACTIVE,
+ ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1),
+ GADGET_ID_BD_TOPMOST_PLAYER_ACTIVE, GADGET_ID_NONE,
+ &level.bd_topmost_player_active,
+ NULL, NULL,
+ "topmost player is active", "use first player found on playfield"
+ },
+ {
+ ED_CHECKBUTTON_ID_BD_PUSH_MEGA_ROCK_WITH_SWEET,
+ ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(4),
+ GADGET_ID_BD_PUSH_MEGA_ROCK_WITH_SWEET, GADGET_ID_NONE,
+ &level.bd_push_mega_rock_with_sweet,
+ NULL, NULL,
+ "mega rocks pushable with sweet", "push mega rocks after eating sweet"
+ },
+ {
+ ED_CHECKBUTTON_ID_BD_MAGIC_WALL_WAIT_HATCHING,
+ ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1),
+ GADGET_ID_BD_MAGIC_WALL_WAIT_HATCHING, GADGET_ID_NONE,
+ &level.bd_magic_wall_wait_hatching,
+ NULL, NULL,
+ "wait for player's birth", "timer start waits for player's birth"
+ },
+ {
+ ED_CHECKBUTTON_ID_BD_MAGIC_WALL_STOPS_AMOEBA,
+ ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(2),
+ GADGET_ID_BD_MAGIC_WALL_STOPS_AMOEBA, GADGET_ID_NONE,
+ &level.bd_magic_wall_stops_amoeba,
+ NULL, NULL,
+ "turn amoeba to diamonds", "activation changes amoeba to diamonds"
+ },
+ {
+ ED_CHECKBUTTON_ID_BD_AMOEBA_WAIT_FOR_HATCHING,
+ ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1),
+ GADGET_ID_BD_AMOEBA_WAIT_FOR_HATCHING, GADGET_ID_NONE,
+ &level.bd_amoeba_wait_for_hatching,
+ NULL, NULL,
+ "wait for player's birth", "timer start waits for player's birth"
+ },
+ {
+ ED_CHECKBUTTON_ID_BD_AMOEBA_START_IMMEDIATELY,
+ ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(2),
+ GADGET_ID_BD_AMOEBA_START_IMMEDIATELY, GADGET_ID_NONE,
+ &level.bd_amoeba_start_immediately,
+ NULL, NULL,
+ "start growing immediately", "start slow growth time immediately"
+ },
+ {
+ ED_CHECKBUTTON_ID_BD_AMOEBA_2_EXPLODE_BY_AMOEBA,
+ ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(9),
+ GADGET_ID_BD_AMOEBA_2_EXPLODE_BY_AMOEBA, GADGET_ID_NONE,
+ &level.bd_amoeba_2_explode_by_amoeba,
+ NULL, NULL,
+ "explodes if touched by amoeba", "amoeba 2 explodes if touched by amoeba"
+ },
{
ED_CHECKBUTTON_ID_ENVELOPE_AUTOWRAP,
ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1),
"content:", NULL, NULL, NULL, "amoeba content"
},
+ // ---------- BD amoeba content ------------------------------------------------
+
+ {
+ ED_DRAWING_ID_BD_AMOEBA_CONTENT_TOO_BIG,
+ ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(7),
+ ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF,
+ GADGET_ID_BD_AMOEBA_CONTENT_TOO_BIG, GADGET_ID_NONE,
+ &level.bd_amoeba_content_too_big, 1, 1,
+ "if too big, changes to:", NULL, NULL, NULL, "BD amoeba content if too big"
+ },
+ {
+ ED_DRAWING_ID_BD_AMOEBA_CONTENT_ENCLOSED,
+ ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(8),
+ ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF,
+ GADGET_ID_BD_AMOEBA_CONTENT_ENCLOSED, GADGET_ID_NONE,
+ &level.bd_amoeba_content_enclosed, 1, 1,
+ "if enclosed, changes to:", NULL, NULL, NULL, "BD amoeba content if enclosed"
+ },
+
+ // ---------- BD amoeba 2 content ------------------------------------------------
+
+ {
+ ED_DRAWING_ID_BD_AMOEBA_2_CONTENT_TOO_BIG,
+ ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(7),
+ ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF,
+ GADGET_ID_BD_AMOEBA_2_CONTENT_TOO_BIG, GADGET_ID_NONE,
+ &level.bd_amoeba_2_content_too_big, 1, 1,
+ "if too big, changes to:", NULL, NULL, NULL, "BD amoeba 2 content if too big"
+ },
+ {
+ ED_DRAWING_ID_BD_AMOEBA_2_CONTENT_ENCLOSED,
+ ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(8),
+ ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF,
+ GADGET_ID_BD_AMOEBA_2_CONTENT_ENCLOSED, GADGET_ID_NONE,
+ &level.bd_amoeba_2_content_enclosed, 1, 1,
+ "if enclosed, changes to:", NULL, NULL, NULL, "BD amoeba 2 content if enclosed"
+ },
+ {
+ ED_DRAWING_ID_BD_AMOEBA_2_CONTENT_EXPLODING,
+ ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(10),
+ ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF,
+ GADGET_ID_BD_AMOEBA_2_CONTENT_EXPLODING, GADGET_ID_NONE,
+ &level.bd_amoeba_2_content_exploding, 1, 1,
+ "if exploding, changes to:", NULL, NULL, NULL, "BD amoeba 2 content if exploding"
+ },
+ {
+ ED_DRAWING_ID_BD_AMOEBA_2_CONTENT_LOOKS_LIKE,
+ ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(11),
+ ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF,
+ GADGET_ID_BD_AMOEBA_2_CONTENT_LOOKS_LIKE, GADGET_ID_NONE,
+ &level.bd_amoeba_2_content_looks_like, 1, 1,
+ "use graphic of element:", NULL, NULL, NULL, "BD amoeba 2 looks like this element"
+ },
+
// ---------- level start element -------------------------------------------
{
EL_BD_STEELWALL,
EL_BD_WALL,
- EL_EMPTY,
+ EL_BD_SAND_2,
EL_BD_MAGIC_WALL,
EL_BD_AMOEBA,
EL_BD_BUTTERFLY_UP,
EL_BD_FIREFLY_UP,
- EL_EXIT_CLOSED,
+ EL_BD_EXIT_CLOSED,
EL_BD_BUTTERFLY_LEFT,
EL_BD_FIREFLY_LEFT,
EL_BD_INBOX,
EL_BD_BUTTERFLY_DOWN,
EL_BD_FIREFLY_DOWN,
- EL_EXIT_OPEN,
+ EL_BD_EXIT_OPEN,
EL_BD_AMOEBA_2,
EL_BD_BUTTERFLY_2_UP,
EL_BD_FIREFLY_2_UP,
- EL_EMPTY,
+ EL_BD_SLIME,
EL_BD_BUTTERFLY_2_LEFT,
EL_BD_FIREFLY_2_LEFT,
EL_BD_BUTTERFLY_2_RIGHT,
EL_BD_FIREFLY_2_RIGHT,
- EL_EMPTY,
+ EL_BD_BOMB,
EL_BD_BUTTERFLY_2_DOWN,
EL_BD_FIREFLY_2_DOWN,
- EL_EMPTY,
+ EL_BD_FLYING_DIAMOND,
- EL_EMPTY,
+ EL_BD_NITRO_PACK,
EL_BD_DRAGONFLY_UP,
EL_BD_STONEFLY_UP,
- EL_EMPTY,
+ EL_BD_DIAMOND_GLUED,
EL_BD_DRAGONFLY_LEFT,
EL_BD_STONEFLY_LEFT,
EL_BD_DRAGONFLY_RIGHT,
EL_BD_STONEFLY_RIGHT,
- EL_EMPTY,
+ EL_BD_NUT,
EL_BD_DRAGONFLY_DOWN,
EL_BD_STONEFLY_DOWN,
EL_EMPTY,
- EL_EMPTY,
+ EL_BD_BITER_SWITCH_1,
EL_BD_BITER_UP,
EL_BD_COW_UP,
EL_EMPTY,
EL_BD_BITER_RIGHT,
EL_BD_COW_RIGHT,
- EL_EMPTY,
+ EL_BD_VOODOO_DOLL,
EL_BD_BITER_DOWN,
EL_BD_COW_DOWN,
- EL_EMPTY,
+ EL_BD_GHOST,
- EL_EMPTY,
- EL_BD_SAND,
+ EL_BD_SAND_GLUED,
EL_BD_SAND_BALL,
EL_BD_SAND_LOOSE,
+ EL_BD_WALL_NON_SLOPED,
EL_BD_SAND_SLOPED_UP_LEFT,
EL_BD_SAND_SLOPED_UP_RIGHT,
EL_BD_WALL_SLOPED_DOWN_LEFT,
EL_BD_WALL_SLOPED_DOWN_RIGHT,
- EL_BD_FLYING_DIAMOND,
EL_BD_FLYING_ROCK,
+ EL_BD_ROCK_GLUED,
EL_BD_STEELWALL_SLOPED_UP_LEFT,
EL_BD_STEELWALL_SLOPED_UP_RIGHT,
- EL_BD_NUT,
- EL_BD_MEGA_ROCK,
+ EL_BD_WAITING_ROCK,
+ EL_BD_CHASING_ROCK,
EL_BD_STEELWALL_SLOPED_DOWN_LEFT,
EL_BD_STEELWALL_SLOPED_DOWN_RIGHT,
- EL_BD_SAND_2,
- EL_BD_WALL_NON_SLOPED,
- EL_BD_WALL,
- EL_BD_MAGIC_WALL,
-
- EL_BD_EXIT_CLOSED,
- EL_BD_EXIT_OPEN,
+ EL_BD_MEGA_ROCK,
+ EL_BD_SWEET,
EL_BD_INVISIBLE_EXIT_CLOSED,
EL_BD_INVISIBLE_EXIT_OPEN,
- EL_BD_STEELWALL,
EL_BD_STEELWALL_EXPLODABLE,
EL_BD_STEELWALL_DIGGABLE,
EL_BD_WALL_DIGGABLE,
+ EL_BD_FALLING_WALL,
EL_BD_EXPANDABLE_WALL_HORIZONTAL,
EL_BD_EXPANDABLE_WALL_VERTICAL,
EL_BD_EXPANDABLE_WALL_ANY,
- EL_BD_CREATURE_SWITCH,
+ EL_BD_EXPANDABLE_WALL_SWITCH_HORIZONTAL,
EL_BD_EXPANDABLE_STEELWALL_HORIZONTAL,
EL_BD_EXPANDABLE_STEELWALL_VERTICAL,
EL_BD_EXPANDABLE_STEELWALL_ANY,
- EL_BD_EXPANDABLE_WALL_SWITCH_HORIZONTAL,
+ EL_BD_CREATURE_SWITCH,
- EL_BD_BITER_SWITCH_1,
+ EL_BD_BLADDER,
+ EL_BD_BLADDER_SPENDER,
+ EL_BD_REPLICATOR,
EL_BD_REPLICATOR_SWITCH,
+
+ EL_BD_CONVEYOR_LEFT,
+ EL_BD_CONVEYOR_RIGHT,
EL_BD_CONVEYOR_SWITCH,
EL_BD_CONVEYOR_DIR_SWITCH_RIGHT,
- EL_BD_ACID,
- EL_BD_FALLING_WALL,
- EL_BD_BOX,
+ EL_BD_CLOCK,
EL_BD_TIME_PENALTY,
-
EL_BD_GRAVESTONE,
- EL_BD_ROCK_GLUED,
- EL_BD_DIAMOND_GLUED,
- EL_BD_DIAMOND_KEY,
+ EL_BD_SKELETON,
- EL_BD_TRAPPED_DIAMOND,
- EL_BD_CLOCK,
- EL_BD_SAND_GLUED,
EL_BD_WATER,
+ EL_BD_ACID,
+ EL_BD_LAVA,
+ EL_BD_BOX,
+
+ EL_BD_GATE_1,
+ EL_BD_GATE_2,
+ EL_BD_GATE_3,
+ EL_BD_TRAPPED_DIAMOND,
EL_BD_KEY_1,
EL_BD_KEY_2,
EL_BD_KEY_3,
- EL_EMPTY,
+ EL_BD_DIAMOND_KEY,
EL_BD_WALL_KEY_1,
EL_BD_WALL_KEY_2,
EL_BD_WALL_KEY_3,
EL_BD_WALL_DIAMOND,
- EL_BD_GATE_1,
- EL_BD_GATE_2,
- EL_BD_GATE_3,
- EL_BD_POT,
-
EL_BD_GRAVITY_SWITCH,
EL_BD_PNEUMATIC_HAMMER,
EL_BD_TELEPORTER,
- EL_BD_SKELETON,
-
- EL_BD_AMOEBA,
- EL_BD_AMOEBA_2,
- EL_BD_REPLICATOR,
- EL_BD_BLADDER_SPENDER,
-
- EL_BD_CONVEYOR_LEFT,
- EL_BD_CONVEYOR_RIGHT,
- EL_BD_BOMB,
- EL_BD_NITRO_PACK,
-
- EL_BD_LAVA,
- EL_BD_SWEET,
- EL_BD_VOODOO_DOLL,
- EL_BD_SLIME,
-
- EL_BD_BLADDER,
- EL_BD_WAITING_ROCK,
- EL_BD_CHASING_ROCK,
- EL_BD_GHOST,
+ EL_BD_POT,
EL_BD_PLAYER,
EL_BD_PLAYER_WITH_BOMB,
if (text == NULL)
return 0;
- return (getTextWidth(text, FONT_TEXT_1) + ED_DRAWINGAREA_TEXT_DISTANCE);
+ return (getTextWidth(text, FONT_TEXT_1) + ED_DRAWINGAREA_BORDER_SIZE);
}
static int getRightGadgetBorder(struct GadgetInfo *gi, char *text)
ModifyEditorCounterValue(id, *counterbutton_info[id].value);
- // set position for "value[1,2,3,4]" counter gadgets (score in most cases)
- if (id >= ED_COUNTER_ID_ELEMENT_VALUE1 &&
- id <= ED_COUNTER_ID_ELEMENT_VALUE4)
+ // set position for counter gadgets with dynamically determined position
+ if (id != ED_COUNTER_ID_SELECT_LEVEL)
{
- ModifyGadget(gi_down, GDI_Y,
- SY + ED_SETTINGS_Y(counterbutton_info[id].y), GDI_END);
- ModifyGadget(gi_text, GDI_Y,
- SY + ED_SETTINGS_Y(counterbutton_info[id].y), GDI_END);
- ModifyGadget(gi_up, GDI_Y,
- SY + ED_SETTINGS_Y(counterbutton_info[id].y), GDI_END);
+ ModifyGadget(gi_down, GDI_Y, SY + ED_SETTINGS_Y(counterbutton_info[id].y), GDI_END);
+ ModifyGadget(gi_text, GDI_Y, SY + ED_SETTINGS_Y(counterbutton_info[id].y), GDI_END);
+ ModifyGadget(gi_up, GDI_Y, SY + ED_SETTINGS_Y(counterbutton_info[id].y), GDI_END);
}
// vertical position might have changed after setting position above
int area_ysize = gi->drawing.area_ysize;
int xoffset_left = getTextWidthForDrawingArea(drawingarea_info[id].text_left);
int xoffset_below = getTextWidth(drawingarea_info[id].text_below, font_nr);
- int x_left = gi->x - xoffset_left;
+ int x_left = gi->x - xoffset_left - ED_DRAWINGAREA_BORDER_SIZE;
int x_right = gi->x + gi->width + ED_DRAWINGAREA_TEXT_DISTANCE;
int x_above = gi->x - ED_DRAWINGAREA_BORDER_SIZE;
int x_below = gi->x + (gi->width - xoffset_below) / 2;
#define TEXT_SLURPING "Score for slurping robot"
#define TEXT_CRACKING "Score for cracking"
#define TEXT_AMOEBA_SPEED "Speed of amoeba growth"
+#define TEXT_AMOEBA_THRESHOED "Size for turning to rocks"
+#define TEXT_AMOEBA_SLOW_TIME "Slow growth time (seconds)"
+#define TEXT_AMOEBA_SLOW_RATE "Slow growth rate (percent)"
+#define TEXT_AMOEBA_FAST_RATE "Fast growth rate (percent)"
#define TEXT_DURATION "Duration when activated"
#define TEXT_DELAY_ON "Delay before activating"
#define TEXT_DELAY_OFF "Delay before deactivating"
int element;
int *value;
char *text;
+ int min_value;
+ int max_value;
} elements_with_counter[] =
{
- { EL_EMERALD, &level.score[SC_EMERALD], TEXT_COLLECTING },
- { EL_BD_DIAMOND, &level.score[SC_EMERALD], TEXT_COLLECTING },
- { EL_BD_DIAMOND, &level.score[SC_DIAMOND_EXTRA], TEXT_COLLECTING_EXTRA },
- { EL_EMERALD_YELLOW, &level.score[SC_EMERALD], TEXT_COLLECTING },
- { EL_EMERALD_RED, &level.score[SC_EMERALD], TEXT_COLLECTING },
- { EL_EMERALD_PURPLE, &level.score[SC_EMERALD], TEXT_COLLECTING },
- { EL_SP_INFOTRON, &level.score[SC_EMERALD], TEXT_COLLECTING },
- { EL_DIAMOND, &level.score[SC_DIAMOND], TEXT_COLLECTING },
- { EL_CRYSTAL, &level.score[SC_CRYSTAL], TEXT_COLLECTING },
- { EL_PEARL, &level.score[SC_PEARL], TEXT_COLLECTING },
- { EL_BUG, &level.score[SC_BUG], TEXT_SMASHING },
- { EL_BUG_RIGHT, &level.score[SC_BUG], TEXT_SMASHING },
- { EL_BUG_UP, &level.score[SC_BUG], TEXT_SMASHING },
- { EL_BUG_LEFT, &level.score[SC_BUG], TEXT_SMASHING },
- { EL_BUG_DOWN, &level.score[SC_BUG], TEXT_SMASHING },
- { EL_BD_BUTTERFLY, &level.score[SC_BUG], TEXT_SMASHING },
- { EL_BD_BUTTERFLY_RIGHT, &level.score[SC_BUG], TEXT_SMASHING },
- { EL_BD_BUTTERFLY_UP, &level.score[SC_BUG], TEXT_SMASHING },
- { EL_BD_BUTTERFLY_LEFT, &level.score[SC_BUG], TEXT_SMASHING },
- { EL_BD_BUTTERFLY_DOWN, &level.score[SC_BUG], TEXT_SMASHING },
- { EL_SP_ELECTRON, &level.score[SC_BUG], TEXT_SMASHING },
- { EL_SPACESHIP, &level.score[SC_SPACESHIP], TEXT_SMASHING },
- { EL_SPACESHIP_RIGHT, &level.score[SC_SPACESHIP], TEXT_SMASHING },
- { EL_SPACESHIP_UP, &level.score[SC_SPACESHIP], TEXT_SMASHING },
- { EL_SPACESHIP_LEFT, &level.score[SC_SPACESHIP], TEXT_SMASHING },
- { EL_SPACESHIP_DOWN, &level.score[SC_SPACESHIP], TEXT_SMASHING },
- { EL_BD_FIREFLY, &level.score[SC_SPACESHIP], TEXT_SMASHING },
- { EL_BD_FIREFLY_RIGHT, &level.score[SC_SPACESHIP], TEXT_SMASHING },
- { EL_BD_FIREFLY_UP, &level.score[SC_SPACESHIP], TEXT_SMASHING },
- { EL_BD_FIREFLY_LEFT, &level.score[SC_SPACESHIP], TEXT_SMASHING },
- { EL_BD_FIREFLY_DOWN, &level.score[SC_SPACESHIP], TEXT_SMASHING },
- { EL_SP_SNIKSNAK, &level.score[SC_SPACESHIP], TEXT_SMASHING },
- { EL_YAMYAM, &level.score[SC_YAMYAM], TEXT_SMASHING },
- { EL_YAMYAM_LEFT, &level.score[SC_YAMYAM], TEXT_SMASHING },
- { EL_YAMYAM_RIGHT, &level.score[SC_YAMYAM], TEXT_SMASHING },
- { EL_YAMYAM_UP, &level.score[SC_YAMYAM], TEXT_SMASHING },
- { EL_YAMYAM_DOWN, &level.score[SC_YAMYAM], TEXT_SMASHING },
- { EL_DARK_YAMYAM, &level.score[SC_YAMYAM], TEXT_SMASHING },
- { EL_ROBOT, &level.score[SC_ROBOT], TEXT_SMASHING },
- { EL_PACMAN, &level.score[SC_PACMAN], TEXT_SMASHING },
- { EL_PACMAN_RIGHT, &level.score[SC_PACMAN], TEXT_SMASHING },
- { EL_PACMAN_UP, &level.score[SC_PACMAN], TEXT_SMASHING },
- { EL_PACMAN_LEFT, &level.score[SC_PACMAN], TEXT_SMASHING },
- { EL_PACMAN_DOWN, &level.score[SC_PACMAN], TEXT_SMASHING },
- { EL_NUT, &level.score[SC_NUT], TEXT_CRACKING },
- { EL_DYNAMITE, &level.score[SC_DYNAMITE], TEXT_COLLECTING },
- { EL_EM_DYNAMITE, &level.score[SC_DYNAMITE], TEXT_COLLECTING },
- { EL_DYNABOMB_INCREASE_NUMBER,&level.score[SC_DYNAMITE], TEXT_COLLECTING },
- { EL_DYNABOMB_INCREASE_SIZE, &level.score[SC_DYNAMITE], TEXT_COLLECTING },
- { EL_DYNABOMB_INCREASE_POWER, &level.score[SC_DYNAMITE], TEXT_COLLECTING },
- { EL_SHIELD_NORMAL, &level.score[SC_SHIELD], TEXT_COLLECTING },
- { EL_SHIELD_DEADLY, &level.score[SC_SHIELD], TEXT_COLLECTING },
- { EL_EXTRA_TIME, &level.extra_time_score, TEXT_COLLECTING },
- { EL_KEY_1, &level.score[SC_KEY], TEXT_COLLECTING },
- { EL_KEY_2, &level.score[SC_KEY], TEXT_COLLECTING },
- { EL_KEY_3, &level.score[SC_KEY], TEXT_COLLECTING },
- { EL_KEY_4, &level.score[SC_KEY], TEXT_COLLECTING },
- { EL_EM_KEY_1, &level.score[SC_KEY], TEXT_COLLECTING },
- { EL_EM_KEY_2, &level.score[SC_KEY], TEXT_COLLECTING },
- { EL_EM_KEY_3, &level.score[SC_KEY], TEXT_COLLECTING },
- { EL_EM_KEY_4, &level.score[SC_KEY], TEXT_COLLECTING },
- { EL_EMC_KEY_5, &level.score[SC_KEY], TEXT_COLLECTING },
- { EL_EMC_KEY_6, &level.score[SC_KEY], TEXT_COLLECTING },
- { EL_EMC_KEY_7, &level.score[SC_KEY], TEXT_COLLECTING },
- { EL_EMC_KEY_8, &level.score[SC_KEY], TEXT_COLLECTING },
- { EL_DC_KEY_WHITE, &level.score[SC_KEY], TEXT_COLLECTING },
- { EL_MM_KETTLE, &level.score[SC_EMERALD], TEXT_COLLECTING },
- { EL_DF_CELL, &level.score[SC_EMERALD], TEXT_COLLECTING },
- { EL_MM_KEY, &level.score[SC_KEY], TEXT_COLLECTING },
- { EL_MM_LIGHTBALL, &level.score[SC_ELEM_BONUS], TEXT_COLLECTING },
- { EL_MM_PACMAN, &level.score[SC_PACMAN], TEXT_SMASHING },
- { EL_MM_PACMAN_RIGHT, &level.score[SC_PACMAN], TEXT_SMASHING },
- { EL_MM_PACMAN_UP, &level.score[SC_PACMAN], TEXT_SMASHING },
- { EL_MM_PACMAN_LEFT, &level.score[SC_PACMAN], TEXT_SMASHING },
- { EL_MM_PACMAN_DOWN, &level.score[SC_PACMAN], TEXT_SMASHING },
- { EL_AMOEBA_WET, &level.amoeba_speed, TEXT_AMOEBA_SPEED },
- { EL_AMOEBA_DRY, &level.amoeba_speed, TEXT_AMOEBA_SPEED },
- { EL_AMOEBA_FULL, &level.amoeba_speed, TEXT_AMOEBA_SPEED },
- { EL_BD_AMOEBA, &level.amoeba_speed, TEXT_AMOEBA_SPEED },
- { EL_EMC_DRIPPER, &level.amoeba_speed, TEXT_AMOEBA_SPEED },
- { EL_MAGIC_WALL, &level.time_magic_wall, TEXT_DURATION },
- { EL_BD_MAGIC_WALL, &level.time_magic_wall, TEXT_DURATION },
- { EL_DC_MAGIC_WALL, &level.time_magic_wall, TEXT_DURATION },
- { EL_ROBOT_WHEEL, &level.time_wheel, TEXT_DURATION },
- { EL_TIMEGATE_SWITCH, &level.time_timegate, TEXT_DURATION },
- { EL_DC_TIMEGATE_SWITCH, &level.time_timegate, TEXT_DURATION },
- { EL_LIGHT_SWITCH, &level.time_light, TEXT_DURATION },
- { EL_LIGHT_SWITCH_ACTIVE, &level.time_light, TEXT_DURATION },
- { EL_SHIELD_NORMAL, &level.shield_normal_time, TEXT_DURATION },
- { EL_SHIELD_DEADLY, &level.shield_deadly_time, TEXT_DURATION },
- { 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 },
- { EL_GAME_OF_LIFE, &level.game_of_life[1], TEXT_GAME_OF_LIFE_2 },
- { EL_GAME_OF_LIFE, &level.game_of_life[2], TEXT_GAME_OF_LIFE_3 },
- { EL_GAME_OF_LIFE, &level.game_of_life[3], TEXT_GAME_OF_LIFE_4 },
- { EL_BIOMAZE, &level.biomaze[0], TEXT_GAME_OF_LIFE_1 },
- { EL_BIOMAZE, &level.biomaze[1], TEXT_GAME_OF_LIFE_2 },
- { EL_BIOMAZE, &level.biomaze[2], TEXT_GAME_OF_LIFE_3 },
- { EL_BIOMAZE, &level.biomaze[3], TEXT_GAME_OF_LIFE_4 },
- { EL_EMC_ANDROID, &level.android_move_time, TEXT_MOVE_SPEED },
- { EL_EMC_ANDROID, &level.android_clone_time, TEXT_CLONE_SPEED },
- { EL_EMC_MAGIC_BALL, &level.ball_time, TEXT_BALL_DELAY },
- { EL_EMC_LENSES, &level.lenses_score, TEXT_COLLECTING },
- { EL_EMC_MAGNIFIER, &level.magnify_score, TEXT_COLLECTING },
- { EL_SPRING, &level.slurp_score, TEXT_SLURPING },
- { EL_SPRING_LEFT, &level.slurp_score, TEXT_SLURPING },
- { EL_SPRING_RIGHT, &level.slurp_score, TEXT_SLURPING },
- { EL_EMC_LENSES, &level.lenses_time, TEXT_DURATION },
- { EL_EMC_MAGNIFIER, &level.magnify_time, TEXT_DURATION },
- { EL_MM_FUSE_ACTIVE, &level.mm_time_fuse, TEXT_DELAY_OFF },
- { EL_MM_BOMB, &level.mm_time_bomb, TEXT_DELAY_EXPLODING },
- { EL_MM_GRAY_BALL, &level.mm_time_ball, TEXT_DELAY_CHANGING },
- { EL_MM_STEEL_BLOCK, &level.mm_time_block, TEXT_DELAY_MOVING },
- { EL_MM_WOODEN_BLOCK, &level.mm_time_block, TEXT_DELAY_MOVING },
-
- { -1, NULL, NULL }
+ { EL_EMERALD, &level.score[SC_EMERALD], TEXT_COLLECTING },
+ { EL_BD_DIAMOND, &level.score[SC_EMERALD], TEXT_COLLECTING },
+ { EL_BD_DIAMOND, &level.score[SC_DIAMOND_EXTRA], TEXT_COLLECTING_EXTRA },
+ { EL_EMERALD_YELLOW, &level.score[SC_EMERALD], TEXT_COLLECTING },
+ { EL_EMERALD_RED, &level.score[SC_EMERALD], TEXT_COLLECTING },
+ { EL_EMERALD_PURPLE, &level.score[SC_EMERALD], TEXT_COLLECTING },
+ { EL_SP_INFOTRON, &level.score[SC_EMERALD], TEXT_COLLECTING },
+ { EL_DIAMOND, &level.score[SC_DIAMOND], TEXT_COLLECTING },
+ { EL_CRYSTAL, &level.score[SC_CRYSTAL], TEXT_COLLECTING },
+ { EL_PEARL, &level.score[SC_PEARL], TEXT_COLLECTING },
+ { EL_BUG, &level.score[SC_BUG], TEXT_SMASHING },
+ { EL_BUG_RIGHT, &level.score[SC_BUG], TEXT_SMASHING },
+ { EL_BUG_UP, &level.score[SC_BUG], TEXT_SMASHING },
+ { EL_BUG_LEFT, &level.score[SC_BUG], TEXT_SMASHING },
+ { EL_BUG_DOWN, &level.score[SC_BUG], TEXT_SMASHING },
+ { EL_BD_BUTTERFLY, &level.score[SC_BUG], TEXT_SMASHING },
+ { EL_BD_BUTTERFLY_RIGHT, &level.score[SC_BUG], TEXT_SMASHING },
+ { EL_BD_BUTTERFLY_UP, &level.score[SC_BUG], TEXT_SMASHING },
+ { EL_BD_BUTTERFLY_LEFT, &level.score[SC_BUG], TEXT_SMASHING },
+ { EL_BD_BUTTERFLY_DOWN, &level.score[SC_BUG], TEXT_SMASHING },
+ { EL_SP_ELECTRON, &level.score[SC_BUG], TEXT_SMASHING },
+ { EL_SPACESHIP, &level.score[SC_SPACESHIP], TEXT_SMASHING },
+ { EL_SPACESHIP_RIGHT, &level.score[SC_SPACESHIP], TEXT_SMASHING },
+ { EL_SPACESHIP_UP, &level.score[SC_SPACESHIP], TEXT_SMASHING },
+ { EL_SPACESHIP_LEFT, &level.score[SC_SPACESHIP], TEXT_SMASHING },
+ { EL_SPACESHIP_DOWN, &level.score[SC_SPACESHIP], TEXT_SMASHING },
+ { EL_BD_FIREFLY, &level.score[SC_SPACESHIP], TEXT_SMASHING },
+ { EL_BD_FIREFLY_RIGHT, &level.score[SC_SPACESHIP], TEXT_SMASHING },
+ { EL_BD_FIREFLY_UP, &level.score[SC_SPACESHIP], TEXT_SMASHING },
+ { EL_BD_FIREFLY_LEFT, &level.score[SC_SPACESHIP], TEXT_SMASHING },
+ { EL_BD_FIREFLY_DOWN, &level.score[SC_SPACESHIP], TEXT_SMASHING },
+ { EL_SP_SNIKSNAK, &level.score[SC_SPACESHIP], TEXT_SMASHING },
+ { EL_YAMYAM, &level.score[SC_YAMYAM], TEXT_SMASHING },
+ { EL_YAMYAM_LEFT, &level.score[SC_YAMYAM], TEXT_SMASHING },
+ { EL_YAMYAM_RIGHT, &level.score[SC_YAMYAM], TEXT_SMASHING },
+ { EL_YAMYAM_UP, &level.score[SC_YAMYAM], TEXT_SMASHING },
+ { EL_YAMYAM_DOWN, &level.score[SC_YAMYAM], TEXT_SMASHING },
+ { EL_DARK_YAMYAM, &level.score[SC_YAMYAM], TEXT_SMASHING },
+ { EL_ROBOT, &level.score[SC_ROBOT], TEXT_SMASHING },
+ { EL_PACMAN, &level.score[SC_PACMAN], TEXT_SMASHING },
+ { EL_PACMAN_RIGHT, &level.score[SC_PACMAN], TEXT_SMASHING },
+ { EL_PACMAN_UP, &level.score[SC_PACMAN], TEXT_SMASHING },
+ { EL_PACMAN_LEFT, &level.score[SC_PACMAN], TEXT_SMASHING },
+ { EL_PACMAN_DOWN, &level.score[SC_PACMAN], TEXT_SMASHING },
+ { EL_NUT, &level.score[SC_NUT], TEXT_CRACKING },
+ { EL_DYNAMITE, &level.score[SC_DYNAMITE], TEXT_COLLECTING },
+ { EL_EM_DYNAMITE, &level.score[SC_DYNAMITE], TEXT_COLLECTING },
+ { EL_DYNABOMB_INCREASE_NUMBER,&level.score[SC_DYNAMITE], TEXT_COLLECTING },
+ { EL_DYNABOMB_INCREASE_SIZE, &level.score[SC_DYNAMITE], TEXT_COLLECTING },
+ { EL_DYNABOMB_INCREASE_POWER, &level.score[SC_DYNAMITE], TEXT_COLLECTING },
+ { EL_SHIELD_NORMAL, &level.score[SC_SHIELD], TEXT_COLLECTING },
+ { EL_SHIELD_DEADLY, &level.score[SC_SHIELD], TEXT_COLLECTING },
+ { EL_EXTRA_TIME, &level.extra_time_score, TEXT_COLLECTING },
+ { EL_KEY_1, &level.score[SC_KEY], TEXT_COLLECTING },
+ { EL_KEY_2, &level.score[SC_KEY], TEXT_COLLECTING },
+ { EL_KEY_3, &level.score[SC_KEY], TEXT_COLLECTING },
+ { EL_KEY_4, &level.score[SC_KEY], TEXT_COLLECTING },
+ { EL_EM_KEY_1, &level.score[SC_KEY], TEXT_COLLECTING },
+ { EL_EM_KEY_2, &level.score[SC_KEY], TEXT_COLLECTING },
+ { EL_EM_KEY_3, &level.score[SC_KEY], TEXT_COLLECTING },
+ { EL_EM_KEY_4, &level.score[SC_KEY], TEXT_COLLECTING },
+ { EL_EMC_KEY_5, &level.score[SC_KEY], TEXT_COLLECTING },
+ { EL_EMC_KEY_6, &level.score[SC_KEY], TEXT_COLLECTING },
+ { EL_EMC_KEY_7, &level.score[SC_KEY], TEXT_COLLECTING },
+ { EL_EMC_KEY_8, &level.score[SC_KEY], TEXT_COLLECTING },
+ { EL_DC_KEY_WHITE, &level.score[SC_KEY], TEXT_COLLECTING },
+ { EL_MM_KETTLE, &level.score[SC_EMERALD], TEXT_COLLECTING },
+ { EL_DF_CELL, &level.score[SC_EMERALD], TEXT_COLLECTING },
+ { EL_MM_KEY, &level.score[SC_KEY], TEXT_COLLECTING },
+ { EL_MM_LIGHTBALL, &level.score[SC_ELEM_BONUS], TEXT_COLLECTING },
+ { EL_MM_PACMAN, &level.score[SC_PACMAN], TEXT_SMASHING },
+ { EL_MM_PACMAN_RIGHT, &level.score[SC_PACMAN], TEXT_SMASHING },
+ { EL_MM_PACMAN_UP, &level.score[SC_PACMAN], TEXT_SMASHING },
+ { EL_MM_PACMAN_LEFT, &level.score[SC_PACMAN], TEXT_SMASHING },
+ { EL_MM_PACMAN_DOWN, &level.score[SC_PACMAN], TEXT_SMASHING },
+ { EL_AMOEBA_WET, &level.amoeba_speed, TEXT_AMOEBA_SPEED },
+ { EL_AMOEBA_DRY, &level.amoeba_speed, TEXT_AMOEBA_SPEED },
+ { EL_AMOEBA_FULL, &level.amoeba_speed, TEXT_AMOEBA_SPEED },
+ { EL_BD_AMOEBA, &level.amoeba_speed, TEXT_AMOEBA_SPEED },
+ { EL_EMC_DRIPPER, &level.amoeba_speed, TEXT_AMOEBA_SPEED },
+ { EL_BD_AMOEBA, &level.bd_amoeba_threshold_too_big, TEXT_AMOEBA_THRESHOED },
+ { EL_BD_AMOEBA, &level.bd_amoeba_slow_growth_time, TEXT_AMOEBA_SLOW_TIME },
+ { EL_BD_AMOEBA, &level.bd_amoeba_slow_growth_rate, TEXT_AMOEBA_SLOW_RATE,
+ 0, 100 },
+ { EL_BD_AMOEBA, &level.bd_amoeba_fast_growth_rate, TEXT_AMOEBA_FAST_RATE,
+ 0, 100 },
+ { EL_BD_AMOEBA_2, &level.bd_amoeba_2_threshold_too_big, TEXT_AMOEBA_THRESHOED },
+ { EL_BD_AMOEBA_2, &level.bd_amoeba_2_slow_growth_time, TEXT_AMOEBA_SLOW_TIME },
+ { EL_BD_AMOEBA_2, &level.bd_amoeba_2_slow_growth_rate, TEXT_AMOEBA_SLOW_RATE,
+ 0, 100 },
+ { EL_BD_AMOEBA_2, &level.bd_amoeba_2_fast_growth_rate, TEXT_AMOEBA_FAST_RATE,
+ 0, 100 },
+ { EL_MAGIC_WALL, &level.time_magic_wall, TEXT_DURATION },
+ { EL_BD_MAGIC_WALL, &level.time_magic_wall, TEXT_DURATION },
+ { EL_DC_MAGIC_WALL, &level.time_magic_wall, TEXT_DURATION },
+ { EL_ROBOT_WHEEL, &level.time_wheel, TEXT_DURATION },
+ { EL_TIMEGATE_SWITCH, &level.time_timegate, TEXT_DURATION },
+ { EL_DC_TIMEGATE_SWITCH, &level.time_timegate, TEXT_DURATION },
+ { EL_LIGHT_SWITCH, &level.time_light, TEXT_DURATION },
+ { EL_LIGHT_SWITCH_ACTIVE, &level.time_light, TEXT_DURATION },
+ { EL_SHIELD_NORMAL, &level.shield_normal_time, TEXT_DURATION },
+ { EL_SHIELD_DEADLY, &level.shield_deadly_time, TEXT_DURATION },
+ { EL_BD_CLOCK, &level.bd_clock_extra_time, TEXT_TIME_BONUS,
+ -100, 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 },
+ { EL_GAME_OF_LIFE, &level.game_of_life[1], TEXT_GAME_OF_LIFE_2,0,8 },
+ { EL_GAME_OF_LIFE, &level.game_of_life[2], TEXT_GAME_OF_LIFE_3,0,8 },
+ { EL_GAME_OF_LIFE, &level.game_of_life[3], TEXT_GAME_OF_LIFE_4,0,8 },
+ { EL_BIOMAZE, &level.biomaze[0], TEXT_GAME_OF_LIFE_1,0,8 },
+ { EL_BIOMAZE, &level.biomaze[1], TEXT_GAME_OF_LIFE_2,0,8 },
+ { EL_BIOMAZE, &level.biomaze[2], TEXT_GAME_OF_LIFE_3,0,8 },
+ { EL_BIOMAZE, &level.biomaze[3], TEXT_GAME_OF_LIFE_4,0,8 },
+ { EL_EMC_ANDROID, &level.android_move_time, TEXT_MOVE_SPEED },
+ { EL_EMC_ANDROID, &level.android_clone_time, TEXT_CLONE_SPEED },
+ { EL_EMC_MAGIC_BALL, &level.ball_time, TEXT_BALL_DELAY },
+ { EL_EMC_LENSES, &level.lenses_score, TEXT_COLLECTING },
+ { EL_EMC_MAGNIFIER, &level.magnify_score, TEXT_COLLECTING },
+ { EL_SPRING, &level.slurp_score, TEXT_SLURPING },
+ { EL_SPRING_LEFT, &level.slurp_score, TEXT_SLURPING },
+ { EL_SPRING_RIGHT, &level.slurp_score, TEXT_SLURPING },
+ { EL_EMC_LENSES, &level.lenses_time, TEXT_DURATION },
+ { EL_EMC_MAGNIFIER, &level.magnify_time, TEXT_DURATION },
+ { EL_MM_FUSE_ACTIVE, &level.mm_time_fuse, TEXT_DELAY_OFF },
+ { EL_MM_BOMB, &level.mm_time_bomb, TEXT_DELAY_EXPLODING },
+ { EL_MM_GRAY_BALL, &level.mm_time_ball, TEXT_DELAY_CHANGING },
+ { EL_MM_STEEL_BLOCK, &level.mm_time_block, TEXT_DELAY_MOVING },
+ { EL_MM_WOODEN_BLOCK, &level.mm_time_block, TEXT_DELAY_MOVING },
+
+ { -1, NULL, NULL }
};
static boolean checkPropertiesConfig(int element)
if (element == EL_EMPTY_SPACE && level.game_engine_type != GAME_ENGINE_TYPE_RND)
return FALSE;
+ // special case: BD style rock customization only available in BD game engine
+ if (element == EL_BD_ROCK && level.game_engine_type != GAME_ENGINE_TYPE_BD)
+ return FALSE;
+
if (IS_GEM(element) ||
IS_CUSTOM_ELEMENT(element) ||
IS_GROUP_ELEMENT(element) ||
HAS_EDITOR_CONTENT(element) ||
CAN_GROW(element) ||
COULD_MOVE_INTO_ACID(element) ||
- MAYBE_DONT_COLLIDE_WITH(element))
+ MAYBE_DONT_COLLIDE_WITH(element) ||
+ element == EL_BD_ROCK ||
+ element == EL_BD_MEGA_ROCK ||
+ element == EL_BD_SWEET)
+ {
return TRUE;
+ }
else
+ {
for (i = 0; elements_with_counter[i].element != -1; i++)
if (elements_with_counter[i].element == element)
return TRUE;
+ }
return FALSE;
}
int xpos = ED_ELEMENT_SETTINGS_X(0);
int ypos = ED_ELEMENT_SETTINGS_Y(0) + ED_GADGET_SMALL_DISTANCE;
- PrintInfoText("No configuration options available.",
- FONT_TEXT_1, xpos, ypos);
+ PrintInfoText("No configuration options available.", FONT_TEXT_1, xpos, ypos);
return;
}
// check if there are elements where a value can be chosen for
for (i = 0; elements_with_counter[i].element != -1; i++)
{
- if (elements_with_counter[i].element == properties_element)
- {
- int counter_id = ED_COUNTER_ID_ELEMENT_VALUE1 + num_element_counters;
-
- counterbutton_info[counter_id].y =
- ED_ELEMENT_SETTINGS_YPOS(
- (HAS_EDITOR_CONTENT(properties_element) ? 1 : 0) +
- (CAN_GROW(properties_element) ? 1 : 0) +
- (COULD_MOVE_INTO_ACID(properties_element) ? 1 : 0) +
- (MAYBE_DONT_COLLIDE_WITH(properties_element) ? 1 : 0) +
- (properties_element == EL_EMC_MAGIC_BALL ? 2 : 0) +
- num_element_counters);
-
- counterbutton_info[counter_id].value = elements_with_counter[i].value;
- counterbutton_info[counter_id].text_right = elements_with_counter[i].text;
-
- if (properties_element == EL_GAME_OF_LIFE ||
- properties_element == EL_BIOMAZE)
- {
- counterbutton_info[counter_id].min_value = 0; // min neighbours
- counterbutton_info[counter_id].max_value = 8; // max neighbours
- }
- else
- {
- // !!! CHANGE THIS FOR CERTAIN ELEMENTS !!!
- counterbutton_info[counter_id].min_value = MIN_SCORE;
- counterbutton_info[counter_id].max_value = MAX_SCORE;
- }
+ if (elements_with_counter[i].element != properties_element)
+ continue;
- MapCounterButtons(counter_id);
+ // special case: score for extra diamonds only available in BD game engine
+ if (elements_with_counter[i].element == EL_BD_DIAMOND &&
+ elements_with_counter[i].value == &level.score[SC_DIAMOND_EXTRA] &&
+ level.game_engine_type != GAME_ENGINE_TYPE_BD)
+ continue;
- num_element_counters++;
- if (num_element_counters >= max_num_element_counters)
- break;
- }
+ // special case: some amoeba counters only available in BD game engine
+ if (elements_with_counter[i].element == EL_BD_AMOEBA &&
+ elements_with_counter[i].value != &level.amoeba_speed &&
+ level.game_engine_type != GAME_ENGINE_TYPE_BD)
+ continue;
+
+ // special case: some amoeba counters only available in R'n'D game engine
+ if (elements_with_counter[i].element == EL_BD_AMOEBA &&
+ elements_with_counter[i].value == &level.amoeba_speed &&
+ level.game_engine_type == GAME_ENGINE_TYPE_BD)
+ continue;
+
+ int counter_id = ED_COUNTER_ID_ELEMENT_VALUE1 + num_element_counters;
+
+ counterbutton_info[counter_id].y =
+ ED_ELEMENT_SETTINGS_YPOS((HAS_EDITOR_CONTENT(properties_element) ? 1 : 0) +
+ (CAN_GROW(properties_element) ? 1 : 0) +
+ (COULD_MOVE_INTO_ACID(properties_element) ? 1 : 0) +
+ (MAYBE_DONT_COLLIDE_WITH(properties_element) ? 1 : 0) +
+ (properties_element == EL_EMC_MAGIC_BALL ? 2 : 0) +
+ num_element_counters);
+
+ // special case: set amoeba counters for BD game engine separately
+ if ((properties_element == EL_BD_AMOEBA && level.game_engine_type == GAME_ENGINE_TYPE_BD) ||
+ (properties_element == EL_BD_AMOEBA_2))
+ counterbutton_info[counter_id].y = ED_ELEMENT_SETTINGS_YPOS(3 + num_element_counters);
+
+ counterbutton_info[counter_id].value = elements_with_counter[i].value;
+ counterbutton_info[counter_id].text_right = elements_with_counter[i].text;
+ counterbutton_info[counter_id].min_value = elements_with_counter[i].min_value;
+ counterbutton_info[counter_id].max_value = elements_with_counter[i].max_value;
+
+ // default: counter values between 0 and 999
+ if (counterbutton_info[counter_id].max_value == 0)
+ counterbutton_info[counter_id].max_value = 999;
+
+ MapCounterButtons(counter_id);
+
+ num_element_counters++;
+ if (num_element_counters >= max_num_element_counters)
+ break;
}
if (HAS_EDITOR_CONTENT(properties_element))
// draw stickybutton gadget
MapCheckbuttonGadget(ED_CHECKBUTTON_ID_STICK_ELEMENT);
- if (IS_AMOEBOID(properties_element))
+ if (properties_element == EL_BD_AMOEBA && level.game_engine_type == GAME_ENGINE_TYPE_BD)
+ {
+ MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_AMOEBA_WAIT_FOR_HATCHING);
+ MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_AMOEBA_START_IMMEDIATELY);
+
+ MapDrawingArea(ED_DRAWING_ID_BD_AMOEBA_CONTENT_TOO_BIG);
+ MapDrawingArea(ED_DRAWING_ID_BD_AMOEBA_CONTENT_ENCLOSED);
+ }
+ else if (properties_element == EL_BD_AMOEBA_2)
+ {
+ MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_AMOEBA_WAIT_FOR_HATCHING);
+ MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_AMOEBA_START_IMMEDIATELY);
+ MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_AMOEBA_2_EXPLODE_BY_AMOEBA);
+
+ MapDrawingArea(ED_DRAWING_ID_BD_AMOEBA_2_CONTENT_TOO_BIG);
+ MapDrawingArea(ED_DRAWING_ID_BD_AMOEBA_2_CONTENT_ENCLOSED);
+ MapDrawingArea(ED_DRAWING_ID_BD_AMOEBA_2_CONTENT_EXPLODING);
+ MapDrawingArea(ED_DRAWING_ID_BD_AMOEBA_2_CONTENT_LOOKS_LIKE);
+ }
+ else if (IS_AMOEBOID(properties_element))
MapDrawingArea(ED_DRAWING_ID_AMOEBA_CONTENT);
else if (properties_element == EL_YAMYAM ||
properties_element == EL_YAMYAM_LEFT ||
}
if (IS_BD_PLAYER_ELEMENT(properties_element))
+ {
+ counterbutton_info[ED_COUNTER_ID_BD_PUSHING_PROB].y =
+ ED_ELEMENT_SETTINGS_YPOS(2);
+ counterbutton_info[ED_COUNTER_ID_BD_PUSHING_PROB_WITH_SWEET].y =
+ ED_ELEMENT_SETTINGS_YPOS(3);
+ checkbutton_info[ED_CHECKBUTTON_ID_BD_PUSH_MEGA_ROCK_WITH_SWEET].y =
+ ED_ELEMENT_SETTINGS_YPOS(4);
+
+ // draw checkbutton gadgets
MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_DIAGONAL_MOVEMENTS);
+ MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_TOPMOST_PLAYER_ACTIVE);
+ MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_PUSH_MEGA_ROCK_WITH_SWEET);
- // special case: slippery walls option for gems only available in R'n'D game engine
- if (IS_GEM(properties_element) && level.game_engine_type == GAME_ENGINE_TYPE_RND)
+ // draw counter gadgets
+ MapCounterButtons(ED_COUNTER_ID_BD_PUSHING_PROB);
+ MapCounterButtons(ED_COUNTER_ID_BD_PUSHING_PROB_WITH_SWEET);
+ }
+
+ if (properties_element == EL_BD_ROCK && level.game_engine_type == GAME_ENGINE_TYPE_BD)
{
- checkbutton_info[ED_CHECKBUTTON_ID_EM_SLIPPERY_GEMS].y =
- ED_ELEMENT_SETTINGS_XPOS(properties_element == EL_BD_DIAMOND ? 2 : 1);
+ counterbutton_info[ED_COUNTER_ID_BD_PUSHING_PROB].y =
+ ED_ELEMENT_SETTINGS_YPOS(0);
+ counterbutton_info[ED_COUNTER_ID_BD_PUSHING_PROB_WITH_SWEET].y =
+ ED_ELEMENT_SETTINGS_YPOS(1);
- MapCheckbuttonGadget(ED_CHECKBUTTON_ID_EM_SLIPPERY_GEMS);
+ MapCounterButtons(ED_COUNTER_ID_BD_PUSHING_PROB);
+ MapCounterButtons(ED_COUNTER_ID_BD_PUSHING_PROB_WITH_SWEET);
+ }
+
+ if (properties_element == EL_BD_MEGA_ROCK ||
+ properties_element == EL_BD_SWEET)
+ {
+ counterbutton_info[ED_COUNTER_ID_BD_PUSHING_PROB_WITH_SWEET].y =
+ ED_ELEMENT_SETTINGS_YPOS(0);
+ checkbutton_info[ED_CHECKBUTTON_ID_BD_PUSH_MEGA_ROCK_WITH_SWEET].y =
+ ED_ELEMENT_SETTINGS_YPOS(1);
+
+ MapCounterButtons(ED_COUNTER_ID_BD_PUSHING_PROB_WITH_SWEET);
+ MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_PUSH_MEGA_ROCK_WITH_SWEET);
}
+ if (properties_element == EL_BD_MAGIC_WALL)
+ {
+ MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_MAGIC_WALL_WAIT_HATCHING);
+ MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_MAGIC_WALL_STOPS_AMOEBA);
+ }
+
+ // special case: slippery walls option for gems only available in R'n'D game engine
+ if (IS_GEM(properties_element) && level.game_engine_type == GAME_ENGINE_TYPE_RND)
+ MapCheckbuttonGadget(ED_CHECKBUTTON_ID_EM_SLIPPERY_GEMS);
+
if (properties_element == EL_EM_DYNAMITE)
MapCheckbuttonGadget(ED_CHECKBUTTON_ID_EM_EXPLODES_BY_FIRE);
properties_element == EL_BIOMAZE)
MapCheckbuttonGadget(ED_CHECKBUTTON_ID_USE_LIFE_BUGS);
- if (CAN_GROW(properties_element))
+ if (CAN_GROW(properties_element) && level.game_engine_type != GAME_ENGINE_TYPE_BD)
{
checkbutton_info[ED_CHECKBUTTON_ID_GROW_INTO_DIGGABLE].y =
ED_ELEMENT_SETTINGS_YPOS(HAS_EDITOR_CONTENT(properties_element) ? 1 : 0);