X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsetup.c;h=d683b67c6b13b736166c362496cf3b1a1ef4645e;hb=4092afb639cd525d6d3edd4a287c1b506ba9c1d2;hp=54e5eeeea21f6d9e51ed870c1c4fbd187a16eeb9;hpb=d0c3964b020fd888d52b219b75d9c436ee5c5213;p=rocksndiamonds.git diff --git a/src/libgame/setup.c b/src/libgame/setup.c index 54e5eeee..d683b67c 100644 --- a/src/libgame/setup.c +++ b/src/libgame/setup.c @@ -202,6 +202,28 @@ char *getCurrentLevelDir() return getLevelDirFromTreeInfo(leveldir_current); } +char *getNewUserLevelSubdir() +{ + static char *new_level_subdir = NULL; + char *subdir_prefix = getLoginName(); + char subdir_suffix[10]; + int max_suffix_number = 1000; + int i = 0; + + while (++i < max_suffix_number) + { + sprintf(subdir_suffix, "_%d", i); + + checked_free(new_level_subdir); + new_level_subdir = getStringCat2(subdir_prefix, subdir_suffix); + + if (!directoryExists(getUserLevelDir(new_level_subdir))) + break; + } + + return new_level_subdir; +} + static char *getTapeDir(char *level_subdir) { static char *tape_dir = NULL; @@ -3503,24 +3525,44 @@ boolean UpdateUserLevelSet(char *level_subdir, FILE *file = NULL; FILE *file_tmp = NULL; char line[MAX_LINE_LEN]; - boolean update_num_levels_only = FALSE; boolean success = FALSE; + LevelDirTree *leveldir = getTreeInfoFromIdentifier(leveldir_first, + level_subdir); + // update values in level directory tree + + if (level_name != NULL) + setString(&leveldir->name, level_name); + + if (level_author != NULL) + setString(&leveldir->author, level_author); + + if (num_levels != -1) + leveldir->levels = num_levels; + + if (first_level_nr != -1) + leveldir->first_level = first_level_nr; - if (level_name == NULL || level_author == NULL || first_level_nr == -1) - update_num_levels_only = TRUE; + // update values that depend on other values + + setString(&leveldir->name_sorting, leveldir->name); + + leveldir->last_level = leveldir->first_level + leveldir->levels - 1; + + // sort order of level sets may have changed + sortTreeInfo(&leveldir_first); if ((file = fopen(filename, MODE_READ)) && (file_tmp = fopen(filename_tmp, MODE_WRITE))) { while (fgets(line, MAX_LINE_LEN, file)) { - if (strPrefix(line, "name:") && !update_num_levels_only) + if (strPrefix(line, "name:") && level_name != NULL) fprintf(file_tmp, "%-32s%s\n", "name:", level_name); - else if (strPrefix(line, "author:") && !update_num_levels_only) + else if (strPrefix(line, "author:") && level_author != NULL) fprintf(file_tmp, "%-32s%s\n", "author:", level_author); - else if (strPrefix(line, "levels:")) + else if (strPrefix(line, "levels:") && num_levels != -1) fprintf(file_tmp, "%-32s%d\n", "levels:", num_levels); - else if (strPrefix(line, "first_level:") && !update_num_levels_only) + else if (strPrefix(line, "first_level:") && first_level_nr != -1) fprintf(file_tmp, "%-32s%d\n", "first_level:", first_level_nr); else fputs(line, file_tmp); @@ -3594,7 +3636,8 @@ boolean CreateUserLevelSet(char *level_subdir, fprintf(file, "%s\n", getSetupLine(levelinfo_tokens, "", i)); /* just to make things nicer :) */ - if (i == LEVELINFO_TOKEN_AUTHOR) + if (i == LEVELINFO_TOKEN_AUTHOR || + i == LEVELINFO_TOKEN_FIRST_LEVEL) fprintf(file, "\n"); }