X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Feditor.c;h=60be1aaba58d9c370f8951f270ba5055b4f480b0;hb=14089dac2cbe56e563863e1e5adb8847944fd262;hp=cf287ec8e82456497d57234c75a3fbee052079f7;hpb=aff866268cfa75327030bedcbf64a507fdc3fac2;p=rocksndiamonds.git diff --git a/src/editor.c b/src/editor.c index cf287ec8..60be1aab 100644 --- a/src/editor.c +++ b/src/editor.c @@ -737,7 +737,7 @@ static int counter_xsize = DXSIZE + FONT2_XSIZE - 2 * ED_GADGET_DISTANCE; int element_shift = 0; -int editor_element[] = +int editor_el_boulderdash[] = { EL_CHAR('B'), EL_CHAR('O'), @@ -754,31 +754,35 @@ int editor_element[] = EL_CHAR('S'), EL_CHAR('H'), - EL_PLAYER, + EL_PLAYER1, 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, +}; +int num_editor_el_boulderdash = SIZEOF_ARRAY_INT(editor_el_boulderdash); +int editor_el_emerald_mine[] = +{ EL_CHAR('E'), EL_CHAR('M'), EL_CHAR('E'), @@ -794,12 +798,12 @@ int editor_element[] = EL_CHAR('N'), EL_CHAR('E'), - EL_SPIELER1, - EL_SPIELER2, - EL_SPIELER3, - EL_SPIELER4, + EL_PLAYER1, + EL_PLAYER2, + EL_PLAYER3, + EL_PLAYER4, - EL_PLAYER, + EL_PLAYER1, EL_EMPTY, EL_SAND, EL_ROCK, @@ -854,21 +858,25 @@ int editor_element[] = EL_AMOEBA_WET, EL_AMOEBA_DRY, - EL_EM_KEY_1_FILE, - EL_EM_KEY_2_FILE, - EL_EM_KEY_3_FILE, - EL_EM_KEY_4_FILE, + EL_EM_KEY1_FILE, + EL_EM_KEY2_FILE, + EL_EM_KEY3_FILE, + EL_EM_KEY4_FILE, - EL_EM_GATE_1, - EL_EM_GATE_2, - EL_EM_GATE_3, - EL_EM_GATE_4, + EL_EM_GATE1, + EL_EM_GATE2, + EL_EM_GATE3, + EL_EM_GATE4, EL_EM_GATE1_GRAY, EL_EM_GATE2_GRAY, EL_EM_GATE3_GRAY, EL_EM_GATE4_GRAY, +}; +int num_editor_el_emerald_mine = SIZEOF_ARRAY_INT(editor_el_emerald_mine); +int editor_el_more[] = +{ EL_CHAR('M'), EL_CHAR('O'), EL_CHAR('R'), @@ -889,15 +897,15 @@ int editor_element[] = EL_GATE3_GRAY, EL_GATE4_GRAY, - EL_PFEIL_LEFT, - EL_PFEIL_RIGHT, - EL_PFEIL_UP, - EL_PFEIL_DOWN, + EL_ARROW_BLUE_LEFT, + EL_ARROW_BLUE_RIGHT, + EL_ARROW_BLUE_UP, + EL_ARROW_BLUE_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, @@ -912,7 +920,7 @@ int editor_element[] = EL_PACMAN_LEFT, EL_DARK_YAMYAM, EL_PACMAN_RIGHT, - EL_MAUER_LEBT, + EL_WALL_GROWING, EL_BIOMAZE, EL_PACMAN_DOWN, @@ -922,12 +930,12 @@ int editor_element[] = EL_DYNABOMB_NR, EL_DYNABOMB_SZ, EL_DYNABOMB_XL, - EL_BADEWANNE, + EL_STONEBLOCK, EL_MOLE, - EL_PINGUIN, - EL_SCHWEIN, - EL_DRACHE, + EL_PENGUIN, + EL_PIG, + EL_DRAGON, EL_EMPTY, EL_MOLE_UP, @@ -942,34 +950,37 @@ int editor_element[] = EL_EMPTY, EL_MOLE_DOWN, EL_BALLOON, - EL_BALLOON_SEND_ANY, + EL_BALLOON_SEND_ANY_DIRECTION, EL_BALLOON_SEND_LEFT, EL_BALLOON_SEND_RIGHT, EL_BALLOON_SEND_UP, EL_BALLOON_SEND_DOWN, - EL_SONDE, - EL_MAUER_X, - EL_MAUER_Y, - EL_MAUER_XY, + EL_SATELLITE, + EL_WALL_GROWING_X, + EL_WALL_GROWING_Y, + EL_WALL_GROWING_XY, - EL_INVISIBLE_STEEL, + EL_INVISIBLE_STEELWALL, EL_INVISIBLE_WALL, EL_SPEED_PILL, EL_BLACK_ORB, - EL_EMC_STEEL_WALL_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, + 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, +}; +int num_editor_el_more = SIZEOF_ARRAY_INT(editor_el_more); +int editor_el_sokoban[] = +{ EL_CHAR('S'), EL_CHAR('O'), EL_CHAR('K'), @@ -980,11 +991,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, +}; +int num_editor_el_sokoban = SIZEOF_ARRAY_INT(editor_el_sokoban); +int editor_el_supaplex[] = +{ EL_CHAR('S'), EL_CHAR('U'), EL_CHAR('P'), @@ -1003,7 +1018,7 @@ int editor_element[] = EL_SP_INFOTRON, EL_SP_CHIP_SINGLE, EL_SP_HARD_GRAY, - EL_SP_EXIT, + EL_SP_EXIT_CLOSED, EL_SP_DISK_ORANGE, EL_SP_PORT1_RIGHT, @@ -1026,7 +1041,7 @@ int editor_element[] = EL_SP_PORT_XY, EL_SP_ELECTRON, - EL_SP_BUG, + EL_SP_BUGGY_BASE, EL_SP_CHIP_LEFT, EL_SP_CHIP_RIGHT, @@ -1044,7 +1059,11 @@ int editor_element[] = EL_SP_HARD_BASE6, EL_SP_CHIP_UPPER, EL_SP_CHIP_LOWER, +}; +int num_editor_el_supaplex = SIZEOF_ARRAY_INT(editor_el_supaplex); +int editor_el_diamond_caves[] = +{ EL_CHAR('D'), EL_CHAR('I'), EL_CHAR('A'), @@ -1070,61 +1089,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_BELT1_LEFT, + EL_CONVEYOR_BELT1_MIDDLE, + EL_CONVEYOR_BELT1_RIGHT, + EL_CONVEYOR_BELT1_SWITCH_MIDDLE, - EL_BELT2_LEFT, - EL_BELT2_MIDDLE, - EL_BELT2_RIGHT, - EL_BELT2_SWITCH_MIDDLE, + EL_CONVEYOR_BELT2_LEFT, + EL_CONVEYOR_BELT2_MIDDLE, + EL_CONVEYOR_BELT2_RIGHT, + EL_CONVEYOR_BELT2_SWITCH_MIDDLE, - EL_BELT3_LEFT, - EL_BELT3_MIDDLE, - EL_BELT3_RIGHT, - EL_BELT3_SWITCH_MIDDLE, + EL_CONVEYOR_BELT3_LEFT, + EL_CONVEYOR_BELT3_MIDDLE, + EL_CONVEYOR_BELT3_RIGHT, + EL_CONVEYOR_BELT3_SWITCH_MIDDLE, - EL_BELT4_LEFT, - EL_BELT4_MIDDLE, - EL_BELT4_RIGHT, - EL_BELT4_SWITCH_MIDDLE, + EL_CONVEYOR_BELT4_LEFT, + EL_CONVEYOR_BELT4_MIDDLE, + EL_CONVEYOR_BELT4_RIGHT, + EL_CONVEYOR_BELT4_SWITCH_MIDDLE, - EL_BELT1_SWITCH_LEFT, - EL_BELT2_SWITCH_LEFT, - EL_BELT3_SWITCH_LEFT, - EL_BELT4_SWITCH_LEFT, + EL_CONVEYOR_BELT1_SWITCH_LEFT, + EL_CONVEYOR_BELT2_SWITCH_LEFT, + EL_CONVEYOR_BELT3_SWITCH_LEFT, + EL_CONVEYOR_BELT4_SWITCH_LEFT, - EL_BELT1_SWITCH_RIGHT, - EL_BELT2_SWITCH_RIGHT, - EL_BELT3_SWITCH_RIGHT, - EL_BELT4_SWITCH_RIGHT, + EL_CONVEYOR_BELT1_SWITCH_RIGHT, + EL_CONVEYOR_BELT2_SWITCH_RIGHT, + EL_CONVEYOR_BELT3_SWITCH_RIGHT, + EL_CONVEYOR_BELT4_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, +}; +int num_editor_el_diamond_caves = SIZEOF_ARRAY_INT(editor_el_diamond_caves); +int editor_el_dx_boulderdash[] = +{ EL_CHAR('D'), EL_CHAR('X'), EL_CHAR('-'), @@ -1147,45 +1170,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_ALL, + 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 +}; +int num_editor_el_dx_boulderdash = SIZEOF_ARRAY_INT(editor_el_dx_boulderdash); - EL_CHAR_MINUS, +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,15 +1275,298 @@ int editor_element[] = EL_CHAR('Ö'), EL_CHAR('Ü'), EL_CHAR('^'), - EL_CHAR(' ') + EL_CHAR('_'), + + EL_CHAR(' '), + EL_CHAR('°'), + EL_CHAR('´'), + EL_CHAR('|') +}; +int num_editor_el_chars = SIZEOF_ARRAY_INT(editor_el_chars); + +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 +}; +int num_editor_el_custom = SIZEOF_ARRAY_INT(editor_el_custom); + +int *editor_elements = NULL; /* dynamically allocated */ +int num_editor_elements = 0; /* dynamically determined */ + +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 char *getElementInfoText(int element) { char *info_text = "unknown"; - if (element < NUM_FILE_ELEMENTS) + if (element < NUM_FILE_ELEMENTS && + element_info[element].editor_description != NULL) info_text = element_info[element].editor_description; else Error(ERR_WARN, "no element description for element %d", element); @@ -1313,7 +1606,7 @@ static void ScrollMiniLevel(int from_x, int from_y, int scroll) static void CreateControlButtons() { - Bitmap *gd_bitmap = pix[PIX_DOOR]; + Bitmap *gd_bitmap = new_graphic_info[IMG_MENU_DOOR].bitmap; struct GadgetInfo *gi; unsigned long event_mask; int i; @@ -1480,6 +1773,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 +1784,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(el2img(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, @@ -1534,7 +1827,7 @@ static void CreateCounterButtons() for (j=0; j<2; j++) { - Bitmap *gd_bitmap = pix[PIX_DOOR]; + Bitmap *gd_bitmap = new_graphic_info[IMG_MENU_DOOR].bitmap; struct GadgetInfo *gi; int id = (j == 0 ? counterbutton_info[i].gadget_id_down : @@ -1756,7 +2049,7 @@ static void CreateTextInputGadgets() for (i=0; i= 0 && x - level_xpos < ed_fieldx && @@ -3475,11 +3743,11 @@ static void HandleDrawingAreas(struct GadgetInfo *gi) DrawMiniGraphicExt(drawto, gi->x + sx * MINI_TILEX, gi->y + sy * MINI_TILEY, - el2gfx(new_element)); + el2img(new_element)); DrawMiniGraphicExt(window, gi->x + sx * MINI_TILEX, gi->y + sy * MINI_TILEY, - el2gfx(new_element)); + el2img(new_element)); if (id == GADGET_ID_AMOEBA_CONTENT) level.amoeba_content = new_element; @@ -3785,8 +4053,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 +4066,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(el2img(element), &gd->bitmap, &gd->x, &gd->y); ModifyGadget(gi, GDI_INFO_TEXT, getElementInfoText(element), GDI_END); MapGadget(gi); } @@ -3958,7 +4226,7 @@ static void HandleControlButtons(struct GadgetInfo *gi) id <= GADGET_ID_ELEMENTLIST_LAST) { int element_position = id - GADGET_ID_ELEMENTLIST_FIRST; - int new_element = editor_element[element_position + element_shift]; + int new_element = editor_elements[element_position + element_shift]; PickDrawingElement(button, new_element); @@ -4062,11 +4330,43 @@ void HandleLevelEditorKeyInput(Key key) } } +void HandleLevelEditorIdle() +{ + static unsigned long action_delay = 0; + unsigned long action_delay_value = GameFrameDelay; + int xpos = 1, ypos = 2; + + if (edit_mode != ED_MODE_PROPERTIES) + return; + + if (!DelayReached(&action_delay, action_delay_value)) + return; + +#if 1 + + DrawGraphicAnimationExt(drawto, + SX + xpos * TILEX, + SY + ypos * TILEY + MINI_TILEY / 2, + el2img(properties_element), NO_MASKING); + +#else + DrawGraphicAnimationExt(drawto, + SX + xpos * TILEX, + SY + ypos * TILEY + MINI_TILEY / 2, + el_dir_act2img(properties_element, + MV_NO_MOVING, + ...)); +#endif + + MarkTileDirty(xpos, ypos); + MarkTileDirty(xpos, ypos + 1); + + FrameCounter++; /* increase animation frame counter */ +} + void ClearEditorGadgetInfoText() { - ClearRectangle(drawto, - INFOTEXT_XPOS, INFOTEXT_YPOS, INFOTEXT_XSIZE, INFOTEXT_YSIZE); - redraw_mask |= REDRAW_FIELD; + DrawBackground(INFOTEXT_XPOS, INFOTEXT_YPOS, INFOTEXT_XSIZE, INFOTEXT_YSIZE); } void HandleEditorGadgetInfoText(void *ptr) @@ -4259,7 +4559,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);