X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Feditor.c;h=6ec52ee30ac21c4100f3120c80d7c9d733b53696;hb=5934610dc0048580758ec4b9c2d2a9c75e3a2615;hp=73d2c36f336d13cedc4b39741d0823a8b06670b7;hpb=afbad74c77ab1a2cac76b0ce8f633da50a8f52ab;p=rocksndiamonds.git diff --git a/src/editor.c b/src/editor.c index 73d2c36f..6ec52ee3 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) ? \ @@ -583,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, @@ -605,6 +680,13 @@ enum GADGET_ID_LEVEL_AUTHOR, GADGET_ID_LEVELSET_NAME, GADGET_ID_LEVELSET_AUTHOR, + GADGET_ID_BD_COLOR_TEXT_B, + GADGET_ID_BD_COLOR_TEXT_0, + GADGET_ID_BD_COLOR_TEXT_1, + GADGET_ID_BD_COLOR_TEXT_2, + GADGET_ID_BD_COLOR_TEXT_3, + GADGET_ID_BD_COLOR_TEXT_4, + GADGET_ID_BD_COLOR_TEXT_5, GADGET_ID_ELEMENT_NAME, // text area identifiers @@ -616,10 +698,19 @@ 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_BD_COLOR_TYPE, + GADGET_ID_BD_COLOR_C64_B, + GADGET_ID_BD_COLOR_C64_0, + GADGET_ID_BD_COLOR_C64_1, + GADGET_ID_BD_COLOR_C64_2, + GADGET_ID_BD_COLOR_C64_3, + GADGET_ID_BD_COLOR_C64_4, + GADGET_ID_BD_COLOR_C64_5, 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, @@ -653,6 +744,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, @@ -663,6 +756,7 @@ enum GADGET_ID_SAVE_LEVELSET, GADGET_ID_ADD_CHANGE_PAGE, GADGET_ID_DEL_CHANGE_PAGE, + GADGET_ID_BD_SET_RANDOM_COLORS, // graphicbutton identifiers @@ -700,7 +794,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_STICK_ELEMENT, GADGET_ID_EM_SLIPPERY_GEMS, GADGET_ID_EM_EXPLODES_BY_FIRE, @@ -735,8 +828,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, @@ -751,6 +846,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, @@ -911,6 +1011,13 @@ enum ED_TEXTINPUT_ID_LEVEL_AUTHOR, ED_TEXTINPUT_ID_LEVELSET_NAME, ED_TEXTINPUT_ID_LEVELSET_AUTHOR, + ED_TEXTINPUT_ID_BD_COLOR_TEXT_B, + ED_TEXTINPUT_ID_BD_COLOR_TEXT_0, + ED_TEXTINPUT_ID_BD_COLOR_TEXT_1, + ED_TEXTINPUT_ID_BD_COLOR_TEXT_2, + ED_TEXTINPUT_ID_BD_COLOR_TEXT_3, + ED_TEXTINPUT_ID_BD_COLOR_TEXT_4, + ED_TEXTINPUT_ID_BD_COLOR_TEXT_5, ED_TEXTINPUT_ID_ELEMENT_NAME, ED_NUM_TEXTINPUT @@ -922,6 +1029,9 @@ enum #define ED_TEXTINPUT_ID_LEVELSET_FIRST ED_TEXTINPUT_ID_LEVELSET_NAME #define ED_TEXTINPUT_ID_LEVELSET_LAST ED_TEXTINPUT_ID_LEVELSET_AUTHOR +#define ED_TEXTINPUT_ID_COLORS_FIRST ED_TEXTINPUT_ID_BD_COLOR_TEXT_B +#define ED_TEXTINPUT_ID_COLORS_LAST ED_TEXTINPUT_ID_BD_COLOR_TEXT_5 + // values for text area gadgets enum { @@ -939,10 +1049,19 @@ 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_BD_COLOR_TYPE, + ED_SELECTBOX_ID_BD_COLOR_C64_B, + ED_SELECTBOX_ID_BD_COLOR_C64_0, + ED_SELECTBOX_ID_BD_COLOR_C64_1, + ED_SELECTBOX_ID_BD_COLOR_C64_2, + ED_SELECTBOX_ID_BD_COLOR_C64_3, + ED_SELECTBOX_ID_BD_COLOR_C64_4, + ED_SELECTBOX_ID_BD_COLOR_C64_5, 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, @@ -982,6 +1101,9 @@ enum #define ED_SELECTBOX_ID_ENGINE_FIRST ED_SELECTBOX_ID_BD_SCHEDULING_TYPE #define ED_SELECTBOX_ID_ENGINE_LAST ED_SELECTBOX_ID_BD_SCHEDULING_TYPE +#define ED_SELECTBOX_ID_COLORS_FIRST ED_SELECTBOX_ID_BD_COLOR_C64_B +#define ED_SELECTBOX_ID_COLORS_LAST ED_SELECTBOX_ID_BD_COLOR_C64_5 + #define ED_SELECTBOX_ID_CUSTOM1_FIRST ED_SELECTBOX_ID_CUSTOM_ACCESS_TYPE #define ED_SELECTBOX_ID_CUSTOM1_LAST ED_SELECTBOX_ID_CUSTOM_WALK_TO_ACTION #define ED_SELECTBOX_ID_CUSTOM2_FIRST ED_SELECTBOX_ID_CUSTOM_MOVE_PATTERN @@ -999,6 +1121,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, @@ -1009,6 +1133,7 @@ enum ED_TEXTBUTTON_ID_SAVE_AS_TEMPLATE_1, ED_TEXTBUTTON_ID_ADD_CHANGE_PAGE, ED_TEXTBUTTON_ID_DEL_CHANGE_PAGE, + ED_TEXTBUTTON_ID_BD_SET_RANDOM_COLORS, ED_NUM_TEXTBUTTONS }; @@ -1016,6 +1141,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 @@ -1051,7 +1179,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_STICK_ELEMENT, ED_CHECKBUTTON_ID_EM_SLIPPERY_GEMS, ED_CHECKBUTTON_ID_EM_EXPLODES_BY_FIRE, @@ -1086,8 +1213,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, @@ -1102,6 +1231,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, @@ -1151,7 +1285,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_GRAVITY_AFFECTS_ALL +#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 @@ -1224,6 +1358,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, @@ -1274,6 +1422,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 @@ -1513,6 +1665,25 @@ static boolean levelset_use_levelset_artwork = FALSE; static boolean levelset_copy_level_template = FALSE; static int levelset_save_mode = LEVELSET_SAVE_MODE_UPDATE; +#define MAX_BD_COLORS 7 +#define MAX_BD_COLOR_TEXT_LEN 10 + +static boolean bd_color_type_changed = FALSE; +static int bd_color_type_default = GD_COLOR_TYPE_RGB; +static int bd_color_c64[MAX_BD_COLORS]; +static char bd_color_text[MAX_BD_COLORS][MAX_BD_COLOR_TEXT_LEN + 1]; +static int bd_color_default[MAX_BD_COLORS]; +static int *bd_color[MAX_BD_COLORS] = +{ + &level.bd_color_b, + &level.bd_color_0, + &level.bd_color_1, + &level.bd_color_2, + &level.bd_color_3, + &level.bd_color_4, + &level.bd_color_5, +}; + static struct { int gadget_type_id; @@ -1530,416 +1701,416 @@ static struct { ED_COUNTER_ID_SELECT_LEVEL, -1, -1, // these values are not constant, but can change at runtime - 1, 100, - GADGET_ID_SELECT_LEVEL_DOWN, GADGET_ID_SELECT_LEVEL_UP, - GADGET_ID_SELECT_LEVEL_TEXT, GADGET_ID_NONE, + 1, 100, + GADGET_ID_SELECT_LEVEL_DOWN, GADGET_ID_SELECT_LEVEL_UP, + GADGET_ID_SELECT_LEVEL_TEXT, GADGET_ID_NONE, &level_nr, - NULL, NULL, NULL + NULL, NULL, NULL }, // ---------- level and editor settings ------------------------------------- { ED_COUNTER_ID_LEVEL_XSIZE, - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(4), - MIN_LEV_FIELDX, MAX_LEV_FIELDX, - GADGET_ID_LEVEL_XSIZE_DOWN, GADGET_ID_LEVEL_XSIZE_UP, - GADGET_ID_LEVEL_XSIZE_TEXT, GADGET_ID_NONE, + ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(4), + MIN_LEV_FIELDX, MAX_LEV_FIELDX, + 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, - -1, ED_LEVEL_SETTINGS_YPOS(4), - MIN_LEV_FIELDY, MAX_LEV_FIELDY, - GADGET_ID_LEVEL_YSIZE_DOWN, GADGET_ID_LEVEL_YSIZE_UP, - GADGET_ID_LEVEL_YSIZE_TEXT, GADGET_ID_LEVEL_XSIZE_UP, + -1, ED_LEVEL_SETTINGS_YPOS(4), + MIN_LEV_FIELDY, MAX_LEV_FIELDY, + 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, - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(5), - 0, 999, - GADGET_ID_LEVEL_GEMSLIMIT_DOWN, GADGET_ID_LEVEL_GEMSLIMIT_UP, - GADGET_ID_LEVEL_GEMSLIMIT_TEXT, GADGET_ID_NONE, + ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(5), + 0, 999, + 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, - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(8), - 0, 9999, - GADGET_ID_LEVEL_TIMELIMIT_DOWN, GADGET_ID_LEVEL_TIMELIMIT_UP, - GADGET_ID_LEVEL_TIMELIMIT_TEXT, GADGET_ID_NONE, + ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(8), + 0, 9999, + 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, - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(10), - 0, 999, - GADGET_ID_LEVEL_TIMESCORE_DOWN, GADGET_ID_LEVEL_TIMESCORE_UP, - GADGET_ID_LEVEL_TIMESCORE_TEXT, GADGET_ID_NONE, + ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(10), + 0, 999, + 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, - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(13), - 0, 9999, - GADGET_ID_LEVEL_RANDOM_SEED_DOWN, GADGET_ID_LEVEL_RANDOM_SEED_UP, - GADGET_ID_LEVEL_RANDOM_SEED_TEXT, GADGET_ID_NONE, + ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(13), + 0, 9999, + 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, - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(4), - 1, MAX_LEVELS, - GADGET_ID_LEVELSET_NUM_LEVELS_DOWN, GADGET_ID_LEVELSET_NUM_LEVELS_UP, - GADGET_ID_LEVELSET_NUM_LEVELS_TEXT, GADGET_ID_NONE, + ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(4), + 1, MAX_LEVELS, + 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, - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(0), - 1, 100, - GADGET_ID_LEVEL_RANDOM_DOWN, GADGET_ID_LEVEL_RANDOM_UP, - GADGET_ID_LEVEL_RANDOM_TEXT, GADGET_ID_NONE, + ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(0), + 1, 100, + 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, - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_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, + 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, &level.bd_cycle_delay_ms, - NULL, NULL, "Game cycle delay (ms)" + NULL, NULL, "Game cycle delay (ms)" }, { ED_COUNTER_ID_BD_CYCLE_DELAY_C64, - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_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, + 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, &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, - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(4), - 1, 40, + 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, &level.bd_hatching_delay_cycles, - NULL, NULL, "Hatching delay (cycles)" + NULL, NULL, "Hatching delay (cycles)" }, { ED_COUNTER_ID_BD_HATCHING_DELAY_SECONDS, - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(4), - 1, 40, + 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)" + NULL, NULL, "Hatching delay (seconds)" }, // ---------- element settings: configure (various elements) ---------------- { ED_COUNTER_ID_BD_PUSHING_PROB, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(2), - 0, 100, - GADGET_ID_BD_PUSHING_PROB_DOWN, GADGET_ID_BD_PUSHING_PROB_UP, - GADGET_ID_BD_PUSHING_PROB_TEXT, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(2), + 0, 100, + GADGET_ID_BD_PUSHING_PROB_DOWN, GADGET_ID_BD_PUSHING_PROB_UP, + GADGET_ID_BD_PUSHING_PROB_TEXT, GADGET_ID_NONE, &level.bd_pushing_prob, - NULL, NULL, "Push probability" + NULL, NULL, "Push probability" }, { ED_COUNTER_ID_BD_PUSHING_PROB_WITH_SWEET, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(3), - 0, 100, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(3), + 0, 100, GADGET_ID_BD_PUSHING_PROB_WITH_SWEET_DOWN, GADGET_ID_BD_PUSHING_PROB_WITH_SWEET_UP, GADGET_ID_BD_PUSHING_PROB_WITH_SWEET_TEXT, GADGET_ID_NONE, &level.bd_pushing_prob_with_sweet, - NULL, NULL, "Push probability with sweet" + NULL, NULL, "Push probability with sweet" }, { ED_COUNTER_ID_ELEMENT_VALUE1, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(0), - MIN_SCORE, MAX_SCORE, - GADGET_ID_ELEMENT_VALUE1_DOWN, GADGET_ID_ELEMENT_VALUE1_UP, - GADGET_ID_ELEMENT_VALUE1_TEXT, GADGET_ID_NONE, - NULL, // will be set when used - NULL, NULL, NULL + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(0), + MIN_SCORE, MAX_SCORE, + GADGET_ID_ELEMENT_VALUE1_DOWN, GADGET_ID_ELEMENT_VALUE1_UP, + GADGET_ID_ELEMENT_VALUE1_TEXT, GADGET_ID_NONE, + NULL, // will be set when used + NULL, NULL, NULL }, { ED_COUNTER_ID_ELEMENT_VALUE2, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1), - MIN_SCORE, MAX_SCORE, - GADGET_ID_ELEMENT_VALUE2_DOWN, GADGET_ID_ELEMENT_VALUE2_UP, - GADGET_ID_ELEMENT_VALUE2_TEXT, GADGET_ID_NONE, - NULL, // will be set when used - NULL, NULL, NULL + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1), + MIN_SCORE, MAX_SCORE, + GADGET_ID_ELEMENT_VALUE2_DOWN, GADGET_ID_ELEMENT_VALUE2_UP, + GADGET_ID_ELEMENT_VALUE2_TEXT, GADGET_ID_NONE, + NULL, // will be set when used + NULL, NULL, NULL }, { ED_COUNTER_ID_ELEMENT_VALUE3, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(2), - MIN_SCORE, MAX_SCORE, - GADGET_ID_ELEMENT_VALUE3_DOWN, GADGET_ID_ELEMENT_VALUE3_UP, - GADGET_ID_ELEMENT_VALUE3_TEXT, GADGET_ID_NONE, - NULL, // will be set when used - NULL, NULL, NULL + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(2), + MIN_SCORE, MAX_SCORE, + GADGET_ID_ELEMENT_VALUE3_DOWN, GADGET_ID_ELEMENT_VALUE3_UP, + GADGET_ID_ELEMENT_VALUE3_TEXT, GADGET_ID_NONE, + NULL, // will be set when used + NULL, NULL, NULL }, { ED_COUNTER_ID_ELEMENT_VALUE4, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(3), - MIN_SCORE, MAX_SCORE, - GADGET_ID_ELEMENT_VALUE4_DOWN, GADGET_ID_ELEMENT_VALUE4_UP, - GADGET_ID_ELEMENT_VALUE4_TEXT, GADGET_ID_NONE, - NULL, // will be set when used - NULL, NULL, NULL + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(3), + MIN_SCORE, MAX_SCORE, + GADGET_ID_ELEMENT_VALUE4_DOWN, GADGET_ID_ELEMENT_VALUE4_UP, + GADGET_ID_ELEMENT_VALUE4_TEXT, GADGET_ID_NONE, + NULL, // will be set when used + NULL, NULL, NULL }, { ED_COUNTER_ID_YAMYAM_CONTENT, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(3), - MIN_ELEMENT_CONTENTS, MAX_ELEMENT_CONTENTS, - GADGET_ID_YAMYAM_CONTENT_DOWN, GADGET_ID_YAMYAM_CONTENT_UP, - GADGET_ID_YAMYAM_CONTENT_TEXT, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(3), + MIN_ELEMENT_CONTENTS, MAX_ELEMENT_CONTENTS, + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(4), - MIN_ELEMENT_CONTENTS, MAX_ELEMENT_CONTENTS, - GADGET_ID_BALL_CONTENT_DOWN, GADGET_ID_BALL_CONTENT_UP, - GADGET_ID_BALL_CONTENT_TEXT, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(4), + MIN_ELEMENT_CONTENTS, MAX_ELEMENT_CONTENTS, + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(4), - MIN_ANDROID_ELEMENTS, MAX_ANDROID_ELEMENTS, - GADGET_ID_ANDROID_CONTENT_DOWN, GADGET_ID_ANDROID_CONTENT_UP, - GADGET_ID_ANDROID_CONTENT_TEXT, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(4), + MIN_ANDROID_ELEMENTS, MAX_ANDROID_ELEMENTS, + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(0), - MIN_ENVELOPE_XSIZE, MAX_ENVELOPE_XSIZE, - 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", + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(0), + MIN_ENVELOPE_XSIZE, MAX_ENVELOPE_XSIZE, + 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", }, { ED_COUNTER_ID_ENVELOPE_YSIZE, - -1, ED_ELEMENT_SETTINGS_YPOS(0), - MIN_ENVELOPE_YSIZE, MAX_ENVELOPE_YSIZE, - 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", + -1, ED_ELEMENT_SETTINGS_YPOS(0), + MIN_ENVELOPE_YSIZE, MAX_ENVELOPE_YSIZE, + 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", }, { ED_COUNTER_ID_INVENTORY_SIZE, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(2), - MIN_INITIAL_INVENTORY_SIZE, MAX_INITIAL_INVENTORY_SIZE, - GADGET_ID_INVENTORY_SIZE_DOWN, GADGET_ID_INVENTORY_SIZE_UP, - GADGET_ID_INVENTORY_SIZE_TEXT, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(2), + MIN_INITIAL_INVENTORY_SIZE, MAX_INITIAL_INVENTORY_SIZE, + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(3), - MIN_ELEMENTS_IN_GROUP, MAX_MM_BALL_CONTENTS, - GADGET_ID_MM_BALL_CONTENT_DOWN, GADGET_ID_MM_BALL_CONTENT_UP, - GADGET_ID_MM_BALL_CONTENT_TEXT, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(3), + MIN_ELEMENTS_IN_GROUP, MAX_MM_BALL_CONTENTS, + 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) --------------- { ED_COUNTER_ID_CUSTOM_SCORE, - ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(5), - MIN_SCORE, MAX_SCORE, - GADGET_ID_CUSTOM_SCORE_DOWN, GADGET_ID_CUSTOM_SCORE_UP, - GADGET_ID_CUSTOM_SCORE_TEXT, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(5), + MIN_SCORE, MAX_SCORE, + GADGET_ID_CUSTOM_SCORE_DOWN, GADGET_ID_CUSTOM_SCORE_UP, + GADGET_ID_CUSTOM_SCORE_TEXT, GADGET_ID_NONE, &custom_element.collect_score_initial, - NULL, "CE score", " " + NULL, "CE score", " " }, { ED_COUNTER_ID_CUSTOM_GEMCOUNT, - -1, ED_ELEMENT_SETTINGS_YPOS(5), - MIN_COLLECT_COUNT, MAX_COLLECT_COUNT, - GADGET_ID_CUSTOM_GEMCOUNT_DOWN, GADGET_ID_CUSTOM_GEMCOUNT_UP, - GADGET_ID_CUSTOM_GEMCOUNT_TEXT, GADGET_ID_CUSTOM_SCORE_UP, + -1, ED_ELEMENT_SETTINGS_YPOS(5), + MIN_COLLECT_COUNT, MAX_COLLECT_COUNT, + GADGET_ID_CUSTOM_GEMCOUNT_DOWN, GADGET_ID_CUSTOM_GEMCOUNT_UP, + GADGET_ID_CUSTOM_GEMCOUNT_TEXT, GADGET_ID_CUSTOM_SCORE_UP, &custom_element.collect_count_initial, - NULL, "CE count", NULL + NULL, "CE count", NULL }, { ED_COUNTER_ID_CUSTOM_VALUE_FIX, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(10), - 0, 9999, - GADGET_ID_CUSTOM_VALUE_FIX_DOWN, GADGET_ID_CUSTOM_VALUE_FIX_UP, - GADGET_ID_CUSTOM_VALUE_FIX_TEXT, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(10), + 0, 9999, + GADGET_ID_CUSTOM_VALUE_FIX_DOWN, GADGET_ID_CUSTOM_VALUE_FIX_UP, + GADGET_ID_CUSTOM_VALUE_FIX_TEXT, GADGET_ID_NONE, &custom_element.ce_value_fixed_initial, - NULL, "CE value", NULL + NULL, "CE value", NULL }, { ED_COUNTER_ID_CUSTOM_VALUE_RND, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(10), - 0, 9999, - GADGET_ID_CUSTOM_VALUE_RND_DOWN, GADGET_ID_CUSTOM_VALUE_RND_UP, - GADGET_ID_CUSTOM_VALUE_RND_TEXT, GADGET_ID_CUSTOM_VALUE_FIX_UP, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(10), + 0, 9999, + GADGET_ID_CUSTOM_VALUE_RND_DOWN, GADGET_ID_CUSTOM_VALUE_RND_UP, + GADGET_ID_CUSTOM_VALUE_RND_TEXT, GADGET_ID_CUSTOM_VALUE_FIX_UP, &custom_element.ce_value_random_initial, - NULL, "+random", NULL + NULL, "+random", NULL }, { ED_COUNTER_ID_PUSH_DELAY_FIX, - ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(6), - 0, 999, - GADGET_ID_PUSH_DELAY_FIX_DOWN, GADGET_ID_PUSH_DELAY_FIX_UP, - GADGET_ID_PUSH_DELAY_FIX_TEXT, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(6), + 0, 999, + 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, - -1, ED_ELEMENT_SETTINGS_YPOS(6), - 0, 999, - GADGET_ID_PUSH_DELAY_RND_DOWN, GADGET_ID_PUSH_DELAY_RND_UP, - GADGET_ID_PUSH_DELAY_RND_TEXT, GADGET_ID_PUSH_DELAY_FIX_UP, + -1, ED_ELEMENT_SETTINGS_YPOS(6), + 0, 999, + GADGET_ID_PUSH_DELAY_RND_DOWN, GADGET_ID_PUSH_DELAY_RND_UP, + GADGET_ID_PUSH_DELAY_RND_TEXT, GADGET_ID_PUSH_DELAY_FIX_UP, &custom_element.push_delay_random, - NULL, "+random", NULL + NULL, "+random", NULL }, { ED_COUNTER_ID_DROP_DELAY_FIX, - ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(7), - 0, 999, - GADGET_ID_DROP_DELAY_FIX_DOWN, GADGET_ID_DROP_DELAY_FIX_UP, - GADGET_ID_DROP_DELAY_FIX_TEXT, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(7), + 0, 999, + 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, - -1, ED_ELEMENT_SETTINGS_YPOS(7), - 0, 999, - GADGET_ID_DROP_DELAY_RND_DOWN, GADGET_ID_DROP_DELAY_RND_UP, - GADGET_ID_DROP_DELAY_RND_TEXT, GADGET_ID_DROP_DELAY_FIX_UP, + -1, ED_ELEMENT_SETTINGS_YPOS(7), + 0, 999, + GADGET_ID_DROP_DELAY_RND_DOWN, GADGET_ID_DROP_DELAY_RND_UP, + GADGET_ID_DROP_DELAY_RND_TEXT, GADGET_ID_DROP_DELAY_FIX_UP, &custom_element.drop_delay_random, - NULL, "+random", NULL + NULL, "+random", NULL }, // ---------- element settings: configure 2 (custom elements) --------------- { ED_COUNTER_ID_MOVE_DELAY_FIX, - ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(5), - 0, 999, - GADGET_ID_MOVE_DELAY_FIX_DOWN, GADGET_ID_MOVE_DELAY_FIX_UP, - GADGET_ID_MOVE_DELAY_FIX_TEXT, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(5), + 0, 999, + 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, - -1, ED_ELEMENT_SETTINGS_YPOS(5), - 0, 999, - GADGET_ID_MOVE_DELAY_RND_DOWN, GADGET_ID_MOVE_DELAY_RND_UP, - GADGET_ID_MOVE_DELAY_RND_TEXT, GADGET_ID_MOVE_DELAY_FIX_UP, + -1, ED_ELEMENT_SETTINGS_YPOS(5), + 0, 999, + GADGET_ID_MOVE_DELAY_RND_DOWN, GADGET_ID_MOVE_DELAY_RND_UP, + GADGET_ID_MOVE_DELAY_RND_TEXT, GADGET_ID_MOVE_DELAY_FIX_UP, &custom_element.move_delay_random, - NULL, "+random", NULL + NULL, "+random", NULL }, { ED_COUNTER_ID_STEP_DELAY_FIX, - ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(6), - 0, 999, - GADGET_ID_STEP_DELAY_FIX_DOWN, GADGET_ID_STEP_DELAY_FIX_UP, - GADGET_ID_STEP_DELAY_FIX_TEXT, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(6), + 0, 999, + 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, - -1, ED_ELEMENT_SETTINGS_YPOS(6), - 0, 999, - GADGET_ID_STEP_DELAY_RND_DOWN, GADGET_ID_STEP_DELAY_RND_UP, - GADGET_ID_STEP_DELAY_RND_TEXT, GADGET_ID_STEP_DELAY_FIX_UP, + -1, ED_ELEMENT_SETTINGS_YPOS(6), + 0, 999, + GADGET_ID_STEP_DELAY_RND_DOWN, GADGET_ID_STEP_DELAY_RND_UP, + GADGET_ID_STEP_DELAY_RND_TEXT, GADGET_ID_STEP_DELAY_FIX_UP, &custom_element.step_delay_random, - NULL, "+random", NULL + NULL, "+random", NULL }, { ED_COUNTER_ID_EXPLOSION_DELAY, - ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(13), - 0, 999, - GADGET_ID_EXPLOSION_DELAY_DOWN, GADGET_ID_EXPLOSION_DELAY_UP, - GADGET_ID_EXPLOSION_DELAY_TEXT, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(13), + 0, 999, + 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, - ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(14), - 0, 999, - GADGET_ID_IGNITION_DELAY_DOWN, GADGET_ID_IGNITION_DELAY_UP, - GADGET_ID_IGNITION_DELAY_TEXT, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(14), + 0, 999, + 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) ------------------ { ED_COUNTER_ID_GROUP_CONTENT, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(3), - MIN_ELEMENTS_IN_GROUP, MAX_ELEMENTS_IN_GROUP, - GADGET_ID_GROUP_CONTENT_DOWN, GADGET_ID_GROUP_CONTENT_UP, - GADGET_ID_GROUP_CONTENT_TEXT, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(3), + MIN_ELEMENTS_IN_GROUP, MAX_ELEMENTS_IN_GROUP, + 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) ------------------ { ED_COUNTER_ID_CHANGE_DELAY_FIX, - ED_ELEMENT_SETTINGS_XPOS(2), ED_ELEMENT_SETTINGS_YPOS(2), - 0, 999, - GADGET_ID_CHANGE_DELAY_FIX_DOWN, GADGET_ID_CHANGE_DELAY_FIX_UP, - GADGET_ID_CHANGE_DELAY_FIX_TEXT, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(2), ED_ELEMENT_SETTINGS_YPOS(2), + 0, 999, + GADGET_ID_CHANGE_DELAY_FIX_DOWN, GADGET_ID_CHANGE_DELAY_FIX_UP, + GADGET_ID_CHANGE_DELAY_FIX_TEXT, GADGET_ID_NONE, &custom_element_change.delay_fixed, - NULL, "CE delay", NULL, + NULL, "CE delay", NULL, }, { ED_COUNTER_ID_CHANGE_DELAY_RND, - -1, ED_ELEMENT_SETTINGS_YPOS(2), - 0, 999, - GADGET_ID_CHANGE_DELAY_RND_DOWN, GADGET_ID_CHANGE_DELAY_RND_UP, - GADGET_ID_CHANGE_DELAY_RND_TEXT, GADGET_ID_CHANGE_DELAY_FIX_UP, + -1, ED_ELEMENT_SETTINGS_YPOS(2), + 0, 999, + GADGET_ID_CHANGE_DELAY_RND_DOWN, GADGET_ID_CHANGE_DELAY_RND_UP, + GADGET_ID_CHANGE_DELAY_RND_TEXT, GADGET_ID_CHANGE_DELAY_FIX_UP, &custom_element_change.delay_random, - NULL, "+random", NULL + NULL, "+random", NULL }, { ED_COUNTER_ID_CHANGE_CONT_RND, - ED_ELEMENT_SETTINGS_XPOS(3), ED_ELEMENT_SETTINGS_YPOS(12), - 0, 100, - GADGET_ID_CHANGE_CONT_RND_DOWN, GADGET_ID_CHANGE_CONT_RND_UP, - GADGET_ID_CHANGE_CONT_RND_TEXT, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(3), ED_ELEMENT_SETTINGS_YPOS(12), + 0, 100, + 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:", "%" }, }; @@ -1950,48 +2121,112 @@ 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] = { + // ---------- level and editor settings ------------------------------------- + { ED_TEXTINPUT_ID_LEVEL_NAME, - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(0), + ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(0), 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, - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(2), + ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(2), 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, - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(0), + ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(0), 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, - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(2), + ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(2), 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" + }, + + // ---------- engine settings: colors --------------------------------------- + + { + ED_TEXTINPUT_ID_BD_COLOR_TEXT_B, + ED_ENGINE_SETTINGS_XPOS(0), ED_ENGINE_SETTINGS_YPOS(1), + GADGET_ID_BD_COLOR_TEXT_B, + MAX_BD_COLOR_TEXT_LEN, + bd_color_text[0], + NULL, "Border color: ", NULL, "Enter border color (not used)" + }, + { + ED_TEXTINPUT_ID_BD_COLOR_TEXT_0, + ED_ENGINE_SETTINGS_XPOS(0), ED_ENGINE_SETTINGS_YPOS(2), + GADGET_ID_BD_COLOR_TEXT_0, + MAX_BD_COLOR_TEXT_LEN, + bd_color_text[1], + NULL, "Background color: ", NULL, "Enter background color (C64 graphics)" + }, + { + ED_TEXTINPUT_ID_BD_COLOR_TEXT_1, + ED_ENGINE_SETTINGS_XPOS(0), ED_ENGINE_SETTINGS_YPOS(3), + GADGET_ID_BD_COLOR_TEXT_1, + MAX_BD_COLOR_TEXT_LEN, + bd_color_text[2], + NULL, "Sand color: ", NULL, "Enter sand color (C64 graphics)" }, + { + ED_TEXTINPUT_ID_BD_COLOR_TEXT_2, + ED_ENGINE_SETTINGS_XPOS(0), ED_ENGINE_SETTINGS_YPOS(4), + GADGET_ID_BD_COLOR_TEXT_2, + MAX_BD_COLOR_TEXT_LEN, + bd_color_text[3], + NULL, "Steel wall color: ", NULL, "Enter steel wall color (C64 graphics)" + }, + { + ED_TEXTINPUT_ID_BD_COLOR_TEXT_3, + ED_ENGINE_SETTINGS_XPOS(0), ED_ENGINE_SETTINGS_YPOS(5), + GADGET_ID_BD_COLOR_TEXT_3, + MAX_BD_COLOR_TEXT_LEN, + bd_color_text[4], + NULL, "Wall color: ", NULL, "Enter wall color (C64 graphics)" + }, + { + ED_TEXTINPUT_ID_BD_COLOR_TEXT_4, + ED_ENGINE_SETTINGS_XPOS(0), ED_ENGINE_SETTINGS_YPOS(6), + GADGET_ID_BD_COLOR_TEXT_4, + MAX_BD_COLOR_TEXT_LEN, + bd_color_text[5], + NULL, "Amoeba color: ", NULL, "Enter amoeba color (C64 graphics)" + }, + { + ED_TEXTINPUT_ID_BD_COLOR_TEXT_5, + ED_ENGINE_SETTINGS_XPOS(0), ED_ENGINE_SETTINGS_YPOS(7), + GADGET_ID_BD_COLOR_TEXT_5, + MAX_BD_COLOR_TEXT_LEN, + bd_color_text[6], + NULL, "Slime color: ", NULL, "Enter slime color (C64 graphics)" + }, + + // ---------- element settings: configure (several elements) ---------------- + { ED_TEXTINPUT_ID_ELEMENT_NAME, -1, -1, // these values are not constant, but can change at runtime GADGET_ID_ELEMENT_NAME, - MAX_ELEMENT_NAME_LEN - 2, // currently 2 chars less editable + MAX_ELEMENT_NAME_LEN - 2, // currently 2 chars less editable custom_element.description, - NULL, "Element name" + NULL, NULL, NULL, "Enter element name" } }; @@ -2007,7 +2242,7 @@ static struct { { ED_TEXTAREA_ID_ENVELOPE_INFO, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(3), + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(3), GADGET_ID_ENVELOPE_INFO, MAX_ENVELOPE_XSIZE, MAX_ENVELOPE_YSIZE, NULL, @@ -2017,711 +2252,753 @@ static struct static struct ValueTextInfo options_time_or_steps[] = { - { 0, "seconds" }, - { 1, "steps" }, + { 0, "seconds" }, + { 1, "steps" }, - { -1, NULL } + { -1, NULL } }; static struct ValueTextInfo options_time_score_base[] = { - { 1, "per second/step" }, - { 10, "per 10 seconds/steps" }, + { 1, "per second/step" }, + { 10, "per 10 seconds/steps" }, - { -1, NULL } + { -1, NULL } }; static struct ValueTextInfo options_game_engine_type[] = { - { GAME_ENGINE_TYPE_RND, "Rocks'n'Diamonds" }, - { GAME_ENGINE_TYPE_BD, "Boulder Dash" }, - { GAME_ENGINE_TYPE_EM, "Emerald Mine" }, - { GAME_ENGINE_TYPE_SP, "Supaplex" }, - { GAME_ENGINE_TYPE_MM, "Mirror Magic" }, + { GAME_ENGINE_TYPE_RND, "Rocks'n'Diamonds" }, + { GAME_ENGINE_TYPE_BD, "Boulder Dash" }, + { GAME_ENGINE_TYPE_EM, "Emerald Mine" }, + { GAME_ENGINE_TYPE_SP, "Supaplex" }, + { GAME_ENGINE_TYPE_MM, "Mirror Magic" }, - { -1, NULL } + { -1, NULL } }; static struct ValueTextInfo options_levelset_save_mode[] = { - { LEVELSET_SAVE_MODE_UPDATE, "Update this level set" }, - { LEVELSET_SAVE_MODE_CREATE, "Create new level set" }, + { LEVELSET_SAVE_MODE_UPDATE, "Update this level set" }, + { LEVELSET_SAVE_MODE_CREATE, "Create new level set" }, + + { -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 } + { -1, NULL } }; static struct ValueTextInfo options_wind_direction[] = { - { MV_START_NONE, "none" }, - { MV_START_LEFT, "left" }, - { MV_START_RIGHT, "right" }, - { MV_START_UP, "up" }, - { MV_START_DOWN, "down" }, + { MV_START_NONE, "none" }, + { MV_START_LEFT, "left" }, + { MV_START_RIGHT, "right" }, + { MV_START_UP, "up" }, + { MV_START_DOWN, "down" }, - { -1, NULL } + { -1, NULL } }; static struct ValueTextInfo options_player_speed[] = { - { 0, "frozen" }, - { 1, "very slow" }, - { 2, "slow" }, - { 4, "normal" }, - { 8, "fast" }, - { 16, "very fast" }, - { 32, "ultrafast" }, + { 0, "frozen" }, + { 1, "very slow" }, + { 2, "slow" }, + { 4, "normal" }, + { 8, "fast" }, + { 16, "very fast" }, + { 32, "ultrafast" }, - { -1, NULL } + { -1, NULL } }; static struct ValueTextInfo options_access_type[] = { - { EP_WALKABLE, "walkable" }, - { EP_PASSABLE, "passable" }, + { EP_WALKABLE, "walkable" }, + { EP_PASSABLE, "passable" }, - { -1, NULL } + { -1, NULL } }; static struct ValueTextInfo options_access_layer[] = { - { EP_ACCESSIBLE_OVER, "over" }, - { EP_ACCESSIBLE_INSIDE, "inside" }, - { EP_ACCESSIBLE_UNDER, "under" }, + { EP_ACCESSIBLE_OVER, "over" }, + { EP_ACCESSIBLE_INSIDE, "inside" }, + { EP_ACCESSIBLE_UNDER, "under" }, - { -1, NULL } + { -1, NULL } }; static struct ValueTextInfo options_access_protected[] = { - { 0, "unprotected" }, - { 1, "protected" }, + { 0, "unprotected" }, + { 1, "protected" }, - { -1, NULL } + { -1, NULL } }; static struct ValueTextInfo options_access_direction[] = { - { MV_NO_DIRECTION, "no direction" }, - { MV_LEFT, "left" }, - { MV_RIGHT, "right" }, - { MV_UP, "up" }, - { MV_DOWN, "down" }, - { MV_LEFT | MV_UP, "left + up" }, - { MV_LEFT | MV_DOWN, "left + down" }, - { MV_RIGHT | MV_UP, "right + up" }, - { MV_RIGHT | MV_DOWN, "right + down" }, - { MV_HORIZONTAL, "horizontal" }, - { MV_VERTICAL, "vertical" }, - { MV_HORIZONTAL | MV_UP, "horizontal + up" }, - { MV_HORIZONTAL | MV_DOWN, "horizontal + down" }, - { MV_VERTICAL | MV_LEFT, "vertical + left" }, - { MV_VERTICAL | MV_RIGHT, "vertical + right" }, - { MV_ALL_DIRECTIONS, "all directions" }, - - { -1, NULL } + { MV_NO_DIRECTION, "no direction" }, + { MV_LEFT, "left" }, + { MV_RIGHT, "right" }, + { MV_UP, "up" }, + { MV_DOWN, "down" }, + { MV_LEFT | MV_UP, "left + up" }, + { MV_LEFT | MV_DOWN, "left + down" }, + { MV_RIGHT | MV_UP, "right + up" }, + { MV_RIGHT | MV_DOWN, "right + down" }, + { MV_HORIZONTAL, "horizontal" }, + { MV_VERTICAL, "vertical" }, + { MV_HORIZONTAL | MV_UP, "horizontal + up" }, + { MV_HORIZONTAL | MV_DOWN, "horizontal + down" }, + { MV_VERTICAL | MV_LEFT, "vertical + left" }, + { MV_VERTICAL | MV_RIGHT, "vertical + right" }, + { MV_ALL_DIRECTIONS, "all directions" }, + + { -1, NULL } }; static struct ValueTextInfo options_walk_to_action[] = { - { EP_DIGGABLE, "diggable" }, - { EP_COLLECTIBLE_ONLY, "collectible" }, - { EP_DROPPABLE, "collectible & droppable" }, - { EP_THROWABLE, "collectible & throwable" }, - { EP_PUSHABLE, "pushable" }, + { EP_DIGGABLE, "diggable" }, + { EP_COLLECTIBLE_ONLY, "collectible" }, + { EP_DROPPABLE, "collectible & droppable" }, + { EP_THROWABLE, "collectible & throwable" }, + { EP_PUSHABLE, "pushable" }, - { -1, NULL } + { -1, NULL } }; static struct ValueTextInfo options_move_pattern[] = { - { MV_LEFT, "left" }, - { MV_RIGHT, "right" }, - { MV_UP, "up" }, - { MV_DOWN, "down" }, - { MV_HORIZONTAL, "horizontal" }, - { MV_VERTICAL, "vertical" }, - { MV_ALL_DIRECTIONS, "all directions" }, - { MV_WIND_DIRECTION, "wind direction" }, - { MV_TOWARDS_PLAYER, "towards player" }, - { MV_AWAY_FROM_PLAYER, "away from player" }, - { MV_ALONG_LEFT_SIDE, "along left side" }, - { MV_ALONG_RIGHT_SIDE, "along right side" }, - { MV_TURNING_LEFT, "turning left" }, - { MV_TURNING_RIGHT, "turning right" }, - { MV_TURNING_LEFT_RIGHT, "turning left, right" }, - { MV_TURNING_RIGHT_LEFT, "turning right, left" }, - { MV_TURNING_RANDOM, "turning random" }, - { MV_MAZE_RUNNER, "maze runner style" }, - { MV_MAZE_HUNTER, "maze hunter style" }, - { MV_WHEN_PUSHED, "when pushed" }, - { MV_WHEN_DROPPED, "when dropped/thrown" }, - - { -1, NULL } + { MV_LEFT, "left" }, + { MV_RIGHT, "right" }, + { MV_UP, "up" }, + { MV_DOWN, "down" }, + { MV_HORIZONTAL, "horizontal" }, + { MV_VERTICAL, "vertical" }, + { MV_ALL_DIRECTIONS, "all directions" }, + { MV_WIND_DIRECTION, "wind direction" }, + { MV_TOWARDS_PLAYER, "towards player" }, + { MV_AWAY_FROM_PLAYER, "away from player" }, + { MV_ALONG_LEFT_SIDE, "along left side" }, + { MV_ALONG_RIGHT_SIDE, "along right side" }, + { MV_TURNING_LEFT, "turning left" }, + { MV_TURNING_RIGHT, "turning right" }, + { MV_TURNING_LEFT_RIGHT, "turning left, right" }, + { MV_TURNING_RIGHT_LEFT, "turning right, left" }, + { MV_TURNING_RANDOM, "turning random" }, + { MV_MAZE_RUNNER, "maze runner style" }, + { MV_MAZE_HUNTER, "maze hunter style" }, + { MV_WHEN_PUSHED, "when pushed" }, + { MV_WHEN_DROPPED, "when dropped/thrown" }, + + { -1, NULL } }; static struct ValueTextInfo options_move_direction[] = { - { MV_START_AUTOMATIC, "automatic" }, - { MV_START_LEFT, "left" }, - { MV_START_RIGHT, "right" }, - { MV_START_UP, "up" }, - { MV_START_DOWN, "down" }, - { MV_START_RANDOM, "random" }, - { MV_START_PREVIOUS, "previous" }, + { MV_START_AUTOMATIC, "automatic" }, + { MV_START_LEFT, "left" }, + { MV_START_RIGHT, "right" }, + { MV_START_UP, "up" }, + { MV_START_DOWN, "down" }, + { MV_START_RANDOM, "random" }, + { MV_START_PREVIOUS, "previous" }, - { -1, NULL } + { -1, NULL } }; static struct ValueTextInfo options_move_stepsize[] = { - { 0, "not moving" }, - { 1, "very slow" }, - { 2, "slow" }, - { 4, "normal" }, - { 8, "fast" }, - { 16, "very fast" }, - { 32, "even faster" }, + { 0, "not moving" }, + { 1, "very slow" }, + { 2, "slow" }, + { 4, "normal" }, + { 8, "fast" }, + { 16, "very fast" }, + { 32, "even faster" }, - { -1, NULL } + { -1, NULL } }; static struct ValueTextInfo options_move_leave_type[] = { - { LEAVE_TYPE_UNLIMITED, "leave behind" }, - { LEAVE_TYPE_LIMITED, "change it to" }, + { LEAVE_TYPE_UNLIMITED, "leave behind" }, + { LEAVE_TYPE_LIMITED, "change it to" }, - { -1, NULL } + { -1, NULL } }; static struct ValueTextInfo options_smash_targets[] = { - { EP_CAN_SMASH_PLAYER, "player" }, + { EP_CAN_SMASH_PLAYER, "player" }, #if 0 - { EP_CAN_SMASH_ENEMIES, "enemies" }, + { EP_CAN_SMASH_ENEMIES, "enemies" }, #endif - { EP_CAN_SMASH_EVERYTHING, "everything" }, + { EP_CAN_SMASH_EVERYTHING, "everything" }, - { -1, NULL } + { -1, NULL } }; static struct ValueTextInfo options_slippery_type[] = { - { SLIPPERY_ANY_RANDOM, "random" }, - { SLIPPERY_ANY_LEFT_RIGHT, "left, right" }, - { SLIPPERY_ANY_RIGHT_LEFT, "right, left" }, - { SLIPPERY_ONLY_LEFT, "only left" }, - { SLIPPERY_ONLY_RIGHT, "only right" }, + { SLIPPERY_ANY_RANDOM, "random" }, + { SLIPPERY_ANY_LEFT_RIGHT, "left, right" }, + { SLIPPERY_ANY_RIGHT_LEFT, "right, left" }, + { SLIPPERY_ONLY_LEFT, "only left" }, + { SLIPPERY_ONLY_RIGHT, "only right" }, - { -1, NULL } + { -1, NULL } }; static struct ValueTextInfo options_deadliness[] = { - { EP_DONT_RUN_INTO, "running into" }, - { EP_DONT_COLLIDE_WITH, "colliding with" }, - { EP_DONT_GET_HIT_BY, "getting hit by" }, - { EP_DONT_TOUCH, "touching" }, + { EP_DONT_RUN_INTO, "running into" }, + { EP_DONT_COLLIDE_WITH, "colliding with" }, + { EP_DONT_GET_HIT_BY, "getting hit by" }, + { EP_DONT_TOUCH, "touching" }, - { -1, NULL } + { -1, NULL } }; static struct ValueTextInfo options_explosion_type[] = { - { EXPLODES_3X3, "3x3" }, - { EXPLODES_CROSS, "3+3" }, - { EXPLODES_1X1, "1x1" }, + { EXPLODES_3X3, "3x3" }, + { EXPLODES_CROSS, "3+3" }, + { EXPLODES_1X1, "1x1" }, - { -1, NULL } + { -1, NULL } }; static struct ValueTextInfo options_time_units[] = { - { 1, "frames" }, - { FRAMES_PER_SECOND, "seconds" }, + { 1, "frames" }, + { FRAMES_PER_SECOND, "seconds" }, - { -1, NULL } + { -1, NULL } }; static struct ValueTextInfo options_change_direct_action[] = { - { CE_TOUCHED_BY_PLAYER, "touched by player" }, - { CE_PRESSED_BY_PLAYER, "pressed by player" }, - { CE_SWITCHED_BY_PLAYER, "switched by player" }, - { CE_SNAPPED_BY_PLAYER, "snapped by player" }, - { CE_PUSHED_BY_PLAYER, "pushed by player" }, - { CE_ENTERED_BY_PLAYER, "entered by player" }, - { CE_LEFT_BY_PLAYER, "left by player" }, - { CE_DROPPED_BY_PLAYER, "dropped/thrown by player" }, - { CE_SWITCHED, "switched" }, - { CE_HITTING_SOMETHING, "hitting something" }, - { CE_HIT_BY_SOMETHING, "hit by something" }, + { CE_TOUCHED_BY_PLAYER, "touched by player" }, + { CE_PRESSED_BY_PLAYER, "pressed by player" }, + { CE_SWITCHED_BY_PLAYER, "switched by player" }, + { CE_SNAPPED_BY_PLAYER, "snapped by player" }, + { CE_PUSHED_BY_PLAYER, "pushed by player" }, + { CE_ENTERED_BY_PLAYER, "entered by player" }, + { CE_LEFT_BY_PLAYER, "left by player" }, + { CE_DROPPED_BY_PLAYER, "dropped/thrown by player" }, + { CE_SWITCHED, "switched" }, + { CE_HITTING_SOMETHING, "hitting something" }, + { CE_HIT_BY_SOMETHING, "hit by something" }, #if 0 - { CE_BLOCKED, "blocked" }, + { CE_BLOCKED, "blocked" }, #endif - { CE_IMPACT, "impact (on something)" }, - { CE_SMASHED, "smashed (from above)" }, + { CE_IMPACT, "impact (on something)" }, + { CE_SMASHED, "smashed (from above)" }, #if 0 - { CE_VALUE_CHANGES, "CE value changes" }, - { CE_SCORE_CHANGES, "CE score changes" }, + { CE_VALUE_CHANGES, "CE value changes" }, + { CE_SCORE_CHANGES, "CE score changes" }, #endif - { CE_VALUE_GETS_ZERO, "CE value gets 0" }, - { CE_SCORE_GETS_ZERO, "CE score gets 0" }, - { CE_UNDEFINED, " " }, - { CE_HEADLINE_SPECIAL_EVENTS, "[mouse events]" }, - { CE_CLICKED_BY_MOUSE, "clicked by mouse" }, - { CE_PRESSED_BY_MOUSE, "pressed by mouse" }, - { CE_UNDEFINED, " " }, - { CE_HEADLINE_SPECIAL_EVENTS, "[static states]" }, - { CE_NEXT_TO_PLAYER, "next to player" }, - - { -1, NULL } + { CE_VALUE_GETS_ZERO, "CE value gets 0" }, + { CE_SCORE_GETS_ZERO, "CE score gets 0" }, + { CE_UNDEFINED, " " }, + { CE_HEADLINE_SPECIAL_EVENTS, "[mouse events]" }, + { CE_CLICKED_BY_MOUSE, "clicked by mouse" }, + { CE_PRESSED_BY_MOUSE, "pressed by mouse" }, + { CE_UNDEFINED, " " }, + { CE_HEADLINE_SPECIAL_EVENTS, "[static states]" }, + { CE_NEXT_TO_PLAYER, "next to player" }, + + { -1, NULL } }; static struct ValueTextInfo options_change_other_action[] = { - { CE_PLAYER_TOUCHES_X, "player touches" }, - { CE_PLAYER_PRESSES_X, "player presses" }, - { CE_PLAYER_SWITCHES_X, "player switches" }, - { CE_PLAYER_SNAPS_X, "player snaps" }, - { CE_PLAYER_PUSHES_X, "player pushes" }, - { CE_PLAYER_ENTERS_X, "player enters" }, - { CE_PLAYER_LEAVES_X, "player leaves" }, - { CE_PLAYER_DIGS_X, "player digs" }, - { CE_PLAYER_COLLECTS_X, "player collects" }, - { CE_PLAYER_DROPS_X, "player drops/throws" }, - { CE_TOUCHING_X, "touching" }, - { CE_HITTING_X, "hitting" }, - { CE_DIGGING_X, "digging" }, - { CE_HIT_BY_X, "hit by" }, - { CE_SWITCH_OF_X, "switch of" }, - { CE_CHANGE_OF_X, "change by page of" }, - { CE_EXPLOSION_OF_X, "explosion of" }, - { CE_MOVE_OF_X, "move of" }, - { CE_CREATION_OF_X, "creation of" }, - { CE_VALUE_CHANGES_OF_X, "CE value changes of" }, - { CE_SCORE_CHANGES_OF_X, "CE score changes of" }, - { CE_VALUE_GETS_ZERO_OF_X, "CE value gets 0 of" }, - { CE_SCORE_GETS_ZERO_OF_X, "CE score gets 0 of" }, - { CE_UNDEFINED, " " }, - { CE_HEADLINE_SPECIAL_EVENTS, "[mouse events]" }, - { CE_MOUSE_CLICKED_ON_X, "mouse clicked on" }, - { CE_MOUSE_PRESSED_ON_X, "mouse pressed on" }, - { CE_UNDEFINED, " " }, - { CE_HEADLINE_SPECIAL_EVENTS, "[static states]" }, - { CE_PLAYER_NEXT_TO_X, "player next to" }, - { CE_NEXT_TO_X, "next to" }, - - { -1, NULL } + { CE_PLAYER_TOUCHES_X, "player touches" }, + { CE_PLAYER_PRESSES_X, "player presses" }, + { CE_PLAYER_SWITCHES_X, "player switches" }, + { CE_PLAYER_SNAPS_X, "player snaps" }, + { CE_PLAYER_PUSHES_X, "player pushes" }, + { CE_PLAYER_ENTERS_X, "player enters" }, + { CE_PLAYER_LEAVES_X, "player leaves" }, + { CE_PLAYER_DIGS_X, "player digs" }, + { CE_PLAYER_COLLECTS_X, "player collects" }, + { CE_PLAYER_DROPS_X, "player drops/throws" }, + { CE_TOUCHING_X, "touching" }, + { CE_HITTING_X, "hitting" }, + { CE_DIGGING_X, "digging" }, + { CE_HIT_BY_X, "hit by" }, + { CE_SWITCH_OF_X, "switch of" }, + { CE_CHANGE_OF_X, "change by page of" }, + { CE_EXPLOSION_OF_X, "explosion of" }, + { CE_MOVE_OF_X, "move of" }, + { CE_CREATION_OF_X, "creation of" }, + { CE_VALUE_CHANGES_OF_X, "CE value changes of" }, + { CE_SCORE_CHANGES_OF_X, "CE score changes of" }, + { CE_VALUE_GETS_ZERO_OF_X, "CE value gets 0 of" }, + { CE_SCORE_GETS_ZERO_OF_X, "CE score gets 0 of" }, + { CE_UNDEFINED, " " }, + { CE_HEADLINE_SPECIAL_EVENTS, "[mouse events]" }, + { CE_MOUSE_CLICKED_ON_X, "mouse clicked on" }, + { CE_MOUSE_PRESSED_ON_X, "mouse pressed on" }, + { CE_UNDEFINED, " " }, + { CE_HEADLINE_SPECIAL_EVENTS, "[static states]" }, + { CE_PLAYER_NEXT_TO_X, "player next to" }, + { CE_NEXT_TO_X, "next to" }, + + { -1, NULL } }; static struct ValueTextInfo options_change_trigger_side[] = { - { CH_SIDE_LEFT, "left" }, - { CH_SIDE_RIGHT, "right" }, - { CH_SIDE_TOP, "top" }, - { CH_SIDE_BOTTOM, "bottom" }, - { CH_SIDE_LEFT_RIGHT, "left/right" }, - { CH_SIDE_TOP_BOTTOM, "top/bottom" }, - { CH_SIDE_ANY, "any" }, + { CH_SIDE_LEFT, "left" }, + { CH_SIDE_RIGHT, "right" }, + { CH_SIDE_TOP, "top" }, + { CH_SIDE_BOTTOM, "bottom" }, + { CH_SIDE_LEFT_RIGHT, "left/right" }, + { CH_SIDE_TOP_BOTTOM, "top/bottom" }, + { CH_SIDE_ANY, "any" }, - { -1, NULL } + { -1, NULL } }; static struct ValueTextInfo options_change_trigger_player[] = { - { CH_PLAYER_1, "1" }, - { CH_PLAYER_2, "2" }, - { CH_PLAYER_3, "3" }, - { CH_PLAYER_4, "4" }, - { CH_PLAYER_ANY, "any" }, + { CH_PLAYER_1, "1" }, + { CH_PLAYER_2, "2" }, + { CH_PLAYER_3, "3" }, + { CH_PLAYER_4, "4" }, + { CH_PLAYER_ANY, "any" }, - { -1, NULL } + { -1, NULL } }; static struct ValueTextInfo options_change_trigger_page[] = { - { (1u << 0), "1" }, - { (1u << 1), "2" }, - { (1u << 2), "3" }, - { (1u << 3), "4" }, - { (1u << 4), "5" }, - { (1u << 5), "6" }, - { (1u << 6), "7" }, - { (1u << 7), "8" }, - { (1u << 8), "9" }, - { (1u << 9), "10" }, - { (1u << 10), "11" }, - { (1u << 11), "12" }, - { (1u << 12), "13" }, - { (1u << 13), "14" }, - { (1u << 14), "15" }, - { (1u << 15), "16" }, - { (1u << 16), "17" }, - { (1u << 17), "18" }, - { (1u << 18), "19" }, - { (1u << 19), "20" }, - { (1u << 20), "21" }, - { (1u << 21), "22" }, - { (1u << 22), "23" }, - { (1u << 23), "24" }, - { (1u << 24), "25" }, - { (1u << 25), "26" }, - { (1u << 26), "27" }, - { (1u << 27), "28" }, - { (1u << 28), "29" }, - { (1u << 29), "30" }, - { (1u << 30), "31" }, - { (1u << 31), "32" }, - { CH_PAGE_ANY, "any" }, - - { -1, NULL } + { (1u << 0), "1" }, + { (1u << 1), "2" }, + { (1u << 2), "3" }, + { (1u << 3), "4" }, + { (1u << 4), "5" }, + { (1u << 5), "6" }, + { (1u << 6), "7" }, + { (1u << 7), "8" }, + { (1u << 8), "9" }, + { (1u << 9), "10" }, + { (1u << 10), "11" }, + { (1u << 11), "12" }, + { (1u << 12), "13" }, + { (1u << 13), "14" }, + { (1u << 14), "15" }, + { (1u << 15), "16" }, + { (1u << 16), "17" }, + { (1u << 17), "18" }, + { (1u << 18), "19" }, + { (1u << 19), "20" }, + { (1u << 20), "21" }, + { (1u << 21), "22" }, + { (1u << 22), "23" }, + { (1u << 23), "24" }, + { (1u << 24), "25" }, + { (1u << 25), "26" }, + { (1u << 26), "27" }, + { (1u << 27), "28" }, + { (1u << 28), "29" }, + { (1u << 29), "30" }, + { (1u << 30), "31" }, + { (1u << 31), "32" }, + { CH_PAGE_ANY, "any" }, + + { -1, NULL } }; static struct ValueTextInfo options_change_replace_when[] = { - { CP_WHEN_EMPTY, "empty" }, - { CP_WHEN_WALKABLE, "walkable" }, - { CP_WHEN_DIGGABLE, "diggable" }, - { CP_WHEN_COLLECTIBLE, "collectible" }, - { CP_WHEN_REMOVABLE, "removable" }, - { CP_WHEN_DESTRUCTIBLE, "destructible" }, + { CP_WHEN_EMPTY, "empty" }, + { CP_WHEN_WALKABLE, "walkable" }, + { CP_WHEN_DIGGABLE, "diggable" }, + { CP_WHEN_COLLECTIBLE, "collectible" }, + { CP_WHEN_REMOVABLE, "removable" }, + { CP_WHEN_DESTRUCTIBLE, "destructible" }, - { -1, NULL } + { -1, NULL } }; static struct ValueTextInfo options_action_type[] = { - { CA_NO_ACTION, "no action" }, - { CA_UNDEFINED, " " }, - { CA_HEADLINE_LEVEL_ACTIONS, "[level]" }, - { CA_RESTART_LEVEL, "restart level" }, - { CA_SHOW_ENVELOPE, "show envelope" }, - { CA_SET_LEVEL_TIME, "set time" }, - { CA_SET_LEVEL_SCORE, "set score" }, - { CA_SET_LEVEL_GEMS, "set gems" }, - { CA_SET_LEVEL_WIND, "set wind dir." }, - { CA_SET_LEVEL_RANDOM_SEED, "set random seed" }, - { CA_UNDEFINED, " " }, - { CA_HEADLINE_PLAYER_ACTIONS, "[player]" }, - { CA_MOVE_PLAYER, "move player" }, - { CA_MOVE_PLAYER_NEW, "move player new" }, - { CA_EXIT_PLAYER, "exit player" }, - { CA_KILL_PLAYER, "kill player" }, - { CA_SET_PLAYER_KEYS, "set keys" }, - { CA_SET_PLAYER_SPEED, "set speed" }, - { CA_SET_PLAYER_SHIELD, "set shield" }, - { CA_SET_PLAYER_GRAVITY, "set gravity" }, - { CA_SET_PLAYER_ARTWORK, "set artwork" }, - { CA_SET_PLAYER_INVENTORY, "set inventory" }, - { CA_UNDEFINED, " " }, - { CA_HEADLINE_CE_ACTIONS, "[CE]" }, - { CA_SET_CE_VALUE, "set CE value" }, - { CA_SET_CE_SCORE, "set CE score" }, - { CA_SET_CE_ARTWORK, "set CE artwork" }, - { CA_UNDEFINED, " " }, - { CA_HEADLINE_ENGINE_ACTIONS, "[engine]" }, - { CA_SET_ENGINE_SCAN_MODE, "set scan mode" }, - - { -1, NULL } + { CA_NO_ACTION, "no action" }, + { CA_UNDEFINED, " " }, + { CA_HEADLINE_LEVEL_ACTIONS, "[level]" }, + { CA_RESTART_LEVEL, "restart level" }, + { CA_SHOW_ENVELOPE, "show envelope" }, + { CA_SET_LEVEL_TIME, "set time" }, + { CA_SET_LEVEL_SCORE, "set score" }, + { CA_SET_LEVEL_GEMS, "set gems" }, + { CA_SET_LEVEL_WIND, "set wind dir." }, + { CA_SET_LEVEL_RANDOM_SEED, "set random seed" }, + { CA_UNDEFINED, " " }, + { CA_HEADLINE_PLAYER_ACTIONS, "[player]" }, + { CA_MOVE_PLAYER, "move player" }, + { CA_MOVE_PLAYER_NEW, "move player new" }, + { CA_EXIT_PLAYER, "exit player" }, + { CA_KILL_PLAYER, "kill player" }, + { CA_SET_PLAYER_KEYS, "set keys" }, + { CA_SET_PLAYER_SPEED, "set speed" }, + { CA_SET_PLAYER_SHIELD, "set shield" }, + { CA_SET_PLAYER_GRAVITY, "set gravity" }, + { CA_SET_PLAYER_ARTWORK, "set artwork" }, + { CA_SET_PLAYER_INVENTORY, "set inventory" }, + { CA_UNDEFINED, " " }, + { CA_HEADLINE_CE_ACTIONS, "[CE]" }, + { CA_SET_CE_VALUE, "set CE value" }, + { CA_SET_CE_SCORE, "set CE score" }, + { CA_SET_CE_ARTWORK, "set CE artwork" }, + { CA_UNDEFINED, " " }, + { CA_HEADLINE_ENGINE_ACTIONS, "[engine]" }, + { CA_SET_ENGINE_SCAN_MODE, "set scan mode" }, + + { -1, NULL } }; static struct ValueTextInfo options_action_mode_none[] = { - { CA_MODE_UNDEFINED, " " }, + { CA_MODE_UNDEFINED, " " }, - { -1, NULL } + { -1, NULL } }; static struct ValueTextInfo options_action_mode_assign[] = { - { CA_MODE_SET, "=" }, + { CA_MODE_SET, "=" }, - { -1, NULL } + { -1, NULL } }; static struct ValueTextInfo options_action_mode_add_remove[] = { - { CA_MODE_ADD, "+" }, - { CA_MODE_SUBTRACT, "-" }, + { CA_MODE_ADD, "+" }, + { CA_MODE_SUBTRACT, "-" }, - { -1, NULL } + { -1, NULL } }; static struct ValueTextInfo options_action_mode_calculate[] = { - { CA_MODE_SET, "=" }, - { CA_MODE_ADD, "+" }, - { CA_MODE_SUBTRACT, "-" }, - { CA_MODE_MULTIPLY, "*" }, - { CA_MODE_DIVIDE, "/" }, - { CA_MODE_MODULO, "%" }, + { CA_MODE_SET, "=" }, + { CA_MODE_ADD, "+" }, + { CA_MODE_SUBTRACT, "-" }, + { CA_MODE_MULTIPLY, "*" }, + { CA_MODE_DIVIDE, "/" }, + { CA_MODE_MODULO, "%" }, - { -1, NULL } + { -1, NULL } }; static struct ValueTextInfo options_action_arg_none[] = { - { CA_ARG_UNDEFINED, " " }, + { CA_ARG_UNDEFINED, " " }, - { -1, NULL } + { -1, NULL } }; static struct ValueTextInfo options_action_arg_player[] = { - { CA_ARG_PLAYER_HEADLINE, "[player]" }, - { CA_ARG_PLAYER_1, "1" }, - { CA_ARG_PLAYER_2, "2" }, - { CA_ARG_PLAYER_3, "3" }, - { CA_ARG_PLAYER_4, "4" }, - { CA_ARG_PLAYER_ANY, "any" }, - { CA_ARG_PLAYER_TRIGGER, "trigger" }, - { CA_ARG_PLAYER_ACTION, "action ->" }, + { CA_ARG_PLAYER_HEADLINE, "[player]" }, + { CA_ARG_PLAYER_1, "1" }, + { CA_ARG_PLAYER_2, "2" }, + { CA_ARG_PLAYER_3, "3" }, + { CA_ARG_PLAYER_4, "4" }, + { CA_ARG_PLAYER_ANY, "any" }, + { CA_ARG_PLAYER_TRIGGER, "trigger" }, + { CA_ARG_PLAYER_ACTION, "action ->" }, - { -1, NULL } + { -1, NULL } }; static struct ValueTextInfo options_action_arg_number[] = { - { CA_ARG_NUMBER_HEADLINE, "[number]" }, - { CA_ARG_0, "0" }, - { CA_ARG_1, "1" }, - { CA_ARG_2, "2" }, - { CA_ARG_3, "3" }, - { CA_ARG_4, "4" }, - { CA_ARG_5, "5" }, - { CA_ARG_10, "10" }, - { CA_ARG_100, "100" }, - { CA_ARG_1000, "1000" }, - { CA_ARG_UNDEFINED, " " }, - { CA_ARG_NUMBER_MIN, "min" }, - { CA_ARG_NUMBER_MAX, "max" }, - { CA_ARG_UNDEFINED, " " }, - { CA_ARG_NUMBER_RESET, "reset" }, - { CA_ARG_UNDEFINED, " " }, - { CA_ARG_NUMBER_CE_VALUE, "CE value" }, - { CA_ARG_NUMBER_CE_SCORE, "CE score" }, - { CA_ARG_NUMBER_CE_DELAY, "CE delay" }, - { CA_ARG_UNDEFINED, " " }, - { CA_ARG_NUMBER_LEVEL_TIME, "time" }, - { CA_ARG_NUMBER_LEVEL_GEMS, "gems" }, - { CA_ARG_NUMBER_LEVEL_SCORE, "score" }, - { CA_ARG_UNDEFINED, " " }, - { CA_ARG_ELEMENT_CV_HEADLINE, "[CE value]" }, - { CA_ARG_ELEMENT_CV_TARGET, "target" }, - { CA_ARG_ELEMENT_CV_TRIGGER, "trigger" }, - { CA_ARG_ELEMENT_CV_ACTION, "action ->" }, - { CA_ARG_UNDEFINED, " " }, - { CA_ARG_ELEMENT_CS_HEADLINE, "[CE score]" }, - { CA_ARG_ELEMENT_CS_TARGET, "target" }, - { CA_ARG_ELEMENT_CS_TRIGGER, "trigger" }, - { CA_ARG_ELEMENT_CS_ACTION, "action ->" }, - - { -1, NULL } + { CA_ARG_NUMBER_HEADLINE, "[number]" }, + { CA_ARG_0, "0" }, + { CA_ARG_1, "1" }, + { CA_ARG_2, "2" }, + { CA_ARG_3, "3" }, + { CA_ARG_4, "4" }, + { CA_ARG_5, "5" }, + { CA_ARG_10, "10" }, + { CA_ARG_100, "100" }, + { CA_ARG_1000, "1000" }, + { CA_ARG_UNDEFINED, " " }, + { CA_ARG_NUMBER_MIN, "min" }, + { CA_ARG_NUMBER_MAX, "max" }, + { CA_ARG_UNDEFINED, " " }, + { CA_ARG_NUMBER_RESET, "reset" }, + { CA_ARG_UNDEFINED, " " }, + { CA_ARG_NUMBER_CE_VALUE, "CE value" }, + { CA_ARG_NUMBER_CE_SCORE, "CE score" }, + { CA_ARG_NUMBER_CE_DELAY, "CE delay" }, + { CA_ARG_UNDEFINED, " " }, + { CA_ARG_NUMBER_LEVEL_TIME, "time" }, + { CA_ARG_NUMBER_LEVEL_GEMS, "gems" }, + { CA_ARG_NUMBER_LEVEL_SCORE, "score" }, + { CA_ARG_UNDEFINED, " " }, + { CA_ARG_ELEMENT_CV_HEADLINE, "[CE value]" }, + { CA_ARG_ELEMENT_CV_TARGET, "target" }, + { CA_ARG_ELEMENT_CV_TRIGGER, "trigger" }, + { CA_ARG_ELEMENT_CV_ACTION, "action ->" }, + { CA_ARG_UNDEFINED, " " }, + { CA_ARG_ELEMENT_CS_HEADLINE, "[CE score]" }, + { CA_ARG_ELEMENT_CS_TARGET, "target" }, + { CA_ARG_ELEMENT_CS_TRIGGER, "trigger" }, + { CA_ARG_ELEMENT_CS_ACTION, "action ->" }, + + { -1, NULL } }; static struct ValueTextInfo options_action_arg_value[] = { - { CA_ARG_NUMBER_HEADLINE, "[number]" }, - { CA_ARG_0, "0" }, - { CA_ARG_1, "1" }, - { CA_ARG_2, "2" }, - { CA_ARG_3, "3" }, - { CA_ARG_4, "4" }, - { CA_ARG_5, "5" }, - { CA_ARG_10, "10" }, - { CA_ARG_100, "100" }, - { CA_ARG_1000, "1000" }, - { CA_ARG_UNDEFINED, " " }, - { CA_ARG_NUMBER_MIN, "min" }, - { CA_ARG_NUMBER_MAX, "max" }, - { CA_ARG_UNDEFINED, " " }, - { CA_ARG_NUMBER_RESET, "reset" }, - { CA_ARG_UNDEFINED, " " }, - { CA_ARG_NUMBER_CE_VALUE, "CE value" }, - { CA_ARG_NUMBER_CE_SCORE, "CE score" }, - { CA_ARG_NUMBER_CE_DELAY, "CE delay" }, - { CA_ARG_UNDEFINED, " " }, - { CA_ARG_NUMBER_LEVEL_TIME, "time" }, - { CA_ARG_NUMBER_LEVEL_GEMS, "gems" }, - { CA_ARG_NUMBER_LEVEL_SCORE, "score" }, - { CA_ARG_UNDEFINED, " " }, - { CA_ARG_ELEMENT_CV_HEADLINE, "[CE value]" }, - { CA_ARG_ELEMENT_CV_TARGET, "target" }, - { CA_ARG_ELEMENT_CV_TRIGGER, "trigger" }, - { CA_ARG_ELEMENT_CV_ACTION, "action ->" }, - { CA_ARG_UNDEFINED, " " }, - { CA_ARG_ELEMENT_CS_HEADLINE, "[CE score]" }, - { CA_ARG_ELEMENT_CS_TARGET, "target" }, - { CA_ARG_ELEMENT_CS_TRIGGER, "trigger" }, - { CA_ARG_ELEMENT_CS_ACTION, "action ->" }, - { CA_ARG_UNDEFINED, " " }, - { CA_ARG_ELEMENT_NR_HEADLINE, "[element]" }, - { CA_ARG_ELEMENT_NR_TARGET, "target" }, - { CA_ARG_ELEMENT_NR_TRIGGER, "trigger" }, - { CA_ARG_ELEMENT_NR_ACTION, "action ->" }, - - { -1, NULL } + { CA_ARG_NUMBER_HEADLINE, "[number]" }, + { CA_ARG_0, "0" }, + { CA_ARG_1, "1" }, + { CA_ARG_2, "2" }, + { CA_ARG_3, "3" }, + { CA_ARG_4, "4" }, + { CA_ARG_5, "5" }, + { CA_ARG_10, "10" }, + { CA_ARG_100, "100" }, + { CA_ARG_1000, "1000" }, + { CA_ARG_UNDEFINED, " " }, + { CA_ARG_NUMBER_MIN, "min" }, + { CA_ARG_NUMBER_MAX, "max" }, + { CA_ARG_UNDEFINED, " " }, + { CA_ARG_NUMBER_RESET, "reset" }, + { CA_ARG_UNDEFINED, " " }, + { CA_ARG_NUMBER_CE_VALUE, "CE value" }, + { CA_ARG_NUMBER_CE_SCORE, "CE score" }, + { CA_ARG_NUMBER_CE_DELAY, "CE delay" }, + { CA_ARG_UNDEFINED, " " }, + { CA_ARG_NUMBER_LEVEL_TIME, "time" }, + { CA_ARG_NUMBER_LEVEL_GEMS, "gems" }, + { CA_ARG_NUMBER_LEVEL_SCORE, "score" }, + { CA_ARG_UNDEFINED, " " }, + { CA_ARG_ELEMENT_CV_HEADLINE, "[CE value]" }, + { CA_ARG_ELEMENT_CV_TARGET, "target" }, + { CA_ARG_ELEMENT_CV_TRIGGER, "trigger" }, + { CA_ARG_ELEMENT_CV_ACTION, "action ->" }, + { CA_ARG_UNDEFINED, " " }, + { CA_ARG_ELEMENT_CS_HEADLINE, "[CE score]" }, + { CA_ARG_ELEMENT_CS_TARGET, "target" }, + { CA_ARG_ELEMENT_CS_TRIGGER, "trigger" }, + { CA_ARG_ELEMENT_CS_ACTION, "action ->" }, + { CA_ARG_UNDEFINED, " " }, + { CA_ARG_ELEMENT_NR_HEADLINE, "[element]" }, + { CA_ARG_ELEMENT_NR_TARGET, "target" }, + { CA_ARG_ELEMENT_NR_TRIGGER, "trigger" }, + { CA_ARG_ELEMENT_NR_ACTION, "action ->" }, + + { -1, NULL } }; static struct ValueTextInfo options_action_arg_envelope[] = { - { CA_ARG_NUMBER_HEADLINE, "[number]" }, - { CA_ARG_1, "1" }, - { CA_ARG_2, "2" }, - { CA_ARG_3, "3" }, - { CA_ARG_4, "4" }, - { CA_ARG_UNDEFINED, " " }, - { CA_ARG_ELEMENT_HEADLINE, "[element]" }, - { CA_ARG_ELEMENT_TARGET, "target" }, - { CA_ARG_ELEMENT_TRIGGER, "trigger" }, - { CA_ARG_ELEMENT_ACTION, "action ->" }, - - { -1, NULL } + { CA_ARG_NUMBER_HEADLINE, "[number]" }, + { CA_ARG_1, "1" }, + { CA_ARG_2, "2" }, + { CA_ARG_3, "3" }, + { CA_ARG_4, "4" }, + { CA_ARG_UNDEFINED, " " }, + { CA_ARG_ELEMENT_HEADLINE, "[element]" }, + { CA_ARG_ELEMENT_TARGET, "target" }, + { CA_ARG_ELEMENT_TRIGGER, "trigger" }, + { CA_ARG_ELEMENT_ACTION, "action ->" }, + + { -1, NULL } }; static struct ValueTextInfo options_action_arg_key[] = { - { CA_ARG_NUMBER_HEADLINE, "[number]" }, - { CA_ARG_1, "1" }, - { CA_ARG_2, "2" }, - { CA_ARG_3, "3" }, - { CA_ARG_4, "4" }, - { CA_ARG_5, "5" }, - { CA_ARG_6, "6" }, - { CA_ARG_7, "7" }, - { CA_ARG_8, "8" }, - { CA_ARG_UNDEFINED, " " }, - { CA_ARG_ELEMENT_HEADLINE, "[element]" }, - { CA_ARG_ELEMENT_TARGET, "target" }, - { CA_ARG_ELEMENT_TRIGGER, "trigger" }, - { CA_ARG_ELEMENT_ACTION, "action ->" }, - - { -1, NULL } + { CA_ARG_NUMBER_HEADLINE, "[number]" }, + { CA_ARG_1, "1" }, + { CA_ARG_2, "2" }, + { CA_ARG_3, "3" }, + { CA_ARG_4, "4" }, + { CA_ARG_5, "5" }, + { CA_ARG_6, "6" }, + { CA_ARG_7, "7" }, + { CA_ARG_8, "8" }, + { CA_ARG_UNDEFINED, " " }, + { CA_ARG_ELEMENT_HEADLINE, "[element]" }, + { CA_ARG_ELEMENT_TARGET, "target" }, + { CA_ARG_ELEMENT_TRIGGER, "trigger" }, + { CA_ARG_ELEMENT_ACTION, "action ->" }, + + { -1, NULL } }; static struct ValueTextInfo options_action_arg_speed[] = { - { CA_ARG_SPEED_HEADLINE, "[speed]" }, - { CA_ARG_SPEED_NOT_MOVING, "frozen" }, - { CA_ARG_SPEED_VERY_SLOW, "very slow" }, - { CA_ARG_SPEED_SLOW, "slow" }, - { CA_ARG_SPEED_NORMAL, "normal" }, - { CA_ARG_SPEED_FAST, "fast" }, - { CA_ARG_SPEED_VERY_FAST, "very fast" }, - { CA_ARG_SPEED_EVEN_FASTER, "ultrafast" }, - { CA_ARG_UNDEFINED, " " }, - { CA_ARG_SPEED_SLOWER, "slower" }, - { CA_ARG_SPEED_FASTER, "faster" }, - { CA_ARG_UNDEFINED, " " }, - { CA_ARG_SPEED_RESET, "reset" }, - - { -1, NULL } + { CA_ARG_SPEED_HEADLINE, "[speed]" }, + { CA_ARG_SPEED_NOT_MOVING, "frozen" }, + { CA_ARG_SPEED_VERY_SLOW, "very slow" }, + { CA_ARG_SPEED_SLOW, "slow" }, + { CA_ARG_SPEED_NORMAL, "normal" }, + { CA_ARG_SPEED_FAST, "fast" }, + { CA_ARG_SPEED_VERY_FAST, "very fast" }, + { CA_ARG_SPEED_EVEN_FASTER, "ultrafast" }, + { CA_ARG_UNDEFINED, " " }, + { CA_ARG_SPEED_SLOWER, "slower" }, + { CA_ARG_SPEED_FASTER, "faster" }, + { CA_ARG_UNDEFINED, " " }, + { CA_ARG_SPEED_RESET, "reset" }, + + { -1, NULL } }; static struct ValueTextInfo options_action_arg_shield[] = { - { CA_ARG_SHIELD_HEADLINE, "[shield]" }, - { CA_ARG_SHIELD_OFF, "off" }, - { CA_ARG_SHIELD_NORMAL, "normal" }, - { CA_ARG_SHIELD_DEADLY, "deadly" }, + { CA_ARG_SHIELD_HEADLINE, "[shield]" }, + { CA_ARG_SHIELD_OFF, "off" }, + { CA_ARG_SHIELD_NORMAL, "normal" }, + { CA_ARG_SHIELD_DEADLY, "deadly" }, - { -1, NULL } + { -1, NULL } }; static struct ValueTextInfo options_action_arg_artwork[] = { - { CA_ARG_ELEMENT_HEADLINE, "[element]" }, - { CA_ARG_ELEMENT_TARGET, "target" }, - { CA_ARG_ELEMENT_TRIGGER, "trigger" }, - { CA_ARG_ELEMENT_ACTION, "action ->" }, - { CA_ARG_UNDEFINED, " " }, - { CA_ARG_ELEMENT_RESET, "reset" }, + { CA_ARG_ELEMENT_HEADLINE, "[element]" }, + { CA_ARG_ELEMENT_TARGET, "target" }, + { CA_ARG_ELEMENT_TRIGGER, "trigger" }, + { CA_ARG_ELEMENT_ACTION, "action ->" }, + { CA_ARG_UNDEFINED, " " }, + { CA_ARG_ELEMENT_RESET, "reset" }, - { -1, NULL } + { -1, NULL } }; static struct ValueTextInfo options_action_arg_gravity[] = { - { CA_ARG_GRAVITY_HEADLINE, "[gravity]" }, - { CA_ARG_GRAVITY_ON, "on" }, - { CA_ARG_GRAVITY_OFF, "off" }, - { CA_ARG_GRAVITY_TOGGLE, "toggle" }, + { CA_ARG_GRAVITY_HEADLINE, "[gravity]" }, + { CA_ARG_GRAVITY_ON, "on" }, + { CA_ARG_GRAVITY_OFF, "off" }, + { CA_ARG_GRAVITY_TOGGLE, "toggle" }, - { -1, NULL } + { -1, NULL } }; static struct ValueTextInfo options_action_arg_direction[] = { - { CA_ARG_DIRECTION_HEADLINE, "[dir.]" }, - { CA_ARG_DIRECTION_NONE, "none" }, - { CA_ARG_DIRECTION_LEFT, "left" }, - { CA_ARG_DIRECTION_RIGHT, "right" }, - { CA_ARG_DIRECTION_UP, "up" }, - { CA_ARG_DIRECTION_DOWN, "down" }, - { CA_ARG_DIRECTION_TRIGGER, "trigger" }, - { CA_ARG_DIRECTION_TRIGGER_BACK, "-trigger" }, + { CA_ARG_DIRECTION_HEADLINE, "[dir.]" }, + { CA_ARG_DIRECTION_NONE, "none" }, + { CA_ARG_DIRECTION_LEFT, "left" }, + { CA_ARG_DIRECTION_RIGHT, "right" }, + { CA_ARG_DIRECTION_UP, "up" }, + { CA_ARG_DIRECTION_DOWN, "down" }, + { CA_ARG_DIRECTION_TRIGGER, "trigger" }, + { CA_ARG_DIRECTION_TRIGGER_BACK, "-trigger" }, - { -1, NULL } + { -1, NULL } }; static struct ValueTextInfo options_action_arg_scan_mode[] = { - { CA_ARG_SCAN_MODE_HEADLINE, "[mode]" }, - { CA_ARG_SCAN_MODE_NORMAL, "normal" }, - { CA_ARG_SCAN_MODE_REVERSE, "reverse" }, + { CA_ARG_SCAN_MODE_HEADLINE, "[mode]" }, + { CA_ARG_SCAN_MODE_NORMAL, "normal" }, + { CA_ARG_SCAN_MODE_REVERSE, "reverse" }, - { -1, NULL } + { -1, NULL } }; static struct ValueTextInfo options_action_arg_inventory[] = { - { CA_ARG_INVENTORY_HEADLINE, "[add]" }, - { CA_ARG_ELEMENT_TARGET, "+ target" }, - { CA_ARG_ELEMENT_TRIGGER, "+ trigger" }, - { CA_ARG_ELEMENT_ACTION, "+ action" }, - { CA_ARG_UNDEFINED, " " }, - { CA_ARG_INVENTORY_RM_HEADLINE,"[remove]" }, - { CA_ARG_INVENTORY_RM_TARGET, "- target" }, - { CA_ARG_INVENTORY_RM_TRIGGER,"- trigger" }, - { CA_ARG_INVENTORY_RM_ACTION, "- action" }, - { CA_ARG_INVENTORY_RM_FIRST, "- first" }, - { CA_ARG_INVENTORY_RM_LAST, "- last" }, - { CA_ARG_INVENTORY_RM_ALL, "- all" }, - { CA_ARG_UNDEFINED, " " }, - { CA_ARG_INVENTORY_RESET, "reset" }, - - { -1, NULL } + { CA_ARG_INVENTORY_HEADLINE, "[add]" }, + { CA_ARG_ELEMENT_TARGET, "+ target" }, + { CA_ARG_ELEMENT_TRIGGER, "+ trigger" }, + { CA_ARG_ELEMENT_ACTION, "+ action" }, + { CA_ARG_UNDEFINED, " " }, + { CA_ARG_INVENTORY_RM_HEADLINE, "[remove]" }, + { CA_ARG_INVENTORY_RM_TARGET, "- target" }, + { CA_ARG_INVENTORY_RM_TRIGGER, "- trigger" }, + { CA_ARG_INVENTORY_RM_ACTION, "- action" }, + { CA_ARG_INVENTORY_RM_FIRST, "- first" }, + { CA_ARG_INVENTORY_RM_LAST, "- last" }, + { CA_ARG_INVENTORY_RM_ALL, "- all" }, + { CA_ARG_UNDEFINED, " " }, + { CA_ARG_INVENTORY_RESET, "reset" }, + + { -1, NULL } }; static char options_change_page_strings[MAX_CHANGE_PAGES][10]; static struct ValueTextInfo options_change_page[MAX_CHANGE_PAGES + 1] = { - { -1, NULL } + { -1, NULL } }; static struct ValueTextInfo options_group_choice_mode[] = { - { ANIM_RANDOM, "random" }, - { ANIM_LOOP, "loop" }, - { ANIM_LINEAR, "linear" }, - { ANIM_PINGPONG, "pingpong" }, - { ANIM_PINGPONG2, "pingpong 2" }, - { ANIM_LEVEL_NR, "level number" }, + { ANIM_RANDOM, "random" }, + { ANIM_LOOP, "loop" }, + { ANIM_LINEAR, "linear" }, + { ANIM_PINGPONG, "pingpong" }, + { ANIM_PINGPONG2, "pingpong 2" }, + { ANIM_LEVEL_NR, "level number" }, - { -1, NULL } + { -1, NULL } }; static struct ValueTextInfo options_bd_scheduling_type[] = { - { GD_SCHEDULING_MILLISECONDS, "Milliseconds" }, - { GD_SCHEDULING_BD1, "BD1" }, - { GD_SCHEDULING_BD2, "BD2" }, - { GD_SCHEDULING_PLCK, "Construction Kit" }, - { GD_SCHEDULING_CRDR, "Crazy Dream 7" }, - { GD_SCHEDULING_BD1_ATARI, "Atari BD1" }, - { GD_SCHEDULING_BD2_PLCK_ATARI, "Atari BD2 / PLCK" }, + { GD_SCHEDULING_MILLISECONDS, "Milliseconds" }, + { GD_SCHEDULING_BD1, "BD1" }, + { GD_SCHEDULING_BD2, "BD2" }, + { GD_SCHEDULING_PLCK, "Construction Kit" }, + { GD_SCHEDULING_CRDR, "Crazy Dream 7" }, + { GD_SCHEDULING_BD1_ATARI, "Atari BD1" }, + { GD_SCHEDULING_BD2_PLCK_ATARI, "Atari BD2 / PLCK" }, - { -1, NULL } + { -1, NULL } +}; + +static struct ValueTextInfo options_bd_color_type[] = +{ + { GD_COLOR_TYPE_RGB, "RGB colors" }, + { GD_COLOR_TYPE_C64, "C64 colors" }, + { GD_COLOR_TYPE_C64DTV, "C64DTV colors" }, + { GD_COLOR_TYPE_ATARI, "Atari colors" }, + + { -1, NULL } +}; + +static struct ValueTextInfo options_bd_color_c64_name[] = +{ + { GD_COLOR_INDEX_BLACK, "Black" }, + { GD_COLOR_INDEX_WHITE, "White" }, + { GD_COLOR_INDEX_RED, "Red" }, + { GD_COLOR_INDEX_CYAN, "Cyan" }, + { GD_COLOR_INDEX_PURPLE, "Purple" }, + { GD_COLOR_INDEX_GREEN, "Green" }, + { GD_COLOR_INDEX_BLUE, "Blue" }, + { GD_COLOR_INDEX_YELLOW, "Yellow" }, + { GD_COLOR_INDEX_ORANGE, "Orange" }, + { GD_COLOR_INDEX_BROWN, "Brown" }, + { GD_COLOR_INDEX_LIGHTRED, "Light red" }, + { GD_COLOR_INDEX_GRAY1, "Dark gray" }, + { GD_COLOR_INDEX_GRAY2, "Gray" }, + { GD_COLOR_INDEX_LIGHTGREEN, "Light green" }, + { GD_COLOR_INDEX_LIGHTBLUE, "Light blue" }, + { GD_COLOR_INDEX_GRAY3, "Light gray" }, + + { -1, NULL } }; static struct ValueTextInfo *action_arg_modes[] = @@ -2782,56 +3059,135 @@ static struct { ED_SELECTBOX_ID_TIME_OR_STEPS, - -1, ED_LEVEL_SETTINGS_YPOS(8), - GADGET_ID_TIME_OR_STEPS, GADGET_ID_LEVEL_TIMELIMIT_UP, + -1, ED_LEVEL_SETTINGS_YPOS(8), + GADGET_ID_TIME_OR_STEPS, GADGET_ID_LEVEL_TIMELIMIT_UP, -1, options_time_or_steps, &level.use_step_counter, - NULL, NULL, "(0 => no limit)", "Select time or step limit" + NULL, NULL, "(0 => no limit)", "Select time or step limit" }, { ED_SELECTBOX_ID_TIME_SCORE_BASE, - -1, ED_LEVEL_SETTINGS_YPOS(10), - GADGET_ID_TIME_SCORE_BASE, GADGET_ID_LEVEL_TIMESCORE_UP, + -1, ED_LEVEL_SETTINGS_YPOS(10), + GADGET_ID_TIME_SCORE_BASE, GADGET_ID_LEVEL_TIMESCORE_UP, -1, options_time_score_base, &level.time_score_base, - NULL, NULL, NULL, "Select 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, - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(12), - GADGET_ID_GAME_ENGINE_TYPE, GADGET_ID_NONE, + ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(12), + GADGET_ID_GAME_ENGINE_TYPE, GADGET_ID_NONE, -1, options_game_engine_type, &level.game_engine_type, - NULL, "Game engine:", NULL, "Select game engine" + NULL, "Game engine:", NULL, "Select game engine" + }, + { + ED_SELECTBOX_ID_LEVELSET_SAVE_MODE, + ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(10), + GADGET_ID_LEVELSET_SAVE_MODE, GADGET_ID_NONE, + -1, + options_levelset_save_mode, + &levelset_save_mode, + "Action:", NULL, NULL, "Select action when saving level set" }, + + // ---------- engine settings: config --------------------------------------- + { ED_SELECTBOX_ID_BD_SCHEDULING_TYPE, - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(1), - GADGET_ID_BD_SCHEDULING_TYPE, GADGET_ID_NONE, + 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" + NULL, "Scheduling type:", NULL, "Select level timing" }, + + // ---------- engine settings: colors --------------------------------------- + { - ED_SELECTBOX_ID_LEVELSET_SAVE_MODE, - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(10), - GADGET_ID_LEVELSET_SAVE_MODE, GADGET_ID_NONE, + ED_SELECTBOX_ID_BD_COLOR_TYPE, + ED_ENGINE_SETTINGS_XPOS(0), ED_ENGINE_SETTINGS_YPOS(0), + GADGET_ID_BD_COLOR_TYPE, GADGET_ID_NONE, -1, - options_levelset_save_mode, - &levelset_save_mode, - "Action:", NULL, NULL, "Select action when saving level set" + options_bd_color_type, + &level.bd_color_type, + "Boulder Dash level colors:", + "Color palette type:", NULL, "Select color palette type" + }, + { + ED_SELECTBOX_ID_BD_COLOR_C64_B, + ED_ENGINE_SETTINGS_XPOS(0), ED_ENGINE_SETTINGS_YPOS(1), + GADGET_ID_BD_COLOR_C64_B, GADGET_ID_NONE, + -1, + options_bd_color_c64_name, + &bd_color_c64[0], + NULL, "Border color: ", NULL, "Select border color (not used)" + }, + { + ED_SELECTBOX_ID_BD_COLOR_C64_0, + ED_ENGINE_SETTINGS_XPOS(0), ED_ENGINE_SETTINGS_YPOS(2), + GADGET_ID_BD_COLOR_C64_0, GADGET_ID_NONE, + -1, + options_bd_color_c64_name, + &bd_color_c64[1], + NULL, "Background color: ", NULL, "Select background color (C64 graphics)" + }, + { + ED_SELECTBOX_ID_BD_COLOR_C64_1, + ED_ENGINE_SETTINGS_XPOS(0), ED_ENGINE_SETTINGS_YPOS(3), + GADGET_ID_BD_COLOR_C64_1, GADGET_ID_NONE, + -1, + options_bd_color_c64_name, + &bd_color_c64[2], + NULL, "Sand color: ", NULL, "Select sand color (C64 graphics)" + }, + { + ED_SELECTBOX_ID_BD_COLOR_C64_2, + ED_ENGINE_SETTINGS_XPOS(0), ED_ENGINE_SETTINGS_YPOS(4), + GADGET_ID_BD_COLOR_C64_2, GADGET_ID_NONE, + -1, + options_bd_color_c64_name, + &bd_color_c64[3], + NULL, "Steel wall color: ", NULL, "Select steel wall color (C64 graphics)" + }, + { + ED_SELECTBOX_ID_BD_COLOR_C64_3, + ED_ENGINE_SETTINGS_XPOS(0), ED_ENGINE_SETTINGS_YPOS(5), + GADGET_ID_BD_COLOR_C64_3, GADGET_ID_NONE, + -1, + options_bd_color_c64_name, + &bd_color_c64[4], + NULL, "Wall color: ", NULL, "Select wall color (C64 graphics)" + }, + { + ED_SELECTBOX_ID_BD_COLOR_C64_4, + ED_ENGINE_SETTINGS_XPOS(0), ED_ENGINE_SETTINGS_YPOS(6), + GADGET_ID_BD_COLOR_C64_4, GADGET_ID_NONE, + -1, + options_bd_color_c64_name, + &bd_color_c64[5], + NULL, "Amoeba color: ", NULL, "Select amoeba color (C64 graphics)" + }, + { + ED_SELECTBOX_ID_BD_COLOR_C64_5, + ED_ENGINE_SETTINGS_XPOS(0), ED_ENGINE_SETTINGS_YPOS(7), + GADGET_ID_BD_COLOR_C64_5, GADGET_ID_NONE, + -1, + options_bd_color_c64_name, + &bd_color_c64[6], + NULL, "Slime color: ", NULL, "Select slime color (C64 graphics)" }, // ---------- element settings: configure (several elements) ---------------- { ED_SELECTBOX_ID_WIND_DIRECTION, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(0), - GADGET_ID_WIND_DIRECTION, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(0), + GADGET_ID_WIND_DIRECTION, GADGET_ID_NONE, -1, options_wind_direction, &level.wind_direction_initial, @@ -2839,261 +3195,270 @@ static struct }, { ED_SELECTBOX_ID_PLAYER_SPEED, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(7), - GADGET_ID_PLAYER_SPEED, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(7), + GADGET_ID_PLAYER_SPEED, GADGET_ID_NONE, -1, options_player_speed, &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), - GADGET_ID_MM_BALL_CHOICE_MODE, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(4), + GADGET_ID_MM_BALL_CHOICE_MODE, GADGET_ID_NONE, -1, options_group_choice_mode, &level.mm_ball_choice_mode, - NULL, "Choice type:", NULL, "Select type of content choice" + NULL, "Choice type:", NULL, "Select type of content choice" }, // ---------- element settings: configure 1 (custom elements) --------------- { ED_SELECTBOX_ID_CUSTOM_ACCESS_TYPE, - ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(2), - GADGET_ID_CUSTOM_ACCESS_TYPE, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(2), + GADGET_ID_CUSTOM_ACCESS_TYPE, GADGET_ID_NONE, -1, options_access_type, &custom_element.access_type, - NULL, NULL, NULL, "Select type of access to this field" + NULL, NULL, NULL, "Select type of access to this field" }, { ED_SELECTBOX_ID_CUSTOM_ACCESS_LAYER, - -1, ED_ELEMENT_SETTINGS_YPOS(2), - GADGET_ID_CUSTOM_ACCESS_LAYER, GADGET_ID_CUSTOM_ACCESS_TYPE, + -1, ED_ELEMENT_SETTINGS_YPOS(2), + GADGET_ID_CUSTOM_ACCESS_LAYER, GADGET_ID_CUSTOM_ACCESS_TYPE, -1, options_access_layer, &custom_element.access_layer, - NULL, NULL, NULL, "Select layer of access for this field" + NULL, NULL, NULL, "Select layer of access for this field" }, { ED_SELECTBOX_ID_CUSTOM_ACCESS_PROTECTED, - -1, ED_ELEMENT_SETTINGS_YPOS(2), - GADGET_ID_CUSTOM_ACCESS_PROTECTED, GADGET_ID_CUSTOM_ACCESS_LAYER, + -1, ED_ELEMENT_SETTINGS_YPOS(2), + GADGET_ID_CUSTOM_ACCESS_PROTECTED, GADGET_ID_CUSTOM_ACCESS_LAYER, -1, options_access_protected, &custom_element.access_protected, - NULL, NULL, NULL, "Select protected access for this field" + NULL, NULL, NULL, "Select protected access for this field" }, { ED_SELECTBOX_ID_CUSTOM_ACCESS_DIRECTION, - ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(3), - GADGET_ID_CUSTOM_ACCESS_DIRECTION, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(3), + GADGET_ID_CUSTOM_ACCESS_DIRECTION, GADGET_ID_NONE, -1, options_access_direction, &custom_element.access_direction, - NULL, "from", NULL, "Select access direction for this field" + NULL, "from", NULL, "Select access direction for this field" }, { ED_SELECTBOX_ID_CUSTOM_WALK_TO_ACTION, - ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(4), - GADGET_ID_CUSTOM_WALK_TO_ACTION, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(4), + GADGET_ID_CUSTOM_WALK_TO_ACTION, GADGET_ID_NONE, -1, options_walk_to_action, &custom_element.walk_to_action, - NULL, NULL, NULL, "Select diggable/collectible/pushable" + NULL, NULL, NULL, "Select diggable/collectible/pushable" }, // ---------- element settings: configure 2 (custom elements) --------------- { ED_SELECTBOX_ID_CUSTOM_MOVE_PATTERN, - ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(1), - GADGET_ID_CUSTOM_MOVE_PATTERN, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(1), + GADGET_ID_CUSTOM_MOVE_PATTERN, GADGET_ID_NONE, -1, options_move_pattern, &custom_element.move_pattern, - NULL, "Can move", NULL, "Select element move pattern" + NULL, "Can move", NULL, "Select element move pattern" }, { ED_SELECTBOX_ID_CUSTOM_MOVE_DIRECTION, - ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(2), - GADGET_ID_CUSTOM_MOVE_DIRECTION, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(2), + GADGET_ID_CUSTOM_MOVE_DIRECTION, GADGET_ID_NONE, -1, options_move_direction, &custom_element.move_direction_initial, - NULL, "Starts moving", NULL, "Select initial element move direction" + NULL, "Starts moving", NULL, "Select initial element move direction" }, { ED_SELECTBOX_ID_CUSTOM_MOVE_STEPSIZE, - ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(4), - GADGET_ID_CUSTOM_MOVE_STEPSIZE, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(4), + GADGET_ID_CUSTOM_MOVE_STEPSIZE, GADGET_ID_NONE, -1, options_move_stepsize, &custom_element.move_stepsize, - NULL, "Move/fall speed", NULL, "Select speed of element movement" + NULL, "Move/fall speed", NULL, "Select speed of element movement" }, { ED_SELECTBOX_ID_CUSTOM_MOVE_LEAVE_TYPE, - ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(3), - GADGET_ID_CUSTOM_MOVE_LEAVE_TYPE, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(3), + GADGET_ID_CUSTOM_MOVE_LEAVE_TYPE, GADGET_ID_NONE, -1, options_move_leave_type, &custom_element.move_leave_type, // 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", ":", "Select leave behind or change element" + // NULL, "can dig: can", ":", "leave behind or change element" + NULL, " Can", ":", "Select leave behind or change element" }, { ED_SELECTBOX_ID_CUSTOM_SMASH_TARGETS, - -1, ED_ELEMENT_SETTINGS_YPOS(8), - GADGET_ID_CUSTOM_SMASH_TARGETS, GADGET_ID_CUSTOM_CAN_SMASH, + -1, ED_ELEMENT_SETTINGS_YPOS(8), + GADGET_ID_CUSTOM_SMASH_TARGETS, GADGET_ID_CUSTOM_CAN_SMASH, -1, options_smash_targets, &custom_element.smash_targets, - NULL, "Can smash", NULL, "Select elements that can be smashed" + NULL, "Can smash", NULL, "Select elements that can be smashed" }, { ED_SELECTBOX_ID_CUSTOM_SLIPPERY_TYPE, - ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(9), - GADGET_ID_CUSTOM_SLIPPERY_TYPE, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(9), + GADGET_ID_CUSTOM_SLIPPERY_TYPE, GADGET_ID_NONE, -1, options_slippery_type, &custom_element.slippery_type, - NULL, "Slippery", NULL, "Select where other elements fall down" + NULL, "Slippery", NULL, "Select where other elements fall down" }, { ED_SELECTBOX_ID_CUSTOM_DEADLINESS, - ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(10), - GADGET_ID_CUSTOM_DEADLINESS, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(10), + GADGET_ID_CUSTOM_DEADLINESS, GADGET_ID_NONE, -1, options_deadliness, &custom_element.deadliness, - NULL, "Deadly when", NULL, "Select deadliness of element" + NULL, "Deadly when", NULL, "Select deadliness of element" }, { ED_SELECTBOX_ID_CUSTOM_EXPLOSION_TYPE, - ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(11), - GADGET_ID_CUSTOM_EXPLOSION_TYPE, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(11), + GADGET_ID_CUSTOM_EXPLOSION_TYPE, GADGET_ID_NONE, -1, options_explosion_type, &custom_element.explosion_type, - NULL, "Can explode", NULL, "Select explosion type" + NULL, "Can explode", NULL, "Select explosion type" }, // ---------- element settings: advanced (custom elements) ------------------ { ED_SELECTBOX_ID_CHANGE_TIME_UNITS, - ED_ELEMENT_SETTINGS_XPOS(2), ED_ELEMENT_SETTINGS_YPOS(3), - GADGET_ID_CHANGE_TIME_UNITS, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(2), ED_ELEMENT_SETTINGS_YPOS(3), + GADGET_ID_CHANGE_TIME_UNITS, GADGET_ID_NONE, -1, options_time_units, &custom_element_change.delay_frames, - NULL, "Delay time given in", NULL, "Select delay time units for change" + NULL, "Delay time given in", NULL, "Select delay time units for change" }, { ED_SELECTBOX_ID_CHANGE_DIRECT_ACTION, - ED_ELEMENT_SETTINGS_XPOS(2), ED_ELEMENT_SETTINGS_YPOS(4), - GADGET_ID_CHANGE_DIRECT_ACTION, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(2), ED_ELEMENT_SETTINGS_YPOS(4), + GADGET_ID_CHANGE_DIRECT_ACTION, GADGET_ID_NONE, -1, options_change_direct_action, &custom_element_change.direct_action, - NULL, NULL, NULL, "Select type of direct action" + NULL, NULL, NULL, "Select type of direct action" }, { ED_SELECTBOX_ID_CHANGE_OTHER_ACTION, - ED_ELEMENT_SETTINGS_XPOS(2), ED_ELEMENT_SETTINGS_YPOS(5), - GADGET_ID_CHANGE_OTHER_ACTION, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(2), ED_ELEMENT_SETTINGS_YPOS(5), + GADGET_ID_CHANGE_OTHER_ACTION, GADGET_ID_NONE, -1, options_change_other_action, &custom_element_change.other_action, - NULL, NULL, "element:", "Select type of other element action" + NULL, NULL, "element:", "Select type of other element action" }, { ED_SELECTBOX_ID_CHANGE_SIDE, - ED_ELEMENT_SETTINGS_XPOS(2), ED_ELEMENT_SETTINGS_YPOS(6), - GADGET_ID_CHANGE_SIDE, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(2), ED_ELEMENT_SETTINGS_YPOS(6), + GADGET_ID_CHANGE_SIDE, GADGET_ID_NONE, -1, options_change_trigger_side, &custom_element_change.trigger_side, - NULL, "at", "side", "Select element side triggering change" + NULL, "at", "side", "Select element side triggering change" }, { ED_SELECTBOX_ID_CHANGE_PLAYER, - ED_ELEMENT_SETTINGS_XPOS(2), ED_ELEMENT_SETTINGS_YPOS(7), - GADGET_ID_CHANGE_PLAYER, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(2), ED_ELEMENT_SETTINGS_YPOS(7), + GADGET_ID_CHANGE_PLAYER, GADGET_ID_NONE, -1, options_change_trigger_player, &custom_element_change.trigger_player, - NULL, "Player:", " ", "Select player that causes change" + NULL, "Player:", " ", "Select player that causes change" }, { ED_SELECTBOX_ID_CHANGE_PAGE, - ED_ELEMENT_SETTINGS_XPOS(2), ED_ELEMENT_SETTINGS_YPOS(7), - GADGET_ID_CHANGE_PAGE, GADGET_ID_CHANGE_PLAYER, + ED_ELEMENT_SETTINGS_XPOS(2), ED_ELEMENT_SETTINGS_YPOS(7), + GADGET_ID_CHANGE_PAGE, GADGET_ID_CHANGE_PLAYER, -1, options_change_trigger_page, &custom_element_change.trigger_page, - NULL, "Page:", NULL, "Select change page that causes change" + NULL, "Page:", NULL, "Select change page that causes change" }, { ED_SELECTBOX_ID_CHANGE_REPLACE_WHEN, - ED_ELEMENT_SETTINGS_XPOS(2), ED_ELEMENT_SETTINGS_YPOS(10), - GADGET_ID_CHANGE_REPLACE_WHEN, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(2), ED_ELEMENT_SETTINGS_YPOS(10), + GADGET_ID_CHANGE_REPLACE_WHEN, GADGET_ID_NONE, -1, options_change_replace_when, &custom_element_change.replace_when, - NULL, "Replace when", NULL, "Select which elements can be replaced" + NULL, "Replace when", NULL, "Select which elements can be replaced" }, { ED_SELECTBOX_ID_ACTION_TYPE, - ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(13), - GADGET_ID_ACTION_TYPE, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(13), + GADGET_ID_ACTION_TYPE, GADGET_ID_NONE, 15, options_action_type, &custom_element_change.action_type, - NULL, NULL, NULL, "Select action on specified condition" + NULL, NULL, NULL, "Select action on specified condition" }, { ED_SELECTBOX_ID_ACTION_MODE, - -1, ED_ELEMENT_SETTINGS_YPOS(13), - GADGET_ID_ACTION_MODE, GADGET_ID_ACTION_TYPE, + -1, ED_ELEMENT_SETTINGS_YPOS(13), + GADGET_ID_ACTION_MODE, GADGET_ID_ACTION_TYPE, -1, options_action_mode_none, &custom_element_change.action_mode, - NULL, NULL, NULL, "Select action operator" + NULL, NULL, NULL, "Select action operator" }, { ED_SELECTBOX_ID_ACTION_ARG, - -1, ED_ELEMENT_SETTINGS_YPOS(13), - GADGET_ID_ACTION_ARG, GADGET_ID_ACTION_MODE, + -1, ED_ELEMENT_SETTINGS_YPOS(13), + GADGET_ID_ACTION_ARG, GADGET_ID_ACTION_MODE, -1, options_action_arg_none, &custom_element_change.action_arg, - NULL, NULL, NULL, "Select action parameter" + NULL, NULL, NULL, "Select action parameter" }, { ED_SELECTBOX_ID_SELECT_CHANGE_PAGE, - ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(14), - GADGET_ID_SELECT_CHANGE_PAGE, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(14), + GADGET_ID_SELECT_CHANGE_PAGE, GADGET_ID_NONE, 3, options_change_page, &custom_element.current_change_page, - NULL, NULL, NULL, "Select element change page" + NULL, NULL, NULL, "Select element change page" }, // ---------- element settings: configure (group elements) ------------------ { ED_SELECTBOX_ID_GROUP_CHOICE_MODE, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(4), - GADGET_ID_GROUP_CHOICE_MODE, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(4), + GADGET_ID_GROUP_CHOICE_MODE, GADGET_ID_NONE, -1, options_group_choice_mode, &group_element_info.choice_mode, - NULL, "Choice type:", NULL, "Select type of group element choice" + NULL, "Choice type:", NULL, "Select type of group element choice" }, }; @@ -3112,86 +3477,103 @@ static struct { ED_TEXTBUTTON_ID_LEVELCONFIG_LEVEL, - ED_LEVEL_TABS_XPOS(0), ED_LEVEL_TABS_YPOS(0), - GADGET_ID_LEVELCONFIG_LEVEL, GADGET_ID_NONE, - 8, "Level", - NULL, NULL, NULL, "Configure level settings" + ED_LEVEL_TABS_XPOS(0), ED_LEVEL_TABS_YPOS(0), + GADGET_ID_LEVELCONFIG_LEVEL, GADGET_ID_NONE, + 8, "Level", + NULL, NULL, NULL, "Configure level settings" }, { ED_TEXTBUTTON_ID_LEVELCONFIG_LEVELSET, - -1, -1, - GADGET_ID_LEVELCONFIG_LEVELSET, GADGET_ID_LEVELCONFIG_LEVEL, - 8, "Levelset", - NULL, NULL, NULL, "Update this or create new level set" + -1, -1, + GADGET_ID_LEVELCONFIG_LEVELSET, GADGET_ID_LEVELCONFIG_LEVEL, + 8, "Levelset", + NULL, NULL, NULL, "Update this or create new level set" }, { ED_TEXTBUTTON_ID_LEVELCONFIG_EDITOR, - -1, -1, - GADGET_ID_LEVELCONFIG_EDITOR, GADGET_ID_LEVELCONFIG_LEVELSET, - 8, "Editor", - NULL, NULL, NULL, "Configure editor settings" + -1, -1, + GADGET_ID_LEVELCONFIG_EDITOR, GADGET_ID_LEVELCONFIG_LEVELSET, + 8, "Editor", + NULL, NULL, NULL, "Configure editor settings" }, { ED_TEXTBUTTON_ID_LEVELCONFIG_ENGINE, - -1, -1, - GADGET_ID_LEVELCONFIG_ENGINE, GADGET_ID_LEVELCONFIG_EDITOR, - 8, "Engine", - NULL, NULL, NULL, "Configure engine settings" + -1, -1, + GADGET_ID_LEVELCONFIG_ENGINE, GADGET_ID_LEVELCONFIG_EDITOR, + 8, "Engine", + 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 level colors" }, // ---------- element settings (tabs) --------------------------------------- { ED_TEXTBUTTON_ID_PROPERTIES_INFO, - ED_ELEMENT_TABS_XPOS(0), ED_ELEMENT_TABS_YPOS(0), - GADGET_ID_PROPERTIES_INFO, GADGET_ID_NONE, - 8, "Info", - NULL, NULL, NULL, "Show information about element" + ED_ELEMENT_TABS_XPOS(0), ED_ELEMENT_TABS_YPOS(0), + GADGET_ID_PROPERTIES_INFO, GADGET_ID_NONE, + 8, "Info", + NULL, NULL, NULL, "Show information about element" }, { ED_TEXTBUTTON_ID_PROPERTIES_CONFIG, - -1, -1, - GADGET_ID_PROPERTIES_CONFIG, GADGET_ID_PROPERTIES_INFO, - 8, "Config", - NULL, NULL, NULL, "Configure element properties" + -1, -1, + GADGET_ID_PROPERTIES_CONFIG, GADGET_ID_PROPERTIES_INFO, + 8, "Config", + NULL, NULL, NULL, "Configure element properties" }, { ED_TEXTBUTTON_ID_PROPERTIES_CONFIG_1, - -1, -1, - GADGET_ID_PROPERTIES_CONFIG_1, GADGET_ID_PROPERTIES_INFO, - 8, "Config 1", - NULL, NULL, NULL, "Configure element properties, part 1" + -1, -1, + GADGET_ID_PROPERTIES_CONFIG_1, GADGET_ID_PROPERTIES_INFO, + 8, "Config 1", + NULL, NULL, NULL, "Configure element properties, part 1" }, { ED_TEXTBUTTON_ID_PROPERTIES_CONFIG_2, - -1, -1, - GADGET_ID_PROPERTIES_CONFIG_2, GADGET_ID_PROPERTIES_CONFIG_1, - 8, "Config 2", - NULL, NULL, NULL, "Configure element properties, part 2" + -1, -1, + GADGET_ID_PROPERTIES_CONFIG_2, GADGET_ID_PROPERTIES_CONFIG_1, + 8, "Config 2", + NULL, NULL, NULL, "Configure element properties, part 2" }, { ED_TEXTBUTTON_ID_PROPERTIES_CHANGE, - -1, -1, - GADGET_ID_PROPERTIES_CHANGE, GADGET_ID_PROPERTIES_CONFIG_2, - 8, "Change", - NULL, NULL, NULL, "Configure custom element change pages" + -1, -1, + GADGET_ID_PROPERTIES_CHANGE, GADGET_ID_PROPERTIES_CONFIG_2, + 8, "Change", + NULL, NULL, NULL, "Configure custom element change pages" }, // ---------- level and editor settings (buttons) --------------------------- { ED_TEXTBUTTON_ID_SAVE_LEVELSET, - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(10), - GADGET_ID_SAVE_LEVELSET, GADGET_ID_LEVELSET_SAVE_MODE, - -1, "Save", - NULL, NULL, NULL, "Update or create level set" + ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(10), + GADGET_ID_SAVE_LEVELSET, GADGET_ID_LEVELSET_SAVE_MODE, + -1, "Save", + NULL, NULL, NULL, "Update or create level set" }, { ED_TEXTBUTTON_ID_SAVE_AS_TEMPLATE_2, - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(6), - GADGET_ID_SAVE_AS_TEMPLATE_2, GADGET_ID_NONE, - -1, "Save", - NULL, NULL, "this level as level template", + ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(6), + GADGET_ID_SAVE_AS_TEMPLATE_2, GADGET_ID_NONE, + -1, "Save", + NULL, NULL, "this level as level template", "Save current settings as new template" }, @@ -3199,25 +3581,35 @@ static struct { ED_TEXTBUTTON_ID_SAVE_AS_TEMPLATE_1, - -1, -1, - GADGET_ID_SAVE_AS_TEMPLATE_1, GADGET_ID_CUSTOM_USE_TEMPLATE_1, - -1, "Save", - NULL, " ", "As Template", + -1, -1, + GADGET_ID_SAVE_AS_TEMPLATE_1, GADGET_ID_CUSTOM_USE_TEMPLATE_1, + -1, "Save", + NULL, " ", "As Template", "Save current settings as new template" }, { ED_TEXTBUTTON_ID_ADD_CHANGE_PAGE, - -1, -1, - GADGET_ID_ADD_CHANGE_PAGE, GADGET_ID_PASTE_CHANGE_PAGE, - -1, "New", - NULL, NULL, NULL, "Add new change page" + -1, -1, + GADGET_ID_ADD_CHANGE_PAGE, GADGET_ID_PASTE_CHANGE_PAGE, + -1, "New", + NULL, NULL, NULL, "Add new change page" }, { ED_TEXTBUTTON_ID_DEL_CHANGE_PAGE, - -1, -1, - GADGET_ID_DEL_CHANGE_PAGE, GADGET_ID_ADD_CHANGE_PAGE, - -1, "Delete", - NULL, NULL, NULL, "Delete current change page" + -1, -1, + GADGET_ID_DEL_CHANGE_PAGE, GADGET_ID_ADD_CHANGE_PAGE, + -1, "Delete", + NULL, NULL, NULL, "Delete current change page" + }, + + // ---------- engine settings (buttons) ------------------------------------- + + { + ED_TEXTBUTTON_ID_BD_SET_RANDOM_COLORS, + ED_ENGINE_SETTINGS_XPOS(0), ED_ENGINE_SETTINGS_YPOS(8), + GADGET_ID_BD_SET_RANDOM_COLORS, GADGET_ID_NONE, + -1, "Set random colors", + NULL, NULL, NULL, "Create and set random level colors" }, }; @@ -3234,30 +3626,30 @@ static struct { ED_GRAPHICBUTTON_ID_PREV_CHANGE_PAGE, 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" + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(14), + GADGET_ID_PREV_CHANGE_PAGE, GADGET_ID_NONE, + 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" + -1, ED_ELEMENT_SETTINGS_YPOS(14), + GADGET_ID_NEXT_CHANGE_PAGE, GADGET_ID_SELECT_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" + -1, ED_ELEMENT_SETTINGS_YPOS(14), + GADGET_ID_COPY_CHANGE_PAGE, GADGET_ID_NEXT_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" + -1, ED_ELEMENT_SETTINGS_YPOS(14), + GADGET_ID_PASTE_CHANGE_PAGE, GADGET_ID_COPY_CHANGE_PAGE, + NULL, NULL, "Paste settings to this change page" }, }; @@ -3367,19 +3759,19 @@ static struct { { ED_RADIOBUTTON_ID_PERCENTAGE, - -1, ED_LEVEL_SETTINGS_YPOS(0), - GADGET_ID_RANDOM_PERCENTAGE, GADGET_ID_LEVEL_RANDOM_UP, + -1, ED_LEVEL_SETTINGS_YPOS(0), + 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" + &random_placement_method, RANDOM_USE_PERCENTAGE, + " ", "percentage", "Use percentage for random elements" }, { ED_RADIOBUTTON_ID_QUANTITY, - -1, ED_LEVEL_SETTINGS_YPOS(0), - GADGET_ID_RANDOM_QUANTITY, GADGET_ID_RANDOM_PERCENTAGE, + -1, ED_LEVEL_SETTINGS_YPOS(0), + GADGET_ID_RANDOM_QUANTITY, GADGET_ID_RANDOM_PERCENTAGE, RADIO_NR_RANDOM_ELEMENTS, - &random_placement_method, RANDOM_USE_QUANTITY, - " ", "quantity", "Use quantity for random elements" + &random_placement_method, RANDOM_USE_QUANTITY, + " ", "quantity", "Use quantity for random elements" } }; @@ -3397,799 +3789,847 @@ static struct { ED_CHECKBUTTON_ID_AUTO_COUNT_GEMS, - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(6), - GADGET_ID_AUTO_COUNT_GEMS, GADGET_ID_NONE, + ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(6), + 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, - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(11), - GADGET_ID_RATE_TIME_OVER_SCORE, GADGET_ID_NONE, + ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(11), + 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, - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(7), - GADGET_ID_USE_LEVELSET_ARTWORK, GADGET_ID_NONE, + ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(7), + 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, - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(8), - GADGET_ID_COPY_LEVEL_TEMPLATE, GADGET_ID_NONE, + ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(8), + 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, - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(1), - GADGET_ID_RANDOM_RESTRICTED, GADGET_ID_NONE, + ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(1), + 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, - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(4), - GADGET_ID_CUSTOM_USE_TEMPLATE_3, GADGET_ID_NONE, + ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(4), + 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, - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(5), - GADGET_ID_CUSTOM_USE_TEMPLATE_2, GADGET_ID_NONE, + ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(5), + 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, - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(0), - GADGET_ID_BD_INTERMISSION, GADGET_ID_NONE, + 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, - "Intermission", "Level is an intermission level" + "Intermission", "Level is an intermission level" }, { ED_CHECKBUTTON_ID_BD_PAL_TIMING, - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(2), - GADGET_ID_BD_PAL_TIMING, GADGET_ID_NONE, + ED_ENGINE_SETTINGS_XPOS(0), ED_ENGINE_SETTINGS_YPOS(2), + 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, - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(6), - GADGET_ID_BD_LINE_SHIFTING_BORDERS, GADGET_ID_NONE, + 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, - "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, - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(7), - GADGET_ID_BD_SCAN_FIRST_AND_LAST_ROW, GADGET_ID_NONE, + 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, - "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, - ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(8), - GADGET_ID_BD_SHORT_EXPLOSIONS, GADGET_ID_NONE, + 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" + "Short explosions", "Use four game cycles for explosions" }, // ---------- element settings: configure (various elements) ---------------- { ED_CHECKBUTTON_ID_STICK_ELEMENT, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(0), - GADGET_ID_STICK_ELEMENT, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(0), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1), - GADGET_ID_EM_SLIPPERY_GEMS, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1), - GADGET_ID_EM_EXPLODES_BY_FIRE, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(2), - GADGET_ID_USE_SPRING_BUG, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(2), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1), - GADGET_ID_USE_TIME_ORB_BUG, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(5), - GADGET_ID_USE_LIFE_BUGS, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(5), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(2), - GADGET_ID_RANDOM_BALL_CONTENT, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(2), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1), - GADGET_ID_INITIAL_BALL_ACTIVE, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(0), - GADGET_ID_GROW_INTO_DIGGABLE, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(0), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(0), - GADGET_ID_SB_FIELDS_NEEDED, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(0), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(0), - GADGET_ID_SB_OBJECTS_NEEDED, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(0), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1), - GADGET_ID_AUTO_EXIT_SOKOBAN, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(14), - GADGET_ID_SOLVED_BY_ONE_PLAYER, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(14), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(3), - GADGET_ID_FINISH_DIG_COLLECT, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(3), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(4), - GADGET_ID_KEEP_WALKABLE_CE, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(4), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(9), - GADGET_ID_CONTINUOUS_SNAPPING, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(9), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(8), - GADGET_ID_BLOCK_SNAP_FIELD, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(8), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(2), - GADGET_ID_BLOCK_LAST_FIELD, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(2), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(2), - GADGET_ID_SP_BLOCK_LAST_FIELD, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(2), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(3), - GADGET_ID_INSTANT_RELOCATION, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(3), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(4), - GADGET_ID_SHIFTED_RELOCATION, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(4), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(5), - GADGET_ID_LAZY_RELOCATION, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(5), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(10), - GADGET_ID_USE_START_ELEMENT, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(10), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(11), - GADGET_ID_USE_ARTWORK_ELEMENT, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(11), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(12), - GADGET_ID_USE_EXPLOSION_ELEMENT, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(12), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(13), - GADGET_ID_INITIAL_GRAVITY, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(13), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1), - GADGET_ID_USE_INITIAL_INVENTORY, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(6), - GADGET_ID_CAN_PASS_TO_WALKABLE, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(6), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1), - GADGET_ID_CAN_FALL_INTO_ACID, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(0), - GADGET_ID_CAN_MOVE_INTO_ACID, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(0), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1), - GADGET_ID_DONT_COLLIDE_WITH, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(0), - GADGET_ID_BD_DIAGONAL_MOVEMENTS, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(0), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1), - GADGET_ID_BD_TOPMOST_PLAYER_ACTIVE, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1), + GADGET_ID_BD_TOPMOST_PLAYER_ACTIVE, GADGET_ID_NONE, &level.bd_topmost_player_active, NULL, NULL, - "Topmost player is active", "Use first player found on playfield" + "Topmost player is active", "Use first player found on playfield" }, { ED_CHECKBUTTON_ID_BD_PUSH_MEGA_ROCK_WITH_SWEET, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(4), - GADGET_ID_BD_PUSH_MEGA_ROCK_WITH_SWEET, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(4), + GADGET_ID_BD_PUSH_MEGA_ROCK_WITH_SWEET, GADGET_ID_NONE, &level.bd_push_mega_rock_with_sweet, NULL, NULL, - "Mega rocks pushable with sweet", "Push mega rocks after eating sweet" + "Mega rocks pushable with sweet", "Push mega rocks after eating sweet" + }, + { + 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(2), - GADGET_ID_BD_MAGIC_WALL_WAIT_HATCHING, GADGET_ID_NONE, + 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, - "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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(3), - GADGET_ID_BD_MAGIC_WALL_STOPS_AMOEBA, GADGET_ID_NONE, + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1), - GADGET_ID_BD_AMOEBA_WAIT_FOR_HATCHING, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1), + GADGET_ID_BD_AMOEBA_WAIT_FOR_HATCHING, GADGET_ID_NONE, &level.bd_amoeba_wait_for_hatching, NULL, NULL, - "Wait for player's birth", "Timer start waits for player's birth" + "Wait for player's birth", "Timer start waits for player's birth" }, { ED_CHECKBUTTON_ID_BD_AMOEBA_START_IMMEDIATELY, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(2), - GADGET_ID_BD_AMOEBA_START_IMMEDIATELY, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(2), + GADGET_ID_BD_AMOEBA_START_IMMEDIATELY, GADGET_ID_NONE, &level.bd_amoeba_start_immediately, NULL, NULL, - "Start growing immediately", "Start slow growth time immediately" + "Start growing immediately", "Start slow growth time immediately" }, { ED_CHECKBUTTON_ID_BD_AMOEBA_2_EXPLODE_BY_AMOEBA, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(9), - GADGET_ID_BD_AMOEBA_2_EXPLODE_BY_AMOEBA, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(9), + GADGET_ID_BD_AMOEBA_2_EXPLODE_BY_AMOEBA, GADGET_ID_NONE, &level.bd_amoeba_2_explode_by_amoeba, NULL, NULL, - "Explodes if touched by amoeba", "Amoeba 2 explodes if touched by amoeba" + "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, + 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" + "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, + 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" + "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, + 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" + "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, + 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" + "Disappears in explosions", "Can be destroyed by explosions" }, { ED_CHECKBUTTON_ID_BD_SLIME_IS_PREDICTABLE, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1), - GADGET_ID_BD_SLIME_IS_PREDICTABLE, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1), + GADGET_ID_BD_SLIME_IS_PREDICTABLE, GADGET_ID_NONE, &level.bd_slime_is_predictable, NULL, NULL, - "Slime is predictable", "Use predictable random numbers" + "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, + 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" + "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, + 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" + "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, + 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" + "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, + 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" + "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, + 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" + "Does not flow downwards", "Water can only flow up, left and right" }, { ED_CHECKBUTTON_ID_BD_HAMMER_WALLS_REAPPEAR, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1), - GADGET_ID_BD_HAMMER_WALLS_REAPPEAR, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1), + GADGET_ID_BD_HAMMER_WALLS_REAPPEAR, GADGET_ID_NONE, &level.bd_hammer_walls_reappear, NULL, NULL, - "Hammered walls reappear", "Hammered walls reappear after delay" + "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), - GADGET_ID_ENVELOPE_AUTOWRAP, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1), + 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, - -1, ED_ELEMENT_SETTINGS_YPOS(1), - GADGET_ID_ENVELOPE_CENTERED, GADGET_ID_ENVELOPE_AUTOWRAP, + -1, ED_ELEMENT_SETTINGS_YPOS(1), + 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, + 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" + "Red", "Use red color components in laser" }, { ED_CHECKBUTTON_ID_MM_LASER_GREEN, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(2), - GADGET_ID_MM_LASER_GREEN, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(2), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(3), - GADGET_ID_MM_LASER_BLUE, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(3), + 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, + 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" + "Red", "Use red color components in laser" }, { ED_CHECKBUTTON_ID_DF_LASER_GREEN, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(2), - GADGET_ID_DF_LASER_GREEN, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(2), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(3), - GADGET_ID_DF_LASER_BLUE, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(3), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(5), - GADGET_ID_ROTATE_MM_BALL_CONTENT, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(5), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(6), - GADGET_ID_EXPLODE_MM_BALL, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(6), + 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) --------------- { ED_CHECKBUTTON_ID_CUSTOM_USE_GRAPHIC, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1), - GADGET_ID_CUSTOM_USE_GRAPHIC, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(14), - GADGET_ID_CUSTOM_USE_TEMPLATE_1, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(14), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(2), - GADGET_ID_CUSTOM_ACCESSIBLE, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(2), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(9), - GADGET_ID_CUSTOM_GRAV_REACHABLE, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(9), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(11), - GADGET_ID_CUSTOM_USE_LAST_VALUE, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(11), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(4), - GADGET_ID_CUSTOM_WALK_TO_OBJECT, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(4), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(8), - GADGET_ID_CUSTOM_INDESTRUCTIBLE, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(8), + 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) --------------- { ED_CHECKBUTTON_ID_CUSTOM_CAN_MOVE, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1), - GADGET_ID_CUSTOM_CAN_MOVE, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(8), - GADGET_ID_CUSTOM_CAN_FALL, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(8), + 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, - -1, ED_ELEMENT_SETTINGS_YPOS(8), - GADGET_ID_CUSTOM_CAN_SMASH, GADGET_ID_CUSTOM_CAN_FALL, + -1, ED_ELEMENT_SETTINGS_YPOS(8), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(9), - GADGET_ID_CUSTOM_SLIPPERY, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(9), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(10), - GADGET_ID_CUSTOM_DEADLY, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(10), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(11), - GADGET_ID_CUSTOM_CAN_EXPLODE, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(11), + 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, - ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(12), - GADGET_ID_CUSTOM_EXPLODE_FIRE, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(12), + 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, - -1, ED_ELEMENT_SETTINGS_YPOS(12), - GADGET_ID_CUSTOM_EXPLODE_SMASH, GADGET_ID_CUSTOM_EXPLODE_FIRE, + -1, ED_ELEMENT_SETTINGS_YPOS(12), + 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, - -1, ED_ELEMENT_SETTINGS_YPOS(12), - GADGET_ID_CUSTOM_EXPLODE_IMPACT, GADGET_ID_CUSTOM_EXPLODE_SMASH, + -1, ED_ELEMENT_SETTINGS_YPOS(12), + 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) ------------------ { ED_CHECKBUTTON_ID_CUSTOM_CAN_CHANGE, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1), - GADGET_ID_CUSTOM_CAN_CHANGE, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1), + 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, - ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(2), - GADGET_ID_CHANGE_DELAY, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(2), + 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, - ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(4), - GADGET_ID_CHANGE_BY_DIRECT_ACT, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(4), + 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, - ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(5), - GADGET_ID_CHANGE_BY_OTHER_ACT, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(5), + 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, - ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(8), - GADGET_ID_CHANGE_USE_EXPLOSION, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(8), + 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, - ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(9), - GADGET_ID_CHANGE_USE_CONTENT, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(1), ED_ELEMENT_SETTINGS_YPOS(9), + 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, - ED_ELEMENT_SETTINGS_XPOS(2), ED_ELEMENT_SETTINGS_YPOS(11), - GADGET_ID_CHANGE_ONLY_COMPLETE, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(2), ED_ELEMENT_SETTINGS_YPOS(11), + 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, - ED_ELEMENT_SETTINGS_XPOS(2), ED_ELEMENT_SETTINGS_YPOS(12), - GADGET_ID_CHANGE_USE_RANDOM, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(2), ED_ELEMENT_SETTINGS_YPOS(12), + 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, - ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(13), - GADGET_ID_CHANGE_HAS_ACTION, GADGET_ID_NONE, + ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(13), + 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" }, }; @@ -4209,451 +4649,563 @@ static struct { ED_DRAWING_ID_DRAWING_LEVEL, - 0, 0, - 0, 0, - GADGET_ID_DRAWING_LEVEL, GADGET_ID_NONE, + 0, 0, + 0, 0, + GADGET_ID_DRAWING_LEVEL, GADGET_ID_NONE, NULL, -1, -1, // these values are not constant, but can change at runtime - NULL, NULL, NULL, NULL, NULL + NULL, NULL, NULL, NULL, NULL }, // ---------- yam yam content ----------------------------------------------- { ED_DRAWING_ID_YAMYAM_CONTENT_0, - ED_AREA_YAMYAM_CONTENT_XPOS, ED_AREA_YAMYAM_CONTENT_YPOS, - ED_AREA_YAMYAM_CONTENT_XOFF(0), ED_AREA_YAMYAM_CONTENT_YOFF(0), - GADGET_ID_YAMYAM_CONTENT_0, GADGET_ID_NONE, - &level.yamyam_content[0].e[0][0], 3, 3, - NULL, NULL, NULL, "1", NULL + ED_AREA_YAMYAM_CONTENT_XPOS, ED_AREA_YAMYAM_CONTENT_YPOS, + ED_AREA_YAMYAM_CONTENT_XOFF(0), ED_AREA_YAMYAM_CONTENT_YOFF(0), + GADGET_ID_YAMYAM_CONTENT_0, GADGET_ID_NONE, + &level.yamyam_content[0].e[0][0], 3, 3, + NULL, NULL, NULL, "1", NULL }, { ED_DRAWING_ID_YAMYAM_CONTENT_1, - ED_AREA_YAMYAM_CONTENT_XPOS, ED_AREA_YAMYAM_CONTENT_YPOS, - ED_AREA_YAMYAM_CONTENT_XOFF(1), ED_AREA_YAMYAM_CONTENT_YOFF(1), - GADGET_ID_YAMYAM_CONTENT_1, GADGET_ID_NONE, - &level.yamyam_content[1].e[0][0], 3, 3, - NULL, NULL, NULL, "2", NULL + ED_AREA_YAMYAM_CONTENT_XPOS, ED_AREA_YAMYAM_CONTENT_YPOS, + ED_AREA_YAMYAM_CONTENT_XOFF(1), ED_AREA_YAMYAM_CONTENT_YOFF(1), + GADGET_ID_YAMYAM_CONTENT_1, GADGET_ID_NONE, + &level.yamyam_content[1].e[0][0], 3, 3, + NULL, NULL, NULL, "2", NULL }, { ED_DRAWING_ID_YAMYAM_CONTENT_2, - ED_AREA_YAMYAM_CONTENT_XPOS, ED_AREA_YAMYAM_CONTENT_YPOS, - ED_AREA_YAMYAM_CONTENT_XOFF(2), ED_AREA_YAMYAM_CONTENT_YOFF(2), - GADGET_ID_YAMYAM_CONTENT_2, GADGET_ID_NONE, - &level.yamyam_content[2].e[0][0], 3, 3, - NULL, NULL, NULL, "3", NULL + ED_AREA_YAMYAM_CONTENT_XPOS, ED_AREA_YAMYAM_CONTENT_YPOS, + ED_AREA_YAMYAM_CONTENT_XOFF(2), ED_AREA_YAMYAM_CONTENT_YOFF(2), + GADGET_ID_YAMYAM_CONTENT_2, GADGET_ID_NONE, + &level.yamyam_content[2].e[0][0], 3, 3, + NULL, NULL, NULL, "3", NULL }, { ED_DRAWING_ID_YAMYAM_CONTENT_3, - ED_AREA_YAMYAM_CONTENT_XPOS, ED_AREA_YAMYAM_CONTENT_YPOS, - ED_AREA_YAMYAM_CONTENT_XOFF(3), ED_AREA_YAMYAM_CONTENT_YOFF(3), - GADGET_ID_YAMYAM_CONTENT_3, GADGET_ID_NONE, - &level.yamyam_content[3].e[0][0], 3, 3, - NULL, NULL, NULL, "4", NULL + ED_AREA_YAMYAM_CONTENT_XPOS, ED_AREA_YAMYAM_CONTENT_YPOS, + ED_AREA_YAMYAM_CONTENT_XOFF(3), ED_AREA_YAMYAM_CONTENT_YOFF(3), + GADGET_ID_YAMYAM_CONTENT_3, GADGET_ID_NONE, + &level.yamyam_content[3].e[0][0], 3, 3, + NULL, NULL, NULL, "4", NULL }, { ED_DRAWING_ID_YAMYAM_CONTENT_4, - ED_AREA_YAMYAM_CONTENT_XPOS, ED_AREA_YAMYAM_CONTENT_YPOS, - ED_AREA_YAMYAM_CONTENT_XOFF(4), ED_AREA_YAMYAM_CONTENT_YOFF(4), - GADGET_ID_YAMYAM_CONTENT_4, GADGET_ID_NONE, - &level.yamyam_content[4].e[0][0], 3, 3, - NULL, NULL, NULL, "5", NULL + ED_AREA_YAMYAM_CONTENT_XPOS, ED_AREA_YAMYAM_CONTENT_YPOS, + ED_AREA_YAMYAM_CONTENT_XOFF(4), ED_AREA_YAMYAM_CONTENT_YOFF(4), + GADGET_ID_YAMYAM_CONTENT_4, GADGET_ID_NONE, + &level.yamyam_content[4].e[0][0], 3, 3, + NULL, NULL, NULL, "5", NULL }, { ED_DRAWING_ID_YAMYAM_CONTENT_5, - ED_AREA_YAMYAM_CONTENT_XPOS, ED_AREA_YAMYAM_CONTENT_YPOS, - ED_AREA_YAMYAM_CONTENT_XOFF(5), ED_AREA_YAMYAM_CONTENT_YOFF(5), - GADGET_ID_YAMYAM_CONTENT_5, GADGET_ID_NONE, - &level.yamyam_content[5].e[0][0], 3, 3, - NULL, NULL, NULL, "6", NULL + ED_AREA_YAMYAM_CONTENT_XPOS, ED_AREA_YAMYAM_CONTENT_YPOS, + ED_AREA_YAMYAM_CONTENT_XOFF(5), ED_AREA_YAMYAM_CONTENT_YOFF(5), + GADGET_ID_YAMYAM_CONTENT_5, GADGET_ID_NONE, + &level.yamyam_content[5].e[0][0], 3, 3, + NULL, NULL, NULL, "6", NULL }, { ED_DRAWING_ID_YAMYAM_CONTENT_6, - ED_AREA_YAMYAM_CONTENT_XPOS, ED_AREA_YAMYAM_CONTENT_YPOS, - ED_AREA_YAMYAM_CONTENT_XOFF(6), ED_AREA_YAMYAM_CONTENT_YOFF(6), - GADGET_ID_YAMYAM_CONTENT_6, GADGET_ID_NONE, - &level.yamyam_content[6].e[0][0], 3, 3, - NULL, NULL, NULL, "7", NULL + ED_AREA_YAMYAM_CONTENT_XPOS, ED_AREA_YAMYAM_CONTENT_YPOS, + ED_AREA_YAMYAM_CONTENT_XOFF(6), ED_AREA_YAMYAM_CONTENT_YOFF(6), + GADGET_ID_YAMYAM_CONTENT_6, GADGET_ID_NONE, + &level.yamyam_content[6].e[0][0], 3, 3, + NULL, NULL, NULL, "7", NULL }, { ED_DRAWING_ID_YAMYAM_CONTENT_7, - ED_AREA_YAMYAM_CONTENT_XPOS, ED_AREA_YAMYAM_CONTENT_YPOS, - ED_AREA_YAMYAM_CONTENT_XOFF(7), ED_AREA_YAMYAM_CONTENT_YOFF(7), - GADGET_ID_YAMYAM_CONTENT_7, GADGET_ID_NONE, - &level.yamyam_content[7].e[0][0], 3, 3, - NULL, NULL, NULL, "8", NULL + ED_AREA_YAMYAM_CONTENT_XPOS, ED_AREA_YAMYAM_CONTENT_YPOS, + ED_AREA_YAMYAM_CONTENT_XOFF(7), ED_AREA_YAMYAM_CONTENT_YOFF(7), + GADGET_ID_YAMYAM_CONTENT_7, GADGET_ID_NONE, + &level.yamyam_content[7].e[0][0], 3, 3, + NULL, NULL, NULL, "8", NULL }, // ---------- magic ball content -------------------------------------------- { ED_DRAWING_ID_MAGIC_BALL_CONTENT_0, - ED_AREA_MAGIC_BALL_CONTENT_XPOS, ED_AREA_MAGIC_BALL_CONTENT_YPOS, - ED_AREA_MAGIC_BALL_CONTENT_XOFF(0), ED_AREA_MAGIC_BALL_CONTENT_YOFF(0), - GADGET_ID_MAGIC_BALL_CONTENT_0, GADGET_ID_NONE, - &level.ball_content[0].e[0][0], 3, 3, - NULL, NULL, NULL, "1", NULL + ED_AREA_MAGIC_BALL_CONTENT_XPOS, ED_AREA_MAGIC_BALL_CONTENT_YPOS, + ED_AREA_MAGIC_BALL_CONTENT_XOFF(0), ED_AREA_MAGIC_BALL_CONTENT_YOFF(0), + GADGET_ID_MAGIC_BALL_CONTENT_0, GADGET_ID_NONE, + &level.ball_content[0].e[0][0], 3, 3, + NULL, NULL, NULL, "1", NULL }, { ED_DRAWING_ID_MAGIC_BALL_CONTENT_1, - ED_AREA_MAGIC_BALL_CONTENT_XPOS, ED_AREA_MAGIC_BALL_CONTENT_YPOS, - ED_AREA_MAGIC_BALL_CONTENT_XOFF(1), ED_AREA_MAGIC_BALL_CONTENT_YOFF(1), - GADGET_ID_MAGIC_BALL_CONTENT_1, GADGET_ID_NONE, - &level.ball_content[1].e[0][0], 3, 3, - NULL, NULL, NULL, "2", NULL + ED_AREA_MAGIC_BALL_CONTENT_XPOS, ED_AREA_MAGIC_BALL_CONTENT_YPOS, + ED_AREA_MAGIC_BALL_CONTENT_XOFF(1), ED_AREA_MAGIC_BALL_CONTENT_YOFF(1), + GADGET_ID_MAGIC_BALL_CONTENT_1, GADGET_ID_NONE, + &level.ball_content[1].e[0][0], 3, 3, + NULL, NULL, NULL, "2", NULL }, { ED_DRAWING_ID_MAGIC_BALL_CONTENT_2, - ED_AREA_MAGIC_BALL_CONTENT_XPOS, ED_AREA_MAGIC_BALL_CONTENT_YPOS, - ED_AREA_MAGIC_BALL_CONTENT_XOFF(2), ED_AREA_MAGIC_BALL_CONTENT_YOFF(2), - GADGET_ID_MAGIC_BALL_CONTENT_2, GADGET_ID_NONE, - &level.ball_content[2].e[0][0], 3, 3, - NULL, NULL, NULL, "3", NULL + ED_AREA_MAGIC_BALL_CONTENT_XPOS, ED_AREA_MAGIC_BALL_CONTENT_YPOS, + ED_AREA_MAGIC_BALL_CONTENT_XOFF(2), ED_AREA_MAGIC_BALL_CONTENT_YOFF(2), + GADGET_ID_MAGIC_BALL_CONTENT_2, GADGET_ID_NONE, + &level.ball_content[2].e[0][0], 3, 3, + NULL, NULL, NULL, "3", NULL }, { ED_DRAWING_ID_MAGIC_BALL_CONTENT_3, - ED_AREA_MAGIC_BALL_CONTENT_XPOS, ED_AREA_MAGIC_BALL_CONTENT_YPOS, - ED_AREA_MAGIC_BALL_CONTENT_XOFF(3), ED_AREA_MAGIC_BALL_CONTENT_YOFF(3), - GADGET_ID_MAGIC_BALL_CONTENT_3, GADGET_ID_NONE, - &level.ball_content[3].e[0][0], 3, 3, - NULL, NULL, NULL, "4", NULL + ED_AREA_MAGIC_BALL_CONTENT_XPOS, ED_AREA_MAGIC_BALL_CONTENT_YPOS, + ED_AREA_MAGIC_BALL_CONTENT_XOFF(3), ED_AREA_MAGIC_BALL_CONTENT_YOFF(3), + GADGET_ID_MAGIC_BALL_CONTENT_3, GADGET_ID_NONE, + &level.ball_content[3].e[0][0], 3, 3, + NULL, NULL, NULL, "4", NULL }, { ED_DRAWING_ID_MAGIC_BALL_CONTENT_4, - ED_AREA_MAGIC_BALL_CONTENT_XPOS, ED_AREA_MAGIC_BALL_CONTENT_YPOS, - ED_AREA_MAGIC_BALL_CONTENT_XOFF(4), ED_AREA_MAGIC_BALL_CONTENT_YOFF(4), - GADGET_ID_MAGIC_BALL_CONTENT_4, GADGET_ID_NONE, - &level.ball_content[4].e[0][0], 3, 3, - NULL, NULL, NULL, "5", NULL + ED_AREA_MAGIC_BALL_CONTENT_XPOS, ED_AREA_MAGIC_BALL_CONTENT_YPOS, + ED_AREA_MAGIC_BALL_CONTENT_XOFF(4), ED_AREA_MAGIC_BALL_CONTENT_YOFF(4), + GADGET_ID_MAGIC_BALL_CONTENT_4, GADGET_ID_NONE, + &level.ball_content[4].e[0][0], 3, 3, + NULL, NULL, NULL, "5", NULL }, { ED_DRAWING_ID_MAGIC_BALL_CONTENT_5, - ED_AREA_MAGIC_BALL_CONTENT_XPOS, ED_AREA_MAGIC_BALL_CONTENT_YPOS, - ED_AREA_MAGIC_BALL_CONTENT_XOFF(5), ED_AREA_MAGIC_BALL_CONTENT_YOFF(5), - GADGET_ID_MAGIC_BALL_CONTENT_5, GADGET_ID_NONE, - &level.ball_content[5].e[0][0], 3, 3, - NULL, NULL, NULL, "6", NULL + ED_AREA_MAGIC_BALL_CONTENT_XPOS, ED_AREA_MAGIC_BALL_CONTENT_YPOS, + ED_AREA_MAGIC_BALL_CONTENT_XOFF(5), ED_AREA_MAGIC_BALL_CONTENT_YOFF(5), + GADGET_ID_MAGIC_BALL_CONTENT_5, GADGET_ID_NONE, + &level.ball_content[5].e[0][0], 3, 3, + NULL, NULL, NULL, "6", NULL }, { ED_DRAWING_ID_MAGIC_BALL_CONTENT_6, - ED_AREA_MAGIC_BALL_CONTENT_XPOS, ED_AREA_MAGIC_BALL_CONTENT_YPOS, - ED_AREA_MAGIC_BALL_CONTENT_XOFF(6), ED_AREA_MAGIC_BALL_CONTENT_YOFF(6), - GADGET_ID_MAGIC_BALL_CONTENT_6, GADGET_ID_NONE, - &level.ball_content[6].e[0][0], 3, 3, - NULL, NULL, NULL, "7", NULL + ED_AREA_MAGIC_BALL_CONTENT_XPOS, ED_AREA_MAGIC_BALL_CONTENT_YPOS, + ED_AREA_MAGIC_BALL_CONTENT_XOFF(6), ED_AREA_MAGIC_BALL_CONTENT_YOFF(6), + GADGET_ID_MAGIC_BALL_CONTENT_6, GADGET_ID_NONE, + &level.ball_content[6].e[0][0], 3, 3, + NULL, NULL, NULL, "7", NULL }, { ED_DRAWING_ID_MAGIC_BALL_CONTENT_7, - ED_AREA_MAGIC_BALL_CONTENT_XPOS, ED_AREA_MAGIC_BALL_CONTENT_YPOS, - ED_AREA_MAGIC_BALL_CONTENT_XOFF(7), ED_AREA_MAGIC_BALL_CONTENT_YOFF(7), - GADGET_ID_MAGIC_BALL_CONTENT_7, GADGET_ID_NONE, - &level.ball_content[7].e[0][0], 3, 3, - NULL, NULL, NULL, "8", NULL + ED_AREA_MAGIC_BALL_CONTENT_XPOS, ED_AREA_MAGIC_BALL_CONTENT_YPOS, + ED_AREA_MAGIC_BALL_CONTENT_XOFF(7), ED_AREA_MAGIC_BALL_CONTENT_YOFF(7), + GADGET_ID_MAGIC_BALL_CONTENT_7, GADGET_ID_NONE, + &level.ball_content[7].e[0][0], 3, 3, + NULL, NULL, NULL, "8", NULL }, // ---------- android content ----------------------------------------------- { ED_DRAWING_ID_ANDROID_CONTENT, - ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(6), - 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" + ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(6), + 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" }, // ---------- amoeba content ------------------------------------------------ { ED_DRAWING_ID_AMOEBA_CONTENT, - ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(3), - 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" + ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(3), + 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" }, // ---------- 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" + 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 magic wall elements ---------------------------------------- { ED_DRAWING_ID_BD_MAGIC_WALL_DIAMOND_TO, - ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(4), - 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, + 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, "Changes diamonds to:", NULL, NULL, NULL, "Element to turn diamonds to" }, { ED_DRAWING_ID_BD_MAGIC_WALL_ROCK_TO, - 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_MAGIC_WALL_ROCK_TO, GADGET_ID_NONE, - &level.bd_magic_wall_rock_to, 1, 1, + 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, "Changes rocks to:", NULL, NULL, NULL, "Element to turn rocks to" }, { 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_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, + 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, "Changes mega rocks to:", NULL, NULL, NULL, "Element to turn mega rocks to" }, { ED_DRAWING_ID_BD_MAGIC_WALL_NUT_TO, - 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_NUT_TO, GADGET_ID_NONE, - &level.bd_magic_wall_nut_to, 1, 1, + 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, "Changes nuts to:", NULL, NULL, NULL, "Element to turn nuts to" }, { 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_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, - "Changes nitro packs to:", NULL, NULL, NULL, "Element to turn nitro packs to" + 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, + "Changes nitro packs to:", NULL, NULL, NULL, "Element to turn nitro packs to" }, { 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_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, - "Changes flying diamonds to:", NULL, NULL, NULL, "Element to turn flying diamonds to" + 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, + "Changes flying diamonds to:", NULL, NULL, NULL, "Element to turn flying diamonds to" }, { 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_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, - "Changes flying rocks to:", NULL, NULL, NULL, "Element to turn flying rocks to" + 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, + "Changes flying rocks to:", NULL, NULL, NULL, "Element to turn flying rocks to" }, // ---------- BD amoeba content --------------------------------------------- { ED_DRAWING_ID_BD_AMOEBA_CONTENT_TOO_BIG, - ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(7), - ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF, - GADGET_ID_BD_AMOEBA_CONTENT_TOO_BIG, GADGET_ID_NONE, - &level.bd_amoeba_content_too_big, 1, 1, - "If too big, changes to:", NULL, NULL, NULL, "BD amoeba content if too big" + ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(7), + ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF, + GADGET_ID_BD_AMOEBA_CONTENT_TOO_BIG, GADGET_ID_NONE, + &level.bd_amoeba_content_too_big, 1, 1, + "If too big, changes to:", NULL, NULL, NULL, "BD amoeba content if too big" }, { ED_DRAWING_ID_BD_AMOEBA_CONTENT_ENCLOSED, - ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(8), - ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF, - GADGET_ID_BD_AMOEBA_CONTENT_ENCLOSED, GADGET_ID_NONE, - &level.bd_amoeba_content_enclosed, 1, 1, - "If enclosed, changes to:", NULL, NULL, NULL, "BD amoeba content if enclosed" + ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(8), + ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF, + GADGET_ID_BD_AMOEBA_CONTENT_ENCLOSED, GADGET_ID_NONE, + &level.bd_amoeba_content_enclosed, 1, 1, + "If enclosed, changes to:", NULL, NULL, NULL, "BD amoeba content if enclosed" }, // ---------- BD amoeba 2 content ------------------------------------------- { ED_DRAWING_ID_BD_AMOEBA_2_CONTENT_TOO_BIG, - ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(7), - ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF, - GADGET_ID_BD_AMOEBA_2_CONTENT_TOO_BIG, GADGET_ID_NONE, - &level.bd_amoeba_2_content_too_big, 1, 1, - "If too big, changes to:", NULL, NULL, NULL, "BD amoeba 2 content if too big" + ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(7), + ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF, + GADGET_ID_BD_AMOEBA_2_CONTENT_TOO_BIG, GADGET_ID_NONE, + &level.bd_amoeba_2_content_too_big, 1, 1, + "If too big, changes to:", NULL, NULL, NULL, "BD amoeba 2 content if too big" }, { ED_DRAWING_ID_BD_AMOEBA_2_CONTENT_ENCLOSED, - ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(8), - ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF, - GADGET_ID_BD_AMOEBA_2_CONTENT_ENCLOSED, GADGET_ID_NONE, + ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(8), + ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF, + GADGET_ID_BD_AMOEBA_2_CONTENT_ENCLOSED, GADGET_ID_NONE, &level.bd_amoeba_2_content_enclosed, 1, 1, - "If enclosed, changes to:", NULL, NULL, NULL, "BD amoeba 2 content if enclosed" + "If enclosed, changes to:", NULL, NULL, NULL, "BD amoeba 2 content if enclosed" }, { ED_DRAWING_ID_BD_AMOEBA_2_CONTENT_EXPLODING, - ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(10), - ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF, - GADGET_ID_BD_AMOEBA_2_CONTENT_EXPLODING, GADGET_ID_NONE, + ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(10), + ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF, + GADGET_ID_BD_AMOEBA_2_CONTENT_EXPLODING, GADGET_ID_NONE, &level.bd_amoeba_2_content_exploding, 1, 1, - "If exploding, changes to:", NULL, NULL, NULL, "BD amoeba 2 content if exploding" + "If exploding, changes to:", NULL, NULL, NULL, "BD amoeba 2 content if exploding" }, { ED_DRAWING_ID_BD_AMOEBA_2_CONTENT_LOOKS_LIKE, - ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(11), - ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF, + ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(11), + ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF, GADGET_ID_BD_AMOEBA_2_CONTENT_LOOKS_LIKE, GADGET_ID_NONE, &level.bd_amoeba_2_content_looks_like, 1, 1, - "Use graphic of element:", NULL, NULL, NULL, "BD amoeba 2 looks like this element" + "Use graphic of element:", NULL, NULL, NULL, "BD amoeba 2 looks like this element" }, { ED_DRAWING_ID_BD_SLIME_EATS_ELEMENT_1, - 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_SLIME_EATS_ELEMENT_1, GADGET_ID_NONE, - &level.bd_slime_eats_element_1, 1, 1, - "Can eat:", NULL, NULL, NULL, "Element that can be eaten" + 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_SLIME_EATS_ELEMENT_1, GADGET_ID_NONE, + &level.bd_slime_eats_element_1, 1, 1, + "Can eat:", NULL, NULL, NULL, "Element that can be eaten" }, { ED_DRAWING_ID_BD_SLIME_CONVERTS_TO_ELEMENT_1, - 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_SLIME_CONVERTS_TO_ELEMENT_1, GADGET_ID_BD_SLIME_EATS_ELEMENT_1, + 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_SLIME_CONVERTS_TO_ELEMENT_1, GADGET_ID_BD_SLIME_EATS_ELEMENT_1, &level.bd_slime_converts_to_element_1, 1, 1, " and convert to:", NULL, NULL, NULL, "Eaten element is converted to" }, { ED_DRAWING_ID_BD_SLIME_EATS_ELEMENT_2, - 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_SLIME_EATS_ELEMENT_2, GADGET_ID_NONE, - &level.bd_slime_eats_element_2, 1, 1, - "Can eat:", NULL, NULL, NULL, "Element that can be eaten" + 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_SLIME_EATS_ELEMENT_2, GADGET_ID_NONE, + &level.bd_slime_eats_element_2, 1, 1, + "Can eat:", NULL, NULL, NULL, "Element that can be eaten" }, { ED_DRAWING_ID_BD_SLIME_CONVERTS_TO_ELEMENT_2, - 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_SLIME_CONVERTS_TO_ELEMENT_2, GADGET_ID_BD_SLIME_EATS_ELEMENT_2, + 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_SLIME_CONVERTS_TO_ELEMENT_2, GADGET_ID_BD_SLIME_EATS_ELEMENT_2, &level.bd_slime_converts_to_element_2, 1, 1, " and convert to:", NULL, NULL, NULL, "Eaten element is converted to" }, { ED_DRAWING_ID_BD_SLIME_EATS_ELEMENT_3, - 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_SLIME_EATS_ELEMENT_3, GADGET_ID_NONE, - &level.bd_slime_eats_element_3, 1, 1, - "Can eat:", NULL, NULL, NULL, "Element that can be eaten" + 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_SLIME_EATS_ELEMENT_3, GADGET_ID_NONE, + &level.bd_slime_eats_element_3, 1, 1, + "Can eat:", NULL, NULL, NULL, "Element that can be eaten" }, { ED_DRAWING_ID_BD_SLIME_CONVERTS_TO_ELEMENT_3, - 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_SLIME_CONVERTS_TO_ELEMENT_3, GADGET_ID_BD_SLIME_EATS_ELEMENT_3, + 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_SLIME_CONVERTS_TO_ELEMENT_3, GADGET_ID_BD_SLIME_EATS_ELEMENT_3, &level.bd_slime_converts_to_element_3, 1, 1, " and convert to:", NULL, NULL, NULL, "Eaten element is converted to" }, { 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, + 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, + 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_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, + 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" + "Turns to clock by touching:", NULL, NULL, NULL, "Turns to clock by touching element" }, { ED_DRAWING_ID_BD_NUT_CONTENT, - 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_NUT_CONTENT, GADGET_ID_NONE, - &level.bd_nut_content, 1, 1, - "When breaking, changes to:", NULL, NULL, NULL, "Element created when breaking nut" + 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_NUT_CONTENT, GADGET_ID_NONE, + &level.bd_nut_content, 1, 1, + "When breaking, changes to:", NULL, NULL, NULL, "Element created when breaking nut" }, { ED_DRAWING_ID_BD_EXPANDING_WALL_LOOKS_LIKE, - 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_EXPANDING_WALL_LOOKS_LIKE, GADGET_ID_NONE, + 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_EXPANDING_WALL_LOOKS_LIKE, GADGET_ID_NONE, &level.bd_expanding_wall_looks_like, 1, 1, - "Use graphic of element:", NULL, NULL, NULL, "Expanding wall looks like this element" + "Use graphic of element:", NULL, NULL, NULL, "Expanding wall looks like this element" }, { ED_DRAWING_ID_BD_SAND_LOOKS_LIKE, - 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_SAND_LOOKS_LIKE, GADGET_ID_NONE, - &level.bd_sand_looks_like, 1, 1, - "Use graphic of element:", NULL, NULL, NULL, "Sand looks like this element" + 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_SAND_LOOKS_LIKE, GADGET_ID_NONE, + &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 ------------------------------------------- { ED_DRAWING_ID_START_ELEMENT, - -1, ED_AREA_1X1_SETTINGS_YPOS(10), - 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" + -1, ED_AREA_1X1_SETTINGS_YPOS(10), + 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" }, // ---------- player artwork element ---------------------------------------- { ED_DRAWING_ID_ARTWORK_ELEMENT, - -1, ED_AREA_1X1_SETTINGS_YPOS(11), - 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" + -1, ED_AREA_1X1_SETTINGS_YPOS(11), + 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" }, // ---------- player explosion element -------------------------------------- { ED_DRAWING_ID_EXPLOSION_ELEMENT, - -1, ED_AREA_1X1_SETTINGS_YPOS(12), - 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" + -1, ED_AREA_1X1_SETTINGS_YPOS(12), + 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" }, // ---------- player initial inventory -------------------------------------- { ED_DRAWING_ID_INVENTORY_CONTENT, - -1, ED_AREA_1X1_SETTINGS_YPOS(1), - 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" + -1, ED_AREA_1X1_SETTINGS_YPOS(1), + 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" }, // ---------- gray ball content ----------------------------------------- { ED_DRAWING_ID_MM_BALL_CONTENT, - ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(2), - 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" + ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(2), + 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" }, // ---------- element settings: configure 1 (custom elements) --------------- @@ -4662,11 +5214,11 @@ static struct { ED_DRAWING_ID_CUSTOM_GRAPHIC, - -1, ED_AREA_1X1_SETTINGS_YPOS(1), - 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" + -1, ED_AREA_1X1_SETTINGS_YPOS(1), + 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" }, // ---------- element settings: configure 2 (custom elements) --------------- @@ -4675,30 +5227,30 @@ static struct { ED_DRAWING_ID_CUSTOM_CONTENT, - -1, ED_AREA_3X3_SETTINGS_YPOS(11), - 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 + -1, ED_AREA_3X3_SETTINGS_YPOS(11), + 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 }, // ---------- custom enter and leave element (when moving) ------------------ { ED_DRAWING_ID_CUSTOM_MOVE_ENTER, - ED_AREA_1X1_SETTINGS_XPOS(1), ED_AREA_1X1_SETTINGS_YPOS(3), - 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" + ED_AREA_1X1_SETTINGS_XPOS(1), ED_AREA_1X1_SETTINGS_YPOS(3), + 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" }, { ED_DRAWING_ID_CUSTOM_MOVE_LEAVE, - -1, ED_AREA_1X1_SETTINGS_YPOS(3), - 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" + -1, ED_AREA_1X1_SETTINGS_YPOS(3), + 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" }, // ---------- element settings: advanced (custom elements) ------------------ @@ -4707,66 +5259,66 @@ static struct { ED_DRAWING_ID_CUSTOM_CHANGE_TARGET, - -1, ED_AREA_1X1_SETTINGS_YPOS(1), - 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" + -1, ED_AREA_1X1_SETTINGS_YPOS(1), + 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" }, // ---------- custom change content (extended change target) ---------------- { ED_DRAWING_ID_CUSTOM_CHANGE_CONTENT, - -1, ED_AREA_3X3_SETTINGS_YPOS(9), - 0, ED_AREA_3X3_SETTINGS_YOFF, - GADGET_ID_CUSTOM_CHANGE_CONTENT, GADGET_ID_NONE, // align three rows + -1, ED_AREA_3X3_SETTINGS_YPOS(9), + 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) ---------------- { ED_DRAWING_ID_CUSTOM_CHANGE_TRIGGER, - -1, ED_AREA_1X1_SETTINGS_YPOS(5), - 0, ED_AREA_1X1_SETTINGS_YOFF, - GADGET_ID_CUSTOM_CHANGE_TRIGGER, GADGET_ID_CHANGE_OTHER_ACTION, + -1, ED_AREA_1X1_SETTINGS_YPOS(5), + 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) ---------------- { ED_DRAWING_ID_CUSTOM_CHANGE_ACTION, - -1, ED_AREA_1X1_SETTINGS_YPOS(13), - 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" + -1, ED_AREA_1X1_SETTINGS_YPOS(13), + 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" }, // ---------- group element content ----------------------------------------- { ED_DRAWING_ID_GROUP_CONTENT, - ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(2), - 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 + ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(2), + 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 }, // ---------- random background (for random painting) ----------------------- { ED_DRAWING_ID_RANDOM_BACKGROUND, - -1, ED_AREA_1X1_LSETTINGS_YPOS(1), - 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" + -1, ED_AREA_1X1_LSETTINGS_YPOS(1), + 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" }, }; @@ -4869,6 +5421,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; @@ -4938,9 +5491,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, @@ -4953,7 +5506,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, @@ -5041,7 +5594,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, @@ -5056,7 +5609,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, @@ -5090,8 +5643,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; @@ -7544,8 +8102,7 @@ static void getEditorGraphicAndFrame(int element, int *graphic, int *frame, bool { if (use_editor_gfx) { - *graphic = el2edimg(element); - *frame = 0; + el2edimg_with_frame(element, graphic, frame); } else { @@ -7555,21 +8112,6 @@ static void getEditorGraphicAndFrame(int element, int *graphic, int *frame, bool ANIM_MODE(*graphic) == ANIM_CE_SCORE ? custom_element.collect_score_initial : FrameCounter); } - - 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; - } - } } static void getEditorGraphicSource(int element, int tile_size, Bitmap **bitmap, @@ -8098,7 +8640,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, @@ -8273,6 +8819,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); @@ -8848,12 +9395,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); @@ -8893,11 +9451,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); @@ -10029,30 +10586,10 @@ static void InitDrawingElements(void) if (level.game_engine_type == game_engine_type_last) return; - if (level.game_engine_type == GAME_ENGINE_TYPE_BD) - { - new_element1 = EL_BD_WALL; - new_element2 = EL_EMPTY; - new_element3 = EL_BD_SAND; - } - else if (level.game_engine_type == GAME_ENGINE_TYPE_SP) - { - new_element1 = EL_SP_CHIP_SINGLE; - new_element2 = EL_EMPTY; - new_element3 = EL_SP_BASE; - } - else if (level.game_engine_type == GAME_ENGINE_TYPE_MM) - { - new_element1 = EL_MM_MIRROR_START; - new_element2 = EL_EMPTY; - new_element3 = EL_MM_WOODEN_WALL; - } - else - { - new_element1 = EL_WALL; - new_element2 = EL_EMPTY; - new_element3 = EL_SAND; - } + // select drawing elements according to game engine type + new_element1 = getDrawingElement(EL_WALL); + new_element2 = getDrawingElement(EL_EMPTY); + new_element3 = getDrawingElement(EL_SAND); game_engine_type_last = level.game_engine_type; } @@ -10190,6 +10727,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(); @@ -10580,6 +11118,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]; @@ -10615,6 +11186,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) @@ -10788,7 +11363,7 @@ static void DrawLevelConfigEditor(void) MapTextbuttonGadget(ED_TEXTBUTTON_ID_SAVE_AS_TEMPLATE_2); } -static void DrawLevelConfigEngine(void) +static void DrawEngineConfigConfig(void) { int i; @@ -10813,6 +11388,145 @@ static void DrawLevelConfigEngine(void) MapSelectboxGadget(i); } +static int GetCommonColorType_BD(void) +{ + int bd_color_type = *bd_color[0] >> 24; + int i; + + // check if all colors have the same color type + for (i = 1; i < MAX_BD_COLORS; i++) + if ((*bd_color[i] >> 24) != bd_color_type) + return GD_COLOR_TYPE_RGB; + + return bd_color_type; +} + +void SetDefaultLevelColorType_BD(void) +{ + bd_color_type_default = GetCommonColorType_BD(); + + level.bd_color_type = bd_color_type_default; +} + +void SetDefaultLevelColors_BD(void) +{ + int i; + + for (i = 0; i < MAX_BD_COLORS; i++) + bd_color_default[i] = *bd_color[i]; +} + +void SetRandomLevelColors_BD(int bd_color_type) +{ + struct LevelInfo_BD *level_bd = level.native_bd_level; + GdCave *cave = level_bd->cave; + + // create random cave colors + gd_cave_set_random_colors(cave, bd_color_type); + + // copy colors to level editor + level.bd_color_b = cave->colorb; + level.bd_color_0 = cave->color0; + level.bd_color_1 = cave->color1; + level.bd_color_2 = cave->color2; + level.bd_color_3 = cave->color3; + level.bd_color_4 = cave->color4; + level.bd_color_5 = cave->color5; +} + +static void DrawColorBox_BD(int nr) +{ + int id = ED_SELECTBOX_ID_COLORS_FIRST + nr; + struct GadgetInfo *gi = level_editor_gadget[selectbox_info[id].gadget_id]; + int graphic = IMG_EDITOR_CHECKBOX; + struct GraphicInfo *gd = &graphic_info[graphic]; + int offset = ED_GADGET_TEXT_DISTANCE; + int x1 = gi->x - offset - gd->width; + int y1 = gi->y; + int x2 = x1 + offset; + int y2 = y1 + offset; + int xsize1 = gd->width; + int ysize1 = gd->height; + int xsize2 = xsize1 - 2 * offset; + int ysize2 = ysize1 - 2 * offset; + int bd_color_x = *bd_color[nr]; + int r = gd_color_get_r(bd_color_x); + int g = gd_color_get_g(bd_color_x); + int b = gd_color_get_b(bd_color_x); + Pixel color = SDL_MapRGB(drawto->surface->format, r, g, b); + + BlitBitmap(gd->bitmap, drawto, gd->src_x, gd->src_y, xsize1, ysize1, x1, y1); + FillRectangle(drawto, x2, y2, xsize2, ysize2, color); +} + +static void DrawEngineConfigColors(void) +{ + int i; + + if (bd_color_type_changed) + { + if (level.bd_color_type != GD_COLOR_TYPE_RGB && level.bd_color_type != GetCommonColorType_BD()) + { + // color type switched to non-RGB colors, but using different color type => reset colors + + if (level.bd_color_type == bd_color_type_default) + { + // color type switched to same color type as default colors => reset to defaults + for (i = 0; i < MAX_BD_COLORS; i++) + *bd_color[i] = bd_color_default[i]; + } + else + { + // color type switched to different color type as default colors => use random colors + SetRandomLevelColors_BD(level.bd_color_type); + } + } + + bd_color_type_changed = FALSE; + } + + // copy level colors to either C64-style color index or color text + for (i = 0; i < MAX_BD_COLORS; i++) + { + int bd_color_x = (level.bd_color_type == GD_COLOR_TYPE_C64 ? *bd_color[i] & 0x0f : + level.bd_color_type == GD_COLOR_TYPE_RGB ? gd_color_get_rgb(*bd_color[i]) : + *bd_color[i]); + + if (level.bd_color_type == GD_COLOR_TYPE_C64) + bd_color_c64[i] = bd_color_x; + else + snprintf(bd_color_text[i], sizeof(bd_color_text[i]), "%s", gd_color_get_string(bd_color_x)); + } + + MapSelectboxGadget(ED_SELECTBOX_ID_BD_COLOR_TYPE); + + if (level.bd_color_type == GD_COLOR_TYPE_C64) + { + // draw selectbox gadgets + for (i = ED_SELECTBOX_ID_COLORS_FIRST; i <= ED_SELECTBOX_ID_COLORS_LAST; i++) + MapSelectboxGadget(i); + } + else + { + // draw text input gadgets + for (i = ED_TEXTINPUT_ID_COLORS_FIRST; i <= ED_TEXTINPUT_ID_COLORS_LAST; i++) + MapTextInputGadget(i); + } + + for (i = 0; i < MAX_BD_COLORS; i++) + DrawColorBox_BD(i); + + MapTextbuttonGadget(ED_TEXTBUTTON_ID_BD_SET_RANDOM_COLORS); +} + +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"; @@ -10823,6 +11537,11 @@ static void DrawLevelConfigWindow(void) stick_element_properties_window = FALSE; + // make sure that previous level config edit mode exists for this level + if (edit_mode_levelconfig == ED_MODE_LEVELCONFIG_ENGINE && + level.game_engine_type != GAME_ENGINE_TYPE_BD) + edit_mode_levelconfig = ED_MODE_LEVELCONFIG_LEVEL; + SetAutomaticNumberOfGemsNeeded(); UnmapLevelEditorFieldGadgets(); @@ -11248,33 +11967,38 @@ static void DrawPropertiesInfo(void) ypos += 2 * MAX(font1_height, font2_height); - // ----- print standard properties of this element + // ----- print standard properties of this element (only for certain game engines) - DrawTextS(xpos, ypos, font1_nr, properties_text); + if (level.game_engine_type == GAME_ENGINE_TYPE_RND || + level.game_engine_type == GAME_ENGINE_TYPE_EM || + level.game_engine_type == GAME_ENGINE_TYPE_SP) + { + DrawTextS(xpos, ypos, font1_nr, properties_text); - ypos += line1_height; + ypos += line1_height; - for (i = 0; properties[i].value != -1; i++) - { - if (!HAS_PROPERTY(properties_element, properties[i].value)) - continue; + for (i = 0; properties[i].value != -1; i++) + { + if (!HAS_PROPERTY(properties_element, properties[i].value)) + continue; - DrawTextS(xpos, ypos, font2_nr, properties[i].text); + DrawTextS(xpos, ypos, font2_nr, properties[i].text); - ypos += font2_height; + ypos += font2_height; - num_standard_properties++; - } + num_standard_properties++; + } - if (num_standard_properties == 0) - { - DrawTextS(xpos + properties_text_len, ypos - line1_height + font2_yoffset, - font2_nr, none_text); + if (num_standard_properties == 0) + { + DrawTextS(xpos + properties_text_len, ypos - line1_height + font2_yoffset, + font2_nr, none_text); - ypos -= (line1_height - font1_height); - } + ypos -= (line1_height - font1_height); + } - ypos += MAX(font1_height, font2_height); + ypos += MAX(font1_height, font2_height); + } // ----- print special description of this element @@ -11321,6 +12045,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 { @@ -11467,6 +12193,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 }, @@ -11519,6 +12248,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) || @@ -11531,9 +12266,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; } @@ -11640,6 +12379,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 && @@ -11657,6 +12404,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); @@ -11694,8 +12443,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); @@ -11731,7 +12482,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); @@ -11750,7 +12503,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(); @@ -11759,7 +12514,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); @@ -11880,6 +12637,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 || @@ -11945,6 +12752,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); @@ -11957,7 +12783,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)) @@ -12235,9 +13062,18 @@ static void DrawEditorElementAnimation(int x, int y) int graphic; int frame; - getEditorGraphicAndFrame(properties_element, &graphic, &frame, FALSE); + if (IS_BD_RUNTIME_ELEMENT(properties_element)) + { + getEditorGraphicAndFrame(properties_element, &graphic, &frame, TRUE); + + DrawFixedGraphicExt(drawto, x, y, graphic, frame); + } + else + { + getEditorGraphicAndFrame(properties_element, &graphic, &frame, FALSE); - DrawFixedGraphicAnimationExt(drawto, x, y, graphic, frame, NO_MASKING); + DrawFixedGraphicAnimationExt(drawto, x, y, graphic, frame, NO_MASKING); + } } static void DrawEditorElementName(int x, int y, int font_nr) @@ -15510,6 +16346,15 @@ static void HandleTextInputGadgets(struct GadgetInfo *gi) ModifyEditorElementList(); // update changed button info text } + else if (type_id >= ED_TEXTINPUT_ID_COLORS_FIRST && + type_id <= ED_TEXTINPUT_ID_COLORS_LAST) + { + int pos = type_id - ED_TEXTINPUT_ID_COLORS_FIRST; + + *bd_color[pos] = gd_color_get_from_string(bd_color_text[pos]); + + DrawColorBox_BD(pos); + } // do not mark level as modified for certain non-level-changing gadgets if (type_id >= ED_TEXTINPUT_ID_LEVELSET_FIRST && @@ -15579,6 +16424,37 @@ static void HandleSelectboxGadgets(struct GadgetInfo *gi) // update BD cycle delay counter gadgets depending on BD scheduling type DrawLevelConfigWindow(); } + else if (type_id == ED_SELECTBOX_ID_BD_COLOR_TYPE) + { + bd_color_type_changed = TRUE; + + if (level.bd_color_type != GD_COLOR_TYPE_RGB && level.bd_color_type != GetCommonColorType_BD()) + { + // color type switched to non-RGB colors, but using different color type => reset colors + char *message = (level.bd_color_type == bd_color_type_default ? + "This will reset colors to defaults! Continue?" : + "This will reset colors to random colors! Continue?"); + + if (!Request(message, REQ_ASK)) + { + // keep current RGB colors + level.bd_color_type = GD_COLOR_TYPE_RGB; + bd_color_type_changed = FALSE; + } + } + + // update BD color palette gadgets depending on BD color type + DrawLevelConfigWindow(); + } + else if (type_id >= ED_SELECTBOX_ID_COLORS_FIRST && + type_id <= ED_SELECTBOX_ID_COLORS_LAST) + { + int pos = type_id - ED_SELECTBOX_ID_COLORS_FIRST; + + *bd_color[pos] = gd_c64_color(bd_color_c64[pos]); + + DrawColorBox_BD(pos); + } // do not mark level as modified for certain non-level-changing gadgets if (type_id == ED_SELECTBOX_ID_LEVELSET_SAVE_MODE || @@ -15600,6 +16476,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) { @@ -15734,6 +16617,13 @@ static void HandleTextbuttonGadgets(struct GadgetInfo *gi) level.changed = TRUE; } + else if (type_id == ED_TEXTBUTTON_ID_BD_SET_RANDOM_COLORS) + { + SetRandomLevelColors_BD(level.bd_color_type); + + // update BD color palette gadgets after setting random colors + DrawLevelConfigWindow(); + } } static void HandleGraphicbuttonGadgets(struct GadgetInfo *gi)