rnd-20060111-1-src
[rocksndiamonds.git] / src / game.c
index c9eb9360017fc84207d7f1505fde9b40e53d86bd..052239346ffc65f545296b98070c120881393cf3 100644 (file)
@@ -6608,10 +6608,11 @@ static void RunTimegateWheel(int x, int y)
 
 static void InitMagicBallDelay(int x, int y)
 {
-  ChangeDelay[x][y] = level.ball_time * FRAMES_PER_SECOND;
-
-  if (ChangeDelay[x][y] == 0)
-    ChangeDelay[x][y] = 1;
+#if 1
+  ChangeDelay[x][y] = (level.ball_time + 1) * 8 + 1;
+#else
+  ChangeDelay[x][y] = level.ball_time * FRAMES_PER_SECOND + 1;
+#endif
 }
 
 static void ActivateMagicBall(int bx, int by)
@@ -7419,19 +7420,19 @@ static void ExecuteCustomElementAction(int x, int y, int element, int page)
   }
 }
 
-static void CreateField(int x, int y, int target_element)
+static void CreateFieldExt(int x, int y, int element, boolean is_change)
 {
   int previous_move_direction = MovDir[x][y];
 #if USE_NEW_CUSTOM_VALUE
   int last_ce_value = CustomValue[x][y];
 #endif
-  boolean add_player = (ELEM_IS_PLAYER(target_element) &&
+  boolean add_player = (ELEM_IS_PLAYER(element) &&
                        IS_WALKABLE(Feld[x][y]));
 
   /* check if element under player changes from accessible to unaccessible
      (needed for special case of dropping element which then changes) */
   if (IS_PLAYER(x, y) && !PLAYER_EXPLOSION_PROTECTED(x, y) &&
-      IS_ACCESSIBLE(Feld[x][y]) && !IS_ACCESSIBLE(target_element))
+      IS_ACCESSIBLE(Feld[x][y]) && !IS_ACCESSIBLE(element))
   {
     Bang(x, y);
 
@@ -7445,7 +7446,7 @@ static void CreateField(int x, int y, int target_element)
     else
       RemoveField(x, y);
 
-    Feld[x][y] = target_element;
+    Feld[x][y] = element;
 
     ResetGfxAnimation(x, y);
     ResetRandomAnimationValue(x, y);
@@ -7467,23 +7468,25 @@ static void CreateField(int x, int y, int target_element)
   }
 
   /* "ChangeCount" not set yet to allow "entered by player" change one time */
-  if (ELEM_IS_PLAYER(target_element))
-    RelocatePlayer(x, y, target_element);
+  if (ELEM_IS_PLAYER(element))
+    RelocatePlayer(x, y, element);
 
-#if 0
-  ChangeCount[x][y]++;         /* count number of changes in the same frame */
-#endif
+  if (is_change)
+    ChangeCount[x][y]++;       /* count number of changes in the same frame */
 
   TestIfBadThingTouchesPlayer(x, y);
   TestIfPlayerTouchesCustomElement(x, y);
   TestIfElementTouchesCustomElement(x, y);
 }
 
-static void CreateElementFromChange(int x, int y, int element)
+static void CreateField(int x, int y, int element)
 {
-  CreateField(x, y, element);
+  CreateFieldExt(x, y, element, FALSE);
+}
 
-  ChangeCount[x][y]++;         /* count number of changes in the same frame */
+static void CreateElementFromChange(int x, int y, int element)
+{
+  CreateFieldExt(x, y, element, TRUE);
 }
 
 static boolean ChangeElement(int x, int y, int element, int page)