X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Feditor.c;h=6e24056011ad3e6ccc4e2e3f0a50fbf25dd87e90;hb=4eff89df72ffc45c4ad59fcd01860eb8f4179b9c;hp=a9ef7e5e57aee657b2de8d3acb5c485b89e8cde3;hpb=1e7b6eb2aa8ee9f348a444900cfb614d6adaad76;p=rocksndiamonds.git diff --git a/src/editor.c b/src/editor.c index a9ef7e5e..6e240560 100644 --- a/src/editor.c +++ b/src/editor.c @@ -441,6 +441,12 @@ enum 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, @@ -550,6 +556,12 @@ enum 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, @@ -701,6 +713,12 @@ enum 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, @@ -773,6 +791,8 @@ enum 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, @@ -1033,6 +1053,12 @@ enum 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, @@ -1128,6 +1154,12 @@ enum 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, @@ -1554,6 +1586,24 @@ static struct // ---------- 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), @@ -3652,6 +3702,54 @@ static struct 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), @@ -4123,6 +4221,60 @@ static struct "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 ------------------------------------------- { @@ -8097,17 +8249,10 @@ static void MapCounterButtons(int id) 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) - { - 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); - } + // set position for counter gadgets with dynamically determined position + 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 y = gi_up->y + yoffset; @@ -10646,6 +10791,10 @@ static void DrawPropertiesInfo(void) #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" @@ -10748,6 +10897,14 @@ static struct { 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 }, + { EL_BD_AMOEBA, &level.bd_amoeba_fast_growth_rate, TEXT_AMOEBA_FAST_RATE }, + { 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 }, + { EL_BD_AMOEBA_2, &level.bd_amoeba_2_fast_growth_rate, TEXT_AMOEBA_FAST_RATE }, { 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 }, @@ -10795,6 +10952,10 @@ 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) || @@ -10810,12 +10971,19 @@ static boolean checkPropertiesConfig(int 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; } @@ -10901,6 +11069,24 @@ static void DrawPropertiesConfig(void) { if (elements_with_counter[i].element == properties_element) { + // 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; + + // 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 = @@ -10912,6 +11098,12 @@ static void DrawPropertiesConfig(void) (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; @@ -10921,6 +11113,12 @@ static void DrawPropertiesConfig(void) counterbutton_info[counter_id].min_value = 0; // min neighbours counterbutton_info[counter_id].max_value = 8; // max neighbours } + else if (strEqual(elements_with_counter[i].text, TEXT_AMOEBA_SLOW_RATE) || + strEqual(elements_with_counter[i].text, TEXT_AMOEBA_FAST_RATE)) + { + counterbutton_info[counter_id].min_value = 0; // min percent + counterbutton_info[counter_id].max_value = 100; // max percent + } else { // !!! CHANGE THIS FOR CERTAIN ELEMENTS !!! @@ -10941,7 +11139,26 @@ static void DrawPropertiesConfig(void) // 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 || @@ -11044,19 +11261,56 @@ static void DrawPropertiesConfig(void) 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); + + // draw counter gadgets + MapCounterButtons(ED_COUNTER_ID_BD_PUSHING_PROB); + MapCounterButtons(ED_COUNTER_ID_BD_PUSHING_PROB_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) + 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); @@ -11091,7 +11345,7 @@ static void DrawPropertiesConfig(void) 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);