return music_dir;
}
+#if 1
+static char *getDefaultArtworkSet(int type)
+{
+ return (type == TREE_TYPE_GRAPHICS_DIR ? "gfx_classic" :
+ type == TREE_TYPE_SOUNDS_DIR ? "snd_classic" :
+ type == TREE_TYPE_MUSIC_DIR ? "mus_classic" : "");
+}
+
+static char *getDefaultArtworkDir(int type)
+{
+ return (type == TREE_TYPE_GRAPHICS_DIR ?
+ getDefaultGraphicsDir("gfx_classic") :
+ type == TREE_TYPE_SOUNDS_DIR ?
+ getDefaultSoundsDir("snd_classic") :
+ type == TREE_TYPE_MUSIC_DIR ?
+ getDefaultMusicDir("mus_classic") : "");
+}
+
+#else
+
static char *getDefaultArtworkSet(int type)
{
return (type == TREE_TYPE_GRAPHICS_DIR ? GFX_CLASSIC_SUBDIR :
type == TREE_TYPE_MUSIC_DIR ?
getDefaultMusicDir(MUS_CLASSIC_SUBDIR) : "");
}
+#endif
static char *getUserGraphicsDir()
{
return NULL;
}
-char *getLevelSetTitleMessageFilename(int nr, boolean initial)
+char *getLevelSetTitleMessageBasename(int nr, boolean initial)
{
- static char *filename = NULL;
- char basename[32];
+ static char basename[32];
sprintf(basename, "%s_%d.txt",
(initial ? "titlemessage_initial" : "titlemessage"), nr + 1);
+ return basename;
+}
+
+char *getLevelSetTitleMessageFilename(int nr, boolean initial)
+{
+ static char *filename = NULL;
+ char *basename;
+ boolean skip_setup_artwork = FALSE;
+
checked_free(filename);
- filename = getPath2(getCurrentLevelDir(), basename);
+ basename = getLevelSetTitleMessageBasename(nr, initial);
+
+ if (!gfx.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;
+
+ free(filename);
+
+ /* 2nd try: look for message file in current level set directory */
+ filename = getPath2(getCurrentLevelDir(), basename);
+ if (fileExists(filename))
+ return filename;
+
+ free(filename);
+
+ /* check if there is special artwork configured in level series config */
+ if (getLevelArtworkSet(ARTWORK_TYPE_GRAPHICS) != NULL)
+ {
+ /* 3rd try: look for special artwork configured in level series config */
+ filename = getPath2(getLevelArtworkDir(ARTWORK_TYPE_GRAPHICS), basename);
+ if (fileExists(filename))
+ return filename;
+
+ free(filename);
+
+ /* take missing artwork configured in level set config from default */
+ skip_setup_artwork = TRUE;
+ }
+ }
+
+ if (!skip_setup_artwork)
+ {
+ /* 4th try: look for special artwork in configured artwork directory */
+ filename = getPath2(getSetupArtworkDir(artwork.gfx_current), basename);
+ if (fileExists(filename))
+ return filename;
+
+ free(filename);
+ }
+
+ /* 5th try: look for default artwork in new default artwork directory */
+ filename = getPath2(getDefaultGraphicsDir(GFX_CLASSIC_SUBDIR), basename);
if (fileExists(filename))
return filename;
- return NULL;
+ free(filename);
+
+ /* 6th 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 specified artwork file anywhere */
}
static char *getCorrectedArtworkBasename(char *basename)
basename = getCorrectedArtworkBasename(basename);
- if (!setup.override_level_graphics)
+ if (!gfx.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;
+#if CREATE_SPECIAL_EDITION
+ free(filename);
+
+ /* !!! INSERT WARNING HERE TO REPORT MISSING ARTWORK FILES !!! */
+#if 0
+ printf("::: MISSING ARTWORK FILE '%s'\n", basename);
+#endif
+
+ /* 6th try: look for fallback artwork in old default artwork directory */
+ /* (needed to prevent errors when trying to access unused artwork files) */
+ filename = getPath2(options.graphics_directory, GFX_FALLBACK_FILENAME);
+ if (fileExists(filename))
+ return filename;
+#endif
+
return NULL; /* cannot find specified artwork file anywhere */
}
basename = getCorrectedArtworkBasename(basename);
- if (!setup.override_level_sounds)
+ if (!gfx.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;
+#if CREATE_SPECIAL_EDITION
+ free(filename);
+
+ /* 6th try: look for fallback artwork in old default artwork directory */
+ /* (needed to prevent errors when trying to access unused artwork files) */
+ filename = getPath2(options.sounds_directory, SND_FALLBACK_FILENAME);
+ if (fileExists(filename))
+ return filename;
+#endif
+
return NULL; /* cannot find specified artwork file anywhere */
}
basename = getCorrectedArtworkBasename(basename);
- if (!setup.override_level_music)
+ if (!gfx.override_level_music)
{
/* 1st try: look for special artwork in current level series directory */
filename = getPath3(getCurrentLevelDir(), MUSIC_DIRECTORY, basename);
if (fileExists(filename))
return filename;
+#if CREATE_SPECIAL_EDITION
+ free(filename);
+
+ /* 6th try: look for fallback artwork in old default artwork directory */
+ /* (needed to prevent errors when trying to access unused artwork files) */
+ filename = getPath2(options.music_directory, MUS_FALLBACK_FILENAME);
+ if (fileExists(filename))
+ return filename;
+#endif
+
return NULL; /* cannot find specified artwork file anywhere */
}
checked_free(directory);
- if (!setup.override_level_music)
+ if (!gfx.override_level_music)
{
/* 1st try: look for special artwork in current level series directory */
directory = getPath2(getCurrentLevelDir(), MUSIC_DIRECTORY);
#define ALLOW_TOKEN_VALUE_SEPARATOR_BEING_WHITESPACE 1
#define CHECK_TOKEN_VALUE_SEPARATOR__WARN_IF_MISSING 0
+#define CHECK_TOKEN__WARN_IF_ALREADY_EXISTS_IN_HASH 0
static boolean token_value_separator_found = FALSE;
#if CHECK_TOKEN_VALUE_SEPARATOR__WARN_IF_MISSING
static boolean token_value_separator_warning = FALSE;
#endif
+#if CHECK_TOKEN__WARN_IF_ALREADY_EXISTS_IN_HASH
+static boolean token_already_exists_warning = FALSE;
+#endif
static boolean getTokenValueFromSetupLineExt(char *line,
char **token_ptr, char **value_ptr,
void *insert_ptr = NULL;
boolean read_continued_line = FALSE;
FILE *file;
- int line_nr = 0;
- int token_count = 0;
+ int line_nr = 0, token_count = 0, include_count = 0;
#if CHECK_TOKEN_VALUE_SEPARATOR__WARN_IF_MISSING
token_value_separator_warning = FALSE;
#endif
+#if CHECK_TOKEN__WARN_IF_ALREADY_EXISTS_IN_HASH
+ token_already_exists_warning = FALSE;
+#endif
+
if (!(file = fopen(filename, MODE_READ)))
{
Error(ERR_WARN, "cannot open configuration file '%s'", filename);
free(basepath);
free(basename);
free(filename_include);
+
+ include_count++;
}
else
{
else
{
if (is_hash)
+ {
+#if CHECK_TOKEN__WARN_IF_ALREADY_EXISTS_IN_HASH
+ char *old_value =
+ getHashEntry((SetupFileHash *)setup_file_data, token);
+
+ if (old_value != NULL)
+ {
+ if (!token_already_exists_warning)
+ {
+ Error(ERR_INFO_LINE, "-");
+ Error(ERR_WARN, "duplicate token(s) found in config file:");
+ Error(ERR_INFO, "- config file: '%s'", filename);
+
+ token_already_exists_warning = TRUE;
+ }
+
+ Error(ERR_INFO, "- token: '%s' (in line %d)", token, line_nr);
+ Error(ERR_INFO, " old value: '%s'", old_value);
+ Error(ERR_INFO, " new value: '%s'", value);
+ }
+#endif
+
setHashEntry((SetupFileHash *)setup_file_data, token, value);
+ }
else
+ {
insert_ptr = addListEntry((SetupFileList *)insert_ptr, token, value);
+ }
token_count++;
}
Error(ERR_INFO_LINE, "-");
#endif
- if (token_count == 0)
+#if CHECK_TOKEN__WARN_IF_ALREADY_EXISTS_IN_HASH
+ if (token_already_exists_warning)
+ Error(ERR_INFO_LINE, "-");
+#endif
+
+ if (token_count == 0 && include_count == 0)
Error(ERR_WARN, "configuration file '%s' is empty", filename);
if (top_recursion_level)
char *level_directory,
char *directory_name)
{
+#if 0
static unsigned long progress_delay = 0;
unsigned long progress_delay_value = 100; /* (in milliseconds) */
+#endif
char *directory_path = getPath2(level_directory, directory_name);
char *filename = getPath2(directory_path, LEVELINFO_FILENAME);
SetupFileHash *setup_file_hash;
leveldir_new->last_level : leveldir_new->first_level);
#if 1
+#if 1
+ DrawInitTextExt(leveldir_new->name, 150, FC_YELLOW,
+ leveldir_new->level_group);
+#else
if (leveldir_new->level_group ||
DelayReached(&progress_delay, progress_delay_value))
DrawInitText(leveldir_new->name, 150, FC_YELLOW);
+#endif
#else
DrawInitText(leveldir_new->name, 150, FC_YELLOW);
#endif
void LoadArtworkInfoFromLevelInfo(ArtworkDirTree **artwork_node,
LevelDirTree *level_node)
{
+#if 0
static unsigned long progress_delay = 0;
unsigned long progress_delay_value = 100; /* (in milliseconds) */
+#endif
int type = (*artwork_node)->type;
/* recursively check all level directories for artwork sub-directories */
}
#if 1
+ DrawInitTextExt(level_node->name, 150, FC_YELLOW,
+ level_node->level_group);
+#else
if (level_node->level_group ||
DelayReached(&progress_delay, progress_delay_value))
DrawInitText(level_node->name, 150, FC_YELLOW);
/* always start with reliable default values */
leveldir_current = getFirstValidTreeInfoEntry(leveldir_first);
+#if CREATE_SPECIAL_EDITION_RND_JUE
+ leveldir_current = getTreeInfoFromIdentifier(leveldir_first,
+ "jue_start");
+ if (leveldir_current == NULL)
+ leveldir_current = getFirstValidTreeInfoEntry(leveldir_first);
+#endif
+
if ((level_setup_hash = loadSetupFileHash(filename)))
{
char *last_level_series =