X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Feditor.c;h=89e8d438d85b3e7947b1eb3930b46f7fc9865f50;hb=2ae6ae8ed951e87fcba7c363705cd6ddea8de91c;hp=fd269219d59235b586518822b4a5cc2218f3eb19;hpb=4c8c9d74169f09d9b21e3ea0d826b60cda37caaa;p=rocksndiamonds.git diff --git a/src/editor.c b/src/editor.c index fd269219..89e8d438 100644 --- a/src/editor.c +++ b/src/editor.c @@ -1,23 +1,23 @@ /*********************************************************** -* Rocks'n'Diamonds -- McDuffin Strikes Back! * +* Rocks'n'Diamonds -- McDuffin Strikes Back! * *----------------------------------------------------------* -* (c) 1995-98 Artsoft Entertainment * -* Holger Schemel * -* Oststrasse 11a * -* 33604 Bielefeld * -* phone: ++49 +521 290471 * -* email: aeglos@valinor.owl.de * +* (c) 1995-2000 Artsoft Entertainment * +* Holger Schemel * +* Detmolder Strasse 189 * +* 33604 Bielefeld * +* Germany * +* e-mail: info@artsoft.org * *----------------------------------------------------------* -* editor.c * +* editor.c * ***********************************************************/ #include +#include "libgame/libgame.h" + #include "editor.h" #include "screens.h" #include "tools.h" -#include "misc.h" -#include "buttons.h" #include "files.h" #include "game.h" #include "tape.h" @@ -683,17 +683,17 @@ static int ed_fieldx = MAX_ED_FIELDX - 1, ed_fieldy = MAX_ED_FIELDY - 1; /* actual position of level editor drawing area in level playfield */ static int level_xpos = -1, level_ypos = -1; -#define IN_ED_FIELD(x,y) ((x)>=0 && (x)=0 &&(y)=0 && (x)=0 &&(y)first_level, + leveldir_current->last_level); ModifyEditorCounter(counter_id, *counterbutton_info[counter_id].value); MapCounterButtons(counter_id); } @@ -1963,17 +2130,17 @@ void DrawLevelEd() } /* copy default editor door content to main double buffer */ - XCopyArea(display, pix[PIX_DOOR], drawto, gc, - DOOR_GFX_PAGEX6, DOOR_GFX_PAGEY1, DXSIZE, DYSIZE, DX, DY); + BlitBitmap(pix[PIX_DOOR], drawto, + DOOR_GFX_PAGEX6, DOOR_GFX_PAGEY1, DXSIZE, DYSIZE, DX, DY); /* draw mouse button brush elements */ - DrawMiniGraphicExt(drawto, gc, + DrawMiniGraphicExt(drawto, DX + ED_WIN_MB_LEFT_XPOS, DY + ED_WIN_MB_LEFT_YPOS, el2gfx(new_element1)); - DrawMiniGraphicExt(drawto, gc, + DrawMiniGraphicExt(drawto, DX + ED_WIN_MB_MIDDLE_XPOS, DY + ED_WIN_MB_MIDDLE_YPOS, el2gfx(new_element2)); - DrawMiniGraphicExt(drawto, gc, + DrawMiniGraphicExt(drawto, DX + ED_WIN_MB_RIGHT_XPOS, DY + ED_WIN_MB_RIGHT_YPOS, el2gfx(new_element3)); @@ -1981,18 +2148,16 @@ void DrawLevelEd() DrawSpecialEditorDoor(); /* draw new control window */ - XCopyArea(display, pix[PIX_DOOR], drawto, gc, - DOOR_GFX_PAGEX8, 236, - EXSIZE, EYSIZE, - EX, EY); + BlitBitmap(pix[PIX_DOOR], drawto, + DOOR_GFX_PAGEX8, 236, EXSIZE, EYSIZE, EX, EY); redraw_mask |= REDRAW_ALL; MapControlButtons(); /* copy actual editor door content to door double buffer for OpenDoor() */ - XCopyArea(display, drawto, pix[PIX_DB_DOOR], gc, - DX, DY, DXSIZE, DYSIZE, DOOR_GFX_PAGEX1, DOOR_GFX_PAGEY1); + BlitBitmap(drawto, pix[PIX_DB_DOOR], + DX, DY, DXSIZE, DYSIZE, DOOR_GFX_PAGEX1, DOOR_GFX_PAGEY1); DrawEditModeWindow(); @@ -2148,21 +2313,21 @@ static void PickDrawingElement(int button, int element) if (button == 1) { new_element1 = element; - DrawMiniGraphicExt(drawto, gc, + DrawMiniGraphicExt(drawto, DX + ED_WIN_MB_LEFT_XPOS, DY + ED_WIN_MB_LEFT_YPOS, el2gfx(new_element1)); } else if (button == 2) { new_element2 = element; - DrawMiniGraphicExt(drawto, gc, + DrawMiniGraphicExt(drawto, DX + ED_WIN_MB_MIDDLE_XPOS, DY + ED_WIN_MB_MIDDLE_YPOS, el2gfx(new_element2)); } else { new_element3 = element; - DrawMiniGraphicExt(drawto, gc, + DrawMiniGraphicExt(drawto, DX + ED_WIN_MB_RIGHT_XPOS, DY + ED_WIN_MB_RIGHT_YPOS, el2gfx(new_element3)); } @@ -2197,14 +2362,14 @@ static void DrawRandomPlacementBackgroundArea() for (x=0; x<2; x++) DrawMiniElement(area_x + x, area_y + y, EL_ERDREICH); - XFillRectangle(display, drawto, gc, + ClearRectangle(drawto, area_sx + MINI_TILEX/2 - 1, area_sy + MINI_TILEY/2 - 1, MINI_TILEX + 2, MINI_TILEY + 2); /* copy border to the right location */ - XCopyArea(display, drawto, drawto, gc, - area_sx, area_sy, 3 * MINI_TILEX, 3 * MINI_TILEY, - area_sx - MINI_TILEX/2, area_sy - MINI_TILEY/2); + BlitBitmap(drawto, drawto, + area_sx, area_sy, 3 * MINI_TILEX, 3 * MINI_TILEY, + area_sx - MINI_TILEX/2, area_sy - MINI_TILEY/2); DrawMiniElement(area_x, area_y, ElementContent[0][0][0]); @@ -2319,14 +2484,14 @@ static void DrawAmoebaContentArea() for (x=0; x<2; x++) DrawMiniElement(area_x + x, area_y + y, EL_ERDREICH); - XFillRectangle(display, drawto, gc, + ClearRectangle(drawto, area_sx + MINI_TILEX/2 - 1, area_sy + MINI_TILEY/2 - 1, MINI_TILEX + 2, MINI_TILEY + 2); /* copy border to the right location */ - XCopyArea(display, drawto, drawto, gc, - area_sx, area_sy, 3 * MINI_TILEX, 3 * MINI_TILEY, - area_sx - MINI_TILEX/2, area_sy - MINI_TILEY/2); + BlitBitmap(drawto, drawto, + area_sx, area_sy, 3 * MINI_TILEX, 3 * MINI_TILEY, + area_sx - MINI_TILEX/2, area_sy - MINI_TILEY/2); DrawText(area_sx + TILEX, area_sy + 1, "Content of amoeba", FS_SMALL, font_color); @@ -2365,7 +2530,7 @@ static void DrawElementContentAreas() MapCounterButtons(counter_id); /* delete content areas in case of reducing number of them */ - XFillRectangle(display, backbuffer, gc, + ClearRectangle(backbuffer, SX, area_sy - MINI_TILEX, SXSIZE, 12 * MINI_TILEY); @@ -2377,16 +2542,16 @@ static void DrawElementContentAreas() DrawMiniElement(area_x + 5 * (i % 4) + x, area_y + 6 * (i / 4) + y, EL_ERDREICH); - XFillRectangle(display, drawto, gc, + ClearRectangle(drawto, area_sx + 5 * (i % 4) * MINI_TILEX + MINI_TILEX/2 - 1, area_sy + 6 * (i / 4) * MINI_TILEY + MINI_TILEY/2 - 1, 3 * MINI_TILEX + 2, 3 * MINI_TILEY + 2); } /* copy border to the right location */ - XCopyArea(display, drawto, drawto, gc, - area_sx, area_sy, (5 * 4 + 1) * MINI_TILEX, 11 * MINI_TILEY, - area_sx - MINI_TILEX/2, area_sy - MINI_TILEY/2); + BlitBitmap(drawto, drawto, + area_sx, area_sy, (5 * 4 + 1) * MINI_TILEX, 11 * MINI_TILEY, + area_sx - MINI_TILEX/2, area_sy - MINI_TILEY/2); DrawText(area_sx + (5 * 4 - 1) * MINI_TILEX, area_sy + 0 * MINI_TILEY + 1, "Content", FS_SMALL, font_color); @@ -2443,31 +2608,31 @@ static void DrawPropertiesWindow() { EL_EDELSTEIN_ROT, &level.score[SC_EDELSTEIN], TEXT_COLLECTING }, { EL_EDELSTEIN_LILA,&level.score[SC_EDELSTEIN], TEXT_COLLECTING }, { EL_DIAMANT, &level.score[SC_DIAMANT], TEXT_COLLECTING }, - { EL_KAEFER_R, &level.score[SC_KAEFER], TEXT_SMASHING }, - { EL_KAEFER_O, &level.score[SC_KAEFER], TEXT_SMASHING }, - { EL_KAEFER_L, &level.score[SC_KAEFER], TEXT_SMASHING }, - { EL_KAEFER_U, &level.score[SC_KAEFER], TEXT_SMASHING }, - { EL_BUTTERFLY_R, &level.score[SC_KAEFER], TEXT_SMASHING }, - { EL_BUTTERFLY_O, &level.score[SC_KAEFER], TEXT_SMASHING }, - { EL_BUTTERFLY_L, &level.score[SC_KAEFER], TEXT_SMASHING }, - { EL_BUTTERFLY_U, &level.score[SC_KAEFER], TEXT_SMASHING }, - { EL_FLIEGER_R, &level.score[SC_FLIEGER], TEXT_SMASHING }, - { EL_FLIEGER_O, &level.score[SC_FLIEGER], TEXT_SMASHING }, - { EL_FLIEGER_L, &level.score[SC_FLIEGER], TEXT_SMASHING }, - { EL_FLIEGER_U, &level.score[SC_FLIEGER], TEXT_SMASHING }, - { EL_FIREFLY_R, &level.score[SC_FLIEGER], TEXT_SMASHING }, - { EL_FIREFLY_O, &level.score[SC_FLIEGER], TEXT_SMASHING }, - { EL_FIREFLY_L, &level.score[SC_FLIEGER], TEXT_SMASHING }, - { EL_FIREFLY_U, &level.score[SC_FLIEGER], TEXT_SMASHING }, + { EL_KAEFER_RIGHT, &level.score[SC_KAEFER], TEXT_SMASHING }, + { EL_KAEFER_UP, &level.score[SC_KAEFER], TEXT_SMASHING }, + { EL_KAEFER_LEFT, &level.score[SC_KAEFER], TEXT_SMASHING }, + { EL_KAEFER_DOWN, &level.score[SC_KAEFER], TEXT_SMASHING }, + { EL_BUTTERFLY_RIGHT,&level.score[SC_KAEFER], TEXT_SMASHING }, + { EL_BUTTERFLY_UP, &level.score[SC_KAEFER], TEXT_SMASHING }, + { EL_BUTTERFLY_LEFT,&level.score[SC_KAEFER], TEXT_SMASHING }, + { EL_BUTTERFLY_DOWN,&level.score[SC_KAEFER], TEXT_SMASHING }, + { EL_FLIEGER_RIGHT, &level.score[SC_FLIEGER], TEXT_SMASHING }, + { EL_FLIEGER_UP, &level.score[SC_FLIEGER], TEXT_SMASHING }, + { EL_FLIEGER_LEFT, &level.score[SC_FLIEGER], TEXT_SMASHING }, + { EL_FLIEGER_DOWN, &level.score[SC_FLIEGER], TEXT_SMASHING }, + { EL_FIREFLY_RIGHT, &level.score[SC_FLIEGER], TEXT_SMASHING }, + { EL_FIREFLY_UP, &level.score[SC_FLIEGER], TEXT_SMASHING }, + { EL_FIREFLY_LEFT, &level.score[SC_FLIEGER], TEXT_SMASHING }, + { EL_FIREFLY_DOWN, &level.score[SC_FLIEGER], TEXT_SMASHING }, { EL_MAMPFER, &level.score[SC_MAMPFER], TEXT_SMASHING }, { EL_MAMPFER2, &level.score[SC_MAMPFER], TEXT_SMASHING }, { EL_ROBOT, &level.score[SC_ROBOT], TEXT_SMASHING }, - { EL_PACMAN_R, &level.score[SC_PACMAN], TEXT_SMASHING }, - { EL_PACMAN_O, &level.score[SC_PACMAN], TEXT_SMASHING }, - { EL_PACMAN_L, &level.score[SC_PACMAN], TEXT_SMASHING }, - { EL_PACMAN_U, &level.score[SC_PACMAN], TEXT_SMASHING }, + { EL_PACMAN_RIGHT, &level.score[SC_PACMAN], TEXT_SMASHING }, + { EL_PACMAN_UP, &level.score[SC_PACMAN], TEXT_SMASHING }, + { EL_PACMAN_LEFT, &level.score[SC_PACMAN], TEXT_SMASHING }, + { EL_PACMAN_DOWN, &level.score[SC_PACMAN], TEXT_SMASHING }, { EL_KOKOSNUSS, &level.score[SC_KOKOSNUSS], TEXT_CRACKING }, - { EL_DYNAMIT_AUS, &level.score[SC_DYNAMIT], TEXT_COLLECTING }, + { EL_DYNAMITE_INACTIVE,&level.score[SC_DYNAMIT], TEXT_COLLECTING }, { EL_SCHLUESSEL1, &level.score[SC_SCHLUESSEL], TEXT_COLLECTING }, { EL_SCHLUESSEL2, &level.score[SC_SCHLUESSEL], TEXT_COLLECTING }, { EL_SCHLUESSEL3, &level.score[SC_SCHLUESSEL], TEXT_COLLECTING }, @@ -2480,7 +2645,7 @@ static void DrawPropertiesWindow() { EL_AMOEBE_NORM, &level.amoeba_speed, TEXT_SPEED }, { EL_AMOEBE_VOLL, &level.amoeba_speed, TEXT_SPEED }, { EL_AMOEBE_BD, &level.amoeba_speed, TEXT_SPEED }, - { EL_SIEB_INAKTIV, &level.time_magic_wall, TEXT_DURATION }, + { EL_MAGIC_WALL_OFF,&level.time_magic_wall, TEXT_DURATION }, { EL_ABLENK_AUS, &level.time_wheel, TEXT_DURATION }, { -1, NULL, NULL } }; @@ -2496,31 +2661,31 @@ static void DrawPropertiesWindow() for (x=0; x<3; x++) DrawMiniElement(xstart + x , ystart + y, EL_ERDREICH); - XFillRectangle(display, drawto, gc, + ClearRectangle(drawto, SX + xstart * MINI_TILEX + MINI_TILEX/2 - 1, SY + ystart * MINI_TILEY + MINI_TILEY/2 - 1, TILEX + 2, TILEY + 2); /* copy border to the right location */ - XCopyArea(display, drawto, drawto, gc, - SX + xstart * MINI_TILEX, - SY + ystart * MINI_TILEY, - 2 * TILEX, 2 * TILEY, - SX + xstart * MINI_TILEX - MINI_TILEX/2, - SY + ystart * MINI_TILEY - MINI_TILEY/2); + BlitBitmap(drawto, drawto, + SX + xstart * MINI_TILEX, + SY + ystart * MINI_TILEY, + 2 * TILEX, 2 * TILEY, + SX + xstart * MINI_TILEX - MINI_TILEX/2, + SY + ystart * MINI_TILEY - MINI_TILEY/2); DrawGraphic(xstart/2, ystart/2, el2gfx(properties_element)); /* copy the whole stuff to the definitive location */ - XCopyArea(display, drawto, drawto, gc, - SX + xstart * MINI_TILEX - MINI_TILEX/2, - SY + ystart * MINI_TILEY - MINI_TILEY, - 2 * TILEX, 2 * TILEY, - SX + xstart * MINI_TILEX - MINI_TILEX/2, - SY + ystart * MINI_TILEY - MINI_TILEY/2); + BlitBitmap(drawto, drawto, + SX + xstart * MINI_TILEX - MINI_TILEX/2, + SY + ystart * MINI_TILEY - MINI_TILEY, + 2 * TILEX, 2 * TILEY, + SX + xstart * MINI_TILEX - MINI_TILEX/2, + SY + ystart * MINI_TILEY - MINI_TILEY/2); DrawTextF((xstart + 3) * MINI_TILEX, (ystart + 1) * MINI_TILEY, - font_color, element_info[properties_element]); + font_color, getElementInfoText(properties_element)); num_elements_in_level = 0; for (y=0; yx + sx * MINI_TILEX, gi->y + sy * MINI_TILEY, el2gfx(new_element)); - DrawMiniGraphicExt(window, gc, + DrawMiniGraphicExt(window, gi->x + sx * MINI_TILEX, gi->y + sy * MINI_TILEY, el2gfx(new_element)); @@ -3391,7 +3532,8 @@ static void HandleDrawingAreas(struct GadgetInfo *gi) { CopyAreaToBrush(start_sx, start_sy, sx, sy, button); CopyBrushToCursor(sx, sy); - ClickOnGadget(level_editor_gadget[GADGET_ID_SINGLE_ITEMS],MB_LEFT); + ClickOnGadget(level_editor_gadget[GADGET_ID_SINGLE_ITEMS], + MB_LEFTBUTTON); draw_with_brush = TRUE; } else if (drawing_function == GADGET_ID_TEXT) @@ -3420,7 +3562,8 @@ static void HandleDrawingAreas(struct GadgetInfo *gi) case GADGET_ID_PICK_ELEMENT: if (button_release_event) - ClickOnGadget(level_editor_gadget[last_drawing_function], MB_LEFT); + ClickOnGadget(level_editor_gadget[last_drawing_function], + MB_LEFTBUTTON); else PickDrawingElement(button, Feld[lx][ly]); @@ -3636,8 +3779,8 @@ static void HandleControlButtons(struct GadgetInfo *gi) int element = editor_element[element_shift + i]; UnmapGadget(gi); - getMiniGraphicSource(el2gfx(element), &gd->pixmap, &gd->x, &gd->y); - ModifyGadget(gi, GDI_INFO_TEXT, element_info[element], GDI_END); + getMiniGraphicSource(el2gfx(element), &gd->bitmap, &gd->x, &gd->y); + ModifyGadget(gi, GDI_INFO_TEXT, getElementInfoText(element), GDI_END); MapGadget(gi); } break; @@ -3731,7 +3874,7 @@ static void HandleControlButtons(struct GadgetInfo *gi) break; case GADGET_ID_SAVE: - if (leveldir[leveldir_nr].readonly) + if (leveldir_current->readonly) { Request("This level is read only !", REQ_CONFIRM); break; @@ -3798,9 +3941,9 @@ static void HandleControlButtons(struct GadgetInfo *gi) else { CloseDoor(DOOR_CLOSE_1); - XCopyArea(display, pix[PIX_DB_DOOR], pix[PIX_DB_DOOR], gc, - DOOR_GFX_PAGEX2, DOOR_GFX_PAGEY1, DXSIZE,DYSIZE, - DOOR_GFX_PAGEX1, DOOR_GFX_PAGEY1); + BlitBitmap(pix[PIX_DB_DOOR], pix[PIX_DB_DOOR], + DOOR_GFX_PAGEX2, DOOR_GFX_PAGEY1, DXSIZE,DYSIZE, + DOOR_GFX_PAGEX1, DOOR_GFX_PAGEY1); OpenDoor(DOOR_OPEN_1); } break; @@ -3823,7 +3966,8 @@ static void HandleControlButtons(struct GadgetInfo *gi) } if (drawing_function == GADGET_ID_PICK_ELEMENT) - ClickOnGadget(level_editor_gadget[last_drawing_function], MB_LEFT); + ClickOnGadget(level_editor_gadget[last_drawing_function], + MB_LEFTBUTTON); } #ifdef DEBUG else if (gi->event.type == GD_EVENT_PRESSED) @@ -3839,19 +3983,19 @@ static void HandleControlButtons(struct GadgetInfo *gi) } } -void HandleLevelEditorKeyInput(KeySym key) +void HandleLevelEditorKeyInput(Key key) { - char letter = getCharFromKeySym(key); - int button = MB_LEFT; + char letter = getCharFromKey(key); + int button = MB_LEFTBUTTON; if (drawing_function == GADGET_ID_TEXT && DrawLevelText(0, 0, 0, TEXT_QUERY_TYPING) == TRUE) { if (letter) DrawLevelText(0, 0, letter, TEXT_WRITECHAR); - else if (key == XK_Delete || key == XK_BackSpace) + else if (key == KSYM_Delete || key == KSYM_BackSpace) DrawLevelText(0, 0, 0, TEXT_BACKSPACE); - else if (key == XK_Return) + else if (key == KSYM_Return) DrawLevelText(0, 0, 0, TEXT_NEWLINE); } else if (button_status == MB_RELEASED) @@ -3860,25 +4004,25 @@ void HandleLevelEditorKeyInput(KeySym key) switch (key) { - case XK_Left: + case KSYM_Left: id = GADGET_ID_SCROLL_LEFT; break; - case XK_Right: + case KSYM_Right: id = GADGET_ID_SCROLL_RIGHT; break; - case XK_Up: + case KSYM_Up: id = GADGET_ID_SCROLL_UP; break; - case XK_Down: + case KSYM_Down: id = GADGET_ID_SCROLL_DOWN; break; - case XK_Page_Up: + case KSYM_Page_Up: id = GADGET_ID_SCROLL_LIST_UP; - button = 3; + button = MB_RIGHTBUTTON; break; - case XK_Page_Down: + case KSYM_Page_Down: id = GADGET_ID_SCROLL_LIST_DOWN; - button = 3; + button = MB_RIGHTBUTTON; break; default: @@ -3890,6 +4034,8 @@ void HandleLevelEditorKeyInput(KeySym key) ClickOnGadget(level_editor_gadget[id], button); else if (letter == '.') ClickOnGadget(level_editor_gadget[GADGET_ID_SINGLE_ITEMS], button); + else if (key == KSYM_space || key == KSYM_Return) + ClickOnGadget(level_editor_gadget[GADGET_ID_TEST], button); else for (i=0; i= 'A' && key <= 'Z' ? "Shift-" : - gi->custom_id == GADGET_ID_SINGLE_ITEMS ? ".' or '" : ""), - key); + if (gi->custom_id == GADGET_ID_SINGLE_ITEMS) /* special case 1 */ + sprintf(shortcut, " ('.' or '%c')", key); + else if (gi->custom_id == GADGET_ID_TEST) /* special case 2 */ + sprintf(shortcut, " ('Enter' or 'Shift-%c')", key); + else /* normal case */ + sprintf(shortcut, " ('%s%c')", + (key >= 'A' && key <= 'Z' ? "Shift-" : ""), key); if (strlen(infotext) + strlen(shortcut) <= MAX_INFOTEXT_LEN) strcat(infotext, shortcut); @@ -4039,7 +4191,7 @@ static void HandleDrawingAreaInfo(struct GadgetInfo *gi) } else if (drawing_function == GADGET_ID_PICK_ELEMENT) DrawTextF(INFOTEXT_XPOS - SX, INFOTEXT_YPOS - SY, FC_YELLOW, - "%s", element_info[Feld[lx][ly]]); + "%s", getElementInfoText(Feld[lx][ly])); else DrawTextF(INFOTEXT_XPOS - SX, INFOTEXT_YPOS - SY, FC_YELLOW, "Level position: %d, %d", lx, ly);