X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Feditor.c;h=9fa1c4de5cefc00d59d91caa4e0bfdc55f02b4a5;hb=33aea5bc32e267538f3993b27774c636211bca1d;hp=2d3a9fb9f59823ceb60ae06f782eef3ef3cfba7b;hpb=840777da7be22993a8b52a7591da4d35f7ee55af;p=rocksndiamonds.git diff --git a/src/editor.c b/src/editor.c index 2d3a9fb9..9fa1c4de 100644 --- a/src/editor.c +++ b/src/editor.c @@ -625,8 +625,8 @@ enum 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, @@ -648,9 +648,9 @@ enum 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, @@ -1339,8 +1339,8 @@ enum 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, @@ -1362,9 +1362,9 @@ enum 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, @@ -2167,7 +2167,7 @@ static struct GADGET_ID_BD_COLOR_TEXT_B, MAX_BD_COLOR_TEXT_LEN, bd_color_text[0], - NULL, "Border color: ", NULL, "Enter border color (not used)" + NULL, "Border color: ", NULL, "Enter border color (not used)" }, { ED_TEXTINPUT_ID_BD_COLOR_TEXT_0, @@ -2175,7 +2175,7 @@ static struct GADGET_ID_BD_COLOR_TEXT_0, MAX_BD_COLOR_TEXT_LEN, bd_color_text[1], - NULL, "Background color:", NULL, "Enter background color (C64 graphics)" + NULL, "Background color: ", NULL, "Enter background color (C64 graphics)" }, { ED_TEXTINPUT_ID_BD_COLOR_TEXT_1, @@ -2183,7 +2183,7 @@ static struct GADGET_ID_BD_COLOR_TEXT_1, MAX_BD_COLOR_TEXT_LEN, bd_color_text[2], - NULL, "Sand color: ", NULL, "Enter sand color (C64 graphics)" + NULL, "Sand color: ", NULL, "Enter sand color (C64 graphics)" }, { ED_TEXTINPUT_ID_BD_COLOR_TEXT_2, @@ -2191,7 +2191,7 @@ static struct 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)" + NULL, "Steel wall color: ", NULL, "Enter steel wall color (C64 graphics)" }, { ED_TEXTINPUT_ID_BD_COLOR_TEXT_3, @@ -2199,7 +2199,7 @@ static struct GADGET_ID_BD_COLOR_TEXT_3, MAX_BD_COLOR_TEXT_LEN, bd_color_text[4], - NULL, "Wall color: ", NULL, "Enter wall color (C64 graphics)" + NULL, "Wall color: ", NULL, "Enter wall color (C64 graphics)" }, { ED_TEXTINPUT_ID_BD_COLOR_TEXT_4, @@ -2207,7 +2207,7 @@ static struct GADGET_ID_BD_COLOR_TEXT_4, MAX_BD_COLOR_TEXT_LEN, bd_color_text[5], - NULL, "Amoeba color: ", NULL, "Enter amoeba color (C64 graphics)" + NULL, "Amoeba color: ", NULL, "Enter amoeba color (C64 graphics)" }, { ED_TEXTINPUT_ID_BD_COLOR_TEXT_5, @@ -2215,7 +2215,7 @@ static struct GADGET_ID_BD_COLOR_TEXT_5, MAX_BD_COLOR_TEXT_LEN, bd_color_text[6], - NULL, "Slime color: ", NULL, "Enter slime color (C64 graphics)" + NULL, "Slime color: ", NULL, "Enter slime color (C64 graphics)" }, // ---------- element settings: configure (several elements) ---------------- @@ -3125,7 +3125,7 @@ static struct -1, options_bd_color_c64_name, &bd_color_c64[0], - NULL, "Border color: ", NULL, "Select border color (not used)" + NULL, "Border color: ", NULL, "Select border color (not used)" }, { ED_SELECTBOX_ID_BD_COLOR_C64_0, @@ -3134,7 +3134,7 @@ static struct -1, options_bd_color_c64_name, &bd_color_c64[1], - NULL, "Background color:", NULL, "Select background color (C64 graphics)" + NULL, "Background color: ", NULL, "Select background color (C64 graphics)" }, { ED_SELECTBOX_ID_BD_COLOR_C64_1, @@ -3143,7 +3143,7 @@ static struct -1, options_bd_color_c64_name, &bd_color_c64[2], - NULL, "Sand color: ", NULL, "Select sand color (C64 graphics)" + NULL, "Sand color: ", NULL, "Select sand color (C64 graphics)" }, { ED_SELECTBOX_ID_BD_COLOR_C64_2, @@ -3152,7 +3152,7 @@ static struct -1, options_bd_color_c64_name, &bd_color_c64[3], - NULL, "Steel wall color:", NULL, "Select steel wall color (C64 graphics)" + NULL, "Steel wall color: ", NULL, "Select steel wall color (C64 graphics)" }, { ED_SELECTBOX_ID_BD_COLOR_C64_3, @@ -3161,7 +3161,7 @@ static struct -1, options_bd_color_c64_name, &bd_color_c64[4], - NULL, "Wall color: ", NULL, "Select wall color (C64 graphics)" + NULL, "Wall color: ", NULL, "Select wall color (C64 graphics)" }, { ED_SELECTBOX_ID_BD_COLOR_C64_4, @@ -3170,7 +3170,7 @@ static struct -1, options_bd_color_c64_name, &bd_color_c64[5], - NULL, "Amoeba color: ", NULL, "Select amoeba color (C64 graphics)" + NULL, "Amoeba color: ", NULL, "Select amoeba color (C64 graphics)" }, { ED_SELECTBOX_ID_BD_COLOR_C64_5, @@ -3179,7 +3179,7 @@ static struct -1, options_bd_color_c64_name, &bd_color_c64[6], - NULL, "Slime color: ", NULL, "Select slime color (C64 graphics)" + NULL, "Slime color: ", NULL, "Select slime color (C64 graphics)" }, // ---------- element settings: configure (several elements) ---------------- @@ -4883,23 +4883,23 @@ static struct "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 ------------------------------------------- @@ -4910,7 +4910,7 @@ static struct ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF, GADGET_ID_BD_AMOEBA_2_CONTENT_TOO_BIG, GADGET_ID_NONE, &level.bd_amoeba_2_content_too_big, 1, 1, - "If too big, changes to:", NULL, NULL, NULL, "BD amoeba 2 content if too big" + "If too big, changes to:", NULL, NULL, NULL, "Amoeba 2 content if too big" }, { ED_DRAWING_ID_BD_AMOEBA_2_CONTENT_ENCLOSED, @@ -4918,7 +4918,7 @@ static struct ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF, GADGET_ID_BD_AMOEBA_2_CONTENT_ENCLOSED, GADGET_ID_NONE, &level.bd_amoeba_2_content_enclosed, 1, 1, - "If enclosed, changes to:", NULL, NULL, NULL, "BD amoeba 2 content if enclosed" + "If enclosed, changes to:", NULL, NULL, NULL, "Amoeba 2 content if enclosed" }, { ED_DRAWING_ID_BD_AMOEBA_2_CONTENT_EXPLODING, @@ -4926,7 +4926,7 @@ static struct ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF, GADGET_ID_BD_AMOEBA_2_CONTENT_EXPLODING, GADGET_ID_NONE, &level.bd_amoeba_2_content_exploding, 1, 1, - "If exploding, changes to:", NULL, NULL, NULL, "BD amoeba 2 content if exploding" + "If exploding, changes to:", NULL, NULL, NULL, "Amoeba 2 content if exploding" }, { ED_DRAWING_ID_BD_AMOEBA_2_CONTENT_LOOKS_LIKE, @@ -4934,7 +4934,7 @@ static struct ED_AREA_1X1_SETTINGS_XOFF, ED_AREA_1X1_SETTINGS_YOFF, GADGET_ID_BD_AMOEBA_2_CONTENT_LOOKS_LIKE, GADGET_ID_NONE, &level.bd_amoeba_2_content_looks_like, 1, 1, - "Use graphic of element:", NULL, NULL, NULL, "BD amoeba 2 looks like this element" + "Use graphic of element:", NULL, NULL, NULL, "Amoeba 2 looks like this element" }, { ED_DRAWING_ID_BD_SLIME_EATS_ELEMENT_1, @@ -5073,11 +5073,11 @@ static struct "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" }, { @@ -5089,11 +5089,11 @@ static struct "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" }, { @@ -5399,7 +5399,6 @@ static boolean getDrawModeHiRes(void); 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 @@ -5487,28 +5486,28 @@ static int editor_hl_boulderdash_native[] = static int editor_el_boulderdash_native[] = { EL_EMPTY, - EL_BD_SAND, - EL_BD_ROCK, - EL_BD_DIAMOND, + EL_BD_SAND_1, + EL_BD_ROCK_NATIVE, + EL_BD_DIAMOND_NATIVE, EL_BD_INBOX, EL_BD_STEELWALL, - EL_BD_WALL, - EL_BD_MAGIC_WALL, + EL_BD_WALL_NATIVE, + EL_BD_MAGIC_WALL_NATIVE, - EL_BD_AMOEBA, - EL_BD_BUTTERFLY_UP, - EL_BD_FIREFLY_UP, + EL_BD_AMOEBA_1, + EL_BD_BUTTERFLY_1_UP, + EL_BD_FIREFLY_1_UP, EL_BD_EXIT_CLOSED, - EL_BD_BUTTERFLY_LEFT, - EL_BD_FIREFLY_LEFT, - EL_BD_BUTTERFLY_RIGHT, - EL_BD_FIREFLY_RIGHT, + EL_BD_BUTTERFLY_1_LEFT, + EL_BD_FIREFLY_1_LEFT, + EL_BD_BUTTERFLY_1_RIGHT, + EL_BD_FIREFLY_1_RIGHT, EL_BD_SAND_2, - EL_BD_BUTTERFLY_DOWN, - EL_BD_FIREFLY_DOWN, + EL_BD_BUTTERFLY_1_DOWN, + EL_BD_FIREFLY_1_DOWN, EL_BD_EXIT_OPEN, EL_BD_AMOEBA_2, @@ -5666,8 +5665,8 @@ static int editor_hl_boulderdash_effects[] = static int editor_el_boulderdash_effects[] = { - EL_BD_DIAMOND_FALLING, - EL_BD_ROCK_FALLING, + EL_BD_DIAMOND_NATIVE_FALLING, + EL_BD_ROCK_NATIVE_FALLING, EL_BD_MEGA_ROCK_FALLING, EL_BD_FLYING_DIAMOND_FLYING, @@ -5753,12 +5752,12 @@ static int editor_el_boulderdash_effects[] = EL_BD_EXPLODING_5, EL_BD_TIME_PENALTY, - EL_BD_DIAMOND_GROWING_1, - EL_BD_DIAMOND_GROWING_2, + EL_BD_DIAMOND_NATIVE_GROWING_1, + EL_BD_DIAMOND_NATIVE_GROWING_2, - EL_BD_DIAMOND_GROWING_3, - EL_BD_DIAMOND_GROWING_4, - EL_BD_DIAMOND_GROWING_5, + EL_BD_DIAMOND_NATIVE_GROWING_3, + EL_BD_DIAMOND_NATIVE_GROWING_4, + EL_BD_DIAMOND_NATIVE_GROWING_5, EL_BD_NITRO_PACK_EXPLODING, EL_BD_NITRO_PACK_EXPLODING_1, @@ -5766,10 +5765,10 @@ static int editor_el_boulderdash_effects[] = 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_ROCK_NATIVE_GROWING_1, + EL_BD_ROCK_NATIVE_GROWING_2, + EL_BD_ROCK_NATIVE_GROWING_3, + EL_BD_ROCK_NATIVE_GROWING_4, EL_BD_STEELWALL_GROWING_1, EL_BD_STEELWALL_GROWING_2, @@ -8057,7 +8056,7 @@ static void DrawDrawingArea(int id) int graphic; int frame; - getEditorGraphicAndFrame(element, &graphic, &frame, TRUE); + el2edimg_with_frame(element, &graphic, &frame); DrawSizedGraphicExt(drawto, gi->x + x * tilesize, @@ -8098,45 +8097,13 @@ static void ScrollEditorLevel(int from_x, int from_y, int scroll) 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); } @@ -10602,30 +10569,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; } @@ -11452,13 +11399,13 @@ void SetDefaultLevelColors_BD(void) bd_color_default[i] = *bd_color[i]; } -static void SetRandomLevelColors_BD(void) +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, level.bd_color_type); + gd_cave_set_random_colors(cave, bd_color_type); // copy colors to level editor level.bd_color_b = cave->colorb; @@ -11470,6 +11417,31 @@ static void SetRandomLevelColors_BD(void) 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; @@ -11489,7 +11461,7 @@ static void DrawEngineConfigColors(void) else { // color type switched to different color type as default colors => use random colors - SetRandomLevelColors_BD(); + SetRandomLevelColors_BD(level.bd_color_type); } } @@ -11524,6 +11496,9 @@ static void DrawEngineConfigColors(void) MapTextInputGadget(i); } + for (i = 0; i < MAX_BD_COLORS; i++) + DrawColorBox_BD(i); + MapTextbuttonGadget(ED_TEXTBUTTON_ID_BD_SET_RANDOM_COLORS); } @@ -11545,6 +11520,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(); @@ -11970,33 +11950,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 @@ -12057,7 +12042,8 @@ static struct { { 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_BD_DIAMOND_NATIVE, &level.score[SC_EMERALD], TEXT_COLLECTING }, + { EL_BD_DIAMOND_NATIVE, &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 }, @@ -12135,11 +12121,11 @@ static struct { EL_AMOEBA_FULL, &level.amoeba_speed, TEXT_AMOEBA_SPEED }, { EL_BD_AMOEBA, &level.amoeba_speed, TEXT_AMOEBA_SPEED }, { EL_EMC_DRIPPER, &level.amoeba_speed, TEXT_AMOEBA_SPEED }, - { EL_BD_AMOEBA, &level.bd_amoeba_threshold_too_big, TEXT_AMOEBA_THRESHOED }, - { EL_BD_AMOEBA, &level.bd_amoeba_slow_growth_time, TEXT_AMOEBA_SLOW_TIME }, - { EL_BD_AMOEBA, &level.bd_amoeba_slow_growth_rate, TEXT_AMOEBA_SLOW_RATE, + { EL_BD_AMOEBA_1, &level.bd_amoeba_1_threshold_too_big, TEXT_AMOEBA_THRESHOED }, + { EL_BD_AMOEBA_1, &level.bd_amoeba_1_slow_growth_time, TEXT_AMOEBA_SLOW_TIME }, + { EL_BD_AMOEBA_2, &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_BD_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 }, @@ -12148,8 +12134,9 @@ static struct { EL_BD_AMOEBA_2, &level.bd_amoeba_2_fast_growth_rate, TEXT_AMOEBA_FAST_RATE, 0, 100 }, { EL_MAGIC_WALL, &level.time_magic_wall, TEXT_DURATION }, - { EL_BD_MAGIC_WALL, &level.time_magic_wall, TEXT_DURATION }, { EL_DC_MAGIC_WALL, &level.time_magic_wall, TEXT_DURATION }, + { EL_BD_MAGIC_WALL, &level.time_magic_wall, TEXT_DURATION }, + { EL_BD_MAGIC_WALL_NATIVE, &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 }, @@ -12231,10 +12218,6 @@ static boolean checkPropertiesConfig(int element) if (element == EL_EMPTY_SPACE && level.game_engine_type != GAME_ENGINE_TYPE_RND) return FALSE; - // special case: BD style rock customization only available in BD game engine - if (element == EL_BD_ROCK && level.game_engine_type != GAME_ENGINE_TYPE_BD) - return FALSE; - if (IS_GEM(element) || IS_CUSTOM_ELEMENT(element) || IS_GROUP_ELEMENT(element) || @@ -12247,8 +12230,10 @@ static boolean checkPropertiesConfig(int element) IS_PLAYER_ELEMENT(element) || IS_BD_PLAYER_ELEMENT(element) || IS_BD_FIREFLY(properties_element) || + IS_BD_FIREFLY_1(properties_element) || IS_BD_FIREFLY_2(properties_element) || IS_BD_BUTTERFLY(properties_element) || + IS_BD_BUTTERFLY_1(properties_element) || IS_BD_BUTTERFLY_2(properties_element) || IS_BD_STONEFLY(properties_element) || IS_BD_DRAGONFLY(properties_element) || @@ -12261,8 +12246,8 @@ static boolean checkPropertiesConfig(int 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_SAND_1 || + element == EL_BD_ROCK_NATIVE || element == EL_BD_MEGA_ROCK || element == EL_BD_BOMB || element == EL_BD_ROCKET_LAUNCHER || @@ -12306,6 +12291,7 @@ static void SetAutomaticNumberOfGemsNeeded(void) case EL_EMERALD_RED: case EL_EMERALD_PURPLE: case EL_BD_DIAMOND: + case EL_BD_DIAMOND_NATIVE: case EL_WALL_EMERALD: case EL_WALL_EMERALD_YELLOW: case EL_WALL_EMERALD_RED: @@ -12365,57 +12351,25 @@ static void DrawPropertiesConfig(void) 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 ? 1 : 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_BD_AMOEBA_1 ? 3 : 0) + + (properties_element == EL_BD_AMOEBA_2 ? 3 : 0) + + (properties_element == EL_BD_MAGIC_WALL_NATIVE ? 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 ? 1 : 0) + + (properties_element == EL_BD_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) counterbutton_info[counter_id].y += 1; @@ -12436,7 +12390,7 @@ static void DrawPropertiesConfig(void) break; } - if (properties_element == EL_BD_MAGIC_WALL && level.game_engine_type == GAME_ENGINE_TYPE_BD) + if (properties_element == EL_BD_MAGIC_WALL_NATIVE) { // draw stickybutton gadget MapCheckbuttonGadget(ED_CHECKBUTTON_ID_STICK_ELEMENT); @@ -12460,13 +12414,13 @@ static void DrawPropertiesConfig(void) // 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_BD_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) { @@ -12621,12 +12575,12 @@ static void DrawPropertiesConfig(void) MapDrawingArea(ED_DRAWING_ID_BD_SNAP_ELEMENT); } - if (properties_element == EL_BD_SAND) + if (properties_element == EL_BD_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_BD_ROCK_NATIVE) { counterbutton_info[ED_COUNTER_ID_BD_PUSHING_PROB].y = ED_ELEMENT_SETTINGS_YPOS(0); @@ -12640,7 +12594,7 @@ static void DrawPropertiesConfig(void) 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_BD_DIAMOND_NATIVE) { MapDrawingArea(ED_DRAWING_ID_BD_DIAMOND_TURNS_TO_ON_FALLING); MapDrawingArea(ED_DRAWING_ID_BD_DIAMOND_TURNS_TO_ON_IMPACT); @@ -12648,9 +12602,9 @@ static void DrawPropertiesConfig(void) if (level.game_engine_type == GAME_ENGINE_TYPE_BD) { - if (IS_BD_FIREFLY(properties_element)) + if (IS_BD_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)) @@ -12658,9 +12612,9 @@ static void DrawPropertiesConfig(void) 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_BD_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)) @@ -13060,9 +13014,22 @@ static void DrawEditorElementAnimation(int x, int y) int graphic; int frame; - getEditorGraphicAndFrame(properties_element, &graphic, &frame, FALSE); + if (IS_BD_NATIVE_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) @@ -13991,6 +13958,7 @@ static void SetElementIntelliDraw(int x, int y, int dx, int dy, int new_element, { EL_EMERALD_PURPLE, EL_WALL_EMERALD_PURPLE }, { EL_DIAMOND, EL_WALL_DIAMOND }, { EL_BD_DIAMOND, EL_WALL_BD_DIAMOND }, + { EL_BD_DIAMOND_NATIVE, EL_BD_WALL_DIAMOND }, { EL_GATE_1, EL_GATE_1_GRAY }, { EL_GATE_2, EL_GATE_2_GRAY }, { EL_GATE_3, EL_GATE_3_GRAY }, @@ -16341,6 +16309,8 @@ static void HandleTextInputGadgets(struct GadgetInfo *gi) 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 @@ -16439,6 +16409,8 @@ static void HandleSelectboxGadgets(struct GadgetInfo *gi) 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 @@ -16604,7 +16576,7 @@ static void HandleTextbuttonGadgets(struct GadgetInfo *gi) } else if (type_id == ED_TEXTBUTTON_ID_BD_SET_RANDOM_COLORS) { - SetRandomLevelColors_BD(); + SetRandomLevelColors_BD(level.bd_color_type); // update BD color palette gadgets after setting random colors DrawLevelConfigWindow();