X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame.c;h=052239346ffc65f545296b98070c120881393cf3;hb=1e5cae5e3ab889c3bcba80a065c6d7ba1e6d28a2;hp=c9eb9360017fc84207d7f1505fde9b40e53d86bd;hpb=4761c712e043542d6bfd4ce58501ee6c6af68bd3;p=rocksndiamonds.git diff --git a/src/game.c b/src/game.c index c9eb9360..05223934 100644 --- a/src/game.c +++ b/src/game.c @@ -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)