fixed bug with (soundless) classic toons playing wrong default sound
[rocksndiamonds.git] / src / cartoons.c
index 97e2ee43126ffbed0f9f91e3a66e6b68a9d21e7f..e90b2e58f9228644446b08233649f91a75c2a8fb 100644 (file)
@@ -306,12 +306,14 @@ static void InitToonControls()
   for (i = 0; i < num_toons; i++)
   {
     struct GlobalAnimPartControlInfo *part = &anim->part[part_nr];
+    int sound = SND_UNDEFINED;
     int graphic = IMG_TOON_1 + i;
     int control = graphic;
 
     part->nr = part_nr;
     part->anim_nr = anim_nr;
     part->mode_nr = mode_nr;
+    part->sound = sound;
     part->graphic = graphic;
     part->graphic_info = graphic_info[graphic];
     part->control_info = graphic_info[control];
@@ -865,14 +867,15 @@ int HandleGlobalAnim_Part(struct GlobalAnimPartControlInfo *part, int state)
     if (part->anim_delay_counter == 0 &&
        part->post_delay_counter == 0)
     {
+      StopGlobalAnimSound(part);
+
       part->post_delay_counter =
        (c->post_delay_fixed + GetSimpleRandom(c->post_delay_random));
 
       if (part->post_delay_counter > 0)
        return ANIM_STATE_RUNNING;
 
-      StopGlobalAnimSound(part);
-
+      // drawing last frame not needed here -- animation not visible anymore
       return ANIM_STATE_RESTART;
     }
   }
@@ -883,14 +886,14 @@ int HandleGlobalAnim_Part(struct GlobalAnimPartControlInfo *part, int state)
 
     if (part->anim_delay_counter == 0)
     {
+      StopGlobalAnimSound(part);
+
       part->post_delay_counter =
        (c->post_delay_fixed + GetSimpleRandom(c->post_delay_random));
 
       if (part->post_delay_counter > 0)
        return ANIM_STATE_RUNNING;
 
-      StopGlobalAnimSound(part);
-
       // additional state "RUNNING" required to not skip drawing last frame
       return ANIM_STATE_RESTART | ANIM_STATE_RUNNING;
     }
@@ -900,9 +903,6 @@ int HandleGlobalAnim_Part(struct GlobalAnimPartControlInfo *part, int state)
   {
     part->post_delay_counter--;
 
-    if (part->post_delay_counter == 0)
-      StopGlobalAnimSound(part);
-
     if (part->post_delay_counter == 0)
       return ANIM_STATE_RESTART;