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)
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()
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)
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 */
TreeInfo *getFirstValidTreeInfoEntry(TreeInfo *node)
{
if (node == NULL)
- {
- if (node->node_top) /* start with first tree entry */
- return getFirstValidTreeInfoEntry(*node->node_top);
- else
- return NULL;
- }
- else if (node->node_group) /* enter level group (step down into tree) */
+ return NULL;
+
+ if (node->node_group) /* enter level group (step down into tree) */
return getFirstValidTreeInfoEntry(node->node_group);
else if (node->parent_link) /* skip start entry of level group */
{
{
if (strcmp(filename, node->filename) == 0)
return node;
+
+ /* special case when looking for level series artwork:
+ node->name_short contains level series filename */
+ if (strcmp(node->filename, ".") == 0 &&
+ strcmp(filename, node->name_short) == 0)
+ return node;
}
node = node->next;
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 */
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;
artwork_new->name = getStringCopy(artwork_new->filename);
}
+#if 0
DrawInitText(artwork_new->name, 150, FC_YELLOW);
+#endif
if (artwork_new->name_short == NULL)
artwork_new->name_short = getStringCopy(artwork_new->name);
artwork_new->name_sorting = getStringCopy(artwork_new->name);
}
+ DrawInitText(artwork_new->name, 150, FC_YELLOW);
+
pushTreeInfo(node_first, artwork_new);
freeSetupFileList(setup_file_list);
base_directory);
}
+static TreeInfo *getDummyArtworkInfo(int type)
+{
+ /* this is only needed when there is completely no artwork available */
+ TreeInfo *artwork_new = newTreeInfo();
+
+ setTreeInfoToDefaults(artwork_new, type);
+
+ artwork_new->filename = getStringCopy(NOT_AVAILABLE);
+ artwork_new->fullpath = getStringCopy(NOT_AVAILABLE);
+ artwork_new->basepath = getStringCopy(NOT_AVAILABLE);
+
+ if (artwork_new->name != NULL)
+ free(artwork_new->name);
+
+ artwork_new->name = getStringCopy(NOT_AVAILABLE);
+ artwork_new->name_short = getStringCopy(NOT_AVAILABLE);
+ artwork_new->name_sorting = getStringCopy(NOT_AVAILABLE);
+
+ return artwork_new;
+}
+
void LoadArtworkInfo()
{
DrawInitText("Looking for custom artwork:", 120, FC_GREEN);
getUserMusicDir(),
TREE_TYPE_MUSIC_DIR);
+ if (artwork.gfx_first == NULL)
+ artwork.gfx_first = getDummyArtworkInfo(TREE_TYPE_GRAPHICS_DIR);
+ if (artwork.snd_first == NULL)
+ artwork.snd_first = getDummyArtworkInfo(TREE_TYPE_SOUNDS_DIR);
+ if (artwork.mus_first == NULL)
+ artwork.mus_first = getDummyArtworkInfo(TREE_TYPE_MUSIC_DIR);
+
/* before sorting, the first entries will be from the user directory */
artwork.gfx_current =
getTreeInfoFromFilename(artwork.gfx_first, setup.graphics_set);
artwork.snd_current =
getTreeInfoFromFilename(artwork.snd_first, setup.sounds_set);
if (artwork.snd_current == NULL)
- artwork.snd_current = getFirstValidTreeInfoEntry(artwork.snd_first);
+ artwork.snd_current = getFirstValidTreeInfoEntry(artwork.snd_first);
artwork.mus_current =
getTreeInfoFromFilename(artwork.mus_first, setup.music_set);
if (artwork.mus_current == NULL)
- artwork.mus_current = getFirstValidTreeInfoEntry(artwork.mus_first);
+ 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);
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);
{
static char value_string[MAX_LINE_LEN];
+ if (value == NULL)
+ return NULL;
+
switch (type)
{
case TYPE_BOOLEAN: