X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame.c;h=9dca25854cf41ca1b13b79267f3d8323b54acaf4;hb=0d0e1a63d6b14109b64805bcb1a45ddf469ba35d;hp=13110880ec46d7dad1189c95e64e9a2e298fdea4;hpb=07bd1f7e496e8914d56ec4422b33492b8f66b1d0;p=rocksndiamonds.git diff --git a/src/game.c b/src/game.c index 13110880..9dca2585 100644 --- a/src/game.c +++ b/src/game.c @@ -643,9 +643,10 @@ void InitGame() player->Pushing = FALSE; player->Switching = FALSE; player->GfxPos = 0; - player->Frame = 0; - + player->GfxDir = MV_NO_MOVING; player->GfxAction = ACTION_DEFAULT; + player->Frame = 0; + player->StepFrame = 0; player->use_murphy_graphic = FALSE; player->use_disk_red_graphic = FALSE; @@ -736,6 +737,7 @@ void InitGame() GfxFrame[x][y] = 0; GfxAction[x][y] = ACTION_DEFAULT; GfxRandom[x][y] = INIT_GFX_RANDOM(); + GfxElement[x][y] = EL_UNDEFINED; } } @@ -1260,12 +1262,19 @@ int NewHiScore() return position; } -static void InitPlayerGfxAnimation(struct PlayerInfo *player, int action) +void InitPlayerGfxAnimation(struct PlayerInfo *player, int action, int dir) { - if (player->GfxAction != action) + if (player->GfxAction != action || player->GfxDir != dir) { +#if 0 + printf("Player frame reset! (%d => %d, %d => %d)\n", + player->GfxAction, action, player->GfxDir, dir); +#endif + player->GfxAction = action; + player->GfxDir = dir; player->Frame = 0; + player->StepFrame = 0; } } @@ -4463,7 +4472,14 @@ static void PlayerActions(struct PlayerInfo *player, byte player_action) SnapField(player, 0, 0); CheckGravityMovement(player); - InitPlayerGfxAnimation(player, ACTION_DEFAULT); + if (player->MovPos == 0) + { +#if 0 + printf("Trying... Player frame reset\n"); +#endif + + InitPlayerGfxAnimation(player, ACTION_DEFAULT, player->MovDir); + } if (player->MovPos == 0) /* needed for tape.playing */ player->is_moving = FALSE; @@ -4564,11 +4580,13 @@ void GameActions() ScrollScreen(NULL, SCROLL_GO_ON); +#if 0 FrameCounter++; TimeFrames++; for (i=0; iStepFrame = 0; + if (moved & MF_MOVING) { if (old_jx != jx && old_jy == jy) @@ -5612,7 +5663,8 @@ int DigField(struct PlayerInfo *player, dy == +1 ? MV_DOWN : MV_NO_MOVING); int element; - player->is_digging = FALSE; + if (player->MovPos == 0) + player->is_digging = FALSE; if (player->MovPos == 0) player->Pushing = FALSE; @@ -5669,6 +5721,10 @@ int DigField(struct PlayerInfo *player, case EL_SP_BASE: case EL_SP_BUGGY_BASE: case EL_SP_BUGGY_BASE_ACTIVATING: +#if 1 + if (mode != DF_SNAP && element == EL_SAND) + GfxElement[x][y] = Feld[x][y]; +#endif RemoveField(x, y); PlaySoundLevelElementAction(x, y, element, ACTION_DIGGING); break; @@ -6335,7 +6391,10 @@ boolean SnapField(struct PlayerInfo *player, int dx, int dy) player->Pushing = FALSE; player->snapped = FALSE; - player->is_digging = FALSE; + + if (player->MovPos == 0) + player->is_digging = FALSE; + return FALSE; }