From 8c167a3d4c65f4baf5b4abbebab48d575c248221 Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Sun, 9 Nov 2003 19:02:37 +0100 Subject: [PATCH] rnd-20031109-2-src * fixed reset of player animation frame when, for example, walking, digging or collecting share the same animation --- ChangeLog | 4 ++++ Makefile | 3 +++ src/conftime.h | 2 +- src/game.c | 4 +++- src/tools.c | 40 ++++++++++++++++++++++++++++++++++++++++ 5 files changed, 51 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 088f2930..aeaa2263 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2003-11-09 + * fixed reset of player animation frame when, for example, + walking, digging or collecting share the same animation + 2003-11-08 * fixed tape recording when player is created from CE element change diff --git a/Makefile b/Makefile index e981e705..0c0c57f4 100644 --- a/Makefile +++ b/Makefile @@ -108,6 +108,9 @@ valgrind: enginetest: ./Scripts/make_enginetest.sh +enginetestcustom: + ./Scripts/make_enginetest.sh custom + enginetestfast: ./Scripts/make_enginetest.sh fast diff --git a/src/conftime.h b/src/conftime.h index 41258204..14db7366 100644 --- a/src/conftime.h +++ b/src/conftime.h @@ -1 +1 @@ -#define COMPILE_DATE_STRING "[2003-11-09 01:50]" +#define COMPILE_DATE_STRING "[2003-11-09 18:37]" diff --git a/src/game.c b/src/game.c index cfb239c9..71013bf5 100644 --- a/src/game.c +++ b/src/game.c @@ -4657,7 +4657,9 @@ void ContinueMoving(int x, int y) { TestIfBadThingTouchesHero(newx, newy); TestIfBadThingTouchesFriend(newx, newy); - TestIfBadThingTouchesOtherBadThing(newx, newy); + + if (!IS_CUSTOM_ELEMENT(element)) + TestIfBadThingTouchesOtherBadThing(newx, newy); } else if (element == EL_PENGUIN) TestIfFriendTouchesBadThing(newx, newy); diff --git a/src/tools.c b/src/tools.c index b66404ab..fbb30793 100644 --- a/src/tools.c +++ b/src/tools.c @@ -529,6 +529,30 @@ void DrawLevelElementAnimationIfNeeded(int x, int y, int element) DrawLevelFieldCrumbledSand(x, y); } +static int getPlayerGraphic(struct PlayerInfo *player, int move_dir) +{ + if (player->use_murphy_graphic) + { + /* this works only because currently only one player can be "murphy" ... */ + static int last_horizontal_dir = MV_LEFT; + int graphic = el_act_dir2img(EL_SP_MURPHY, player->GfxAction, move_dir); + + if (move_dir == MV_LEFT || move_dir == MV_RIGHT) + last_horizontal_dir = move_dir; + + if (graphic == IMG_SP_MURPHY) /* undefined => use special graphic */ + { + int direction = (player->is_snapping ? move_dir : last_horizontal_dir); + + graphic = el_act_dir2img(EL_SP_MURPHY, player->GfxAction, direction); + } + + return graphic; + } + else + return el_act_dir2img(player->element_nr, player->GfxAction, move_dir); +} + void DrawAllPlayers() { int i; @@ -571,6 +595,8 @@ void DrawPlayer(struct PlayerInfo *player) int element = Feld[jx][jy], last_element = Feld[last_jx][last_jy]; int graphic; int action = ACTION_DEFAULT; + int last_player_graphic = getPlayerGraphic(player, move_dir); + int last_player_frame = player->Frame; int frame = 0; if (!player->active || !IN_SCR_FIELD(SCREENX(last_jx), SCREENY(last_jy))) @@ -672,6 +698,18 @@ void DrawPlayer(struct PlayerInfo *player) /* draw player himself */ /* ----------------------------------------------------------------------- */ +#if 1 + + graphic = getPlayerGraphic(player, move_dir); + + /* in the case of changed player action or direction, prevent the current + animation frame from being restarted for identical animations */ + if (player->Frame == 0 && + graphic_info[graphic].bitmap == graphic_info[last_player_graphic].bitmap) + player->Frame = last_player_frame; + +#else + if (player->use_murphy_graphic) { static int last_horizontal_dir = MV_LEFT; @@ -691,6 +729,8 @@ void DrawPlayer(struct PlayerInfo *player) else graphic = el_act_dir2img(player->element_nr, player->GfxAction, move_dir); +#endif + frame = getGraphicAnimationFrame(graphic, player->Frame); if (player->GfxPos) -- 2.34.1