rnd-20070927-1-src
[rocksndiamonds.git] / src / libgame / setup.c
index 3ff14a1ca9cc614cd7c8d4998c9a5c4c85f1ace8..df1dac7b45043d99c7c8ff48c3ab2ecfbbb90b1a 100644 (file)
@@ -262,6 +262,26 @@ static char *getDefaultMusicDir(char *music_subdir)
   return music_dir;
 }
 
+#if 1
+static char *getDefaultArtworkSet(int type)
+{
+  return (type == TREE_TYPE_GRAPHICS_DIR ? "gfx_classic" :
+         type == TREE_TYPE_SOUNDS_DIR   ? "snd_classic" :
+         type == TREE_TYPE_MUSIC_DIR    ? "mus_classic" : "");
+}
+
+static char *getDefaultArtworkDir(int type)
+{
+  return (type == TREE_TYPE_GRAPHICS_DIR ?
+         getDefaultGraphicsDir("gfx_classic") :
+         type == TREE_TYPE_SOUNDS_DIR ?
+         getDefaultSoundsDir("snd_classic") :
+         type == TREE_TYPE_MUSIC_DIR ?
+         getDefaultMusicDir("mus_classic") : "");
+}
+
+#else
+
 static char *getDefaultArtworkSet(int type)
 {
   return (type == TREE_TYPE_GRAPHICS_DIR ? GFX_CLASSIC_SUBDIR :
@@ -278,6 +298,7 @@ static char *getDefaultArtworkDir(int type)
          type == TREE_TYPE_MUSIC_DIR ?
          getDefaultMusicDir(MUS_CLASSIC_SUBDIR) : "");
 }
+#endif
 
 static char *getUserGraphicsDir()
 {
@@ -498,21 +519,80 @@ char *getLevelSetInfoFilename()
   return NULL;
 }
 
-char *getLevelSetTitleMessageFilename(int nr, boolean initial)
+char *getLevelSetTitleMessageBasename(int nr, boolean initial)
 {
-  static char *filename = NULL;
-  char basename[32];
+  static char basename[32];
 
   sprintf(basename, "%s_%d.txt",
          (initial ? "titlemessage_initial" : "titlemessage"), nr + 1);
 
+  return basename;
+}
+
+char *getLevelSetTitleMessageFilename(int nr, boolean initial)
+{
+  static char *filename = NULL;
+  char *basename;
+  boolean skip_setup_artwork = FALSE;
+
   checked_free(filename);
-  filename = getPath2(getCurrentLevelDir(), basename);
 
+  basename = getLevelSetTitleMessageBasename(nr, initial);
+
+  if (!gfx.override_level_graphics)
+  {
+    /* 1st try: look for special artwork in current level series directory */
+    filename = getPath3(getCurrentLevelDir(), GRAPHICS_DIRECTORY, basename);
+    if (fileExists(filename))
+      return filename;
+
+    free(filename);
+
+    /* 2nd try: look for message file in current level set directory */
+    filename = getPath2(getCurrentLevelDir(), basename);
+    if (fileExists(filename))
+      return filename;
+
+    free(filename);
+
+    /* check if there is special artwork configured in level series config */
+    if (getLevelArtworkSet(ARTWORK_TYPE_GRAPHICS) != NULL)
+    {
+      /* 3rd try: look for special artwork configured in level series config */
+      filename = getPath2(getLevelArtworkDir(ARTWORK_TYPE_GRAPHICS), basename);
+      if (fileExists(filename))
+       return filename;
+
+      free(filename);
+
+      /* take missing artwork configured in level set config from default */
+      skip_setup_artwork = TRUE;
+    }
+  }
+
+  if (!skip_setup_artwork)
+  {
+    /* 4th try: look for special artwork in configured artwork directory */
+    filename = getPath2(getSetupArtworkDir(artwork.gfx_current), basename);
+    if (fileExists(filename))
+      return filename;
+
+    free(filename);
+  }
+
+  /* 5th try: look for default artwork in new default artwork directory */
+  filename = getPath2(getDefaultGraphicsDir(GFX_CLASSIC_SUBDIR), basename);
   if (fileExists(filename))
     return filename;
 
-  return NULL;
+  free(filename);
+
+  /* 6th try: look for default artwork in old default artwork directory */
+  filename = getPath2(options.graphics_directory, basename);
+  if (fileExists(filename))
+    return filename;
+
+  return NULL;         /* cannot find specified artwork file anywhere */
 }
 
 static char *getCorrectedArtworkBasename(char *basename)
@@ -556,7 +636,7 @@ char *getCustomImageFilename(char *basename)
 
   basename = getCorrectedArtworkBasename(basename);
 
-  if (!setup.override_level_graphics)
+  if (!gfx.override_level_graphics)
   {
     /* 1st try: look for special artwork in current level series directory */
     filename = getPath3(getCurrentLevelDir(), GRAPHICS_DIRECTORY, basename);
@@ -605,7 +685,13 @@ char *getCustomImageFilename(char *basename)
 #if CREATE_SPECIAL_EDITION
   free(filename);
 
+  /* !!! INSERT WARNING HERE TO REPORT MISSING ARTWORK FILES !!! */
+#if 0
+  printf("::: MISSING ARTWORK FILE '%s'\n", basename);
+#endif
+
   /* 6th try: look for fallback artwork in old default artwork directory */
+  /* (needed to prevent errors when trying to access unused artwork files) */
   filename = getPath2(options.graphics_directory, GFX_FALLBACK_FILENAME);
   if (fileExists(filename))
     return filename;
@@ -623,7 +709,7 @@ char *getCustomSoundFilename(char *basename)
 
   basename = getCorrectedArtworkBasename(basename);
 
-  if (!setup.override_level_sounds)
+  if (!gfx.override_level_sounds)
   {
     /* 1st try: look for special artwork in current level series directory */
     filename = getPath3(getCurrentLevelDir(), SOUNDS_DIRECTORY, basename);
@@ -673,6 +759,7 @@ char *getCustomSoundFilename(char *basename)
   free(filename);
 
   /* 6th try: look for fallback artwork in old default artwork directory */
+  /* (needed to prevent errors when trying to access unused artwork files) */
   filename = getPath2(options.sounds_directory, SND_FALLBACK_FILENAME);
   if (fileExists(filename))
     return filename;
@@ -690,7 +777,7 @@ char *getCustomMusicFilename(char *basename)
 
   basename = getCorrectedArtworkBasename(basename);
 
-  if (!setup.override_level_music)
+  if (!gfx.override_level_music)
   {
     /* 1st try: look for special artwork in current level series directory */
     filename = getPath3(getCurrentLevelDir(), MUSIC_DIRECTORY, basename);
@@ -740,6 +827,7 @@ char *getCustomMusicFilename(char *basename)
   free(filename);
 
   /* 6th try: look for fallback artwork in old default artwork directory */
+  /* (needed to prevent errors when trying to access unused artwork files) */
   filename = getPath2(options.music_directory, MUS_FALLBACK_FILENAME);
   if (fileExists(filename))
     return filename;
@@ -783,7 +871,7 @@ char *getCustomMusicDirectory(void)
 
   checked_free(directory);
 
-  if (!setup.override_level_music)
+  if (!gfx.override_level_music)
   {
     /* 1st try: look for special artwork in current level series directory */
     directory = getPath2(getCurrentLevelDir(), MUSIC_DIRECTORY);
@@ -3758,6 +3846,13 @@ void LoadLevelSetup_LastSeries()
   /* always start with reliable default values */
   leveldir_current = getFirstValidTreeInfoEntry(leveldir_first);
 
+#if CREATE_SPECIAL_EDITION_RND_JUE
+  leveldir_current = getTreeInfoFromIdentifier(leveldir_first,
+                                              "jue_start");
+  if (leveldir_current == NULL)
+    leveldir_current = getFirstValidTreeInfoEntry(leveldir_first);
+#endif
+
   if ((level_setup_hash = loadSetupFileHash(filename)))
   {
     char *last_level_series =