X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsetup.c;h=192e2ce67e4d2b5307bdccf257e5ac9a4421563c;hb=31dcabc4f4e981a616b0e0d5fda7c32eef1c0596;hp=b24ac1035afb1de56ddf7830f52e6c0696be5e88;hpb=eba9b49866465497a474dabe972b2b604617da30;p=rocksndiamonds.git diff --git a/src/libgame/setup.c b/src/libgame/setup.c index b24ac103..192e2ce6 100644 --- a/src/libgame/setup.c +++ b/src/libgame/setup.c @@ -2882,7 +2882,7 @@ static TreeInfo *createParentTreeInfoNode(TreeInfo *node_parent) ti_new->parent_link = TRUE; setString(&ti_new->identifier, node_parent->identifier); - setString(&ti_new->name, ".. (parent directory)"); + setString(&ti_new->name, BACKLINK_TEXT_PARENT); setString(&ti_new->name_sorting, ti_new->name); setString(&ti_new->subdir, STRING_PARENT_DIRECTORY); @@ -2900,19 +2900,19 @@ static TreeInfo *createParentTreeInfoNode(TreeInfo *node_parent) static TreeInfo *createTopTreeInfoNode(TreeInfo *node_first) { - TreeInfo *ti_new, *ti_new2; - if (node_first == NULL) return NULL; - ti_new = newTreeInfo(); - setTreeInfoToDefaults(ti_new, TREE_TYPE_LEVEL_DIR); + TreeInfo *ti_new = newTreeInfo(); + int type = node_first->type; + + setTreeInfoToDefaults(ti_new, type); ti_new->node_parent = NULL; ti_new->parent_link = FALSE; setString(&ti_new->identifier, node_first->identifier); - setString(&ti_new->name, INFOTEXT_LEVEL_DIR); + setString(&ti_new->name, TREE_INFOTEXT(type)); setString(&ti_new->name_sorting, ti_new->name); setString(&ti_new->subdir, STRING_TOP_DIRECTORY); @@ -2921,19 +2921,32 @@ static TreeInfo *createTopTreeInfoNode(TreeInfo *node_first) ti_new->sort_priority = node_first->sort_priority;; ti_new->latest_engine = node_first->latest_engine; - setString(&ti_new->class_desc, INFOTEXT_LEVEL_DIR); + setString(&ti_new->class_desc, TREE_INFOTEXT(type)); ti_new->node_group = node_first; ti_new->level_group = TRUE; - ti_new2 = createParentTreeInfoNode(ti_new); + TreeInfo *ti_new2 = createParentTreeInfoNode(ti_new); - setString(&ti_new2->name, ".. (main menu)"); + setString(&ti_new2->name, TREE_BACKLINK_TEXT(type)); setString(&ti_new2->name_sorting, ti_new2->name); return ti_new; } +static void setTreeInfoParentNodes(TreeInfo *node, TreeInfo *node_parent) +{ + while (node) + { + if (node->node_group) + setTreeInfoParentNodes(node->node_group, node); + + node->node_parent = node_parent; + + node = node->next; + } +} + // ---------------------------------------------------------------------------- // functions for handling level and custom artwork info cache @@ -4048,10 +4061,15 @@ static void LoadArtworkInfoFromLevelInfoExt(ArtworkDirTree **artwork_node, static void LoadArtworkInfoFromLevelInfo(ArtworkDirTree **artwork_node) { + // move peviously loaded artwork tree into separate sub-tree MoveArtworkInfoIntoSubTree(artwork_node); + // load artwork from level sets into separate sub-trees LoadArtworkInfoFromLevelInfoExt(artwork_node, NULL, leveldir_first_all, TRUE); LoadArtworkInfoFromLevelInfoExt(artwork_node, NULL, leveldir_first_all, FALSE); + + // set all parent links (back links) in complete artwork tree + setTreeInfoParentNodes(*artwork_node, NULL); } void LoadLevelArtworkInfo(void)