fixed one-frame delay when global animations leave "init" state
[rocksndiamonds.git] / src / anim.c
index 68147f0bc06ac100e36e0a51135864a93b587e84..de94b17f88abb50a3a3fc41ce4e0c4e1c27accde 100644 (file)
@@ -1393,7 +1393,7 @@ static void InitGlobalAnim_Triggered_ByCustomElement(int nr, int page,
       if (!(part2->state & ANIM_STATE_RUNNING))
        continue;
 
-      if (isClickablePart(part2, mask))
+      if (isClickablePart(part2, mask) && !part2->triggered)
       {
        struct GraphicInfo *c = &part2->control_info;
 
@@ -1598,7 +1598,7 @@ static int HandleGlobalAnim_Part(struct GlobalAnimPartControlInfo *part,
     if (part->initial_anim_sync_frame > 0)
     {
       if (part->init_delay_counter > 0)
-       part->initial_anim_sync_frame -= part->init_delay_counter - 1;
+       part->initial_anim_sync_frame -= part->init_delay_counter;
       else
        part->initial_anim_sync_frame = anim_sync_frame;
     }
@@ -1630,9 +1630,13 @@ static int HandleGlobalAnim_Part(struct GlobalAnimPartControlInfo *part,
 
       HandleGlobalAnimDelay(part, ANIM_DELAY_INIT,  "START [INIT_DELAY]");
       HandleGlobalAnimEvent(part, ANIM_EVENT_START, "START [ANIM]");
-    }
 
-    return ANIM_STATE_WAITING;
+      // continue with state ANIM_STATE_RUNNING (set below)
+    }
+    else
+    {
+      return ANIM_STATE_WAITING;
+    }
   }
 
   if (part->init_event_state)