+void ReloadCustomArtwork()
+{
+ 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_filename != leveldir_current->filename)
+ {
+ 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 ||
+ last_override_level_graphics != setup.override_level_graphics)
+ {
+ int i;
+
+ ClearRectangle(window, 0, 0, WIN_XSIZE, WIN_YSIZE);
+
+ for(i=0; i<NUM_PICTURES; i++)
+ {
+ DrawInitText(image_filename[i], 150, FC_YELLOW);
+ ReloadCustomImage(pix[i], image_filename[i]);
+ }
+
+ FreeTileClipmasks();
+ InitTileClipmasks();
+ InitGfxBackground();
+
+ /* 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;
+ }
+
+ if (artwork.sounds_set_current_name != artwork.snd_current->name ||
+ last_override_level_sounds != setup.override_level_sounds)
+ {
+ InitReloadSounds(artwork.snd_current->name);
+
+ artwork.sounds_set_current_name = artwork.snd_current->name;
+ last_override_level_sounds = setup.override_level_sounds;
+ }
+
+ if (artwork.music_set_current_name != artwork.mus_current->name ||
+ last_override_level_music != setup.override_level_music)
+ {
+ InitReloadMusic(artwork.mus_current->name);
+
+ artwork.music_set_current_name = artwork.mus_current->name;
+ last_override_level_music = setup.override_level_music;
+ }
+}
+