X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Feditor.c;h=7a854200d554445d7c48545c228b303777795d49;hb=5ac54645e6eeb1504a0743aa70cab93b63d232e5;hp=e311541abdcf975346589cb53addf1787c0c24e6;hpb=608452efc3cb8d145639e0f401d85996dfc4e698;p=rocksndiamonds.git diff --git a/src/editor.c b/src/editor.c index e311541a..7a854200 100644 --- a/src/editor.c +++ b/src/editor.c @@ -1093,6 +1093,7 @@ /* default value for element tile size in drawing area */ #define DEFAULT_EDITOR_TILESIZE MINI_TILESIZE +#define DEFAULT_EDITOR_TILESIZE_MM TILESIZE /* @@ -3691,6 +3692,7 @@ static int level_xpos = -1, level_ypos = -1; /* actual tile size used to display playfield drawing area */ static int ed_tilesize = DEFAULT_EDITOR_TILESIZE; +static int ed_tilesize_default = DEFAULT_EDITOR_TILESIZE; #define IN_ED_FIELD(x,y) IN_FIELD(x, y, ed_fieldx, ed_fieldy) @@ -8278,17 +8280,57 @@ static int getMaxEdFieldY(boolean has_scrollbar) void InitZoomLevelSettings(int zoom_tilesize) { if (zoom_tilesize == -1) - zoom_tilesize = setup.auto_setup.editor_zoom_tilesize; + { + ed_tilesize = setup.auto_setup.editor_zoom_tilesize; + ed_tilesize_default = DEFAULT_EDITOR_TILESIZE; + + if (level.game_engine_type == GAME_ENGINE_TYPE_MM) + { + ed_tilesize = DEFAULT_EDITOR_TILESIZE_MM; + ed_tilesize_default = DEFAULT_EDITOR_TILESIZE_MM; + } + } // limit zoom tilesize by upper and lower bound - zoom_tilesize = MIN(MAX(MICRO_TILESIZE, zoom_tilesize), TILESIZE); + ed_tilesize = MIN(MAX(MICRO_TILESIZE, ed_tilesize), TILESIZE); - ed_tilesize = setup.auto_setup.editor_zoom_tilesize = zoom_tilesize; + // store zoom tilesize in auto setup file only if it was manually changed + if (zoom_tilesize != -1) + setup.auto_setup.editor_zoom_tilesize = ed_tilesize; MAX_ED_FIELDX = getMaxEdFieldX(FALSE); MAX_ED_FIELDY = getMaxEdFieldY(FALSE); } +static void InitDrawingElements() +{ + static int game_engine_type_last = GAME_ENGINE_TYPE_UNKNOWN; + + if (level.game_engine_type == game_engine_type_last) + return; + + 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; + } + + game_engine_type_last = level.game_engine_type; +} + static void InitLevelSetInfo() { snprintf(levelset_name, MAX_LEVEL_NAME_LEN + 1, @@ -8390,6 +8432,7 @@ void DrawLevelEd() ClearField(); InitZoomLevelSettings(-1); + InitDrawingElements(); InitLevelSetInfo(); #if DEBUG @@ -13263,7 +13306,7 @@ static void HandleControlButtons(struct GadgetInfo *gi) case GADGET_ID_ZOOM: // zoom level editor tile size in or out (or reset to default size) ed_tilesize = (button == 1 ? ed_tilesize * 2 : - button == 2 ? DEFAULT_EDITOR_TILESIZE : + button == 2 ? ed_tilesize_default : button == 3 ? ed_tilesize / 2 : ed_tilesize); // limit zoom level by upper and lower bound