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);
/* ----------------------------------------------------------------------- */
if (player_is_moving && GfxElement[jx][jy] != EL_UNDEFINED)
{
#if 1
- /* !!! insert DrawLevelFieldCrumbledSandDigging code here !!! */
- if (player->is_digging && CAN_BE_CRUMBLED(GfxElement[jx][jy]))
+ if (CAN_BE_CRUMBLED(GfxElement[jx][jy]))
DrawLevelFieldCrumbledSandDigging(jx, jy, move_dir, player->StepFrame);
#else
if (GfxElement[jx][jy] == EL_SAND)
DrawLevelFieldCrumbledSandDigging(jx, jy, move_dir, player->StepFrame);
#endif
- else /* player->is_collecting */
+ else
{
int old_element = GfxElement[jx][jy];
int old_graphic = el_act_dir2img(old_element, action, move_dir);
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 },
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,
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,
int sx = SCREENX(x), sy = SCREENY(y);
DrawGraphic(sx, sy, graphic1, frame1);
-
- if (graphic1 != IMG_EMPTY_SPACE)
- DrawLevelFieldCrumbledSandExt(x, y, graphic2, frame2);
+ DrawLevelFieldCrumbledSandExt(x, y, graphic2, frame2);
}
void DrawLevelFieldCrumbledSandNeighbours(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];
}
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;
if (strlen(label_text) > 0)
{
- int text_width = strlen(label_text) * getFontWidth(font_nr);
- int lxpos = SX + (SXSIZE - text_width) / 2;
+ int lxpos = SX + (SXSIZE - getTextWidth(label_text, font_nr)) / 2;
int lypos = MICROLABEL_YPOS;
DrawText(lxpos, lypos, label_text, font_nr);
if (leveldir_current->name)
{
- int len = strlen(leveldir_current->name);
- int lxpos = SX + (SXSIZE - len * getFontWidth(FONT_TEXT_1)) / 2;
+ int text_width = getTextWidth(leveldir_current->name, FONT_TEXT_1);
+ int lxpos = SX + (SXSIZE - text_width) / 2;
int lypos = SY + 352;
DrawText(lxpos, lypos, leveldir_current->name, FONT_TEXT_1);
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
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 &&
SetDrawBackgroundMask(REDRAW_FIELD | REDRAW_DOOR_1);
+#if 0
+ SetMouseCursor(CURSOR_DEFAULT);
+#endif
+
while(result < 0)
{
if (PendingEvent())