fixed bug with unnecessarily reloading custom artwork on ECS/AGA change
authorHolger Schemel <info@artsoft.org>
Sun, 18 Oct 2020 22:54:09 +0000 (00:54 +0200)
committerHolger Schemel <info@artsoft.org>
Sun, 13 Dec 2020 23:57:57 +0000 (00:57 +0100)
This bug occurs when changing the setup option for ECS/AGA preference
when there exists a level set with both ECS and AGA graphics sets in
the available tree of level sets, and results in (visually) attempting
to reload the current graphics even if the currently active level set
does not have any such graphics variants.

This fix prevents such unnecessary attempts to reload custom graphics,
and adds a better check for changed graphics (also needed if graphics
change from ECS to AGA variant) that really compares the previous with
the current graphics (which may result in the need to reload graphics).

src/init.c

index 1c71531876003765be3eeb0d8d96608b40426c4d..c5427aca219af9b253c46dddb7d025a6d802bce8 100644 (file)
@@ -5910,6 +5910,7 @@ static void InitOverrideArtwork(void)
 static char *getNewArtworkIdentifier(int type)
 {
   static char *last_leveldir_identifier[3] = { NULL, NULL, NULL };
+  static char *last_artwork_identifier[3] = { NULL, NULL, NULL };
   static boolean last_override_level_artwork[3] = { FALSE, FALSE, FALSE };
   static boolean last_has_level_artwork_set[3] = { FALSE, FALSE, FALSE };
   static boolean initialized[3] = { FALSE, FALSE, FALSE };
@@ -5962,10 +5963,12 @@ static char *getNewArtworkIdentifier(int type)
   last_override_level_artwork[type] = setup_override_artwork;
 
   // ---------- reload if current artwork identifier has changed --------------
-  if (!strEqual(ARTWORK_CURRENT_IDENTIFIER(artwork, type),
-               artwork_current_identifier))
+  if (!strEqual(last_artwork_identifier[type], artwork_current_identifier))
     artwork_new_identifier = artwork_current_identifier;
 
+  // (we cannot compare string pointers here, so copy string content itself)
+  setString(&last_artwork_identifier[type], artwork_current_identifier);
+
   *(ARTWORK_CURRENT_IDENTIFIER_PTR(artwork, type)) = artwork_current_identifier;
 
   // ---------- do not reload directly after starting -------------------------
@@ -5990,8 +5993,8 @@ void ReloadCustomArtwork(int force_reload)
 
   InitOverrideArtwork();
 
-  force_reload_gfx |= AdjustGraphicsForEMC();
-  force_reload_snd |= AdjustSoundsForEMC();
+  AdjustGraphicsForEMC();
+  AdjustSoundsForEMC();
 
   gfx_new_identifier = getNewArtworkIdentifier(ARTWORK_TYPE_GRAPHICS);
   snd_new_identifier = getNewArtworkIdentifier(ARTWORK_TYPE_SOUNDS);