X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsetup.c;h=f6688b1ddf71d0b6fa3536f7ca48e09fea146a73;hb=350a8b1817f6696d4ba926e6d55ddd157e45b836;hp=6ad11351d1dca59eea56a49bb080f0dd5a7dd915;hpb=7891415ca10eb882506eaaa3bca720ec75723a0e;p=rocksndiamonds.git diff --git a/src/libgame/setup.c b/src/libgame/setup.c index 6ad11351..f6688b1d 100644 --- a/src/libgame/setup.c +++ b/src/libgame/setup.c @@ -385,32 +385,30 @@ char *getCustomImageFilename(char *basename) basename = getCorrectedImageBasename(basename); - /* 1st 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 private artwork directory */ - filename = getPath2(getUserGraphicsDir(), basename); - if (fileExists(filename)) - return filename; + if (!setup.override_level_graphics) + { + /* 1st try: look for special artwork in current level series directory */ + filename = getPath3(getCurrentLevelDir(), GRAPHICS_DIRECTORY, basename); + if (fileExists(filename)) + return filename; + } - /* 3rd try: look for special artwork in configured artwork directory */ + /* 2nd try: look for special artwork in configured artwork directory */ filename = getPath2(getSetupArtworkDir(artwork.gfx_current), basename); if (fileExists(filename)) return filename; - /* 4th try: look for default artwork in new default artwork directory */ + /* 3rd try: look for default artwork in new default artwork directory */ filename = getPath2(getDefaultGraphicsDir(GRAPHICS_SUBDIR), basename); if (fileExists(filename)) return filename; - /* 5th try: look for default artwork in old default artwork directory */ + /* 4th try: look for default artwork in old default artwork directory */ filename = getPath2(options.graphics_directory, basename); if (fileExists(filename)) return filename; - return NULL; /* cannot find image file */ + return NULL; /* cannot find specified artwork file anywhere */ } char *getCustomSoundFilename(char *basename) @@ -420,36 +418,30 @@ char *getCustomSoundFilename(char *basename) if (filename != NULL) free(filename); -#if 0 - /* 1st try: look for special artwork in current level series directory */ - filename = getPath3(getCurrentLevelDir(), SOUNDS_DIRECTORY, basename); - if (fileExists(filename)) - return filename; -#endif - -#if 0 - /* 2nd try: look for special artwork in private artwork directory */ - filename = getPath2(getUserSoundsDir(), basename); - if (fileExists(filename)) - return filename; -#endif + if (!setup.override_level_sounds) + { + /* 1st try: look for special artwork in current level series directory */ + filename = getPath3(getCurrentLevelDir(), SOUNDS_DIRECTORY, basename); + if (fileExists(filename)) + return filename; + } - /* 3rd try: look for special artwork in configured artwork directory */ + /* 2nd try: look for special artwork in configured artwork directory */ filename = getPath2(getSetupArtworkDir(artwork.snd_current), basename); if (fileExists(filename)) return filename; - /* 4th try: look for default artwork in new default artwork directory */ + /* 3rd try: look for default artwork in new default artwork directory */ filename = getPath2(getDefaultSoundsDir(SOUNDS_SUBDIR), basename); if (fileExists(filename)) return filename; - /* 5th try: look for default artwork in old default artwork directory */ + /* 4th try: look for default artwork in old default artwork directory */ filename = getPath2(options.sounds_directory, basename); if (fileExists(filename)) return filename; - return NULL; /* cannot find image file */ + return NULL; /* cannot find specified artwork file anywhere */ } char *getCustomSoundConfigFilename() @@ -464,32 +456,30 @@ char *getCustomMusicDirectory(void) if (directory != NULL) free(directory); - /* 1st 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 private artwork directory */ - directory = getStringCopy(getUserMusicDir()); - if (fileExists(directory)) - return directory; + if (!setup.override_level_music) + { + /* 1st try: look for special artwork in current level series directory */ + directory = getPath2(getCurrentLevelDir(), MUSIC_DIRECTORY); + if (fileExists(directory)) + return directory; + } - /* 3rd try: look for special artwork in configured artwork directory */ + /* 2nd try: look for special artwork in configured artwork directory */ directory = getStringCopy(getSetupArtworkDir(artwork.mus_current)); if (fileExists(directory)) return directory; - /* 4th try: look for default artwork in new default artwork directory */ + /* 3rd try: look for default artwork in new default artwork directory */ directory = getStringCopy(getDefaultMusicDir(MUSIC_SUBDIR)); if (fileExists(directory)) return directory; - /* 5th try: look for default artwork in old default artwork directory */ + /* 4th try: look for default artwork in old default artwork directory */ directory = getStringCopy(options.music_directory); if (fileExists(directory)) return directory; - return NULL; /* cannot find image file */ + return NULL; /* cannot find specified artwork file anywhere */ } void InitTapeDirectory(char *level_subdir) @@ -526,50 +516,6 @@ void InitLevelSetupDirectory(char *level_subdir) createDirectory(getLevelSetupDir(level_subdir), "level setup",PERMS_PRIVATE); } -void ReadChunk_VERS(FILE *file, int *file_version, int *game_version) -{ - int file_version_major, file_version_minor, file_version_patch; - int game_version_major, game_version_minor, game_version_patch; - - file_version_major = fgetc(file); - file_version_minor = fgetc(file); - file_version_patch = fgetc(file); - fgetc(file); /* not used */ - - game_version_major = fgetc(file); - game_version_minor = fgetc(file); - game_version_patch = fgetc(file); - fgetc(file); /* not used */ - - *file_version = VERSION_IDENT(file_version_major, - file_version_minor, - file_version_patch); - - *game_version = VERSION_IDENT(game_version_major, - game_version_minor, - game_version_patch); -} - -void WriteChunk_VERS(FILE *file, int file_version, int game_version) -{ - int file_version_major = VERSION_MAJOR(file_version); - int file_version_minor = VERSION_MINOR(file_version); - int file_version_patch = VERSION_PATCH(file_version); - int game_version_major = VERSION_MAJOR(game_version); - int game_version_minor = VERSION_MINOR(game_version); - int game_version_patch = VERSION_PATCH(game_version); - - fputc(file_version_major, file); - fputc(file_version_minor, file); - fputc(file_version_patch, file); - fputc(0, file); /* not used */ - - fputc(game_version_major, file); - fputc(game_version_minor, file); - fputc(game_version_patch, file); - fputc(0, file); /* not used */ -} - /* ------------------------------------------------------------------------- */ /* some functions to handle lists of level directories */ @@ -1452,6 +1398,8 @@ static boolean LoadLevelInfoFromLevelConf(TreeInfo **node_first, else setTreeInfoToDefaults(leveldir_new, TREE_TYPE_LEVEL_DIR); + leveldir_new->filename = getStringCopy(directory_name); + checkSetupFileListIdentifier(setup_file_list, getCookie("LEVELINFO")); /* set all structure fields according to the token/value pairs */ @@ -1475,8 +1423,6 @@ static boolean LoadLevelInfoFromLevelConf(TreeInfo **node_first, if (leveldir_new->name_sorting == NULL) leveldir_new->name_sorting = getStringCopy(leveldir_new->name); - leveldir_new->filename = getStringCopy(directory_name); - if (node_parent == NULL) /* top level group */ { leveldir_new->basepath = level_directory; @@ -1847,14 +1793,14 @@ void LoadArtworkInfo() if (artwork.mus_current == NULL) artwork.mus_current = getFirstValidTreeInfoEntry(artwork.mus_first); - artwork.graphics_set_current = artwork.gfx_current->name; - artwork.sounds_set_current = artwork.snd_current->name; - artwork.music_set_current = artwork.mus_current->name; + artwork.graphics_set_current_name = artwork.gfx_current->name; + artwork.sounds_set_current_name = artwork.snd_current->name; + artwork.music_set_current_name = artwork.mus_current->name; #if 0 - printf("graphics set == %s\n\n", artwork.graphics_set_current); - printf("sounds set == %s\n\n", artwork.sounds_set_current); - printf("music set == %s\n\n", artwork.music_set_current); + printf("graphics set == %s\n\n", artwork.graphics_set_current_name); + printf("sounds set == %s\n\n", artwork.sounds_set_current_name); + printf("music set == %s\n\n", artwork.music_set_current_name); #endif sortTreeInfo(&artwork.gfx_first, compareTreeInfoEntries); @@ -1927,7 +1873,7 @@ void LoadLevelArtworkInfo() sortTreeInfo(&artwork.snd_first, compareTreeInfoEntries); sortTreeInfo(&artwork.mus_first, compareTreeInfoEntries); -#if 1 +#if 0 dumpTreeInfo(artwork.gfx_first, 0); dumpTreeInfo(artwork.snd_first, 0); dumpTreeInfo(artwork.mus_first, 0); @@ -1978,6 +1924,9 @@ char *getSetupValue(int type, void *value) { static char value_string[MAX_LINE_LEN]; + if (value == NULL) + return NULL; + switch (type) { case TYPE_BOOLEAN: