fixed bug with causing explosion instead of killing player directly
[rocksndiamonds.git] / src / game.c
index a025b4b9d65835bdfe125859d60f30a2f1e1bbb0..ef117c8fa9409fc9bc4e63b6878a1e5e022c185b 100644 (file)
@@ -10641,17 +10641,17 @@ static void CreateFieldExt(int x, int y, int element, boolean is_change)
 
     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))
+    {
+      KillPlayer(PLAYERINFO(x, y));
 
-    return;
+      return;
+    }
   }
 
   // "ChangeCount" not set yet to allow "entered by player" change one time
@@ -13465,8 +13465,9 @@ void TestIfPlayerTouchesCustomElement(int x, int y)
           incorrectly give EL_PLAYER_1 for "player->element_nr") */
        int player_element = PLAYERINFO(x, y)->initial_element;
 
+       // as element "X" is the player here, check opposite (center) side
        CheckElementChangeBySide(xx, yy, border_element, player_element,
-                                CE_TOUCHING_X, border_side);
+                                CE_TOUCHING_X, center_side);
       }
     }
     else if (IS_PLAYER(xx, yy))                // player found at border element
@@ -13492,8 +13493,9 @@ void TestIfPlayerTouchesCustomElement(int x, int y)
           incorrectly give EL_PLAYER_1 for "player->element_nr") */
        int player_element = PLAYERINFO(xx, yy)->initial_element;
 
+       // as element "X" is the player here, check opposite (border) side
        CheckElementChangeBySide(x, y, center_element, player_element,
-                                CE_TOUCHING_X, center_side);
+                                CE_TOUCHING_X, border_side);
       }
 
       break;
@@ -13600,7 +13602,7 @@ void TestIfElementTouchesCustomElement(int x, int y)
     CheckElementChangeBySide(xx, yy, border_element, center_element,
                             CE_TOUCHING_X, center_side);
 
-    // (center element cannot be player, so we dont have to check this here)
+    // (center element cannot be player, so we don't have to check this here)
   }
 
   for (i = 0; i < NUM_DIRECTIONS; i++)
@@ -13627,6 +13629,7 @@ void TestIfElementTouchesCustomElement(int x, int y)
         incorrectly give EL_PLAYER_1 for "player->element_nr") */
       int player_element = PLAYERINFO(xx, yy)->initial_element;
 
+      // as element "X" is the player here, check opposite (border) side
       CheckElementChangeBySide(x, y, center_element, player_element,
                               CE_TOUCHING_X, border_side);
     }