fixed acid animation for elements falling/moving into (GFX engine change)
authorHolger Schemel <info@artsoft.org>
Mon, 28 Nov 2016 21:39:56 +0000 (22:39 +0100)
committerHolger Schemel <info@artsoft.org>
Mon, 28 Nov 2016 21:39:56 +0000 (22:39 +0100)
src/game.c
src/tools.c

index 7930740..de245df 100644 (file)
@@ -11483,7 +11483,7 @@ void GameActions_RND()
 
     ResetGfxFrame(x, y);
 
-    if (GfxFrame[x][y] != last_gfx_frame)
+    if (GfxFrame[x][y] != last_gfx_frame && !Stop[x][y])
       DrawLevelGraphicAnimation(x, y, graphic);
 
     if (ANIM_MODE(graphic) == ANIM_RANDOM &&
@@ -11529,8 +11529,12 @@ void GameActions_RND()
       if (IS_GEM(element) || element == EL_SP_INFOTRON)
        TEST_DrawTwinkleOnField(x, y);
     }
-    else if ((element == EL_ACID ||
-             element == EL_EXIT_OPEN ||
+    else if (element == EL_ACID)
+    {
+      if (!Stop[x][y])
+       DrawLevelGraphicAnimationIfNeeded(x, y, graphic);
+    }
+    else if ((element == EL_EXIT_OPEN ||
              element == EL_EM_EXIT_OPEN ||
              element == EL_SP_EXIT_OPEN ||
              element == EL_STEEL_EXIT_OPEN ||
index 2ca18cf..133a826 100644 (file)
@@ -2322,6 +2322,10 @@ void DrawScreenField(int x, int y)
       int newly = ly + (dir == MV_UP   ? -1 : dir == MV_DOWN  ? +1 : 0);
 
       DrawLevelElementThruMask(newlx, newly, EL_ACID);
+
+      // prevent target field from being drawn again (but without masking)
+      // (this would happen if target field is scanned after moving element)
+      Stop[newlx][newly] = TRUE;
     }
   }
   else if (IS_BLOCKED(lx, ly))