From f360f1c76a4160a3da1e2863d22d670d3f44e900 Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Mon, 17 Dec 2018 09:14:05 +0100 Subject: [PATCH] fixed bug with CE actions "show envelope" and "exit player" when moving When using the CE actions "show envelope" or "exit player" with the condition "after explosion of player", those actions are not performed if the player was moving at the time of explosion, as they are both waiting for the player to reach the next tile (which will never happen in this case). The best solution is to only check for a "non-moving" tile position of the player if the player is still active, which will fix the problem. However, as the check for a "non-moving" tile position is used very frequently, setting the tile position to "non-moving" for inactive players was added. --- src/game.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/game.c b/src/game.c index d517cdc0..6463df1b 100644 --- a/src/game.c +++ b/src/game.c @@ -4503,7 +4503,7 @@ void GameWon(void) int i; // do not start end game actions before the player stops moving (to exit) - if (local_player->MovPos) + if (local_player->active && local_player->MovPos) return; game.LevelSolved_GameWon = TRUE; @@ -12164,7 +12164,8 @@ void GameActions_RND(void) DrawAllPlayers(); PlayAllPlayersSound(); - if (local_player->show_envelope != 0 && local_player->MovPos == 0) + if (local_player->show_envelope != 0 && (!local_player->active || + local_player->MovPos == 0)) { ShowEnvelope(local_player->show_envelope - EL_ENVELOPE_1); @@ -13451,6 +13452,9 @@ void RemovePlayer(struct PlayerInfo *player) player->present = FALSE; player->active = FALSE; + // required for some CE actions (even if the player is not active anymore) + player->MovPos = 0; + if (!ExplodeField[jx][jy]) StorePlayer[jx][jy] = 0; -- 2.34.1