X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Feditor.c;h=6d38861e69440a665f40b97d49a5a1921991c994;hb=5797b8063d87fc5dfd552b95a46c8c5260da8ea0;hp=95d6f633bc7a9f0967715fa5377a6e5c1c72887b;hpb=0bee4c55d638cd216ce4e7afdec34a15b8bca34e;p=rocksndiamonds.git diff --git a/src/editor.c b/src/editor.c index 95d6f633..6d38861e 100644 --- a/src/editor.c +++ b/src/editor.c @@ -99,6 +99,12 @@ #define ED_SETTINGS_LEVEL_TABS_X (editor.settings.tabs.x) #define ED_SETTINGS_LEVEL_TABS_Y (editor.settings.tabs.y) +#define ED_SETTINGS_ENGINE_TABS_X (editor.settings.tabs.x) +#define ED_SETTINGS_ENGINE_TABS_Y (editor.settings.tabs.y + \ + ED_TABBUTTON_YSIZE + \ + ED_GADGET_TINY_DISTANCE + \ + ED_TAB_BAR_HEIGHT + \ + ED_GADGET_TEXT_DISTANCE) #define ED_SETTINGS_ELEMENT_TABS_X (editor.settings.tabs.x) #define ED_SETTINGS_ELEMENT_TABS_Y (editor.settings.tabs.y + \ editor.settings.tabs.yoffset2) @@ -117,6 +123,17 @@ ED_SETTINGS_TABS_YOFFSET + \ getFontHeight(FONT_TEXT_1) + \ ED_GADGET_TEXT_DISTANCE) +#define ED_ENGINE_TABS_XSTART (ED_SETTINGS_ENGINE_TABS_X) +#define ED_ENGINE_TABS_YSTART (ED_SETTINGS_ENGINE_TABS_Y) +#define ED_ENGINE_SETTINGS_XSTART (ED_SETTINGS_ENGINE_TABS_X + \ + ED_SETTINGS_TABS_XOFFSET) +#define ED_ENGINE_SETTINGS_YSTART (ED_SETTINGS_ENGINE_TABS_Y + \ + ED_TABBUTTON_YSIZE + \ + ED_GADGET_TINY_DISTANCE + \ + ED_TAB_BAR_HEIGHT + \ + ED_SETTINGS_TABS_YOFFSET + \ + getFontHeight(FONT_TEXT_1) + \ + ED_GADGET_TEXT_DISTANCE) #define ED_ELEMENT_TABS_XSTART (ED_SETTINGS_ELEMENT_TABS_X) #define ED_ELEMENT_TABS_YSTART (ED_SETTINGS_ELEMENT_TABS_Y) #define ED_ELEMENT_SETTINGS_XSTART (ED_SETTINGS_ELEMENT_TABS_X + \ @@ -137,10 +154,14 @@ #define ED_POS_LEVEL_TABS_LAST (2 * ED_POS_RANGE - 1) #define ED_POS_LEVEL_SETTINGS_FIRST (2 * ED_POS_RANGE) #define ED_POS_LEVEL_SETTINGS_LAST (3 * ED_POS_RANGE - 1) -#define ED_POS_ELEMENT_TABS_FIRST (3 * ED_POS_RANGE) -#define ED_POS_ELEMENT_TABS_LAST (4 * ED_POS_RANGE - 1) -#define ED_POS_ELEMENT_SETTINGS_FIRST (4 * ED_POS_RANGE) -#define ED_POS_ELEMENT_SETTINGS_LAST (5 * ED_POS_RANGE - 1) +#define ED_POS_ENGINE_TABS_FIRST (3 * ED_POS_RANGE) +#define ED_POS_ENGINE_TABS_LAST (4 * ED_POS_RANGE - 1) +#define ED_POS_ENGINE_SETTINGS_FIRST (4 * ED_POS_RANGE) +#define ED_POS_ENGINE_SETTINGS_LAST (5 * ED_POS_RANGE - 1) +#define ED_POS_ELEMENT_TABS_FIRST (5 * ED_POS_RANGE) +#define ED_POS_ELEMENT_TABS_LAST (6 * ED_POS_RANGE - 1) +#define ED_POS_ELEMENT_SETTINGS_FIRST (6 * ED_POS_RANGE) +#define ED_POS_ELEMENT_SETTINGS_LAST (7 * ED_POS_RANGE - 1) #define ED_LEVEL_TABS_XPOS(n) (ED_POS_LEVEL_TABS_FIRST + (n)) #define ED_LEVEL_TABS_YPOS(n) (ED_POS_LEVEL_TABS_FIRST + (n)) @@ -148,6 +169,12 @@ #define ED_LEVEL_SETTINGS_XPOS(n) (ED_POS_LEVEL_SETTINGS_FIRST + (n)) #define ED_LEVEL_SETTINGS_YPOS(n) (ED_POS_LEVEL_SETTINGS_FIRST + (n)) +#define ED_ENGINE_TABS_XPOS(n) (ED_POS_ENGINE_TABS_FIRST + (n)) +#define ED_ENGINE_TABS_YPOS(n) (ED_POS_ENGINE_TABS_FIRST + (n)) + +#define ED_ENGINE_SETTINGS_XPOS(n) (ED_POS_ENGINE_SETTINGS_FIRST + (n)) +#define ED_ENGINE_SETTINGS_YPOS(n) (ED_POS_ENGINE_SETTINGS_FIRST + (n)) + #define ED_ELEMENT_TABS_XPOS(n) (ED_POS_ELEMENT_TABS_FIRST + (n)) #define ED_ELEMENT_TABS_YPOS(n) (ED_POS_ELEMENT_TABS_FIRST + (n)) @@ -158,6 +185,10 @@ (n) <= ED_POS_LEVEL_TABS_LAST) #define IS_POS_LEVEL_SETTINGS(n) ((n) >= ED_POS_LEVEL_SETTINGS_FIRST && \ (n) <= ED_POS_LEVEL_SETTINGS_LAST) +#define IS_POS_ENGINE_TABS(n) ((n) >= ED_POS_ENGINE_TABS_FIRST && \ + (n) <= ED_POS_ENGINE_TABS_LAST) +#define IS_POS_ENGINE_SETTINGS(n) ((n) >= ED_POS_ENGINE_SETTINGS_FIRST && \ + (n) <= ED_POS_ENGINE_SETTINGS_LAST) #define IS_POS_ELEMENT_TABS(n) ((n) >= ED_POS_ELEMENT_TABS_FIRST && \ (n) <= ED_POS_ELEMENT_TABS_LAST) #define IS_POS_ELEMENT_SETTINGS(n) ((n) >= ED_POS_ELEMENT_SETTINGS_FIRST && \ @@ -165,6 +196,8 @@ #define ED_LEVEL_TABS_LINE(n) ((n) - ED_POS_LEVEL_TABS_FIRST) #define ED_LEVEL_SETTINGS_LINE(n) ((n) - ED_POS_LEVEL_SETTINGS_FIRST) +#define ED_ENGINE_TABS_LINE(n) ((n) - ED_POS_ENGINE_TABS_FIRST) +#define ED_ENGINE_SETTINGS_LINE(n) ((n) - ED_POS_ENGINE_SETTINGS_FIRST) #define ED_ELEMENT_TABS_LINE(n) ((n) - ED_POS_ELEMENT_TABS_FIRST) #define ED_ELEMENT_SETTINGS_LINE(n) ((n) - ED_POS_ELEMENT_SETTINGS_FIRST) @@ -178,6 +211,16 @@ #define ED_LEVEL_SETTINGS_Y(n) (ED_LEVEL_SETTINGS_YSTART + \ (n) * ED_SETTINGS_YOFFSET) +#define ED_ENGINE_TABS_X(n) (ED_ENGINE_TABS_XSTART + \ + (n) * ED_SETTINGS_TABS_XOFFSET) +#define ED_ENGINE_TABS_Y(n) (ED_ENGINE_TABS_YSTART + \ + (n) * ED_SETTINGS_TABS_YOFFSET) + +#define ED_ENGINE_SETTINGS_X(n) (ED_ENGINE_SETTINGS_XSTART + \ + (n) * ED_SETTINGS_XOFFSET) +#define ED_ENGINE_SETTINGS_Y(n) (ED_ENGINE_SETTINGS_YSTART + \ + (n) * ED_SETTINGS_YOFFSET) + #define ED_ELEMENT_TABS_X(n) (ED_ELEMENT_TABS_XSTART + \ (n) * ED_SETTINGS_TABS_XOFFSET) #define ED_ELEMENT_TABS_Y(n) (ED_ELEMENT_TABS_YSTART + \ @@ -198,6 +241,16 @@ #define ED_POS_TO_LEVEL_SETTINGS_Y(n) \ (ED_LEVEL_SETTINGS_Y(ED_LEVEL_SETTINGS_LINE(n))) +#define ED_POS_TO_ENGINE_TABS_X(n) \ + (ED_ENGINE_TABS_X(ED_ENGINE_TABS_LINE(n))) +#define ED_POS_TO_ENGINE_TABS_Y(n) \ + (ED_ENGINE_TABS_Y(ED_ENGINE_TABS_LINE(n))) + +#define ED_POS_TO_ENGINE_SETTINGS_X(n) \ + (ED_ENGINE_SETTINGS_X(ED_ENGINE_SETTINGS_LINE(n))) +#define ED_POS_TO_ENGINE_SETTINGS_Y(n) \ + (ED_ENGINE_SETTINGS_Y(ED_ENGINE_SETTINGS_LINE(n))) + #define ED_POS_TO_ELEMENT_TABS_X(n) \ (ED_ELEMENT_TABS_X(ED_ELEMENT_TABS_LINE(n))) #define ED_POS_TO_ELEMENT_TABS_Y(n) \ @@ -212,6 +265,10 @@ ED_POS_TO_LEVEL_TABS_X(n) : \ IS_POS_LEVEL_SETTINGS(n) ? \ ED_POS_TO_LEVEL_SETTINGS_X(n) : \ + IS_POS_ENGINE_TABS(n) ? \ + ED_POS_TO_ENGINE_TABS_X(n) : \ + IS_POS_ENGINE_SETTINGS(n) ? \ + ED_POS_TO_ENGINE_SETTINGS_X(n) : \ IS_POS_ELEMENT_TABS(n) ? \ ED_POS_TO_ELEMENT_TABS_X(n) : \ IS_POS_ELEMENT_SETTINGS(n) ? \ @@ -220,6 +277,10 @@ ED_POS_TO_LEVEL_TABS_Y(n) : \ IS_POS_LEVEL_SETTINGS(n) ? \ ED_POS_TO_LEVEL_SETTINGS_Y(n) : \ + IS_POS_ENGINE_TABS(n) ? \ + ED_POS_TO_ENGINE_TABS_Y(n) : \ + IS_POS_ENGINE_SETTINGS(n) ? \ + ED_POS_TO_ENGINE_SETTINGS_Y(n) : \ IS_POS_ELEMENT_TABS(n) ? \ ED_POS_TO_ELEMENT_TABS_Y(n) : \ IS_POS_ELEMENT_SETTINGS(n) ? \ @@ -441,9 +502,6 @@ enum GADGET_ID_BD_HATCHING_DELAY_SECONDS_DOWN, GADGET_ID_BD_HATCHING_DELAY_SECONDS_TEXT, GADGET_ID_BD_HATCHING_DELAY_SECONDS_UP, - GADGET_ID_BD_CREATURES_AUTO_TURN_DELAY_DOWN, - GADGET_ID_BD_CREATURES_AUTO_TURN_DELAY_TEXT, - GADGET_ID_BD_CREATURES_AUTO_TURN_DELAY_UP, GADGET_ID_BD_PUSHING_PROB_DOWN, GADGET_ID_BD_PUSHING_PROB_TEXT, GADGET_ID_BD_PUSHING_PROB_UP, @@ -586,6 +644,20 @@ enum GADGET_ID_BD_NUT_CONTENT, GADGET_ID_BD_EXPANDING_WALL_LOOKS_LIKE, GADGET_ID_BD_SAND_LOOKS_LIKE, + GADGET_ID_BD_ROCK_TURNS_TO_ON_FALLING, + GADGET_ID_BD_ROCK_TURNS_TO_ON_IMPACT, + GADGET_ID_BD_DIAMOND_TURNS_TO_ON_FALLING, + GADGET_ID_BD_DIAMOND_TURNS_TO_ON_IMPACT, + GADGET_ID_BD_FIREFLY_EXPLODES_TO, + GADGET_ID_BD_FIREFLY_2_EXPLODES_TO, + GADGET_ID_BD_BUTTERFLY_EXPLODES_TO, + GADGET_ID_BD_BUTTERFLY_2_EXPLODES_TO, + GADGET_ID_BD_STONEFLY_EXPLODES_TO, + GADGET_ID_BD_DRAGONFLY_EXPLODES_TO, + GADGET_ID_BD_DIAMOND_BIRTH_TURNS_TO, + GADGET_ID_BD_BOMB_EXPLOSION_TURNS_TO, + GADGET_ID_BD_NITRO_EXPLOSION_TURNS_TO, + GADGET_ID_BD_EXPLOSION_TURNS_TO, GADGET_ID_START_ELEMENT, GADGET_ID_ARTWORK_ELEMENT, GADGET_ID_EXPLOSION_ELEMENT, @@ -619,10 +691,11 @@ enum GADGET_ID_TIME_OR_STEPS, GADGET_ID_TIME_SCORE_BASE, GADGET_ID_GAME_ENGINE_TYPE, - GADGET_ID_BD_SCHEDULING_TYPE, GADGET_ID_LEVELSET_SAVE_MODE, + GADGET_ID_BD_SCHEDULING_TYPE, GADGET_ID_WIND_DIRECTION, GADGET_ID_PLAYER_SPEED, + GADGET_ID_BD_GRAVITY_DIRECTION, GADGET_ID_MM_BALL_CHOICE_MODE, GADGET_ID_CUSTOM_WALK_TO_ACTION, GADGET_ID_CUSTOM_EXPLOSION_TYPE, @@ -656,6 +729,8 @@ enum GADGET_ID_LEVELCONFIG_LEVELSET, GADGET_ID_LEVELCONFIG_EDITOR, GADGET_ID_LEVELCONFIG_ENGINE, + GADGET_ID_ENGINECONFIG_CONFIG, + GADGET_ID_ENGINECONFIG_COLORS, GADGET_ID_PROPERTIES_INFO, GADGET_ID_PROPERTIES_CONFIG, GADGET_ID_PROPERTIES_CONFIG_1, @@ -703,9 +778,6 @@ enum GADGET_ID_BD_LINE_SHIFTING_BORDERS, GADGET_ID_BD_SCAN_FIRST_AND_LAST_ROW, GADGET_ID_BD_SHORT_EXPLOSIONS, - GADGET_ID_BD_GRAVITY_AFFECTS_ALL, - GADGET_ID_BD_CREATURES_START_BACKWARDS, - GADGET_ID_BD_CREATURES_TURN_ON_HATCHING, GADGET_ID_STICK_ELEMENT, GADGET_ID_EM_SLIPPERY_GEMS, GADGET_ID_EM_EXPLODES_BY_FIRE, @@ -740,8 +812,10 @@ enum GADGET_ID_BD_DIAGONAL_MOVEMENTS, GADGET_ID_BD_TOPMOST_PLAYER_ACTIVE, GADGET_ID_BD_PUSH_MEGA_ROCK_WITH_SWEET, + GADGET_ID_BD_MAGIC_WALL_ZERO_INFINITE, GADGET_ID_BD_MAGIC_WALL_WAIT_HATCHING, GADGET_ID_BD_MAGIC_WALL_STOPS_AMOEBA, + GADGET_ID_BD_MAGIC_WALL_BREAK_SCAN, GADGET_ID_BD_AMOEBA_WAIT_FOR_HATCHING, GADGET_ID_BD_AMOEBA_START_IMMEDIATELY, GADGET_ID_BD_AMOEBA_2_EXPLODE_BY_AMOEBA, @@ -756,6 +830,11 @@ enum GADGET_ID_BD_CONVEYOR_BELTS_CHANGED, GADGET_ID_BD_WATER_CANNOT_FLOW_DOWN, GADGET_ID_BD_HAMMER_WALLS_REAPPEAR, + GADGET_ID_BD_INFINITE_ROCKETS, + GADGET_ID_BD_CREATURES_START_BACKWARDS, + GADGET_ID_BD_CREATURES_TURN_ON_HATCHING, + GADGET_ID_BD_GRAVITY_SWITCH_ACTIVE, + GADGET_ID_BD_GRAVITY_AFFECTS_ALL, GADGET_ID_ENVELOPE_AUTOWRAP, GADGET_ID_ENVELOPE_CENTERED, GADGET_ID_MM_LASER_RED, @@ -828,7 +907,6 @@ enum ED_COUNTER_ID_BD_CYCLE_DELAY_C64, ED_COUNTER_ID_BD_HATCHING_DELAY_CYCLES, ED_COUNTER_ID_BD_HATCHING_DELAY_SECONDS, - ED_COUNTER_ID_BD_CREATURES_AUTO_TURN_DELAY, ED_COUNTER_ID_BD_PUSHING_PROB, ED_COUNTER_ID_BD_PUSHING_PROB_WITH_SWEET, ED_COUNTER_ID_ELEMENT_VALUE1, @@ -945,10 +1023,11 @@ enum ED_SELECTBOX_ID_TIME_OR_STEPS, ED_SELECTBOX_ID_TIME_SCORE_BASE, ED_SELECTBOX_ID_GAME_ENGINE_TYPE, - ED_SELECTBOX_ID_BD_SCHEDULING_TYPE, ED_SELECTBOX_ID_LEVELSET_SAVE_MODE, + ED_SELECTBOX_ID_BD_SCHEDULING_TYPE, ED_SELECTBOX_ID_WIND_DIRECTION, ED_SELECTBOX_ID_PLAYER_SPEED, + ED_SELECTBOX_ID_BD_GRAVITY_DIRECTION, ED_SELECTBOX_ID_MM_BALL_CHOICE_MODE, ED_SELECTBOX_ID_CUSTOM_ACCESS_TYPE, ED_SELECTBOX_ID_CUSTOM_ACCESS_LAYER, @@ -1005,6 +1084,8 @@ enum ED_TEXTBUTTON_ID_LEVELCONFIG_LEVELSET, ED_TEXTBUTTON_ID_LEVELCONFIG_EDITOR, ED_TEXTBUTTON_ID_LEVELCONFIG_ENGINE, + ED_TEXTBUTTON_ID_ENGINECONFIG_CONFIG, + ED_TEXTBUTTON_ID_ENGINECONFIG_COLORS, ED_TEXTBUTTON_ID_PROPERTIES_INFO, ED_TEXTBUTTON_ID_PROPERTIES_CONFIG, ED_TEXTBUTTON_ID_PROPERTIES_CONFIG_1, @@ -1022,6 +1103,9 @@ enum #define ED_TAB_BUTTON_ID_LEVELCONFIG_FIRST ED_TEXTBUTTON_ID_LEVELCONFIG_LEVEL #define ED_TAB_BUTTON_ID_LEVELCONFIG_LAST ED_TEXTBUTTON_ID_LEVELCONFIG_ENGINE +#define ED_TAB_BUTTON_ID_ENGINECONFIG_FIRST ED_TEXTBUTTON_ID_ENGINECONFIG_CONFIG +#define ED_TAB_BUTTON_ID_ENGINECONFIG_LAST ED_TEXTBUTTON_ID_ENGINECONFIG_COLORS + #define ED_TAB_BUTTON_ID_PROPERTIES_FIRST ED_TEXTBUTTON_ID_PROPERTIES_INFO #define ED_TAB_BUTTON_ID_PROPERTIES_LAST ED_TEXTBUTTON_ID_PROPERTIES_CHANGE @@ -1057,9 +1141,6 @@ enum ED_CHECKBUTTON_ID_BD_LINE_SHIFTING_BORDERS, ED_CHECKBUTTON_ID_BD_SCAN_FIRST_AND_LAST_ROW, ED_CHECKBUTTON_ID_BD_SHORT_EXPLOSIONS, - ED_CHECKBUTTON_ID_BD_GRAVITY_AFFECTS_ALL, - ED_CHECKBUTTON_ID_BD_CREATURES_START_BACKWARDS, - ED_CHECKBUTTON_ID_BD_CREATURES_TURN_ON_HATCHING, ED_CHECKBUTTON_ID_STICK_ELEMENT, ED_CHECKBUTTON_ID_EM_SLIPPERY_GEMS, ED_CHECKBUTTON_ID_EM_EXPLODES_BY_FIRE, @@ -1094,8 +1175,10 @@ enum ED_CHECKBUTTON_ID_BD_DIAGONAL_MOVEMENTS, ED_CHECKBUTTON_ID_BD_TOPMOST_PLAYER_ACTIVE, ED_CHECKBUTTON_ID_BD_PUSH_MEGA_ROCK_WITH_SWEET, + ED_CHECKBUTTON_ID_BD_MAGIC_WALL_ZERO_INFINITE, ED_CHECKBUTTON_ID_BD_MAGIC_WALL_WAIT_HATCHING, ED_CHECKBUTTON_ID_BD_MAGIC_WALL_STOPS_AMOEBA, + ED_CHECKBUTTON_ID_BD_MAGIC_WALL_BREAK_SCAN, ED_CHECKBUTTON_ID_BD_AMOEBA_WAIT_FOR_HATCHING, ED_CHECKBUTTON_ID_BD_AMOEBA_START_IMMEDIATELY, ED_CHECKBUTTON_ID_BD_AMOEBA_2_EXPLODE_BY_AMOEBA, @@ -1110,6 +1193,11 @@ enum ED_CHECKBUTTON_ID_BD_CONVEYOR_BELTS_CHANGED, ED_CHECKBUTTON_ID_BD_WATER_CANNOT_FLOW_DOWN, ED_CHECKBUTTON_ID_BD_HAMMER_WALLS_REAPPEAR, + ED_CHECKBUTTON_ID_BD_INFINITE_ROCKETS, + ED_CHECKBUTTON_ID_BD_CREATURES_START_BACKWARDS, + ED_CHECKBUTTON_ID_BD_CREATURES_TURN_ON_HATCHING, + ED_CHECKBUTTON_ID_BD_GRAVITY_SWITCH_ACTIVE, + ED_CHECKBUTTON_ID_BD_GRAVITY_AFFECTS_ALL, ED_CHECKBUTTON_ID_ENVELOPE_AUTOWRAP, ED_CHECKBUTTON_ID_ENVELOPE_CENTERED, ED_CHECKBUTTON_ID_MM_LASER_RED, @@ -1159,7 +1247,7 @@ enum #define ED_CHECKBUTTON_ID_EDITOR_LAST ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE_2 #define ED_CHECKBUTTON_ID_ENGINE_FIRST ED_CHECKBUTTON_ID_BD_INTERMISSION -#define ED_CHECKBUTTON_ID_ENGINE_LAST ED_CHECKBUTTON_ID_BD_CREATURES_TURN_ON_HATCHING +#define ED_CHECKBUTTON_ID_ENGINE_LAST ED_CHECKBUTTON_ID_BD_SHORT_EXPLOSIONS #define ED_CHECKBUTTON_ID_CUSTOM1_FIRST ED_CHECKBUTTON_ID_CUSTOM_USE_GRAPHIC #define ED_CHECKBUTTON_ID_CUSTOM1_LAST ED_CHECKBUTTON_ID_CUSTOM_INDESTRUCTIBLE @@ -1232,6 +1320,20 @@ enum ED_DRAWING_ID_BD_NUT_CONTENT, ED_DRAWING_ID_BD_EXPANDING_WALL_LOOKS_LIKE, ED_DRAWING_ID_BD_SAND_LOOKS_LIKE, + ED_DRAWING_ID_BD_ROCK_TURNS_TO_ON_FALLING, + ED_DRAWING_ID_BD_ROCK_TURNS_TO_ON_IMPACT, + ED_DRAWING_ID_BD_DIAMOND_TURNS_TO_ON_FALLING, + ED_DRAWING_ID_BD_DIAMOND_TURNS_TO_ON_IMPACT, + ED_DRAWING_ID_BD_FIREFLY_EXPLODES_TO, + ED_DRAWING_ID_BD_FIREFLY_2_EXPLODES_TO, + ED_DRAWING_ID_BD_BUTTERFLY_EXPLODES_TO, + ED_DRAWING_ID_BD_BUTTERFLY_2_EXPLODES_TO, + ED_DRAWING_ID_BD_STONEFLY_EXPLODES_TO, + ED_DRAWING_ID_BD_DRAGONFLY_EXPLODES_TO, + ED_DRAWING_ID_BD_DIAMOND_BIRTH_TURNS_TO, + ED_DRAWING_ID_BD_BOMB_EXPLOSION_TURNS_TO, + ED_DRAWING_ID_BD_NITRO_EXPLOSION_TURNS_TO, + ED_DRAWING_ID_BD_EXPLOSION_TURNS_TO, ED_DRAWING_ID_START_ELEMENT, ED_DRAWING_ID_ARTWORK_ELEMENT, ED_DRAWING_ID_EXPLOSION_ELEMENT, @@ -1282,6 +1384,10 @@ enum #define ED_MODE_LEVELCONFIG_EDITOR ED_TEXTBUTTON_ID_LEVELCONFIG_EDITOR #define ED_MODE_LEVELCONFIG_ENGINE ED_TEXTBUTTON_ID_LEVELCONFIG_ENGINE +// sub-screens in the engine settings section +#define ED_MODE_ENGINECONFIG_CONFIG ED_TEXTBUTTON_ID_ENGINECONFIG_CONFIG +#define ED_MODE_ENGINECONFIG_COLORS ED_TEXTBUTTON_ID_ENGINECONFIG_COLORS + // sub-screens in the element properties section #define ED_MODE_PROPERTIES_INFO ED_TEXTBUTTON_ID_PROPERTIES_INFO #define ED_MODE_PROPERTIES_CONFIG ED_TEXTBUTTON_ID_PROPERTIES_CONFIG @@ -1621,7 +1727,7 @@ static struct }, { ED_COUNTER_ID_BD_CYCLE_DELAY_MS, - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(3), + ED_ENGINE_SETTINGS_XPOS(0), ED_ENGINE_SETTINGS_YPOS(3), 50, 500, GADGET_ID_BD_CYCLE_DELAY_MS_DOWN, GADGET_ID_BD_CYCLE_DELAY_MS_UP, GADGET_ID_BD_CYCLE_DELAY_MS_TEXT, GADGET_ID_NONE, @@ -1630,7 +1736,7 @@ static struct }, { ED_COUNTER_ID_BD_CYCLE_DELAY_C64, - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(3), + ED_ENGINE_SETTINGS_XPOS(0), ED_ENGINE_SETTINGS_YPOS(3), 0, 32, GADGET_ID_BD_CYCLE_DELAY_C64_DOWN, GADGET_ID_BD_CYCLE_DELAY_C64_UP, GADGET_ID_BD_CYCLE_DELAY_C64_TEXT, GADGET_ID_NONE, @@ -1639,7 +1745,7 @@ static struct }, { ED_COUNTER_ID_BD_HATCHING_DELAY_CYCLES, - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(4), + ED_ENGINE_SETTINGS_XPOS(0), ED_ENGINE_SETTINGS_YPOS(4), 1, 40, GADGET_ID_BD_HATCHING_DELAY_CYCLES_DOWN, GADGET_ID_BD_HATCHING_DELAY_CYCLES_UP, GADGET_ID_BD_HATCHING_DELAY_CYCLES_TEXT, GADGET_ID_NONE, @@ -1648,22 +1754,13 @@ static struct }, { ED_COUNTER_ID_BD_HATCHING_DELAY_SECONDS, - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(4), + ED_ENGINE_SETTINGS_XPOS(0), ED_ENGINE_SETTINGS_YPOS(4), 1, 40, 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)" }, - { - ED_COUNTER_ID_BD_CREATURES_AUTO_TURN_DELAY, - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(12), - 0, 999, - GADGET_ID_BD_CREATURES_AUTO_TURN_DELAY_DOWN, GADGET_ID_BD_CREATURES_AUTO_TURN_DELAY_UP, - GADGET_ID_BD_CREATURES_AUTO_TURN_DELAY_TEXT, GADGET_ID_NONE, - &level.bd_creatures_auto_turn_delay, - NULL, NULL, "Creatures auto turn delay" - }, // ---------- element settings: configure (various elements) ---------------- @@ -1967,7 +2064,7 @@ static struct int gadget_id; int size; char *value; - char *text_above, *infotext; + char *text_above, *text_left, *text_right, *infotext; } textinput_info[ED_NUM_TEXTINPUT] = { { @@ -1976,7 +2073,7 @@ static struct GADGET_ID_LEVEL_NAME, MAX_LEVEL_NAME_LEN, level.name, - "Title:", "Title for this level" + "Title:", NULL, NULL, "Enter title for this level" }, { ED_TEXTINPUT_ID_LEVEL_AUTHOR, @@ -1984,7 +2081,7 @@ static struct GADGET_ID_LEVEL_AUTHOR, MAX_LEVEL_AUTHOR_LEN, level.author, - "Author:", "Author for this level" + "Author:", NULL, NULL, "Enter author for this level" }, { ED_TEXTINPUT_ID_LEVELSET_NAME, @@ -1992,7 +2089,7 @@ static struct GADGET_ID_LEVELSET_NAME, MAX_LEVEL_NAME_LEN, levelset_name, - "Title:", "Title for this or new level set" + "Title:", NULL, NULL, "Enter title for this or new level set" }, { ED_TEXTINPUT_ID_LEVELSET_AUTHOR, @@ -2000,7 +2097,7 @@ static struct GADGET_ID_LEVELSET_AUTHOR, MAX_LEVEL_AUTHOR_LEN, levelset_author, - "Author:", "Author for this or new level set" + "Author:", NULL, NULL, "Enter author for this or new level set" }, { ED_TEXTINPUT_ID_ELEMENT_NAME, @@ -2008,7 +2105,7 @@ static struct GADGET_ID_ELEMENT_NAME, MAX_ELEMENT_NAME_LEN - 2, // currently 2 chars less editable custom_element.description, - NULL, "Element name" + NULL, NULL, NULL, "Enter element name" } }; @@ -2067,6 +2164,16 @@ static struct ValueTextInfo options_levelset_save_mode[] = { -1, NULL } }; +static struct ValueTextInfo options_bd_gravity_direction[] = +{ + { GD_MV_DOWN, "down" }, + { GD_MV_UP, "up" }, + { GD_MV_LEFT, "left" }, + { GD_MV_RIGHT, "right" }, + + { -1, NULL } +}; + static struct ValueTextInfo options_wind_direction[] = { { MV_START_NONE, "none" }, @@ -2824,15 +2931,6 @@ static struct &level.game_engine_type, NULL, "Game engine:", NULL, "Select game engine" }, - { - ED_SELECTBOX_ID_BD_SCHEDULING_TYPE, - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(1), - GADGET_ID_BD_SCHEDULING_TYPE, GADGET_ID_NONE, - -1, - options_bd_scheduling_type, - &level.bd_scheduling_type, - NULL, "Scheduling type:", NULL, "Select level timing" - }, { ED_SELECTBOX_ID_LEVELSET_SAVE_MODE, ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(10), @@ -2843,6 +2941,20 @@ static struct "Action:", NULL, NULL, "Select action when saving level set" }, + // ---------- engine settings: config --------------------------------------- + + { + ED_SELECTBOX_ID_BD_SCHEDULING_TYPE, + ED_ENGINE_SETTINGS_XPOS(0), ED_ENGINE_SETTINGS_YPOS(1), + GADGET_ID_BD_SCHEDULING_TYPE, GADGET_ID_NONE, + -1, + options_bd_scheduling_type, + &level.bd_scheduling_type, + NULL, "Scheduling type:", NULL, "Select level timing" + }, + + // ---------- engine settings: colors --------------------------------------- + // ---------- element settings: configure (several elements) ---------------- { @@ -2863,6 +2975,15 @@ static struct &level.initial_player_stepsize[0], NULL, "Initial player speed:", NULL, "Select initial player speed" }, + { + ED_SELECTBOX_ID_BD_GRAVITY_DIRECTION, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(0), + GADGET_ID_BD_GRAVITY_DIRECTION, GADGET_ID_NONE, + -1, + options_bd_gravity_direction, + &level.bd_gravity_direction, + NULL, "Gravity direction:", NULL, "Select initial gravity direction" + }, { ED_SELECTBOX_ID_MM_BALL_CHOICE_MODE, ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(4), @@ -3153,7 +3274,24 @@ static struct -1, -1, GADGET_ID_LEVELCONFIG_ENGINE, GADGET_ID_LEVELCONFIG_EDITOR, 8, "Engine", - NULL, NULL, NULL, "Configure engine settings" + NULL, NULL, NULL, "Configure game engine settings" + }, + + // ---------- engine settings (tabs) ---------------------------------------- + + { + ED_TEXTBUTTON_ID_ENGINECONFIG_CONFIG, + ED_ENGINE_TABS_XPOS(0), ED_ENGINE_TABS_YPOS(0), + GADGET_ID_ENGINECONFIG_CONFIG, GADGET_ID_NONE, + 8, "Config", + NULL, NULL, NULL, "Configure game engine settings" + }, + { + ED_TEXTBUTTON_ID_ENGINECONFIG_COLORS, + -1, -1, + GADGET_ID_ENGINECONFIG_COLORS, GADGET_ID_ENGINECONFIG_CONFIG, + 8, "Colors", + NULL, NULL, NULL, "Configure game engine colors" }, // ---------- element settings (tabs) --------------------------------------- @@ -3470,7 +3608,7 @@ static struct }, { ED_CHECKBUTTON_ID_BD_INTERMISSION, - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(0), + ED_ENGINE_SETTINGS_XPOS(0), ED_ENGINE_SETTINGS_YPOS(0), GADGET_ID_BD_INTERMISSION, GADGET_ID_NONE, &level.bd_intermission, "Boulder Dash game engine settings:", NULL, @@ -3478,7 +3616,7 @@ static struct }, { ED_CHECKBUTTON_ID_BD_PAL_TIMING, - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(2), + ED_ENGINE_SETTINGS_XPOS(0), ED_ENGINE_SETTINGS_YPOS(2), GADGET_ID_BD_PAL_TIMING, GADGET_ID_NONE, &level.bd_pal_timing, NULL, NULL, @@ -3486,7 +3624,7 @@ static struct }, { ED_CHECKBUTTON_ID_BD_LINE_SHIFTING_BORDERS, - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(6), + ED_ENGINE_SETTINGS_XPOS(0), ED_ENGINE_SETTINGS_YPOS(6), GADGET_ID_BD_LINE_SHIFTING_BORDERS, GADGET_ID_NONE, &level.bd_line_shifting_borders, "Compatibility settings:", NULL, @@ -3494,7 +3632,7 @@ static struct }, { ED_CHECKBUTTON_ID_BD_SCAN_FIRST_AND_LAST_ROW, - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(7), + ED_ENGINE_SETTINGS_XPOS(0), ED_ENGINE_SETTINGS_YPOS(7), GADGET_ID_BD_SCAN_FIRST_AND_LAST_ROW, GADGET_ID_NONE, &level.bd_scan_first_and_last_row, NULL, NULL, @@ -3502,36 +3640,12 @@ static struct }, { ED_CHECKBUTTON_ID_BD_SHORT_EXPLOSIONS, - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(8), + ED_ENGINE_SETTINGS_XPOS(0), ED_ENGINE_SETTINGS_YPOS(8), GADGET_ID_BD_SHORT_EXPLOSIONS, GADGET_ID_NONE, &level.bd_short_explosions, NULL, NULL, "Short explosions", "Use four game cycles for explosions" }, - { - ED_CHECKBUTTON_ID_BD_GRAVITY_AFFECTS_ALL, - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(9), - GADGET_ID_BD_GRAVITY_AFFECTS_ALL, GADGET_ID_NONE, - &level.bd_gravity_affects_all, - NULL, NULL, - "Gravity change affects everything", "Gravity affects all falling objects" - }, - { - ED_CHECKBUTTON_ID_BD_CREATURES_START_BACKWARDS, - ED_ELEMENT_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(10), - GADGET_ID_BD_CREATURES_START_BACKWARDS, GADGET_ID_NONE, - &level.bd_creatures_start_backwards, - NULL, NULL, - "Creatures start moving backwards", "Creatures start in opposite direction" - }, - { - ED_CHECKBUTTON_ID_BD_CREATURES_TURN_ON_HATCHING, - ED_ELEMENT_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(11), - GADGET_ID_BD_CREATURES_TURN_ON_HATCHING, GADGET_ID_NONE, - &level.bd_creatures_turn_on_hatching, - NULL, NULL, - "Creatures turn on hatching", "Creatures change direction on hatching" - }, // ---------- element settings: configure (various elements) ---------------- @@ -3808,8 +3922,16 @@ static struct "Mega rocks pushable with sweet", "Push mega rocks after eating sweet" }, { - ED_CHECKBUTTON_ID_BD_MAGIC_WALL_WAIT_HATCHING, + ED_CHECKBUTTON_ID_BD_MAGIC_WALL_ZERO_INFINITE, ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(2), + GADGET_ID_BD_MAGIC_WALL_ZERO_INFINITE, GADGET_ID_NONE, + &level.bd_magic_wall_zero_infinite, + NULL, NULL, + "Run forever if duration is zero", "Run infinitely if timer is zero" + }, + { + ED_CHECKBUTTON_ID_BD_MAGIC_WALL_WAIT_HATCHING, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(3), GADGET_ID_BD_MAGIC_WALL_WAIT_HATCHING, GADGET_ID_NONE, &level.bd_magic_wall_wait_hatching, NULL, NULL, @@ -3817,11 +3939,19 @@ static struct }, { ED_CHECKBUTTON_ID_BD_MAGIC_WALL_STOPS_AMOEBA, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(3), + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(4), 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" + "Stop amoeba and turn to diamonds", "Activation changes amoeba to diamonds" + }, + { + ED_CHECKBUTTON_ID_BD_MAGIC_WALL_BREAK_SCAN, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(5), + GADGET_ID_BD_MAGIC_WALL_BREAK_SCAN, GADGET_ID_NONE, + &level.bd_magic_wall_break_scan, + NULL, NULL, + "Emulate amoeba bug in BD1", "Use buggy BD1 behavior" }, { ED_CHECKBUTTON_ID_BD_AMOEBA_WAIT_FOR_HATCHING, @@ -3935,6 +4065,46 @@ static struct NULL, NULL, "Hammered walls reappear", "Hammered walls reappear after delay" }, + { + ED_CHECKBUTTON_ID_BD_INFINITE_ROCKETS, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(0), + GADGET_ID_BD_INFINITE_ROCKETS, GADGET_ID_NONE, + &level.bd_infinite_rockets, + NULL, NULL, + "Infinite rockets", "Rocket launcher has infinite rockets" + }, + { + ED_CHECKBUTTON_ID_BD_CREATURES_START_BACKWARDS, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(0), + GADGET_ID_BD_CREATURES_START_BACKWARDS, GADGET_ID_NONE, + &level.bd_creatures_start_backwards, + NULL, NULL, + "Creatures start moving backwards", "Creatures start in opposite direction" + }, + { + ED_CHECKBUTTON_ID_BD_CREATURES_TURN_ON_HATCHING, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(2), + GADGET_ID_BD_CREATURES_TURN_ON_HATCHING, GADGET_ID_NONE, + &level.bd_creatures_turn_on_hatching, + NULL, NULL, + "Creatures auto turn on hatching", "Creatures change direction on hatching" + }, + { + ED_CHECKBUTTON_ID_BD_GRAVITY_SWITCH_ACTIVE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1), + GADGET_ID_BD_GRAVITY_SWITCH_ACTIVE, GADGET_ID_NONE, + &level.bd_gravity_switch_active, + NULL, NULL, + "Gravity switch active at start", "Gravity switch starts in active state" + }, + { + ED_CHECKBUTTON_ID_BD_GRAVITY_AFFECTS_ALL, + ED_LEVEL_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(3), + 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" + }, { ED_CHECKBUTTON_ID_ENVELOPE_AUTOWRAP, ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1), @@ -4421,7 +4591,7 @@ static struct { ED_DRAWING_ID_BD_MAGIC_WALL_DIAMOND_TO, - ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(4), + ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(6), ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF, GADGET_ID_BD_MAGIC_WALL_DIAMOND_TO, GADGET_ID_NONE, &level.bd_magic_wall_diamond_to, 1, 1, @@ -4429,7 +4599,7 @@ static struct }, { ED_DRAWING_ID_BD_MAGIC_WALL_ROCK_TO, - ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(5), + ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(7), ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF, GADGET_ID_BD_MAGIC_WALL_ROCK_TO, GADGET_ID_NONE, &level.bd_magic_wall_rock_to, 1, 1, @@ -4437,7 +4607,7 @@ static struct }, { ED_DRAWING_ID_BD_MAGIC_WALL_MEGA_ROCK_TO, - ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(6), + ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(8), ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF, GADGET_ID_BD_MAGIC_WALL_MEGA_ROCK_TO, GADGET_ID_NONE, &level.bd_magic_wall_mega_rock_to, 1, 1, @@ -4445,7 +4615,7 @@ static struct }, { ED_DRAWING_ID_BD_MAGIC_WALL_NUT_TO, - ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(7), + ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(9), ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF, GADGET_ID_BD_MAGIC_WALL_NUT_TO, GADGET_ID_NONE, &level.bd_magic_wall_nut_to, 1, 1, @@ -4453,7 +4623,7 @@ static struct }, { ED_DRAWING_ID_BD_MAGIC_WALL_NITRO_PACK_TO, - ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(8), + ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(10), ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF, GADGET_ID_BD_MAGIC_WALL_NITRO_PACK_TO, GADGET_ID_NONE, &level.bd_magic_wall_nitro_pack_to, 1, 1, @@ -4461,7 +4631,7 @@ static struct }, { ED_DRAWING_ID_BD_MAGIC_WALL_FLYING_DIAMOND_TO, - ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(9), + ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(11), ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF, GADGET_ID_BD_MAGIC_WALL_FLYING_DIAMOND_TO, GADGET_ID_NONE, &level.bd_magic_wall_flying_diamond_to, 1, 1, @@ -4469,7 +4639,7 @@ static struct }, { ED_DRAWING_ID_BD_MAGIC_WALL_FLYING_ROCK_TO, - ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(10), + ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(12), ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF, GADGET_ID_BD_MAGIC_WALL_FLYING_ROCK_TO, GADGET_ID_NONE, &level.bd_magic_wall_flying_rock_to, 1, 1, @@ -4633,6 +4803,118 @@ static struct &level.bd_sand_looks_like, 1, 1, "Use graphic of element:", NULL, NULL, NULL, "Sand looks like this element" }, + { + ED_DRAWING_ID_BD_ROCK_TURNS_TO_ON_FALLING, + 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_ROCK_TURNS_TO_ON_FALLING, GADGET_ID_NONE, + &level.bd_rock_turns_to_on_falling, 1, 1, + "Turns to when falling:", NULL, NULL, NULL, "Changes to this when falling starts" + }, + { + ED_DRAWING_ID_BD_ROCK_TURNS_TO_ON_IMPACT, + 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_ROCK_TURNS_TO_ON_IMPACT, GADGET_ID_NONE, + &level.bd_rock_turns_to_on_impact, 1, 1, + "Turns to on impact:", NULL, NULL, NULL, "Changes to this when falling stops" + }, + { + ED_DRAWING_ID_BD_DIAMOND_TURNS_TO_ON_FALLING, + 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_DIAMOND_TURNS_TO_ON_FALLING, GADGET_ID_NONE, + &level.bd_diamond_turns_to_on_falling, 1, 1, + "Turns to when falling:", NULL, NULL, NULL, "Changes to this when falling starts" + }, + { + ED_DRAWING_ID_BD_DIAMOND_TURNS_TO_ON_IMPACT, + 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_DIAMOND_TURNS_TO_ON_IMPACT, GADGET_ID_NONE, + &level.bd_diamond_turns_to_on_impact, 1, 1, + "Turns to on impact:", NULL, NULL, NULL, "Changes to this when falling stops" + }, + { + ED_DRAWING_ID_BD_FIREFLY_EXPLODES_TO, + ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(0), + ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF, + GADGET_ID_BD_FIREFLY_EXPLODES_TO, GADGET_ID_NONE, + &level.bd_firefly_explodes_to, 1, 1, + "Explodes to:", NULL, NULL, NULL, "Changes to this when exploding" + }, + { + ED_DRAWING_ID_BD_FIREFLY_2_EXPLODES_TO, + ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(0), + ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF, + GADGET_ID_BD_FIREFLY_2_EXPLODES_TO, GADGET_ID_NONE, + &level.bd_firefly_2_explodes_to, 1, 1, + "Explodes to:", NULL, NULL, NULL, "Changes to this when exploding" + }, + { + ED_DRAWING_ID_BD_BUTTERFLY_EXPLODES_TO, + ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(0), + ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF, + GADGET_ID_BD_BUTTERFLY_EXPLODES_TO, GADGET_ID_NONE, + &level.bd_butterfly_explodes_to, 1, 1, + "Explodes to:", NULL, NULL, NULL, "Changes to this when exploding" + }, + { + ED_DRAWING_ID_BD_BUTTERFLY_2_EXPLODES_TO, + ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(0), + ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF, + GADGET_ID_BD_BUTTERFLY_2_EXPLODES_TO, GADGET_ID_NONE, + &level.bd_butterfly_2_explodes_to, 1, 1, + "Explodes to:", NULL, NULL, NULL, "Changes to this when exploding" + }, + { + ED_DRAWING_ID_BD_STONEFLY_EXPLODES_TO, + ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(0), + ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF, + GADGET_ID_BD_STONEFLY_EXPLODES_TO, GADGET_ID_NONE, + &level.bd_stonefly_explodes_to, 1, 1, + "Explodes to:", NULL, NULL, NULL, "Changes to this when exploding" + }, + { + ED_DRAWING_ID_BD_DRAGONFLY_EXPLODES_TO, + ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(0), + ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF, + GADGET_ID_BD_DRAGONFLY_EXPLODES_TO, GADGET_ID_NONE, + &level.bd_dragonfly_explodes_to, 1, 1, + "Explodes to:", NULL, NULL, NULL, "Changes to this when exploding" + }, + { + ED_DRAWING_ID_BD_DIAMOND_BIRTH_TURNS_TO, + 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_DIAMOND_BIRTH_TURNS_TO, GADGET_ID_NONE, + &level.bd_diamond_birth_turns_to, 1, 1, + "Explosion ends in:", NULL, NULL, NULL, "Changes to this after explosion" + }, + { + ED_DRAWING_ID_BD_BOMB_EXPLOSION_TURNS_TO, + ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(0), + ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF, + GADGET_ID_BD_BOMB_EXPLOSION_TURNS_TO, GADGET_ID_NONE, + &level.bd_bomb_explosion_turns_to, 1, 1, + "Explosion ends in:", NULL, NULL, NULL, "Changes to this after explosion" + }, + { + ED_DRAWING_ID_BD_NITRO_EXPLOSION_TURNS_TO, + ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(0), + ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF, + GADGET_ID_BD_NITRO_EXPLOSION_TURNS_TO, GADGET_ID_NONE, + &level.bd_nitro_explosion_turns_to, 1, 1, + "Explosion ends in:", NULL, NULL, NULL, "Changes to this after explosion" + }, + { + ED_DRAWING_ID_BD_EXPLOSION_TURNS_TO, + 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_EXPLOSION_TURNS_TO, GADGET_ID_NONE, + &level.bd_explosion_turns_to, 1, 1, + "Explosion ends in:", NULL, NULL, NULL, "Changes to this after explosion" + }, // ---------- level start element ------------------------------------------- @@ -4902,6 +5184,7 @@ static int redo_buffer_steps = 0; static int edit_mode; static int edit_mode_levelconfig; +static int edit_mode_engineconfig; static int edit_mode_properties; static int element_shift = 0; @@ -4971,9 +5254,9 @@ static int editor_el_boulderdash_native[] = EL_BD_ROCK, EL_BD_DIAMOND, + EL_BD_INBOX, EL_BD_STEELWALL, EL_BD_WALL, - EL_BD_SAND_2, EL_BD_MAGIC_WALL, EL_BD_AMOEBA, @@ -4986,7 +5269,7 @@ static int editor_el_boulderdash_native[] = EL_BD_BUTTERFLY_RIGHT, EL_BD_FIREFLY_RIGHT, - EL_BD_INBOX, + EL_BD_SAND_2, EL_BD_BUTTERFLY_DOWN, EL_BD_FIREFLY_DOWN, EL_BD_EXIT_OPEN, @@ -5074,7 +5357,7 @@ static int editor_el_boulderdash_native[] = EL_BD_EXPANDABLE_WALL_HORIZONTAL, EL_BD_EXPANDABLE_WALL_VERTICAL, EL_BD_EXPANDABLE_WALL_ANY, - EL_BD_EXPANDABLE_WALL_SWITCH_HORIZONTAL, + EL_BD_EXPANDABLE_WALL_SWITCH, EL_BD_EXPANDABLE_STEELWALL_HORIZONTAL, EL_BD_EXPANDABLE_STEELWALL_VERTICAL, @@ -5089,7 +5372,7 @@ static int editor_el_boulderdash_native[] = EL_BD_CONVEYOR_LEFT, EL_BD_CONVEYOR_RIGHT, EL_BD_CONVEYOR_SWITCH, - EL_BD_CONVEYOR_DIR_SWITCH_NORMAL, + EL_BD_CONVEYOR_DIR_SWITCH, EL_BD_CLOCK, EL_BD_TIME_PENALTY, @@ -5123,8 +5406,13 @@ static int editor_el_boulderdash_native[] = EL_BD_PLAYER, EL_BD_PLAYER_WITH_BOMB, + EL_BD_PLAYER_WITH_ROCKET_LAUNCHER, + EL_BD_ROCKET_LAUNCHER, + EL_BD_PLAYER_GLUED, EL_BD_PLAYER_STIRRING, + EL_EMPTY, + EL_EMPTY, }; static int *editor_hl_boulderdash_native_ptr = editor_hl_boulderdash_native; static int *editor_el_boulderdash_native_ptr = editor_el_boulderdash_native; @@ -8131,7 +8419,11 @@ static void CreateTextInputGadgets(void) y = ED_SETTINGS_Y(textinput_info[i].y); } - sprintf(infotext, "Enter %s", textinput_info[i].infotext); + // determine horizontal offset for leading text + if (textinput_info[i].text_left != NULL) + x += getTextWidthForGadget(textinput_info[i].text_left); + + sprintf(infotext, "%s", textinput_info[i].infotext); infotext[max_infotext_len] = '\0'; gi = CreateGadget(GDI_CUSTOM_ID, id, @@ -8306,6 +8598,7 @@ static void CreateTextbuttonGadgets(void) int type_id = textbutton_info[i].gadget_type_id; int is_tab_button = ((id >= GADGET_ID_LEVELCONFIG_LEVEL && id <= GADGET_ID_LEVELCONFIG_ENGINE) || + (id >= GADGET_ID_ENGINECONFIG_CONFIG && id <= GADGET_ID_ENGINECONFIG_COLORS) || (id >= GADGET_ID_PROPERTIES_INFO && id <= GADGET_ID_PROPERTIES_CHANGE)); int graphic = (is_tab_button ? IMG_EDITOR_TABBUTTON : IMG_EDITOR_TEXTBUTTON); @@ -8881,12 +9174,23 @@ static void MapTextInputGadget(int id) int font_nr = FONT_TEXT_1; int font_height = getFontHeight(font_nr); struct GadgetInfo *gi = level_editor_gadget[textinput_info[id].gadget_id]; + int xoffset_left = getTextWidthForGadget(textinput_info[id].text_left); + int xoffset_right = ED_GADGET_TEXT_DISTANCE; int yoffset_above = font_height + ED_GADGET_LINE_DISTANCE; - int x_above = ED_SETTINGS_X(textinput_info[id].x); - int y_above = ED_SETTINGS_Y(textinput_info[id].y) - yoffset_above; + int yoffset = (gi->height - font_height) / 2; + int x_left = gi->x - xoffset_left; + int x_right = gi->x + gi->width + xoffset_right; + int y_above = gi->y - yoffset_above; + int y = gi->y + yoffset; if (textinput_info[id].text_above) - DrawTextS(x_above, y_above, font_nr, textinput_info[id].text_above); + DrawText(x_left, y_above, textinput_info[id].text_above, font_nr); + + if (textinput_info[id].text_left) + DrawText(x_left, y, textinput_info[id].text_left, font_nr); + + if (textinput_info[id].text_right) + DrawText(x_right, y, textinput_info[id].text_right, font_nr); ModifyGadget(gi, GDI_TEXT_VALUE, textinput_info[id].value, GDI_END); @@ -8926,11 +9230,10 @@ static void MapSelectboxGadget(int id) int x_left = gi->x - xoffset_left; int x_right = gi->x + gi->width + xoffset_right; int y_above = gi->y - yoffset_above; - int x = gi->x; int y = gi->y + yoffset; if (selectbox_info[id].text_above) - DrawText(x, y_above, selectbox_info[id].text_above, font_nr); + DrawText(x_left, y_above, selectbox_info[id].text_above, font_nr); if (selectbox_info[id].text_left) DrawText(x_left, y, selectbox_info[id].text_left, font_nr); @@ -10223,6 +10526,7 @@ void DrawLevelEd(void) { edit_mode = ED_MODE_DRAWING; edit_mode_levelconfig = ED_MODE_LEVELCONFIG_LEVEL; + edit_mode_engineconfig = ED_MODE_ENGINECONFIG_CONFIG; edit_mode_properties = ED_MODE_PROPERTIES_INFO; ResetUndoBuffer(); @@ -10613,6 +10917,39 @@ static Pixel getTabulatorBarColor(void) return GetPixel(gd->bitmap, gd_x, gd_y); } +static void DrawEngineConfigTabulatorGadgets(void) +{ + struct GadgetInfo *gd_gi1 = level_editor_gadget[GADGET_ID_ENGINECONFIG_CONFIG]; + Pixel tab_color = getTabulatorBarColor(); + int id_first = ED_TEXTBUTTON_ID_ENGINECONFIG_CONFIG; + int id_last = ED_TEXTBUTTON_ID_ENGINECONFIG_COLORS; + int i; + + for (i = id_first; i <= id_last; i++) + { + int gadget_id = textbutton_info[i].gadget_id; + struct GadgetInfo *gi = level_editor_gadget[gadget_id]; + boolean active = (i != edit_mode_engineconfig); + + // draw background line below tabulator button + ClearRectangleOnBackground(drawto, gi->x, gi->y + gi->height, gi->width, 1); + + // draw solid line below inactive tabulator buttons + if (!active && tab_color != BLACK_PIXEL) // black => transparent + FillRectangle(drawto, gi->x, gi->y + gi->height, gi->width, + ED_GADGET_TINY_DISTANCE, tab_color); + + ModifyGadget(gi, GDI_ACTIVE, active, GDI_END); + MapTextbuttonGadget(i); + } + + // draw little border line below tabulator buttons + if (tab_color != BLACK_PIXEL) // black => transparent + FillRectangle(drawto, gd_gi1->x, gd_gi1->y + gd_gi1->height + + ED_GADGET_TINY_DISTANCE, + getTabulatorBarWidth(), getTabulatorBarHeight(), tab_color); +} + static void DrawLevelConfigTabulatorGadgets(void) { struct GadgetInfo *gd_gi1 = level_editor_gadget[GADGET_ID_LEVELCONFIG_LEVEL]; @@ -10648,6 +10985,10 @@ static void DrawLevelConfigTabulatorGadgets(void) FillRectangle(drawto, gd_gi1->x, gd_gi1->y + gd_gi1->height + ED_GADGET_TINY_DISTANCE, getTabulatorBarWidth(), getTabulatorBarHeight(), tab_color); + + // draw second row of engine related tabulators when using native BD engine + if (edit_mode_levelconfig == ED_MODE_LEVELCONFIG_ENGINE) + DrawEngineConfigTabulatorGadgets(); } static void DrawPropertiesTabulatorGadgets(void) @@ -10821,7 +11162,7 @@ static void DrawLevelConfigEditor(void) MapTextbuttonGadget(ED_TEXTBUTTON_ID_SAVE_AS_TEMPLATE_2); } -static void DrawLevelConfigEngine(void) +static void DrawEngineConfigConfig(void) { int i; @@ -10837,8 +11178,6 @@ static void DrawLevelConfigEngine(void) MapCounterButtons(ED_COUNTER_ID_BD_HATCHING_DELAY_SECONDS); } - MapCounterButtons(ED_COUNTER_ID_BD_CREATURES_AUTO_TURN_DELAY); - // draw checkbutton gadgets for (i = ED_CHECKBUTTON_ID_ENGINE_FIRST; i <= ED_CHECKBUTTON_ID_ENGINE_LAST; i++) MapCheckbuttonGadget(i); @@ -10848,6 +11187,19 @@ static void DrawLevelConfigEngine(void) MapSelectboxGadget(i); } +static void DrawEngineConfigColors(void) +{ + // (no settings yet) +} + +static void DrawLevelConfigEngine(void) +{ + if (edit_mode_engineconfig == ED_MODE_ENGINECONFIG_CONFIG) + DrawEngineConfigConfig(); + else if (edit_mode_engineconfig == ED_MODE_ENGINECONFIG_COLORS) + DrawEngineConfigColors(); +} + static void DrawLevelConfigWindow(void) { char *text = "Global Settings"; @@ -11356,6 +11708,8 @@ static void DrawPropertiesInfo(void) #define TEXT_HAMMER_REAPPEAR_DELAY "Delay for reappearing walls" #define TEXT_SKELETONS_NEEDED "Skeletons needed to use pot" #define TEXT_SKELETONS_WORTH "Counts as this many diamonds" +#define TEXT_AUTO_TURN_DELAY "Creatures auto turn delay" +#define TEXT_GRAVITY_DELAY "Gravity switch change delay" static struct { @@ -11502,6 +11856,9 @@ static struct 0, 50 }, { EL_BD_SKELETON, &level.bd_skeleton_worth_num_diamonds, TEXT_SKELETONS_WORTH, 0, 10 }, + { EL_BD_CREATURE_SWITCH, &level.bd_creatures_auto_turn_delay, TEXT_AUTO_TURN_DELAY }, + { EL_BD_GRAVITY_SWITCH, &level.bd_gravity_switch_delay, TEXT_GRAVITY_DELAY, + 1, 60 }, { 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 }, @@ -11554,6 +11911,12 @@ static boolean checkPropertiesConfig(int element) IS_DF_LASER(element) || IS_PLAYER_ELEMENT(element) || IS_BD_PLAYER_ELEMENT(element) || + IS_BD_FIREFLY(properties_element) || + IS_BD_FIREFLY_2(properties_element) || + IS_BD_BUTTERFLY(properties_element) || + IS_BD_BUTTERFLY_2(properties_element) || + IS_BD_STONEFLY(properties_element) || + IS_BD_DRAGONFLY(properties_element) || IS_BD_EXPANDABLE_WALL(properties_element) || IS_BD_EXPANDABLE_STEELWALL(properties_element) || IS_BD_CONVEYOR_BELT(properties_element) || @@ -11566,9 +11929,13 @@ static boolean checkPropertiesConfig(int element) element == EL_BD_SAND || element == EL_BD_ROCK || element == EL_BD_MEGA_ROCK || + element == EL_BD_BOMB || + element == EL_BD_ROCKET_LAUNCHER || + element == EL_BD_NITRO_PACK || element == EL_BD_SWEET || element == EL_BD_VOODOO_DOLL || - element == EL_BD_WATER) + element == EL_BD_WATER || + element == EL_BD_GRAVITY_SWITCH) { return TRUE; } @@ -11675,6 +12042,14 @@ static void DrawPropertiesConfig(void) level.game_engine_type != GAME_ENGINE_TYPE_BD) continue; + // special case: score for smashing only available in R'n'D game engine + if ((IS_BD_FIREFLY(elements_with_counter[i].element) || + IS_BD_BUTTERFLY(elements_with_counter[i].element)) && + (elements_with_counter[i].value == &level.score[SC_BUG] || + elements_with_counter[i].value == &level.score[SC_SPACESHIP]) && + 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 && @@ -11692,6 +12067,8 @@ static void DrawPropertiesConfig(void) (properties_element == EL_BD_SLIME ? 1 : 0) + (properties_element == EL_BD_ACID ? 1 : 0) + (properties_element == EL_BD_REPLICATOR ? 1 : 0) + + (properties_element == EL_BD_CREATURE_SWITCH ? 1 : 0) + + (properties_element == EL_BD_GRAVITY_SWITCH ? 2 : 0) + (properties_element == EL_EMC_MAGIC_BALL ? 2 : 0) + num_element_counters); @@ -11729,8 +12106,10 @@ static void DrawPropertiesConfig(void) // draw stickybutton gadget MapCheckbuttonGadget(ED_CHECKBUTTON_ID_STICK_ELEMENT); + MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_MAGIC_WALL_ZERO_INFINITE); MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_MAGIC_WALL_WAIT_HATCHING); MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_MAGIC_WALL_STOPS_AMOEBA); + MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_MAGIC_WALL_BREAK_SCAN); MapDrawingArea(ED_DRAWING_ID_BD_MAGIC_WALL_DIAMOND_TO); MapDrawingArea(ED_DRAWING_ID_BD_MAGIC_WALL_ROCK_TO); @@ -11766,7 +12145,9 @@ static void DrawPropertiesConfig(void) MapDrawingArea(ED_DRAWING_ID_BD_AMOEBA_2_CONTENT_LOOKS_LIKE); } else if (IS_AMOEBOID(properties_element)) + { MapDrawingArea(ED_DRAWING_ID_AMOEBA_CONTENT); + } else if (properties_element == EL_BD_ACID) { MapDrawingArea(ED_DRAWING_ID_BD_ACID_EATS_ELEMENT); @@ -11785,7 +12166,9 @@ static void DrawPropertiesConfig(void) properties_element == EL_YAMYAM_RIGHT || properties_element == EL_YAMYAM_UP || properties_element == EL_YAMYAM_DOWN) + { DrawYamYamContentAreas(); + } else if (properties_element == EL_EMC_MAGIC_BALL) { DrawMagicBallContentAreas(); @@ -11794,7 +12177,9 @@ static void DrawPropertiesConfig(void) MapCheckbuttonGadget(ED_CHECKBUTTON_ID_INITIAL_BALL_ACTIVE); } else if (properties_element == EL_EMC_ANDROID) + { DrawAndroidElementArea(); + } else if (properties_element == EL_MM_GRAY_BALL) { MapCounterButtons(ED_COUNTER_ID_MM_BALL_CONTENT); @@ -11915,6 +12300,56 @@ static void DrawPropertiesConfig(void) MapCounterButtons(ED_COUNTER_ID_BD_PUSHING_PROB); MapCounterButtons(ED_COUNTER_ID_BD_PUSHING_PROB_WITH_SWEET); + + MapDrawingArea(ED_DRAWING_ID_BD_ROCK_TURNS_TO_ON_FALLING); + MapDrawingArea(ED_DRAWING_ID_BD_ROCK_TURNS_TO_ON_IMPACT); + } + + if (properties_element == EL_BD_DIAMOND && level.game_engine_type == GAME_ENGINE_TYPE_BD) + { + MapDrawingArea(ED_DRAWING_ID_BD_DIAMOND_TURNS_TO_ON_FALLING); + MapDrawingArea(ED_DRAWING_ID_BD_DIAMOND_TURNS_TO_ON_IMPACT); + } + + if (level.game_engine_type == GAME_ENGINE_TYPE_BD) + { + if (IS_BD_FIREFLY(properties_element)) + { + MapDrawingArea(ED_DRAWING_ID_BD_FIREFLY_EXPLODES_TO); + MapDrawingArea(ED_DRAWING_ID_BD_EXPLOSION_TURNS_TO); + } + else if (IS_BD_FIREFLY_2(properties_element)) + { + MapDrawingArea(ED_DRAWING_ID_BD_FIREFLY_2_EXPLODES_TO); + MapDrawingArea(ED_DRAWING_ID_BD_EXPLOSION_TURNS_TO); + } + else if (IS_BD_BUTTERFLY(properties_element)) + { + MapDrawingArea(ED_DRAWING_ID_BD_BUTTERFLY_EXPLODES_TO); + MapDrawingArea(ED_DRAWING_ID_BD_DIAMOND_BIRTH_TURNS_TO); + } + else if (IS_BD_BUTTERFLY_2(properties_element)) + { + MapDrawingArea(ED_DRAWING_ID_BD_BUTTERFLY_2_EXPLODES_TO); + MapDrawingArea(ED_DRAWING_ID_BD_DIAMOND_BIRTH_TURNS_TO); + } + else if (IS_BD_STONEFLY(properties_element)) + { + MapDrawingArea(ED_DRAWING_ID_BD_STONEFLY_EXPLODES_TO); + } + else if (IS_BD_DRAGONFLY(properties_element)) + { + MapDrawingArea(ED_DRAWING_ID_BD_DRAGONFLY_EXPLODES_TO); + MapDrawingArea(ED_DRAWING_ID_BD_EXPLOSION_TURNS_TO); + } + else if (properties_element == EL_BD_BOMB) + { + MapDrawingArea(ED_DRAWING_ID_BD_BOMB_EXPLOSION_TURNS_TO); + } + else if (properties_element == EL_BD_NITRO_PACK) + { + MapDrawingArea(ED_DRAWING_ID_BD_NITRO_EXPLOSION_TURNS_TO); + } } if (properties_element == EL_BD_MEGA_ROCK || @@ -11980,6 +12415,25 @@ static void DrawPropertiesConfig(void) MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_HAMMER_WALLS_REAPPEAR); } + if (properties_element == EL_BD_ROCKET_LAUNCHER) + { + MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_INFINITE_ROCKETS); + } + + if (properties_element == EL_BD_CREATURE_SWITCH) + { + MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_CREATURES_START_BACKWARDS); + MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_CREATURES_TURN_ON_HATCHING); + } + + if (properties_element == EL_BD_GRAVITY_SWITCH) + { + MapSelectboxGadget(ED_SELECTBOX_ID_BD_GRAVITY_DIRECTION); + + MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_GRAVITY_SWITCH_ACTIVE); + MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_GRAVITY_AFFECTS_ALL); + } + if (properties_element == EL_BD_NUT) { MapDrawingArea(ED_DRAWING_ID_BD_NUT_CONTENT); @@ -11992,7 +12446,8 @@ static void DrawPropertiesConfig(void) if (properties_element == EL_EM_DYNAMITE) MapCheckbuttonGadget(ED_CHECKBUTTON_ID_EM_EXPLODES_BY_FIRE); - if (COULD_MOVE_INTO_ACID(properties_element) && + if (level.game_engine_type == GAME_ENGINE_TYPE_RND && + COULD_MOVE_INTO_ACID(properties_element) && !IS_PLAYER_ELEMENT(properties_element) && (!IS_CUSTOM_ELEMENT(properties_element) || edit_mode_properties == ED_MODE_PROPERTIES_CONFIG_2)) @@ -15635,6 +16090,13 @@ static void HandleTextbuttonGadgets(struct GadgetInfo *gi) DrawLevelConfigWindow(); } + else if (type_id >= ED_TAB_BUTTON_ID_ENGINECONFIG_FIRST && + type_id <= ED_TAB_BUTTON_ID_ENGINECONFIG_LAST) + { + edit_mode_engineconfig = gi->custom_type_id; + + DrawLevelConfigWindow(); + } else if (type_id >= ED_TAB_BUTTON_ID_PROPERTIES_FIRST && type_id <= ED_TAB_BUTTON_ID_PROPERTIES_LAST) {