X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Feditor.c;h=6ec52ee30ac21c4100f3120c80d7c9d733b53696;hb=5934610dc0048580758ec4b9c2d2a9c75e3a2615;hp=798fc2bbaab320109c9ed54a94fdb160aef5423f;hpb=9acc4e299380743e7a49ab26ad397274aecdbfe6;p=rocksndiamonds.git diff --git a/src/editor.c b/src/editor.c index 798fc2bb..6ec52ee3 100644 --- a/src/editor.c +++ b/src/editor.c @@ -8102,8 +8102,7 @@ static void getEditorGraphicAndFrame(int element, int *graphic, int *frame, bool { if (use_editor_gfx) { - *graphic = el2edimg(element); - *frame = 0; + el2edimg_with_frame(element, graphic, frame); } else { @@ -8113,21 +8112,6 @@ static void getEditorGraphicAndFrame(int element, int *graphic, int *frame, bool ANIM_MODE(*graphic) == ANIM_CE_SCORE ? custom_element.collect_score_initial : FrameCounter); } - - if (*graphic == IMG_UNKNOWN) - { - // no graphic defined -- if BD style, try to get runtime ("effect") element graphics - // (normal BD style elements have graphics, but runtime ("effects") elements do not) - int element_bd = map_element_RND_to_BD_cave(element); - - if (element_bd != O_UNKNOWN) - { - struct GraphicInfo_BD *g_bd = &graphic_info_bd_object[element_bd][0]; - - *graphic = g_bd->graphic; - *frame = g_bd->frame; - } - } } static void getEditorGraphicSource(int element, int tile_size, Bitmap **bitmap, @@ -10602,30 +10586,10 @@ static void InitDrawingElements(void) if (level.game_engine_type == game_engine_type_last) return; - if (level.game_engine_type == GAME_ENGINE_TYPE_BD) - { - new_element1 = EL_BD_WALL; - new_element2 = EL_EMPTY; - new_element3 = EL_BD_SAND; - } - else if (level.game_engine_type == GAME_ENGINE_TYPE_SP) - { - new_element1 = EL_SP_CHIP_SINGLE; - new_element2 = EL_EMPTY; - new_element3 = EL_SP_BASE; - } - else if (level.game_engine_type == GAME_ENGINE_TYPE_MM) - { - new_element1 = EL_MM_MIRROR_START; - new_element2 = EL_EMPTY; - new_element3 = EL_MM_WOODEN_WALL; - } - else - { - new_element1 = EL_WALL; - new_element2 = EL_EMPTY; - new_element3 = EL_SAND; - } + // select drawing elements according to game engine type + new_element1 = getDrawingElement(EL_WALL); + new_element2 = getDrawingElement(EL_EMPTY); + new_element3 = getDrawingElement(EL_SAND); game_engine_type_last = level.game_engine_type; } @@ -11452,13 +11416,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,7 +11434,7 @@ static void SetRandomLevelColors_BD(void) level.bd_color_5 = cave->color5; } -static void DrawColorBox(int nr) +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]; @@ -11514,7 +11478,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); } } @@ -11550,7 +11514,7 @@ static void DrawEngineConfigColors(void) } for (i = 0; i < MAX_BD_COLORS; i++) - DrawColorBox(i); + DrawColorBox_BD(i); MapTextbuttonGadget(ED_TEXTBUTTON_ID_BD_SET_RANDOM_COLORS); } @@ -11573,6 +11537,11 @@ static void DrawLevelConfigWindow(void) stick_element_properties_window = FALSE; + // make sure that previous level config edit mode exists for this level + if (edit_mode_levelconfig == ED_MODE_LEVELCONFIG_ENGINE && + level.game_engine_type != GAME_ENGINE_TYPE_BD) + edit_mode_levelconfig = ED_MODE_LEVELCONFIG_LEVEL; + SetAutomaticNumberOfGemsNeeded(); UnmapLevelEditorFieldGadgets(); @@ -11998,33 +11967,38 @@ static void DrawPropertiesInfo(void) ypos += 2 * MAX(font1_height, font2_height); - // ----- print standard properties of this element + // ----- print standard properties of this element (only for certain game engines) - DrawTextS(xpos, ypos, font1_nr, properties_text); + if (level.game_engine_type == GAME_ENGINE_TYPE_RND || + level.game_engine_type == GAME_ENGINE_TYPE_EM || + level.game_engine_type == GAME_ENGINE_TYPE_SP) + { + DrawTextS(xpos, ypos, font1_nr, properties_text); - ypos += line1_height; + ypos += line1_height; - for (i = 0; properties[i].value != -1; i++) - { - if (!HAS_PROPERTY(properties_element, properties[i].value)) - continue; + for (i = 0; properties[i].value != -1; i++) + { + if (!HAS_PROPERTY(properties_element, properties[i].value)) + continue; - DrawTextS(xpos, ypos, font2_nr, properties[i].text); + DrawTextS(xpos, ypos, font2_nr, properties[i].text); - ypos += font2_height; + ypos += font2_height; - num_standard_properties++; - } + num_standard_properties++; + } - if (num_standard_properties == 0) - { - DrawTextS(xpos + properties_text_len, ypos - line1_height + font2_yoffset, - font2_nr, none_text); + if (num_standard_properties == 0) + { + DrawTextS(xpos + properties_text_len, ypos - line1_height + font2_yoffset, + font2_nr, none_text); - ypos -= (line1_height - font1_height); - } + ypos -= (line1_height - font1_height); + } - ypos += MAX(font1_height, font2_height); + ypos += MAX(font1_height, font2_height); + } // ----- print special description of this element @@ -13088,9 +13062,18 @@ static void DrawEditorElementAnimation(int x, int y) int graphic; int frame; - getEditorGraphicAndFrame(properties_element, &graphic, &frame, FALSE); + if (IS_BD_RUNTIME_ELEMENT(properties_element)) + { + getEditorGraphicAndFrame(properties_element, &graphic, &frame, TRUE); + + DrawFixedGraphicExt(drawto, x, y, graphic, frame); + } + else + { + getEditorGraphicAndFrame(properties_element, &graphic, &frame, FALSE); - DrawFixedGraphicAnimationExt(drawto, x, y, graphic, frame, NO_MASKING); + DrawFixedGraphicAnimationExt(drawto, x, y, graphic, frame, NO_MASKING); + } } static void DrawEditorElementName(int x, int y, int font_nr) @@ -16369,6 +16352,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 @@ -16467,6 +16452,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 @@ -16632,7 +16619,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();