X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Flibgame%2Fsetup.c;h=7818b7322eaa7a79faf4648d5a9ad85eb891b7a7;hp=2eca885ac16b27fb5ced808c25871f15239dd250;hb=5f9b6d3b52c7f8dc10c01782d466a1e8f5ca5f26;hpb=34df5c161045d8dddfd1c24d7fb1cfa29e0a9746 diff --git a/src/libgame/setup.c b/src/libgame/setup.c index 2eca885a..7818b732 100644 --- a/src/libgame/setup.c +++ b/src/libgame/setup.c @@ -3944,6 +3944,77 @@ void AddUserArtworkSetToArtworkInfo(char *artwork_subdir_new, int type) Error(ERR_EXIT, "internal artwork set structure corrupted -- aborting"); } +static boolean AddUserTreeSetToTreeInfoExt(char *tree_subdir_new, int type) +{ + TreeInfo **tree_node_first, *tree_node_old, *tree_node_new; + char *tree_user_dir = TREE_USERDIR(type); + + if (tree_user_dir == NULL) // should not happen + return FALSE; + + // get first node of level or artwork tree + tree_node_first = TREE_FIRST_NODE_PTR(type); + + if (tree_node_first == NULL) // should not happen + return FALSE; + + if (type == TREE_TYPE_LEVEL_DIR) + { + // get level info tree node of personal user level set + tree_node_old = getTreeInfoFromIdentifier(*tree_node_first, getLoginName()); + } + else + { + // get artwork info tree node of first artwork set + tree_node_old = *tree_node_first; + } + + if (tree_node_old == NULL) // should not happen + return FALSE; + + int draw_deactivation_mask = GetDrawDeactivationMask(); + + // override draw deactivation mask (temporarily disable drawing) + SetDrawDeactivationMask(REDRAW_ALL); + + if (type == TREE_TYPE_LEVEL_DIR) + { + // load new level set config and add it next to first user level set + LoadLevelInfoFromLevelConf(&tree_node_old->next, NULL, + tree_user_dir, tree_subdir_new); + } + else + { + // load new artwork set config and add it next to first artwork set + LoadArtworkInfoFromArtworkConf(&tree_node_old->next, NULL, + tree_user_dir, tree_subdir_new, type); + } + + // set draw deactivation mask to previous value + SetDrawDeactivationMask(draw_deactivation_mask); + + // get tree info tree node of newly added tree set + tree_node_new = getTreeInfoFromIdentifier(*tree_node_first, tree_subdir_new); + + if (tree_node_new == NULL) // should not happen + return FALSE; + + // correct top link and parent node link of newly created tree node + tree_node_new->node_top = tree_node_old->node_top; + tree_node_new->node_parent = tree_node_old->node_parent; + + // sort tree info tree to adjust position of newly added tree set + sortTreeInfo(tree_node_first); + + return TRUE; +} + +void AddUserTreeSetToTreeInfo(char *tree_subdir_new, int type) +{ + if (!AddUserTreeSetToTreeInfoExt(tree_subdir_new, type)) + Error(ERR_EXIT, "internal tree set structure corrupted -- aborting"); +} + char *getArtworkIdentifierForUserLevelSet(int type) { char *classic_artwork_set = getClassicArtworkSet(type);