X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsetup.c;h=4a630aa60fe066abbb9fb7e5c1265223e1323772;hb=076afecb45e19998ef5f8995774bc35ea0f1b4fc;hp=5a1b6c7d310f2d00cb07ec954460c9c8c47929fc;hpb=36d5cb36c6f4cc188aecd157b48ff064be69afb6;p=rocksndiamonds.git diff --git a/src/libgame/setup.c b/src/libgame/setup.c index 5a1b6c7d..4a630aa6 100644 --- a/src/libgame/setup.c +++ b/src/libgame/setup.c @@ -1163,6 +1163,16 @@ void pushTreeInfo(TreeInfo **node_first, TreeInfo *node_new) *node_first = node_new; } +void removeTreeInfo(TreeInfo **node_first) +{ + TreeInfo *node_old = *node_first; + + *node_first = node_old->next; + node_old->next = NULL; + + freeTreeInfo(node_old); +} + int numTreeInfo(TreeInfo *node) { int num = 0; @@ -3914,6 +3924,7 @@ void LoadArtworkInfo(void) } static void LoadArtworkInfoFromLevelInfo(ArtworkDirTree **artwork_node, + ArtworkDirTree *node_parent, LevelDirTree *level_node) { int type = (*artwork_node)->type; @@ -3963,7 +3974,33 @@ static void LoadArtworkInfoFromLevelInfo(ArtworkDirTree **artwork_node, DrawInitText(level_node->name, 150, FC_YELLOW); if (level_node->node_group != NULL) - LoadArtworkInfoFromLevelInfo(artwork_node, level_node->node_group); + { + TreeInfo *artwork_new = newTreeInfo(); + + if (node_parent) + setTreeInfoToDefaultsFromParent(artwork_new, node_parent); + else + setTreeInfoToDefaults(artwork_new, type); + + artwork_new->level_group = TRUE; + + setString(&artwork_new->identifier, level_node->subdir); + setString(&artwork_new->name, level_node->name); + setString(&artwork_new->name_sorting, level_node->name_sorting); + + pushTreeInfo(artwork_node, artwork_new); + + // create node to link back to current custom artwork directory + createParentTreeInfoNode(artwork_new); + + // recursively step into sub-directory and look for more custom artwork + LoadArtworkInfoFromLevelInfo(&artwork_new->node_group, artwork_new, + level_node->node_group); + + // if sub-tree has no custom artwork at all, remove it + if (artwork_new->node_group->next == NULL) + removeTreeInfo(artwork_node); + } level_node = level_node->next; } @@ -3977,11 +4014,11 @@ void LoadLevelArtworkInfo(void) print_timestamp_time("DrawTimeText"); - LoadArtworkInfoFromLevelInfo(&artwork.gfx_first, leveldir_first_all); + LoadArtworkInfoFromLevelInfo(&artwork.gfx_first, NULL, leveldir_first_all); print_timestamp_time("LoadArtworkInfoFromLevelInfo (gfx)"); - LoadArtworkInfoFromLevelInfo(&artwork.snd_first, leveldir_first_all); + LoadArtworkInfoFromLevelInfo(&artwork.snd_first, NULL, leveldir_first_all); print_timestamp_time("LoadArtworkInfoFromLevelInfo (snd)"); - LoadArtworkInfoFromLevelInfo(&artwork.mus_first, leveldir_first_all); + LoadArtworkInfoFromLevelInfo(&artwork.mus_first, NULL, leveldir_first_all); print_timestamp_time("LoadArtworkInfoFromLevelInfo (mus)"); SaveArtworkInfoCache();