fixed compiler warnings (after adding "-Wstrict-prototypes")
[rocksndiamonds.git] / src / anim.c
index 1623cdc4685b6da6d5c8ae52c862e3256e41aa56..b79d5cc6f6a0089b56cab8b21ab0ed8e17b4324e 100644 (file)
@@ -198,8 +198,8 @@ struct AnimClassGameMode
 /* forward declaration for internal use */
 static void HandleGlobalAnim(int, int);
 static void DoAnimationExt(void);
-static void ResetGlobalAnim_Clickable();
-static void ResetGlobalAnim_Clicked();
+static void ResetGlobalAnim_Clickable(void);
+static void ResetGlobalAnim_Clicked(void);
 
 static struct GlobalAnimControlInfo global_anim_ctrl[NUM_GAME_MODES];
 
@@ -325,7 +325,7 @@ static int compareGlobalAnimMainControlInfo(const void *obj1, const void *obj2)
   return compare_result;
 }
 
-static void InitToonControls()
+static void InitToonControls(void)
 {
   int mode_nr_toons = GAME_MODE_PSEUDO_TOONS;
   struct GlobalAnimControlInfo *ctrl = &global_anim_ctrl[mode_nr_toons];
@@ -407,7 +407,7 @@ static void InitToonControls()
   ctrl->num_anims++;
 }
 
-void InitGlobalAnimControls()
+void InitGlobalAnimControls(void)
 {
   int i, m, a, p;
   int mode_nr, anim_nr, part_nr;
@@ -568,7 +568,7 @@ void InitGlobalAnimControls()
   anim_classes_last = ANIM_CLASS_NONE;
 }
 
-void InitGlobalAnimations()
+void InitGlobalAnimations(void)
 {
   InitGlobalAnimControls();
 }
@@ -959,6 +959,28 @@ static void StopGlobalAnimSoundAndMusic(struct GlobalAnimPartControlInfo *part)
   StopGlobalAnimMusic(part);
 }
 
+static void PlayGlobalAnimSoundIfLoop(struct GlobalAnimPartControlInfo *part)
+{
+  // when drawing animations to fading buffer, do not play sounds
+  if (drawing_to_fading_buffer)
+    return;
+
+  // loop sounds only expire when playing
+  if (game_status != GAME_MODE_PLAYING)
+    return;
+
+  // check if any sound is defined for this animation part
+  if (part->sound == SND_UNDEFINED)
+    return;
+
+  // normal (non-loop) sounds do not expire when playing
+  if (!IS_LOOP_SOUND(part->sound))
+    return;
+
+  // prevent expiring loop sounds when playing
+  PlayGlobalAnimSound(part);
+}
+
 static boolean isClickablePart(struct GlobalAnimPartControlInfo *part, int mask)
 {
   struct GraphicInfo *c = &part->control_info;
@@ -1229,6 +1251,9 @@ int HandleGlobalAnim_Part(struct GlobalAnimPartControlInfo *part, int state)
     return ANIM_STATE_WAITING;
   }
 
+  // special case to prevent expiring loop sounds when playing
+  PlayGlobalAnimSoundIfLoop(part);
+
   if (!DelayReachedExt(&part->step_delay, part->step_delay_value,
                       anim_sync_frame))
     return ANIM_STATE_RUNNING;
@@ -1428,7 +1453,7 @@ static void HandleGlobalAnim(int action, int game_mode)
   HandleGlobalAnim_Mode(&global_anim_ctrl[game_mode], action);
 }
 
-static void DoAnimationExt()
+static void DoAnimationExt(void)
 {
   int i;
 
@@ -1466,7 +1491,7 @@ static boolean DoGlobalAnim_EventAction(struct GlobalAnimPartControlInfo *part)
   return action_executed;
 }
 
-static void InitGlobalAnim_Clickable()
+static void InitGlobalAnim_Clickable(void)
 {
   int mode_nr;
 
@@ -1617,12 +1642,12 @@ static boolean InitGlobalAnim_Clicked(int mx, int my, boolean clicked)
   return (anything_clicked || any_event_action);
 }
 
-static void ResetGlobalAnim_Clickable()
+static void ResetGlobalAnim_Clickable(void)
 {
   InitGlobalAnim_Clickable();
 }
 
-static void ResetGlobalAnim_Clicked()
+static void ResetGlobalAnim_Clicked(void)
 {
   InitGlobalAnim_Clicked(-1, -1, FALSE);
 }