X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ftools.c;h=3da2b0604410a1814a09f63693f9b05f69eb8cd6;hb=8e5671db64b55432158b1d43d7fd2e684544ebeb;hp=45d37436a325dec9840a38644e2fba606f3d4208;hpb=5d25c2fc3934b3d7e6b02465361569d3a0033bae;p=rocksndiamonds.git diff --git a/src/tools.c b/src/tools.c index 45d37436..3da2b060 100644 --- a/src/tools.c +++ b/src/tools.c @@ -599,6 +599,10 @@ void DrawPlayer(struct PlayerInfo *player) player->is_moving ? ACTION_MOVING : player->snapped ? ACTION_SNAPPING : ACTION_DEFAULT); +#if 0 + printf("::: '%s'\n", element_action_info[action].suffix); +#endif + InitPlayerGfxAnimation(player, action, move_dir); /* ----------------------------------------------------------------------- */ @@ -1200,7 +1204,11 @@ static void DrawLevelFieldCrumbledSandExt(int x, int y, int graphic, int frame) int sx = SCREENX(x), sy = SCREENY(y); int element; int width, height, cx, cy, i; +#if 1 + int crumbled_border_size = graphic_info[graphic].border_size; +#else int snip = TILEX / 8; /* number of border pixels from "crumbled graphic" */ +#endif static int xy[4][2] = { { 0, -1 }, @@ -1243,17 +1251,17 @@ static void DrawLevelFieldCrumbledSandExt(int x, int y, int graphic, int frame) if (i == 1 || i == 2) { - width = snip; + width = crumbled_border_size; height = TILEY; - cx = (i == 2 ? TILEX - snip : 0); + cx = (i == 2 ? TILEX - crumbled_border_size : 0); cy = 0; } else { width = TILEX; - height = snip; + height = crumbled_border_size; cx = 0; - cy = (i == 3 ? TILEY - snip : 0); + cy = (i == 3 ? TILEY - crumbled_border_size : 0); } BlitBitmap(src_bitmap, drawto_field, src_x + cx, src_y + cy, @@ -1281,17 +1289,17 @@ static void DrawLevelFieldCrumbledSandExt(int x, int y, int graphic, int frame) if (i == 1 || i == 2) { - width = snip; + width = crumbled_border_size; height = TILEY; - cx = (i == 1 ? TILEX - snip : 0); + cx = (i == 1 ? TILEX - crumbled_border_size : 0); cy = 0; } else { width = TILEX; - height = snip; + height = crumbled_border_size; cx = 0; - cy = (i==0 ? TILEY-snip : 0); + cy = (i == 0 ? TILEY - crumbled_border_size : 0); } BlitBitmap(src_bitmap, drawto_field, src_x + cx, src_y + cy, @@ -1367,12 +1375,12 @@ static int getBorderElement(int x, int y) { EL_STEELWALL, EL_INVISIBLE_STEELWALL } }; int steel_type = (BorderElement == EL_STEELWALL ? 0 : 1); - int steel_position = (x == -1 && y == -1 ? 0 : - x == lev_fieldx && y == -1 ? 1 : - x == -1 && y == lev_fieldy ? 2 : - x == lev_fieldx && y == lev_fieldy ? 3 : - x == -1 || x == lev_fieldx ? 4 : - y == -1 || y == lev_fieldy ? 5 : 6); + int steel_position = (x == -1 && y == -1 ? 0 : + x == lev_fieldx && y == -1 ? 1 : + x == -1 && y == lev_fieldy ? 2 : + x == lev_fieldx && y == lev_fieldy ? 3 : + x == -1 || x == lev_fieldx ? 4 : + y == -1 || y == lev_fieldy ? 5 : 6); return border[steel_position][steel_type]; } @@ -1521,6 +1529,68 @@ void DrawMiniElementOrWall(int sx, int sy, int scroll_x, int scroll_y) DrawMiniGraphic(sx, sy, el2edimg(getBorderElement(x, y))); } +void DrawEnvelopeBackground(int dst_x, int dst_y, int ex, int ey, int font_nr) +{ +#if 1 + int font_width = getFontWidth(font_nr); + int font_height = getFontHeight(font_nr); + int graphic = IMG_GAME_ENVELOPE_BACKGROUND; + Bitmap *src_bitmap; + int src_x, src_y; +#if 0 + int dst_x = SX + sx * font_width; + int dst_y = SY + sy * font_height; +#endif + int width = graphic_info[graphic].width; + int height = graphic_info[graphic].height; + boolean draw_masked = graphic_info[graphic].draw_masked; + + getGraphicSource(graphic, 0, &src_bitmap, &src_x, &src_y); + + if (src_bitmap == NULL) + { + ClearRectangle(drawto, dst_x, dst_y, font_width, font_height); + return; + } + + src_x += (ex == -1 ? 0 : ex == +1 ? width - font_width : font_width); + src_y += (ey == -1 ? 0 : ey == +1 ? height - font_height : font_height); + + if (draw_masked) + { + SetClipOrigin(src_bitmap, src_bitmap->stored_clip_gc, + dst_x - src_x, dst_y - src_y); + BlitBitmapMasked(src_bitmap, drawto, src_x, src_y, font_width, font_height, + dst_x, dst_y); + } + else + BlitBitmap(src_bitmap, drawto, src_x, src_y, font_width, font_height, + dst_x, dst_y); +#else + int border[8][2] = + { + { EL_STEELWALL_TOPLEFT, EL_INVISIBLE_STEELWALL_TOPLEFT }, + { EL_STEELWALL_TOPRIGHT, EL_INVISIBLE_STEELWALL_TOPRIGHT }, + { EL_STEELWALL_BOTTOMLEFT, EL_INVISIBLE_STEELWALL_BOTTOMLEFT }, + { EL_STEELWALL_BOTTOMRIGHT, EL_INVISIBLE_STEELWALL_BOTTOMRIGHT }, + { EL_STEELWALL_VERTICAL, EL_INVISIBLE_STEELWALL_VERTICAL }, + { EL_STEELWALL_HORIZONTAL, EL_INVISIBLE_STEELWALL_HORIZONTAL }, + { EL_STEELWALL, EL_INVISIBLE_STEELWALL }, + { EL_EMPTY, EL_EMPTY } + }; + int steel_type = (BorderElement == EL_STEELWALL ? 0 : 1); + int steel_position = (ex == -1 && ey == -1 ? 0 : + ex == +1 && ey == -1 ? 1 : + ex == -1 && ey == +1 ? 2 : + ex == +1 && ey == +1 ? 3 : + ex == -1 || ex == +1 ? 4 : + ey == -1 || ey == +1 ? 5 : 7); + int element = border[steel_position][steel_type]; + + DrawMiniGraphic(sx, sy, el2edimg(element)); +#endif +} + void getMicroGraphicSource(int graphic, Bitmap **bitmap, int *x, int *y) { Bitmap *src_bitmap = graphic_info[graphic].bitmap; @@ -1751,16 +1821,50 @@ void DrawMicroLevel(int xpos, int ypos, boolean restart) game_status = last_game_status; /* restore current game status */ } -int REQ_in_range(int x, int y) +void WaitForEventToContinue() { - if (y > DY+249 && y < DY+278) + boolean still_wait = TRUE; + + /* simulate releasing mouse button over last gadget, if still pressed */ + if (button_status) + HandleGadgets(-1, -1, 0); + + button_status = MB_RELEASED; + + while (still_wait) { - if (x > DX+1 && x < DX+48) - return 1; - else if (x > DX+51 && x < DX+98) - return 2; + if (PendingEvent()) + { + Event event; + + NextEvent(&event); + + switch (event.type) + { + case EVENT_BUTTONPRESS: + case EVENT_KEYPRESS: + still_wait = FALSE; + break; + + case EVENT_KEYRELEASE: + ClearPlayerAction(); + break; + + default: + HandleOtherEvents(&event); + break; + } + } + else if (AnyJoystickButton() == JOY_BUTTON_NEW_PRESSED) + { + still_wait = FALSE; + } + + DoAnimation(); + + /* don't eat all CPU time */ + Delay(10); } - return 0; } #define MAX_REQUEST_LINES 13 @@ -1772,6 +1876,10 @@ boolean Request(char *text, unsigned int req_state) unsigned int old_door_state; int last_game_status = game_status; /* save current game status */ +#if 1 + SetMouseCursor(CURSOR_DEFAULT); +#endif + #if defined(PLATFORM_UNIX) /* pause network game while waiting for request to answer */ if (options.network && @@ -1882,7 +1990,9 @@ boolean Request(char *text, unsigned int req_state) SetDrawBackgroundMask(REDRAW_FIELD | REDRAW_DOOR_1); +#if 0 SetMouseCursor(CURSOR_DEFAULT); +#endif while(result < 0) {