X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsetup.c;h=aca52f7db36ab9fa5ffea8c302a6428d0dfb76e4;hb=7c3347a9ee92b20ca85fb6d8f8f6ac9aa27eb83e;hp=2bc46d413a2ebbcbacbfdb9132e4b0212efaa327;hpb=2f8793d6536d93616683069786ce444583d68e20;p=rocksndiamonds.git diff --git a/src/libgame/setup.c b/src/libgame/setup.c index 2bc46d41..aca52f7d 100644 --- a/src/libgame/setup.c +++ b/src/libgame/setup.c @@ -1388,16 +1388,23 @@ static boolean adjustTreeSoundsForEMC(TreeInfo *node) void dumpTreeInfo(TreeInfo *node, int depth) { + char bullet_list[] = { '-', '*', 'o' }; int i; - Debug("tree", "Dumping TreeInfo:"); + if (depth == 0) + Debug("tree", "Dumping TreeInfo:"); while (node) { - for (i = 0; i < (depth + 1) * 3; i++) + char bullet = bullet_list[depth % ARRAY_SIZE(bullet_list)]; + + for (i = 0; i < depth * 2; i++) DebugContinued("", " "); - DebugContinued("tree", "'%s' / '%s'\n", node->identifier, node->name); + DebugContinued("tree", "%c '%s' ['%s] [PARENT: '%s'] %s\n", + bullet, node->name, node->identifier, + (node->node_parent ? node->node_parent->identifier : "-"), + (node->node_group ? "[GROUP]" : "")); /* // use for dumping artwork info tree @@ -3907,6 +3914,7 @@ void LoadArtworkInfo(void) } static void LoadArtworkInfoFromLevelInfo(ArtworkDirTree **artwork_node, + ArtworkDirTree *node_parent, LevelDirTree *level_node) { int type = (*artwork_node)->type; @@ -3956,7 +3964,38 @@ 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) + { + *artwork_node = artwork_new->next; + artwork_new->next = NULL; + + freeTreeInfo(artwork_new); + } + } level_node = level_node->next; } @@ -3970,11 +4009,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(); @@ -4420,7 +4459,7 @@ static void InitLastPlayedLevels_ParentNode(void) pushTreeInfo(leveldir_top, leveldir_new); - /* create node to link back to current level directory */ + // create node to link back to current level directory createParentTreeInfoNode(leveldir_new); } @@ -4508,7 +4547,7 @@ void LoadLevelSetup_LastSeries(void) leveldir_current = getFirstValidTreeInfoEntry(leveldir_first); // start with empty history of last played level sets - setup.level_setup.last_level_series[0] = NULL; + setString(&setup.level_setup.last_level_series[0], NULL); if (!strEqual(DEFAULT_LEVELSET, UNDEFINED_LEVELSET)) { @@ -4540,11 +4579,11 @@ void LoadLevelSetup_LastSeries(void) leveldir_last = getTreeInfoFromIdentifier(leveldir_first, last_level_series); if (leveldir_last != NULL) - setup.level_setup.last_level_series[pos++] = - getStringCopy(last_level_series); + setString(&setup.level_setup.last_level_series[pos++], + last_level_series); } - setup.level_setup.last_level_series[pos] = NULL; + setString(&setup.level_setup.last_level_series[pos], NULL); freeSetupFileHash(level_setup_hash); }