From: Holger Schemel Date: Thu, 6 Mar 2003 22:19:12 +0000 (+0100) Subject: rnd-20030306-3-src X-Git-Tag: 3.0.0^2~126 X-Git-Url: https://git.artsoft.org/?a=commitdiff_plain;h=0d0e1a63d6b14109b64805bcb1a45ddf469ba35d;p=rocksndiamonds.git rnd-20030306-3-src --- diff --git a/src/conftime.h b/src/conftime.h index 9f7db38d..df5c19f5 100644 --- a/src/conftime.h +++ b/src/conftime.h @@ -1 +1 @@ -#define COMPILE_DATE_STRING "[2003-03-06 01:59]" +#define COMPILE_DATE_STRING "[2003-03-06 23:15]" diff --git a/src/game.c b/src/game.c index fb21d6f6..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; @@ -1261,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; } } @@ -4465,7 +4473,13 @@ static void PlayerActions(struct PlayerInfo *player, byte player_action) CheckGravityMovement(player); if (player->MovPos == 0) - InitPlayerGfxAnimation(player, ACTION_DEFAULT); + { +#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; @@ -4898,12 +4912,31 @@ void GameActions() redraw_mask |= REDRAW_FPS; } +#if 0 + if (stored_player[0].jx != stored_player[0].last_jx || + stored_player[0].jy != stored_player[0].last_jy) + printf("::: %d, %d, %d, %d, %d\n", + stored_player[0].MovDir, + stored_player[0].MovPos, + stored_player[0].GfxPos, + stored_player[0].Frame, + stored_player[0].StepFrame); +#endif + #if 1 FrameCounter++; TimeFrames++; for (i=0; iStepFrame = 0; + if (moved & MF_MOVING) { if (old_jx != jx && old_jy == jy) @@ -5628,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; @@ -6355,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; } diff --git a/src/game.h b/src/game.h index dfc4312f..ffacbddd 100644 --- a/src/game.h +++ b/src/game.h @@ -37,6 +37,8 @@ void InitMovDir(int, int); void InitAmoebaNr(int, int); void GameWon(void); int NewHiScore(void); + +void InitPlayerGfxAnimation(struct PlayerInfo *, int, int); void InitMovingField(int, int, int); void Moving2Blocked(int, int, int *, int *); void Blocked2Moving(int, int, int *, int *); diff --git a/src/main.h b/src/main.h index 326f63be..aa5926f5 100644 --- a/src/main.h +++ b/src/main.h @@ -920,8 +920,8 @@ struct PlayerInfo through doors); overrides other actions */ int jx,jy, last_jx,last_jy; - int MovDir, MovPos, GfxPos; - int Frame; + int MovDir, MovPos, GfxDir, GfxPos; + int Frame, StepFrame; int GfxAction; diff --git a/src/tools.c b/src/tools.c index 4226eec9..979eead9 100644 --- a/src/tools.c +++ b/src/tools.c @@ -542,6 +542,7 @@ void DrawPlayer(struct PlayerInfo *player) 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; @@ -559,6 +560,13 @@ void DrawPlayer(struct PlayerInfo *player) 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 */ /* ----------------------------------------------------------------------- */ @@ -616,7 +624,8 @@ void DrawPlayer(struct PlayerInfo *player) int old_element = GfxElement[jx][jy]; int old_graphic = el_act_dir2img(old_element, ACTION_DIGGING, player->MovDir); - int frame = getGraphicAnimationFrame(old_graphic, player->Frame); + int frame = getGraphicAnimationFrame(old_graphic, player->StepFrame); + #if 0 Bitmap *src_bitmap; int src_x, src_y; @@ -650,10 +659,10 @@ void DrawPlayer(struct PlayerInfo *player) width, height, FX + sx * TILEX + cx, FY + sy * TILEY + cy); #else #if 0 - printf("::: %d, %d, %d, %d => %d, %d [%d]\n", + printf("::: %d, %d, %d, %d => %d, %d [%d, %d, %d]\n", old_element, ACTION_DIGGING, player->MovDir, player->Frame, old_graphic, frame, - player->GfxPos); + player->MovPos, player->GfxPos, player->StepFrame); #endif DrawGraphic(sx, sy, old_graphic, frame); @@ -671,11 +680,6 @@ void DrawPlayer(struct PlayerInfo *player) /* 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;