int graphic;
int frame = 0;
boolean player_is_moving = (last_jx != jx || last_jy != jy ? TRUE : FALSE);
+ int current_action = ACTION_DEFAULT;
if (!player->active || !IN_SCR_FIELD(SCREENX(last_jx), SCREENY(last_jy)))
return;
if (element == EL_EXPLOSION)
return;
+ current_action = (player->Pushing ? ACTION_PUSHING :
+ player->is_digging ? ACTION_DIGGING :
+ player->is_moving ? ACTION_MOVING :
+ player->snapped ? ACTION_SNAPPING : ACTION_DEFAULT);
+
+ InitPlayerGfxAnimation(player, current_action, player->MovDir);
+
/* ----------------------------------------------------------------------- */
/* draw things in the field the player is leaving, if needed */
/* ----------------------------------------------------------------------- */
if (Store[jx][jy])
DrawLevelElement(jx, jy, Store[jx][jy]);
- else if (!IS_ACTIVE_BOMB(element))
- DrawLevelField(jx, jy);
- else
+ else if (IS_ACTIVE_BOMB(element))
DrawLevelElement(jx, jy, EL_EMPTY);
+ else
+ {
+ if (player_is_moving && GfxElement[jx][jy] != EL_UNDEFINED)
+ {
+ int old_element = GfxElement[jx][jy];
+ int old_graphic =
+ el_act_dir2img(old_element, ACTION_DIGGING, player->MovDir);
+ int frame = getGraphicAnimationFrame(old_graphic, player->StepFrame);
+
+#if 0
+ Bitmap *src_bitmap;
+ int src_x, src_y;
+ int width = TILEX, height = TILEY;
+ int cx = 0, cy = 0;
+
+ if (player->MovDir == MV_UP)
+ {
+ cy = player->GfxPos;
+ height -= cy;
+ }
+ else if (player->MovDir == MV_DOWN)
+ {
+ cy = 0;
+ height = TILEY - player->GfxPos;
+ }
+ else if (player->MovDir == MV_LEFT)
+ {
+ cx = player->GfxPos;
+ width -= cx;
+ }
+ else if (player->MovDir == MV_RIGHT)
+ {
+ cx = 0;
+ width = TILEX - player->GfxPos;
+ }
+
+ getGraphicSource(old_graphic, frame, &src_bitmap, &src_x, &src_y);
+
+ BlitBitmap(src_bitmap, drawto_field, src_x + cx, src_y + cy,
+ width, height, FX + sx * TILEX + cx, FY + sy * TILEY + cy);
+#else
+#if 0
+ printf("::: %d, %d, %d, %d => %d, %d [%d, %d, %d]\n",
+ old_element, ACTION_DIGGING, player->MovDir, player->Frame,
+ old_graphic, frame,
+ player->MovPos, player->GfxPos, player->StepFrame);
+#endif
+
+ DrawGraphic(sx, sy, old_graphic, frame);
+#endif
+ }
+ else
+ {
+ GfxElement[jx][jy] = EL_UNDEFINED;
+
+ DrawLevelField(jx, jy);
+ }
+ }
/* ----------------------------------------------------------------------- */
/* draw player himself */
/* ----------------------------------------------------------------------- */
- player->GfxAction = (player->Pushing ? ACTION_PUSHING :
- player->is_digging ? ACTION_DIGGING :
- player->is_moving ? ACTION_MOVING :
- player->snapped ? ACTION_SNAPPING : ACTION_DEFAULT);
-
if (player->use_murphy_graphic)
{
static int last_horizontal_dir = MV_LEFT;
element = Feld[lx][ly];
if (element == EL_SAND ||
+#if 1
+ (element == EL_EMPTY_SPACE && GfxElement[lx][ly] == EL_SAND) ||
+#endif
element == EL_LANDMINE ||
element == EL_TRAP ||
element == EL_TRAP_ACTIVE)
element = Feld[lxx][lyy];
if (element == EL_SAND ||
+#if 1
+ (element == EL_EMPTY_SPACE && GfxElement[lxx][lyy] == EL_SAND) ||
+#endif
element == EL_LANDMINE ||
element == EL_TRAP ||
element == EL_TRAP_ACTIVE)
if (!IN_LEV_FIELD(lxx, lyy) ||
(Feld[lxx][lyy] != EL_SAND &&
+#if 1
+ !(Feld[lxx][lyy] == EL_EMPTY_SPACE && GfxElement[lxx][lyy] == EL_SAND) &&
+#endif
Feld[lxx][lyy] != EL_LANDMINE &&
Feld[lxx][lyy] != EL_TRAP &&
Feld[lxx][lyy] != EL_TRAP_ACTIVE) ||