changed loading level before checking for title screens
[rocksndiamonds.git] / src / screens.c
index 54236dc840a8b1ff174ba99a153c986e6c5ec2ec..aadbe74dcaf486c587c8fe59496d0f4b547695a5 100644 (file)
@@ -1785,6 +1785,15 @@ void DrawMainMenu(void)
   // store first level of this level set for "level_nr" style animations
   SetAnimationFirstLevel(leveldir_current->first_level);
 
+  // level_nr may have been set to value over handicap with level editor
+  if (setup.handicap && level_nr > leveldir_current->handicap_level)
+    level_nr = leveldir_current->handicap_level;
+
+  LoadLevel(level_nr);
+  LoadScore(level_nr);
+
+  SaveLevelSetup_SeriesInfo();
+
   // needed if last screen (level choice) changed graphics, sounds or music
   ReloadCustomArtwork(0);
 
@@ -1810,15 +1819,6 @@ void DrawMainMenu(void)
 
   SetDrawtoField(DRAW_TO_BACKBUFFER);
 
-  // level_nr may have been set to value over handicap with level editor
-  if (setup.handicap && level_nr > leveldir_current->handicap_level)
-    level_nr = leveldir_current->handicap_level;
-
-  LoadLevel(level_nr);
-  LoadScore(level_nr);
-
-  SaveLevelSetup_SeriesInfo();
-
   // set this after "ChangeViewportPropertiesIfNeeded()" (which may reset it)
   SetDrawDeactivationMask(REDRAW_NONE);
   SetDrawBackgroundMask(REDRAW_FIELD);
@@ -2131,8 +2131,10 @@ static void HandleMainMenu_SelectLevel(int step, int direction,
   if (setup.handicap && new_level_nr > leveldir_current->handicap_level)
   {
     // skipping levels is only allowed when trying to skip single level
-    if (setup.skip_levels && new_level_nr == old_level_nr + 1 &&
-       Request("Level still unsolved! Skip it anyway?", REQ_ASK))
+    // (also, skipping BD style intermission levels is always possible)
+    if (new_level_nr == old_level_nr + 1 &&
+       (level.bd_intermission ||
+        (setup.skip_levels && Request("Level still unsolved! Skip it anyway?", REQ_ASK))))
     {
       leveldir_current->handicap_level++;
       SaveLevelSetup_SeriesInfo();
@@ -7469,6 +7471,7 @@ static struct TokenInfo setup_info_engines[] =
   { TYPE_SWITCH,       &setup.bd_skip_uncovering,      "Skip (un)covering screen:"     },
   { TYPE_SWITCH,       &setup.bd_skip_hatching,        "Skip hatching player:"         },
   { TYPE_SWITCH,       &setup.bd_scroll_delay,         "Scroll Delay:"                 },
+  { TYPE_YES_NO_AUTO,  &setup.bd_smooth_movements,     "Smooth Element Movement:"      },
   { TYPE_EMPTY,                NULL,                           ""                              },
   { TYPE_HEADLINE,     NULL,                           "Emerald Mine"                  },
   { TYPE_SWITCH,       &setup.forced_scroll_delay,     "Scroll Delay:"                 },
@@ -10288,7 +10291,7 @@ static void MapScreenGadgets(int num_entries)
     MapGadget(screen_gadget[scrollbar_info[i].gadget_id]);
 }
 
-static void UnmapScreenGadgets()
+static void UnmapScreenGadgets(void)
 {
   int i;