X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsetup.c;h=943c063a1ab8d48665feb5701a465d6727feaa96;hb=1f877ca17e3eee9b2ea66fe2d7378be88fec3501;hp=add159b92932fe9cce781c31b748c1523bb30366;hpb=838825e11f7e4af0947bf9d40061defd4e499017;p=rocksndiamonds.git diff --git a/src/libgame/setup.c b/src/libgame/setup.c index add159b9..943c063a 100644 --- a/src/libgame/setup.c +++ b/src/libgame/setup.c @@ -297,6 +297,61 @@ static char *getUserMusicDir() return usermusic_dir; } +static char *getSetupArtworkDir(TreeInfo *ti) +{ + static char *artwork_dir = NULL; + + if (artwork_dir != NULL) + free(artwork_dir); + + artwork_dir = getPath2(ti->basepath, ti->fullpath); + + return artwork_dir; +} + +void setLevelArtworkDir(TreeInfo *ti) +{ + char **artwork_path_ptr, *artwork_set; + TreeInfo *level_artwork; + + if (ti == NULL || leveldir_current == NULL) + return; + + artwork_path_ptr = + (ti->type == TREE_TYPE_GRAPHICS_DIR ? &leveldir_current->graphics_path : + ti->type == TREE_TYPE_SOUNDS_DIR ? &leveldir_current->sounds_path : + &leveldir_current->music_path); + + artwork_set = + (ti->type == TREE_TYPE_GRAPHICS_DIR ? leveldir_current->graphics_set : + ti->type == TREE_TYPE_SOUNDS_DIR ? leveldir_current->sounds_set : + leveldir_current->music_set); + + if ((level_artwork = getTreeInfoFromIdentifier(ti, artwork_set)) == NULL) + return; + + if (*artwork_path_ptr != NULL) + free(*artwork_path_ptr); + + *artwork_path_ptr = getStringCopy(getSetupArtworkDir(level_artwork)); +} + +static char *getLevelArtworkDir(int type) +{ + char *artwork_path; + + if (leveldir_current == NULL) + return UNDEFINED_FILENAME; + + artwork_path = + (type == TREE_TYPE_GRAPHICS_DIR ? leveldir_current->graphics_path : + type == TREE_TYPE_SOUNDS_DIR ? leveldir_current->sounds_path : + type == TREE_TYPE_MUSIC_DIR ? leveldir_current->music_path : + UNDEFINED_FILENAME); + + return artwork_path; +} + char *getLevelFilename(int nr) { static char *filename = NULL; @@ -351,18 +406,6 @@ char *getSetupFilename() return filename; } -static char *getSetupArtworkDir(TreeInfo *ti) -{ - static char *artwork_dir = NULL; - - if (artwork_dir != NULL) - free(artwork_dir); - - artwork_dir = getPath2(ti->basepath, ti->fullpath); - - return artwork_dir; -} - static char *getCorrectedImageBasename(char *basename) { char *result = basename; @@ -400,23 +443,28 @@ char *getCustomImageFilename(char *basename) if (!setup.override_level_graphics) { - /* 1st try: look for special artwork in current level series directory */ + /* 1st try: look for special artwork configured in level series config */ + filename = getPath2(getLevelArtworkDir(TREE_TYPE_GRAPHICS_DIR), basename); + if (fileExists(filename)) + return filename; + + /* 2nd try: look for special artwork in current level series directory */ filename = getPath3(getCurrentLevelDir(), GRAPHICS_DIRECTORY, basename); if (fileExists(filename)) return filename; } - /* 2nd try: look for special artwork in configured artwork directory */ + /* 3rd try: look for special artwork in configured artwork directory */ filename = getPath2(getSetupArtworkDir(artwork.gfx_current), basename); if (fileExists(filename)) return filename; - /* 3rd try: look for default artwork in new default artwork directory */ + /* 4th try: look for default artwork in new default artwork directory */ filename = getPath2(getDefaultGraphicsDir(GRAPHICS_SUBDIR), basename); if (fileExists(filename)) return filename; - /* 4th try: look for default artwork in old default artwork directory */ + /* 5th try: look for default artwork in old default artwork directory */ filename = getPath2(options.graphics_directory, basename); if (fileExists(filename)) return filename; @@ -433,23 +481,28 @@ char *getCustomSoundFilename(char *basename) if (!setup.override_level_sounds) { - /* 1st try: look for special artwork in current level series directory */ + /* 1st try: look for special artwork configured in level series config */ + filename = getPath2(getLevelArtworkDir(TREE_TYPE_SOUNDS_DIR), basename); + if (fileExists(filename)) + return filename; + + /* 2nd try: look for special artwork in current level series directory */ filename = getPath3(getCurrentLevelDir(), SOUNDS_DIRECTORY, basename); if (fileExists(filename)) return filename; } - /* 2nd try: look for special artwork in configured artwork directory */ + /* 3rd try: look for special artwork in configured artwork directory */ filename = getPath2(getSetupArtworkDir(artwork.snd_current), basename); if (fileExists(filename)) return filename; - /* 3rd try: look for default artwork in new default artwork directory */ + /* 4th try: look for default artwork in new default artwork directory */ filename = getPath2(getDefaultSoundsDir(SOUNDS_SUBDIR), basename); if (fileExists(filename)) return filename; - /* 4th try: look for default artwork in old default artwork directory */ + /* 5th try: look for default artwork in old default artwork directory */ filename = getPath2(options.sounds_directory, basename); if (fileExists(filename)) return filename; @@ -457,9 +510,19 @@ char *getCustomSoundFilename(char *basename) return NULL; /* cannot find specified artwork file anywhere */ } -char *getCustomSoundConfigFilename() +char *getCustomArtworkFilename(char *basename, int type) { - return getCustomSoundFilename(SOUNDSINFO_FILENAME); + if (type == ARTWORK_TYPE_GRAPHICS) + return getCustomImageFilename(basename); + else if (type == ARTWORK_TYPE_SOUNDS) + return getCustomSoundFilename(basename); + else + return UNDEFINED_FILENAME; +} + +char *getCustomArtworkConfigFilename(int type) +{ + return getCustomArtworkFilename(ARTWORKINFO_FILENAME(type), type); } char *getCustomMusicDirectory(void) @@ -471,23 +534,28 @@ char *getCustomMusicDirectory(void) if (!setup.override_level_music) { - /* 1st try: look for special artwork in current level series directory */ + /* 1st try: look for special artwork configured in level series config */ + directory = getStringCopy(getLevelArtworkDir(TREE_TYPE_MUSIC_DIR)); + if (fileExists(directory)) + return directory; + + /* 2nd try: look for special artwork in current level series directory */ directory = getPath2(getCurrentLevelDir(), MUSIC_DIRECTORY); if (fileExists(directory)) return directory; } - /* 2nd try: look for special artwork in configured artwork directory */ + /* 3rd try: look for special artwork in configured artwork directory */ directory = getStringCopy(getSetupArtworkDir(artwork.mus_current)); if (fileExists(directory)) return directory; - /* 3rd try: look for default artwork in new default artwork directory */ + /* 4th try: look for default artwork in new default artwork directory */ directory = getStringCopy(getDefaultMusicDir(MUSIC_SUBDIR)); if (fileExists(directory)) return directory; - /* 4th try: look for default artwork in old default artwork directory */ + /* 5th try: look for default artwork in old default artwork directory */ directory = getStringCopy(options.music_directory); if (fileExists(directory)) return directory; @@ -1178,8 +1246,11 @@ void checkSetupFileListIdentifier(struct SetupFileList *setup_file_list, #define LEVELINFO_TOKEN_SORT_PRIORITY 7 #define LEVELINFO_TOKEN_LEVEL_GROUP 8 #define LEVELINFO_TOKEN_READONLY 9 +#define LEVELINFO_TOKEN_GRAPHICS_SET 10 +#define LEVELINFO_TOKEN_SOUNDS_SET 11 +#define LEVELINFO_TOKEN_MUSIC_SET 12 -#define NUM_LEVELINFO_TOKENS 10 +#define NUM_LEVELINFO_TOKENS 13 static LevelDirTree ldi; @@ -1195,7 +1266,10 @@ static struct TokenInfo levelinfo_tokens[] = { TYPE_INTEGER, &ldi.first_level, "first_level" }, { TYPE_INTEGER, &ldi.sort_priority, "sort_priority" }, { TYPE_BOOLEAN, &ldi.level_group, "level_group" }, - { TYPE_BOOLEAN, &ldi.readonly, "readonly" } + { 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" } }; static void setTreeInfoToDefaults(TreeInfo *ldi, int type) @@ -1232,6 +1306,12 @@ static void setTreeInfoToDefaults(TreeInfo *ldi, int type) if (ldi->type == TREE_TYPE_LEVEL_DIR) { ldi->imported_from = NULL; + ldi->graphics_set = NULL; + ldi->sounds_set = NULL; + ldi->music_set = NULL; + ldi->graphics_path = getStringCopy(UNDEFINED_FILENAME); + ldi->sounds_path = getStringCopy(UNDEFINED_FILENAME); + ldi->music_path = getStringCopy(UNDEFINED_FILENAME); ldi->levels = 0; ldi->first_level = 0; ldi->last_level = 0; @@ -1782,16 +1862,16 @@ static TreeInfo *getDummyArtworkInfo(int type) setTreeInfoToDefaults(artwork_new, type); - artwork_new->filename = getStringCopy(NOT_AVAILABLE); - artwork_new->fullpath = getStringCopy(NOT_AVAILABLE); - artwork_new->basepath = getStringCopy(NOT_AVAILABLE); + artwork_new->filename = getStringCopy(UNDEFINED_FILENAME); + artwork_new->fullpath = getStringCopy(UNDEFINED_FILENAME); + artwork_new->basepath = getStringCopy(UNDEFINED_FILENAME); if (artwork_new->name != NULL) free(artwork_new->name); - artwork_new->identifier = getStringCopy(NOT_AVAILABLE); - artwork_new->name = getStringCopy(NOT_AVAILABLE); - artwork_new->name_sorting = getStringCopy(NOT_AVAILABLE); + artwork_new->identifier = getStringCopy(UNDEFINED_FILENAME); + artwork_new->name = getStringCopy(UNDEFINED_FILENAME); + artwork_new->name_sorting = getStringCopy(UNDEFINED_FILENAME); return artwork_new; }