fixed bug with triggering "entered by player" event when pushing element
authorHolger Schemel <info@artsoft.org>
Sat, 20 May 2023 23:22:10 +0000 (01:22 +0200)
committerHolger Schemel <info@artsoft.org>
Sat, 20 May 2023 23:22:10 +0000 (01:22 +0200)
src/game.c

index a6287f2e0b202b60cc889c4120c326b597bb61fb..56f36518d9576cec0d8752c57ce8944bf373196d 100644 (file)
@@ -13227,13 +13227,18 @@ void ScrollPlayer(struct PlayerInfo *player, int mode)
                                          CE_PLAYER_LEAVES_X,
                                          player->index_bit, leave_side);
 
-      if (IS_CUSTOM_ELEMENT(new_element))
-       CheckElementChangeByPlayer(jx, jy, new_element, CE_ENTERED_BY_PLAYER,
-                                  player->index_bit, enter_side);
+      // needed because pushed element has not yet reached its destination,
+      // so it would trigger a change event at its previous field location
+      if (!player->is_pushing)
+      {
+       if (IS_CUSTOM_ELEMENT(new_element))
+         CheckElementChangeByPlayer(jx, jy, new_element, CE_ENTERED_BY_PLAYER,
+                                    player->index_bit, enter_side);
 
-      CheckTriggeredElementChangeByPlayer(jx, jy, new_element,
-                                         CE_PLAYER_ENTERS_X,
-                                         player->index_bit, enter_side);
+       CheckTriggeredElementChangeByPlayer(jx, jy, new_element,
+                                           CE_PLAYER_ENTERS_X,
+                                           player->index_bit, enter_side);
+      }
 
       CheckTriggeredElementChangeBySide(jx, jy, player->initial_element,
                                        CE_MOVE_OF_X, move_direction);
@@ -13244,8 +13249,8 @@ void ScrollPlayer(struct PlayerInfo *player, int mode)
       TestIfPlayerTouchesBadThing(jx, jy);
       TestIfPlayerTouchesCustomElement(jx, jy);
 
-      /* needed because pushed element has not yet reached its destination,
-        so it would trigger a change event at its previous field location */
+      // needed because pushed element has not yet reached its destination,
+      // so it would trigger a change event at its previous field location
       if (!player->is_pushing)
        TestIfElementTouchesCustomElement(jx, jy);      // for empty space