X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Flibgame%2Fsetup.c;h=d63bc561997645c6416b1c9746202a55dce411b8;hb=86e1890b2d87dd7710b320e2b306c7291d41e2a5;hp=8fa4317c3beab9502bfa62ad100d629b6a42469d;hpb=5dd3c868d9df906623a5fc0ff2124655a14e3715;p=rocksndiamonds.git diff --git a/src/libgame/setup.c b/src/libgame/setup.c index 8fa4317c..d63bc561 100644 --- a/src/libgame/setup.c +++ b/src/libgame/setup.c @@ -404,7 +404,12 @@ char *getEditorSetupFilename() static char *filename = NULL; checked_free(filename); + filename = getPath2(getCurrentLevelDir(), EDITORSETUP_FILENAME); + if (fileExists(filename)) + return filename; + + checked_free(filename); filename = getPath2(getSetupDir(), EDITORSETUP_FILENAME); return filename; @@ -438,8 +443,8 @@ char *getLevelSetInfoFilename() char *basenames[] = { "README", - "README.txt", "README.TXT", + "README.txt", "Readme", "Readme.txt", "readme", @@ -452,8 +457,8 @@ char *getLevelSetInfoFilename() for (i = 0; basenames[i] != NULL; i++) { checked_free(filename); - filename = getPath2(getCurrentLevelDir(), basenames[i]); + if (fileExists(filename)) return filename; } @@ -1584,30 +1589,32 @@ void checkSetupFileHashIdentifier(SetupFileHash *setup_file_hash, #define LEVELINFO_TOKEN_MUSIC_SET 13 #define LEVELINFO_TOKEN_FILENAME 14 #define LEVELINFO_TOKEN_FILETYPE 15 +#define LEVELINFO_TOKEN_HANDICAP 16 -#define NUM_LEVELINFO_TOKENS 16 +#define NUM_LEVELINFO_TOKENS 17 static LevelDirTree ldi; static struct TokenInfo levelinfo_tokens[] = { /* level directory info */ - { TYPE_STRING, &ldi.identifier, "identifier" }, - { TYPE_STRING, &ldi.name, "name" }, - { TYPE_STRING, &ldi.name_sorting, "name_sorting" }, - { TYPE_STRING, &ldi.author, "author" }, - { TYPE_STRING, &ldi.imported_from, "imported_from" }, - { TYPE_INTEGER, &ldi.levels, "levels" }, - { TYPE_INTEGER, &ldi.first_level, "first_level" }, - { TYPE_INTEGER, &ldi.sort_priority, "sort_priority" }, - { TYPE_BOOLEAN, &ldi.latest_engine, "latest_engine" }, - { TYPE_BOOLEAN, &ldi.level_group, "level_group" }, - { TYPE_BOOLEAN, &ldi.readonly, "readonly" }, - { TYPE_STRING, &ldi.graphics_set, "graphics_set" }, - { TYPE_STRING, &ldi.sounds_set, "sounds_set" }, - { TYPE_STRING, &ldi.music_set, "music_set" }, - { TYPE_STRING, &ldi.level_filename, "filename" }, - { TYPE_STRING, &ldi.level_filetype, "filetype" } + { TYPE_STRING, &ldi.identifier, "identifier" }, + { TYPE_STRING, &ldi.name, "name" }, + { TYPE_STRING, &ldi.name_sorting, "name_sorting" }, + { TYPE_STRING, &ldi.author, "author" }, + { TYPE_STRING, &ldi.imported_from, "imported_from" }, + { TYPE_INTEGER, &ldi.levels, "levels" }, + { TYPE_INTEGER, &ldi.first_level, "first_level" }, + { TYPE_INTEGER, &ldi.sort_priority, "sort_priority" }, + { TYPE_BOOLEAN, &ldi.latest_engine, "latest_engine" }, + { TYPE_BOOLEAN, &ldi.level_group, "level_group" }, + { TYPE_BOOLEAN, &ldi.readonly, "readonly" }, + { TYPE_STRING, &ldi.graphics_set, "graphics_set" }, + { TYPE_STRING, &ldi.sounds_set, "sounds_set" }, + { TYPE_STRING, &ldi.music_set, "music_set" }, + { TYPE_STRING, &ldi.level_filename, "filename" }, + { TYPE_STRING, &ldi.level_filetype, "filetype" }, + { TYPE_BOOLEAN, &ldi.handicap, "handicap" } }; static void setTreeInfoToDefaults(TreeInfo *ldi, int type) @@ -1662,6 +1669,7 @@ static void setTreeInfoToDefaults(TreeInfo *ldi, int type) ldi->level_group = FALSE; ldi->handicap_level = 0; ldi->readonly = TRUE; + ldi->handicap = TRUE; } } @@ -1724,9 +1732,9 @@ static void setTreeInfoToDefaultsFromParent(TreeInfo *ldi, TreeInfo *parent) ldi->level_group = FALSE; ldi->handicap_level = 0; ldi->readonly = TRUE; + ldi->handicap = TRUE; } - #else /* first copy all values from the parent structure ... */ @@ -1783,6 +1791,8 @@ static void freeTreeInfo(TreeInfo *ldi) if (ldi->type == TREE_TYPE_LEVEL_DIR) { + checked_free(ldi->imported_from); + checked_free(ldi->graphics_set); checked_free(ldi->sounds_set); checked_free(ldi->music_set); @@ -1790,6 +1800,9 @@ static void freeTreeInfo(TreeInfo *ldi) checked_free(ldi->graphics_path); checked_free(ldi->sounds_path); checked_free(ldi->music_path); + + checked_free(ldi->level_filename); + checked_free(ldi->level_filetype); } } @@ -2006,9 +2019,8 @@ static boolean LoadLevelInfoFromLevelConf(TreeInfo **node_first, #endif leveldir_new->handicap_level = /* set handicap to default value */ - (leveldir_new->user_defined ? - leveldir_new->last_level : - leveldir_new->first_level); + (leveldir_new->user_defined || !leveldir_new->handicap ? + leveldir_new->last_level : leveldir_new->first_level); pushTreeInfo(node_first, leveldir_new); @@ -2626,7 +2638,9 @@ static void SaveUserLevelInfo() for (i = 0; i < NUM_LEVELINFO_TOKENS; i++) if (i != LEVELINFO_TOKEN_IDENTIFIER && i != LEVELINFO_TOKEN_NAME_SORTING && - i != LEVELINFO_TOKEN_IMPORTED_FROM) + i != LEVELINFO_TOKEN_IMPORTED_FROM && + i != LEVELINFO_TOKEN_FILENAME && + i != LEVELINFO_TOKEN_FILETYPE) fprintf(file, "%s\n", getSetupLine(levelinfo_tokens, "", i)); fclose(file); @@ -2880,7 +2894,7 @@ void LoadLevelSetup_SeriesInfo() if (level_nr > leveldir_current->last_level + 1) level_nr = leveldir_current->last_level; - if (leveldir_current->user_defined) + if (leveldir_current->user_defined || !leveldir_current->handicap) level_nr = leveldir_current->last_level; leveldir_current->handicap_level = level_nr;