X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Feditor.c;h=00cda340cc0053cedec3e928c13be96f5f673a6e;hb=72657dfeee6b6c184a42e83ed923a63c1768100b;hp=db1a37e8705064866c79be94d87ea00baf298a9b;hpb=88a46f726da49d5ae03e736b1388a4b854221685;p=rocksndiamonds.git diff --git a/src/editor.c b/src/editor.c index db1a37e8..00cda340 100644 --- a/src/editor.c +++ b/src/editor.c @@ -169,32 +169,39 @@ #define ED_STICKYBUTTON_YPOS (ED_BUTTON_MINUS_YPOS + 66) /* some positions in the editor control window */ -#define ED_BUTTON_ELEM_XPOS 6 -#define ED_BUTTON_ELEM_YPOS 30 -#define ED_BUTTON_ELEM_XSIZE 22 -#define ED_BUTTON_ELEM_YSIZE 22 - -/* some values for text input and counter gadgets */ -#define ED_BUTTON_COUNT_YPOS 60 -#define ED_BUTTON_COUNT_XSIZE 20 -#define ED_BUTTON_COUNT_YSIZE 20 -#define ED_WIN_COUNT_XPOS (2 + ED_BUTTON_COUNT_XSIZE + 2) -#define ED_WIN_COUNT_YPOS ED_BUTTON_COUNT_YPOS -#define ED_WIN_COUNT_XSIZE 52 -#define ED_WIN_COUNT_YSIZE ED_BUTTON_COUNT_YSIZE -#define ED_WIN_COUNT2_XPOS 27 -#define ED_WIN_COUNT2_YPOS 3 -#define ED_WIN_COUNT2_XSIZE 46 -#define ED_WIN_COUNT2_YSIZE ED_BUTTON_COUNT_YSIZE - -#define ED_BUTTON_MINUS_XPOS 2 -#define ED_BUTTON_MINUS_YPOS ED_BUTTON_COUNT_YPOS -#define ED_BUTTON_MINUS_XSIZE ED_BUTTON_COUNT_XSIZE -#define ED_BUTTON_MINUS_YSIZE ED_BUTTON_COUNT_YSIZE -#define ED_BUTTON_PLUS_XPOS (ED_WIN_COUNT_XPOS + ED_WIN_COUNT_XSIZE + 2) -#define ED_BUTTON_PLUS_YPOS ED_BUTTON_COUNT_YPOS -#define ED_BUTTON_PLUS_XSIZE ED_BUTTON_COUNT_XSIZE -#define ED_BUTTON_PLUS_YSIZE ED_BUTTON_COUNT_YSIZE +#define ED_BUTTON_ELEM_XPOS 6 +#define ED_BUTTON_ELEM_YPOS 30 +#define ED_BUTTON_ELEM_XSIZE 22 +#define ED_BUTTON_ELEM_YSIZE 22 + +/* some values for text input, selectbox and counter gadgets */ +#define ED_BUTTON_COUNT_YPOS 60 +#define ED_BUTTON_COUNT_XSIZE 20 +#define ED_BUTTON_COUNT_YSIZE 20 +#define ED_WIN_COUNT_XPOS (2 + ED_BUTTON_COUNT_XSIZE + 2) +#define ED_WIN_COUNT_YPOS ED_BUTTON_COUNT_YPOS +#define ED_WIN_COUNT_XSIZE 52 +#define ED_WIN_COUNT_YSIZE ED_BUTTON_COUNT_YSIZE +#define ED_WIN_COUNT2_XPOS 27 +#define ED_WIN_COUNT2_YPOS 3 +#define ED_WIN_COUNT2_XSIZE 46 +#define ED_WIN_COUNT2_YSIZE ED_BUTTON_COUNT_YSIZE + +#define ED_BUTTON_MINUS_XPOS 2 +#define ED_BUTTON_MINUS_YPOS ED_BUTTON_COUNT_YPOS +#define ED_BUTTON_MINUS_XSIZE ED_BUTTON_COUNT_XSIZE +#define ED_BUTTON_MINUS_YSIZE ED_BUTTON_COUNT_YSIZE +#define ED_BUTTON_PLUS_XPOS (ED_WIN_COUNT_XPOS + \ + ED_WIN_COUNT_XSIZE + 2) +#define ED_BUTTON_PLUS_YPOS ED_BUTTON_COUNT_YPOS +#define ED_BUTTON_PLUS_XSIZE ED_BUTTON_COUNT_XSIZE +#define ED_BUTTON_PLUS_YSIZE ED_BUTTON_COUNT_YSIZE + +#define ED_SELECTBOX_XPOS ED_WIN_COUNT_XPOS +#define ED_SELECTBOX_YPOS (ED_WIN_COUNT_YPOS + 2 + \ + ED_WIN_COUNT_YSIZE) +#define ED_SELECTBOX_XSIZE ED_WIN_COUNT_XSIZE +#define ED_SELECTBOX_YSIZE ED_WIN_COUNT_YSIZE /* editor gadget identifiers */ @@ -263,39 +270,46 @@ #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 /* text input identifiers */ -#define GADGET_ID_LEVEL_NAME 59 -#define GADGET_ID_LEVEL_AUTHOR 60 +#define GADGET_ID_LEVEL_NAME 60 +#define GADGET_ID_LEVEL_AUTHOR 61 + +/* selectbox identifiers */ +#define GADGET_ID_SELECTBOX_TEST 62 /* gadgets for scrolling of drawing area */ -#define GADGET_ID_SCROLL_UP 61 -#define GADGET_ID_SCROLL_DOWN 62 -#define GADGET_ID_SCROLL_LEFT 63 -#define GADGET_ID_SCROLL_RIGHT 64 -#define GADGET_ID_SCROLL_HORIZONTAL 65 -#define GADGET_ID_SCROLL_VERTICAL 66 +#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 /* gadgets for scrolling element list */ -#define GADGET_ID_SCROLL_LIST_UP 67 -#define GADGET_ID_SCROLL_LIST_DOWN 68 -#define GADGET_ID_SCROLL_LIST_VERTICAL 69 - -/* buttons for level settings */ -#define GADGET_ID_RANDOM_PERCENTAGE 70 -#define GADGET_ID_RANDOM_QUANTITY 71 -#define GADGET_ID_RANDOM_RESTRICTED 72 -#define GADGET_ID_DOUBLE_SPEED 73 -#define GADGET_ID_GRAVITY 74 -#define GADGET_ID_STICK_ELEMENT 75 -#define GADGET_ID_EM_SLIPPERY_GEMS 76 - -/* another drawing area for random placement */ -#define GADGET_ID_RANDOM_BACKGROUND 77 +#define GADGET_ID_SCROLL_LIST_UP 69 +#define GADGET_ID_SCROLL_LIST_DOWN 70 +#define GADGET_ID_SCROLL_LIST_VERTICAL 71 + +/* 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 /* gadgets for buttons in element list */ -#define GADGET_ID_ELEMENTLIST_FIRST 78 -#define GADGET_ID_ELEMENTLIST_LAST (78 + ED_NUM_ELEMENTLIST_BUTTONS - 1) +#define GADGET_ID_ELEMENTLIST_FIRST 84 +#define GADGET_ID_ELEMENTLIST_LAST (GADGET_ID_ELEMENTLIST_FIRST + \ + ED_NUM_ELEMENTLIST_BUTTONS - 1) #define NUM_EDITOR_GADGETS (GADGET_ID_ELEMENTLIST_LAST + 1) @@ -352,18 +366,31 @@ #define ED_TEXTINPUT_ID_LEVEL_FIRST ED_TEXTINPUT_ID_LEVEL_NAME #define ED_TEXTINPUT_ID_LEVEL_LAST ED_TEXTINPUT_ID_LEVEL_AUTHOR +/* values for selectbox gadgets */ +#define ED_SELECTBOX_ID_TEST 0 + +#define ED_NUM_SELECTBOX 1 + /* values for checkbutton gadgets */ #define ED_CHECKBUTTON_ID_DOUBLE_SPEED 0 #define ED_CHECKBUTTON_ID_GRAVITY 1 #define ED_CHECKBUTTON_ID_RANDOM_RESTRICTED 2 #define ED_CHECKBUTTON_ID_STICK_ELEMENT 3 #define ED_CHECKBUTTON_ID_EM_SLIPPERY_GEMS 4 +#define ED_CHECKBUTTON_ID_CUSTOM_INDESTRUCTIBLE 5 +#define ED_CHECKBUTTON_ID_CUSTOM_CAN_FALL 6 +#define ED_CHECKBUTTON_ID_CUSTOM_CAN_SMASH 7 +#define ED_CHECKBUTTON_ID_CUSTOM_PUSHABLE 8 +#define ED_CHECKBUTTON_ID_CUSTOM_SLIPPERY 9 -#define ED_NUM_CHECKBUTTONS 5 +#define ED_NUM_CHECKBUTTONS 10 #define ED_CHECKBUTTON_ID_LEVEL_FIRST ED_CHECKBUTTON_ID_DOUBLE_SPEED #define ED_CHECKBUTTON_ID_LEVEL_LAST ED_CHECKBUTTON_ID_RANDOM_RESTRICTED +#define ED_CHECKBUTTON_ID_CUSTOM_FIRST ED_CHECKBUTTON_ID_CUSTOM_INDESTRUCTIBLE +#define ED_CHECKBUTTON_ID_CUSTOM_LAST ED_CHECKBUTTON_ID_CUSTOM_SLIPPERY + /* values for radiobutton gadgets */ #define ED_RADIOBUTTON_ID_PERCENTAGE 0 #define ED_RADIOBUTTON_ID_QUANTITY 1 @@ -382,7 +409,6 @@ #define INFOTEXT_YPOS (SY + SYSIZE - MINI_TILEX + 2) #define INFOTEXT_XSIZE SXSIZE #define INFOTEXT_YSIZE MINI_TILEX -#define MAX_INFOTEXT_LEN (SXSIZE / FONT2_XSIZE) static struct { @@ -390,28 +416,28 @@ static struct char *text; } control_info[ED_NUM_CTRL_BUTTONS] = { - { 's', "draw single items" }, - { 'd', "draw connected items" }, - { 'l', "draw lines" }, - { 'a', "draw arcs" }, - { 'r', "draw outline rectangles" }, - { 'R', "draw filled rectangles" }, - { '\0', "wrap (rotate) level up" }, - { 't', "enter text elements" }, - { 'f', "flood fill" }, - { '\0', "wrap (rotate) level left" }, - { '?', "properties of drawing element" }, - { '\0', "wrap (rotate) level right" }, - { '\0', "random element placement" }, - { 'b', "grab brush" }, - { '\0', "wrap (rotate) level down" }, - { ',', "pick drawing element" }, - { 'U', "undo last operation" }, - { 'I', "level properties" }, - { 'S', "save level" }, - { 'C', "clear level" }, - { 'T', "test level" }, - { 'E', "exit level editor" } + { 's', "draw single items" }, + { 'd', "draw connected items" }, + { 'l', "draw lines" }, + { 'a', "draw arcs" }, + { 'r', "draw outline rectangles" }, + { 'R', "draw filled rectangles" }, + { '\0', "wrap (rotate) level up" }, + { 't', "enter text elements" }, + { 'f', "flood fill" }, + { '\0', "wrap (rotate) level left" }, + { '?', "properties of drawing element" }, + { '\0', "wrap (rotate) level right" }, + { '\0', "random element placement" }, + { 'b', "grab brush" }, + { '\0', "wrap (rotate) level down" }, + { ',', "pick drawing element" }, + { 'U', "undo last operation" }, + { 'I', "level properties" }, + { 'S', "save level" }, + { 'C', "clear level" }, + { 'T', "test level" }, + { 'E', "exit level editor" } }; /* values for random placement */ @@ -424,6 +450,15 @@ static int random_placement_background_element = EL_SAND; static boolean random_placement_background_restricted = FALSE; static boolean stick_element_properties_window = FALSE; +static struct +{ + boolean indestructible; + boolean can_fall; + boolean can_smash; + boolean pushable; + boolean slippery; +} custom_element_properties[NUM_CUSTOM_ELEMENTS]; + static struct { int x, y; @@ -533,6 +568,34 @@ static struct } }; +static char *test_values[] = +{ + "test 1", + "test 2", + "dieser test-text ist viel zu lang fuer die selectbox", + "letzter text" +}; +static int test_index = 0; + +static struct +{ + int x, y; + int gadget_id; + int size; + char **values; + int *index; + char *text, *infotext; +} selectbox_info[ED_NUM_SELECTBOX] = +{ + { + ED_SETTINGS_XPOS, ED_COUNTER_YPOS(3), + GADGET_ID_SELECTBOX_TEST, + MAX_PLAYER_NAME_LEN, + test_values, &test_index, + "test:", "test-selectbox entry" + }, +}; + static struct { int xpos, ypos; @@ -678,6 +741,36 @@ static struct GADGET_ID_EM_SLIPPERY_GEMS, &level.em_slippery_gems, "slip down from certain flat walls","use EM style slipping behaviour" + }, + { + ED_SETTINGS_XPOS, ED_COUNTER_YPOS(4), + GADGET_ID_CUSTOM_INDESTRUCTIBLE, + &custom_element_properties[0].indestructible, + "indestructible", "element cannot be destroyed" + }, + { + ED_SETTINGS_XPOS, ED_COUNTER_YPOS(5), + GADGET_ID_CUSTOM_CAN_FALL, + &custom_element_properties[0].can_fall, + "can fall", "element can fall down" + }, + { + ED_SETTINGS_XPOS, ED_COUNTER_YPOS(6), + 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), + GADGET_ID_CUSTOM_PUSHABLE, + &custom_element_properties[0].pushable, + "pushable", "element can be pushed" + }, + { + ED_SETTINGS_XPOS, ED_COUNTER_YPOS(8), + GADGET_ID_CUSTOM_SLIPPERY, + &custom_element_properties[0].slippery, + "slippery", "other elements can fall down from it" } }; @@ -713,6 +806,7 @@ static void CopyLevelToUndoBuffer(int); static void HandleDrawingAreas(struct GadgetInfo *); static void HandleCounterButtons(struct GadgetInfo *); static void HandleTextInputGadgets(struct GadgetInfo *); +static void HandleSelectboxGadgets(struct GadgetInfo *); static void HandleRadiobuttons(struct GadgetInfo *); static void HandleCheckbuttons(struct GadgetInfo *); static void HandleControlButtons(struct GadgetInfo *); @@ -733,11 +827,9 @@ static int undo_buffer_steps = 0; static int edit_mode; -static int counter_xsize = DXSIZE + FONT2_XSIZE - 2 * ED_GADGET_DISTANCE; +static int element_shift = 0; -int element_shift = 0; - -int editor_element[] = +static int editor_el_boulderdash[] = { EL_CHAR('B'), EL_CHAR('O'), @@ -754,7 +846,7 @@ int editor_element[] = EL_CHAR('S'), EL_CHAR('H'), - EL_PLAYER1, + EL_PLAYER_1, EL_EMPTY, EL_SAND, EL_STEELWALL, @@ -778,7 +870,11 @@ int editor_element[] = EL_BD_BUTTERFLY_DOWN, EL_BD_FIREFLY_DOWN, EL_EMPTY, +}; +static int num_editor_el_boulderdash = SIZEOF_ARRAY_INT(editor_el_boulderdash); +static int editor_el_emerald_mine[] = +{ EL_CHAR('E'), EL_CHAR('M'), EL_CHAR('E'), @@ -794,12 +890,12 @@ int editor_element[] = EL_CHAR('N'), EL_CHAR('E'), - EL_PLAYER1, - EL_PLAYER2, - EL_PLAYER3, - EL_PLAYER4, + EL_PLAYER_1, + EL_PLAYER_2, + EL_PLAYER_3, + EL_PLAYER_4, - EL_PLAYER1, + EL_PLAYER_1, EL_EMPTY, EL_SAND, EL_ROCK, @@ -839,14 +935,14 @@ int editor_element[] = EL_SPACESHIP_DOWN, EL_INVISIBLE_WALL, - EL_ACIDPOOL_TOPLEFT, + EL_ACID_POOL_TOPLEFT, EL_ACID, - EL_ACIDPOOL_TOPRIGHT, + EL_ACID_POOL_TOPRIGHT, EL_EMPTY, - EL_ACIDPOOL_BOTTOMLEFT, - EL_ACIDPOOL_BOTTOM, - EL_ACIDPOOL_BOTTOMRIGHT, + EL_ACID_POOL_BOTTOMLEFT, + EL_ACID_POOL_BOTTOM, + EL_ACID_POOL_BOTTOMRIGHT, EL_EMPTY, EL_AMOEBA_DROP, @@ -854,45 +950,49 @@ int editor_element[] = EL_AMOEBA_WET, EL_AMOEBA_DRY, - EL_EM_KEY1_FILE, - EL_EM_KEY2_FILE, - EL_EM_KEY3_FILE, - EL_EM_KEY4_FILE, + EL_EM_KEY_1_FILE, + EL_EM_KEY_2_FILE, + EL_EM_KEY_3_FILE, + EL_EM_KEY_4_FILE, - EL_EM_GATE1, - EL_EM_GATE2, - EL_EM_GATE3, - EL_EM_GATE4, + EL_EM_GATE_1, + EL_EM_GATE_2, + EL_EM_GATE_3, + EL_EM_GATE_4, - EL_EM_GATE1_GRAY, - EL_EM_GATE2_GRAY, - EL_EM_GATE3_GRAY, - EL_EM_GATE4_GRAY, + EL_EM_GATE_1_GRAY, + EL_EM_GATE_2_GRAY, + EL_EM_GATE_3_GRAY, + EL_EM_GATE_4_GRAY, +}; +static int num_editor_el_emerald_mine = SIZEOF_ARRAY_INT(editor_el_emerald_mine); +static int editor_el_more[] = +{ EL_CHAR('M'), EL_CHAR('O'), EL_CHAR('R'), EL_CHAR('E'), - EL_KEY1, - EL_KEY2, - EL_KEY3, - EL_KEY4, + EL_KEY_1, + EL_KEY_2, + EL_KEY_3, + EL_KEY_4, - EL_GATE1, - EL_GATE2, - EL_GATE3, - EL_GATE4, + EL_GATE_1, + EL_GATE_2, + EL_GATE_3, + EL_GATE_4, - EL_GATE1_GRAY, - EL_GATE2_GRAY, - EL_GATE3_GRAY, - EL_GATE4_GRAY, + EL_GATE_1_GRAY, + EL_GATE_2_GRAY, + EL_GATE_3_GRAY, + EL_GATE_4_GRAY, - EL_ARROW_BLUE_LEFT, - EL_ARROW_BLUE_RIGHT, - EL_ARROW_BLUE_UP, - EL_ARROW_BLUE_DOWN, + EL_ARROW_LEFT, + EL_ARROW_RIGHT, + EL_ARROW_UP, + EL_ARROW_DOWN, EL_AMOEBA_FULL, EL_EMERALD_YELLOW, @@ -904,7 +1004,7 @@ int editor_element[] = EL_WALL_EMERALD_RED, EL_WALL_EMERALD_PURPLE, - EL_GAMEOFLIFE, + EL_GAME_OF_LIFE, EL_PACMAN_UP, EL_TIME_ORB_FULL, EL_TIME_ORB_EMPTY, @@ -912,16 +1012,16 @@ int editor_element[] = EL_PACMAN_LEFT, EL_DARK_YAMYAM, EL_PACMAN_RIGHT, - EL_WALL_GROWING, + EL_EXPANDABLE_WALL, EL_BIOMAZE, EL_PACMAN_DOWN, EL_LAMP, EL_LAMP_ACTIVE, - EL_DYNABOMB_NR, - EL_DYNABOMB_SZ, - EL_DYNABOMB_XL, + EL_DYNABOMB_INCREASE_NUMBER, + EL_DYNABOMB_INCREASE_SIZE, + EL_DYNABOMB_INCREASE_POWER, EL_STONEBLOCK, EL_MOLE, @@ -942,34 +1042,37 @@ int editor_element[] = EL_EMPTY, EL_MOLE_DOWN, EL_BALLOON, - EL_BALLOON_SEND_ANY_DIRECTION, + EL_BALLOON_SWITCH_ANY, - EL_BALLOON_SEND_LEFT, - EL_BALLOON_SEND_RIGHT, - EL_BALLOON_SEND_UP, - EL_BALLOON_SEND_DOWN, + EL_BALLOON_SWITCH_LEFT, + EL_BALLOON_SWITCH_RIGHT, + EL_BALLOON_SWITCH_UP, + EL_BALLOON_SWITCH_DOWN, EL_SATELLITE, - EL_WALL_GROWING_X, - EL_WALL_GROWING_Y, - EL_WALL_GROWING_XY, + EL_EXPANDABLE_WALL_HORIZONTAL, + EL_EXPANDABLE_WALL_VERTICAL, + EL_EXPANDABLE_WALL_ANY, EL_INVISIBLE_STEELWALL, EL_INVISIBLE_WALL, EL_SPEED_PILL, EL_BLACK_ORB, - EL_EMC_STEELWALL1, - EL_EMC_WALL_PILLAR_UPPER, - EL_EMC_WALL_PILLAR_MIDDLE, - EL_EMC_WALL_PILLAR_LOWER, - - EL_EMC_WALL4, - EL_EMC_WALL5, - EL_EMC_WALL6, - EL_EMC_WALL7, + EL_EMC_STEELWALL_1, + EL_EMC_WALL_1, + EL_EMC_WALL_2, + EL_EMC_WALL_3, + EL_EMC_WALL_4, + EL_EMC_WALL_5, + EL_EMC_WALL_6, + EL_EMC_WALL_7, +}; +static int num_editor_el_more = SIZEOF_ARRAY_INT(editor_el_more); +static int editor_el_sokoban[] = +{ EL_CHAR('S'), EL_CHAR('O'), EL_CHAR('K'), @@ -984,7 +1087,11 @@ int editor_element[] = EL_SOKOBAN_FIELD_EMPTY, EL_SOKOBAN_FIELD_FULL, EL_STEELWALL, +}; +static int num_editor_el_sokoban = SIZEOF_ARRAY_INT(editor_el_sokoban); +static int editor_el_supaplex[] = +{ EL_CHAR('S'), EL_CHAR('U'), EL_CHAR('P'), @@ -1002,49 +1109,53 @@ int editor_element[] = EL_SP_INFOTRON, EL_SP_CHIP_SINGLE, - EL_SP_HARD_GRAY, + EL_SP_HARDWARE_GRAY, EL_SP_EXIT_CLOSED, EL_SP_DISK_ORANGE, - EL_SP_PORT1_RIGHT, - EL_SP_PORT1_DOWN, - EL_SP_PORT1_LEFT, + EL_SP_PORT_RIGHT, + EL_SP_PORT_DOWN, + EL_SP_PORT_LEFT, - EL_SP_PORT1_UP, - EL_SP_PORT2_RIGHT, - EL_SP_PORT2_DOWN, - EL_SP_PORT2_LEFT, + EL_SP_PORT_UP, + EL_SP_GRAVITY_PORT_RIGHT, + EL_SP_GRAVITY_PORT_DOWN, + EL_SP_GRAVITY_PORT_LEFT, - EL_SP_PORT2_UP, + EL_SP_GRAVITY_PORT_UP, EL_SP_SNIKSNAK, EL_SP_DISK_YELLOW, EL_SP_TERMINAL, EL_SP_DISK_RED, - EL_SP_PORT_Y, - EL_SP_PORT_X, - EL_SP_PORT_XY, + EL_SP_PORT_VERTICAL, + EL_SP_PORT_HORIZONTAL, + EL_SP_PORT_ANY, EL_SP_ELECTRON, EL_SP_BUGGY_BASE, EL_SP_CHIP_LEFT, EL_SP_CHIP_RIGHT, - EL_SP_HARD_BASE1, - EL_SP_HARD_GREEN, - EL_SP_HARD_BLUE, - EL_SP_HARD_RED, + EL_SP_HARDWARE_BASE_1, + EL_SP_HARDWARE_GREEN, + EL_SP_HARDWARE_BLUE, + EL_SP_HARDWARE_RED, - EL_SP_HARD_YELLOW, - EL_SP_HARD_BASE2, - EL_SP_HARD_BASE3, - EL_SP_HARD_BASE4, + EL_SP_HARDWARE_YELLOW, + EL_SP_HARDWARE_BASE_2, + EL_SP_HARDWARE_BASE_3, + EL_SP_HARDWARE_BASE_4, - EL_SP_HARD_BASE5, - EL_SP_HARD_BASE6, - EL_SP_CHIP_UPPER, - EL_SP_CHIP_LOWER, + EL_SP_HARDWARE_BASE_5, + EL_SP_HARDWARE_BASE_6, + EL_SP_CHIP_TOP, + EL_SP_CHIP_BOTTOM, +}; +static int num_editor_el_supaplex = SIZEOF_ARRAY_INT(editor_el_supaplex); +static int editor_el_diamond_caves[] = +{ EL_CHAR('D'), EL_CHAR('I'), EL_CHAR('A'), @@ -1070,35 +1181,35 @@ int editor_element[] = EL_WALL_PEARL, EL_WALL_CRYSTAL, - EL_CONVEYOR_BELT1_LEFT, - EL_CONVEYOR_BELT1_MIDDLE, - EL_CONVEYOR_BELT1_RIGHT, - EL_CONVEYOR_BELT1_SWITCH_MIDDLE, + EL_CONVEYOR_BELT_1_LEFT, + EL_CONVEYOR_BELT_1_MIDDLE, + EL_CONVEYOR_BELT_1_RIGHT, + EL_CONVEYOR_BELT_1_SWITCH_MIDDLE, - EL_CONVEYOR_BELT2_LEFT, - EL_CONVEYOR_BELT2_MIDDLE, - EL_CONVEYOR_BELT2_RIGHT, - EL_CONVEYOR_BELT2_SWITCH_MIDDLE, + EL_CONVEYOR_BELT_2_LEFT, + EL_CONVEYOR_BELT_2_MIDDLE, + EL_CONVEYOR_BELT_2_RIGHT, + EL_CONVEYOR_BELT_2_SWITCH_MIDDLE, - EL_CONVEYOR_BELT3_LEFT, - EL_CONVEYOR_BELT3_MIDDLE, - EL_CONVEYOR_BELT3_RIGHT, - EL_CONVEYOR_BELT3_SWITCH_MIDDLE, + EL_CONVEYOR_BELT_3_LEFT, + EL_CONVEYOR_BELT_3_MIDDLE, + EL_CONVEYOR_BELT_3_RIGHT, + EL_CONVEYOR_BELT_3_SWITCH_MIDDLE, - EL_CONVEYOR_BELT4_LEFT, - EL_CONVEYOR_BELT4_MIDDLE, - EL_CONVEYOR_BELT4_RIGHT, - EL_CONVEYOR_BELT4_SWITCH_MIDDLE, + EL_CONVEYOR_BELT_4_LEFT, + EL_CONVEYOR_BELT_4_MIDDLE, + EL_CONVEYOR_BELT_4_RIGHT, + EL_CONVEYOR_BELT_4_SWITCH_MIDDLE, - EL_CONVEYOR_BELT1_SWITCH_LEFT, - EL_CONVEYOR_BELT2_SWITCH_LEFT, - EL_CONVEYOR_BELT3_SWITCH_LEFT, - EL_CONVEYOR_BELT4_SWITCH_LEFT, + EL_CONVEYOR_BELT_1_SWITCH_LEFT, + EL_CONVEYOR_BELT_2_SWITCH_LEFT, + EL_CONVEYOR_BELT_3_SWITCH_LEFT, + EL_CONVEYOR_BELT_4_SWITCH_LEFT, - EL_CONVEYOR_BELT1_SWITCH_RIGHT, - EL_CONVEYOR_BELT2_SWITCH_RIGHT, - EL_CONVEYOR_BELT3_SWITCH_RIGHT, - EL_CONVEYOR_BELT4_SWITCH_RIGHT, + EL_CONVEYOR_BELT_1_SWITCH_RIGHT, + EL_CONVEYOR_BELT_2_SWITCH_RIGHT, + EL_CONVEYOR_BELT_3_SWITCH_RIGHT, + EL_CONVEYOR_BELT_4_SWITCH_RIGHT, EL_SWITCHGATE_OPEN, EL_SWITCHGATE_CLOSED, @@ -1124,7 +1235,11 @@ int editor_element[] = EL_SHIELD_DEADLY, EL_EXTRA_TIME, EL_EMPTY, +}; +static int num_editor_el_diamond_caves = SIZEOF_ARRAY_INT(editor_el_diamond_caves); +static int editor_el_dx_boulderdash[] = +{ EL_CHAR('D'), EL_CHAR('X'), EL_CHAR('-'), @@ -1152,7 +1267,7 @@ int editor_element[] = EL_TUBE_HORIZONTAL, EL_TUBE_VERTICAL_RIGHT, - EL_TUBE_ALL, + EL_TUBE_ANY, EL_TUBE_VERTICAL_LEFT, EL_TUBE_VERTICAL, @@ -1163,29 +1278,16 @@ int editor_element[] = EL_TRAP, EL_DX_SUPABOMB, EL_EMPTY, - EL_EMPTY, - - /* - EL_CHAR('D'), - EL_CHAR('Y'), - EL_CHAR('N'), - EL_CHAR('A'), - - EL_CHAR('B'), - EL_CHAR('L'), - EL_CHAR('A'), - EL_CHAR('S'), + EL_EMPTY +}; +static int num_editor_el_dx_boulderdash = SIZEOF_ARRAY_INT(editor_el_dx_boulderdash); - EL_CHAR_MINUS, +static int editor_el_chars[] = +{ EL_CHAR('T'), EL_CHAR('E'), - EL_CHAR('R'), - */ - - EL_EMPTY, - EL_EMPTY, - EL_EMPTY, - EL_EMPTY, + EL_CHAR('X'), + EL_CHAR('T'), EL_CHAR(' '), EL_CHAR('!'), @@ -1265,18 +1367,320 @@ int editor_element[] = EL_CHAR('Ö'), EL_CHAR('Ü'), EL_CHAR('^'), - EL_CHAR(' ') + EL_CHAR('_'), + + EL_CHAR(' '), + EL_CHAR('°'), + EL_CHAR('´'), + EL_CHAR('|') }; -int elements_in_list = sizeof(editor_element)/sizeof(int); +static int num_editor_el_chars = SIZEOF_ARRAY_INT(editor_el_chars); + +static int editor_el_custom[] = +{ + EL_CHAR('C'), + EL_CHAR('U'), + EL_CHAR('S'), + EL_CHAR('-'), + + EL_CHAR('T'), + EL_CHAR('O'), + EL_CHAR('M'), + EL_CHAR(' '), + + EL_CHAR('E'), + EL_CHAR('L'), + EL_CHAR('E'), + EL_CHAR('M'), + + EL_CHAR('E'), + EL_CHAR('N'), + EL_CHAR('T'), + EL_CHAR('S'), + + EL_CUSTOM_START + 0, + EL_CUSTOM_START + 1, + EL_CUSTOM_START + 2, + EL_CUSTOM_START + 3, + + EL_CUSTOM_START + 4, + EL_CUSTOM_START + 5, + EL_CUSTOM_START + 6, + EL_CUSTOM_START + 7, + + EL_CUSTOM_START + 8, + EL_CUSTOM_START + 9, + EL_CUSTOM_START + 10, + EL_CUSTOM_START + 11, + + EL_CUSTOM_START + 12, + EL_CUSTOM_START + 13, + EL_CUSTOM_START + 14, + EL_CUSTOM_START + 15, + + EL_CUSTOM_START + 16, + EL_CUSTOM_START + 17, + EL_CUSTOM_START + 18, + EL_CUSTOM_START + 19, + + EL_CUSTOM_START + 20, + EL_CUSTOM_START + 21, + EL_CUSTOM_START + 22, + EL_CUSTOM_START + 23, + + EL_CUSTOM_START + 24, + EL_CUSTOM_START + 25, + EL_CUSTOM_START + 26, + EL_CUSTOM_START + 27, + + EL_CUSTOM_START + 28, + EL_CUSTOM_START + 29, + EL_CUSTOM_START + 30, + EL_CUSTOM_START + 31, + + EL_CUSTOM_START + 32, + EL_CUSTOM_START + 33, + EL_CUSTOM_START + 34, + EL_CUSTOM_START + 35, + + EL_CUSTOM_START + 36, + EL_CUSTOM_START + 37, + EL_CUSTOM_START + 38, + EL_CUSTOM_START + 39, + + EL_CUSTOM_START + 40, + EL_CUSTOM_START + 41, + EL_CUSTOM_START + 42, + EL_CUSTOM_START + 43, + + EL_CUSTOM_START + 44, + EL_CUSTOM_START + 45, + EL_CUSTOM_START + 46, + EL_CUSTOM_START + 47, + + EL_CUSTOM_START + 48, + EL_CUSTOM_START + 49, + EL_CUSTOM_START + 50, + EL_CUSTOM_START + 51, + + EL_CUSTOM_START + 52, + EL_CUSTOM_START + 53, + EL_CUSTOM_START + 54, + EL_CUSTOM_START + 55, + + EL_CUSTOM_START + 56, + EL_CUSTOM_START + 57, + EL_CUSTOM_START + 58, + EL_CUSTOM_START + 59, + + EL_CUSTOM_START + 60, + EL_CUSTOM_START + 61, + EL_CUSTOM_START + 62, + EL_CUSTOM_START + 63, + + EL_CUSTOM_START + 64, + EL_CUSTOM_START + 65, + EL_CUSTOM_START + 66, + EL_CUSTOM_START + 67, + + EL_CUSTOM_START + 68, + EL_CUSTOM_START + 69, + EL_CUSTOM_START + 70, + EL_CUSTOM_START + 71, + + EL_CUSTOM_START + 72, + EL_CUSTOM_START + 73, + EL_CUSTOM_START + 74, + EL_CUSTOM_START + 75, + + EL_CUSTOM_START + 76, + EL_CUSTOM_START + 77, + EL_CUSTOM_START + 78, + EL_CUSTOM_START + 79, + + EL_CUSTOM_START + 80, + EL_CUSTOM_START + 81, + EL_CUSTOM_START + 82, + EL_CUSTOM_START + 83, + + EL_CUSTOM_START + 84, + EL_CUSTOM_START + 85, + EL_CUSTOM_START + 86, + EL_CUSTOM_START + 87, + + EL_CUSTOM_START + 88, + EL_CUSTOM_START + 89, + EL_CUSTOM_START + 90, + EL_CUSTOM_START + 91, + + EL_CUSTOM_START + 92, + EL_CUSTOM_START + 93, + EL_CUSTOM_START + 94, + EL_CUSTOM_START + 95, + + EL_CUSTOM_START + 96, + EL_CUSTOM_START + 97, + EL_CUSTOM_START + 98, + EL_CUSTOM_START + 99, + + EL_CUSTOM_START + 100, + EL_CUSTOM_START + 101, + EL_CUSTOM_START + 102, + EL_CUSTOM_START + 103, + + EL_CUSTOM_START + 104, + EL_CUSTOM_START + 105, + EL_CUSTOM_START + 106, + EL_CUSTOM_START + 107, + + EL_CUSTOM_START + 108, + EL_CUSTOM_START + 109, + EL_CUSTOM_START + 110, + EL_CUSTOM_START + 111, + + EL_CUSTOM_START + 112, + EL_CUSTOM_START + 113, + EL_CUSTOM_START + 114, + EL_CUSTOM_START + 115, + + EL_CUSTOM_START + 116, + EL_CUSTOM_START + 117, + EL_CUSTOM_START + 118, + EL_CUSTOM_START + 119, + + EL_CUSTOM_START + 120, + EL_CUSTOM_START + 121, + EL_CUSTOM_START + 122, + EL_CUSTOM_START + 123, + + EL_CUSTOM_START + 124, + EL_CUSTOM_START + 125, + EL_CUSTOM_START + 126, + EL_CUSTOM_START + 127 +}; +static int num_editor_el_custom = SIZEOF_ARRAY_INT(editor_el_custom); + +static int *editor_elements = NULL; /* dynamically allocated */ +static int num_editor_elements = 0; /* dynamically determined */ + +static struct +{ + boolean *setup_value; + int *element_list; + int *element_list_size; + + boolean last_setup_value; +} +editor_elements_info[] = +{ + { &setup.editor.el_boulderdash, editor_el_boulderdash, + &num_editor_el_boulderdash }, + { &setup.editor.el_emerald_mine, editor_el_emerald_mine, + &num_editor_el_emerald_mine }, + { &setup.editor.el_more, editor_el_more, + &num_editor_el_more }, + { &setup.editor.el_sokoban, editor_el_sokoban, + &num_editor_el_sokoban }, + { &setup.editor.el_supaplex, editor_el_supaplex, + &num_editor_el_supaplex }, + { &setup.editor.el_diamond_caves, editor_el_diamond_caves, + &num_editor_el_diamond_caves }, + { &setup.editor.el_dx_boulderdash, editor_el_dx_boulderdash, + &num_editor_el_dx_boulderdash }, + { &setup.editor.el_chars, editor_el_chars, + &num_editor_el_chars }, + { &setup.editor.el_custom, editor_el_custom, + &num_editor_el_custom }, + { NULL, NULL, + NULL } +}; + +static void ReinitializeElementList() +{ + int pos = 0; + int i, j; + + if (editor_elements != NULL) + free(editor_elements); + + num_editor_elements = 0; + + /* determine size of element list */ + for (i=0; editor_elements_info[i].setup_value != NULL; i++) + if (*editor_elements_info[i].setup_value) + num_editor_elements += *editor_elements_info[i].element_list_size; + + if (num_editor_elements < ED_NUM_ELEMENTLIST_BUTTONS) + { + /* workaround: offer at least as many elements as element buttons exist */ + int list_nr = 1; /* see above: editor_elements_info for Emerald Mine */ + + *editor_elements_info[list_nr].setup_value = TRUE; + num_editor_elements += *editor_elements_info[list_nr].element_list_size; + } + + editor_elements = checked_malloc(num_editor_elements * sizeof(int)); + + /* fill element list */ + for (i=0; editor_elements_info[i].setup_value != NULL; i++) + if (*editor_elements_info[i].setup_value) + for (j=0; j<*editor_elements_info[i].element_list_size; j++) + editor_elements[pos++] = editor_elements_info[i].element_list[j]; +} + +static void ReinitializeElementListButtons() +{ + static boolean initialization_needed = TRUE; + int i; + + if (!initialization_needed) /* check if editor element setup has changed */ + for (i=0; editor_elements_info[i].setup_value != NULL; i++) + if (editor_elements_info[i].last_setup_value != + *editor_elements_info[i].setup_value) + initialization_needed = TRUE; + + if (!initialization_needed) + return; + + FreeLevelEditorGadgets(); + CreateLevelEditorGadgets(); + + /* store current setup values for next invocation of this function */ + for (i=0; editor_elements_info[i].setup_value != NULL; i++) + editor_elements_info[i].last_setup_value = + *editor_elements_info[i].setup_value; + + initialization_needed = FALSE; +} + +static int getCounterGadgetWidth() +{ + return (DXSIZE + getFontWidth(FONT_INPUT) - 2 * ED_GADGET_DISTANCE); +} + +static int getMaxInfoTextLength() +{ + return (SXSIZE / getFontWidth(FONT_TEXT_2)); +} static char *getElementInfoText(int element) { - char *info_text = "unknown"; + char *info_text = NULL; if (element < NUM_FILE_ELEMENTS) - info_text = element_info[element].editor_description; - else + { + if (element_info[element].custom_description != NULL) + info_text = element_info[element].custom_description; + else if (element_info[element].editor_description != NULL) + info_text = element_info[element].editor_description; + } + + if (info_text == NULL) + { + info_text = "unknown"; + Error(ERR_WARN, "no element description for element %d", element); + } return info_text; } @@ -1298,13 +1702,13 @@ static void ScrollMiniLevel(int from_x, int from_y, int scroll) { x = (dx == 1 ? 0 : ed_fieldx - 1); for(y=0; y start_sx) { Feld[lx - 1][ly] = delete_buffer[sx - start_sx - 1]; - DrawNewMiniElement(sx - 1, sy, Feld[lx - 1][ly]); + DrawMiniElement(sx - 1, sy, Feld[lx - 1][ly]); DrawLevelText(sx - 1, sy, 0, TEXT_SETCURSOR); } break; @@ -3213,7 +3783,7 @@ static int DrawLevelText(int sx, int sy, char letter, int mode) case TEXT_END: CopyLevelToUndoBuffer(UNDO_IMMEDIATE); - DrawNewMiniElement(sx, sy, Feld[lx][ly]); + DrawMiniElement(sx, sy, Feld[lx][ly]); typing = FALSE; break; @@ -3234,7 +3804,7 @@ static void SetTextCursor(int unused_sx, int unused_sy, int sx, int sy, int ly = sy + level_ypos; if (element == -1) - DrawNewMiniElement(sx, sy, Feld[lx][ly]); + DrawMiniElement(sx, sy, Feld[lx][ly]); else DrawAreaBorder(sx, sy, sx, sy); } @@ -3279,7 +3849,7 @@ static void CopyLevelToUndoBuffer(int mode) last_border_element = BorderElement; SetBorderElement(); if (BorderElement != last_border_element) - DrawNewMiniLevel(ed_fieldx, ed_fieldy, level_xpos, level_ypos); + DrawMiniLevel(ed_fieldx, ed_fieldy, level_xpos, level_ypos); #if 0 #ifdef DEBUG @@ -3320,7 +3890,7 @@ static void RandomPlacement(int new_element) for (y=0; y= 0 && x - level_xpos < ed_fieldx && y - level_ypos >= 0 && y - level_ypos < ed_fieldy) - DrawNewMiniElement(x - level_xpos, y - level_ypos, + DrawMiniElement(x - level_xpos, y - level_ypos, EL_EMPTY); } } @@ -3466,19 +4036,19 @@ static void HandleDrawingAreas(struct GadgetInfo *gi) } Feld[lx][ly] = new_element; - DrawNewMiniElement(sx, sy, new_element); + DrawMiniElement(sx, sy, new_element); } } else { - DrawNewMiniGraphicExt(drawto, + DrawMiniGraphicExt(drawto, gi->x + sx * MINI_TILEX, gi->y + sy * MINI_TILEY, - el2img(new_element)); - DrawNewMiniGraphicExt(window, + el2edimg(new_element)); + DrawMiniGraphicExt(window, gi->x + sx * MINI_TILEX, gi->y + sy * MINI_TILEY, - el2img(new_element)); + el2edimg(new_element)); if (id == GADGET_ID_AMOEBA_CONTENT) level.amoeba_content = new_element; @@ -3575,7 +4145,7 @@ static void HandleDrawingAreas(struct GadgetInfo *gi) if (button_press_event && Feld[lx][ly] != new_element) { FloodFill(lx, ly, new_element); - DrawNewMiniLevel(ed_fieldx, ed_fieldy, level_xpos, level_ypos); + DrawMiniLevel(ed_fieldx, ed_fieldy, level_xpos, level_ypos); CopyLevelToUndoBuffer(UNDO_IMMEDIATE); } break; @@ -3655,6 +4225,16 @@ static void HandleTextInputGadgets(struct GadgetInfo *gi) strcpy(textinput_info[gi->custom_type_id].value, gi->text.value); } +static void HandleSelectboxGadgets(struct GadgetInfo *gi) +{ + *selectbox_info[gi->custom_type_id].index = gi->selectbox.index; + +#if 1 + printf("Selected text value: '%s'\n", + selectbox_info[gi->custom_type_id].values[gi->selectbox.index]); +#endif +} + static void HandleRadiobuttons(struct GadgetInfo *gi) { *radiobutton_info[gi->custom_type_id].value = @@ -3663,7 +4243,13 @@ static void HandleRadiobuttons(struct GadgetInfo *gi) static void HandleCheckbuttons(struct GadgetInfo *gi) { - *checkbutton_info[gi->custom_type_id].value ^= TRUE; + int type_id = gi->custom_type_id; + + *checkbutton_info[type_id].value ^= TRUE; + + if (type_id >= ED_CHECKBUTTON_ID_CUSTOM_FIRST && + type_id <= ED_CHECKBUTTON_ID_CUSTOM_LAST) + CopyCustomElementPropertiesToGame(); } static void HandleControlButtons(struct GadgetInfo *gi) @@ -3698,7 +4284,7 @@ static void HandleControlButtons(struct GadgetInfo *gi) if (button == 1) ScrollMiniLevel(level_xpos, level_ypos, ED_SCROLL_RIGHT); else - DrawNewMiniLevel(ed_fieldx, ed_fieldy, level_xpos, level_ypos); + DrawMiniLevel(ed_fieldx, ed_fieldy, level_xpos, level_ypos); ModifyGadget(level_editor_gadget[GADGET_ID_SCROLL_HORIZONTAL], GDI_SCROLLBAR_ITEM_POSITION, level_xpos + 1, GDI_END); @@ -3717,7 +4303,7 @@ static void HandleControlButtons(struct GadgetInfo *gi) if (button == 1) ScrollMiniLevel(level_xpos, level_ypos, ED_SCROLL_LEFT); else - DrawNewMiniLevel(ed_fieldx, ed_fieldy, level_xpos, level_ypos); + DrawMiniLevel(ed_fieldx, ed_fieldy, level_xpos, level_ypos); ModifyGadget(level_editor_gadget[GADGET_ID_SCROLL_HORIZONTAL], GDI_SCROLLBAR_ITEM_POSITION, level_xpos + 1, GDI_END); @@ -3736,7 +4322,7 @@ static void HandleControlButtons(struct GadgetInfo *gi) if (button == 1) ScrollMiniLevel(level_xpos, level_ypos, ED_SCROLL_DOWN); else - DrawNewMiniLevel(ed_fieldx, ed_fieldy, level_xpos, level_ypos); + DrawMiniLevel(ed_fieldx, ed_fieldy, level_xpos, level_ypos); ModifyGadget(level_editor_gadget[GADGET_ID_SCROLL_VERTICAL], GDI_SCROLLBAR_ITEM_POSITION, level_ypos + 1, GDI_END); @@ -3755,7 +4341,7 @@ static void HandleControlButtons(struct GadgetInfo *gi) if (button == 1) ScrollMiniLevel(level_xpos, level_ypos, ED_SCROLL_UP); else - DrawNewMiniLevel(ed_fieldx, ed_fieldy, level_xpos, level_ypos); + DrawMiniLevel(ed_fieldx, ed_fieldy, level_xpos, level_ypos); ModifyGadget(level_editor_gadget[GADGET_ID_SCROLL_VERTICAL], GDI_SCROLLBAR_ITEM_POSITION, level_ypos + 1, GDI_END); @@ -3764,12 +4350,12 @@ static void HandleControlButtons(struct GadgetInfo *gi) case GADGET_ID_SCROLL_HORIZONTAL: level_xpos = gi->event.item_position - 1; - DrawNewMiniLevel(ed_fieldx, ed_fieldy, level_xpos, level_ypos); + DrawMiniLevel(ed_fieldx, ed_fieldy, level_xpos, level_ypos); break; case GADGET_ID_SCROLL_VERTICAL: level_ypos = gi->event.item_position - 1; - DrawNewMiniLevel(ed_fieldx, ed_fieldy, level_xpos, level_ypos); + DrawMiniLevel(ed_fieldx, ed_fieldy, level_xpos, level_ypos); break; case GADGET_ID_SCROLL_LIST_UP: @@ -3784,8 +4370,8 @@ static void HandleControlButtons(struct GadgetInfo *gi) if (element_shift < 0) element_shift = 0; - if (element_shift > elements_in_list - ED_NUM_ELEMENTLIST_BUTTONS) - element_shift = elements_in_list - ED_NUM_ELEMENTLIST_BUTTONS; + if (element_shift > num_editor_elements - ED_NUM_ELEMENTLIST_BUTTONS) + element_shift = num_editor_elements - ED_NUM_ELEMENTLIST_BUTTONS; ModifyGadget(level_editor_gadget[GADGET_ID_SCROLL_LIST_VERTICAL], GDI_SCROLLBAR_ITEM_POSITION, @@ -3797,10 +4383,10 @@ static void HandleControlButtons(struct GadgetInfo *gi) int gadget_id = GADGET_ID_ELEMENTLIST_FIRST + i; struct GadgetInfo *gi = level_editor_gadget[gadget_id]; struct GadgetDesign *gd = &gi->deco.design; - int element = editor_element[element_shift + i]; + int element = editor_elements[element_shift + i]; UnmapGadget(gi); - getNewMiniGraphicSource(el2img(element), &gd->bitmap, &gd->x, &gd->y); + getMiniGraphicSource(el2edimg(element), &gd->bitmap, &gd->x, &gd->y); ModifyGadget(gi, GDI_INFO_TEXT, getElementInfoText(element), GDI_END); MapGadget(gi); } @@ -3869,7 +4455,7 @@ static void HandleControlButtons(struct GadgetInfo *gi) for(x=0; xinfo_text == NULL) return; - strncpy(infotext, gi->info_text, MAX_INFOTEXT_LEN); - infotext[MAX_INFOTEXT_LEN] = '\0'; + strncpy(infotext, gi->info_text, max_infotext_len); + infotext[max_infotext_len] = '\0'; if (gi->custom_id < ED_NUM_CTRL_BUTTONS) { @@ -4106,12 +4708,12 @@ void HandleEditorGadgetInfoText(void *ptr) sprintf(shortcut, " ('%s%c')", (key >= 'A' && key <= 'Z' ? "Shift-" : ""), key); - if (strlen(infotext) + strlen(shortcut) <= MAX_INFOTEXT_LEN) + if (strlen(infotext) + strlen(shortcut) <= max_infotext_len) strcat(infotext, shortcut); } } - DrawText(INFOTEXT_XPOS, INFOTEXT_YPOS, infotext, FS_SMALL, FC_YELLOW); + DrawText(INFOTEXT_XPOS, INFOTEXT_YPOS, infotext, FONT_TEXT_2); } static void HandleDrawingAreaInfo(struct GadgetInfo *gi) @@ -4205,18 +4807,18 @@ static void HandleDrawingAreaInfo(struct GadgetInfo *gi) } if (drawing_function == GADGET_ID_PICK_ELEMENT) - DrawTextF(INFOTEXT_XPOS - SX, INFOTEXT_YPOS - SY, FC_YELLOW, + DrawTextF(INFOTEXT_XPOS - SX, INFOTEXT_YPOS - SY, FONT_TEXT_2, "%s: %d, %d", infotext, lx, ly); else - DrawTextF(INFOTEXT_XPOS - SX, INFOTEXT_YPOS - SY, FC_YELLOW, + DrawTextF(INFOTEXT_XPOS - SX, INFOTEXT_YPOS - SY, FONT_TEXT_2, "%s: %d, %d", infotext, ABS(lx - start_lx) + 1, ABS(ly - start_ly) + 1); } else if (drawing_function == GADGET_ID_PICK_ELEMENT) - DrawTextF(INFOTEXT_XPOS - SX, INFOTEXT_YPOS - SY, FC_YELLOW, + DrawTextF(INFOTEXT_XPOS - SX, INFOTEXT_YPOS - SY, FONT_TEXT_2, "%s", getElementInfoText(Feld[lx][ly])); else - DrawTextF(INFOTEXT_XPOS - SX, INFOTEXT_YPOS - SY, FC_YELLOW, + DrawTextF(INFOTEXT_XPOS - SX, INFOTEXT_YPOS - SY, FONT_TEXT_2, "Level position: %d, %d", lx, ly); } @@ -4230,13 +4832,13 @@ static void HandleDrawingAreaInfo(struct GadgetInfo *gi) } } else if (id == GADGET_ID_AMOEBA_CONTENT) - DrawTextF(INFOTEXT_XPOS - SX, INFOTEXT_YPOS - SY, FC_YELLOW, + DrawTextF(INFOTEXT_XPOS - SX, INFOTEXT_YPOS - SY, FONT_TEXT_2, "Amoeba content"); else if (id == GADGET_ID_RANDOM_BACKGROUND) - DrawTextF(INFOTEXT_XPOS - SX, INFOTEXT_YPOS - SY, FC_YELLOW, + DrawTextF(INFOTEXT_XPOS - SX, INFOTEXT_YPOS - SY, FONT_TEXT_2, "Random placement background"); else - DrawTextF(INFOTEXT_XPOS - SX, INFOTEXT_YPOS - SY, FC_YELLOW, + DrawTextF(INFOTEXT_XPOS - SX, INFOTEXT_YPOS - SY, FONT_TEXT_2, "Content area %d position: %d, %d", id - GADGET_ID_ELEM_CONTENT_0 + 1, sx, sy); } @@ -4258,7 +4860,7 @@ void RequestExitLevelEditor(boolean ask_if_level_has_changed) else { CloseDoor(DOOR_CLOSE_1); - BlitBitmap(pix[PIX_DB_DOOR], pix[PIX_DB_DOOR], + BlitBitmap(bitmap_db_door, bitmap_db_door, DOOR_GFX_PAGEX2, DOOR_GFX_PAGEY1, DXSIZE,DYSIZE, DOOR_GFX_PAGEX1, DOOR_GFX_PAGEY1); OpenDoor(DOOR_OPEN_1);