rnd-20070901-2-src
authorHolger Schemel <info@artsoft.org>
Sat, 1 Sep 2007 13:41:01 +0000 (15:41 +0200)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:56:02 +0000 (10:56 +0200)
* fixed bug when defined artwork cannot be found for artwork that has
  default artwork cloned from other artwork (without default filename)

ChangeLog
src/conftime.h
src/libgame/misc.c
src/libgame/system.h

index b01037e4124484145f748a845a0176c8b4fa0b60..7487985239adeebd7171f4e0649a3323abe8ad44 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -4,6 +4,8 @@
          element was calculated by using log_2() from trigger player bits with
          the value PLAYER_BITS_ANY) -- this is now fixed by also storing the
          triggering player bit mask and handling all players in "move player"
+       * fixed bug when defined artwork cannot be found for artwork that has
+         default artwork cloned from other artwork (without default filename)
 
 2007-08-26
        * fixed broken editor copy and paste for custom elements between levels
index bffffdba7991c683c41f8ca4f9bd52dbdf416bfc..b4b712b44f2c5e477100d0b4f7c4be6de7878144 100644 (file)
@@ -1 +1 @@
-#define COMPILE_DATE_STRING "2007-09-01 10:49"
+#define COMPILE_DATE_STRING "2007-09-01 15:35"
index a20948d58d696a8fc0c7df8351753fd5f68bcdbc..3d63cc5c07316f7fa039ed938144e705552ffc75 100644 (file)
@@ -1992,6 +1992,7 @@ struct FileInfo *getFileListFromConfigList(struct ConfigInfo *config_list,
 
       file_list[i].redefined = FALSE;
       file_list[i].fallback_to_default = FALSE;
+      file_list[i].default_is_cloned = FALSE;
     }
   }
 
@@ -2048,6 +2049,9 @@ struct FileInfo *getFileListFromConfigList(struct ConfigInfo *config_list,
       printf("::: '%s' => '%s'\n", config_list[i].token, config_list[i].value);
 #endif
     }
+
+    if (strSuffix(config_list[i].token, ".clone_from"))
+      file_list[list_pos].default_is_cloned = TRUE;
   }
 
   num_file_list_entries_found = list_pos + 1;
@@ -2156,6 +2160,7 @@ static void add_dynamic_file_list_entry(struct FileInfo **list,
 
   new_list_entry->redefined = FALSE;
   new_list_entry->fallback_to_default = FALSE;
+  new_list_entry->default_is_cloned = FALSE;
 
   read_token_parameters(extra_file_hash, suffix_list, new_list_entry);
 }
@@ -2708,6 +2713,22 @@ static void replaceArtworkListEntry(struct ArtworkListInfo *artwork_info,
 
     basename = file_list_entry->default_filename;
 
+    /* fail for cloned default artwork that has no default filename defined */
+    if (file_list_entry->default_is_cloned &&
+       strEqual(basename, UNDEFINED_FILENAME))
+    {
+      int error_mode = ERR_WARN;
+
+      /* we can get away without sounds and music, but not without graphics */
+      if (*listnode == NULL && artwork_info->type == ARTWORK_TYPE_GRAPHICS)
+       error_mode = ERR_EXIT;
+
+      Error(error_mode, "token '%s' was cloned and has no default filename",
+           file_list_entry->token);
+
+      return;
+    }
+
     /* dynamic artwork has no default filename / skip empty default artwork */
     if (basename == NULL || strEqual(basename, UNDEFINED_FILENAME))
       return;
@@ -2784,6 +2805,7 @@ static void replaceArtworkListEntry(struct ArtworkListInfo *artwork_info,
       error_mode = ERR_EXIT;
 
     Error(error_mode, "cannot load artwork file '%s'", basename);
+
     return;
   }
 }
index 5d26341fada842c940c809036889fd413ca389a4..7288845fa24941a37e81854fc3f9fee9a45255c9 100644 (file)
@@ -987,6 +987,7 @@ struct FileInfo
 
   boolean redefined;
   boolean fallback_to_default;
+  boolean default_is_cloned;
 };
 
 struct SetupFileList