rnd-20070401-1-src
[rocksndiamonds.git] / src / files.c
index 88ca1817e8096b7c5b07fcb9cfb9a33707237395..cb57311a3e10dcd2bccbe551fcd9d90c2b675181 100644 (file)
@@ -7684,31 +7684,32 @@ void SaveScore(int nr)
 #define SETUP_TOKEN_SOUND_SIMPLE               4
 #define SETUP_TOKEN_TOONS                      5
 #define SETUP_TOKEN_SCROLL_DELAY               6
-#define SETUP_TOKEN_SOFT_SCROLLING             7
-#define SETUP_TOKEN_FADE_SCREENS               8
-#define SETUP_TOKEN_AUTORECORD                 9
-#define SETUP_TOKEN_SHOW_TITLESCREEN           10
-#define SETUP_TOKEN_QUICK_DOORS                        11
-#define SETUP_TOKEN_TEAM_MODE                  12
-#define SETUP_TOKEN_HANDICAP                   13
-#define SETUP_TOKEN_SKIP_LEVELS                        14
-#define SETUP_TOKEN_TIME_LIMIT                 15
-#define SETUP_TOKEN_FULLSCREEN                 16
-#define SETUP_TOKEN_FULLSCREEN_MODE            17
-#define SETUP_TOKEN_ASK_ON_ESCAPE              18
-#define SETUP_TOKEN_ASK_ON_ESCAPE_EDITOR       19
-#define SETUP_TOKEN_QUICK_SWITCH               20
-#define SETUP_TOKEN_INPUT_ON_FOCUS             21
-#define SETUP_TOKEN_PREFER_AGA_GRAPHICS                22
-#define SETUP_TOKEN_GAME_FRAME_DELAY           23
-#define SETUP_TOKEN_GRAPHICS_SET               24
-#define SETUP_TOKEN_SOUNDS_SET                 25
-#define SETUP_TOKEN_MUSIC_SET                  26
-#define SETUP_TOKEN_OVERRIDE_LEVEL_GRAPHICS    27
-#define SETUP_TOKEN_OVERRIDE_LEVEL_SOUNDS      28
-#define SETUP_TOKEN_OVERRIDE_LEVEL_MUSIC       29
-
-#define NUM_GLOBAL_SETUP_TOKENS                        30
+#define SETUP_TOKEN_SCROLL_DELAY_VALUE         7
+#define SETUP_TOKEN_SOFT_SCROLLING             8
+#define SETUP_TOKEN_FADE_SCREENS               9
+#define SETUP_TOKEN_AUTORECORD                 10
+#define SETUP_TOKEN_SHOW_TITLESCREEN           11
+#define SETUP_TOKEN_QUICK_DOORS                        12
+#define SETUP_TOKEN_TEAM_MODE                  13
+#define SETUP_TOKEN_HANDICAP                   14
+#define SETUP_TOKEN_SKIP_LEVELS                        15
+#define SETUP_TOKEN_TIME_LIMIT                 16
+#define SETUP_TOKEN_FULLSCREEN                 17
+#define SETUP_TOKEN_FULLSCREEN_MODE            18
+#define SETUP_TOKEN_ASK_ON_ESCAPE              19
+#define SETUP_TOKEN_ASK_ON_ESCAPE_EDITOR       20
+#define SETUP_TOKEN_QUICK_SWITCH               21
+#define SETUP_TOKEN_INPUT_ON_FOCUS             22
+#define SETUP_TOKEN_PREFER_AGA_GRAPHICS                23
+#define SETUP_TOKEN_GAME_FRAME_DELAY           24
+#define SETUP_TOKEN_GRAPHICS_SET               25
+#define SETUP_TOKEN_SOUNDS_SET                 26
+#define SETUP_TOKEN_MUSIC_SET                  27
+#define SETUP_TOKEN_OVERRIDE_LEVEL_GRAPHICS    28
+#define SETUP_TOKEN_OVERRIDE_LEVEL_SOUNDS      29
+#define SETUP_TOKEN_OVERRIDE_LEVEL_MUSIC       30
+
+#define NUM_GLOBAL_SETUP_TOKENS                        31
 
 /* editor setup */
 #define SETUP_TOKEN_EDITOR_EL_BOULDERDASH      0
@@ -7812,6 +7813,7 @@ static struct TokenInfo global_setup_tokens[] =
   { TYPE_SWITCH, &si.sound_simple,     "simple_sound_effects"          },
   { TYPE_SWITCH, &si.toons,            "toons"                         },
   { TYPE_SWITCH, &si.scroll_delay,     "scroll_delay"                  },
+  { TYPE_INTEGER,&si.scroll_delay_value,"scroll_delay_value"           },
   { TYPE_SWITCH, &si.soft_scrolling,   "soft_scrolling"                },
   { TYPE_SWITCH, &si.fade_screens,     "fade_screens"                  },
   { TYPE_SWITCH, &si.autorecord,       "automatic_tape_recording"      },
@@ -7966,6 +7968,7 @@ static void setSetupInfoToDefaults(struct SetupInfo *si)
   si->double_buffering = TRUE;
   si->direct_draw = !si->double_buffering;
   si->scroll_delay = TRUE;
+  si->scroll_delay_value = STD_SCROLL_DELAY;
   si->soft_scrolling = TRUE;
   si->fade_screens = TRUE;
   si->autorecord = TRUE;
@@ -8169,6 +8172,17 @@ void LoadSetup()
     player_name_new = get_corrected_login_name(setup.player_name);
     free(setup.player_name);
     setup.player_name = player_name_new;
+
+    /* "scroll_delay: on(3) / off(0)" was replaced by scroll delay value */
+    if (setup.scroll_delay == FALSE)
+    {
+      setup.scroll_delay_value = MIN_SCROLL_DELAY;
+      setup.scroll_delay = TRUE;                       /* now always "on" */
+    }
+
+    /* make sure that scroll delay value stays inside valid range */
+    setup.scroll_delay_value =
+      MIN(MAX(MIN_SCROLL_DELAY, setup.scroll_delay_value), MAX_SCROLL_DELAY);
   }
   else
     Error(ERR_WARN, "using default setup values");
@@ -8408,6 +8422,43 @@ static void LoadSpecialMenuDesignSettingsFromFilename(char *filename)
       menu.draw_yoffset_info[i] = get_integer_from_string(value_2);
   }
 
+  /* special case: initialize with default values that may be overwritten */
+  /* (eg, init "menu.enter_screen.SCORES.xyz" from "menu.enter_screen.xyz") */
+  for (i = 0; i < NUM_SPECIAL_GFX_ARGS; i++)
+  {
+    char *token_1 = "menu.enter_screen.fade_mode";
+    char *token_2 = "menu.enter_screen.fade_delay";
+    char *token_3 = "menu.enter_screen.post_delay";
+    char *token_4 = "menu.leave_screen.fade_mode";
+    char *token_5 = "menu.leave_screen.fade_delay";
+    char *token_6 = "menu.leave_screen.post_delay";
+    char *value_1 = getHashEntry(setup_file_hash, token_1);
+    char *value_2 = getHashEntry(setup_file_hash, token_2);
+    char *value_3 = getHashEntry(setup_file_hash, token_3);
+    char *value_4 = getHashEntry(setup_file_hash, token_4);
+    char *value_5 = getHashEntry(setup_file_hash, token_5);
+    char *value_6 = getHashEntry(setup_file_hash, token_6);
+
+    if (value_1 != NULL)
+      menu.enter_screen[i].fade_mode = get_token_parameter_value(token_1,
+                                                                value_1);
+    if (value_2 != NULL)
+      menu.enter_screen[i].fade_delay = get_token_parameter_value(token_2,
+                                                                 value_2);
+    if (value_3 != NULL)
+      menu.enter_screen[i].post_delay = get_token_parameter_value(token_3,
+                                                                 value_3);
+    if (value_4 != NULL)
+      menu.leave_screen[i].fade_mode = get_token_parameter_value(token_4,
+                                                                value_4);
+    if (value_5 != NULL)
+      menu.leave_screen[i].fade_delay = get_token_parameter_value(token_5,
+                                                                 value_5);
+    if (value_6 != NULL)
+      menu.leave_screen[i].post_delay = get_token_parameter_value(token_6,
+                                                                 value_6);
+  }
+
   /* special case: initialize with default values that may be overwritten */
   /* (e.g., init "titlemessage_1.fade_mode" from "[titlemessage].fade_mode") */
   for (i = 0; titlemessage_arrays[i].array != NULL; i++)
@@ -8488,6 +8539,14 @@ void LoadSpecialMenuDesignSettings()
     titlemessage[i] = titlemessage_default;
   }
 
+  /* special case: initialize "ARG_DEFAULT" values in static default config */
+  /* (eg, init "menu.enter_screen.SCORES.xyz" from "menu.enter_screen.xyz") */
+  for (i = 0; i < NUM_SPECIAL_GFX_ARGS; i++)
+  {
+    menu.enter_screen[i] = menu.enter_screen[GFX_SPECIAL_ARG_DEFAULT];
+    menu.leave_screen[i] = menu.leave_screen[GFX_SPECIAL_ARG_DEFAULT];
+  }
+
   if (!SETUP_OVERRIDE_ARTWORK(setup, ARTWORK_TYPE_GRAPHICS))
   {
     /* first look for special settings configured in level series config */