+ artwork.mus_current = getFirstValidTreeInfoEntry(artwork.mus_first);
+
+ artwork.gfx_current_identifier = artwork.gfx_current->identifier;
+ artwork.snd_current_identifier = artwork.snd_current->identifier;
+ artwork.mus_current_identifier = artwork.mus_current->identifier;
+
+#if 0
+ printf("graphics set == %s\n\n", artwork.gfx_current_identifier);
+ printf("sounds set == %s\n\n", artwork.snd_current_identifier);
+ printf("music set == %s\n\n", artwork.mus_current_identifier);
+#endif
+
+ sortTreeInfo(&artwork.gfx_first, compareTreeInfoEntries);
+ sortTreeInfo(&artwork.snd_first, compareTreeInfoEntries);
+ sortTreeInfo(&artwork.mus_first, compareTreeInfoEntries);
+
+#if 0
+ dumpTreeInfo(artwork.gfx_first, 0);
+ dumpTreeInfo(artwork.snd_first, 0);
+ dumpTreeInfo(artwork.mus_first, 0);
+#endif
+}
+
+void LoadArtworkInfoFromLevelNode(ArtworkDirTree **artwork_node,
+ LevelDirTree *level_node,
+ char *artwork_directory)
+{
+ TreeInfo *topnode_last = *artwork_node;
+ char *path = getPath2(getLevelDirFromTreeInfo(level_node), artwork_directory);
+
+#if 1
+ printf("::: CHECKING '%s' ...\n", path);
+#endif
+
+ LoadArtworkInfoFromArtworkDir(artwork_node, NULL, path,(*artwork_node)->type);
+
+ if (topnode_last != *artwork_node)
+ {
+ free((*artwork_node)->identifier);
+ free((*artwork_node)->name);
+ free((*artwork_node)->name_sorting);
+
+ (*artwork_node)->identifier = getStringCopy(level_node->subdir);
+ (*artwork_node)->name = getStringCopy(level_node->name);
+ (*artwork_node)->name_sorting = getStringCopy(level_node->name);
+
+ (*artwork_node)->sort_priority = level_node->sort_priority;
+ (*artwork_node)->color = LEVELCOLOR((*artwork_node));
+ }
+
+ free(path);
+}
+
+void LoadArtworkInfoFromLevelInfo(ArtworkDirTree **artwork_node,
+ LevelDirTree *level_node)
+{
+ /* recursively check all level directories for artwork sub-directories */
+
+ while (level_node)
+ {
+ /* check all tree entries for artwork, but skip parent link entries */
+ if (!level_node->parent_link)
+ {
+#if 1
+ struct
+ {
+ int type;
+ char *dir;
+ }
+ artwork_type_dirs[] =
+ {
+ { ARTWORK_TYPE_GRAPHICS, GRAPHICS_DIRECTORY },
+ { ARTWORK_TYPE_GRAPHICS, GRAPHICS_ECS_DIRECTORY },
+ { ARTWORK_TYPE_GRAPHICS, GRAPHICS_AGA_DIRECTORY },
+ { ARTWORK_TYPE_SOUNDS, SOUNDS_DIRECTORY },
+ { ARTWORK_TYPE_MUSIC, MUSIC_DIRECTORY },
+ { -1, NULL }
+ };
+ int i;
+
+ for (i = 0; artwork_type_dirs[i].type != -1; i++)
+ if ((*artwork_node)->type == artwork_type_dirs[i].type)
+ LoadArtworkInfoFromLevelNode(artwork_node, level_node,
+ artwork_type_dirs[i].dir);
+#else
+ TreeInfo *topnode_last = *artwork_node;
+ char *path = getPath2(getLevelDirFromTreeInfo(level_node),
+ ARTWORK_DIRECTORY((*artwork_node)->type));