added checking for help anim/text files in different locations
authorHolger Schemel <holger.schemel@virtion.de>
Tue, 18 Jun 2024 20:08:39 +0000 (22:08 +0200)
committerHolger Schemel <holger.schemel@virtion.de>
Tue, 18 Jun 2024 20:08:39 +0000 (22:08 +0200)
Instead of only checking for help anim/text files in the current level
set directory, these files are now also checked for

- in the configured graphics set directory
- in the path from the current to the topmost level set directory

This adds some flexibility and optimization for adding help anim/text
files for large level collections that all use the same help files.

src/libgame/setup.c

index 53659bddbe8a2840e8b514e7f878d5d5119d10ce..fb63321bd2499bebec9a95c4dc63055f9bd6e30f 100644 (file)
@@ -823,26 +823,42 @@ char *getFilenameFromCurrentLevelDirUpward(char *basename)
   return filename;
 }
 
-char *getHelpAnimFilename(void)
+static char *getHelpFilename(char *basename)
 {
   static char *filename = NULL;
 
   checked_free(filename);
 
-  filename = getPath2(getCurrentLevelDir(), HELPANIM_FILENAME);
+  // 1st try: look for help filename in current level set directory
+  filename = getPath2(getCurrentLevelDir(), basename);
+  if (fileExists(filename))
+    return filename;
 
-  return filename;
-}
+  free(filename);
 
-char *getHelpTextFilename(void)
-{
-  static char *filename = NULL;
+  // 2nd try: look for help filename in configured graphics set directory
+  filename = getPath2(getLevelArtworkDir(ARTWORK_TYPE_GRAPHICS), basename);
+  if (fileExists(filename))
+    return filename;
 
-  checked_free(filename);
+  free(filename);
 
-  filename = getPath2(getCurrentLevelDir(), HELPTEXT_FILENAME);
+  // 3rd try: look for help filename in path from current to topmost level set directory
+  filename = getStringCopy(getFilenameFromCurrentLevelDirUpward(basename));
+  if (fileExists(filename))
+    return filename;
 
-  return filename;
+  return NULL;
+}
+
+char *getHelpAnimFilename(void)
+{
+  return getHelpFilename(HELPANIM_FILENAME);
+}
+
+char *getHelpTextFilename(void)
+{
+  return getHelpFilename(HELPTEXT_FILENAME);
 }
 
 static char *getLevelSetInfoBasename(int nr)