+static char *getSetupArtworkDir(TreeInfo *ti)
+{
+ static char *artwork_dir = NULL;
+
+ if (artwork_dir != NULL)
+ free(artwork_dir);
+
+ artwork_dir = getPath2(ti->basepath, ti->fullpath);
+
+ return artwork_dir;
+}
+
+void setLevelArtworkDir(TreeInfo *ti)
+{
+ char **artwork_path_ptr, *artwork_set;
+ TreeInfo *level_artwork;
+
+ if (ti == NULL || leveldir_current == NULL)
+ return;
+
+ artwork_path_ptr =
+ (ti->type == TREE_TYPE_GRAPHICS_DIR ? &leveldir_current->graphics_path :
+ ti->type == TREE_TYPE_SOUNDS_DIR ? &leveldir_current->sounds_path :
+ &leveldir_current->music_path);
+
+ artwork_set =
+ (ti->type == TREE_TYPE_GRAPHICS_DIR ? leveldir_current->graphics_set :
+ ti->type == TREE_TYPE_SOUNDS_DIR ? leveldir_current->sounds_set :
+ leveldir_current->music_set);
+
+ if (*artwork_path_ptr != NULL)
+ free(*artwork_path_ptr);
+
+ if ((level_artwork = getTreeInfoFromIdentifier(ti, artwork_set)))
+ *artwork_path_ptr = getStringCopy(getSetupArtworkDir(level_artwork));
+ else
+ {
+ /* No (or non-existing) artwork configured in "levelinfo.conf". This would
+ normally result in using the artwork configured in the setup menu. But
+ if an artwork subdirectory exists (which might contain custom artwork
+ or an artwork configuration file), this level artwork must be treated
+ as relative to the default "classic" artwork, not to the artwork that
+ is currently configured in the setup menu. */
+
+ char *dir = getPath2(getCurrentLevelDir(), ARTWORK_DIRECTORY(ti->type));
+
+ if (fileExists(dir))
+ *artwork_path_ptr = getStringCopy(getDefaultArtworkDir(ti->type));
+ else
+ *artwork_path_ptr = getStringCopy(UNDEFINED_FILENAME);
+
+ free(dir);
+ }
+}
+
+static char *getLevelArtworkDir(int type)
+{
+ char *artwork_path;
+
+ if (leveldir_current == NULL)
+ return UNDEFINED_FILENAME;
+
+ artwork_path =
+ (type == TREE_TYPE_GRAPHICS_DIR ? leveldir_current->graphics_path :
+ type == TREE_TYPE_SOUNDS_DIR ? leveldir_current->sounds_path :
+ type == TREE_TYPE_MUSIC_DIR ? leveldir_current->music_path :
+ UNDEFINED_FILENAME);
+
+ return artwork_path;
+}
+