rnd-20030926-1-src
[rocksndiamonds.git] / src / game.c
index 71aab9a62cb17f5557c41e8933796f4acc6bd28b..17eaef58990f47d39e4de9920cbbdeedd94b64a0 100644 (file)
@@ -1085,6 +1085,8 @@ void InitGame()
   game.balloon_dir = MV_NO_MOVING;
   game.explosions_delayed = TRUE;
 
+  game.envelope_active = FALSE;
+
   for (i=0; i<4; i++)
   {
     game.belt_dir[i] = MV_NO_MOVING;
@@ -2321,10 +2323,10 @@ void Explode(int ex, int ey, int phase, int mode)
 
   if (GfxElement[x][y] == EL_UNDEFINED)
   {
-    printf("\n\n\n");
+    printf("\n\n");
     printf("Explode(): x = %d, y = %d: GfxElement == EL_UNDEFINED\n", x, y);
     printf("Explode(): This should never happen!\n");
-    printf("\n\n\n");
+    printf("\n\n");
 
     GfxElement[x][y] = EL_EMPTY;
   }
@@ -2377,7 +2379,7 @@ void Explode(int ex, int ey, int phase, int mode)
 
     TestIfElementTouchesCustomElement(x, y);
 
-    if (CAN_BE_CRUMBLED(element))
+    if (GFX_CRUMBLED(element))
       DrawLevelFieldCrumbledSandNeighbours(x, y);
 
     if (IS_PLAYER(x, y) && !PLAYERINFO(x,y)->present)
@@ -3828,6 +3830,15 @@ void StartMoving(int x, int y)
 #endif
     }
 #if 1
+
+#if 0
+    /* TEST: bug where player gets not killed by falling rock ... */
+    else if (CAN_SMASH(element) &&
+            (Feld[x][y + 1] == EL_BLOCKED ||
+             IS_PLAYER(x, y + 1)) &&
+            JustStopped[x][y] && !Pushed[x][y + 1])
+
+#else
 #if 1
     else if (game.engine_version < RELEASE_IDENT(2,2,0,7) &&
             CAN_SMASH(element) && Feld[x][y + 1] == EL_BLOCKED &&
@@ -3836,6 +3847,8 @@ void StartMoving(int x, int y)
     else if (CAN_SMASH(element) && Feld[x][y + 1] == EL_BLOCKED &&
             JustStopped[x][y])
 #endif
+#endif
+
     {
       /* calling "Impact()" here is not only completely unneccessary
         (because it already gets called from "ContinueMoving()" in
@@ -4422,14 +4435,12 @@ void ContinueMoving(int x, int y)
 
     /* copy element change control values to new field */
     ChangeDelay[newx][newy] = ChangeDelay[x][y];
-#if 1
     Changed[newx][newy] = Changed[x][y];
     ChangeEvent[newx][newy] = ChangeEvent[x][y];
 
     ChangeDelay[x][y] = 0;
     Changed[x][y] = CE_BITMASK_DEFAULT;
     ChangeEvent[x][y] = CE_BITMASK_DEFAULT;
-#endif
 
     /* copy animation control values to new field */
     GfxFrame[newx][newy]  = GfxFrame[x][y];
@@ -5415,7 +5426,7 @@ static void ChangeElementNowExt(int x, int y, int target_element)
 
   DrawLevelField(x, y);
 
-  if (CAN_BE_CRUMBLED(Feld[x][y]))
+  if (GFX_CRUMBLED(Feld[x][y]))
     DrawLevelFieldCrumbledSandNeighbours(x, y);
 
   TestIfBadThingTouchesHero(x, y);
@@ -5551,14 +5562,17 @@ static void ChangeElement(int x, int y, int page)
   int element = MovingOrBlocked2Element(x, y);
   struct ElementChangeInfo *change = &element_info[element].change_page[page];
 
+#if 0
 #ifdef DEBUG
   if (!CAN_CHANGE(element))
   {
-    printf("\n\n\n");
-    printf("ChangeElement(): element = %d\n", element);
-    printf("Explode(): This should never happen!\n");
-    printf("\n\n\n");
+    printf("\n\n");
+    printf("ChangeElement(): %d,%d: element = %d ('%s')\n",
+          x, y, element, element_info[element].token_name);
+    printf("ChangeElement(): This should never happen!\n");
+    printf("\n\n");
   }
+#endif
 #endif
 
   if (ChangeDelay[x][y] == 0)          /* initialize element change */
@@ -7626,7 +7640,7 @@ int DigField(struct PlayerInfo *player,
          GfxElement[x][y] = GFX_ELEMENT(element);
 #else
          GfxElement[x][y] =
-           (CAN_BE_CRUMBLED(element) ? EL_SAND : GFX_ELEMENT(element));
+           (GFX_CRUMBLED(element) ? EL_SAND : GFX_ELEMENT(element));
 #endif
          player->is_digging = TRUE;
        }