X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Feditor.c;h=750e0fa846948a1776a980a4c681bb53fcb89f67;hb=2402812951920ad4af5ac7a3cb52c9a4e8b4d75a;hp=6da69dfd85ad934a8276732078d6d44fe1ff3241;hpb=682ba5529540b03ce96e3890d24fe310adee4291;p=rocksndiamonds.git diff --git a/src/editor.c b/src/editor.c index 6da69dfd..750e0fa8 100644 --- a/src/editor.c +++ b/src/editor.c @@ -556,12 +556,17 @@ enum GADGET_ID_MAGIC_BALL_CONTENT_7, GADGET_ID_ANDROID_CONTENT, GADGET_ID_AMOEBA_CONTENT, + GADGET_ID_BD_SNAP_ELEMENT, 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_BD_ACID_EATS_ELEMENT, + GADGET_ID_BD_ACID_TURNS_TO_ELEMENT, + GADGET_ID_BD_BITER_EATS_ELEMENT, + GADGET_ID_BD_BLADDER_CONVERTS_BY_ELEMENT, GADGET_ID_START_ELEMENT, GADGET_ID_ARTWORK_ELEMENT, GADGET_ID_EXPLOSION_ELEMENT, @@ -719,6 +724,16 @@ enum GADGET_ID_BD_AMOEBA_WAIT_FOR_HATCHING, GADGET_ID_BD_AMOEBA_START_IMMEDIATELY, GADGET_ID_BD_AMOEBA_2_EXPLODE_BY_AMOEBA, + GADGET_ID_BD_VOODOO_COLLECTS_DIAMONDS, + 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_BD_CHANGE_EXPANDING_WALL, + GADGET_ID_BD_REPLICATORS_ACTIVE, + GADGET_ID_BD_CONVEYOR_BELTS_ACTIVE, + GADGET_ID_BD_CONVEYOR_BELTS_CHANGED, + GADGET_ID_BD_WATER_CANNOT_FLOW_DOWN, GADGET_ID_ENVELOPE_AUTOWRAP, GADGET_ID_ENVELOPE_CENTERED, GADGET_ID_MM_LASER_RED, @@ -1059,6 +1074,16 @@ enum 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_BD_VOODOO_COLLECTS_DIAMONDS, + 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_BD_CHANGE_EXPANDING_WALL, + ED_CHECKBUTTON_ID_BD_REPLICATORS_ACTIVE, + ED_CHECKBUTTON_ID_BD_CONVEYOR_BELTS_ACTIVE, + ED_CHECKBUTTON_ID_BD_CONVEYOR_BELTS_CHANGED, + ED_CHECKBUTTON_ID_BD_WATER_CANNOT_FLOW_DOWN, ED_CHECKBUTTON_ID_ENVELOPE_AUTOWRAP, ED_CHECKBUTTON_ID_ENVELOPE_CENTERED, ED_CHECKBUTTON_ID_MM_LASER_RED, @@ -1154,12 +1179,17 @@ enum ED_DRAWING_ID_MAGIC_BALL_CONTENT_7, ED_DRAWING_ID_ANDROID_CONTENT, ED_DRAWING_ID_AMOEBA_CONTENT, + ED_DRAWING_ID_BD_SNAP_ELEMENT, 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_BD_ACID_EATS_ELEMENT, + ED_DRAWING_ID_BD_ACID_TURNS_TO_ELEMENT, + ED_DRAWING_ID_BD_BITER_EATS_ELEMENT, + ED_DRAWING_ID_BD_BLADDER_CONVERTS_BY_ELEMENT, ED_DRAWING_ID_START_ELEMENT, ED_DRAWING_ID_ARTWORK_ELEMENT, ED_DRAWING_ID_EXPLOSION_ELEMENT, @@ -1263,82 +1293,82 @@ static struct { IMG_GFX_EDITOR_BUTTON_DRAW_SINGLE, GADGET_ID_SINGLE_ITEMS, &editor.button.draw_single, GD_TYPE_RADIO_BUTTON, - "draw single items", 's' + "Draw single items", 's' }, { IMG_GFX_EDITOR_BUTTON_DRAW_CONNECTED, GADGET_ID_CONNECTED_ITEMS, &editor.button.draw_connected, GD_TYPE_RADIO_BUTTON, - "draw connected items", 'd' + "Draw connected items", 'd' }, { IMG_GFX_EDITOR_BUTTON_DRAW_LINE, GADGET_ID_LINE, &editor.button.draw_line, GD_TYPE_RADIO_BUTTON, - "draw lines", 'l' + "Draw lines", 'l' }, { IMG_GFX_EDITOR_BUTTON_DRAW_ARC, GADGET_ID_ARC, &editor.button.draw_arc, GD_TYPE_RADIO_BUTTON, - "draw arcs", 'a' + "Draw arcs", 'a' }, { IMG_GFX_EDITOR_BUTTON_DRAW_RECTANGLE, GADGET_ID_RECTANGLE, &editor.button.draw_rectangle, GD_TYPE_RADIO_BUTTON, - "draw outline rectangles", 'r' + "Draw outline rectangles", 'r' }, { IMG_GFX_EDITOR_BUTTON_DRAW_FILLED_BOX, GADGET_ID_FILLED_BOX, &editor.button.draw_filled_box, GD_TYPE_RADIO_BUTTON, - "draw filled rectangles", 'R' + "Draw filled rectangles", 'R' }, { IMG_GFX_EDITOR_BUTTON_ROTATE_UP, GADGET_ID_WRAP_UP, &editor.button.rotate_up, GD_TYPE_NORMAL_BUTTON, - "wrap (rotate) level up", 0 + "Wrap (rotate) level up", 0 }, { IMG_GFX_EDITOR_BUTTON_DRAW_TEXT, GADGET_ID_TEXT, &editor.button.draw_text, GD_TYPE_RADIO_BUTTON, - "enter text elements", 't' + "Enter text elements", 't' }, { IMG_GFX_EDITOR_BUTTON_FLOOD_FILL, GADGET_ID_FLOOD_FILL, &editor.button.flood_fill, GD_TYPE_RADIO_BUTTON, - "flood fill", 'f' + "Flood fill", 'f' }, { IMG_GFX_EDITOR_BUTTON_ROTATE_LEFT, GADGET_ID_WRAP_LEFT, &editor.button.rotate_left, GD_TYPE_NORMAL_BUTTON, - "wrap (rotate) level left", 0 + "Wrap (rotate) level left", 0 }, { IMG_GFX_EDITOR_BUTTON_ZOOM_LEVEL, GADGET_ID_ZOOM, &editor.button.zoom_level, GD_TYPE_NORMAL_BUTTON, - "zoom level tile size", '+' + "Zoom level tile size", '+' }, { IMG_GFX_EDITOR_BUTTON_ROTATE_RIGHT, GADGET_ID_WRAP_RIGHT, &editor.button.rotate_right, GD_TYPE_NORMAL_BUTTON, - "wrap (rotate) level right", 0 + "Wrap (rotate) level right", 0 }, { IMG_GFX_EDITOR_BUTTON_DRAW_RANDOM, GADGET_ID_RANDOM_PLACEMENT, &editor.button.draw_random, GD_TYPE_NORMAL_BUTTON, - "random element placement", 0 + "Random element placement", 0 }, { IMG_GFX_EDITOR_BUTTON_GRAB_BRUSH, GADGET_ID_GRAB_BRUSH, &editor.button.grab_brush, GD_TYPE_RADIO_BUTTON, - "grab brush", 'b' + "Grab brush", 'b' }, { IMG_GFX_EDITOR_BUTTON_ROTATE_DOWN, GADGET_ID_WRAP_DOWN, &editor.button.rotate_down, GD_TYPE_NORMAL_BUTTON, - "wrap (rotate) level down", 0 + "Wrap (rotate) level down", 0 }, { IMG_GFX_EDITOR_BUTTON_PICK_ELEMENT, GADGET_ID_PICK_ELEMENT, &editor.button.pick_element, GD_TYPE_RADIO_BUTTON, - "pick drawing element", ',' + "Pick drawing element", ',' }, // ---------- level control buttons ----------------------------------------- @@ -1346,32 +1376,32 @@ static struct { IMG_GFX_EDITOR_BUTTON_UNDO, GADGET_ID_UNDO, &editor.button.undo, GD_TYPE_NORMAL_BUTTON, - "undo/redo last operation", 'u' + "Undo/redo last operation", 'u' }, { IMG_GFX_EDITOR_BUTTON_CONF, GADGET_ID_CONF, &editor.button.conf, GD_TYPE_NORMAL_BUTTON, - "level and editor settings", 'I' + "Level and editor settings", 'I' }, { IMG_GFX_EDITOR_BUTTON_SAVE, GADGET_ID_SAVE, &editor.button.save, GD_TYPE_NORMAL_BUTTON, - "save level", 'S' + "Save level", 'S' }, { IMG_GFX_EDITOR_BUTTON_CLEAR, GADGET_ID_CLEAR, &editor.button.clear, GD_TYPE_NORMAL_BUTTON, - "clear level", 'C' + "Clear level", 'C' }, { IMG_GFX_EDITOR_BUTTON_TEST, GADGET_ID_TEST, &editor.button.test, GD_TYPE_NORMAL_BUTTON, - "test level", 'T' + "Test level", 'T' }, { IMG_GFX_EDITOR_BUTTON_EXIT, GADGET_ID_EXIT, &editor.button.exit, GD_TYPE_NORMAL_BUTTON, - "exit level editor", 'E' + "Exit level editor", 'E' }, // ---------- CE and GE control buttons ------------------------------------- @@ -1379,27 +1409,27 @@ static struct { IMG_GFX_EDITOR_BUTTON_CE_COPY_FROM, GADGET_ID_CUSTOM_COPY_FROM, &editor.button.ce_copy_from, GD_TYPE_RADIO_BUTTON, - "copy settings from other element", 0 + "Copy settings from other element", 0 }, { IMG_GFX_EDITOR_BUTTON_CE_COPY_TO, GADGET_ID_CUSTOM_COPY_TO, &editor.button.ce_copy_to, GD_TYPE_RADIO_BUTTON, - "copy settings to other element", 0 + "Copy settings to other element", 0 }, { IMG_GFX_EDITOR_BUTTON_CE_SWAP, GADGET_ID_CUSTOM_EXCHANGE, &editor.button.ce_swap, GD_TYPE_RADIO_BUTTON, - "exchange element with other element", 0 + "Exchange element with other element", 0 }, { IMG_GFX_EDITOR_BUTTON_CE_COPY, GADGET_ID_CUSTOM_COPY, &editor.button.ce_copy, GD_TYPE_NORMAL_BUTTON, - "copy settings from this element", 0 + "Copy settings from this element", 0 }, { IMG_GFX_EDITOR_BUTTON_CE_PASTE, GADGET_ID_CUSTOM_PASTE, &editor.button.ce_paste, GD_TYPE_NORMAL_BUTTON, - "paste settings to this element", 0 + "Paste settings to this element", 0 }, // ---------- palette control buttons --------------------------------------- @@ -1407,27 +1437,27 @@ static struct { IMG_GFX_EDITOR_BUTTON_PROPERTIES, GADGET_ID_PROPERTIES, &editor.button.properties, GD_TYPE_NORMAL_BUTTON, - "properties of drawing element", 'p' + "Properties of drawing element", 'p' }, { IMG_GFX_EDITOR_BUTTON_ELEMENT_LEFT, GADGET_ID_ELEMENT_LEFT, &editor.button.element_left, GD_TYPE_NORMAL_BUTTON, - "properties of drawing element 1", '1' + "Properties of drawing element 1", '1' }, { IMG_GFX_EDITOR_BUTTON_ELEMENT_MIDDLE, GADGET_ID_ELEMENT_MIDDLE, &editor.button.element_middle, GD_TYPE_NORMAL_BUTTON, - "properties of drawing element 2", '2' + "Properties of drawing element 2", '2' }, { IMG_GFX_EDITOR_BUTTON_ELEMENT_RIGHT, GADGET_ID_ELEMENT_RIGHT, &editor.button.element_right, GD_TYPE_NORMAL_BUTTON, - "properties of drawing element 3", '3' + "Properties of drawing element 3", '3' }, { IMG_GFX_EDITOR_BUTTON_PALETTE, GADGET_ID_PALETTE, &editor.button.palette, GD_TYPE_NORMAL_BUTTON, - "show list of elements", 'e' + "Show list of elements", 'e' } }; @@ -1482,7 +1512,7 @@ static struct GADGET_ID_LEVEL_XSIZE_DOWN, GADGET_ID_LEVEL_XSIZE_UP, GADGET_ID_LEVEL_XSIZE_TEXT, GADGET_ID_NONE, &level.fieldx, - "playfield size:", NULL, "width", + "Playfield size:", NULL, "Width", }, { ED_COUNTER_ID_LEVEL_YSIZE, @@ -1491,7 +1521,7 @@ static struct GADGET_ID_LEVEL_YSIZE_DOWN, GADGET_ID_LEVEL_YSIZE_UP, GADGET_ID_LEVEL_YSIZE_TEXT, GADGET_ID_LEVEL_XSIZE_UP, &level.fieldy, - NULL, " ", "height", + NULL, " ", "Height", }, { ED_COUNTER_ID_LEVEL_GEMSLIMIT, @@ -1500,7 +1530,7 @@ static struct GADGET_ID_LEVEL_GEMSLIMIT_DOWN, GADGET_ID_LEVEL_GEMSLIMIT_UP, GADGET_ID_LEVEL_GEMSLIMIT_TEXT, GADGET_ID_NONE, &level.gems_needed, - NULL, "number of gems to collect:", NULL + NULL, "Number of gems to collect:", NULL }, { ED_COUNTER_ID_LEVEL_TIMELIMIT, @@ -1509,7 +1539,7 @@ static struct GADGET_ID_LEVEL_TIMELIMIT_DOWN, GADGET_ID_LEVEL_TIMELIMIT_UP, GADGET_ID_LEVEL_TIMELIMIT_TEXT, GADGET_ID_NONE, &level.time, - "time or step limit to solve level:", NULL, NULL + "Time or step limit to solve level:", NULL, NULL }, { ED_COUNTER_ID_LEVEL_TIMESCORE, @@ -1518,7 +1548,7 @@ static struct GADGET_ID_LEVEL_TIMESCORE_DOWN, GADGET_ID_LEVEL_TIMESCORE_UP, GADGET_ID_LEVEL_TIMESCORE_TEXT, GADGET_ID_NONE, &level.score[SC_TIME_BONUS], - "score for time or steps left:", NULL, NULL + "Score for time or steps left:", NULL, NULL }, { ED_COUNTER_ID_LEVEL_RANDOM_SEED, @@ -1527,7 +1557,7 @@ static struct GADGET_ID_LEVEL_RANDOM_SEED_DOWN, GADGET_ID_LEVEL_RANDOM_SEED_UP, GADGET_ID_LEVEL_RANDOM_SEED_TEXT, GADGET_ID_NONE, &level.random_seed, - NULL, "random seed:", "(0 => random)" + NULL, "Random seed:", "(0 => random)" }, { ED_COUNTER_ID_LEVELSET_NUM_LEVELS, @@ -1536,7 +1566,7 @@ static struct GADGET_ID_LEVELSET_NUM_LEVELS_DOWN, GADGET_ID_LEVELSET_NUM_LEVELS_UP, GADGET_ID_LEVELSET_NUM_LEVELS_TEXT, GADGET_ID_NONE, &levelset_num_levels, - "number of levels:", NULL, NULL, + "Number of levels:", NULL, NULL, }, { ED_COUNTER_ID_LEVEL_RANDOM, @@ -1545,7 +1575,7 @@ static struct GADGET_ID_LEVEL_RANDOM_DOWN, GADGET_ID_LEVEL_RANDOM_UP, GADGET_ID_LEVEL_RANDOM_TEXT, GADGET_ID_NONE, &random_placement_value, - "random element placement:", NULL, "in" + "Random element placement:", NULL, "in" }, { ED_COUNTER_ID_BD_CYCLE_DELAY_MS, @@ -1554,7 +1584,7 @@ static struct GADGET_ID_BD_CYCLE_DELAY_MS_DOWN, GADGET_ID_BD_CYCLE_DELAY_MS_UP, GADGET_ID_BD_CYCLE_DELAY_MS_TEXT, GADGET_ID_NONE, &level.bd_cycle_delay_ms, - NULL, NULL, "game cycle delay (ms)" + NULL, NULL, "Game cycle delay (ms)" }, { ED_COUNTER_ID_BD_CYCLE_DELAY_C64, @@ -1563,7 +1593,7 @@ static struct GADGET_ID_BD_CYCLE_DELAY_C64_DOWN, GADGET_ID_BD_CYCLE_DELAY_C64_UP, GADGET_ID_BD_CYCLE_DELAY_C64_TEXT, GADGET_ID_NONE, &level.bd_cycle_delay_c64, - NULL, NULL, "game cycle delay (C64-style)" + NULL, NULL, "Game cycle delay (C64-style)" }, { ED_COUNTER_ID_BD_HATCHING_DELAY_CYCLES, @@ -1572,7 +1602,7 @@ static struct GADGET_ID_BD_HATCHING_DELAY_CYCLES_DOWN, GADGET_ID_BD_HATCHING_DELAY_CYCLES_UP, GADGET_ID_BD_HATCHING_DELAY_CYCLES_TEXT, GADGET_ID_NONE, &level.bd_hatching_delay_cycles, - NULL, NULL, "hatching delay (cycles)" + NULL, NULL, "Hatching delay (cycles)" }, { ED_COUNTER_ID_BD_HATCHING_DELAY_SECONDS, @@ -1581,7 +1611,7 @@ static struct GADGET_ID_BD_HATCHING_DELAY_SECONDS_DOWN, GADGET_ID_BD_HATCHING_DELAY_SECONDS_UP, GADGET_ID_BD_HATCHING_DELAY_SECONDS_TEXT, GADGET_ID_NONE, &level.bd_hatching_delay_seconds, - NULL, NULL, "hatching delay (seconds)" + NULL, NULL, "Hatching delay (seconds)" }, // ---------- element settings: configure (various elements) ---------------- @@ -1593,7 +1623,7 @@ static struct 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" + NULL, NULL, "Push probability" }, { ED_COUNTER_ID_BD_PUSHING_PROB_WITH_SWEET, @@ -1602,7 +1632,7 @@ static struct 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" + NULL, NULL, "Push probability with sweet" }, { ED_COUNTER_ID_ELEMENT_VALUE1, @@ -1647,7 +1677,7 @@ static struct GADGET_ID_YAMYAM_CONTENT_DOWN, GADGET_ID_YAMYAM_CONTENT_UP, GADGET_ID_YAMYAM_CONTENT_TEXT, GADGET_ID_NONE, &level.num_yamyam_contents, - NULL, NULL, "number of content areas" + NULL, NULL, "Number of content areas" }, { ED_COUNTER_ID_BALL_CONTENT, @@ -1656,7 +1686,7 @@ static struct GADGET_ID_BALL_CONTENT_DOWN, GADGET_ID_BALL_CONTENT_UP, GADGET_ID_BALL_CONTENT_TEXT, GADGET_ID_NONE, &level.num_ball_contents, - NULL, NULL, "number of content areas" + NULL, NULL, "Number of content areas" }, { ED_COUNTER_ID_ANDROID_CONTENT, @@ -1665,7 +1695,7 @@ static struct GADGET_ID_ANDROID_CONTENT_DOWN, GADGET_ID_ANDROID_CONTENT_UP, GADGET_ID_ANDROID_CONTENT_TEXT, GADGET_ID_NONE, &level.num_android_clone_elements, - NULL, NULL, "number of clonable elements" + NULL, NULL, "Number of clonable elements" }, { ED_COUNTER_ID_ENVELOPE_XSIZE, @@ -1674,7 +1704,7 @@ static struct GADGET_ID_ENVELOPE_XSIZE_DOWN, GADGET_ID_ENVELOPE_XSIZE_UP, GADGET_ID_ENVELOPE_XSIZE_TEXT, GADGET_ID_NONE, NULL, // will be set when used - NULL, NULL, "width", + NULL, NULL, "Width", }, { ED_COUNTER_ID_ENVELOPE_YSIZE, @@ -1683,7 +1713,7 @@ static struct GADGET_ID_ENVELOPE_YSIZE_DOWN, GADGET_ID_ENVELOPE_YSIZE_UP, GADGET_ID_ENVELOPE_YSIZE_TEXT, GADGET_ID_ENVELOPE_XSIZE_UP, NULL, // will be set when used - NULL, " ", "height", + NULL, " ", "Height", }, { ED_COUNTER_ID_INVENTORY_SIZE, @@ -1692,7 +1722,7 @@ static struct GADGET_ID_INVENTORY_SIZE_DOWN, GADGET_ID_INVENTORY_SIZE_UP, GADGET_ID_INVENTORY_SIZE_TEXT, GADGET_ID_NONE, &level.initial_inventory_size[0], - NULL, NULL, "number of inventory elements" + NULL, NULL, "Number of inventory elements" }, { ED_COUNTER_ID_MM_BALL_CONTENT, @@ -1701,7 +1731,7 @@ static struct GADGET_ID_MM_BALL_CONTENT_DOWN, GADGET_ID_MM_BALL_CONTENT_UP, GADGET_ID_MM_BALL_CONTENT_TEXT, GADGET_ID_NONE, &level.num_mm_ball_contents, - NULL, NULL, "number of content elements" + NULL, NULL, "Number of content elements" }, // ---------- element settings: configure 1 (custom elements) --------------- @@ -1749,7 +1779,7 @@ static struct GADGET_ID_PUSH_DELAY_FIX_DOWN, GADGET_ID_PUSH_DELAY_FIX_UP, GADGET_ID_PUSH_DELAY_FIX_TEXT, GADGET_ID_NONE, &custom_element.push_delay_fixed, - NULL, "push delay", NULL + NULL, "Push delay", NULL }, { ED_COUNTER_ID_PUSH_DELAY_RND, @@ -1767,7 +1797,7 @@ static struct GADGET_ID_DROP_DELAY_FIX_DOWN, GADGET_ID_DROP_DELAY_FIX_UP, GADGET_ID_DROP_DELAY_FIX_TEXT, GADGET_ID_NONE, &custom_element.drop_delay_fixed, - NULL, "drop delay", NULL + NULL, "Drop delay", NULL }, { ED_COUNTER_ID_DROP_DELAY_RND, @@ -1788,7 +1818,7 @@ static struct GADGET_ID_MOVE_DELAY_FIX_DOWN, GADGET_ID_MOVE_DELAY_FIX_UP, GADGET_ID_MOVE_DELAY_FIX_TEXT, GADGET_ID_NONE, &custom_element.move_delay_fixed, - NULL, "move delay", NULL + NULL, "Move delay", NULL }, { ED_COUNTER_ID_MOVE_DELAY_RND, @@ -1806,7 +1836,7 @@ static struct GADGET_ID_STEP_DELAY_FIX_DOWN, GADGET_ID_STEP_DELAY_FIX_UP, GADGET_ID_STEP_DELAY_FIX_TEXT, GADGET_ID_NONE, &custom_element.step_delay_fixed, - NULL, "step delay", NULL + NULL, "Step delay", NULL }, { ED_COUNTER_ID_STEP_DELAY_RND, @@ -1824,7 +1854,7 @@ static struct GADGET_ID_EXPLOSION_DELAY_DOWN, GADGET_ID_EXPLOSION_DELAY_UP, GADGET_ID_EXPLOSION_DELAY_TEXT, GADGET_ID_NONE, &custom_element.explosion_delay, - NULL, "explosion delay", NULL + NULL, "Explosion delay", NULL }, { ED_COUNTER_ID_IGNITION_DELAY, @@ -1833,7 +1863,7 @@ static struct GADGET_ID_IGNITION_DELAY_DOWN, GADGET_ID_IGNITION_DELAY_UP, GADGET_ID_IGNITION_DELAY_TEXT, GADGET_ID_NONE, &custom_element.ignition_delay, - NULL, "ignition delay", "(by fire)" + NULL, "Ignition delay", "(by fire)" }, // ---------- element settings: configure (group elements) ------------------ @@ -1845,7 +1875,7 @@ static struct GADGET_ID_GROUP_CONTENT_DOWN, GADGET_ID_GROUP_CONTENT_UP, GADGET_ID_GROUP_CONTENT_TEXT, GADGET_ID_NONE, &group_element_info.num_elements, - NULL, NULL, "number of elements in group" + NULL, NULL, "Number of elements in group" }, // ---------- element settings: advanced (custom elements) ------------------ @@ -1875,7 +1905,7 @@ static struct GADGET_ID_CHANGE_CONT_RND_DOWN, GADGET_ID_CHANGE_CONT_RND_UP, GADGET_ID_CHANGE_CONT_RND_TEXT, GADGET_ID_NONE, &custom_element_change.random_percentage, - NULL, "use random replace:", "%" + NULL, "Use random replace:", "%" }, }; @@ -2723,7 +2753,7 @@ static struct -1, options_time_or_steps, &level.use_step_counter, - NULL, NULL, "(0 => no limit)", "time or step limit" + NULL, NULL, "(0 => no limit)", "Select time or step limit" }, { ED_SELECTBOX_ID_TIME_SCORE_BASE, @@ -2732,7 +2762,7 @@ static struct -1, options_time_score_base, &level.time_score_base, - NULL, NULL, NULL, "time score for 1 or 10 seconds/steps" + NULL, NULL, NULL, "Select time score for 1 or 10 seconds/steps" }, { ED_SELECTBOX_ID_GAME_ENGINE_TYPE, @@ -2741,7 +2771,7 @@ static struct -1, options_game_engine_type, &level.game_engine_type, - NULL, "game engine:", NULL, "game engine" + NULL, "Game engine:", NULL, "Select game engine" }, { ED_SELECTBOX_ID_BD_SCHEDULING_TYPE, @@ -2750,7 +2780,7 @@ static struct -1, options_bd_scheduling_type, &level.bd_scheduling_type, - NULL, "scheduling type:", NULL, "level timing" + NULL, "Scheduling type:", NULL, "Select level timing" }, { ED_SELECTBOX_ID_LEVELSET_SAVE_MODE, @@ -2759,7 +2789,7 @@ static struct -1, options_levelset_save_mode, &levelset_save_mode, - "Action:", NULL, NULL, "action when saving level set" + "Action:", NULL, NULL, "Select action when saving level set" }, // ---------- element settings: configure (several elements) ---------------- @@ -2771,7 +2801,7 @@ static struct -1, options_wind_direction, &level.wind_direction_initial, - NULL, "initial wind direction:", NULL, "initial wind direction" + NULL, "Initial wind direction:", NULL, "Select initial wind direction" }, { ED_SELECTBOX_ID_PLAYER_SPEED, @@ -2780,7 +2810,7 @@ static struct -1, options_player_speed, &level.initial_player_stepsize[0], - NULL, "initial player speed:", NULL, "initial player speed" + NULL, "Initial player speed:", NULL, "Select initial player speed" }, { ED_SELECTBOX_ID_MM_BALL_CHOICE_MODE, @@ -2789,7 +2819,7 @@ static struct -1, options_group_choice_mode, &level.mm_ball_choice_mode, - NULL, "choice type:", NULL, "type of content choice" + NULL, "Choice type:", NULL, "Select type of content choice" }, // ---------- element settings: configure 1 (custom elements) --------------- @@ -2801,7 +2831,7 @@ static struct -1, options_access_type, &custom_element.access_type, - NULL, NULL, NULL, "type of access to this field" + NULL, NULL, NULL, "Select type of access to this field" }, { ED_SELECTBOX_ID_CUSTOM_ACCESS_LAYER, @@ -2810,7 +2840,7 @@ static struct -1, options_access_layer, &custom_element.access_layer, - NULL, NULL, NULL, "layer of access for this field" + NULL, NULL, NULL, "Select layer of access for this field" }, { ED_SELECTBOX_ID_CUSTOM_ACCESS_PROTECTED, @@ -2819,7 +2849,7 @@ static struct -1, options_access_protected, &custom_element.access_protected, - NULL, NULL, NULL, "protected access for this field" + NULL, NULL, NULL, "Select protected access for this field" }, { ED_SELECTBOX_ID_CUSTOM_ACCESS_DIRECTION, @@ -2828,7 +2858,7 @@ static struct -1, options_access_direction, &custom_element.access_direction, - NULL, "from", NULL, "access direction for this field" + NULL, "from", NULL, "Select access direction for this field" }, { ED_SELECTBOX_ID_CUSTOM_WALK_TO_ACTION, @@ -2837,7 +2867,7 @@ static struct -1, options_walk_to_action, &custom_element.walk_to_action, - NULL, NULL, NULL, "diggable/collectible/pushable" + NULL, NULL, NULL, "Select diggable/collectible/pushable" }, // ---------- element settings: configure 2 (custom elements) --------------- @@ -2849,7 +2879,7 @@ static struct -1, options_move_pattern, &custom_element.move_pattern, - NULL, "can move", NULL, "element move pattern" + NULL, "Can move", NULL, "Select element move pattern" }, { ED_SELECTBOX_ID_CUSTOM_MOVE_DIRECTION, @@ -2858,7 +2888,7 @@ static struct -1, options_move_direction, &custom_element.move_direction_initial, - NULL, "starts moving", NULL, "initial element move direction" + NULL, "Starts moving", NULL, "Select initial element move direction" }, { ED_SELECTBOX_ID_CUSTOM_MOVE_STEPSIZE, @@ -2867,7 +2897,7 @@ static struct -1, options_move_stepsize, &custom_element.move_stepsize, - NULL, "move/fall speed", NULL, "speed of element movement" + NULL, "Move/fall speed", NULL, "Select speed of element movement" }, { ED_SELECTBOX_ID_CUSTOM_MOVE_LEAVE_TYPE, @@ -2879,7 +2909,7 @@ static struct // left text with leading spaces to place gadget next to "can dig" gadget // (needed because drawing area gadgets created after selectbox gadgets) // NULL, "can dig: can", ":", "leave behind or change element" - NULL, " can", ":", "leave behind or change element" + NULL, " Can", ":", "Select leave behind or change element" }, { ED_SELECTBOX_ID_CUSTOM_SMASH_TARGETS, @@ -2888,7 +2918,7 @@ static struct -1, options_smash_targets, &custom_element.smash_targets, - NULL, "can smash", NULL, "elements that can be smashed" + NULL, "Can smash", NULL, "Select elements that can be smashed" }, { ED_SELECTBOX_ID_CUSTOM_SLIPPERY_TYPE, @@ -2897,7 +2927,7 @@ static struct -1, options_slippery_type, &custom_element.slippery_type, - NULL, "slippery", NULL, "where other elements fall down" + NULL, "Slippery", NULL, "Select where other elements fall down" }, { ED_SELECTBOX_ID_CUSTOM_DEADLINESS, @@ -2906,7 +2936,7 @@ static struct -1, options_deadliness, &custom_element.deadliness, - NULL, "deadly when", NULL, "deadliness of element" + NULL, "Deadly when", NULL, "Select deadliness of element" }, { ED_SELECTBOX_ID_CUSTOM_EXPLOSION_TYPE, @@ -2915,7 +2945,7 @@ static struct -1, options_explosion_type, &custom_element.explosion_type, - NULL, "can explode", NULL, "explosion type" + NULL, "Can explode", NULL, "Select explosion type" }, // ---------- element settings: advanced (custom elements) ------------------ @@ -2927,7 +2957,7 @@ static struct -1, options_time_units, &custom_element_change.delay_frames, - NULL, "delay time given in", NULL, "delay time units for change" + NULL, "Delay time given in", NULL, "Select delay time units for change" }, { ED_SELECTBOX_ID_CHANGE_DIRECT_ACTION, @@ -2936,7 +2966,7 @@ static struct -1, options_change_direct_action, &custom_element_change.direct_action, - NULL, NULL, NULL, "type of direct action" + NULL, NULL, NULL, "Select type of direct action" }, { ED_SELECTBOX_ID_CHANGE_OTHER_ACTION, @@ -2945,7 +2975,7 @@ static struct -1, options_change_other_action, &custom_element_change.other_action, - NULL, NULL, "element:", "type of other element action" + NULL, NULL, "element:", "Select type of other element action" }, { ED_SELECTBOX_ID_CHANGE_SIDE, @@ -2954,7 +2984,7 @@ static struct -1, options_change_trigger_side, &custom_element_change.trigger_side, - NULL, "at", "side", "element side triggering change" + NULL, "at", "side", "Select element side triggering change" }, { ED_SELECTBOX_ID_CHANGE_PLAYER, @@ -2963,7 +2993,7 @@ static struct -1, options_change_trigger_player, &custom_element_change.trigger_player, - NULL, "player:", " ", "player that causes change" + NULL, "Player:", " ", "Select player that causes change" }, { ED_SELECTBOX_ID_CHANGE_PAGE, @@ -2972,7 +3002,7 @@ static struct -1, options_change_trigger_page, &custom_element_change.trigger_page, - NULL, "page:", NULL, "change page that causes change" + NULL, "Page:", NULL, "Select change page that causes change" }, { ED_SELECTBOX_ID_CHANGE_REPLACE_WHEN, @@ -2981,7 +3011,7 @@ static struct -1, options_change_replace_when, &custom_element_change.replace_when, - NULL, "replace when", NULL, "which elements can be replaced" + NULL, "Replace when", NULL, "Select which elements can be replaced" }, { ED_SELECTBOX_ID_ACTION_TYPE, @@ -2990,7 +3020,7 @@ static struct 15, options_action_type, &custom_element_change.action_type, - NULL, NULL, NULL, "action on specified condition" + NULL, NULL, NULL, "Select action on specified condition" }, { ED_SELECTBOX_ID_ACTION_MODE, @@ -2999,7 +3029,7 @@ static struct -1, options_action_mode_none, &custom_element_change.action_mode, - NULL, NULL, NULL, "action operator" + NULL, NULL, NULL, "Select action operator" }, { ED_SELECTBOX_ID_ACTION_ARG, @@ -3008,7 +3038,7 @@ static struct -1, options_action_arg_none, &custom_element_change.action_arg, - NULL, NULL, NULL, "action parameter" + NULL, NULL, NULL, "Select action parameter" }, { ED_SELECTBOX_ID_SELECT_CHANGE_PAGE, @@ -3017,7 +3047,7 @@ static struct 3, options_change_page, &custom_element.current_change_page, - NULL, NULL, NULL, "element change page" + NULL, NULL, NULL, "Select element change page" }, // ---------- element settings: configure (group elements) ------------------ @@ -3029,7 +3059,7 @@ static struct -1, options_group_choice_mode, &group_element_info.choice_mode, - NULL, "choice type:", NULL, "type of group element choice" + NULL, "Choice type:", NULL, "Select type of group element choice" }, }; @@ -3172,28 +3202,28 @@ static struct IMG_EDITOR_COUNTER_DOWN, ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(14), GADGET_ID_PREV_CHANGE_PAGE, GADGET_ID_NONE, - NULL, NULL, "select previous change page" + NULL, NULL, "Select previous change page" }, { ED_GRAPHICBUTTON_ID_NEXT_CHANGE_PAGE, IMG_EDITOR_COUNTER_UP, -1, ED_ELEMENT_SETTINGS_YPOS(14), GADGET_ID_NEXT_CHANGE_PAGE, GADGET_ID_SELECT_CHANGE_PAGE, - NULL, "change page", "select next change page" + NULL, "Change page", "Select next change page" }, { ED_GRAPHICBUTTON_ID_COPY_CHANGE_PAGE, IMG_GFX_EDITOR_BUTTON_CP_COPY, -1, ED_ELEMENT_SETTINGS_YPOS(14), GADGET_ID_COPY_CHANGE_PAGE, GADGET_ID_NEXT_CHANGE_PAGE, - " ", NULL, "copy settings from this change page" + " ", NULL, "Copy settings from this change page" }, { ED_GRAPHICBUTTON_ID_PASTE_CHANGE_PAGE, IMG_GFX_EDITOR_BUTTON_CP_PASTE, -1, ED_ELEMENT_SETTINGS_YPOS(14), GADGET_ID_PASTE_CHANGE_PAGE, GADGET_ID_COPY_CHANGE_PAGE, - NULL, NULL, "paste settings to this change page" + NULL, NULL, "Paste settings to this change page" }, }; @@ -3214,37 +3244,37 @@ static struct ED_SCROLLBUTTON_ID_AREA_UP, IMG_EDITOR_PLAYFIELD_SCROLL_UP, GADGET_ID_SCROLL_UP, - "scroll level editing area up" + "Scroll level editing area up" }, { ED_SCROLLBUTTON_ID_AREA_DOWN, IMG_EDITOR_PLAYFIELD_SCROLL_DOWN, GADGET_ID_SCROLL_DOWN, - "scroll level editing area down" + "Scroll level editing area down" }, { ED_SCROLLBUTTON_ID_AREA_LEFT, IMG_EDITOR_PLAYFIELD_SCROLL_LEFT, GADGET_ID_SCROLL_LEFT, - "scroll level editing area left" + "Scroll level editing area left" }, { ED_SCROLLBUTTON_ID_AREA_RIGHT, IMG_EDITOR_PLAYFIELD_SCROLL_RIGHT, GADGET_ID_SCROLL_RIGHT, - "scroll level editing area right" + "Scroll level editing area right" }, { ED_SCROLLBUTTON_ID_LIST_UP, IMG_EDITOR_PALETTE_SCROLL_UP, GADGET_ID_SCROLL_LIST_UP, - "scroll element list up ('Page Up')" + "Scroll element list up ('Page Up')" }, { ED_SCROLLBUTTON_ID_LIST_DOWN, IMG_EDITOR_PALETTE_SCROLL_DOWN, GADGET_ID_SCROLL_LIST_DOWN, - "scroll element list down ('Page Down')" + "Scroll element list down ('Page Down')" }, }; @@ -3270,21 +3300,21 @@ static struct IMG_EDITOR_PLAYFIELD_SCROLLBAR, GD_TYPE_SCROLLBAR_HORIZONTAL, GADGET_ID_SCROLL_HORIZONTAL, - "scroll level editing area horizontally" + "Scroll level editing area horizontally" }, { ED_SCROLLBAR_ID_AREA_VERTICAL, IMG_EDITOR_PLAYFIELD_SCROLLBAR, GD_TYPE_SCROLLBAR_VERTICAL, GADGET_ID_SCROLL_VERTICAL, - "scroll level editing area vertically" + "Scroll level editing area vertically" }, { ED_SCROLLBAR_ID_LIST_VERTICAL, IMG_EDITOR_PALETTE_SCROLLBAR, GD_TYPE_SCROLLBAR_VERTICAL, GADGET_ID_SCROLL_LIST_VERTICAL, - "scroll element list vertically" + "Scroll element list vertically" } }; @@ -3307,7 +3337,7 @@ static struct GADGET_ID_RANDOM_PERCENTAGE, GADGET_ID_LEVEL_RANDOM_UP, RADIO_NR_RANDOM_ELEMENTS, &random_placement_method, RANDOM_USE_PERCENTAGE, - " ", "percentage", "use percentage for random elements" + " ", "percentage", "Use percentage for random elements" }, { ED_RADIOBUTTON_ID_QUANTITY, @@ -3315,7 +3345,7 @@ static struct GADGET_ID_RANDOM_QUANTITY, GADGET_ID_RANDOM_PERCENTAGE, RADIO_NR_RANDOM_ELEMENTS, &random_placement_method, RANDOM_USE_QUANTITY, - " ", "quantity", "use quantity for random elements" + " ", "quantity", "Use quantity for random elements" } }; @@ -3337,7 +3367,7 @@ static struct GADGET_ID_AUTO_COUNT_GEMS, GADGET_ID_NONE, &level.auto_count_gems, NULL, NULL, - "automatically count gems needed", "set counter to number of gems" + "Automatically count gems needed", "Set counter to number of gems" }, { ED_CHECKBUTTON_ID_RATE_TIME_OVER_SCORE, @@ -3345,7 +3375,7 @@ static struct GADGET_ID_RATE_TIME_OVER_SCORE, GADGET_ID_NONE, &level.rate_time_over_score, NULL, NULL, - "rate time/steps used over score", "sort high scores by playing time/steps" + "Rate time/steps used over score", "Sort high scores by playing time/steps" }, { ED_CHECKBUTTON_ID_USE_LEVELSET_ARTWORK, @@ -3353,7 +3383,7 @@ static struct GADGET_ID_USE_LEVELSET_ARTWORK, GADGET_ID_NONE, &levelset_use_levelset_artwork, NULL, NULL, - "use current custom artwork", "use custom artwork of this level set" + "Use current custom artwork", "Use custom artwork of this level set" }, { ED_CHECKBUTTON_ID_COPY_LEVEL_TEMPLATE, @@ -3361,7 +3391,7 @@ static struct GADGET_ID_COPY_LEVEL_TEMPLATE, GADGET_ID_NONE, &levelset_copy_level_template, NULL, NULL, - "copy current level template", "copy level template of this level set" + "Copy current level template", "Copy level template of this level set" }, { ED_CHECKBUTTON_ID_RANDOM_RESTRICTED, @@ -3369,7 +3399,7 @@ static struct GADGET_ID_RANDOM_RESTRICTED, GADGET_ID_NONE, &random_placement_background_restricted, NULL, NULL, - "restrict random placement to:", "set random placement restriction" + "Restrict random placement to:", "Set random placement restriction" }, { ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE_3, @@ -3377,7 +3407,7 @@ static struct GADGET_ID_CUSTOM_USE_TEMPLATE_3, GADGET_ID_NONE, &setup.editor.use_template_for_new_levels, "Template for new levels and CE/GE:", NULL, - "use template for new levels", "use template for level properties" + "Use template for new levels", "Use template for level properties" }, { ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE_2, @@ -3385,7 +3415,7 @@ static struct GADGET_ID_CUSTOM_USE_TEMPLATE_2, GADGET_ID_NONE, &level.use_custom_template, NULL, NULL, - "use template for custom elements", "use template for custom properties" + "Use template for custom elements", "Use template for custom properties" }, { ED_CHECKBUTTON_ID_BD_INTERMISSION, @@ -3393,7 +3423,7 @@ static struct GADGET_ID_BD_INTERMISSION, GADGET_ID_NONE, &level.bd_intermission, "Boulder Dash game engine settings:", NULL, - "intermission", "level is an intermission level" + "Intermission", "Level is an intermission level" }, { ED_CHECKBUTTON_ID_BD_PAL_TIMING, @@ -3401,7 +3431,7 @@ static struct GADGET_ID_BD_PAL_TIMING, GADGET_ID_NONE, &level.bd_pal_timing, NULL, NULL, - "PAL timing", "use slower timer (like PAL C64)" + "PAL timing", "Use slower timer (like PAL C64)" }, { ED_CHECKBUTTON_ID_BD_LINE_SHIFTING_BORDERS, @@ -3409,7 +3439,7 @@ static struct GADGET_ID_BD_LINE_SHIFTING_BORDERS, GADGET_ID_NONE, &level.bd_line_shifting_borders, "Compatibility settings:", NULL, - "line-shifting borders", "use line-shifting wrap-around" + "Line-shifting borders", "Use line-shifting wrap-around" }, { ED_CHECKBUTTON_ID_BD_SCAN_FIRST_AND_LAST_ROW, @@ -3417,7 +3447,7 @@ static struct 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" + "Scan first and last row", "Also process top/bottom border rows" }, { ED_CHECKBUTTON_ID_BD_SHORT_EXPLOSIONS, @@ -3425,7 +3455,7 @@ static struct GADGET_ID_BD_SHORT_EXPLOSIONS, GADGET_ID_NONE, &level.bd_short_explosions, NULL, NULL, - "short explosions", "use four game cycles for explosions" + "Short explosions", "Use four game cycles for explosions" }, { ED_CHECKBUTTON_ID_BD_GRAVITY_AFFECTS_ALL, @@ -3433,7 +3463,7 @@ static struct 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" + "Gravity change affects everything", "Gravity affects all falling objects" }, // ---------- element settings: configure (various elements) ---------------- @@ -3444,7 +3474,7 @@ static struct GADGET_ID_STICK_ELEMENT, GADGET_ID_NONE, &stick_element_properties_window, NULL, NULL, - "stick this screen to edit content","stick this screen to edit content" + "Stick this screen to edit content","Stick this screen to edit content" }, { ED_CHECKBUTTON_ID_EM_SLIPPERY_GEMS, @@ -3452,7 +3482,7 @@ static struct GADGET_ID_EM_SLIPPERY_GEMS, GADGET_ID_NONE, &level.em_slippery_gems, NULL, NULL, - "slip down from certain flat walls","use EM/DC style slipping behaviour" + "Slip down from certain flat walls","Use EM/DC style slipping behaviour" }, { ED_CHECKBUTTON_ID_EM_EXPLODES_BY_FIRE, @@ -3460,7 +3490,7 @@ static struct GADGET_ID_EM_EXPLODES_BY_FIRE, GADGET_ID_NONE, &level.em_explodes_by_fire, NULL, NULL, - "explodes with chain reaction", "use R'n'D style explosion behaviour" + "Explodes with chain reaction", "Use R'n'D style explosion behaviour" }, { ED_CHECKBUTTON_ID_USE_SPRING_BUG, @@ -3468,7 +3498,7 @@ static struct GADGET_ID_USE_SPRING_BUG, GADGET_ID_NONE, &level.use_spring_bug, NULL, NULL, - "use spring pushing bug", "use odd spring pushing behaviour" + "Use spring pushing bug", "Use odd spring pushing behaviour" }, { ED_CHECKBUTTON_ID_USE_TIME_ORB_BUG, @@ -3476,7 +3506,7 @@ static struct GADGET_ID_USE_TIME_ORB_BUG, GADGET_ID_NONE, &level.use_time_orb_bug, NULL, NULL, - "use time orb bug", "use odd time orb behaviour" + "Use time orb bug", "Use odd time orb behaviour" }, { ED_CHECKBUTTON_ID_USE_LIFE_BUGS, @@ -3484,7 +3514,7 @@ static struct GADGET_ID_USE_LIFE_BUGS, GADGET_ID_NONE, &level.use_life_bugs, NULL, NULL, - "use buggy element behaviour", "use odd (historic) element behaviour" + "Use buggy element behaviour", "Use odd (historic) element behaviour" }, { ED_CHECKBUTTON_ID_RANDOM_BALL_CONTENT, @@ -3492,7 +3522,7 @@ static struct GADGET_ID_RANDOM_BALL_CONTENT, GADGET_ID_NONE, &level.ball_random, NULL, NULL, - "create single random element", "only create one element from content" + "Create single random element", "Only create one element from content" }, { ED_CHECKBUTTON_ID_INITIAL_BALL_ACTIVE, @@ -3500,7 +3530,7 @@ static struct GADGET_ID_INITIAL_BALL_ACTIVE, GADGET_ID_NONE, &level.ball_active_initial, NULL, NULL, - "magic ball initially activated", "activate magic ball after level start" + "Magic ball initially activated", "Activate magic ball after level start" }, { ED_CHECKBUTTON_ID_GROW_INTO_DIGGABLE, @@ -3508,7 +3538,7 @@ static struct GADGET_ID_GROW_INTO_DIGGABLE, GADGET_ID_NONE, &level.grow_into_diggable, NULL, NULL, - "can grow into anything diggable", "grow into more than just sand" + "Can grow into anything diggable", "Grow into more than just sand" }, { ED_CHECKBUTTON_ID_SB_FIELDS_NEEDED, @@ -3516,7 +3546,7 @@ static struct GADGET_ID_SB_FIELDS_NEEDED, GADGET_ID_NONE, &level.sb_fields_needed, NULL, NULL, - "all fields need to be filled", "require all SB fields to be solved" + "All fields need to be filled", "Require all SB fields to be solved" }, { ED_CHECKBUTTON_ID_SB_OBJECTS_NEEDED, @@ -3524,7 +3554,7 @@ static struct GADGET_ID_SB_OBJECTS_NEEDED, GADGET_ID_NONE, &level.sb_objects_needed, NULL, NULL, - "all objects need to be placed", "require all SB objects to be solved" + "All objects need to be placed", "Require all SB objects to be solved" }, { ED_CHECKBUTTON_ID_AUTO_EXIT_SOKOBAN, @@ -3532,7 +3562,7 @@ static struct GADGET_ID_AUTO_EXIT_SOKOBAN, GADGET_ID_NONE, &level.auto_exit_sokoban, NULL, NULL, - "exit level if all tasks solved", "automatically finish Sokoban levels" + "Exit level if all tasks solved", "Automatically finish Sokoban levels" }, { ED_CHECKBUTTON_ID_SOLVED_BY_ONE_PLAYER, @@ -3540,7 +3570,7 @@ static struct GADGET_ID_SOLVED_BY_ONE_PLAYER, GADGET_ID_NONE, &level.solved_by_one_player, NULL, NULL, - "only one player must enter exit", "level solved by first player in exit" + "Only one player must enter exit", "Level solved by first player in exit" }, { ED_CHECKBUTTON_ID_FINISH_DIG_COLLECT, @@ -3548,7 +3578,7 @@ static struct GADGET_ID_FINISH_DIG_COLLECT, GADGET_ID_NONE, &level.finish_dig_collect, NULL, NULL, - "CE action on finished dig/collect", "only finished dig/collect triggers CE" + "CE action on finished dig/collect", "Only finished dig/collect triggers CE" }, { ED_CHECKBUTTON_ID_KEEP_WALKABLE_CE, @@ -3556,7 +3586,7 @@ static struct GADGET_ID_KEEP_WALKABLE_CE, GADGET_ID_NONE, &level.keep_walkable_ce, NULL, NULL, - "keep walkable CE changed to player", "keep CE changing to player if walkable" + "Keep walkable CE changed to player", "Keep CE changing to player if walkable" }, { ED_CHECKBUTTON_ID_CONTINUOUS_SNAPPING, @@ -3564,7 +3594,7 @@ static struct GADGET_ID_CONTINUOUS_SNAPPING, GADGET_ID_NONE, &level.continuous_snapping, NULL, NULL, - "continuous snapping", "use snapping without releasing key" + "Continuous snapping", "Use snapping without releasing key" }, { ED_CHECKBUTTON_ID_BLOCK_SNAP_FIELD, @@ -3572,7 +3602,7 @@ static struct GADGET_ID_BLOCK_SNAP_FIELD, GADGET_ID_NONE, &level.block_snap_field, NULL, NULL, - "block snapped field when snapping", "use snapping delay to show animation" + "Block snapped field when snapping", "Use snapping delay to show animation" }, { ED_CHECKBUTTON_ID_BLOCK_LAST_FIELD, @@ -3580,7 +3610,7 @@ static struct GADGET_ID_BLOCK_LAST_FIELD, GADGET_ID_NONE, &level.block_last_field, NULL, NULL, - "block last field when moving", "player blocks last field when moving" + "Block last field when moving", "Player blocks last field when moving" }, { ED_CHECKBUTTON_ID_SP_BLOCK_LAST_FIELD, @@ -3588,7 +3618,7 @@ static struct GADGET_ID_SP_BLOCK_LAST_FIELD, GADGET_ID_NONE, &level.sp_block_last_field, NULL, NULL, - "block last field when moving", "player blocks last field when moving" + "Block last field when moving", "Player blocks last field when moving" }, { ED_CHECKBUTTON_ID_INSTANT_RELOCATION, @@ -3596,7 +3626,7 @@ static struct GADGET_ID_INSTANT_RELOCATION, GADGET_ID_NONE, &level.instant_relocation, NULL, NULL, - "no scrolling when relocating", "player gets relocated without delay" + "No scrolling when relocating", "Player gets relocated without delay" }, { ED_CHECKBUTTON_ID_SHIFTED_RELOCATION, @@ -3604,7 +3634,7 @@ static struct GADGET_ID_SHIFTED_RELOCATION, GADGET_ID_NONE, &level.shifted_relocation, NULL, NULL, - "no centering when relocating", "level not centered after relocation" + "No centering when relocating", "Level not centered after relocation" }, { ED_CHECKBUTTON_ID_LAZY_RELOCATION, @@ -3612,7 +3642,7 @@ static struct GADGET_ID_LAZY_RELOCATION, GADGET_ID_NONE, &level.lazy_relocation, NULL, NULL, - "only redraw off-screen relocation","no redraw if relocation target visible" + "Only redraw off-screen relocation","No redraw if relocation target visible" }, { ED_CHECKBUTTON_ID_USE_START_ELEMENT, @@ -3620,7 +3650,7 @@ static struct GADGET_ID_USE_START_ELEMENT, GADGET_ID_NONE, &level.use_start_element[0], NULL, NULL, - "use level start element:", "start level at this element's position" + "Use level start element:", "Start level at this element's position" }, { ED_CHECKBUTTON_ID_USE_ARTWORK_ELEMENT, @@ -3628,7 +3658,7 @@ static struct GADGET_ID_USE_ARTWORK_ELEMENT, GADGET_ID_NONE, &level.use_artwork_element[0], NULL, NULL, - "use artwork from element:", "use player artwork from other element" + "Use artwork from element:", "Use player artwork from other element" }, { ED_CHECKBUTTON_ID_USE_EXPLOSION_ELEMENT, @@ -3636,7 +3666,7 @@ static struct GADGET_ID_USE_EXPLOSION_ELEMENT, GADGET_ID_NONE, &level.use_explosion_element[0], NULL, NULL, - "use explosion from element:", "use explosion properties from element" + "Use explosion from element:", "Use explosion properties from element" }, { ED_CHECKBUTTON_ID_INITIAL_GRAVITY, @@ -3644,7 +3674,7 @@ static struct GADGET_ID_INITIAL_GRAVITY, GADGET_ID_NONE, &level.initial_player_gravity[0], NULL, NULL, - "use initial gravity", "set initial player gravity" + "Use initial gravity", "Set initial player gravity" }, { ED_CHECKBUTTON_ID_USE_INITIAL_INVENTORY, @@ -3652,7 +3682,7 @@ static struct GADGET_ID_USE_INITIAL_INVENTORY, GADGET_ID_NONE, &level.use_initial_inventory[0], NULL, NULL, - "use initial inventory:", "use collected elements on level start" + "Use initial inventory:", "Use collected elements on level start" }, { ED_CHECKBUTTON_ID_CAN_PASS_TO_WALKABLE, @@ -3660,7 +3690,7 @@ static struct GADGET_ID_CAN_PASS_TO_WALKABLE, GADGET_ID_NONE, &level.can_pass_to_walkable, NULL, NULL, - "can pass to walkable element", "player can pass to empty or walkable" + "Can pass to walkable element", "Player can pass to empty or walkable" }, { ED_CHECKBUTTON_ID_CAN_FALL_INTO_ACID, @@ -3668,7 +3698,7 @@ static struct GADGET_ID_CAN_FALL_INTO_ACID, GADGET_ID_NONE, &custom_element_properties[EP_CAN_MOVE_INTO_ACID], NULL, NULL, - "can fall into acid (with gravity)","player can fall into acid pool" + "Can fall into acid (with gravity)","Player can fall into acid pool" }, { ED_CHECKBUTTON_ID_CAN_MOVE_INTO_ACID, @@ -3676,7 +3706,7 @@ static struct GADGET_ID_CAN_MOVE_INTO_ACID, GADGET_ID_NONE, &custom_element_properties[EP_CAN_MOVE_INTO_ACID], NULL, NULL, - "can move into acid", "element can move into acid pool" + "Can move into acid", "Element can move into acid pool" }, { ED_CHECKBUTTON_ID_DONT_COLLIDE_WITH, @@ -3684,7 +3714,7 @@ static struct GADGET_ID_DONT_COLLIDE_WITH, GADGET_ID_NONE, &custom_element_properties[EP_DONT_COLLIDE_WITH], NULL, NULL, - "deadly when colliding with", "element is deadly when hitting player" + "Deadly when colliding with", "Element is deadly when hitting player" }, { ED_CHECKBUTTON_ID_BD_DIAGONAL_MOVEMENTS, @@ -3692,7 +3722,7 @@ static struct GADGET_ID_BD_DIAGONAL_MOVEMENTS, GADGET_ID_NONE, &level.bd_diagonal_movements, NULL, NULL, - "can move diagonally", "player can move diagonally" + "Can move diagonally", "Player can move diagonally" }, { ED_CHECKBUTTON_ID_BD_TOPMOST_PLAYER_ACTIVE, @@ -3700,7 +3730,7 @@ static struct 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" + "Topmost player is active", "Use first player found on playfield" }, { ED_CHECKBUTTON_ID_BD_PUSH_MEGA_ROCK_WITH_SWEET, @@ -3708,7 +3738,7 @@ static struct 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" + "Mega rocks pushable with sweet", "Push mega rocks after eating sweet" }, { ED_CHECKBUTTON_ID_BD_MAGIC_WALL_WAIT_HATCHING, @@ -3716,7 +3746,7 @@ static struct 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" + "Wait for player's birth", "Timer start waits for player's birth" }, { ED_CHECKBUTTON_ID_BD_MAGIC_WALL_STOPS_AMOEBA, @@ -3724,7 +3754,7 @@ static struct 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" + "Turn amoeba to diamonds", "Activation changes amoeba to diamonds" }, { ED_CHECKBUTTON_ID_BD_AMOEBA_WAIT_FOR_HATCHING, @@ -3732,7 +3762,7 @@ static struct 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" + "Wait for player's birth", "Timer start waits for player's birth" }, { ED_CHECKBUTTON_ID_BD_AMOEBA_START_IMMEDIATELY, @@ -3740,7 +3770,7 @@ static struct GADGET_ID_BD_AMOEBA_START_IMMEDIATELY, GADGET_ID_NONE, &level.bd_amoeba_start_immediately, NULL, NULL, - "start growing immediately", "start slow growth time immediately" + "Start growing immediately", "Start slow growth time immediately" }, { ED_CHECKBUTTON_ID_BD_AMOEBA_2_EXPLODE_BY_AMOEBA, @@ -3748,7 +3778,87 @@ static struct 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" + "Explodes if touched by amoeba", "Amoeba 2 explodes if touched by amoeba" + }, + { + ED_CHECKBUTTON_ID_BD_VOODOO_COLLECTS_DIAMONDS, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(0), + GADGET_ID_BD_VOODOO_COLLECTS_DIAMONDS, GADGET_ID_NONE, + &level.bd_voodoo_collects_diamonds, + NULL, NULL, + "Can collect diamonds", "Can collect diamonds for the player" + }, + { + ED_CHECKBUTTON_ID_BD_VOODOO_HURT_KILLS_PLAYER, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1), + GADGET_ID_BD_VOODOO_HURT_KILLS_PLAYER, GADGET_ID_NONE, + &level.bd_voodoo_hurt_kills_player, + NULL, NULL, + "Player is killed if hurt", "If hurt in any way, player is killed" + }, + { + ED_CHECKBUTTON_ID_BD_VOODOO_DIES_BY_ROCK, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(2), + GADGET_ID_BD_VOODOO_DIES_BY_ROCK, GADGET_ID_NONE, + &level.bd_voodoo_dies_by_rock, + NULL, NULL, + "Killed by falling rock", "Can be killed by a falling rock" + }, + { + ED_CHECKBUTTON_ID_BD_VOODOO_VANISH_BY_EXPLOSION, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(3), + GADGET_ID_BD_VOODOO_VANISH_BY_EXPLOSION, GADGET_ID_NONE, + &level.bd_voodoo_vanish_by_explosion, + 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_BD_CHANGE_EXPANDING_WALL, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(0), + GADGET_ID_BD_CHANGE_EXPANDING_WALL, GADGET_ID_NONE, + &level.bd_change_expanding_wall, + NULL, NULL, + "Change direction", "Switch horizontal/vertical direction" + }, + { + ED_CHECKBUTTON_ID_BD_REPLICATORS_ACTIVE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(0), + GADGET_ID_BD_REPLICATORS_ACTIVE, GADGET_ID_NONE, + &level.bd_replicators_active, + NULL, NULL, + "Active at start", "Replicators start in active state" + }, + { + ED_CHECKBUTTON_ID_BD_CONVEYOR_BELTS_ACTIVE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(0), + GADGET_ID_BD_CONVEYOR_BELTS_ACTIVE, GADGET_ID_NONE, + &level.bd_conveyor_belts_active, + NULL, NULL, + "Active at start", "Conveyor belts start in active state" + }, + { + ED_CHECKBUTTON_ID_BD_CONVEYOR_BELTS_CHANGED, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1), + GADGET_ID_BD_CONVEYOR_BELTS_CHANGED, GADGET_ID_NONE, + &level.bd_conveyor_belts_changed, + NULL, NULL, + "Change direction", "Switch conveyor belt direction" + }, + { + ED_CHECKBUTTON_ID_BD_WATER_CANNOT_FLOW_DOWN, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(0), + GADGET_ID_BD_WATER_CANNOT_FLOW_DOWN, GADGET_ID_NONE, + &level.bd_water_cannot_flow_down, + NULL, NULL, + "Does not flow downwards", "Water can only flow up, left and right" }, { ED_CHECKBUTTON_ID_ENVELOPE_AUTOWRAP, @@ -3756,7 +3866,7 @@ static struct GADGET_ID_ENVELOPE_AUTOWRAP, GADGET_ID_NONE, &level.envelope[0].autowrap, NULL, NULL, - "auto-wrap", "automatically wrap envelope text" + "Auto-wrap", "Automatically wrap envelope text" }, { ED_CHECKBUTTON_ID_ENVELOPE_CENTERED, @@ -3764,15 +3874,15 @@ static struct GADGET_ID_ENVELOPE_CENTERED, GADGET_ID_ENVELOPE_AUTOWRAP, &level.envelope[0].centered, NULL, " ", - "centered", "automatically center envelope text" + "Centered", "Automatically center envelope text" }, { ED_CHECKBUTTON_ID_MM_LASER_RED, ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1), GADGET_ID_MM_LASER_RED, GADGET_ID_NONE, &level.mm_laser_red, - "choose color components for laser:", NULL, - "red", "use red color components in laser" + "Choose color components for laser:", NULL, + "Red", "Use red color components in laser" }, { ED_CHECKBUTTON_ID_MM_LASER_GREEN, @@ -3780,7 +3890,7 @@ static struct GADGET_ID_MM_LASER_GREEN, GADGET_ID_NONE, &level.mm_laser_green, NULL, NULL, - "green", "use green color components in laser" + "Green", "Use green color components in laser" }, { ED_CHECKBUTTON_ID_MM_LASER_BLUE, @@ -3788,15 +3898,15 @@ static struct GADGET_ID_MM_LASER_BLUE, GADGET_ID_NONE, &level.mm_laser_blue, NULL, NULL, - "blue", "use blue color components in laser" + "Blue", "Use blue color components in laser" }, { ED_CHECKBUTTON_ID_DF_LASER_RED, ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1), GADGET_ID_DF_LASER_RED, GADGET_ID_NONE, &level.df_laser_red, - "choose color components for laser:", NULL, - "red", "use red color components in laser" + "Choose color components for laser:", NULL, + "Red", "Use red color components in laser" }, { ED_CHECKBUTTON_ID_DF_LASER_GREEN, @@ -3804,7 +3914,7 @@ static struct GADGET_ID_DF_LASER_GREEN, GADGET_ID_NONE, &level.df_laser_green, NULL, NULL, - "green", "use green color components in laser" + "Green", "Use green color components in laser" }, { ED_CHECKBUTTON_ID_DF_LASER_BLUE, @@ -3812,7 +3922,7 @@ static struct GADGET_ID_DF_LASER_BLUE, GADGET_ID_NONE, &level.df_laser_blue, NULL, NULL, - "blue", "use blue color components in laser" + "Blue", "Use blue color components in laser" }, { ED_CHECKBUTTON_ID_ROTATE_MM_BALL_CONTENT, @@ -3820,7 +3930,7 @@ static struct GADGET_ID_ROTATE_MM_BALL_CONTENT, GADGET_ID_NONE, &level.rotate_mm_ball_content, NULL, NULL, - "randomly rotate created content", "randomly rotate newly created content" + "Randomly rotate created content", "Randomly rotate newly created content" }, { ED_CHECKBUTTON_ID_EXPLODE_MM_BALL, @@ -3828,7 +3938,7 @@ static struct GADGET_ID_EXPLODE_MM_BALL, GADGET_ID_NONE, &level.explode_mm_ball, NULL, NULL, - "explode ball instead of melting", "use explosion to release ball content" + "Explode ball instead of melting", "Use explosion to release ball content" }, // ---------- element settings: configure 1 (custom elements) --------------- @@ -3839,7 +3949,7 @@ static struct GADGET_ID_CUSTOM_USE_GRAPHIC, GADGET_ID_NONE, &custom_element.use_gfx_element, NULL, NULL, - "use graphic of element:", "use existing element graphic" + "Use graphic of element:", "Use existing element graphic" }, { ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE_1, @@ -3847,7 +3957,7 @@ static struct GADGET_ID_CUSTOM_USE_TEMPLATE_1, GADGET_ID_NONE, &level.use_custom_template, NULL, NULL, - "use template", "use template for custom properties" + "Use template", "Use template for custom properties" }, { ED_CHECKBUTTON_ID_CUSTOM_ACCESSIBLE, @@ -3855,7 +3965,7 @@ static struct GADGET_ID_CUSTOM_ACCESSIBLE, GADGET_ID_NONE, &custom_element_properties[EP_ACCESSIBLE], NULL, NULL, - NULL, "player can walk to or pass this field" + NULL, "Player can walk to or pass this field" }, { ED_CHECKBUTTON_ID_CUSTOM_GRAV_REACHABLE, @@ -3863,7 +3973,7 @@ static struct GADGET_ID_CUSTOM_GRAV_REACHABLE, GADGET_ID_NONE, &custom_element_properties[EP_GRAVITY_REACHABLE], NULL, NULL, - "reachable despite gravity", "player can walk/dig despite gravity" + "Reachable despite gravity", "Player can walk/dig despite gravity" }, { ED_CHECKBUTTON_ID_CUSTOM_USE_LAST_VALUE, @@ -3871,7 +3981,7 @@ static struct GADGET_ID_CUSTOM_USE_LAST_VALUE, GADGET_ID_NONE, &custom_element.use_last_ce_value, NULL, NULL, - "use last CE value after change", "use last CE value after change" + "Use last CE value after change", "Use last CE value after change" }, { ED_CHECKBUTTON_ID_CUSTOM_WALK_TO_OBJECT, @@ -3879,7 +3989,7 @@ static struct GADGET_ID_CUSTOM_WALK_TO_OBJECT, GADGET_ID_NONE, &custom_element_properties[EP_WALK_TO_OBJECT], NULL, NULL, - NULL, "player can dig/collect/push element" + NULL, "Player can dig/collect/push element" }, { ED_CHECKBUTTON_ID_CUSTOM_INDESTRUCTIBLE, @@ -3887,7 +3997,7 @@ static struct GADGET_ID_CUSTOM_INDESTRUCTIBLE, GADGET_ID_NONE, &custom_element_properties[EP_INDESTRUCTIBLE], NULL, NULL, - "indestructible", "element is indestructible" + "Indestructible", "Element is indestructible" }, // ---------- element settings: configure 2 (custom elements) --------------- @@ -3898,7 +4008,7 @@ static struct GADGET_ID_CUSTOM_CAN_MOVE, GADGET_ID_NONE, &custom_element_properties[EP_CAN_MOVE], NULL, NULL, - NULL, "element can move with some pattern" + NULL, "Element can move with some pattern" }, { ED_CHECKBUTTON_ID_CUSTOM_CAN_FALL, @@ -3906,7 +4016,7 @@ static struct GADGET_ID_CUSTOM_CAN_FALL, GADGET_ID_NONE, &custom_element_properties[EP_CAN_FALL], NULL, NULL, - "can fall", "element can fall down" + "Can fall", "Element can fall down" }, { ED_CHECKBUTTON_ID_CUSTOM_CAN_SMASH, @@ -3914,7 +4024,7 @@ static struct GADGET_ID_CUSTOM_CAN_SMASH, GADGET_ID_CUSTOM_CAN_FALL, &custom_element_properties[EP_CAN_SMASH], NULL, " ", - NULL, "element can smash other elements" + NULL, "Element can smash other elements" }, { ED_CHECKBUTTON_ID_CUSTOM_SLIPPERY, @@ -3922,7 +4032,7 @@ static struct GADGET_ID_CUSTOM_SLIPPERY, GADGET_ID_NONE, &custom_element_properties[EP_SLIPPERY], NULL, NULL, - NULL, "other elements can fall down from it" + NULL, "Other elements can fall down from it" }, { ED_CHECKBUTTON_ID_CUSTOM_DEADLY, @@ -3930,7 +4040,7 @@ static struct GADGET_ID_CUSTOM_DEADLY, GADGET_ID_NONE, &custom_element_properties[EP_DEADLY], NULL, NULL, - NULL, "element can kill the player" + NULL, "Element can kill the player" }, { ED_CHECKBUTTON_ID_CUSTOM_CAN_EXPLODE, @@ -3938,7 +4048,7 @@ static struct GADGET_ID_CUSTOM_CAN_EXPLODE, GADGET_ID_NONE, &custom_element_properties[EP_CAN_EXPLODE], NULL, NULL, - NULL, "element can explode" + NULL, "Element can explode" }, { ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_FIRE, @@ -3946,7 +4056,7 @@ static struct GADGET_ID_CUSTOM_EXPLODE_FIRE, GADGET_ID_NONE, &custom_element_properties[EP_EXPLODES_BY_FIRE], NULL, NULL, - "by fire", "element can explode by fire/explosion" + "By fire", "Element can explode by fire/explosion" }, { ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_SMASH, @@ -3954,7 +4064,7 @@ static struct GADGET_ID_CUSTOM_EXPLODE_SMASH, GADGET_ID_CUSTOM_EXPLODE_FIRE, &custom_element_properties[EP_EXPLODES_SMASHED], NULL, " ", - "smashed", "element can explode when smashed" + "Smashed", "Element can explode when smashed" }, { ED_CHECKBUTTON_ID_CUSTOM_EXPLODE_IMPACT, @@ -3962,7 +4072,7 @@ static struct GADGET_ID_CUSTOM_EXPLODE_IMPACT, GADGET_ID_CUSTOM_EXPLODE_SMASH, &custom_element_properties[EP_EXPLODES_IMPACT], NULL, " ", - "impact", "element can explode on impact" + "Impact", "Element can explode on impact" }, // ---------- element settings: advanced (custom elements) ------------------ @@ -3973,7 +4083,7 @@ static struct GADGET_ID_CUSTOM_CAN_CHANGE, GADGET_ID_NONE, &custom_element_change.can_change, NULL, NULL, - "element changes to:", "change element on specified condition" + "Element changes to:", "Change element on specified condition" }, { ED_CHECKBUTTON_ID_CHANGE_DELAY, @@ -3981,7 +4091,7 @@ static struct GADGET_ID_CHANGE_DELAY, GADGET_ID_NONE, &custom_element_change_events[CE_DELAY], NULL, NULL, - NULL, "element changes after delay" + NULL, "Element changes after delay" }, { ED_CHECKBUTTON_ID_CHANGE_BY_DIRECT_ACT, @@ -3989,7 +4099,7 @@ static struct GADGET_ID_CHANGE_BY_DIRECT_ACT, GADGET_ID_NONE, &custom_element_change_events[CE_BY_DIRECT_ACTION], NULL, NULL, - NULL, "element changes by direct action" + NULL, "Element changes by direct action" }, { ED_CHECKBUTTON_ID_CHANGE_BY_OTHER_ACT, @@ -3997,7 +4107,7 @@ static struct GADGET_ID_CHANGE_BY_OTHER_ACT, GADGET_ID_NONE, &custom_element_change_events[CE_BY_OTHER_ACTION], NULL, NULL, - NULL, "element changes by other element" + NULL, "Element changes by other element" }, { ED_CHECKBUTTON_ID_CHANGE_USE_EXPLOSION, @@ -4005,7 +4115,7 @@ static struct GADGET_ID_CHANGE_USE_EXPLOSION, GADGET_ID_NONE, &custom_element_change.explode, NULL, NULL, - "explode instead of change", "element explodes instead of change" + "Explode instead of change", "Element explodes instead of change" }, { ED_CHECKBUTTON_ID_CHANGE_USE_CONTENT, @@ -4013,7 +4123,7 @@ static struct GADGET_ID_CHANGE_USE_CONTENT, GADGET_ID_NONE, &custom_element_change.use_target_content, NULL, NULL, - "use extended change target:", "element changes to more elements" + "Use extended change target:", "Element changes to more elements" }, { ED_CHECKBUTTON_ID_CHANGE_ONLY_COMPLETE, @@ -4021,7 +4131,7 @@ static struct GADGET_ID_CHANGE_ONLY_COMPLETE, GADGET_ID_NONE, &custom_element_change.only_if_complete, NULL, NULL, - "replace all or nothing", "only replace when all can be changed" + "Replace all or nothing", "Only replace when all can be changed" }, { ED_CHECKBUTTON_ID_CHANGE_USE_RANDOM, @@ -4029,7 +4139,7 @@ static struct GADGET_ID_CHANGE_USE_RANDOM, GADGET_ID_NONE, &custom_element_change.use_random_replace, NULL, NULL, - NULL, "use percentage for random replace" + NULL, "Use percentage for random replace" }, { ED_CHECKBUTTON_ID_CHANGE_HAS_ACTION, @@ -4037,7 +4147,7 @@ static struct GADGET_ID_CHANGE_HAS_ACTION, GADGET_ID_NONE, &custom_element_change.has_action, NULL, NULL, - NULL, "execute action on specified condition" + NULL, "Execute action on specified condition" }, }; @@ -4207,7 +4317,7 @@ static struct ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF, GADGET_ID_ANDROID_CONTENT, GADGET_ID_NONE, &level.android_clone_element[0], MAX_ANDROID_ELEMENTS, 1, - NULL, NULL, "elements:", NULL, "elements android can clone" + NULL, NULL, "Elements:", NULL, "Elements android can clone" }, // ---------- amoeba content ------------------------------------------------ @@ -4218,10 +4328,21 @@ static struct ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF, GADGET_ID_AMOEBA_CONTENT, GADGET_ID_NONE, &level.amoeba_content, 1, 1, - "content:", NULL, NULL, NULL, "amoeba content" + "Content:", NULL, NULL, NULL, "Amoeba content" + }, + + // ---------- BD snap element ----------------------------------------------- + + { + ED_DRAWING_ID_BD_SNAP_ELEMENT, + ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(5), + ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF, + GADGET_ID_BD_SNAP_ELEMENT, GADGET_ID_NONE, + &level.bd_snap_element, 1, 1, + "Snap element:", NULL, NULL, NULL, "Element created when snapping" }, - // ---------- BD amoeba content ------------------------------------------------ + // ---------- BD amoeba content --------------------------------------------- { ED_DRAWING_ID_BD_AMOEBA_CONTENT_TOO_BIG, @@ -4229,7 +4350,7 @@ static struct 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" + "If too big, changes to:", NULL, NULL, NULL, "BD amoeba content if too big" }, { ED_DRAWING_ID_BD_AMOEBA_CONTENT_ENCLOSED, @@ -4237,10 +4358,10 @@ static struct 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" + "If enclosed, changes to:", NULL, NULL, NULL, "BD amoeba content if enclosed" }, - // ---------- BD amoeba 2 content ------------------------------------------------ + // ---------- BD amoeba 2 content ------------------------------------------- { ED_DRAWING_ID_BD_AMOEBA_2_CONTENT_TOO_BIG, @@ -4248,7 +4369,7 @@ static struct 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" + "If too big, changes to:", NULL, NULL, NULL, "BD amoeba 2 content if too big" }, { ED_DRAWING_ID_BD_AMOEBA_2_CONTENT_ENCLOSED, @@ -4256,7 +4377,7 @@ static struct 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" + "If enclosed, changes to:", NULL, NULL, NULL, "BD amoeba 2 content if enclosed" }, { ED_DRAWING_ID_BD_AMOEBA_2_CONTENT_EXPLODING, @@ -4264,7 +4385,7 @@ static struct 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" + "If exploding, changes to:", NULL, NULL, NULL, "BD amoeba 2 content if exploding" }, { ED_DRAWING_ID_BD_AMOEBA_2_CONTENT_LOOKS_LIKE, @@ -4272,7 +4393,39 @@ static struct 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" + "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" + }, + { + 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" + }, + { + ED_DRAWING_ID_BD_BLADDER_CONVERTS_BY_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_BLADDER_CONVERTS_BY_ELEMENT, GADGET_ID_NONE, + &level.bd_bladder_converts_by_element, 1, 1, + "Turns to clock by touching:", NULL, NULL, NULL, "Turns to clock by touching element" }, // ---------- level start element ------------------------------------------- @@ -4283,7 +4436,7 @@ static struct 0, ED_AREA_1X1_SETTINGS_YOFF, GADGET_ID_START_ELEMENT, GADGET_ID_USE_START_ELEMENT, &level.start_element[0], 1, 1, - NULL, NULL, NULL, NULL, "level start element" + NULL, NULL, NULL, NULL, "Level start element" }, // ---------- player artwork element ---------------------------------------- @@ -4294,7 +4447,7 @@ static struct 0, ED_AREA_1X1_SETTINGS_YOFF, GADGET_ID_ARTWORK_ELEMENT, GADGET_ID_USE_ARTWORK_ELEMENT, &level.artwork_element[0], 1, 1, - NULL, NULL, NULL, NULL, "element for player artwork" + NULL, NULL, NULL, NULL, "Element for player artwork" }, // ---------- player explosion element -------------------------------------- @@ -4305,7 +4458,7 @@ static struct 0, ED_AREA_1X1_SETTINGS_YOFF, GADGET_ID_EXPLOSION_ELEMENT, GADGET_ID_USE_EXPLOSION_ELEMENT, &level.explosion_element[0], 1, 1, - NULL, NULL, NULL, NULL, "element for player explosion" + NULL, NULL, NULL, NULL, "Element for player explosion" }, // ---------- player initial inventory -------------------------------------- @@ -4316,7 +4469,7 @@ static struct 0, ED_AREA_1X1_SETTINGS_YOFF, GADGET_ID_INVENTORY_CONTENT, GADGET_ID_USE_INITIAL_INVENTORY, &level.initial_inventory_content[0][0], MAX_INITIAL_INVENTORY_SIZE, 1, - NULL, NULL, NULL, NULL, "content for initial inventory" + NULL, NULL, NULL, NULL, "Content for initial inventory" }, // ---------- gray ball content ----------------------------------------- @@ -4327,7 +4480,7 @@ static struct ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF, GADGET_ID_MM_BALL_CONTENT, GADGET_ID_NONE, &level.mm_ball_content[0], MAX_MM_BALL_CONTENTS, 1, - "content:", NULL, NULL, NULL, "content for gray ball" + "Content:", NULL, NULL, NULL, "Content for gray ball" }, // ---------- element settings: configure 1 (custom elements) --------------- @@ -4340,7 +4493,7 @@ static struct 0, ED_AREA_1X1_SETTINGS_YOFF, GADGET_ID_CUSTOM_GRAPHIC, GADGET_ID_CUSTOM_USE_GRAPHIC, &custom_element.gfx_element_initial, 1, 1, - NULL, NULL, NULL, NULL, "custom graphic element" + NULL, NULL, NULL, NULL, "Custom graphic element" }, // ---------- element settings: configure 2 (custom elements) --------------- @@ -4353,7 +4506,7 @@ static struct 0, ED_AREA_3X3_SETTINGS_YOFF, GADGET_ID_CUSTOM_CONTENT, GADGET_ID_NONE, // align three rows &custom_element.content.e[0][0], 3, 3, - "content:", NULL, NULL, NULL, NULL + "Content:", NULL, NULL, NULL, NULL }, // ---------- custom enter and leave element (when moving) ------------------ @@ -4364,7 +4517,7 @@ static struct ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF, GADGET_ID_CUSTOM_MOVE_ENTER, GADGET_ID_NONE, &custom_element.move_enter_element, 1, 1, - "can dig:", " ", NULL, NULL, "element that can be digged/collected" + "Can dig:", " ", NULL, NULL, "Element that can be digged/collected" }, { ED_DRAWING_ID_CUSTOM_MOVE_LEAVE, @@ -4372,7 +4525,7 @@ static struct 0, ED_AREA_1X1_SETTINGS_YOFF, GADGET_ID_CUSTOM_MOVE_LEAVE, GADGET_ID_CUSTOM_MOVE_LEAVE_TYPE, &custom_element.move_leave_element, 1, 1, - NULL, NULL, NULL, NULL, "element that will be left behind" + NULL, NULL, NULL, NULL, "Element that will be left behind" }, // ---------- element settings: advanced (custom elements) ------------------ @@ -4385,7 +4538,7 @@ static struct 0, ED_AREA_1X1_SETTINGS_YOFF, GADGET_ID_CUSTOM_CHANGE_TARGET, GADGET_ID_CUSTOM_CAN_CHANGE, &custom_element_change.target_element, 1, 1, - NULL, "after/when:", NULL, NULL, "new target element after change" + NULL, "after/when:", NULL, NULL, "New target element after change" }, // ---------- custom change content (extended change target) ---------------- @@ -4396,7 +4549,7 @@ static struct 0, ED_AREA_3X3_SETTINGS_YOFF, GADGET_ID_CUSTOM_CHANGE_CONTENT, GADGET_ID_NONE, // align three rows &custom_element_change.target_content.e[0][0], 3, 3, - NULL, NULL, NULL, NULL, "new extended elements after change" + NULL, NULL, NULL, NULL, "New extended elements after change" }, // ---------- custom change trigger (element causing change) ---------------- @@ -4407,7 +4560,7 @@ static struct 0, ED_AREA_1X1_SETTINGS_YOFF, GADGET_ID_CUSTOM_CHANGE_TRIGGER, GADGET_ID_CHANGE_OTHER_ACTION, &custom_element_change.initial_trigger_element, 1, 1, - NULL, NULL, NULL, NULL, "other element triggering change" + NULL, NULL, NULL, NULL, "Other element triggering change" }, // ---------- custom change action (element used for action) ---------------- @@ -4418,7 +4571,7 @@ static struct 0, ED_AREA_1X1_SETTINGS_YOFF, GADGET_ID_CUSTOM_CHANGE_ACTION, GADGET_ID_ACTION_ARG, &custom_element_change.action_element, 1, 1, - NULL, NULL, NULL, NULL, "element used as action parameter" + NULL, NULL, NULL, NULL, "Element used as action parameter" }, // ---------- group element content ----------------------------------------- @@ -4429,7 +4582,7 @@ static struct ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF, GADGET_ID_GROUP_CONTENT, GADGET_ID_NONE, &group_element_info.element[0], MAX_ELEMENTS_IN_GROUP, 1, - "content:", NULL, NULL, NULL, NULL + "Content:", NULL, NULL, NULL, NULL }, // ---------- random background (for random painting) ----------------------- @@ -4440,7 +4593,7 @@ static struct 0, ED_AREA_1X1_LSETTINGS_YOFF, GADGET_ID_RANDOM_BACKGROUND, GADGET_ID_RANDOM_RESTRICTED, &random_placement_background_element, 1, 1, - NULL, NULL, NULL, NULL, "random placement background" + NULL, NULL, NULL, NULL, "Random placement background" }, }; @@ -4613,7 +4766,7 @@ static int editor_el_boulderdash_native[] = EL_BD_STEELWALL, EL_BD_WALL, - EL_EMPTY, + EL_BD_SAND_2, EL_BD_MAGIC_WALL, EL_BD_AMOEBA, @@ -4634,34 +4787,34 @@ static int editor_el_boulderdash_native[] = 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, @@ -4671,15 +4824,15 @@ static int editor_el_boulderdash_native[] = 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, @@ -4691,100 +4844,75 @@ static int editor_el_boulderdash_native[] = 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_CONVEYOR_DIR_SWITCH_NORMAL, - 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, @@ -4796,6 +4924,141 @@ static int *editor_el_boulderdash_native_ptr = editor_el_boulderdash_native; static int num_editor_hl_boulderdash_native = ARRAY_SIZE(editor_hl_boulderdash_native); static int num_editor_el_boulderdash_native = ARRAY_SIZE(editor_el_boulderdash_native); +static int editor_hl_boulderdash_effects[] = +{ + EL_INTERNAL_CASCADE_BD_EFFECTS_ACTIVE, + EL_CHAR('B'), + EL_CHAR('D'), + EL_CHAR('E'), +}; + +static int editor_el_boulderdash_effects[] = +{ + EL_BD_DIAMOND_FALLING, + EL_BD_ROCK_FALLING, + EL_BD_MEGA_ROCK_FALLING, + EL_BD_FLYING_DIAMOND_FLYING, + + EL_BD_FLYING_ROCK_FLYING, + EL_BD_FALLING_WALL_FALLING, + EL_BD_NITRO_PACK_FALLING, + EL_BD_NUT_FALLING, + + EL_BD_PLAYER_GROWING_1, + EL_BD_PLAYER_GROWING_2, + EL_BD_PLAYER_GROWING_3, + EL_BD_PLAYER, + + EL_BD_PLAYER_WITH_BOMB, + EL_BD_PLAYER_STIRRING, + EL_BD_EXIT_OPEN, + EL_BD_INVISIBLE_EXIT_OPEN, + + EL_BD_BLADDER_1, + EL_BD_BLADDER_2, + EL_BD_BLADDER_3, + EL_BD_BLADDER_4, + + EL_BD_BLADDER_5, + EL_BD_BLADDER_6, + EL_BD_BLADDER_7, + EL_BD_BLADDER_8, + + EL_BD_SAND_2, + EL_BD_COW_ENCLOSED_1, + EL_BD_COW_ENCLOSED_2, + EL_BD_COW_ENCLOSED_3, + + EL_BD_COW_ENCLOSED_4, + EL_BD_COW_ENCLOSED_5, + EL_BD_COW_ENCLOSED_6, + EL_BD_COW_ENCLOSED_7, + + EL_BD_WATER_1, + EL_BD_WATER_2, + EL_BD_WATER_3, + EL_BD_WATER_4, + + EL_BD_WATER_5, + EL_BD_WATER_6, + EL_BD_WATER_7, + EL_BD_WATER_8, + + EL_BD_WATER_9, + EL_BD_WATER_10, + EL_BD_WATER_11, + EL_BD_WATER_12, + + EL_BD_WATER_13, + EL_BD_WATER_14, + EL_BD_WATER_15, + EL_BD_WATER_16, + + EL_BD_BOMB_TICKING_1, + EL_BD_BOMB_TICKING_2, + EL_BD_BOMB_TICKING_3, + EL_BD_BOMB_TICKING_4, + + EL_BD_BOMB_TICKING_5, + EL_BD_BOMB_TICKING_6, + EL_BD_BOMB_TICKING_7, + EL_EMPTY, + + EL_BD_BOMB_EXPLODING_1, + EL_BD_BOMB_EXPLODING_2, + EL_BD_BOMB_EXPLODING_3, + EL_BD_BOMB_EXPLODING_4, + + EL_BD_NUT_BREAKING_1, + EL_BD_NUT_BREAKING_2, + EL_BD_NUT_BREAKING_3, + EL_BD_NUT_BREAKING_4, + + EL_BD_EXPLODING_1, + EL_BD_EXPLODING_2, + EL_BD_EXPLODING_3, + EL_BD_EXPLODING_4, + + EL_BD_EXPLODING_5, + EL_BD_TIME_PENALTY, + EL_BD_DIAMOND_GROWING_1, + EL_BD_DIAMOND_GROWING_2, + + EL_BD_DIAMOND_GROWING_3, + EL_BD_DIAMOND_GROWING_4, + EL_BD_DIAMOND_GROWING_5, + EL_BD_NITRO_PACK_EXPLODING, + + EL_BD_NITRO_PACK_EXPLODING_1, + EL_BD_NITRO_PACK_EXPLODING_2, + EL_BD_NITRO_PACK_EXPLODING_3, + EL_BD_NITRO_PACK_EXPLODING_4, + + EL_BD_ROCK_GROWING_1, + EL_BD_ROCK_GROWING_2, + EL_BD_ROCK_GROWING_3, + EL_BD_ROCK_GROWING_4, + + EL_BD_STEELWALL_GROWING_1, + EL_BD_STEELWALL_GROWING_2, + EL_BD_STEELWALL_GROWING_3, + EL_BD_STEELWALL_GROWING_4, + + EL_BD_CLOCK_GROWING_1, + EL_BD_CLOCK_GROWING_2, + EL_BD_CLOCK_GROWING_3, + EL_BD_CLOCK_GROWING_4, + + EL_BD_GHOST_EXPLODING_1, + EL_BD_GHOST_EXPLODING_2, + EL_BD_GHOST_EXPLODING_3, + EL_BD_GHOST_EXPLODING_4, +}; +static int *editor_hl_boulderdash_effects_ptr = editor_hl_boulderdash_effects; +static int *editor_el_boulderdash_effects_ptr = editor_el_boulderdash_effects; +static int num_editor_hl_boulderdash_effects = ARRAY_SIZE(editor_hl_boulderdash_effects); +static int num_editor_el_boulderdash_effects = ARRAY_SIZE(editor_el_boulderdash_effects); + static int editor_hl_emerald_mine[] = { EL_INTERNAL_CASCADE_EM_ACTIVE, @@ -6207,6 +6470,7 @@ static boolean setup_editor_cascade_never = FALSE; static boolean setup_editor_el_players = TRUE; static boolean setup_editor_el_boulderdash = TRUE; static boolean setup_editor_el_boulderdash_native = TRUE; +static boolean setup_editor_el_boulderdash_effects = TRUE; static boolean setup_editor_el_emerald_mine = TRUE; static boolean setup_editor_el_emerald_mine_club = TRUE; static boolean setup_editor_el_more = TRUE; @@ -6259,6 +6523,12 @@ editor_elements_info[] = &editor_hl_boulderdash_native_ptr, &num_editor_hl_boulderdash_native, &editor_el_boulderdash_native_ptr, &num_editor_el_boulderdash_native }, + { + &setup_editor_el_boulderdash_effects, + &setup.editor_cascade.el_bd_effects, + &editor_hl_boulderdash_effects_ptr, &num_editor_hl_boulderdash_effects, + &editor_el_boulderdash_effects_ptr, &num_editor_el_boulderdash_effects + }, { &setup_editor_el_emerald_mine, &setup.editor_cascade.el_em, @@ -6406,7 +6676,7 @@ static int getTextWidthForDrawingArea(char *text) 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) @@ -6559,6 +6829,7 @@ static void ReinitializeElementList_EnableSections(void) setup_editor_el_players = TRUE; setup_editor_el_boulderdash = TRUE; setup_editor_el_boulderdash_native = TRUE; + setup_editor_el_boulderdash_effects = TRUE; setup_editor_el_emerald_mine = TRUE; setup_editor_el_emerald_mine_club = TRUE; setup_editor_el_more = TRUE; @@ -6582,6 +6853,7 @@ static void ReinitializeElementList_EnableSections(void) setup_editor_el_players = FALSE; setup_editor_el_boulderdash = FALSE; setup_editor_el_boulderdash_native = FALSE; + setup_editor_el_boulderdash_effects = FALSE; setup_editor_el_emerald_mine = FALSE; setup_editor_el_emerald_mine_club = FALSE; setup_editor_el_more = FALSE; @@ -6613,6 +6885,7 @@ static void ReinitializeElementList_EnableSections(void) if (level.game_engine_type == GAME_ENGINE_TYPE_RND) { setup_editor_el_boulderdash_native = FALSE; + setup_editor_el_boulderdash_effects = FALSE; setup_editor_el_mirror_magic = FALSE; setup_editor_el_deflektor = FALSE; } @@ -6638,6 +6911,7 @@ static void ReinitializeElementList_EnableSections(void) { setup_editor_el_boulderdash = FALSE; setup_editor_el_boulderdash_native = FALSE; + setup_editor_el_boulderdash_effects = FALSE; setup_editor_el_more = FALSE; setup_editor_el_sokoban = FALSE; setup_editor_el_supaplex = FALSE; @@ -6654,6 +6928,7 @@ static void ReinitializeElementList_EnableSections(void) setup_editor_el_players = FALSE; setup_editor_el_boulderdash = FALSE; setup_editor_el_boulderdash_native = FALSE; + setup_editor_el_boulderdash_effects = FALSE; setup_editor_el_emerald_mine = FALSE; setup_editor_el_emerald_mine_club = FALSE; setup_editor_el_more = FALSE; @@ -6672,6 +6947,7 @@ static void ReinitializeElementList_EnableSections(void) setup_editor_el_players = FALSE; setup_editor_el_boulderdash = FALSE; setup_editor_el_boulderdash_native = FALSE; + setup_editor_el_boulderdash_effects = FALSE; setup_editor_el_emerald_mine = FALSE; setup_editor_el_emerald_mine_club = FALSE; setup_editor_el_more = FALSE; @@ -7083,7 +7359,25 @@ static void ScrollEditorLevel(int from_x, int from_y, int scroll) static void getEditorGraphicSource(int element, int tile_size, Bitmap **bitmap, int *x, int *y) { - getSizedGraphicSource(el2edimg(element), 0, tile_size, bitmap, x, y); + int graphic = el2edimg(element); + int frame = 0; + + if (graphic == IMG_UNKNOWN) + { + // no graphic defined -- if BD style, try to get runtime ("effect") element graphics + // (normal BD style elements have graphics, but runtime ("effects") elements do not) + int element_bd = map_element_RND_to_BD_cave(element); + + if (element_bd != O_UNKNOWN) + { + struct GraphicInfo_BD *g_bd = &graphic_info_bd_object[element_bd][0]; + + graphic = g_bd->graphic; + frame = g_bd->frame; + } + } + + getSizedGraphicSource(graphic, frame, tile_size, bitmap, x, y); } static void CreateControlButtons(void) @@ -7407,7 +7701,7 @@ static void CreateCounterButtons(void) gd_y2 = gd->src_y + gd->pressed_yoffset; sprintf(infotext, "%s counter value by 1, 5 or 10", - (j == 0 ? "decrease" : "increase")); + (j == 0 ? "Decrease" : "Increase")); gi = CreateGadget(GDI_CUSTOM_ID, id, GDI_CUSTOM_TYPE_ID, type_id, @@ -7469,7 +7763,7 @@ static void CreateCounterButtons(void) gi = CreateGadget(GDI_CUSTOM_ID, id, GDI_CUSTOM_TYPE_ID, type_id, GDI_IMAGE_ID, graphic, - GDI_INFO_TEXT, "enter counter value", + GDI_INFO_TEXT, "Enter counter value", GDI_X, x, GDI_Y, y, GDI_TYPE, GD_TYPE_TEXT_INPUT_NUMERIC, @@ -7684,6 +7978,7 @@ static void CreateTextAreaGadgets(void) static void CreateSelectboxGadgets(void) { int max_infotext_len = getMaxInfoTextLength(); + int i, j; for (i = 0; i < ED_NUM_SELECTBOX; i++) @@ -7730,7 +8025,7 @@ static void CreateSelectboxGadgets(void) if (selectbox_info[i].text_left != NULL) x += getTextWidthForGadget(selectbox_info[i].text_left); - sprintf(infotext, "Select %s", selectbox_info[i].infotext); + sprintf(infotext, "%s", selectbox_info[i].infotext); infotext[max_infotext_len] = '\0'; gi = CreateGadget(GDI_CUSTOM_ID, id, @@ -8313,7 +8608,7 @@ static void MapDrawingArea(int id) 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; @@ -10812,139 +11107,176 @@ static void DrawPropertiesInfo(void) #define TEXT_GAME_OF_LIFE_3 "Min neighbours to create" #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)" +#define TEXT_BITER_MOVE_DELAY "Move delay (BD frames)" +#define TEXT_REPLICATION_DELAY "Create delay (BD frames)" static struct { 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_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 }, - { EL_BD_AMOEBA, &level.bd_amoeba_fast_growth_rate, TEXT_AMOEBA_FAST_RATE }, + { 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 }, - { 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 }, - { 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_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_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_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_BD_REPLICATOR, &level.bd_replicator_create_delay, TEXT_REPLICATION_DELAY, + 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 }, + { 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) @@ -10970,6 +11302,9 @@ static boolean checkPropertiesConfig(int element) IS_DF_LASER(element) || IS_PLAYER_ELEMENT(element) || IS_BD_PLAYER_ELEMENT(element) || + IS_BD_EXPANDABLE_WALL(properties_element) || + IS_BD_CONVEYOR_BELT(properties_element) || + IS_BD_CONVEYOR_BELT_SWITCH(properties_element) || IS_SOKOBAN_OBJECT_OR_FIELD(element) || HAS_EDITOR_CONTENT(element) || CAN_GROW(element) || @@ -10977,7 +11312,9 @@ static boolean checkPropertiesConfig(int element) MAYBE_DONT_COLLIDE_WITH(element) || element == EL_BD_ROCK || element == EL_BD_MEGA_ROCK || - element == EL_BD_SWEET) + element == EL_BD_SWEET || + element == EL_BD_VOODOO_DOLL || + element == EL_BD_WATER) { return TRUE; } @@ -11061,8 +11398,7 @@ static void DrawPropertiesConfig(void) 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; } @@ -11070,71 +11406,60 @@ static void DrawPropertiesConfig(void) // 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) - { - // 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 = - 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); + if (elements_with_counter[i].element != properties_element) + continue; - counterbutton_info[counter_id].value = elements_with_counter[i].value; - counterbutton_info[counter_id].text_right = elements_with_counter[i].text; + // 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; - 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 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 !!! - counterbutton_info[counter_id].min_value = MIN_SCORE; - counterbutton_info[counter_id].max_value = MAX_SCORE; - } + // 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; - MapCounterButtons(counter_id); + // 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; - num_element_counters++; - if (num_element_counters >= max_num_element_counters) - break; - } + 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_BD_VOODOO_DOLL ? 4 : 0) + + (properties_element == EL_BD_SLIME ? 1 : 0) + + (properties_element == EL_BD_ACID ? 1 : 0) + + (properties_element == EL_BD_REPLICATOR ? 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)) @@ -11163,6 +11488,19 @@ 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 (IS_BD_BITER(properties_element)) + { + MapDrawingArea(ED_DRAWING_ID_BD_BITER_EATS_ELEMENT); + } + else if (properties_element == EL_BD_BLADDER) + { + MapDrawingArea(ED_DRAWING_ID_BD_BLADDER_CONVERTS_BY_ELEMENT); + } else if (properties_element == EL_YAMYAM || properties_element == EL_YAMYAM_LEFT || properties_element == EL_YAMYAM_RIGHT || @@ -11279,6 +11617,9 @@ static void DrawPropertiesConfig(void) // draw counter gadgets MapCounterButtons(ED_COUNTER_ID_BD_PUSHING_PROB); MapCounterButtons(ED_COUNTER_ID_BD_PUSHING_PROB_WITH_SWEET); + + // draw drawing area gadgets + MapDrawingArea(ED_DRAWING_ID_BD_SNAP_ELEMENT); } if (properties_element == EL_BD_ROCK && level.game_engine_type == GAME_ENGINE_TYPE_BD) @@ -11304,12 +11645,47 @@ static void DrawPropertiesConfig(void) MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_PUSH_MEGA_ROCK_WITH_SWEET); } + if (properties_element == EL_BD_VOODOO_DOLL) + { + MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_VOODOO_COLLECTS_DIAMONDS); + MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_VOODOO_HURT_KILLS_PLAYER); + MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_VOODOO_DIES_BY_ROCK); + 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); MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_MAGIC_WALL_STOPS_AMOEBA); } + if (IS_BD_EXPANDABLE_WALL(properties_element)) + { + MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_CHANGE_EXPANDING_WALL); + } + + if (properties_element == EL_BD_REPLICATOR) + { + MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_REPLICATORS_ACTIVE); + } + + if (IS_BD_CONVEYOR_BELT(properties_element) || + IS_BD_CONVEYOR_BELT_SWITCH(properties_element)) + { + MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_CONVEYOR_BELTS_ACTIVE); + MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_CONVEYOR_BELTS_CHANGED); + } + + if (properties_element == EL_BD_WATER) + { + MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_WATER_CANNOT_FLOW_DOWN); + } + // 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);