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 };
return new_level_subdir;
}
-static char *getTapeDir(char *level_subdir)
+char *getTapeDir(char *level_subdir)
{
static char *tape_dir = NULL;
char *data_dir = getUserGameDataDir();
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;
}
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)
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)
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)
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
*/
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,
(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);
{
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));
{
LoadArtworkInfoCache();
- DrawInitText("Looking for custom artwork", 120, FC_GREEN);
+ DrawInitTextHead("Looking for custom artwork");
LoadArtworkInfoFromArtworkDir(&artwork.gfx_first, NULL,
options.graphics_directory,
setArtworkInfoCacheEntry(artwork_new, level_node, type);
}
- DrawInitText(level_node->name, 150, FC_YELLOW);
+ DrawInitTextItem(level_node->name);
if (level_node->node_group != NULL)
{
{
print_timestamp_init("LoadLevelArtworkInfo");
- DrawInitText("Looking for custom level artwork", 120, FC_GREEN);
+ DrawInitTextHead("Looking for custom level artwork");
print_timestamp_time("DrawTimeText");
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);