This change fixes a bug where a CE change places the player at the
current player position, causing an explosion at that playfield
position, which should not happen.
In other words, such an event would normally relocate the player, but
to a playfield position which is identical to the current playfield
position of the player, which should therefore have no effect at all.
The bug occured because it was not checked if the new element to be
created is the player itself, but only checks if an element that is
not walkable by the player is created at the players current position.
if (GFX_CRUMBLED(new_element))
TEST_DrawLevelFieldCrumbledNeighbours(x, y);
if (GFX_CRUMBLED(new_element))
TEST_DrawLevelFieldCrumbledNeighbours(x, y);
- // check if element under the player changes from accessible to unaccessible
- // (needed for special case of dropping element which then changes)
- // (must be checked after creating new element for walkable group elements)
- if (IS_PLAYER(x, y) && !player_explosion_protected &&
- IS_ACCESSIBLE(old_element) && !IS_ACCESSIBLE(new_element))
- {
- Bang(x, y);
+ // check if element under the player changes from accessible to unaccessible
+ // (needed for special case of dropping element which then changes)
+ // (must be checked after creating new element for walkable group elements)
+ if (IS_PLAYER(x, y) && !player_explosion_protected &&
+ IS_ACCESSIBLE(old_element) && !IS_ACCESSIBLE(new_element))
+ {
+ Bang(x, y);
}
// "ChangeCount" not set yet to allow "entered by player" change one time
}
// "ChangeCount" not set yet to allow "entered by player" change one time