renamed program info directory
[rocksndiamonds.git] / src / libgame / setup.c
index 3557e949273a30f1c3ffc5f3ddd7b456af62ac2b..0382a4d7a2e53b315d4fe68d68e7770238bd1e5f 100644 (file)
@@ -70,6 +70,7 @@ static int token_comment_position = TOKEN_COMMENT_POSITION_DEFAULT;
 static SetupFileHash *artworkinfo_cache_old = NULL;
 static SetupFileHash *artworkinfo_cache_new = NULL;
 static SetupFileHash *optional_tokens_hash = NULL;
+static SetupFileHash *missing_file_hash = NULL;
 static boolean use_artworkinfo_cache = TRUE;
 static boolean update_artworkinfo_cache = FALSE;
 
@@ -78,6 +79,16 @@ static boolean update_artworkinfo_cache = FALSE;
 // file functions
 // ----------------------------------------------------------------------------
 
+static void WarnUsingFallback(char *filename)
+{
+  if (getHashEntry(missing_file_hash, filename) == NULL)
+  {
+    setHashEntry(missing_file_hash, filename, "");
+
+    Warn("cannot find artwork file '%s' (using fallback)", filename);
+  }
+}
+
 static char *getLevelClassDescription(TreeInfo *ti)
 {
   int position = ti->sort_priority / 100;
@@ -153,6 +164,19 @@ static char *getScoreTapeDir(char *level_subdir, int nr)
   return score_tape_dir;
 }
 
+static char *getScoreCacheTapeDir(char *level_subdir, int nr)
+{
+  static char *score_cache_tape_dir = NULL;
+  char tape_subdir[MAX_FILENAME_LEN];
+
+  checked_free(score_cache_tape_dir);
+
+  sprintf(tape_subdir, "%03d", nr);
+  score_cache_tape_dir = getPath2(getScoreCacheDir(level_subdir), tape_subdir);
+
+  return score_cache_tape_dir;
+}
+
 static char *getUserSubdir(int nr)
 {
   static char user_subdir[16] = { 0 };
@@ -694,6 +718,21 @@ char *getScoreTapeFilename(char *basename_no_ext, int nr)
   return filename;
 }
 
+char *getScoreCacheTapeFilename(char *basename_no_ext, int nr)
+{
+  static char *filename = NULL;
+  char basename[MAX_FILENAME_LEN];
+
+  checked_free(filename);
+
+  sprintf(basename, "%s.%s", basename_no_ext, TAPEFILE_EXTENSION);
+
+  // used instead of "leveldir_current->subdir" (for network games)
+  filename = getPath2(getScoreCacheTapeDir(levelset.identifier, nr), basename);
+
+  return filename;
+}
+
 char *getSetupFilename(void)
 {
   static char *filename = NULL;
@@ -900,7 +939,7 @@ char *getProgramInfoFilename(int nr)
   static char *filename = NULL;
 
   if (info_subdir == NULL)
-    info_subdir = getPath2(DOCS_DIRECTORY, INFO_DIRECTORY);
+    info_subdir = getPath2(DOCS_DIRECTORY, PROGRAM_INFO_DIRECTORY);
 
   checked_free(filename);
 
@@ -976,7 +1015,7 @@ char *getCustomImageFilename(char *basename)
   {
     free(filename);
 
-    Warn("cannot find artwork file '%s' (using fallback)", basename);
+    WarnUsingFallback(basename);
 
     // 6th try: look for fallback artwork in old default artwork directory
     // (needed to prevent errors when trying to access unused artwork files)
@@ -1047,7 +1086,7 @@ char *getCustomSoundFilename(char *basename)
   {
     free(filename);
 
-    Warn("cannot find artwork file '%s' (using fallback)", basename);
+    WarnUsingFallback(basename);
 
     // 6th try: look for fallback artwork in old default artwork directory
     // (needed to prevent errors when trying to access unused artwork files)
@@ -1118,7 +1157,7 @@ char *getCustomMusicFilename(char *basename)
   {
     free(filename);
 
-    Warn("cannot find artwork file '%s' (using fallback)", basename);
+    WarnUsingFallback(basename);
 
     // 6th try: look for fallback artwork in old default artwork directory
     // (needed to prevent errors when trying to access unused artwork files)
@@ -1242,6 +1281,14 @@ boolean CheckTapeDirectoryUploadsComplete(char *level_subdir)
   return success;
 }
 
+void InitMissingFileHash(void)
+{
+  if (missing_file_hash == NULL)
+    freeSetupFileHash(missing_file_hash);
+
+  missing_file_hash = newSetupFileHash();
+}
+
 void InitTapeDirectory(char *level_subdir)
 {
   boolean new_tape_dir = !directoryExists(getTapeDir(level_subdir));
@@ -1276,6 +1323,13 @@ void InitScoreTapeDirectory(char *level_subdir, int nr)
   createDirectory(getScoreTapeDir(level_subdir, nr), "score tape", PERMS_PRIVATE);
 }
 
+void InitScoreCacheTapeDirectory(char *level_subdir, int nr)
+{
+  InitScoreCacheDirectory(level_subdir);
+
+  createDirectory(getScoreCacheTapeDir(level_subdir, nr), "score tape", PERMS_PRIVATE);
+}
+
 static void SaveUserLevelInfo(void);
 
 void InitUserLevelDirectory(char *level_subdir)