code cleanup
[rocksndiamonds.git] / src / anim.c
index 6f902d979e1b0a56e97b5f56009b3f1b70da7959..fa124cb6ab692e957125a060b0d8ffe0a013ef96 100644 (file)
@@ -600,6 +600,11 @@ void DrawGlobalAnimationsExt(int drawing_target, int drawing_stage)
     if (drawing_target == DRAW_TO_FADE_TARGET)
       after_fading = TRUE;
 
+    // special case: changing from/to this screen is done without fading
+    if (global.anim_status == GAME_MODE_PSEUDO_TYPENAME ||
+       anim_status_last   == GAME_MODE_PSEUDO_TYPENAME)
+      after_fading = TRUE;
+
     // ---------- part 1 ------------------------------------------------------
     // start or stop global animations by change of game mode
     // (special handling of animations for "current screen" and "all screens")
@@ -1243,7 +1248,9 @@ void HandleGlobalAnim_Main(struct GlobalAnimMainControlInfo *anim, int action)
 {
   struct GlobalAnimPartControlInfo *part;
   struct GraphicInfo *c = &anim->control_info;
+  int num_parts = anim->num_parts + (anim->has_base ? 1 : 0);
   int state, active_part_nr;
+  int i;
 
 #if 0
   printf("::: HandleGlobalAnim_Main: %d, %d => %d\n",
@@ -1284,13 +1291,8 @@ void HandleGlobalAnim_Main(struct GlobalAnimMainControlInfo *anim, int action)
     case ANIM_STOP:
       anim->state = ANIM_STATE_INACTIVE;
 
-      {
-       int num_parts = anim->num_parts + (anim->has_base ? 1 : 0);
-       int i;
-
-       for (i = 0; i < num_parts; i++)
-         StopGlobalAnimSoundAndMusic(&anim->part[i]);
-      }
+      for (i = 0; i < num_parts; i++)
+       StopGlobalAnimSoundAndMusic(&anim->part[i]);
 
       return;
 
@@ -1300,9 +1302,6 @@ void HandleGlobalAnim_Main(struct GlobalAnimMainControlInfo *anim, int action)
 
   if (c->anim_mode & ANIM_ALL || anim->num_parts == 0)
   {
-    int num_parts = anim->num_parts + (anim->has_base ? 1 : 0);
-    int i;
-
 #if 0
     printf("::: HandleGlobalAnim_Main: %d, %d => %d\n",
           anim->mode_nr, anim->nr, num_parts);
@@ -1464,7 +1463,8 @@ static boolean InitGlobalAnim_Clicked(int mx, int my, boolean clicked)
   boolean any_part_clicked = FALSE;
   int mode_nr;
 
-  for (mode_nr = 0; mode_nr < NUM_GAME_MODES; mode_nr++)
+  // check game modes in reverse draw order (to stop when clicked)
+  for (mode_nr = NUM_GAME_MODES - 1; mode_nr >= 0; mode_nr--)
   {
     struct GlobalAnimControlInfo *ctrl = &global_anim_ctrl[mode_nr];
     int anim_nr;