X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsetup.c;h=129be747af2f74255697c6e5d804fca741543160;hb=94045da2;hp=bda89ee3222c63f3c747f244144f2a43ecef89e0;hpb=aeab04175be270699cc23606f3e28142c5b60f6c;p=rocksndiamonds.git diff --git a/src/libgame/setup.c b/src/libgame/setup.c index bda89ee3..129be747 100644 --- a/src/libgame/setup.c +++ b/src/libgame/setup.c @@ -140,19 +140,6 @@ static char *getScoreCacheDir(char *level_subdir) return score_dir; } -static char *getScoreTapeDir(char *level_subdir, int nr) -{ - static char *score_tape_dir = NULL; - char tape_subdir[MAX_FILENAME_LEN]; - - checked_free(score_tape_dir); - - sprintf(tape_subdir, "%03d", nr); - score_tape_dir = getPath2(getScoreDir(level_subdir), tape_subdir); - - return score_tape_dir; -} - static char *getUserSubdir(int nr) { static char user_subdir[16] = { 0 }; @@ -279,7 +266,7 @@ char *getNewUserLevelSubdir(void) return new_level_subdir; } -static char *getTapeDir(char *level_subdir) +char *getTapeDir(char *level_subdir) { static char *tape_dir = NULL; char *data_dir = getUserGameDataDir(); @@ -686,10 +673,10 @@ char *getScoreTapeFilename(char *basename_no_ext, int nr) checked_free(filename); - sprintf(basename, "%s.%s", basename_no_ext, TAPEFILE_EXTENSION); + sprintf(basename, "%03d.%s.%s", nr, basename_no_ext, TAPEFILE_EXTENSION); // used instead of "leveldir_current->subdir" (for network games) - filename = getPath2(getScoreTapeDir(levelset.identifier, nr), basename); + filename = getPath2(getScoreDir(levelset.identifier), basename); return filename; } @@ -1177,13 +1164,6 @@ void InitScoreCacheDirectory(char *level_subdir) createDirectory(getScoreCacheDir(level_subdir), "level score", PERMS_PRIVATE); } -void InitScoreTapeDirectory(char *level_subdir, int nr) -{ - InitScoreDirectory(level_subdir); - - createDirectory(getScoreTapeDir(level_subdir, nr), "score tape", PERMS_PRIVATE); -} - static void SaveUserLevelInfo(void); void InitUserLevelDirectory(char *level_subdir) @@ -1290,22 +1270,35 @@ TreeInfo *getValidLevelSeries(TreeInfo *node, TreeInfo *default_node) return getFirstValidTreeInfoEntry(default_node); } -TreeInfo *getFirstValidTreeInfoEntry(TreeInfo *node) +static TreeInfo *getValidTreeInfoEntryExt(TreeInfo *node, boolean get_next_node) { if (node == NULL) return NULL; - if (node->node_group) // enter level group (step down into tree) + if (node->node_group) // enter node group (step down into tree) return getFirstValidTreeInfoEntry(node->node_group); - else if (node->parent_link) // skip start entry of level group - { - if (node->next) // get first real level series entry - return getFirstValidTreeInfoEntry(node->next); - else // leave empty level group and go on - return getFirstValidTreeInfoEntry(node->node_parent->next); - } - else // this seems to be a regular level series + + if (node->parent_link) // skip first node (back link) of node group + get_next_node = TRUE; + + if (!get_next_node) // get current regular tree node return node; + + // get next regular tree node, or step up until one is found + while (node->next == NULL && node->node_parent != NULL) + node = node->node_parent; + + return getFirstValidTreeInfoEntry(node->next); +} + +TreeInfo *getFirstValidTreeInfoEntry(TreeInfo *node) +{ + return getValidTreeInfoEntryExt(node, FALSE); +} + +TreeInfo *getNextValidTreeInfoEntry(TreeInfo *node) +{ + return getValidTreeInfoEntryExt(node, TRUE); } TreeInfo *getTreeInfoFirstGroupEntry(TreeInfo *node) @@ -1491,9 +1484,10 @@ static boolean adjustTreeSoundsForEMC(TreeInfo *node) return settings_changed; } -void dumpTreeInfo(TreeInfo *node, int depth) +int dumpTreeInfo(TreeInfo *node, int depth) { char bullet_list[] = { '-', '*', 'o' }; + int num_leaf_nodes = 0; int i; if (depth == 0) @@ -1509,7 +1503,11 @@ void dumpTreeInfo(TreeInfo *node, int depth) 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]" : "")); + (node->node_group ? "[GROUP]" : + node->is_copy ? "[COPY]" : "")); + + if (!node->node_group && !node->parent_link) + num_leaf_nodes++; /* // use for dumping artwork info tree @@ -1518,10 +1516,15 @@ void dumpTreeInfo(TreeInfo *node, int depth) */ if (node->node_group != NULL) - dumpTreeInfo(node->node_group, depth + 1); + num_leaf_nodes += dumpTreeInfo(node->node_group, depth + 1); node = node->next; } + + if (depth == 0) + Debug("tree", "Summary: %d leaf nodes found", num_leaf_nodes); + + return num_leaf_nodes; } void sortTreeInfoBySortFunction(TreeInfo **node_first, @@ -3576,7 +3579,7 @@ static boolean LoadLevelInfoFromLevelConf(TreeInfo **node_first, (leveldir_new->user_defined || !leveldir_new->handicap ? leveldir_new->last_level : leveldir_new->first_level); - DrawInitText(leveldir_new->name, 150, FC_YELLOW); + DrawInitTextItem(leveldir_new->name); pushTreeInfo(node_first, leveldir_new); @@ -3692,7 +3695,7 @@ void LoadLevelInfo(void) { InitUserLevelDirectory(getLoginName()); - DrawInitText("Loading level series", 120, FC_GREEN); + DrawInitTextHead("Loading level series"); LoadLevelInfoFromLevelDir(&leveldir_first, NULL, options.level_directory); LoadLevelInfoFromLevelDir(&leveldir_first, NULL, getUserLevelDir(NULL)); @@ -3965,7 +3968,7 @@ void LoadArtworkInfo(void) { LoadArtworkInfoCache(); - DrawInitText("Looking for custom artwork", 120, FC_GREEN); + DrawInitTextHead("Looking for custom artwork"); LoadArtworkInfoFromArtworkDir(&artwork.gfx_first, NULL, options.graphics_directory, @@ -4100,7 +4103,7 @@ static void LoadArtworkInfoFromLevelInfoExt(ArtworkDirTree **artwork_node, setArtworkInfoCacheEntry(artwork_new, level_node, type); } - DrawInitText(level_node->name, 150, FC_YELLOW); + DrawInitTextItem(level_node->name); if (level_node->node_group != NULL) { @@ -4169,7 +4172,7 @@ void LoadLevelArtworkInfo(void) { print_timestamp_init("LoadLevelArtworkInfo"); - DrawInitText("Looking for custom level artwork", 120, FC_GREEN); + DrawInitTextHead("Looking for custom level artwork"); print_timestamp_time("DrawTimeText"); @@ -4825,7 +4828,7 @@ static void SaveLevelSetup_LastSeries_Ext(boolean deactivate_last_level_series) for (i = 0; last_level_series[i] != NULL; i++) { - char token[strlen(TOKEN_STR_LAST_LEVEL_SERIES) + 10]; + char token[strlen(TOKEN_STR_LAST_LEVEL_SERIES) + 1 + 10 + 1]; sprintf(token, "%s.%03d", TOKEN_STR_LAST_LEVEL_SERIES, i);