added level info config option to invoke info screens from main menu
[rocksndiamonds.git] / src / libgame / setup.c
index 5c16feb5bb4d770855383946b907554db66e5583..e2405996731e195ec72dcd9b69ed92fa5a2ddeb2 100644 (file)
@@ -47,8 +47,6 @@ static char *levelclass_desc[NUM_LEVELCLASS_DESC] =
 #define TOKEN_VALUE_POSITION_DEFAULT           40
 #define TOKEN_COMMENT_POSITION_DEFAULT         60
 
-#define MAX_COOKIE_LEN                         256
-
 #define TREE_NODE_TYPE_DEFAULT                 0
 #define TREE_NODE_TYPE_PARENT                  1
 #define TREE_NODE_TYPE_GROUP                   2
@@ -820,9 +818,34 @@ char *getHelpTextFilename(void)
   return filename;
 }
 
-char *getLevelSetInfoFilename(void)
+static char *getLevelSetInfoBasename(int nr)
 {
+  static char basename[32];
+
+  sprintf(basename, "levelset_%d.txt", nr + 1);
+
+  return basename;
+}
+
+char *getLevelSetInfoFilename(int nr)
+{
+  char *basename = getLevelSetInfoBasename(nr);
+  static char *info_subdir = NULL;
   static char *filename = NULL;
+
+  if (info_subdir == NULL)
+    info_subdir = getPath2(DOCS_DIRECTORY, LEVELSET_INFO_DIRECTORY);
+
+  checked_free(filename);
+
+  // look for level set info file the current level set directory
+  filename = getPath3(getCurrentLevelDir(), info_subdir, basename);
+  if (fileExists(filename))
+    return filename;
+
+  if (nr > 0)
+    return NULL;
+
   char *basenames[] =
   {
     "README",
@@ -2003,21 +2026,6 @@ void SetFilePermissions(char *filename, int permission_class)
   chmod(filename, perms);
 }
 
-char *getCookie(char *file_type)
-{
-  static char cookie[MAX_COOKIE_LEN + 1];
-
-  if (strlen(program.cookie_prefix) + 1 +
-      strlen(file_type) + strlen("_FILE_VERSION_x.x") > MAX_COOKIE_LEN)
-    return "[COOKIE ERROR]";   // should never happen
-
-  sprintf(cookie, "%s_%s_FILE_VERSION_%d.%d",
-         program.cookie_prefix, file_type,
-         program.version_super, program.version_major);
-
-  return cookie;
-}
-
 void fprintFileHeader(FILE *file, char *basename)
 {
   char *prefix = "# ";
@@ -2733,8 +2741,9 @@ SetupFileHash *loadSetupFileHash(char *filename)
 #define LEVELINFO_TOKEN_TIME_LIMIT             30
 #define LEVELINFO_TOKEN_SKIP_LEVELS            31
 #define LEVELINFO_TOKEN_USE_EMC_TILES          32
+#define LEVELINFO_TOKEN_INFO_SCREENS_FROM_MAIN 33
 
-#define NUM_LEVELINFO_TOKENS                   33
+#define NUM_LEVELINFO_TOKENS                   34
 
 static LevelDirTree ldi;
 
@@ -2773,7 +2782,8 @@ static struct TokenInfo levelinfo_tokens[] =
   { TYPE_BOOLEAN,      &ldi.handicap,          "handicap"              },
   { TYPE_BOOLEAN,      &ldi.time_limit,        "time_limit"            },
   { TYPE_BOOLEAN,      &ldi.skip_levels,       "skip_levels"           },
-  { TYPE_BOOLEAN,      &ldi.use_emc_tiles,     "use_emc_tiles"         }
+  { TYPE_BOOLEAN,      &ldi.use_emc_tiles,     "use_emc_tiles"         },
+  { TYPE_BOOLEAN,      &ldi.info_screens_from_main, "info_screens_from_main" }
 };
 
 static struct TokenInfo artworkinfo_tokens[] =
@@ -2882,6 +2892,7 @@ static void setTreeInfoToDefaults(TreeInfo *ti, int type)
     ti->skip_levels = FALSE;
 
     ti->use_emc_tiles = FALSE;
+    ti->info_screens_from_main = FALSE;
   }
 }
 
@@ -2968,6 +2979,7 @@ static void setTreeInfoToDefaultsFromParent(TreeInfo *ti, TreeInfo *parent)
     ti->skip_levels = parent->skip_levels;
 
     ti->use_emc_tiles = parent->use_emc_tiles;
+    ti->info_screens_from_main = parent->info_screens_from_main;
   }
 }
 
@@ -3041,6 +3053,7 @@ static TreeInfo *getTreeInfoCopy(TreeInfo *ti)
   ti_copy->skip_levels         = ti->skip_levels;
 
   ti_copy->use_emc_tiles       = ti->use_emc_tiles;
+  ti_copy->info_screens_from_main = ti->info_screens_from_main;
 
   ti_copy->color               = ti->color;
   ti_copy->class_desc          = getStringCopy(ti->class_desc);