X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Feditor.c;h=2b9a90889e1ae08cc8125dfc1d8a195a212f8494;hb=6ed4958820f8f97174ca47594dcc6f00ee31b2cb;hp=cf287ec8e82456497d57234c75a3fbee052079f7;hpb=aff866268cfa75327030bedcbf64a507fdc3fac2;p=rocksndiamonds.git diff --git a/src/editor.c b/src/editor.c index cf287ec8..2b9a9088 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,35 @@ static struct } }; +static char *test_values[] = +{ + "test 1", + "test 2", + "dieser test-text ist viel zu lang fuer die selectbox", + "letzter text", + NULL +}; +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 +742,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 +807,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 +828,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,31 +847,35 @@ int editor_element[] = EL_CHAR('S'), EL_CHAR('H'), - EL_PLAYER, + EL_PLAYER_1, EL_EMPTY, EL_SAND, EL_STEELWALL, EL_BD_WALL, - EL_MAGIC_WALL_BD_OFF, + EL_BD_MAGIC_WALL, EL_EXIT_CLOSED, EL_EXIT_OPEN, - EL_EDELSTEIN_BD, - EL_BUTTERFLY_UP, - EL_FIREFLY_UP, + EL_BD_DIAMOND, + EL_BD_BUTTERFLY_UP, + EL_BD_FIREFLY_UP, EL_BD_ROCK, - EL_BUTTERFLY_LEFT, - EL_FIREFLY_LEFT, - EL_BUTTERFLY_RIGHT, - EL_FIREFLY_RIGHT, + EL_BD_BUTTERFLY_LEFT, + EL_BD_FIREFLY_LEFT, + EL_BD_BUTTERFLY_RIGHT, + EL_BD_FIREFLY_RIGHT, EL_BD_AMOEBA, - EL_BUTTERFLY_DOWN, - EL_FIREFLY_DOWN, + 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 +891,12 @@ int editor_element[] = EL_CHAR('N'), EL_CHAR('E'), - EL_SPIELER1, - EL_SPIELER2, - EL_SPIELER3, - EL_SPIELER4, + EL_PLAYER_1, + EL_PLAYER_2, + EL_PLAYER_3, + EL_PLAYER_4, - EL_PLAYER, + EL_PLAYER_1, EL_EMPTY, EL_SAND, EL_ROCK, @@ -839,14 +936,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, @@ -864,47 +961,51 @@ int editor_element[] = 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_PFEIL_LEFT, - EL_PFEIL_RIGHT, - EL_PFEIL_UP, - EL_PFEIL_DOWN, + EL_ARROW_LEFT, + EL_ARROW_RIGHT, + EL_ARROW_UP, + EL_ARROW_DOWN, EL_AMOEBA_FULL, - EL_EDELSTEIN_YELLOW, - EL_EDELSTEIN_RED, - EL_EDELSTEIN_PURPLE, + EL_EMERALD_YELLOW, + EL_EMERALD_RED, + EL_EMERALD_PURPLE, EL_WALL_BD_DIAMOND, EL_WALL_EMERALD_YELLOW, 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,22 +1013,22 @@ int editor_element[] = EL_PACMAN_LEFT, EL_DARK_YAMYAM, EL_PACMAN_RIGHT, - EL_MAUER_LEBT, + EL_EXPANDABLE_WALL, EL_BIOMAZE, EL_PACMAN_DOWN, EL_LAMP, EL_LAMP_ACTIVE, - EL_DYNABOMB_NR, - EL_DYNABOMB_SZ, - EL_DYNABOMB_XL, - EL_BADEWANNE, + EL_DYNABOMB_INCREASE_NUMBER, + EL_DYNABOMB_INCREASE_SIZE, + EL_DYNABOMB_INCREASE_POWER, + EL_STONEBLOCK, EL_MOLE, - EL_PINGUIN, - EL_SCHWEIN, - EL_DRACHE, + EL_PENGUIN, + EL_PIG, + EL_DRAGON, EL_EMPTY, EL_MOLE_UP, @@ -942,24 +1043,24 @@ int editor_element[] = EL_EMPTY, EL_MOLE_DOWN, EL_BALLOON, - EL_BALLOON_SEND_ANY, + 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_SONDE, - EL_MAUER_X, - EL_MAUER_Y, - EL_MAUER_XY, + EL_SATELLITE, + EL_EXPANDABLE_WALL_HORIZONTAL, + EL_EXPANDABLE_WALL_VERTICAL, + EL_EXPANDABLE_WALL_ANY, - EL_INVISIBLE_STEEL, + EL_INVISIBLE_STEELWALL, EL_INVISIBLE_WALL, EL_SPEED_PILL, EL_BLACK_ORB, - EL_EMC_STEEL_WALL_1, + EL_EMC_STEELWALL_1, EL_EMC_WALL_1, EL_EMC_WALL_2, EL_EMC_WALL_3, @@ -968,8 +1069,11 @@ int editor_element[] = 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'), @@ -980,11 +1084,15 @@ int editor_element[] = EL_CHAR('A'), EL_CHAR('N'), - EL_SOKOBAN_OBJEKT, - EL_SOKOBAN_FELD_LEER, - EL_SOKOBAN_FELD_VOLL, + EL_SOKOBAN_OBJECT, + 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 +1110,53 @@ int editor_element[] = EL_SP_INFOTRON, EL_SP_CHIP_SINGLE, - EL_SP_HARD_GRAY, - EL_SP_EXIT, + 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_BUG, + 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,61 +1182,65 @@ int editor_element[] = EL_WALL_PEARL, EL_WALL_CRYSTAL, - EL_BELT1_LEFT, - EL_BELT1_MIDDLE, - EL_BELT1_RIGHT, - EL_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_BELT2_LEFT, - EL_BELT2_MIDDLE, - EL_BELT2_RIGHT, - EL_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_BELT3_LEFT, - EL_BELT3_MIDDLE, - EL_BELT3_RIGHT, - EL_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_BELT4_LEFT, - EL_BELT4_MIDDLE, - EL_BELT4_RIGHT, - EL_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_BELT1_SWITCH_LEFT, - EL_BELT2_SWITCH_LEFT, - EL_BELT3_SWITCH_LEFT, - EL_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_BELT1_SWITCH_RIGHT, - EL_BELT2_SWITCH_RIGHT, - EL_BELT3_SWITCH_RIGHT, - EL_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, - EL_SWITCHGATE_SWITCH_1, + EL_SWITCHGATE_SWITCH_UP, EL_ENVELOPE, EL_TIMEGATE_CLOSED, EL_TIMEGATE_OPEN, - EL_TIMEGATE_SWITCH_OFF, + EL_TIMEGATE_SWITCH, EL_EMPTY, EL_LANDMINE, - EL_SAND_INVISIBLE, - EL_STEEL_SLANTED, + EL_INVISIBLE_SAND, + EL_STEELWALL_SLANTED, EL_EMPTY, EL_SIGN_EXCLAMATION, EL_SIGN_STOP, - EL_LIGHT_SWITCH_OFF, - EL_LIGHT_SWITCH_ON, + EL_LIGHT_SWITCH, + EL_LIGHT_SWITCH_ACTIVE, - EL_SHIELD_PASSIVE, - EL_SHIELD_ACTIVE, + EL_SHIELD_NORMAL, + 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('-'), @@ -1147,45 +1263,32 @@ int editor_element[] = EL_SPRING, EL_TUBE_RIGHT_DOWN, - EL_TUBE_HORIZ_DOWN, + EL_TUBE_HORIZONTAL_DOWN, EL_TUBE_LEFT_DOWN, EL_TUBE_HORIZONTAL, - EL_TUBE_VERT_RIGHT, - EL_TUBE_CROSS, - EL_TUBE_VERT_LEFT, + EL_TUBE_VERTICAL_RIGHT, + EL_TUBE_ANY, + EL_TUBE_VERTICAL_LEFT, EL_TUBE_VERTICAL, EL_TUBE_RIGHT_UP, - EL_TUBE_HORIZ_UP, + EL_TUBE_HORIZONTAL_UP, EL_TUBE_LEFT_UP, - EL_TRAP_INACTIVE, + 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 +1368,320 @@ int editor_element[] = EL_CHAR('Ö'), EL_CHAR('Ü'), EL_CHAR('^'), - EL_CHAR(' ') + EL_CHAR('_'), + + EL_CHAR(' '), + EL_CHAR('°'), + EL_CHAR('´'), + EL_CHAR('|') +}; +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 } }; -int elements_in_list = sizeof(editor_element)/sizeof(int); + +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; } @@ -1313,7 +1718,7 @@ static void ScrollMiniLevel(int from_x, int from_y, int scroll) static void CreateControlButtons() { - Bitmap *gd_bitmap = pix[PIX_DOOR]; + Bitmap *gd_bitmap = graphic_info[IMG_GLOBAL_DOOR].bitmap; struct GadgetInfo *gi; unsigned long event_mask; int i; @@ -1480,6 +1885,7 @@ static void CreateControlButtons() int x = i % ED_ELEMENTLIST_BUTTONS_HORIZ; int y = i / ED_ELEMENTLIST_BUTTONS_HORIZ; int id = GADGET_ID_ELEMENTLIST_FIRST + i; + int element = editor_elements[i]; event_mask = GD_EVENT_RELEASED; @@ -1490,14 +1896,13 @@ static void CreateControlButtons() gd_x2 = DOOR_GFX_PAGEX6 + ED_ELEMENTLIST_XPOS; gd_y = DOOR_GFX_PAGEY1 + ED_ELEMENTLIST_YPOS; - getMiniGraphicSource(el2gfx(editor_element[i]), - &deco_bitmap, &deco_x, &deco_y); + getMiniGraphicSource(el2edimg(element), &deco_bitmap, &deco_x, &deco_y); deco_xpos = (ED_ELEMENTLIST_XSIZE - MINI_TILEX) / 2; deco_ypos = (ED_ELEMENTLIST_YSIZE - MINI_TILEY) / 2; gi = CreateGadget(GDI_CUSTOM_ID, id, GDI_CUSTOM_TYPE_ID, i, - GDI_INFO_TEXT, getElementInfoText(editor_element[i]), + GDI_INFO_TEXT, getElementInfoText(element), GDI_X, DX + gd_xoffset, GDI_Y, DY + gd_yoffset, GDI_WIDTH, ED_ELEMENTLIST_XSIZE, @@ -1524,6 +1929,7 @@ static void CreateControlButtons() static void CreateCounterButtons() { + int max_infotext_len = getMaxInfoTextLength(); int i; for (i=0; i= 0 && x - level_xpos < ed_fieldx && @@ -3475,11 +4046,11 @@ static void HandleDrawingAreas(struct GadgetInfo *gi) DrawMiniGraphicExt(drawto, gi->x + sx * MINI_TILEX, gi->y + sy * MINI_TILEY, - el2gfx(new_element)); + el2edimg(new_element)); DrawMiniGraphicExt(window, gi->x + sx * MINI_TILEX, gi->y + sy * MINI_TILEY, - el2gfx(new_element)); + el2edimg(new_element)); if (id == GADGET_ID_AMOEBA_CONTENT) level.amoeba_content = new_element; @@ -3529,7 +4100,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) @@ -3656,6 +4227,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 = @@ -3664,7 +4245,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) @@ -3785,8 +4372,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, @@ -3798,10 +4385,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); - getMiniGraphicSource(el2gfx(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); } @@ -3908,9 +4495,8 @@ static void HandleControlButtons(struct GadgetInfo *gi) { if (Request("Save this level and kill the old ?", REQ_ASK)) { - 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) { @@ -4107,12 +4710,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) @@ -4206,18 +4809,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); } @@ -4231,13 +4834,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); } @@ -4259,7 +4862,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);