From: Holger Schemel Date: Tue, 11 Jun 2002 08:52:37 +0000 (+0200) Subject: rnd-20020611-1-src X-Git-Tag: 2.1.0^2~4 X-Git-Url: https://git.artsoft.org/?a=commitdiff_plain;h=f60e97c16b1c14ffd21d9f9ca86ad0be52dfa9b4;p=rocksndiamonds.git rnd-20020611-1-src --- diff --git a/src/init.c b/src/init.c index f89f107d..4da3ddb1 100644 --- a/src/init.c +++ b/src/init.c @@ -411,19 +411,29 @@ void InitGfxBackground() void ReloadCustomArtwork() { - static char *leveldir_current_name = NULL; + static char *leveldir_current_filename = NULL; static boolean last_override_level_graphics = FALSE; static boolean last_override_level_sounds = FALSE; static boolean last_override_level_music = FALSE; - if (leveldir_current_name != leveldir_current->name) + if (leveldir_current_filename != leveldir_current->filename) { - /* force reload of custom artwork after new level series was selected */ - artwork.graphics_set_current_name = NULL; - artwork.sounds_set_current_name = NULL; - artwork.music_set_current_name = NULL; - - leveldir_current_name = leveldir_current->name; + char *filename_old = leveldir_current_filename; + char *filename_new = leveldir_current->filename; + + /* force reload of custom artwork after new level series was selected, + but reload only that part of the artwork that really has changed */ + if (getTreeInfoFromFilename(artwork.gfx_first, filename_old) != + getTreeInfoFromFilename(artwork.gfx_first, filename_new)) + artwork.graphics_set_current_name = NULL; + if (getTreeInfoFromFilename(artwork.snd_first, filename_old) != + getTreeInfoFromFilename(artwork.snd_first, filename_new)) + artwork.sounds_set_current_name = NULL; + if (getTreeInfoFromFilename(artwork.mus_first, filename_new) != + getTreeInfoFromFilename(artwork.mus_first, filename_new)) + artwork.music_set_current_name = NULL; + + leveldir_current_filename = leveldir_current->filename; } if (artwork.graphics_set_current_name != artwork.gfx_current->name || @@ -443,7 +453,9 @@ void ReloadCustomArtwork() InitTileClipmasks(); InitGfxBackground(); - SetDoorState(DOOR_OPEN_1 | DOOR_CLOSE_2); + /* force redraw of (open or closed) door graphics */ + SetDoorState(DOOR_OPEN_ALL); + CloseDoor(DOOR_CLOSE_ALL | DOOR_NO_DELAY); artwork.graphics_set_current_name = artwork.gfx_current->name; last_override_level_graphics = setup.override_level_graphics; diff --git a/src/libgame/setup.c b/src/libgame/setup.c index f6688b1d..6c49cac9 100644 --- a/src/libgame/setup.c +++ b/src/libgame/setup.c @@ -553,13 +553,9 @@ boolean validLevelSeries(TreeInfo *node) 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 */ { @@ -642,6 +638,12 @@ TreeInfo *getTreeInfoFromFilenameExt(TreeInfo *node, char *filename) { 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; @@ -1631,7 +1633,9 @@ static boolean LoadArtworkInfoFromArtworkConf(TreeInfo **node_first, 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); @@ -1686,6 +1690,8 @@ static boolean LoadArtworkInfoFromArtworkConf(TreeInfo **node_first, artwork_new->name_sorting = getStringCopy(artwork_new->name); } + DrawInitText(artwork_new->name, 150, FC_YELLOW); + pushTreeInfo(node_first, artwork_new); freeSetupFileList(setup_file_list); @@ -1752,6 +1758,27 @@ static void LoadArtworkInfoFromArtworkDir(TreeInfo **node_first, 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); @@ -1777,6 +1804,13 @@ void LoadArtworkInfo() 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); @@ -1786,12 +1820,12 @@ void LoadArtworkInfo() 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_name = artwork.gfx_current->name; artwork.sounds_set_current_name = artwork.snd_current->name; diff --git a/src/libgame/system.h b/src/libgame/system.h index 1ade3147..6fe5f12f 100644 --- a/src/libgame/system.h +++ b/src/libgame/system.h @@ -115,6 +115,9 @@ /* default name for unknown player names */ #define ANONYMOUS_NAME "anonymous" +/* default text for non-existant artwork */ +#define NOT_AVAILABLE "(not available)" + /* default name for new levels */ #define NAMELESS_LEVEL_NAME "nameless level" diff --git a/src/screens.c b/src/screens.c index a04d75dc..de9c0973 100644 --- a/src/screens.c +++ b/src/screens.c @@ -155,7 +155,7 @@ void DrawMainMenu() /* needed if last screen was the setup screen and fullscreen state changed */ ToggleFullscreenIfNeeded(); - /* needed if last screen (setup/level) changed graphics, sounds or music */ + /* needed if last screen (level choice) changed graphics, sounds or music */ ReloadCustomArtwork(); #ifdef TARGET_SDL @@ -1370,23 +1370,25 @@ static void execSetupGame() static void execSetupGraphics() { - setup.graphics_set = artwork.gfx_current->name; - setup_mode = SETUP_MODE_GRAPHICS; DrawSetupScreen(); } static void execSetupSound() { - setup.sounds_set = artwork.snd_current->name; - setup.music_set = artwork.mus_current->name; - setup_mode = SETUP_MODE_SOUND; DrawSetupScreen(); } static void execSetupArtwork() { + /* needed if last screen (setup choice) changed graphics, sounds or music */ + ReloadCustomArtwork(); + + setup.graphics_set = artwork.gfx_current->name; + setup.sounds_set = artwork.snd_current->name; + setup.music_set = artwork.mus_current->name; + setup_mode = SETUP_MODE_ARTWORK; DrawSetupScreen(); } @@ -1661,7 +1663,7 @@ static void DrawSetupScreen_Generic() else if (setup_mode == SETUP_MODE_ARTWORK) { setup_info = setup_info_artwork; - title_string = "Setup Sound"; + title_string = "Custom Artwork"; } else if (setup_mode == SETUP_MODE_SHORTCUT) { diff --git a/src/timestamp.h b/src/timestamp.h index 76ab4cc9..1c0e46de 100644 --- a/src/timestamp.h +++ b/src/timestamp.h @@ -1 +1 @@ -#define COMPILE_DATE_STRING "[2002-06-10 01:52]" +#define COMPILE_DATE_STRING "[2002-06-11 01:11]"