fixed bug with reanimating killed player by CE condition 4.2.0.0
authorHolger Schemel <info@artsoft.org>
Wed, 12 Aug 2020 18:56:01 +0000 (20:56 +0200)
committerHolger Schemel <info@artsoft.org>
Wed, 12 Aug 2020 19:19:00 +0000 (21:19 +0200)
When checking for CE condition "explosion of <element>" using the
player as <element>, it is possible to create a new player right after
the player died (exploded).

However, this only worked when directly changing the CE to the player,
but not when using an extended change target (to create the player on
some adjacent tile next to the CE) that puts the new player on a tile
that is walkable (which is especially true for tiles that are empty).

This change fixes this bug. (The problematic code is in function
"CreateFieldExt()", but always checking for reanimating a killed
player in "InitPlayerField()" seems to be the better (more clean)
fix for this bug.)

src/game.c

index 9e0327a491eac158a6907012e052b900287183eb..d67a91a0b8c743ba46cbb55d245067f314897fa4 100644 (file)
@@ -1785,7 +1785,7 @@ static void InitPlayerField(int x, int y, int element, boolean init_game)
     player->jy = player->last_jy = y;
   }
 
-  if (!init_game)
+  // always check if player was just killed and should be reanimated
   {
     int player_nr = GET_PLAYER_NR(element);
     struct PlayerInfo *player = &stored_player[player_nr];