fixed bug with global animation at wrong playfield position for one frame
authorHolger Schemel <info@artsoft.org>
Thu, 26 Oct 2023 08:18:20 +0000 (10:18 +0200)
committerHolger Schemel <info@artsoft.org>
Thu, 26 Oct 2023 08:18:20 +0000 (10:18 +0200)
This fixes a bug that should have been fixed with commit 03202ac7.

While the above commit fixes the problem for some cases, it still does
not work correctly if a global animation with ".position: ce" has two
"ce_change" events defined with ".init_event" and ".anim_event". While
the first one starts the animation (and should therefore place the
animation at the CE position), the second one stops the animation (and
starts the next part of the animation, if existing), so it should not
change the position to the second CE (which would only be used for one
single game frame and then changed to the animation position defined
by the next part of the animation).

src/anim.c

index c457936bcd7582b48c65f3c0c2143ea7753e993b..ee2e1ede3fa881b979cabb5aa548acd5a617ba64 100644 (file)
@@ -1468,7 +1468,9 @@ static void InitGlobalAnim_Triggered_ByCustomElement(int nr, int page,
          part2->tile_yoffset = c->y;
 
          // set resulting animation position relative to CE tile position
-         SetGlobalAnimPartTileXY(part2);
+         // (but only for ".init_event", not ".anim_event" type events)
+         if (part2->init_event_state)
+           SetGlobalAnimPartTileXY(part2);
 
          // restart animation (by using current sync frame)
          part2->initial_anim_sync_frame = anim_sync_frame;