X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsetup.c;h=dc01ad4c9ecdbdcbffec3c9cf9a7117909d9877b;hb=201eaae5ae325e0c99e43ab240163a99dc5c0db9;hp=8fa4317c3beab9502bfa62ad100d629b6a42469d;hpb=5dd3c868d9df906623a5fc0ff2124655a14e3715;p=rocksndiamonds.git diff --git a/src/libgame/setup.c b/src/libgame/setup.c index 8fa4317c..dc01ad4c 100644 --- a/src/libgame/setup.c +++ b/src/libgame/setup.c @@ -1584,30 +1584,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 +1664,7 @@ static void setTreeInfoToDefaults(TreeInfo *ldi, int type) ldi->level_group = FALSE; ldi->handicap_level = 0; ldi->readonly = TRUE; + ldi->handicap = TRUE; } } @@ -1724,9 +1727,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 +1786,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 +1795,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 +2014,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 +2633,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 +2889,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;