#define ED_TABBUTTON_XSIZE (graphic_info[IMG_EDITOR_TABBUTTON].width)
#define ED_TABBUTTON_YSIZE (graphic_info[IMG_EDITOR_TABBUTTON].height)
-#define ED_LEVEL_SETTINGS_TABS_X (editor.settings.tabs.x)
-#define ED_LEVEL_SETTINGS_TABS_Y (editor.settings.tabs.y)
-#define ED_ELEMENT_SETTINGS_TABS_X (editor.settings.tabs.x)
-#define ED_ELEMENT_SETTINGS_TABS_Y (editor.settings.tabs.y + \
+#define ED_SETTINGS_LEVEL_TABS_X (editor.settings.tabs.x)
+#define ED_SETTINGS_LEVEL_TABS_Y (editor.settings.tabs.y)
+#define ED_SETTINGS_ELEMENT_TABS_X (editor.settings.tabs.x)
+#define ED_SETTINGS_ELEMENT_TABS_Y (editor.settings.tabs.y + \
editor.settings.tabs.yoffset2)
#define ED_SETTINGS_TABS_XOFFSET (editor.settings.tabs.draw_xoffset)
#define ED_SETTINGS_TABS_YOFFSET (editor.settings.tabs.draw_yoffset)
-#define ED_LEVEL_SETTINGS_XSTART (ED_LEVEL_SETTINGS_TABS_X + \
+#define ED_LEVEL_TABS_XSTART (ED_SETTINGS_LEVEL_TABS_X)
+#define ED_LEVEL_TABS_YSTART (ED_SETTINGS_LEVEL_TABS_Y)
+#define ED_LEVEL_SETTINGS_XSTART (ED_SETTINGS_LEVEL_TABS_X + \
ED_SETTINGS_TABS_XOFFSET)
-#define ED_LEVEL_SETTINGS_YSTART (ED_LEVEL_SETTINGS_TABS_Y + \
+#define ED_LEVEL_SETTINGS_YSTART (ED_SETTINGS_LEVEL_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_SETTINGS_XSTART (ED_ELEMENT_SETTINGS_TABS_X + \
+#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 + \
ED_SETTINGS_TABS_XOFFSET)
-#define ED_ELEMENT_SETTINGS_YSTART (ED_ELEMENT_SETTINGS_TABS_Y + \
+#define ED_ELEMENT_SETTINGS_YSTART (ED_SETTINGS_ELEMENT_TABS_Y + \
ED_TABBUTTON_YSIZE + \
ED_GADGET_TINY_DISTANCE + \
ED_TAB_BAR_HEIGHT + \
#define ED_SETTINGS_YOFFSET (ED_CHECKBUTTON_YSIZE + \
ED_GADGET_LINE_DISTANCE)
-#define ED_POS_LEVEL_SETTINGS_RANGE (10000)
-#define ED_POS_LEVEL_SETTINGS_FIRST (1 * ED_POS_LEVEL_SETTINGS_RANGE)
-#define ED_POS_LEVEL_SETTINGS_LAST (2 * ED_POS_LEVEL_SETTINGS_RANGE - 1)
-#define ED_POS_ELEMENT_SETTINGS_FIRST (2 * ED_POS_LEVEL_SETTINGS_RANGE)
-#define ED_POS_ELEMENT_SETTINGS_LAST (3 * ED_POS_LEVEL_SETTINGS_RANGE - 1)
+#define ED_POS_RANGE (10000)
+#define ED_POS_LEVEL_TABS_FIRST (1 * ED_POS_RANGE)
+#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_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_ELEMENT_TABS_XPOS(n) (ED_POS_ELEMENT_TABS_FIRST + (n))
+#define ED_ELEMENT_TABS_YPOS(n) (ED_POS_ELEMENT_TABS_FIRST + (n))
+
#define ED_ELEMENT_SETTINGS_XPOS(n) (ED_POS_ELEMENT_SETTINGS_FIRST + (n))
#define ED_ELEMENT_SETTINGS_YPOS(n) (ED_POS_ELEMENT_SETTINGS_FIRST + (n))
+#define IS_POS_LEVEL_TABS(n) ((n) >= ED_POS_LEVEL_TABS_FIRST && \
+ (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_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 && \
(n) <= ED_POS_ELEMENT_SETTINGS_LAST)
+#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_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_TABS_X(n) (ED_LEVEL_TABS_XSTART + \
+ (n) * ED_SETTINGS_TABS_XOFFSET)
+#define ED_LEVEL_TABS_Y(n) (ED_LEVEL_TABS_YSTART + \
+ (n) * ED_SETTINGS_TABS_YOFFSET)
+
#define ED_LEVEL_SETTINGS_X(n) (ED_LEVEL_SETTINGS_XSTART + \
(n) * ED_SETTINGS_XOFFSET)
#define ED_LEVEL_SETTINGS_Y(n) (ED_LEVEL_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 + \
+ (n) * ED_SETTINGS_TABS_YOFFSET)
+
#define ED_ELEMENT_SETTINGS_X(n) (ED_ELEMENT_SETTINGS_XSTART + \
(n) * ED_SETTINGS_XOFFSET)
#define ED_ELEMENT_SETTINGS_Y(n) (ED_ELEMENT_SETTINGS_YSTART + \
(n) * ED_SETTINGS_YOFFSET)
+#define ED_POS_TO_LEVEL_TABS_X(n) \
+ (ED_LEVEL_TABS_X(ED_LEVEL_TABS_LINE(n)))
+#define ED_POS_TO_LEVEL_TABS_Y(n) \
+ (ED_LEVEL_TABS_Y(ED_LEVEL_TABS_LINE(n)))
+
#define ED_POS_TO_LEVEL_SETTINGS_X(n) \
(ED_LEVEL_SETTINGS_X(ED_LEVEL_SETTINGS_LINE(n)))
#define ED_POS_TO_LEVEL_SETTINGS_Y(n) \
(ED_LEVEL_SETTINGS_Y(ED_LEVEL_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_ELEMENT_TABS_Y(ED_ELEMENT_TABS_LINE(n)))
+
#define ED_POS_TO_ELEMENT_SETTINGS_X(n) \
(ED_ELEMENT_SETTINGS_X(ED_ELEMENT_SETTINGS_LINE(n)))
#define ED_POS_TO_ELEMENT_SETTINGS_Y(n) \
(ED_ELEMENT_SETTINGS_Y(ED_ELEMENT_SETTINGS_LINE(n)))
-#define ED_SETTINGS_X(n) (IS_POS_LEVEL_SETTINGS(n) ? \
+#define ED_SETTINGS_X(n) (IS_POS_LEVEL_TABS(n) ? \
+ ED_POS_TO_LEVEL_TABS_X(n) : \
+ IS_POS_LEVEL_SETTINGS(n) ? \
ED_POS_TO_LEVEL_SETTINGS_X(n) : \
+ IS_POS_ELEMENT_TABS(n) ? \
+ ED_POS_TO_ELEMENT_TABS_X(n) : \
IS_POS_ELEMENT_SETTINGS(n) ? \
ED_POS_TO_ELEMENT_SETTINGS_X(n) : (n))
-#define ED_SETTINGS_Y(n) (IS_POS_LEVEL_SETTINGS(n) ? \
+#define ED_SETTINGS_Y(n) (IS_POS_LEVEL_TABS(n) ? \
+ ED_POS_TO_LEVEL_TABS_Y(n) : \
+ IS_POS_LEVEL_SETTINGS(n) ? \
ED_POS_TO_LEVEL_SETTINGS_Y(n) : \
+ IS_POS_ELEMENT_TABS(n) ? \
+ ED_POS_TO_ELEMENT_TABS_Y(n) : \
IS_POS_ELEMENT_SETTINGS(n) ? \
ED_POS_TO_ELEMENT_SETTINGS_Y(n) : (n))
-#define ED_TAB_SETTINGS_X(n) (IS_POS_LEVEL_SETTINGS(n) ? \
- ED_LEVEL_SETTINGS_TABS_X : \
- ED_ELEMENT_SETTINGS_TABS_X)
-#define ED_TAB_SETTINGS_Y(n) (IS_POS_LEVEL_SETTINGS(n) ? \
- ED_LEVEL_SETTINGS_TABS_Y : \
- ED_ELEMENT_SETTINGS_TABS_Y)
-
#define ED_SETTINGS_XOFF(n) (5 * ((n) % 4) * \
ED_DRAWINGAREA_TILE_SIZE)
#define ED_SETTINGS_YOFF(n) (5 * ((n) / 4) * \
#define ED_NUM_DRAWING_AREAS 33
+#define ED_DRAWING_ID_EDITOR_FIRST ED_DRAWING_ID_RANDOM_BACKGROUND
+#define ED_DRAWING_ID_EDITOR_LAST ED_DRAWING_ID_RANDOM_BACKGROUND
+
/*
-----------------------------------------------------------------------------
char *text_left, *text_right, *infotext;
} textbutton_info[ED_NUM_TEXTBUTTONS] =
{
+ /* ---------- level and editor settings (tabs) --------------------------- */
+
{
- ED_LEVEL_SETTINGS_XPOS(0), ED_LEVEL_SETTINGS_YPOS(0),
+ ED_LEVEL_TABS_XPOS(0), ED_LEVEL_TABS_YPOS(0),
GADGET_ID_LEVELINFO_LEVEL, GADGET_ID_NONE,
8, "Level",
NULL, NULL, "Configure level properties"
8, "Editor",
NULL, NULL, "Configure editor properties"
},
+
+ /* ---------- element settings (tabs) ------------------------------------ */
+
{
- ED_ELEMENT_SETTINGS_XPOS(0), ED_ELEMENT_SETTINGS_YPOS(0),
+ ED_ELEMENT_TABS_XPOS(0), ED_ELEMENT_TABS_YPOS(0),
GADGET_ID_PROPERTIES_INFO, GADGET_ID_NONE,
8, "Info",
NULL, NULL, "Show information about element"
8, "Change",
NULL, NULL, "Configure custom element change pages"
},
+
+ /* ---------- element settings (buttons) --------------------------------- */
+
{
-1, -1,
GADGET_ID_SAVE_AS_TEMPLATE, GADGET_ID_CUSTOM_USE_TEMPLATE,
static void HandleControlButtons(struct GadgetInfo *);
static void HandleDrawingAreaInfo(struct GadgetInfo *);
static void PrintEditorGadgetInfoText(struct GadgetInfo *);
+static boolean AskToCopyAndModifyLevelTemplate();
static int num_editor_gadgets = 0; /* dynamically determined */
static int *editor_elements = NULL; /* dynamically allocated */
static int num_editor_elements = 0; /* dynamically determined */
-static boolean setup_editor_show_always = TRUE;
static boolean setup_editor_cascade_never = FALSE;
static int editor_hl_unused[] = { EL_EMPTY };
editor_elements_info[] =
{
{
- &setup_editor_show_always,
+ &setup.editor.el_classic,
&setup_editor_cascade_never,
&editor_hl_unused_ptr, &num_editor_hl_unused,
&editor_el_players_ptr, &num_editor_el_players
},
{
- &setup.editor.el_boulderdash,
+ &setup.editor.el_classic,
&setup.editor_cascade.el_bd,
&editor_hl_boulderdash_ptr, &num_editor_hl_boulderdash,
&editor_el_boulderdash_ptr, &num_editor_el_boulderdash
},
{
- &setup.editor.el_emerald_mine,
+ &setup.editor.el_classic,
&setup.editor_cascade.el_em,
&editor_hl_emerald_mine_ptr, &num_editor_hl_emerald_mine,
&editor_el_emerald_mine_ptr, &num_editor_el_emerald_mine
},
{
- &setup.editor.el_emerald_mine_club,
+ &setup.editor.el_classic,
&setup.editor_cascade.el_emc,
&editor_hl_emerald_mine_club_ptr, &num_editor_hl_emerald_mine_club,
&editor_el_emerald_mine_club_ptr, &num_editor_el_emerald_mine_club
},
{
- &setup.editor.el_more,
+ &setup.editor.el_classic,
&setup.editor_cascade.el_rnd,
&editor_hl_rnd_ptr, &num_editor_hl_rnd,
&editor_el_rnd_ptr, &num_editor_el_rnd
},
{
- &setup.editor.el_sokoban,
+ &setup.editor.el_classic,
&setup.editor_cascade.el_sb,
&editor_hl_sokoban_ptr, &num_editor_hl_sokoban,
&editor_el_sokoban_ptr, &num_editor_el_sokoban
},
{
- &setup.editor.el_supaplex,
+ &setup.editor.el_classic,
&setup.editor_cascade.el_sp,
&editor_hl_supaplex_ptr, &num_editor_hl_supaplex,
&editor_el_supaplex_ptr, &num_editor_el_supaplex
},
{
- &setup.editor.el_diamond_caves,
+ &setup.editor.el_classic,
&setup.editor_cascade.el_dc,
&editor_hl_diamond_caves_ptr, &num_editor_hl_diamond_caves,
&editor_el_diamond_caves_ptr, &num_editor_el_diamond_caves
},
{
- &setup.editor.el_dx_boulderdash,
+ &setup.editor.el_classic,
&setup.editor_cascade.el_dx,
&editor_hl_dx_boulderdash_ptr, &num_editor_hl_dx_boulderdash,
&editor_el_dx_boulderdash_ptr, &num_editor_el_dx_boulderdash
},
{
- &setup.editor.el_chars,
+ &setup.editor.el_classic,
&setup.editor_cascade.el_chars,
&editor_hl_chars_ptr, &num_editor_hl_chars,
&editor_el_chars_ptr, &num_editor_el_chars
},
{
- &setup.editor.el_steel_chars,
+ &setup.editor.el_classic,
&setup.editor_cascade.el_steel_chars,
&editor_hl_steel_chars_ptr, &num_editor_hl_steel_chars,
&editor_el_steel_chars_ptr, &num_editor_el_steel_chars
struct GadgetInfo *gi;
unsigned int event_mask;
char infotext[MAX_OUTPUT_LINESIZE + 1];
- int x = SX + ED_TAB_SETTINGS_X(textbutton_info[i].x);
- int y = SY + ED_TAB_SETTINGS_Y(textbutton_info[i].y);
+ int x = SX + ED_SETTINGS_X(textbutton_info[i].x);
+ int y = SY + ED_SETTINGS_Y(textbutton_info[i].y);
if (textbutton_info[i].size == -1) /* dynamically determine size */
textbutton_info[i].size = strlen(textbutton_info[i].text);
static boolean CopyCustomElement(int element_old, int element_new,
int copy_mode)
{
+ int copy_mode_orig = copy_mode;
+
if (copy_mode == GADGET_ID_CUSTOM_COPY)
{
element_new = (IS_CUSTOM_ELEMENT(element_old) ?
level.changed = TRUE;
}
+ /* when modifying custom/group element, ask for copying level template */
+ if (copy_mode_orig != GADGET_ID_CUSTOM_COPY && level.use_custom_template)
+ {
+ if (!AskToCopyAndModifyLevelTemplate())
+ return FALSE;
+ }
+
if (copy_mode == GADGET_ID_CUSTOM_COPY_FROM)
{
copy_custom_element_settings(element_new, element_old);
CopyClassicElementPropertiesToEditor(element);
}
+static boolean AskToCopyAndModifyLevelTemplate()
+{
+ if (Request("Copy and modify settings from level template?", REQ_ASK))
+ {
+ level.use_custom_template = FALSE;
+
+ ModifyGadget(level_editor_gadget[GADGET_ID_CUSTOM_USE_TEMPLATE],
+ GDI_CHECKED, FALSE, GDI_END);
+
+ return TRUE;
+ }
+ else
+ {
+ LoadLevelTemplate(-1); /* this resets all element modifications ... */
+
+ DrawEditModeWindow(); /* ... and copies them to 'custom_element' */
+
+ return FALSE;
+ }
+}
+
static void CopyCustomElementPropertiesToGame(int element)
{
int i;
level.changed = TRUE;
if (level.use_custom_template)
- {
- if (Request("Copy and modify level template?", REQ_ASK))
- {
- level.use_custom_template = FALSE;
- ModifyGadget(level_editor_gadget[GADGET_ID_CUSTOM_USE_TEMPLATE],
- GDI_CHECKED, FALSE, GDI_END);
- }
- else
- {
- LoadLevelTemplate(-1); /* this resets all element modifications ... */
-
- DrawEditModeWindow(); /* ... and copies them to 'custom_element' */
- }
- }
+ AskToCopyAndModifyLevelTemplate();
element_info[element] = custom_element;
*element_info[element].change = custom_element_change;
static void CopyGroupElementPropertiesToGame(int element)
{
- element_info[element] = custom_element;
- *element_info[element].group = group_element_info;
-
/* mark that this group element has been modified */
- element_info[element].modified_settings = TRUE;
+ custom_element.modified_settings = TRUE;
level.changed = TRUE;
+
+ if (level.use_custom_template)
+ AskToCopyAndModifyLevelTemplate();
+
+ element_info[element] = custom_element;
+ *element_info[element].group = group_element_info;
}
static void CopyClassicElementPropertiesToGame(int element)
{
static boolean started_inside_drawing_area = FALSE;
int id = gi->custom_id;
+ int type_id = gi->custom_type_id;
boolean button_press_event;
boolean button_release_event;
boolean inside_drawing_area = !gi->event.off_borders;
SetElementButton(lx, ly, new_element, button);
}
}
- else
+ else if (!button_release_event)
{
- int type_id = gi->custom_type_id;
int pos = sx * drawingarea_info[type_id].area_ysize + sy;
if (item_xsize == MINI_TILEX && item_ysize == MINI_TILEY)
PickDrawingElement(button, Feld[lx][ly]);
else
{
- int type_id = gi->custom_type_id;
int pos = sx * drawingarea_info[type_id].area_ysize + sy;
PickDrawingElement(button, drawingarea_info[type_id].value[pos]);
}
- break;
-
default:
break;
}
+
+ /* do not mark level as modified for certain non-level-changing gadgets */
+ if ((type_id >= ED_DRAWING_ID_EDITOR_FIRST &&
+ type_id <= ED_DRAWING_ID_EDITOR_LAST) ||
+ actual_drawing_function == GADGET_ID_PICK_ELEMENT)
+ return;
+
+ level.changed = TRUE;
}
static void HandleCounterButtons(struct GadgetInfo *gi)
counter_id <= ED_COUNTER_ID_CHANGE_LAST))
CopyElementPropertiesToGame(properties_element);
+ /* do not mark level as modified for certain non-level-changing gadgets */
+ if (counter_id >= ED_COUNTER_ID_EDITOR_FIRST &&
+ counter_id <= ED_COUNTER_ID_EDITOR_LAST)
+ return;
+
level.changed = TRUE;
}
{
struct ElementInfo *ei = &element_info[properties_element];
+ /* when modifying custom element, ask for copying level template */
+ if (level.use_custom_template && !AskToCopyAndModifyLevelTemplate())
+ return;
+
setElementChangePages(ei, ei->num_change_pages + 1);
/* set new change page to be new current change page */
{
struct ElementInfo *ei = &element_info[properties_element];
+ /* when modifying custom element, ask for copying level template */
+ if (level.use_custom_template && !AskToCopyAndModifyLevelTemplate())
+ return;
+
/* copy all change pages after change page to be deleted */
for (i = ei->current_change_page; i < ei->num_change_pages - 1; i++)
ei->change_page[i] = ei->change_page[i + 1];
int current_change_page = ei->current_change_page;
if (type_id == ED_GRAPHICBUTTON_ID_COPY_CHANGE_PAGE)
+ {
element_info[EL_INTERNAL_CLIPBOARD_CHANGE].change_page[0] =
ei->change_page[current_change_page];
+ }
else if (type_id == ED_GRAPHICBUTTON_ID_PASTE_CHANGE_PAGE)
{
+ /* when modifying custom element, ask for copying level template */
+ if (level.use_custom_template && !AskToCopyAndModifyLevelTemplate())
+ return;
+
ei->change_page[current_change_page] =
element_info[EL_INTERNAL_CLIPBOARD_CHANGE].change_page[0];
static void HandleRadiobuttons(struct GadgetInfo *gi)
{
- *radiobutton_info[gi->custom_type_id].value =
- radiobutton_info[gi->custom_type_id].checked_value;
+ int type_id = gi->custom_type_id;
+
+ *radiobutton_info[type_id].value =
+ radiobutton_info[type_id].checked_value;
+
+ /* do not mark level as modified for certain non-level-changing gadgets */
+ if (type_id >= ED_RADIOBUTTON_ID_EDITOR_FIRST &&
+ type_id <= ED_RADIOBUTTON_ID_EDITOR_LAST)
+ return;
level.changed = TRUE;
}
}
else if (type_id == ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE)
{
+ boolean template_related_changes_found = FALSE;
+ int i;
+
+ /* check if any custom or group elements have been changed */
+ for (i = 0; i < NUM_FILE_ELEMENTS; i++)
+ if ((IS_CUSTOM_ELEMENT(i) || IS_GROUP_ELEMENT(i)) &&
+ element_info[i].modified_settings)
+ template_related_changes_found = TRUE;
+
if (level.use_custom_template &&
!fileExists(getGlobalLevelTemplateFilename()))
{
}
if (level.use_custom_template &&
+ template_related_changes_found &&
!Request("Discard changes and use level template?", REQ_ASK))
{
level.use_custom_template = FALSE;
return;
}
+ if (!level.use_custom_template &&
+ Request("Copy settings from level template?", REQ_ASK))
+ {
+ return;
+ }
+
LoadLevelTemplate(level.use_custom_template ? -1 : level_nr);
DrawEditModeWindow();
}
+ /* do not mark level as modified for certain non-level-changing gadgets */
+ if ((type_id >= ED_CHECKBUTTON_ID_EDITOR_FIRST &&
+ type_id <= ED_CHECKBUTTON_ID_EDITOR_LAST) ||
+ type_id == ED_CHECKBUTTON_ID_STICK_ELEMENT)
+ return;
+
level.changed = TRUE;
}