X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsetup.c;h=614bb613cec6cc7185c78f423daca63193f7d89d;hb=8afc6199767a6fcb7451efd2b3d5b070f6c99efb;hp=e69e592657c70979008231ba9dd493c87922dfed;hpb=87f531efe267aa3d6a27cc3a68c68c1a4df7b18b;p=rocksndiamonds.git diff --git a/src/libgame/setup.c b/src/libgame/setup.c index e69e5926..614bb613 100644 --- a/src/libgame/setup.c +++ b/src/libgame/setup.c @@ -309,35 +309,47 @@ static char *getSetupArtworkDir(TreeInfo *ti) return artwork_dir; } -char *getLevelArtworkDir(TreeInfo *ti) +void setLevelArtworkDir(TreeInfo *ti) { - char *artwork_path, *artwork_set; + char **artwork_path_ptr, *artwork_set; + TreeInfo *level_artwork; if (ti == NULL || leveldir_current == NULL) - return NOT_AVAILABLE; - - artwork_path = - (ti->type == TREE_TYPE_GRAPHICS_DIR ? leveldir_current->graphics_path : - ti->type == TREE_TYPE_SOUNDS_DIR ? leveldir_current->sounds_path : - ti->type == TREE_TYPE_MUSIC_DIR ? leveldir_current->music_path : NULL); + return; - if (artwork_path != NULL) - return artwork_path; + 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 : - ti->type == TREE_TYPE_MUSIC_DIR ? leveldir_current->music_set : NULL); + leveldir_current->music_set); - if (artwork_set != NULL) - { - TreeInfo *level_artwork = getTreeInfoFromIdentifier(ti, artwork_set); + if ((level_artwork = getTreeInfoFromIdentifier(ti, artwork_set)) == NULL) + return; - if (level_artwork != NULL) - return getSetupArtworkDir(level_artwork); - } + 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; - return NOT_AVAILABLE; + 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) @@ -396,7 +408,7 @@ char *getSetupFilename() static char *getCorrectedImageBasename(char *basename) { - char *result = basename; + char *basename_corrected = basename; #if defined(PLATFORM_MSDOS) if (program.filename_prefix != NULL) @@ -404,11 +416,25 @@ static char *getCorrectedImageBasename(char *basename) int prefix_len = strlen(program.filename_prefix); if (strncmp(basename, program.filename_prefix, prefix_len) == 0) - result = &basename[prefix_len]; + basename_corrected = &basename[prefix_len]; + + /* if corrected filename is still longer than standard MS-DOS filename + size (8 characters + 1 dot + 3 characters file extension), shorten + filename by writing file extension after 8th basename character */ + if (strlen(basename_corrected) > 8+1+3) + { + static char *msdos_filename = NULL; + + if (filename != NULL) + free(filename); + + filename = getStringCopy(basename_corrected); + strncpy(&filename[8], &basename[strlen(basename) - 1+3], 1+3 + 1); + } } #endif - return result; + return basename_corrected; } static boolean fileExists(char *filename) @@ -432,7 +458,7 @@ char *getCustomImageFilename(char *basename) if (!setup.override_level_graphics) { /* 1st try: look for special artwork configured in level series config */ - filename = getPath2(getLevelArtworkDir(artwork.gfx_first), basename); + filename = getPath2(getLevelArtworkDir(TREE_TYPE_GRAPHICS_DIR), basename); if (fileExists(filename)) return filename; @@ -469,12 +495,10 @@ char *getCustomSoundFilename(char *basename) if (!setup.override_level_sounds) { -#if 1 /* 1st try: look for special artwork configured in level series config */ - filename = getPath2(getLevelArtworkDir(artwork.snd_first), basename); + filename = getPath2(getLevelArtworkDir(TREE_TYPE_SOUNDS_DIR), basename); if (fileExists(filename)) return filename; -#endif /* 2nd try: look for special artwork in current level series directory */ filename = getPath3(getCurrentLevelDir(), SOUNDS_DIRECTORY, basename); @@ -500,9 +524,19 @@ char *getCustomSoundFilename(char *basename) return NULL; /* cannot find specified artwork file anywhere */ } -char *getCustomSoundConfigFilename() +char *getCustomArtworkFilename(char *basename, int type) +{ + 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 getCustomSoundFilename(SOUNDSINFO_FILENAME); + return getCustomArtworkFilename(ARTWORKINFO_FILENAME(type), type); } char *getCustomMusicDirectory(void) @@ -514,12 +548,10 @@ char *getCustomMusicDirectory(void) if (!setup.override_level_music) { -#if 1 /* 1st try: look for special artwork configured in level series config */ - directory = getStringCopy(getLevelArtworkDir(artwork.mus_first)); + directory = getStringCopy(getLevelArtworkDir(TREE_TYPE_MUSIC_DIR)); if (fileExists(directory)) return directory; -#endif /* 2nd try: look for special artwork in current level series directory */ directory = getPath2(getCurrentLevelDir(), MUSIC_DIRECTORY); @@ -529,11 +561,6 @@ char *getCustomMusicDirectory(void) /* 3rd try: look for special artwork in configured artwork directory */ directory = getStringCopy(getSetupArtworkDir(artwork.mus_current)); - -#if 1 - printf("DEBUG: checking directory '%s' ...\n", directory); -#endif - if (fileExists(directory)) return directory; @@ -1296,9 +1323,9 @@ static void setTreeInfoToDefaults(TreeInfo *ldi, int type) ldi->graphics_set = NULL; ldi->sounds_set = NULL; ldi->music_set = NULL; - ldi->graphics_path = getStringCopy(NOT_AVAILABLE); - ldi->sounds_path = getStringCopy(NOT_AVAILABLE); - ldi->music_path = getStringCopy(NOT_AVAILABLE); + 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; @@ -1849,16 +1876,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; }