#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)
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 + \
#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))
#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))
(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 && \
#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)
#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 + \
#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) \
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) ? \
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) ? \
GADGET_ID_BD_MAGIC_WALL_NITRO_PACK_TO,
GADGET_ID_BD_MAGIC_WALL_FLYING_DIAMOND_TO,
GADGET_ID_BD_MAGIC_WALL_FLYING_ROCK_TO,
- GADGET_ID_BD_AMOEBA_CONTENT_TOO_BIG,
- GADGET_ID_BD_AMOEBA_CONTENT_ENCLOSED,
+ GADGET_ID_BD_AMOEBA_1_CONTENT_TOO_BIG,
+ GADGET_ID_BD_AMOEBA_1_CONTENT_ENCLOSED,
GADGET_ID_BD_AMOEBA_2_CONTENT_TOO_BIG,
GADGET_ID_BD_AMOEBA_2_CONTENT_ENCLOSED,
GADGET_ID_BD_AMOEBA_2_CONTENT_EXPLODING,
GADGET_ID_BD_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_1_EXPLODES_TO,
GADGET_ID_BD_FIREFLY_2_EXPLODES_TO,
- GADGET_ID_BD_BUTTERFLY_EXPLODES_TO,
+ GADGET_ID_BD_BUTTERFLY_1_EXPLODES_TO,
GADGET_ID_BD_BUTTERFLY_2_EXPLODES_TO,
GADGET_ID_BD_STONEFLY_EXPLODES_TO,
GADGET_ID_BD_DRAGONFLY_EXPLODES_TO,
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
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_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,
GADGET_ID_SAVE_LEVELSET,
GADGET_ID_ADD_CHANGE_PAGE,
GADGET_ID_DEL_CHANGE_PAGE,
+ GADGET_ID_BD_SET_RANDOM_COLORS,
// graphicbutton identifiers
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,
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,
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
#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
{
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,
#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
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,
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
};
#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
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,
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_DRAWING_ID_BD_MAGIC_WALL_NITRO_PACK_TO,
ED_DRAWING_ID_BD_MAGIC_WALL_FLYING_DIAMOND_TO,
ED_DRAWING_ID_BD_MAGIC_WALL_FLYING_ROCK_TO,
- ED_DRAWING_ID_BD_AMOEBA_CONTENT_TOO_BIG,
- ED_DRAWING_ID_BD_AMOEBA_CONTENT_ENCLOSED,
+ ED_DRAWING_ID_BD_AMOEBA_1_CONTENT_TOO_BIG,
+ ED_DRAWING_ID_BD_AMOEBA_1_CONTENT_ENCLOSED,
ED_DRAWING_ID_BD_AMOEBA_2_CONTENT_TOO_BIG,
ED_DRAWING_ID_BD_AMOEBA_2_CONTENT_ENCLOSED,
ED_DRAWING_ID_BD_AMOEBA_2_CONTENT_EXPLODING,
ED_DRAWING_ID_BD_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_1_EXPLODES_TO,
ED_DRAWING_ID_BD_FIREFLY_2_EXPLODES_TO,
- ED_DRAWING_ID_BD_BUTTERFLY_EXPLODES_TO,
+ ED_DRAWING_ID_BD_BUTTERFLY_1_EXPLODES_TO,
ED_DRAWING_ID_BD_BUTTERFLY_2_EXPLODES_TO,
ED_DRAWING_ID_BD_STONEFLY_EXPLODES_TO,
ED_DRAWING_ID_BD_DRAGONFLY_EXPLODES_TO,
#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
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;
},
{
ED_COUNTER_ID_BD_CYCLE_DELAY_MS,
- ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(3),
+ ED_ENGINE_SETTINGS_XPOS(0), ED_ENGINE_SETTINGS_YPOS(3),
50, 500,
GADGET_ID_BD_CYCLE_DELAY_MS_DOWN, GADGET_ID_BD_CYCLE_DELAY_MS_UP,
GADGET_ID_BD_CYCLE_DELAY_MS_TEXT, GADGET_ID_NONE,
},
{
ED_COUNTER_ID_BD_CYCLE_DELAY_C64,
- ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(3),
+ ED_ENGINE_SETTINGS_XPOS(0), ED_ENGINE_SETTINGS_YPOS(3),
0, 32,
GADGET_ID_BD_CYCLE_DELAY_C64_DOWN, GADGET_ID_BD_CYCLE_DELAY_C64_UP,
GADGET_ID_BD_CYCLE_DELAY_C64_TEXT, GADGET_ID_NONE,
},
{
ED_COUNTER_ID_BD_HATCHING_DELAY_CYCLES,
- ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(4),
+ ED_ENGINE_SETTINGS_XPOS(0), ED_ENGINE_SETTINGS_YPOS(4),
1, 40,
GADGET_ID_BD_HATCHING_DELAY_CYCLES_DOWN, GADGET_ID_BD_HATCHING_DELAY_CYCLES_UP,
GADGET_ID_BD_HATCHING_DELAY_CYCLES_TEXT, GADGET_ID_NONE,
},
{
ED_COUNTER_ID_BD_HATCHING_DELAY_SECONDS,
- ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(4),
+ ED_ENGINE_SETTINGS_XPOS(0), ED_ENGINE_SETTINGS_YPOS(4),
1, 40,
GADGET_ID_BD_HATCHING_DELAY_SECONDS_DOWN, GADGET_ID_BD_HATCHING_DELAY_SECONDS_UP,
GADGET_ID_BD_HATCHING_DELAY_SECONDS_TEXT, GADGET_ID_NONE,
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),
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,
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,
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,
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
custom_element.description,
- NULL, "Element name"
+ NULL, NULL, NULL, "Enter element name"
}
};
{ -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[] =
{
options_action_mode_none,
&level.game_engine_type,
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),
+ ED_ENGINE_SETTINGS_XPOS(0), ED_ENGINE_SETTINGS_YPOS(1),
GADGET_ID_BD_SCHEDULING_TYPE, GADGET_ID_NONE,
-1,
options_bd_scheduling_type,
&level.bd_scheduling_type,
NULL, "Scheduling type:", NULL, "Select level timing"
},
+
+ // ---------- engine settings: colors ---------------------------------------
+
{
- 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) ----------------
-1, -1,
GADGET_ID_LEVELCONFIG_ENGINE, GADGET_ID_LEVELCONFIG_EDITOR,
8, "Engine",
- NULL, NULL, NULL, "Configure engine settings"
+ NULL, NULL, NULL, "Configure game engine settings"
+ },
+
+ // ---------- engine settings (tabs) ----------------------------------------
+
+ {
+ ED_TEXTBUTTON_ID_ENGINECONFIG_CONFIG,
+ ED_ENGINE_TABS_XPOS(0), ED_ENGINE_TABS_YPOS(0),
+ GADGET_ID_ENGINECONFIG_CONFIG, GADGET_ID_NONE,
+ 8, "Config",
+ NULL, NULL, NULL, "Configure game engine settings"
+ },
+ {
+ ED_TEXTBUTTON_ID_ENGINECONFIG_COLORS,
+ -1, -1,
+ GADGET_ID_ENGINECONFIG_COLORS, GADGET_ID_ENGINECONFIG_CONFIG,
+ 8, "Colors",
+ NULL, NULL, NULL, "Configure level colors"
},
// ---------- element settings (tabs) ---------------------------------------
-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"
+ },
};
static struct
},
{
ED_CHECKBUTTON_ID_BD_INTERMISSION,
- ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(0),
+ ED_ENGINE_SETTINGS_XPOS(0), ED_ENGINE_SETTINGS_YPOS(0),
GADGET_ID_BD_INTERMISSION, GADGET_ID_NONE,
&level.bd_intermission,
"Boulder Dash game engine settings:", NULL,
},
{
ED_CHECKBUTTON_ID_BD_PAL_TIMING,
- ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(2),
+ ED_ENGINE_SETTINGS_XPOS(0), ED_ENGINE_SETTINGS_YPOS(2),
GADGET_ID_BD_PAL_TIMING, GADGET_ID_NONE,
&level.bd_pal_timing,
NULL, NULL,
},
{
ED_CHECKBUTTON_ID_BD_LINE_SHIFTING_BORDERS,
- ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(6),
+ ED_ENGINE_SETTINGS_XPOS(0), ED_ENGINE_SETTINGS_YPOS(6),
GADGET_ID_BD_LINE_SHIFTING_BORDERS, GADGET_ID_NONE,
&level.bd_line_shifting_borders,
"Compatibility settings:", NULL,
},
{
ED_CHECKBUTTON_ID_BD_SCAN_FIRST_AND_LAST_ROW,
- ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(7),
+ ED_ENGINE_SETTINGS_XPOS(0), ED_ENGINE_SETTINGS_YPOS(7),
GADGET_ID_BD_SCAN_FIRST_AND_LAST_ROW, GADGET_ID_NONE,
&level.bd_scan_first_and_last_row,
NULL, NULL,
},
{
ED_CHECKBUTTON_ID_BD_SHORT_EXPLOSIONS,
- ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(8),
+ ED_ENGINE_SETTINGS_XPOS(0), ED_ENGINE_SETTINGS_YPOS(8),
GADGET_ID_BD_SHORT_EXPLOSIONS, GADGET_ID_NONE,
&level.bd_short_explosions,
NULL, NULL,
"Mega rocks pushable with sweet", "Push mega rocks after eating sweet"
},
{
- ED_CHECKBUTTON_ID_BD_MAGIC_WALL_WAIT_HATCHING,
+ ED_CHECKBUTTON_ID_BD_MAGIC_WALL_ZERO_INFINITE,
ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(2),
+ GADGET_ID_BD_MAGIC_WALL_ZERO_INFINITE, GADGET_ID_NONE,
+ &level.bd_magic_wall_zero_infinite,
+ NULL, NULL,
+ "Run forever if duration is zero", "Run infinitely if timer is zero"
+ },
+ {
+ ED_CHECKBUTTON_ID_BD_MAGIC_WALL_WAIT_HATCHING,
+ ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(3),
GADGET_ID_BD_MAGIC_WALL_WAIT_HATCHING, GADGET_ID_NONE,
&level.bd_magic_wall_wait_hatching,
NULL, NULL,
},
{
ED_CHECKBUTTON_ID_BD_MAGIC_WALL_STOPS_AMOEBA,
- ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(3),
+ ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(4),
GADGET_ID_BD_MAGIC_WALL_STOPS_AMOEBA, GADGET_ID_NONE,
&level.bd_magic_wall_stops_amoeba,
NULL, NULL,
- "Turn amoeba to diamonds", "Activation changes amoeba to diamonds"
+ "Stop amoeba and turn to diamonds", "Activation changes amoeba to diamonds"
+ },
+ {
+ ED_CHECKBUTTON_ID_BD_MAGIC_WALL_BREAK_SCAN,
+ ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(5),
+ GADGET_ID_BD_MAGIC_WALL_BREAK_SCAN, GADGET_ID_NONE,
+ &level.bd_magic_wall_break_scan,
+ NULL, NULL,
+ "Emulate amoeba bug in BD1", "Use buggy BD1 behavior"
},
{
ED_CHECKBUTTON_ID_BD_AMOEBA_WAIT_FOR_HATCHING,
NULL, NULL,
"Hammered walls reappear", "Hammered walls reappear after delay"
},
+ {
+ ED_CHECKBUTTON_ID_BD_INFINITE_ROCKETS,
+ ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(0),
+ GADGET_ID_BD_INFINITE_ROCKETS, GADGET_ID_NONE,
+ &level.bd_infinite_rockets,
+ NULL, NULL,
+ "Infinite rockets", "Rocket launcher has infinite rockets"
+ },
{
ED_CHECKBUTTON_ID_BD_CREATURES_START_BACKWARDS,
ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(0),
},
{
ED_CHECKBUTTON_ID_BD_CREATURES_TURN_ON_HATCHING,
- ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(1),
+ 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 turn on hatching", "Creatures change direction on hatching"
+ "Creatures auto turn on hatching", "Creatures change direction on hatching"
},
{
ED_CHECKBUTTON_ID_BD_GRAVITY_SWITCH_ACTIVE,
{
ED_DRAWING_ID_BD_MAGIC_WALL_DIAMOND_TO,
- ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(4),
+ ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(6),
ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF,
GADGET_ID_BD_MAGIC_WALL_DIAMOND_TO, GADGET_ID_NONE,
&level.bd_magic_wall_diamond_to, 1, 1,
},
{
ED_DRAWING_ID_BD_MAGIC_WALL_ROCK_TO,
- ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(5),
+ ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(7),
ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF,
GADGET_ID_BD_MAGIC_WALL_ROCK_TO, GADGET_ID_NONE,
&level.bd_magic_wall_rock_to, 1, 1,
},
{
ED_DRAWING_ID_BD_MAGIC_WALL_MEGA_ROCK_TO,
- ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(6),
+ ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(8),
ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF,
GADGET_ID_BD_MAGIC_WALL_MEGA_ROCK_TO, GADGET_ID_NONE,
&level.bd_magic_wall_mega_rock_to, 1, 1,
},
{
ED_DRAWING_ID_BD_MAGIC_WALL_NUT_TO,
- ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(7),
+ ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(9),
ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF,
GADGET_ID_BD_MAGIC_WALL_NUT_TO, GADGET_ID_NONE,
&level.bd_magic_wall_nut_to, 1, 1,
},
{
ED_DRAWING_ID_BD_MAGIC_WALL_NITRO_PACK_TO,
- ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(8),
+ ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(10),
ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF,
GADGET_ID_BD_MAGIC_WALL_NITRO_PACK_TO, GADGET_ID_NONE,
&level.bd_magic_wall_nitro_pack_to, 1, 1,
},
{
ED_DRAWING_ID_BD_MAGIC_WALL_FLYING_DIAMOND_TO,
- ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(9),
+ ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(11),
ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF,
GADGET_ID_BD_MAGIC_WALL_FLYING_DIAMOND_TO, GADGET_ID_NONE,
&level.bd_magic_wall_flying_diamond_to, 1, 1,
},
{
ED_DRAWING_ID_BD_MAGIC_WALL_FLYING_ROCK_TO,
- ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(10),
+ ED_AREA_1X1_SETTINGS_XPOS(0), ED_AREA_1X1_SETTINGS_YPOS(12),
ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF,
GADGET_ID_BD_MAGIC_WALL_FLYING_ROCK_TO, GADGET_ID_NONE,
&level.bd_magic_wall_flying_rock_to, 1, 1,
"Changes flying rocks to:", NULL, NULL, NULL, "Element to turn flying rocks to"
},
- // ---------- BD amoeba content ---------------------------------------------
+ // ---------- BD amoeba 1 content -------------------------------------------
{
- ED_DRAWING_ID_BD_AMOEBA_CONTENT_TOO_BIG,
+ ED_DRAWING_ID_BD_AMOEBA_1_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"
+ GADGET_ID_BD_AMOEBA_1_CONTENT_TOO_BIG, GADGET_ID_NONE,
+ &level.bd_amoeba_1_content_too_big, 1, 1,
+ "If too big, changes to:", NULL, NULL, NULL, "Amoeba 1 content if too big"
},
{
- ED_DRAWING_ID_BD_AMOEBA_CONTENT_ENCLOSED,
+ ED_DRAWING_ID_BD_AMOEBA_1_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"
+ GADGET_ID_BD_AMOEBA_1_CONTENT_ENCLOSED, GADGET_ID_NONE,
+ &level.bd_amoeba_1_content_enclosed, 1, 1,
+ "If enclosed, changes to:", NULL, NULL, NULL, "Amoeba 1 content if enclosed"
},
// ---------- BD amoeba 2 content -------------------------------------------
ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF,
GADGET_ID_BD_AMOEBA_2_CONTENT_TOO_BIG, GADGET_ID_NONE,
&level.bd_amoeba_2_content_too_big, 1, 1,
- "If too big, changes to:", NULL, NULL, NULL, "BD amoeba 2 content if too big"
+ "If too big, changes to:", NULL, NULL, NULL, "Amoeba 2 content if too big"
},
{
ED_DRAWING_ID_BD_AMOEBA_2_CONTENT_ENCLOSED,
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, "Amoeba 2 content if enclosed"
},
{
ED_DRAWING_ID_BD_AMOEBA_2_CONTENT_EXPLODING,
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, "Amoeba 2 content if exploding"
},
{
ED_DRAWING_ID_BD_AMOEBA_2_CONTENT_LOOKS_LIKE,
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, "Amoeba 2 looks like this element"
},
{
ED_DRAWING_ID_BD_SLIME_EATS_ELEMENT_1,
"Turns to on impact:", NULL, NULL, NULL, "Changes to this when falling stops"
},
{
- ED_DRAWING_ID_BD_FIREFLY_EXPLODES_TO,
+ ED_DRAWING_ID_BD_FIREFLY_1_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,
+ GADGET_ID_BD_FIREFLY_1_EXPLODES_TO, GADGET_ID_NONE,
+ &level.bd_firefly_1_explodes_to, 1, 1,
"Explodes to:", NULL, NULL, NULL, "Changes to this when exploding"
},
{
"Explodes to:", NULL, NULL, NULL, "Changes to this when exploding"
},
{
- ED_DRAWING_ID_BD_BUTTERFLY_EXPLODES_TO,
+ ED_DRAWING_ID_BD_BUTTERFLY_1_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,
+ GADGET_ID_BD_BUTTERFLY_1_EXPLODES_TO, GADGET_ID_NONE,
+ &level.bd_butterfly_1_explodes_to, 1, 1,
"Explodes to:", NULL, NULL, NULL, "Changes to this when exploding"
},
{
static int getTabulatorBarWidth(void);
static int getTabulatorBarHeight(void);
static Pixel getTabulatorBarColor(void);
-static void getEditorGraphicAndFrame(int, int *, int *, boolean);
static int numHiresTiles(int);
static int num_editor_gadgets = 0; // dynamically determined
static int edit_mode;
static int edit_mode_levelconfig;
+static int edit_mode_engineconfig;
static int edit_mode_properties;
static int element_shift = 0;
static int editor_hl_boulderdash_native[] =
{
- EL_INTERNAL_CASCADE_BD_NATIVE_ACTIVE,
+ EL_INTERNAL_CASCADE_BDX_ACTIVE,
EL_CHAR('B'),
EL_CHAR('D'),
EL_EMPTY,
static int editor_el_boulderdash_native[] =
{
EL_EMPTY,
- EL_BD_SAND,
- EL_BD_ROCK,
- EL_BD_DIAMOND,
-
- EL_BD_STEELWALL,
- EL_BD_WALL,
- EL_BD_SAND_2,
- EL_BD_MAGIC_WALL,
-
- EL_BD_AMOEBA,
- EL_BD_BUTTERFLY_UP,
- EL_BD_FIREFLY_UP,
- EL_BD_EXIT_CLOSED,
-
- EL_BD_BUTTERFLY_LEFT,
- EL_BD_FIREFLY_LEFT,
- EL_BD_BUTTERFLY_RIGHT,
- EL_BD_FIREFLY_RIGHT,
-
- EL_BD_INBOX,
- EL_BD_BUTTERFLY_DOWN,
- EL_BD_FIREFLY_DOWN,
- EL_BD_EXIT_OPEN,
-
- EL_BD_AMOEBA_2,
- EL_BD_BUTTERFLY_2_UP,
- EL_BD_FIREFLY_2_UP,
- EL_BD_SLIME,
-
- EL_BD_BUTTERFLY_2_LEFT,
- EL_BD_FIREFLY_2_LEFT,
- EL_BD_BUTTERFLY_2_RIGHT,
- EL_BD_FIREFLY_2_RIGHT,
-
- EL_BD_BOMB,
- EL_BD_BUTTERFLY_2_DOWN,
- EL_BD_FIREFLY_2_DOWN,
- EL_BD_FLYING_DIAMOND,
-
- EL_BD_NITRO_PACK,
- EL_BD_DRAGONFLY_UP,
- EL_BD_STONEFLY_UP,
- EL_BD_DIAMOND_GLUED,
-
- EL_BD_DRAGONFLY_LEFT,
- EL_BD_STONEFLY_LEFT,
- EL_BD_DRAGONFLY_RIGHT,
- EL_BD_STONEFLY_RIGHT,
-
- EL_BD_NUT,
- EL_BD_DRAGONFLY_DOWN,
- EL_BD_STONEFLY_DOWN,
+ EL_BDX_SAND_1,
+ EL_BDX_ROCK,
+ EL_BDX_DIAMOND,
+
+ EL_BDX_INBOX,
+ EL_BDX_STEELWALL,
+ EL_BDX_WALL,
+ EL_BDX_MAGIC_WALL,
+
+ EL_BDX_AMOEBA_1,
+ EL_BDX_BUTTERFLY_1_UP,
+ EL_BDX_FIREFLY_1_UP,
+ EL_BDX_EXIT_CLOSED,
+
+ EL_BDX_BUTTERFLY_1_LEFT,
+ EL_BDX_FIREFLY_1_LEFT,
+ EL_BDX_BUTTERFLY_1_RIGHT,
+ EL_BDX_FIREFLY_1_RIGHT,
+
+ EL_BDX_SAND_2,
+ EL_BDX_BUTTERFLY_1_DOWN,
+ EL_BDX_FIREFLY_1_DOWN,
+ EL_BDX_EXIT_OPEN,
+
+ EL_BDX_AMOEBA_2,
+ EL_BDX_BUTTERFLY_2_UP,
+ EL_BDX_FIREFLY_2_UP,
+ EL_BDX_SLIME,
+
+ EL_BDX_BUTTERFLY_2_LEFT,
+ EL_BDX_FIREFLY_2_LEFT,
+ EL_BDX_BUTTERFLY_2_RIGHT,
+ EL_BDX_FIREFLY_2_RIGHT,
+
+ EL_BDX_BOMB,
+ EL_BDX_BUTTERFLY_2_DOWN,
+ EL_BDX_FIREFLY_2_DOWN,
+ EL_BDX_FLYING_DIAMOND,
+
+ EL_BDX_NITRO_PACK,
+ EL_BDX_DRAGONFLY_UP,
+ EL_BDX_STONEFLY_UP,
+ EL_BDX_DIAMOND_GLUED,
+
+ EL_BDX_DRAGONFLY_LEFT,
+ EL_BDX_STONEFLY_LEFT,
+ EL_BDX_DRAGONFLY_RIGHT,
+ EL_BDX_STONEFLY_RIGHT,
+
+ EL_BDX_NUT,
+ EL_BDX_DRAGONFLY_DOWN,
+ EL_BDX_STONEFLY_DOWN,
EL_EMPTY,
- EL_BD_BITER_SWITCH_1,
- EL_BD_BITER_UP,
- EL_BD_COW_UP,
+ EL_BDX_BITER_SWITCH_1,
+ EL_BDX_BITER_UP,
+ EL_BDX_COW_UP,
EL_EMPTY,
- EL_BD_BITER_LEFT,
- EL_BD_COW_LEFT,
- EL_BD_BITER_RIGHT,
- EL_BD_COW_RIGHT,
-
- EL_BD_VOODOO_DOLL,
- EL_BD_BITER_DOWN,
- EL_BD_COW_DOWN,
- EL_BD_GHOST,
-
- EL_BD_SAND_GLUED,
- EL_BD_SAND_BALL,
- EL_BD_SAND_LOOSE,
- EL_BD_WALL_NON_SLOPED,
-
- EL_BD_SAND_SLOPED_UP_LEFT,
- EL_BD_SAND_SLOPED_UP_RIGHT,
- EL_BD_WALL_SLOPED_UP_LEFT,
- EL_BD_WALL_SLOPED_UP_RIGHT,
-
- EL_BD_SAND_SLOPED_DOWN_LEFT,
- EL_BD_SAND_SLOPED_DOWN_RIGHT,
- EL_BD_WALL_SLOPED_DOWN_LEFT,
- EL_BD_WALL_SLOPED_DOWN_RIGHT,
-
- EL_BD_FLYING_ROCK,
- EL_BD_ROCK_GLUED,
- EL_BD_STEELWALL_SLOPED_UP_LEFT,
- EL_BD_STEELWALL_SLOPED_UP_RIGHT,
-
- EL_BD_WAITING_ROCK,
- EL_BD_CHASING_ROCK,
- EL_BD_STEELWALL_SLOPED_DOWN_LEFT,
- EL_BD_STEELWALL_SLOPED_DOWN_RIGHT,
-
- EL_BD_MEGA_ROCK,
- EL_BD_SWEET,
- EL_BD_INVISIBLE_EXIT_CLOSED,
- EL_BD_INVISIBLE_EXIT_OPEN,
-
- EL_BD_STEELWALL_EXPLODABLE,
- EL_BD_STEELWALL_DIGGABLE,
- EL_BD_WALL_DIGGABLE,
- EL_BD_FALLING_WALL,
-
- EL_BD_EXPANDABLE_WALL_HORIZONTAL,
- EL_BD_EXPANDABLE_WALL_VERTICAL,
- EL_BD_EXPANDABLE_WALL_ANY,
- EL_BD_EXPANDABLE_WALL_SWITCH,
-
- EL_BD_EXPANDABLE_STEELWALL_HORIZONTAL,
- EL_BD_EXPANDABLE_STEELWALL_VERTICAL,
- EL_BD_EXPANDABLE_STEELWALL_ANY,
- EL_BD_CREATURE_SWITCH,
-
- EL_BD_BLADDER,
- EL_BD_BLADDER_SPENDER,
- EL_BD_REPLICATOR,
- EL_BD_REPLICATOR_SWITCH,
-
- EL_BD_CONVEYOR_LEFT,
- EL_BD_CONVEYOR_RIGHT,
- EL_BD_CONVEYOR_SWITCH,
- EL_BD_CONVEYOR_DIR_SWITCH,
-
- EL_BD_CLOCK,
- EL_BD_TIME_PENALTY,
- EL_BD_GRAVESTONE,
- EL_BD_SKELETON,
-
- EL_BD_WATER,
- EL_BD_ACID,
- EL_BD_LAVA,
- EL_BD_BOX,
-
- EL_BD_GATE_1,
- EL_BD_GATE_2,
- EL_BD_GATE_3,
- EL_BD_TRAPPED_DIAMOND,
-
- EL_BD_KEY_1,
- EL_BD_KEY_2,
- EL_BD_KEY_3,
- EL_BD_DIAMOND_KEY,
-
- EL_BD_WALL_KEY_1,
- EL_BD_WALL_KEY_2,
- EL_BD_WALL_KEY_3,
- EL_BD_WALL_DIAMOND,
-
- EL_BD_POT,
- EL_BD_GRAVITY_SWITCH,
- EL_BD_PNEUMATIC_HAMMER,
- EL_BD_TELEPORTER,
-
- EL_BD_PLAYER,
- EL_BD_PLAYER_WITH_BOMB,
- EL_BD_PLAYER_GLUED,
- EL_BD_PLAYER_STIRRING,
+ EL_BDX_BITER_LEFT,
+ EL_BDX_COW_LEFT,
+ EL_BDX_BITER_RIGHT,
+ EL_BDX_COW_RIGHT,
+
+ EL_BDX_VOODOO_DOLL,
+ EL_BDX_BITER_DOWN,
+ EL_BDX_COW_DOWN,
+ EL_BDX_GHOST,
+
+ EL_BDX_SAND_GLUED,
+ EL_BDX_SAND_BALL,
+ EL_BDX_SAND_LOOSE,
+ EL_BDX_WALL_NON_SLOPED,
+
+ EL_BDX_SAND_SLOPED_UP_LEFT,
+ EL_BDX_SAND_SLOPED_UP_RIGHT,
+ EL_BDX_WALL_SLOPED_UP_LEFT,
+ EL_BDX_WALL_SLOPED_UP_RIGHT,
+
+ EL_BDX_SAND_SLOPED_DOWN_LEFT,
+ EL_BDX_SAND_SLOPED_DOWN_RIGHT,
+ EL_BDX_WALL_SLOPED_DOWN_LEFT,
+ EL_BDX_WALL_SLOPED_DOWN_RIGHT,
+
+ EL_BDX_FLYING_ROCK,
+ EL_BDX_ROCK_GLUED,
+ EL_BDX_STEELWALL_SLOPED_UP_LEFT,
+ EL_BDX_STEELWALL_SLOPED_UP_RIGHT,
+
+ EL_BDX_WAITING_ROCK,
+ EL_BDX_CHASING_ROCK,
+ EL_BDX_STEELWALL_SLOPED_DOWN_LEFT,
+ EL_BDX_STEELWALL_SLOPED_DOWN_RIGHT,
+
+ EL_BDX_MEGA_ROCK,
+ EL_BDX_SWEET,
+ EL_BDX_INVISIBLE_EXIT_CLOSED,
+ EL_BDX_INVISIBLE_EXIT_OPEN,
+
+ EL_BDX_STEELWALL_EXPLODABLE,
+ EL_BDX_STEELWALL_DIGGABLE,
+ EL_BDX_WALL_DIGGABLE,
+ EL_BDX_FALLING_WALL,
+
+ EL_BDX_EXPANDABLE_WALL_HORIZONTAL,
+ EL_BDX_EXPANDABLE_WALL_VERTICAL,
+ EL_BDX_EXPANDABLE_WALL_ANY,
+ EL_BDX_EXPANDABLE_WALL_SWITCH,
+
+ EL_BDX_EXPANDABLE_STEELWALL_HORIZONTAL,
+ EL_BDX_EXPANDABLE_STEELWALL_VERTICAL,
+ EL_BDX_EXPANDABLE_STEELWALL_ANY,
+ EL_BDX_CREATURE_SWITCH,
+
+ EL_BDX_BLADDER,
+ EL_BDX_BLADDER_SPENDER,
+ EL_BDX_REPLICATOR,
+ EL_BDX_REPLICATOR_SWITCH,
+
+ EL_BDX_CONVEYOR_LEFT,
+ EL_BDX_CONVEYOR_RIGHT,
+ EL_BDX_CONVEYOR_SWITCH,
+ EL_BDX_CONVEYOR_DIR_SWITCH,
+
+ EL_BDX_CLOCK,
+ EL_BDX_TIME_PENALTY,
+ EL_BDX_GRAVESTONE,
+ EL_BDX_SKELETON,
+
+ EL_BDX_WATER,
+ EL_BDX_ACID,
+ EL_BDX_LAVA,
+ EL_BDX_BOX,
+
+ EL_BDX_GATE_1,
+ EL_BDX_GATE_2,
+ EL_BDX_GATE_3,
+ EL_BDX_TRAPPED_DIAMOND,
+
+ EL_BDX_KEY_1,
+ EL_BDX_KEY_2,
+ EL_BDX_KEY_3,
+ EL_BDX_DIAMOND_KEY,
+
+ EL_BDX_WALL_KEY_1,
+ EL_BDX_WALL_KEY_2,
+ EL_BDX_WALL_KEY_3,
+ EL_BDX_WALL_DIAMOND,
+
+ EL_BDX_POT,
+ EL_BDX_GRAVITY_SWITCH,
+ EL_BDX_PNEUMATIC_HAMMER,
+ EL_BDX_TELEPORTER,
+
+ EL_BDX_PLAYER,
+ EL_BDX_PLAYER_WITH_BOMB,
+ EL_BDX_PLAYER_WITH_ROCKET_LAUNCHER,
+ EL_BDX_ROCKET_LAUNCHER,
+
+ EL_BDX_PLAYER_GLUED,
+ EL_BDX_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;
static int editor_hl_boulderdash_effects[] =
{
- EL_INTERNAL_CASCADE_BD_EFFECTS_ACTIVE,
+ EL_INTERNAL_CASCADE_BDX_EFFECTS_ACTIVE,
EL_CHAR('B'),
EL_CHAR('D'),
EL_CHAR('E'),
static int editor_el_boulderdash_effects[] =
{
- EL_BD_DIAMOND_FALLING,
- EL_BD_ROCK_FALLING,
- EL_BD_MEGA_ROCK_FALLING,
- EL_BD_FLYING_DIAMOND_FLYING,
-
- EL_BD_FALLING_WALL_FALLING,
- EL_BD_NITRO_PACK_FALLING,
- EL_BD_NUT_FALLING,
- EL_BD_FLYING_ROCK_FLYING,
-
- EL_BD_PLAYER_GROWING_1,
- EL_BD_PLAYER_GROWING_2,
- EL_BD_PLAYER_GROWING_3,
- EL_BD_PLAYER,
-
- EL_BD_PLAYER_WITH_BOMB,
- EL_BD_PLAYER_STIRRING,
- EL_BD_EXIT_OPEN,
- EL_BD_INVISIBLE_EXIT_OPEN,
-
- EL_BD_BLADDER_1,
- EL_BD_BLADDER_2,
- EL_BD_BLADDER_3,
- EL_BD_BLADDER_4,
-
- EL_BD_BLADDER_5,
- EL_BD_BLADDER_6,
- EL_BD_BLADDER_7,
- EL_BD_BLADDER_8,
-
- EL_BD_SAND_2,
- EL_BD_COW_ENCLOSED_1,
- EL_BD_COW_ENCLOSED_2,
- EL_BD_COW_ENCLOSED_3,
-
- EL_BD_COW_ENCLOSED_4,
- EL_BD_COW_ENCLOSED_5,
- EL_BD_COW_ENCLOSED_6,
- EL_BD_COW_ENCLOSED_7,
-
- EL_BD_WATER_1,
- EL_BD_WATER_2,
- EL_BD_WATER_3,
- EL_BD_WATER_4,
-
- EL_BD_WATER_5,
- EL_BD_WATER_6,
- EL_BD_WATER_7,
- EL_BD_WATER_8,
-
- EL_BD_WATER_9,
- EL_BD_WATER_10,
- EL_BD_WATER_11,
- EL_BD_WATER_12,
-
- EL_BD_WATER_13,
- EL_BD_WATER_14,
- EL_BD_WATER_15,
- EL_BD_WATER_16,
-
- EL_BD_BOMB_TICKING_1,
- EL_BD_BOMB_TICKING_2,
- EL_BD_BOMB_TICKING_3,
- EL_BD_BOMB_TICKING_4,
-
- EL_BD_BOMB_TICKING_5,
- EL_BD_BOMB_TICKING_6,
- EL_BD_BOMB_TICKING_7,
+ EL_BDX_DIAMOND_FALLING,
+ EL_BDX_ROCK_FALLING,
+ EL_BDX_MEGA_ROCK_FALLING,
+ EL_BDX_FLYING_DIAMOND_FLYING,
+
+ EL_BDX_FALLING_WALL_FALLING,
+ EL_BDX_NITRO_PACK_FALLING,
+ EL_BDX_NUT_FALLING,
+ EL_BDX_FLYING_ROCK_FLYING,
+
+ EL_BDX_PLAYER_GROWING_1,
+ EL_BDX_PLAYER_GROWING_2,
+ EL_BDX_PLAYER_GROWING_3,
+ EL_BDX_PLAYER,
+
+ EL_BDX_PLAYER_WITH_BOMB,
+ EL_BDX_PLAYER_STIRRING,
+ EL_BDX_EXIT_OPEN,
+ EL_BDX_INVISIBLE_EXIT_OPEN,
+
+ EL_BDX_BLADDER_1,
+ EL_BDX_BLADDER_2,
+ EL_BDX_BLADDER_3,
+ EL_BDX_BLADDER_4,
+
+ EL_BDX_BLADDER_5,
+ EL_BDX_BLADDER_6,
+ EL_BDX_BLADDER_7,
+ EL_BDX_BLADDER_8,
+
+ EL_BDX_SAND_2,
+ EL_BDX_COW_ENCLOSED_1,
+ EL_BDX_COW_ENCLOSED_2,
+ EL_BDX_COW_ENCLOSED_3,
+
+ EL_BDX_COW_ENCLOSED_4,
+ EL_BDX_COW_ENCLOSED_5,
+ EL_BDX_COW_ENCLOSED_6,
+ EL_BDX_COW_ENCLOSED_7,
+
+ EL_BDX_WATER_1,
+ EL_BDX_WATER_2,
+ EL_BDX_WATER_3,
+ EL_BDX_WATER_4,
+
+ EL_BDX_WATER_5,
+ EL_BDX_WATER_6,
+ EL_BDX_WATER_7,
+ EL_BDX_WATER_8,
+
+ EL_BDX_WATER_9,
+ EL_BDX_WATER_10,
+ EL_BDX_WATER_11,
+ EL_BDX_WATER_12,
+
+ EL_BDX_WATER_13,
+ EL_BDX_WATER_14,
+ EL_BDX_WATER_15,
+ EL_BDX_WATER_16,
+
+ EL_BDX_BOMB_TICKING_1,
+ EL_BDX_BOMB_TICKING_2,
+ EL_BDX_BOMB_TICKING_3,
+ EL_BDX_BOMB_TICKING_4,
+
+ EL_BDX_BOMB_TICKING_5,
+ EL_BDX_BOMB_TICKING_6,
+ EL_BDX_BOMB_TICKING_7,
EL_EMPTY,
- EL_BD_BOMB_EXPLODING_1,
- EL_BD_BOMB_EXPLODING_2,
- EL_BD_BOMB_EXPLODING_3,
- EL_BD_BOMB_EXPLODING_4,
-
- EL_BD_NUT_BREAKING_1,
- EL_BD_NUT_BREAKING_2,
- EL_BD_NUT_BREAKING_3,
- EL_BD_NUT_BREAKING_4,
-
- EL_BD_EXPLODING_1,
- EL_BD_EXPLODING_2,
- EL_BD_EXPLODING_3,
- EL_BD_EXPLODING_4,
-
- EL_BD_EXPLODING_5,
- EL_BD_TIME_PENALTY,
- EL_BD_DIAMOND_GROWING_1,
- EL_BD_DIAMOND_GROWING_2,
-
- EL_BD_DIAMOND_GROWING_3,
- EL_BD_DIAMOND_GROWING_4,
- EL_BD_DIAMOND_GROWING_5,
- EL_BD_NITRO_PACK_EXPLODING,
-
- EL_BD_NITRO_PACK_EXPLODING_1,
- EL_BD_NITRO_PACK_EXPLODING_2,
- EL_BD_NITRO_PACK_EXPLODING_3,
- EL_BD_NITRO_PACK_EXPLODING_4,
-
- EL_BD_ROCK_GROWING_1,
- EL_BD_ROCK_GROWING_2,
- EL_BD_ROCK_GROWING_3,
- EL_BD_ROCK_GROWING_4,
-
- EL_BD_STEELWALL_GROWING_1,
- EL_BD_STEELWALL_GROWING_2,
- EL_BD_STEELWALL_GROWING_3,
- EL_BD_STEELWALL_GROWING_4,
-
- EL_BD_CLOCK_GROWING_1,
- EL_BD_CLOCK_GROWING_2,
- EL_BD_CLOCK_GROWING_3,
- EL_BD_CLOCK_GROWING_4,
-
- EL_BD_GHOST_EXPLODING_1,
- EL_BD_GHOST_EXPLODING_2,
- EL_BD_GHOST_EXPLODING_3,
- EL_BD_GHOST_EXPLODING_4,
+ EL_BDX_BOMB_EXPLODING_1,
+ EL_BDX_BOMB_EXPLODING_2,
+ EL_BDX_BOMB_EXPLODING_3,
+ EL_BDX_BOMB_EXPLODING_4,
+
+ EL_BDX_NUT_BREAKING_1,
+ EL_BDX_NUT_BREAKING_2,
+ EL_BDX_NUT_BREAKING_3,
+ EL_BDX_NUT_BREAKING_4,
+
+ EL_BDX_EXPLODING_1,
+ EL_BDX_EXPLODING_2,
+ EL_BDX_EXPLODING_3,
+ EL_BDX_EXPLODING_4,
+
+ EL_BDX_EXPLODING_5,
+ EL_BDX_TIME_PENALTY,
+ EL_BDX_DIAMOND_GROWING_1,
+ EL_BDX_DIAMOND_GROWING_2,
+
+ EL_BDX_DIAMOND_GROWING_3,
+ EL_BDX_DIAMOND_GROWING_4,
+ EL_BDX_DIAMOND_GROWING_5,
+ EL_BDX_NITRO_PACK_EXPLODING,
+
+ EL_BDX_NITRO_PACK_EXPLODING_1,
+ EL_BDX_NITRO_PACK_EXPLODING_2,
+ EL_BDX_NITRO_PACK_EXPLODING_3,
+ EL_BDX_NITRO_PACK_EXPLODING_4,
+
+ EL_BDX_ROCK_GROWING_1,
+ EL_BDX_ROCK_GROWING_2,
+ EL_BDX_ROCK_GROWING_3,
+ EL_BDX_ROCK_GROWING_4,
+
+ EL_BDX_STEELWALL_GROWING_1,
+ EL_BDX_STEELWALL_GROWING_2,
+ EL_BDX_STEELWALL_GROWING_3,
+ EL_BDX_STEELWALL_GROWING_4,
+
+ EL_BDX_CLOCK_GROWING_1,
+ EL_BDX_CLOCK_GROWING_2,
+ EL_BDX_CLOCK_GROWING_3,
+ EL_BDX_CLOCK_GROWING_4,
+
+ EL_BDX_GHOST_EXPLODING_1,
+ EL_BDX_GHOST_EXPLODING_2,
+ EL_BDX_GHOST_EXPLODING_3,
+ EL_BDX_GHOST_EXPLODING_4,
};
static int *editor_hl_boulderdash_effects_ptr = editor_hl_boulderdash_effects;
static int *editor_el_boulderdash_effects_ptr = editor_el_boulderdash_effects;
},
{
&setup_editor_el_boulderdash_native,
- &setup.editor_cascade.el_bd_native,
+ &setup.editor_cascade.el_bdx,
&editor_hl_boulderdash_native_ptr, &num_editor_hl_boulderdash_native,
&editor_el_boulderdash_native_ptr, &num_editor_el_boulderdash_native
},
{
&setup_editor_el_boulderdash_effects,
- &setup.editor_cascade.el_bd_effects,
+ &setup.editor_cascade.el_bdx_effects,
&editor_hl_boulderdash_effects_ptr, &num_editor_hl_boulderdash_effects,
&editor_el_boulderdash_effects_ptr, &num_editor_el_boulderdash_effects
},
// functions
// ----------------------------------------------------------------------------
+boolean isLevelEditorFastStart(void)
+{
+ return (level_editor_test_game && setup.editor.fast_game_start);
+}
+
static int getMaxInfoTextLength(void)
{
return (SXSIZE / getFontWidth(INFOTEXT_FONT));
int graphic;
int frame;
- getEditorGraphicAndFrame(element, &graphic, &frame, TRUE);
+ el2edimg_with_frame(element, &graphic, &frame);
DrawSizedGraphicExt(drawto,
gi->x + x * tilesize,
BackToFront();
}
-static void getEditorGraphicAndFrame(int element, int *graphic, int *frame, boolean use_editor_gfx)
-{
- if (use_editor_gfx)
- {
- *graphic = el2edimg(element);
- *frame = 0;
- }
- else
- {
- *graphic = el2img(element);
- *frame = (ANIM_MODE(*graphic) == ANIM_CE_VALUE ?
- custom_element.ce_value_fixed_initial :
- 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,
int *x, int *y)
{
int graphic;
int frame;
- getEditorGraphicAndFrame(element, &graphic, &frame, TRUE);
+ el2edimg_with_frame(element, &graphic, &frame);
getSizedGraphicSource(graphic, frame, tile_size, bitmap, x, y);
}
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,
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);
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);
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);
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;
}
{
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();
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];
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)
MapTextbuttonGadget(ED_TEXTBUTTON_ID_SAVE_AS_TEMPLATE_2);
}
-static void DrawLevelConfigEngine(void)
+static void DrawEngineConfigConfig(void)
{
int i;
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 (!hasColorTemplate_BD())
+ {
+ int font_nr = FONT_TEXT_1;
+ int font_height = getFontHeight(font_nr);
+ int yoffset_above = font_height + ED_GADGET_LINE_DISTANCE;
+ int xpos = ED_ENGINE_SETTINGS_X(0);
+ int ypos = ED_ENGINE_SETTINGS_Y(0);
+
+ PrintInfoText("No level specific colors available.", font_nr, xpos, ypos - yoffset_above);
+ PrintInfoText("(Not supported by graphics set.)", font_nr, xpos, ypos);
+
+ return;
+ }
+
+ 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";
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();
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
{
{ EL_EMERALD, &level.score[SC_EMERALD], TEXT_COLLECTING },
{ EL_BD_DIAMOND, &level.score[SC_EMERALD], TEXT_COLLECTING },
- { EL_BD_DIAMOND, &level.score[SC_DIAMOND_EXTRA], TEXT_COLLECTING_EXTRA },
+ { EL_BDX_DIAMOND, &level.score[SC_EMERALD], TEXT_COLLECTING },
+ { EL_BDX_DIAMOND, &level.score[SC_DIAMOND_EXTRA], TEXT_COLLECTING_EXTRA },
{ EL_EMERALD_YELLOW, &level.score[SC_EMERALD], TEXT_COLLECTING },
{ EL_EMERALD_RED, &level.score[SC_EMERALD], TEXT_COLLECTING },
{ EL_EMERALD_PURPLE, &level.score[SC_EMERALD], TEXT_COLLECTING },
{ EL_AMOEBA_FULL, &level.amoeba_speed, TEXT_AMOEBA_SPEED },
{ EL_BD_AMOEBA, &level.amoeba_speed, TEXT_AMOEBA_SPEED },
{ EL_EMC_DRIPPER, &level.amoeba_speed, TEXT_AMOEBA_SPEED },
- { EL_BD_AMOEBA, &level.bd_amoeba_threshold_too_big, TEXT_AMOEBA_THRESHOED },
- { EL_BD_AMOEBA, &level.bd_amoeba_slow_growth_time, TEXT_AMOEBA_SLOW_TIME },
- { EL_BD_AMOEBA, &level.bd_amoeba_slow_growth_rate, TEXT_AMOEBA_SLOW_RATE,
+ { EL_BDX_AMOEBA_1, &level.bd_amoeba_1_threshold_too_big, TEXT_AMOEBA_THRESHOED },
+ { EL_BDX_AMOEBA_1, &level.bd_amoeba_1_slow_growth_time, TEXT_AMOEBA_SLOW_TIME },
+ { EL_BDX_AMOEBA_1, &level.bd_amoeba_1_slow_growth_rate, TEXT_AMOEBA_SLOW_RATE,
0, 100 },
- { EL_BD_AMOEBA, &level.bd_amoeba_fast_growth_rate, TEXT_AMOEBA_FAST_RATE,
+ { EL_BDX_AMOEBA_1, &level.bd_amoeba_1_fast_growth_rate, TEXT_AMOEBA_FAST_RATE,
0, 100 },
- { EL_BD_AMOEBA_2, &level.bd_amoeba_2_threshold_too_big, TEXT_AMOEBA_THRESHOED },
- { EL_BD_AMOEBA_2, &level.bd_amoeba_2_slow_growth_time, TEXT_AMOEBA_SLOW_TIME },
- { EL_BD_AMOEBA_2, &level.bd_amoeba_2_slow_growth_rate, TEXT_AMOEBA_SLOW_RATE,
+ { EL_BDX_AMOEBA_2, &level.bd_amoeba_2_threshold_too_big, TEXT_AMOEBA_THRESHOED },
+ { EL_BDX_AMOEBA_2, &level.bd_amoeba_2_slow_growth_time, TEXT_AMOEBA_SLOW_TIME },
+ { EL_BDX_AMOEBA_2, &level.bd_amoeba_2_slow_growth_rate, TEXT_AMOEBA_SLOW_RATE,
0, 100 },
- { EL_BD_AMOEBA_2, &level.bd_amoeba_2_fast_growth_rate, TEXT_AMOEBA_FAST_RATE,
+ { EL_BDX_AMOEBA_2, &level.bd_amoeba_2_fast_growth_rate, TEXT_AMOEBA_FAST_RATE,
0, 100 },
{ EL_MAGIC_WALL, &level.time_magic_wall, TEXT_DURATION },
- { EL_BD_MAGIC_WALL, &level.time_magic_wall, TEXT_DURATION },
{ EL_DC_MAGIC_WALL, &level.time_magic_wall, TEXT_DURATION },
+ { EL_BD_MAGIC_WALL, &level.time_magic_wall, TEXT_DURATION },
+ { EL_BDX_MAGIC_WALL, &level.bd_magic_wall_time, TEXT_DURATION },
{ EL_ROBOT_WHEEL, &level.time_wheel, TEXT_DURATION },
{ EL_TIMEGATE_SWITCH, &level.time_timegate, TEXT_DURATION },
{ EL_DC_TIMEGATE_SWITCH, &level.time_timegate, TEXT_DURATION },
{ EL_LIGHT_SWITCH_ACTIVE, &level.time_light, TEXT_DURATION },
{ EL_SHIELD_NORMAL, &level.shield_normal_time, TEXT_DURATION },
{ EL_SHIELD_DEADLY, &level.shield_deadly_time, TEXT_DURATION },
- { EL_BD_CLOCK, &level.bd_clock_extra_time, TEXT_TIME_BONUS,
+ { EL_BDX_CLOCK, &level.bd_clock_extra_time, TEXT_TIME_BONUS,
-100, 100 },
- { EL_BD_VOODOO_DOLL, &level.bd_voodoo_penalty_time, TEXT_TIME_PENALTY,
+ { EL_BDX_VOODOO_DOLL, &level.bd_voodoo_penalty_time, TEXT_TIME_PENALTY,
0, 100 },
- { EL_BD_SLIME, &level.bd_slime_permeability_rate, TEXT_PERMEABILITY_RATE,
+ { EL_BDX_SLIME, &level.bd_slime_permeability_rate, TEXT_PERMEABILITY_RATE,
0, 100 },
- { EL_BD_SLIME, &level.bd_slime_permeability_bits_c64, TEXT_PERMEABILITY_BITS,
+ { EL_BDX_SLIME, &level.bd_slime_permeability_bits_c64, TEXT_PERMEABILITY_BITS,
0, 255 },
- { EL_BD_SLIME, &level.bd_slime_random_seed_c64, TEXT_RANDOM_SEED,
+ { EL_BDX_SLIME, &level.bd_slime_random_seed_c64, TEXT_RANDOM_SEED,
-1, 65535 },
- { EL_BD_ACID, &level.bd_acid_spread_rate, TEXT_ACID_SPREAD_RATE,
+ { EL_BDX_ACID, &level.bd_acid_spread_rate, TEXT_ACID_SPREAD_RATE,
0, 100 },
- { EL_BD_BITER, &level.bd_biter_move_delay, TEXT_BITER_MOVE_DELAY,
+ { EL_BDX_BITER, &level.bd_biter_move_delay, TEXT_BITER_MOVE_DELAY,
0, 3 },
- { EL_BD_BITER_RIGHT, &level.bd_biter_move_delay, TEXT_BITER_MOVE_DELAY,
+ { EL_BDX_BITER_RIGHT, &level.bd_biter_move_delay, TEXT_BITER_MOVE_DELAY,
0, 3 },
- { EL_BD_BITER_UP, &level.bd_biter_move_delay, TEXT_BITER_MOVE_DELAY,
+ { EL_BDX_BITER_UP, &level.bd_biter_move_delay, TEXT_BITER_MOVE_DELAY,
0, 3 },
- { EL_BD_BITER_LEFT, &level.bd_biter_move_delay, TEXT_BITER_MOVE_DELAY,
+ { EL_BDX_BITER_LEFT, &level.bd_biter_move_delay, TEXT_BITER_MOVE_DELAY,
0, 3 },
- { EL_BD_BITER_DOWN, &level.bd_biter_move_delay, TEXT_BITER_MOVE_DELAY,
+ { EL_BDX_BITER_DOWN, &level.bd_biter_move_delay, TEXT_BITER_MOVE_DELAY,
0, 3 },
- { EL_BD_REPLICATOR, &level.bd_replicator_create_delay, TEXT_REPLICATION_DELAY,
+ { EL_BDX_REPLICATOR, &level.bd_replicator_create_delay, TEXT_REPLICATION_DELAY,
0, 100 },
- { EL_BD_PNEUMATIC_HAMMER, &level.bd_hammer_walls_break_delay, TEXT_HAMMER_BREAK_DELAY,
+ { EL_BDX_PNEUMATIC_HAMMER, &level.bd_hammer_walls_break_delay, TEXT_HAMMER_BREAK_DELAY,
1, 100 },
- { EL_BD_PNEUMATIC_HAMMER, &level.bd_hammer_walls_reappear_delay, TEXT_HAMMER_REAPPEAR_DELAY,
+ { EL_BDX_PNEUMATIC_HAMMER, &level.bd_hammer_walls_reappear_delay, TEXT_HAMMER_REAPPEAR_DELAY,
1, 200 },
- { EL_BD_POT, &level.bd_num_skeletons_needed_for_pot, TEXT_SKELETONS_NEEDED,
+ { EL_BDX_POT, &level.bd_num_skeletons_needed_for_pot, TEXT_SKELETONS_NEEDED,
0, 50 },
- { EL_BD_SKELETON, &level.bd_num_skeletons_needed_for_pot, TEXT_SKELETONS_NEEDED,
+ { EL_BDX_SKELETON, &level.bd_num_skeletons_needed_for_pot, TEXT_SKELETONS_NEEDED,
0, 50 },
- { EL_BD_SKELETON, &level.bd_skeleton_worth_num_diamonds, TEXT_SKELETONS_WORTH,
+ { EL_BDX_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,
+ { EL_BDX_CREATURE_SWITCH, &level.bd_creatures_auto_turn_delay, TEXT_AUTO_TURN_DELAY },
+ { EL_BDX_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 },
if (element == EL_EMPTY_SPACE && level.game_engine_type != GAME_ENGINE_TYPE_RND)
return FALSE;
- // special case: BD style rock customization only available in BD game engine
- if (element == EL_BD_ROCK && level.game_engine_type != GAME_ENGINE_TYPE_BD)
- return FALSE;
-
if (IS_GEM(element) ||
IS_CUSTOM_ELEMENT(element) ||
IS_GROUP_ELEMENT(element) ||
IS_MM_MCDUFFIN(element) ||
IS_DF_LASER(element) ||
IS_PLAYER_ELEMENT(element) ||
- IS_BD_PLAYER_ELEMENT(element) ||
+ IS_BDX_PLAYER_ELEMENT(element) ||
IS_BD_FIREFLY(properties_element) ||
- IS_BD_FIREFLY_2(properties_element) ||
+ IS_BDX_FIREFLY_1(properties_element) ||
+ IS_BDX_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) ||
- IS_BD_CONVEYOR_BELT_SWITCH(properties_element) ||
+ IS_BDX_BUTTERFLY_1(properties_element) ||
+ IS_BDX_BUTTERFLY_2(properties_element) ||
+ IS_BDX_STONEFLY(properties_element) ||
+ IS_BDX_DRAGONFLY(properties_element) ||
+ IS_BDX_EXPANDABLE_WALL(properties_element) ||
+ IS_BDX_EXPANDABLE_STEELWALL(properties_element) ||
+ IS_BDX_CONVEYOR_BELT(properties_element) ||
+ IS_BDX_CONVEYOR_BELT_SWITCH(properties_element) ||
IS_SOKOBAN_OBJECT_OR_FIELD(element) ||
HAS_EDITOR_CONTENT(element) ||
CAN_GROW(element) ||
COULD_MOVE_INTO_ACID(element) ||
MAYBE_DONT_COLLIDE_WITH(element) ||
- element == EL_BD_SAND ||
- element == EL_BD_ROCK ||
- element == EL_BD_MEGA_ROCK ||
- element == EL_BD_BOMB ||
- element == EL_BD_NITRO_PACK ||
- element == EL_BD_SWEET ||
- element == EL_BD_VOODOO_DOLL ||
- element == EL_BD_WATER ||
- element == EL_BD_GRAVITY_SWITCH)
+ element == EL_BDX_SAND_1 ||
+ element == EL_BDX_ROCK ||
+ element == EL_BDX_MEGA_ROCK ||
+ element == EL_BDX_BOMB ||
+ element == EL_BDX_ROCKET_LAUNCHER ||
+ element == EL_BDX_NITRO_PACK ||
+ element == EL_BDX_SWEET ||
+ element == EL_BDX_VOODOO_DOLL ||
+ element == EL_BDX_WATER ||
+ element == EL_BDX_GRAVITY_SWITCH)
{
return TRUE;
}
case EL_EMERALD_RED:
case EL_EMERALD_PURPLE:
case EL_BD_DIAMOND:
+ case EL_BDX_DIAMOND:
case EL_WALL_EMERALD:
case EL_WALL_EMERALD_YELLOW:
case EL_WALL_EMERALD_RED:
if (elements_with_counter[i].element != properties_element)
continue;
- // special case: score for extra diamonds only available in BD game engine
- if (elements_with_counter[i].element == EL_BD_DIAMOND &&
- elements_with_counter[i].value == &level.score[SC_DIAMOND_EXTRA] &&
- level.game_engine_type != GAME_ENGINE_TYPE_BD)
- continue;
-
- // special case: some amoeba counters only available in BD game engine
- if (elements_with_counter[i].element == EL_BD_AMOEBA &&
- elements_with_counter[i].value != &level.amoeba_speed &&
- level.game_engine_type != GAME_ENGINE_TYPE_BD)
- continue;
-
- // special case: 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 &&
- level.game_engine_type == GAME_ENGINE_TYPE_BD)
- continue;
-
int counter_id = ED_COUNTER_ID_ELEMENT_VALUE1 + num_element_counters;
counterbutton_info[counter_id].y =
- ED_ELEMENT_SETTINGS_YPOS((HAS_EDITOR_CONTENT(properties_element) ? 1 : 0) +
- (CAN_GROW(properties_element) ? 1 : 0) +
- (COULD_MOVE_INTO_ACID(properties_element) ? 1 : 0) +
- (MAYBE_DONT_COLLIDE_WITH(properties_element) ? 1 : 0) +
- (properties_element == EL_BD_VOODOO_DOLL ? 4 : 0) +
- (properties_element == EL_BD_SLIME ? 1 : 0) +
- (properties_element == EL_BD_ACID ? 1 : 0) +
- (properties_element == EL_BD_REPLICATOR ? 1 : 0) +
- (properties_element == EL_BD_CREATURE_SWITCH ? 2 : 0) +
- (properties_element == EL_BD_GRAVITY_SWITCH ? 2 : 0) +
- (properties_element == EL_EMC_MAGIC_BALL ? 2 : 0) +
+ ED_ELEMENT_SETTINGS_YPOS((HAS_EDITOR_CONTENT(properties_element) ? 1 : 0) +
+ (CAN_GROW(properties_element) ? 1 : 0) +
+ (COULD_MOVE_INTO_ACID(properties_element) ? 1 : 0) +
+ (MAYBE_DONT_COLLIDE_WITH(properties_element) ? 1 : 0) +
+ (properties_element == EL_BDX_AMOEBA_1 ? 2 : 0) +
+ (properties_element == EL_BDX_AMOEBA_2 ? 2 : 0) +
+ (properties_element == EL_BDX_MAGIC_WALL ? 1 : 0) +
+ (properties_element == EL_BDX_VOODOO_DOLL ? 4 : 0) +
+ (properties_element == EL_BDX_SLIME ? 1 : 0) +
+ (properties_element == EL_BDX_ACID ? 1 : 0) +
+ (properties_element == EL_BDX_REPLICATOR ? 1 : 0) +
+ (properties_element == EL_BDX_CREATURE_SWITCH ? 1 : 0) +
+ (properties_element == EL_BDX_GRAVITY_SWITCH ? 2 : 0) +
+ (properties_element == EL_EMC_MAGIC_BALL ? 2 : 0) +
num_element_counters);
- // special case: set magic wall counter for BD game engine separately
- if (properties_element == EL_BD_MAGIC_WALL && level.game_engine_type == GAME_ENGINE_TYPE_BD)
- counterbutton_info[counter_id].y = ED_ELEMENT_SETTINGS_YPOS(1);
-
- // special case: set amoeba counters for BD game engine separately
- if ((properties_element == EL_BD_AMOEBA && level.game_engine_type == GAME_ENGINE_TYPE_BD) ||
- (properties_element == EL_BD_AMOEBA_2))
- counterbutton_info[counter_id].y = ED_ELEMENT_SETTINGS_YPOS(3 + num_element_counters);
-
// special case: set position for delay counter for reappearing hammered walls
- if (properties_element == EL_BD_PNEUMATIC_HAMMER && num_element_counters > 0)
+ if (properties_element == EL_BDX_PNEUMATIC_HAMMER && num_element_counters > 0)
counterbutton_info[counter_id].y += 1;
counterbutton_info[counter_id].value = elements_with_counter[i].value;
break;
}
- if (properties_element == EL_BD_MAGIC_WALL && level.game_engine_type == GAME_ENGINE_TYPE_BD)
+ if (properties_element == EL_BDX_MAGIC_WALL)
{
// 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);
// draw stickybutton gadget
MapCheckbuttonGadget(ED_CHECKBUTTON_ID_STICK_ELEMENT);
- if (properties_element == EL_BD_AMOEBA && level.game_engine_type == GAME_ENGINE_TYPE_BD)
+ if (properties_element == EL_BDX_AMOEBA_1)
{
MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_AMOEBA_WAIT_FOR_HATCHING);
MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_AMOEBA_START_IMMEDIATELY);
- MapDrawingArea(ED_DRAWING_ID_BD_AMOEBA_CONTENT_TOO_BIG);
- MapDrawingArea(ED_DRAWING_ID_BD_AMOEBA_CONTENT_ENCLOSED);
+ MapDrawingArea(ED_DRAWING_ID_BD_AMOEBA_1_CONTENT_TOO_BIG);
+ MapDrawingArea(ED_DRAWING_ID_BD_AMOEBA_1_CONTENT_ENCLOSED);
}
- else if (properties_element == EL_BD_AMOEBA_2)
+ else if (properties_element == EL_BDX_AMOEBA_2)
{
MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_AMOEBA_WAIT_FOR_HATCHING);
MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_AMOEBA_START_IMMEDIATELY);
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)
+ }
+ else if (properties_element == EL_BDX_ACID)
{
MapDrawingArea(ED_DRAWING_ID_BD_ACID_EATS_ELEMENT);
MapDrawingArea(ED_DRAWING_ID_BD_ACID_TURNS_TO_ELEMENT);
}
- else if (IS_BD_BITER(properties_element))
+ else if (IS_BDX_BITER(properties_element))
{
MapDrawingArea(ED_DRAWING_ID_BD_BITER_EATS_ELEMENT);
}
- else if (properties_element == EL_BD_BLADDER)
+ else if (properties_element == EL_BDX_BLADDER)
{
MapDrawingArea(ED_DRAWING_ID_BD_BLADDER_CONVERTS_BY_ELEMENT);
}
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();
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);
}
}
- if (IS_BD_PLAYER_ELEMENT(properties_element))
+ if (IS_BDX_PLAYER_ELEMENT(properties_element))
{
counterbutton_info[ED_COUNTER_ID_BD_PUSHING_PROB].y =
ED_ELEMENT_SETTINGS_YPOS(2);
MapDrawingArea(ED_DRAWING_ID_BD_SNAP_ELEMENT);
}
- if (properties_element == EL_BD_SAND)
+ if (properties_element == EL_BDX_SAND_1)
{
MapDrawingArea(ED_DRAWING_ID_BD_SAND_LOOKS_LIKE);
}
- if (properties_element == EL_BD_ROCK && level.game_engine_type == GAME_ENGINE_TYPE_BD)
+ if (properties_element == EL_BDX_ROCK)
{
counterbutton_info[ED_COUNTER_ID_BD_PUSHING_PROB].y =
ED_ELEMENT_SETTINGS_YPOS(0);
MapDrawingArea(ED_DRAWING_ID_BD_ROCK_TURNS_TO_ON_IMPACT);
}
- if (properties_element == EL_BD_DIAMOND && level.game_engine_type == GAME_ENGINE_TYPE_BD)
+ if (properties_element == EL_BDX_DIAMOND)
{
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))
+ if (IS_BDX_FIREFLY_1(properties_element))
{
- MapDrawingArea(ED_DRAWING_ID_BD_FIREFLY_EXPLODES_TO);
+ MapDrawingArea(ED_DRAWING_ID_BD_FIREFLY_1_EXPLODES_TO);
MapDrawingArea(ED_DRAWING_ID_BD_EXPLOSION_TURNS_TO);
}
- else if (IS_BD_FIREFLY_2(properties_element))
+ else if (IS_BDX_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))
+ else if (IS_BDX_BUTTERFLY_1(properties_element))
{
- MapDrawingArea(ED_DRAWING_ID_BD_BUTTERFLY_EXPLODES_TO);
+ MapDrawingArea(ED_DRAWING_ID_BD_BUTTERFLY_1_EXPLODES_TO);
MapDrawingArea(ED_DRAWING_ID_BD_DIAMOND_BIRTH_TURNS_TO);
}
- else if (IS_BD_BUTTERFLY_2(properties_element))
+ else if (IS_BDX_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))
+ else if (IS_BDX_STONEFLY(properties_element))
{
MapDrawingArea(ED_DRAWING_ID_BD_STONEFLY_EXPLODES_TO);
}
- else if (IS_BD_DRAGONFLY(properties_element))
+ else if (IS_BDX_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)
+ else if (properties_element == EL_BDX_BOMB)
{
MapDrawingArea(ED_DRAWING_ID_BD_BOMB_EXPLOSION_TURNS_TO);
}
- else if (properties_element == EL_BD_NITRO_PACK)
+ else if (properties_element == EL_BDX_NITRO_PACK)
{
MapDrawingArea(ED_DRAWING_ID_BD_NITRO_EXPLOSION_TURNS_TO);
}
}
- if (properties_element == EL_BD_MEGA_ROCK ||
- properties_element == EL_BD_SWEET)
+ if (properties_element == EL_BDX_MEGA_ROCK ||
+ properties_element == EL_BDX_SWEET)
{
counterbutton_info[ED_COUNTER_ID_BD_PUSHING_PROB_WITH_SWEET].y =
ED_ELEMENT_SETTINGS_YPOS(0);
MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_PUSH_MEGA_ROCK_WITH_SWEET);
}
- if (properties_element == EL_BD_VOODOO_DOLL)
+ if (properties_element == EL_BDX_VOODOO_DOLL)
{
MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_VOODOO_COLLECTS_DIAMONDS);
MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_VOODOO_HURT_KILLS_PLAYER);
MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_VOODOO_VANISH_BY_EXPLOSION);
}
- if (properties_element == EL_BD_SLIME)
+ if (properties_element == EL_BDX_SLIME)
{
MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_SLIME_IS_PREDICTABLE);
MapDrawingArea(ED_DRAWING_ID_BD_SLIME_CONVERTS_TO_ELEMENT_3);
}
- if (IS_BD_EXPANDABLE_WALL(properties_element) ||
- IS_BD_EXPANDABLE_STEELWALL(properties_element))
+ if (IS_BDX_EXPANDABLE_WALL(properties_element) ||
+ IS_BDX_EXPANDABLE_STEELWALL(properties_element))
{
MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_CHANGE_EXPANDING_WALL);
- if (IS_BD_EXPANDABLE_WALL(properties_element))
+ if (IS_BDX_EXPANDABLE_WALL(properties_element))
MapDrawingArea(ED_DRAWING_ID_BD_EXPANDING_WALL_LOOKS_LIKE);
}
- if (properties_element == EL_BD_REPLICATOR)
+ if (properties_element == EL_BDX_REPLICATOR)
{
MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_REPLICATORS_ACTIVE);
}
- if (IS_BD_CONVEYOR_BELT(properties_element) ||
- IS_BD_CONVEYOR_BELT_SWITCH(properties_element))
+ if (IS_BDX_CONVEYOR_BELT(properties_element) ||
+ IS_BDX_CONVEYOR_BELT_SWITCH(properties_element))
{
MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_CONVEYOR_BELTS_ACTIVE);
MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_CONVEYOR_BELTS_CHANGED);
}
- if (properties_element == EL_BD_WATER)
+ if (properties_element == EL_BDX_WATER)
{
MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_WATER_CANNOT_FLOW_DOWN);
}
- if (properties_element == EL_BD_PNEUMATIC_HAMMER)
+ if (properties_element == EL_BDX_PNEUMATIC_HAMMER)
{
MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_HAMMER_WALLS_REAPPEAR);
}
- if (properties_element == EL_BD_CREATURE_SWITCH)
+ if (properties_element == EL_BDX_ROCKET_LAUNCHER)
+ {
+ MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_INFINITE_ROCKETS);
+ }
+
+ if (properties_element == EL_BDX_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)
+ if (properties_element == EL_BDX_GRAVITY_SWITCH)
{
MapSelectboxGadget(ED_SELECTBOX_ID_BD_GRAVITY_DIRECTION);
MapCheckbuttonGadget(ED_CHECKBUTTON_ID_BD_GRAVITY_AFFECTS_ALL);
}
- if (properties_element == EL_BD_NUT)
+ if (properties_element == EL_BDX_NUT)
{
MapDrawingArea(ED_DRAWING_ID_BD_NUT_CONTENT);
}
int graphic;
int frame;
- getEditorGraphicAndFrame(properties_element, &graphic, &frame, FALSE);
+ if (IS_BDX_RUNTIME_ELEMENT(properties_element))
+ {
+ el2edimg_with_frame(properties_element, &graphic, &frame);
+
+ DrawFixedGraphicExt(drawto, x, y, graphic, frame);
+ }
+ else
+ {
+ graphic = el2img(properties_element);
+ frame = (ANIM_MODE(graphic) == ANIM_CE_VALUE ?
+ custom_element.ce_value_fixed_initial :
+ ANIM_MODE(graphic) == ANIM_CE_SCORE ?
+ custom_element.collect_score_initial : FrameCounter);
- 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)
{ EL_EMERALD_PURPLE, EL_WALL_EMERALD_PURPLE },
{ EL_DIAMOND, EL_WALL_DIAMOND },
{ EL_BD_DIAMOND, EL_WALL_BD_DIAMOND },
+ { EL_BDX_DIAMOND, EL_BDX_WALL_DIAMOND },
{ EL_GATE_1, EL_GATE_1_GRAY },
{ EL_GATE_2, EL_GATE_2_GRAY },
{ EL_GATE_3, EL_GATE_3_GRAY },
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 &&
// 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 ||
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)
{
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)