X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Feditor.c;h=1951d1f47bce14d94be2a9a2ab83d05267444ec5;hb=514321a85f7dda02848a3ce78667329f9c891156;hp=00cda340cc0053cedec3e928c13be96f5f673a6e;hpb=72657dfeee6b6c184a42e83ed923a63c1768100b;p=rocksndiamonds.git diff --git a/src/editor.c b/src/editor.c index 00cda340..1951d1f4 100644 --- a/src/editor.c +++ b/src/editor.c @@ -95,8 +95,11 @@ #define ED_COUNTER_YDISTANCE (3 * MINI_TILEY) #define ED_COUNTER_YPOS(n) (ED_COUNTER_YSTART + \ n * ED_COUNTER_YDISTANCE) +#define ED_COUNTER_YPOS2(n) (ED_COUNTER_YSTART + \ + n * ED_COUNTER_YDISTANCE / 2) #define ED_COUNTER2_YPOS(n) (ED_COUNTER_YSTART + \ n * ED_COUNTER_YDISTANCE - 2) + /* standard distances */ #define ED_BORDER_SIZE 3 #define ED_GADGET_DISTANCE 2 @@ -105,6 +108,9 @@ #define ED_AREA_ELEM_CONTENT_XPOS ( 2 * MINI_TILEX) #define ED_AREA_ELEM_CONTENT_YPOS (22 * MINI_TILEY) +#define ED_AREA_ELEM_CONTENT2_XPOS ( 2 * MINI_TILEX) +#define ED_AREA_ELEM_CONTENT2_YPOS (28 * MINI_TILEY) + /* values for random placement background drawing area */ #define ED_AREA_RANDOM_BACKGROUND_XPOS (29 * MINI_TILEX) #define ED_AREA_RANDOM_BACKGROUND_YPOS (31 * MINI_TILEY) @@ -207,107 +213,124 @@ /* drawing toolbox buttons */ #define GADGET_ID_NONE -1 -#define GADGET_ID_SINGLE_ITEMS 0 -#define GADGET_ID_CONNECTED_ITEMS 1 -#define GADGET_ID_LINE 2 -#define GADGET_ID_ARC 3 -#define GADGET_ID_RECTANGLE 4 -#define GADGET_ID_FILLED_BOX 5 -#define GADGET_ID_WRAP_UP 6 -#define GADGET_ID_TEXT 7 -#define GADGET_ID_FLOOD_FILL 8 -#define GADGET_ID_WRAP_LEFT 9 -#define GADGET_ID_PROPERTIES 10 -#define GADGET_ID_WRAP_RIGHT 11 -#define GADGET_ID_RANDOM_PLACEMENT 12 -#define GADGET_ID_GRAB_BRUSH 13 -#define GADGET_ID_WRAP_DOWN 14 -#define GADGET_ID_PICK_ELEMENT 15 -#define GADGET_ID_UNDO 16 -#define GADGET_ID_INFO 17 -#define GADGET_ID_SAVE 18 -#define GADGET_ID_CLEAR 19 -#define GADGET_ID_TEST 20 -#define GADGET_ID_EXIT 21 +#define GADGET_ID_TOOLBOX_FIRST 0 + +#define GADGET_ID_SINGLE_ITEMS (GADGET_ID_TOOLBOX_FIRST + 0) +#define GADGET_ID_CONNECTED_ITEMS (GADGET_ID_TOOLBOX_FIRST + 1) +#define GADGET_ID_LINE (GADGET_ID_TOOLBOX_FIRST + 2) +#define GADGET_ID_ARC (GADGET_ID_TOOLBOX_FIRST + 3) +#define GADGET_ID_RECTANGLE (GADGET_ID_TOOLBOX_FIRST + 4) +#define GADGET_ID_FILLED_BOX (GADGET_ID_TOOLBOX_FIRST + 5) +#define GADGET_ID_WRAP_UP (GADGET_ID_TOOLBOX_FIRST + 6) +#define GADGET_ID_TEXT (GADGET_ID_TOOLBOX_FIRST + 7) +#define GADGET_ID_FLOOD_FILL (GADGET_ID_TOOLBOX_FIRST + 8) +#define GADGET_ID_WRAP_LEFT (GADGET_ID_TOOLBOX_FIRST + 9) +#define GADGET_ID_PROPERTIES (GADGET_ID_TOOLBOX_FIRST + 10) +#define GADGET_ID_WRAP_RIGHT (GADGET_ID_TOOLBOX_FIRST + 11) +#define GADGET_ID_RANDOM_PLACEMENT (GADGET_ID_TOOLBOX_FIRST + 12) +#define GADGET_ID_GRAB_BRUSH (GADGET_ID_TOOLBOX_FIRST + 13) +#define GADGET_ID_WRAP_DOWN (GADGET_ID_TOOLBOX_FIRST + 14) +#define GADGET_ID_PICK_ELEMENT (GADGET_ID_TOOLBOX_FIRST + 15) +#define GADGET_ID_UNDO (GADGET_ID_TOOLBOX_FIRST + 16) +#define GADGET_ID_INFO (GADGET_ID_TOOLBOX_FIRST + 17) +#define GADGET_ID_SAVE (GADGET_ID_TOOLBOX_FIRST + 18) +#define GADGET_ID_CLEAR (GADGET_ID_TOOLBOX_FIRST + 19) +#define GADGET_ID_TEST (GADGET_ID_TOOLBOX_FIRST + 20) +#define GADGET_ID_EXIT (GADGET_ID_TOOLBOX_FIRST + 21) /* counter button identifiers */ -#define GADGET_ID_ELEM_SCORE_DOWN 22 -#define GADGET_ID_ELEM_SCORE_TEXT 23 -#define GADGET_ID_ELEM_SCORE_UP 24 -#define GADGET_ID_ELEM_CONTENT_DOWN 25 -#define GADGET_ID_ELEM_CONTENT_TEXT 26 -#define GADGET_ID_ELEM_CONTENT_UP 27 -#define GADGET_ID_LEVEL_XSIZE_DOWN 28 -#define GADGET_ID_LEVEL_XSIZE_TEXT 29 -#define GADGET_ID_LEVEL_XSIZE_UP 30 -#define GADGET_ID_LEVEL_YSIZE_DOWN 31 -#define GADGET_ID_LEVEL_YSIZE_TEXT 32 -#define GADGET_ID_LEVEL_YSIZE_UP 33 -#define GADGET_ID_LEVEL_RANDOM_DOWN 34 -#define GADGET_ID_LEVEL_RANDOM_TEXT 35 -#define GADGET_ID_LEVEL_RANDOM_UP 36 -#define GADGET_ID_LEVEL_COLLECT_DOWN 37 -#define GADGET_ID_LEVEL_COLLECT_TEXT 38 -#define GADGET_ID_LEVEL_COLLECT_UP 39 -#define GADGET_ID_LEVEL_TIMELIMIT_DOWN 40 -#define GADGET_ID_LEVEL_TIMELIMIT_TEXT 41 -#define GADGET_ID_LEVEL_TIMELIMIT_UP 42 -#define GADGET_ID_LEVEL_TIMESCORE_DOWN 43 -#define GADGET_ID_LEVEL_TIMESCORE_TEXT 44 -#define GADGET_ID_LEVEL_TIMESCORE_UP 45 -#define GADGET_ID_SELECT_LEVEL_DOWN 46 -#define GADGET_ID_SELECT_LEVEL_TEXT 47 -#define GADGET_ID_SELECT_LEVEL_UP 48 +#define GADGET_ID_COUNTER_FIRST (GADGET_ID_TOOLBOX_FIRST + 22) + +#define GADGET_ID_ELEM_SCORE_DOWN (GADGET_ID_COUNTER_FIRST + 0) +#define GADGET_ID_ELEM_SCORE_TEXT (GADGET_ID_COUNTER_FIRST + 1) +#define GADGET_ID_ELEM_SCORE_UP (GADGET_ID_COUNTER_FIRST + 2) +#define GADGET_ID_ELEM_CONTENT_DOWN (GADGET_ID_COUNTER_FIRST + 3) +#define GADGET_ID_ELEM_CONTENT_TEXT (GADGET_ID_COUNTER_FIRST + 4) +#define GADGET_ID_ELEM_CONTENT_UP (GADGET_ID_COUNTER_FIRST + 5) +#define GADGET_ID_LEVEL_XSIZE_DOWN (GADGET_ID_COUNTER_FIRST + 6) +#define GADGET_ID_LEVEL_XSIZE_TEXT (GADGET_ID_COUNTER_FIRST + 7) +#define GADGET_ID_LEVEL_XSIZE_UP (GADGET_ID_COUNTER_FIRST + 8) +#define GADGET_ID_LEVEL_YSIZE_DOWN (GADGET_ID_COUNTER_FIRST + 9) +#define GADGET_ID_LEVEL_YSIZE_TEXT (GADGET_ID_COUNTER_FIRST + 10) +#define GADGET_ID_LEVEL_YSIZE_UP (GADGET_ID_COUNTER_FIRST + 11) +#define GADGET_ID_LEVEL_RANDOM_DOWN (GADGET_ID_COUNTER_FIRST + 12) +#define GADGET_ID_LEVEL_RANDOM_TEXT (GADGET_ID_COUNTER_FIRST + 13) +#define GADGET_ID_LEVEL_RANDOM_UP (GADGET_ID_COUNTER_FIRST + 14) +#define GADGET_ID_LEVEL_COLLECT_DOWN (GADGET_ID_COUNTER_FIRST + 15) +#define GADGET_ID_LEVEL_COLLECT_TEXT (GADGET_ID_COUNTER_FIRST + 16) +#define GADGET_ID_LEVEL_COLLECT_UP (GADGET_ID_COUNTER_FIRST + 17) +#define GADGET_ID_LEVEL_TIMELIMIT_DOWN (GADGET_ID_COUNTER_FIRST + 18) +#define GADGET_ID_LEVEL_TIMELIMIT_TEXT (GADGET_ID_COUNTER_FIRST + 19) +#define GADGET_ID_LEVEL_TIMELIMIT_UP (GADGET_ID_COUNTER_FIRST + 20) +#define GADGET_ID_LEVEL_TIMESCORE_DOWN (GADGET_ID_COUNTER_FIRST + 21) +#define GADGET_ID_LEVEL_TIMESCORE_TEXT (GADGET_ID_COUNTER_FIRST + 22) +#define GADGET_ID_LEVEL_TIMESCORE_UP (GADGET_ID_COUNTER_FIRST + 23) +#define GADGET_ID_SELECT_LEVEL_DOWN (GADGET_ID_COUNTER_FIRST + 24) +#define GADGET_ID_SELECT_LEVEL_TEXT (GADGET_ID_COUNTER_FIRST + 25) +#define GADGET_ID_SELECT_LEVEL_UP (GADGET_ID_COUNTER_FIRST + 26) /* drawing area identifiers */ -#define GADGET_ID_DRAWING_LEVEL 49 -#define GADGET_ID_ELEM_CONTENT_0 50 -#define GADGET_ID_ELEM_CONTENT_1 51 -#define GADGET_ID_ELEM_CONTENT_2 52 -#define GADGET_ID_ELEM_CONTENT_3 53 -#define GADGET_ID_ELEM_CONTENT_4 54 -#define GADGET_ID_ELEM_CONTENT_5 55 -#define GADGET_ID_ELEM_CONTENT_6 56 -#define GADGET_ID_ELEM_CONTENT_7 57 -#define GADGET_ID_AMOEBA_CONTENT 58 -#define GADGET_ID_RANDOM_BACKGROUND 59 +#define GADGET_ID_DRAWING_AREA_FIRST (GADGET_ID_COUNTER_FIRST + 27) + +#define GADGET_ID_DRAWING_LEVEL (GADGET_ID_DRAWING_AREA_FIRST + 0) +#define GADGET_ID_ELEM_CONTENT_0 (GADGET_ID_DRAWING_AREA_FIRST + 1) +#define GADGET_ID_ELEM_CONTENT_1 (GADGET_ID_DRAWING_AREA_FIRST + 2) +#define GADGET_ID_ELEM_CONTENT_2 (GADGET_ID_DRAWING_AREA_FIRST + 3) +#define GADGET_ID_ELEM_CONTENT_3 (GADGET_ID_DRAWING_AREA_FIRST + 4) +#define GADGET_ID_ELEM_CONTENT_4 (GADGET_ID_DRAWING_AREA_FIRST + 5) +#define GADGET_ID_ELEM_CONTENT_5 (GADGET_ID_DRAWING_AREA_FIRST + 6) +#define GADGET_ID_ELEM_CONTENT_6 (GADGET_ID_DRAWING_AREA_FIRST + 7) +#define GADGET_ID_ELEM_CONTENT_7 (GADGET_ID_DRAWING_AREA_FIRST + 8) +#define GADGET_ID_AMOEBA_CONTENT (GADGET_ID_DRAWING_AREA_FIRST + 9) +#define GADGET_ID_CUSTOM_CHANGED (GADGET_ID_DRAWING_AREA_FIRST + 10) +#define GADGET_ID_RANDOM_BACKGROUND (GADGET_ID_DRAWING_AREA_FIRST + 11) /* text input identifiers */ -#define GADGET_ID_LEVEL_NAME 60 -#define GADGET_ID_LEVEL_AUTHOR 61 +#define GADGET_ID_TEXT_INPUT_FIRST (GADGET_ID_DRAWING_AREA_FIRST + 12) + +#define GADGET_ID_LEVEL_NAME (GADGET_ID_TEXT_INPUT_FIRST + 0) +#define GADGET_ID_LEVEL_AUTHOR (GADGET_ID_TEXT_INPUT_FIRST + 1) /* selectbox identifiers */ -#define GADGET_ID_SELECTBOX_TEST 62 +#define GADGET_ID_SELECTBOX_FIRST (GADGET_ID_TEXT_INPUT_FIRST + 2) + +#define GADGET_ID_SELECTBOX_TEST (GADGET_ID_SELECTBOX_FIRST + 0) /* gadgets for scrolling of drawing area */ -#define GADGET_ID_SCROLL_UP 63 -#define GADGET_ID_SCROLL_DOWN 64 -#define GADGET_ID_SCROLL_LEFT 65 -#define GADGET_ID_SCROLL_RIGHT 66 -#define GADGET_ID_SCROLL_HORIZONTAL 67 -#define GADGET_ID_SCROLL_VERTICAL 68 +#define GADGET_ID_SCROLLING_FIRST (GADGET_ID_SELECTBOX_FIRST + 1) + +#define GADGET_ID_SCROLL_UP (GADGET_ID_SCROLLING_FIRST + 0) +#define GADGET_ID_SCROLL_DOWN (GADGET_ID_SCROLLING_FIRST + 1) +#define GADGET_ID_SCROLL_LEFT (GADGET_ID_SCROLLING_FIRST + 2) +#define GADGET_ID_SCROLL_RIGHT (GADGET_ID_SCROLLING_FIRST + 3) +#define GADGET_ID_SCROLL_HORIZONTAL (GADGET_ID_SCROLLING_FIRST + 4) +#define GADGET_ID_SCROLL_VERTICAL (GADGET_ID_SCROLLING_FIRST + 5) /* gadgets for scrolling element list */ -#define GADGET_ID_SCROLL_LIST_UP 69 -#define GADGET_ID_SCROLL_LIST_DOWN 70 -#define GADGET_ID_SCROLL_LIST_VERTICAL 71 +#define GADGET_ID_SCROLLING_LIST_FIRST (GADGET_ID_SCROLLING_FIRST + 6) + +#define GADGET_ID_SCROLL_LIST_UP (GADGET_ID_SCROLLING_LIST_FIRST + 0) +#define GADGET_ID_SCROLL_LIST_DOWN (GADGET_ID_SCROLLING_LIST_FIRST + 1) +#define GADGET_ID_SCROLL_LIST_VERTICAL (GADGET_ID_SCROLLING_LIST_FIRST + 2) /* buttons for level/element properties */ -#define GADGET_ID_RANDOM_PERCENTAGE 72 -#define GADGET_ID_RANDOM_QUANTITY 73 -#define GADGET_ID_RANDOM_RESTRICTED 74 -#define GADGET_ID_DOUBLE_SPEED 75 -#define GADGET_ID_GRAVITY 76 -#define GADGET_ID_STICK_ELEMENT 77 -#define GADGET_ID_EM_SLIPPERY_GEMS 78 -#define GADGET_ID_CUSTOM_INDESTRUCTIBLE 79 -#define GADGET_ID_CUSTOM_CAN_FALL 80 -#define GADGET_ID_CUSTOM_CAN_SMASH 81 -#define GADGET_ID_CUSTOM_PUSHABLE 82 -#define GADGET_ID_CUSTOM_SLIPPERY 83 +#define GADGET_ID_CHECKBUTTON_FIRST (GADGET_ID_SCROLLING_LIST_FIRST + 3) + +#define GADGET_ID_RANDOM_PERCENTAGE (GADGET_ID_CHECKBUTTON_FIRST + 0) +#define GADGET_ID_RANDOM_QUANTITY (GADGET_ID_CHECKBUTTON_FIRST + 1) +#define GADGET_ID_RANDOM_RESTRICTED (GADGET_ID_CHECKBUTTON_FIRST + 2) +#define GADGET_ID_DOUBLE_SPEED (GADGET_ID_CHECKBUTTON_FIRST + 3) +#define GADGET_ID_GRAVITY (GADGET_ID_CHECKBUTTON_FIRST + 4) +#define GADGET_ID_STICK_ELEMENT (GADGET_ID_CHECKBUTTON_FIRST + 5) +#define GADGET_ID_EM_SLIPPERY_GEMS (GADGET_ID_CHECKBUTTON_FIRST + 6) +#define GADGET_ID_CUSTOM_INDESTRUCTIBLE (GADGET_ID_CHECKBUTTON_FIRST + 7) +#define GADGET_ID_CUSTOM_CAN_FALL (GADGET_ID_CHECKBUTTON_FIRST + 8) +#define GADGET_ID_CUSTOM_CAN_SMASH (GADGET_ID_CHECKBUTTON_FIRST + 9) +#define GADGET_ID_CUSTOM_PUSHABLE (GADGET_ID_CHECKBUTTON_FIRST + 10) +#define GADGET_ID_CUSTOM_SLIPPERY (GADGET_ID_CHECKBUTTON_FIRST + 11) /* gadgets for buttons in element list */ -#define GADGET_ID_ELEMENTLIST_FIRST 84 +#define GADGET_ID_ELEMENTLIST_FIRST (GADGET_ID_CHECKBUTTON_FIRST + 12) #define GADGET_ID_ELEMENTLIST_LAST (GADGET_ID_ELEMENTLIST_FIRST + \ ED_NUM_ELEMENTLIST_BUTTONS - 1) @@ -573,7 +596,8 @@ static char *test_values[] = "test 1", "test 2", "dieser test-text ist viel zu lang fuer die selectbox", - "letzter text" + "letzter text", + NULL }; static int test_index = 0; @@ -743,31 +767,31 @@ static struct "slip down from certain flat walls","use EM style slipping behaviour" }, { - ED_SETTINGS_XPOS, ED_COUNTER_YPOS(4), + ED_SETTINGS_XPOS, ED_COUNTER_YPOS2(10), GADGET_ID_CUSTOM_INDESTRUCTIBLE, &custom_element_properties[0].indestructible, "indestructible", "element cannot be destroyed" }, { - ED_SETTINGS_XPOS, ED_COUNTER_YPOS(5), + ED_SETTINGS_XPOS, ED_COUNTER_YPOS2(11), GADGET_ID_CUSTOM_CAN_FALL, &custom_element_properties[0].can_fall, "can fall", "element can fall down" }, { - ED_SETTINGS_XPOS, ED_COUNTER_YPOS(6), + ED_SETTINGS_XPOS, ED_COUNTER_YPOS2(12), GADGET_ID_CUSTOM_CAN_SMASH, &custom_element_properties[0].can_smash, "can smash", "element can smash other elements" }, { - ED_SETTINGS_XPOS, ED_COUNTER_YPOS(7), + ED_SETTINGS_XPOS, ED_COUNTER_YPOS2(13), GADGET_ID_CUSTOM_PUSHABLE, &custom_element_properties[0].pushable, "pushable", "element can be pushed" }, { - ED_SETTINGS_XPOS, ED_COUNTER_YPOS(8), + ED_SETTINGS_XPOS, ED_COUNTER_YPOS2(14), GADGET_ID_CUSTOM_SLIPPERY, &custom_element_properties[0].slippery, "slippery", "other elements can fall down from it" @@ -1362,17 +1386,22 @@ static int editor_el_chars[] = EL_CHAR('X'), EL_CHAR('Y'), EL_CHAR('Z'), - EL_CHAR('Ä'), + EL_CHAR('['), - EL_CHAR('Ö'), - EL_CHAR('Ü'), + EL_CHAR('\\'), + EL_CHAR(']'), EL_CHAR('^'), EL_CHAR('_'), - EL_CHAR(' '), + EL_CHAR('©'), + EL_CHAR('Ä'), + EL_CHAR('Ö'), + EL_CHAR('Ü'), + EL_CHAR('°'), - EL_CHAR('´'), - EL_CHAR('|') + EL_CHAR('®'), + EL_CHAR(FONT_ASCII_CURSOR), + EL_CHAR(' ') }; static int num_editor_el_chars = SIZEOF_ARRAY_INT(editor_el_chars); @@ -2115,7 +2144,7 @@ static void CreateDrawingAreas() level_editor_gadget[id] = gi; } - /* ... one for the amoeba content */ + /* ... one for the amoeba content ... */ id = GADGET_ID_AMOEBA_CONTENT; gi = CreateGadget(GDI_CUSTOM_ID, id, GDI_X, SX + ED_AREA_ELEM_CONTENT_XPOS, @@ -2134,6 +2163,25 @@ static void CreateDrawingAreas() level_editor_gadget[id] = gi; + /* ... one for each custom element change target element ... */ + id = GADGET_ID_CUSTOM_CHANGED; + gi = CreateGadget(GDI_CUSTOM_ID, id, + GDI_X, SX + ED_AREA_ELEM_CONTENT2_XPOS, + GDI_Y, SY + ED_AREA_ELEM_CONTENT2_YPOS, + GDI_WIDTH, MINI_TILEX, + GDI_HEIGHT, MINI_TILEY, + GDI_TYPE, GD_TYPE_DRAWING_AREA, + GDI_ITEM_SIZE, MINI_TILEX, MINI_TILEY, + GDI_EVENT_MASK, event_mask, + GDI_CALLBACK_INFO, HandleDrawingAreaInfo, + GDI_CALLBACK_ACTION, HandleDrawingAreas, + GDI_END); + + if (gi == NULL) + Error(ERR_EXIT, "cannot create gadget"); + + level_editor_gadget[id] = gi; + /* ... and one for random placement background restrictions */ id = GADGET_ID_RANDOM_BACKGROUND; @@ -2216,7 +2264,8 @@ static void CreateSelectboxGadgets() char infotext[MAX_OUTPUT_LINESIZE + 1]; int id = selectbox_info[i].gadget_id; - event_mask = GD_EVENT_TEXT_RETURN | GD_EVENT_TEXT_LEAVING; + event_mask = GD_EVENT_RELEASED | + GD_EVENT_TEXT_RETURN | GD_EVENT_TEXT_LEAVING; gd_x = DOOR_GFX_PAGEX4 + ED_SELECTBOX_XPOS; gd_y = DOOR_GFX_PAGEY1 + ED_SELECTBOX_YPOS; @@ -2406,6 +2455,11 @@ static void CreateCheckbuttonGadgets() void CreateLevelEditorGadgets() { + int old_game_status = game_status; + + /* setting 'game_status' is needed to get the right fonts for the editor */ + game_status = LEVELED; + ReinitializeElementList(); CreateControlButtons(); @@ -2415,6 +2469,8 @@ void CreateLevelEditorGadgets() CreateSelectboxGadgets(); CreateScrollbarGadgets(); CreateCheckbuttonGadgets(); + + game_status = old_game_status; } void FreeLevelEditorGadgets() @@ -3033,6 +3089,32 @@ static void DrawAmoebaContentArea() MapDrawingArea(GADGET_ID_AMOEBA_CONTENT); } +static void DrawCustomChangedArea() +{ + int area_x = ED_AREA_ELEM_CONTENT2_XPOS / MINI_TILEX; + int area_y = ED_AREA_ELEM_CONTENT2_YPOS / MINI_TILEY; + int area_sx = SX + ED_AREA_ELEM_CONTENT2_XPOS; + int area_sy = SY + ED_AREA_ELEM_CONTENT2_YPOS; + int i = properties_element - EL_CUSTOM_START; + + if (!IS_CUSTOM_ELEMENT(properties_element)) + { + /* this should never happen */ + Error(ERR_WARN, "element %d is no custom element", properties_element); + + return; + } + + ElementContent[0][0][0] = level.custom_element_successor[i]; + + DrawElementBorder(area_sx, area_sy, MINI_TILEX, MINI_TILEY); + DrawMiniElement(area_x, area_y, ElementContent[0][0][0]); + + DrawText(area_sx + TILEX, area_sy + 1, "Element after change", FONT_TEXT_1); + + MapDrawingArea(GADGET_ID_CUSTOM_CHANGED); +} + static void DrawElementContentAreas() { int counter_id = ED_COUNTER_ID_ELEM_CONTENT; @@ -3213,7 +3295,8 @@ static void DrawPropertiesWindow() } } - if (HAS_CONTENT(properties_element)) + if (HAS_CONTENT(properties_element) || + IS_CUSTOM_ELEMENT(properties_element)) { /* draw stickybutton gadget */ i = ED_CHECKBUTTON_ID_STICK_ELEMENT; @@ -3225,10 +3308,15 @@ static void DrawPropertiesWindow() GDI_CHECKED, *checkbutton_info[i].value, GDI_END); MapCheckbuttonGadget(i); - if (IS_AMOEBOID(properties_element)) - DrawAmoebaContentArea(); - else - DrawElementContentAreas(); + if (HAS_CONTENT(properties_element)) + { + if (IS_AMOEBOID(properties_element)) + DrawAmoebaContentArea(); + else + DrawElementContentAreas(); + } + else if (IS_CUSTOM_ELEMENT(properties_element)) + DrawCustomChangedArea(); } if (IS_GEM(properties_element)) @@ -3395,8 +3483,8 @@ static void DrawLine(int from_x, int from_y, int to_x, int to_y, } } -static void DrawRectangle(int from_x, int from_y, int to_x, int to_y, - int element, boolean change_level) +static void DrawBox(int from_x, int from_y, int to_x, int to_y, + int element, boolean change_level) { DrawLine(from_x, from_y, from_x, to_y, element, change_level); DrawLine(from_x, to_y, to_x, to_y, element, change_level); @@ -3518,7 +3606,7 @@ static void SelectArea(int from_x, int from_y, int to_x, int to_y, int element, boolean change_level) { if (element == -1 || change_level) - DrawRectangle(from_x, from_y, to_x, to_y, -1, FALSE); + DrawBox(from_x, from_y, to_x, to_y, -1, FALSE); else DrawAreaBorder(from_x, from_y, to_x, to_y); } @@ -3706,11 +3794,11 @@ static int DrawLevelText(int sx, int sy, char letter, int mode) if (letter >= 'a' && letter <= 'z') letter_element = EL_CHAR_ASCII0 + letter + (int)('A' - 'a'); else if (letter == 'ä' || letter == 'Ä') - letter_element = EL_CHAR_AE; + letter_element = EL_CHAR_AUMLAUT; else if (letter == 'ö' || letter == 'Ö') - letter_element = EL_CHAR_OE; + letter_element = EL_CHAR_OUMLAUT; else if (letter == 'ü' || letter == 'Ü') - letter_element = EL_CHAR_UE; + letter_element = EL_CHAR_UUMLAUT; else if (letter == '^') letter_element = EL_CHAR_COPYRIGHT; else @@ -4052,6 +4140,13 @@ static void HandleDrawingAreas(struct GadgetInfo *gi) if (id == GADGET_ID_AMOEBA_CONTENT) level.amoeba_content = new_element; + else if (id == GADGET_ID_CUSTOM_CHANGED && + IS_CUSTOM_ELEMENT(properties_element)) + { + int i = properties_element - EL_CUSTOM_START; + + level.custom_element_successor[i] = new_element; + } else if (id == GADGET_ID_RANDOM_BACKGROUND) random_placement_background_element = new_element; else if (id >= GADGET_ID_ELEM_CONTENT_0 && @@ -4098,7 +4193,7 @@ static void HandleDrawingAreas(struct GadgetInfo *gi) else if (drawing_function == GADGET_ID_ARC) draw_func = DrawArc; else if (drawing_function == GADGET_ID_RECTANGLE) - draw_func = DrawRectangle; + draw_func = DrawBox; else if (drawing_function == GADGET_ID_FILLED_BOX) draw_func = DrawFilledBox; else if (drawing_function == GADGET_ID_GRAB_BRUSH) @@ -4541,8 +4636,12 @@ static void HandleControlButtons(struct GadgetInfo *gi) PickDrawingElement(button, new_element); +#if 1 + if (!stick_element_properties_window) +#else if (!HAS_CONTENT(properties_element) || !stick_element_properties_window) +#endif { properties_element = new_element; if (edit_mode == ED_MODE_PROPERTIES) @@ -4834,6 +4933,9 @@ static void HandleDrawingAreaInfo(struct GadgetInfo *gi) else if (id == GADGET_ID_AMOEBA_CONTENT) DrawTextF(INFOTEXT_XPOS - SX, INFOTEXT_YPOS - SY, FONT_TEXT_2, "Amoeba content"); + else if (id == GADGET_ID_CUSTOM_CHANGED) + DrawTextF(INFOTEXT_XPOS - SX, INFOTEXT_YPOS - SY, FONT_TEXT_2, + "Next element after change"); else if (id == GADGET_ID_RANDOM_BACKGROUND) DrawTextF(INFOTEXT_XPOS - SX, INFOTEXT_YPOS - SY, FONT_TEXT_2, "Random placement background");