rnd-20030802-2-src
[rocksndiamonds.git] / src / libgame / misc.c
index f487175728d274d820630ec09a205d9d7a2c846e..deac80506d6389892472ac7737d994398574d8b3 100644 (file)
@@ -30,6 +30,7 @@
 #include "setup.h"
 #include "random.h"
 #include "text.h"
+#include "image.h"
 
 
 /* ------------------------------------------------------------------------- */
@@ -1801,8 +1802,16 @@ static void read_token_parameters(SetupFileHash *setup_file_hash,
     /* mark config file token as well known from default config */
     setHashEntry(setup_file_hash, file_list_entry->token, known_token_value);
   }
+#if 0
   else
+  {
+    if (strcmp(file_list_entry->filename,
+              file_list_entry->default_filename) != 0)
+      printf("___ resetting '%s' to default\n", file_list_entry->token);
+
     setString(&file_list_entry->filename, file_list_entry->default_filename);
+  }
+#endif
 
   /* check for config tokens that can be build by base token and suffixes */
   for (i=0; suffix_list[i].token != NULL; i++)
@@ -1869,7 +1878,8 @@ static void add_property_mapping(struct PropertyMapping **list,
   new_list_entry->artwork_index = artwork_index;
 }
 
-void LoadArtworkConfig(struct ArtworkListInfo *artwork_info)
+static void LoadArtworkConfigFromFilename(struct ArtworkListInfo *artwork_info,
+                                         char *filename)
 {
   struct FileInfo *file_list = artwork_info->file_list;
   struct ConfigInfo *suffix_list = artwork_info->suffix_list;
@@ -1885,55 +1895,17 @@ void LoadArtworkConfig(struct ArtworkListInfo *artwork_info)
   int num_ext2_suffixes = artwork_info->num_ext2_suffixes;
   int num_ext3_suffixes = artwork_info->num_ext3_suffixes;
   int num_ignore_tokens = artwork_info->num_ignore_tokens;
-  char *filename = getCustomArtworkConfigFilename(artwork_info->type);
   SetupFileHash *setup_file_hash, *extra_file_hash;
   char *known_token_value = KNOWN_TOKEN_VALUE;
   int i, j, k, l;
 
-#if 0
-  printf("GOT CUSTOM ARTWORK CONFIG FILE '%s'\n", filename);
-#endif
-
-  /* always start with reliable default values */
-  for (i=0; i<num_file_list_entries; i++)
-  {
-    setString(&file_list[i].filename, file_list[i].default_filename);
-
-    for (j=0; j<num_suffix_list_entries; j++)
-      setString(&file_list[i].parameter[j], file_list[i].default_parameter[j]);
-
-    file_list[i].redefined = FALSE;
-  }
-
-  /* free previous dynamic artwork file array */
-  if (artwork_info->dynamic_file_list != NULL)
-  {
-    for (i=0; i<artwork_info->num_dynamic_file_list_entries; i++)
-    {
-      free(artwork_info->dynamic_file_list[i].token);
-      free(artwork_info->dynamic_file_list[i].filename);
-      free(artwork_info->dynamic_file_list[i].parameter);
-    }
-
-    free(artwork_info->dynamic_file_list);
-    artwork_info->dynamic_file_list = NULL;
-
-    FreeCustomArtworkList(artwork_info, &artwork_info->dynamic_artwork_list,
-                         &artwork_info->num_dynamic_file_list_entries);
-  }
-
-  /* free previous property mapping */
-  if (artwork_info->property_mapping != NULL)
-  {
-    free(artwork_info->property_mapping);
-
-    artwork_info->property_mapping = NULL;
-    artwork_info->num_property_mapping_entries = 0;
-  }
-
   if (filename == NULL)
     return;
 
+#if 0
+  printf("::: LoadArtworkConfigFromFilename: '%s'\n", filename);
+#endif
+
   if ((setup_file_hash = loadSetupFileHash(filename)) == NULL)
     return;
 
@@ -2243,6 +2215,67 @@ void LoadArtworkConfig(struct ArtworkListInfo *artwork_info)
 #endif
 }
 
+void LoadArtworkConfig(struct ArtworkListInfo *artwork_info)
+{
+  struct FileInfo *file_list = artwork_info->file_list;
+  int num_file_list_entries = artwork_info->num_file_list_entries;
+  int num_suffix_list_entries = artwork_info->num_suffix_list_entries;
+  char *filename_base, *filename_local;
+  int i, j;
+
+#if 0
+  printf("GOT CUSTOM ARTWORK CONFIG FILE '%s'\n", filename);
+#endif
+
+  /* always start with reliable default values */
+  for (i=0; i<num_file_list_entries; i++)
+  {
+    setString(&file_list[i].filename, file_list[i].default_filename);
+
+    for (j=0; j<num_suffix_list_entries; j++)
+      setString(&file_list[i].parameter[j], file_list[i].default_parameter[j]);
+
+    file_list[i].redefined = FALSE;
+  }
+
+  /* free previous dynamic artwork file array */
+  if (artwork_info->dynamic_file_list != NULL)
+  {
+    for (i=0; i<artwork_info->num_dynamic_file_list_entries; i++)
+    {
+      free(artwork_info->dynamic_file_list[i].token);
+      free(artwork_info->dynamic_file_list[i].filename);
+      free(artwork_info->dynamic_file_list[i].parameter);
+    }
+
+    free(artwork_info->dynamic_file_list);
+    artwork_info->dynamic_file_list = NULL;
+
+    FreeCustomArtworkList(artwork_info, &artwork_info->dynamic_artwork_list,
+                         &artwork_info->num_dynamic_file_list_entries);
+  }
+
+  /* free previous property mapping */
+  if (artwork_info->property_mapping != NULL)
+  {
+    free(artwork_info->property_mapping);
+
+    artwork_info->property_mapping = NULL;
+    artwork_info->num_property_mapping_entries = 0;
+  }
+
+  /* first look for special artwork configured in level series config */
+  filename_base = getCustomArtworkLevelConfigFilename(artwork_info->type);
+
+  if (fileExists(filename_base))
+    LoadArtworkConfigFromFilename(artwork_info, filename_base);
+
+  filename_local = getCustomArtworkConfigFilename(artwork_info->type);
+
+  if (filename_local != NULL && strcmp(filename_base, filename_local) != 0)
+    LoadArtworkConfigFromFilename(artwork_info, filename_local);
+}
+
 static void deleteArtworkListEntry(struct ArtworkListInfo *artwork_info,
                                   struct ListNodeInfo **listnode)
 {
@@ -2273,7 +2306,7 @@ static void replaceArtworkListEntry(struct ArtworkListInfo *artwork_info,
                                    char *basename)
 {
   char *init_text[] =
-  { "",
+  {
     "Loading graphics:",
     "Loading sounds:",
     "Loading music:"
@@ -2282,11 +2315,6 @@ static void replaceArtworkListEntry(struct ArtworkListInfo *artwork_info,
   ListNode *node;
   char *filename = getCustomArtworkFilename(basename, artwork_info->type);
 
-#if 1
-    if (strcmp(basename, "RocksScreen.pcx") == 0)
-      printf("::: got filename '%s'\n", filename);
-#endif
-
   if (filename == NULL)
   {
     int error_mode = ERR_WARN;
@@ -2306,11 +2334,8 @@ static void replaceArtworkListEntry(struct ArtworkListInfo *artwork_info,
        This usually means that this artwork does not exist in this artwork set
        and a fallback to the existing artwork is done. */
 
-#if 1
-#if 1
-    if (strcmp(basename, "RocksScreen.pcx") == 0)
-#endif
-      printf("[artwork '%s' already exists (same list entry)]\n", filename);
+#if 0
+    printf("[artwork '%s' already exists (same list entry)]\n", filename);
 #endif
 
     return;
@@ -2332,6 +2357,10 @@ static void replaceArtworkListEntry(struct ArtworkListInfo *artwork_info,
       return;
   }
 
+#if 0
+  printf("::: %s: '%s'\n", init_text[artwork_info->type], basename);
+#endif
+
   DrawInitText(init_text[artwork_info->type], 120, FC_GREEN);
   DrawInitText(basename, 150, FC_YELLOW);
 
@@ -2418,8 +2447,15 @@ void ReloadCustomArtworkList(struct ArtworkListInfo *artwork_info)
 #endif
 
   for(i=0; i<num_file_list_entries; i++)
+  {
+#if 0
+    if (strcmp(file_list[i].token, "background") == 0)
+      printf("::: '%s' -> '%s'\n", file_list[i].token, file_list[i].filename);
+#endif
+
     LoadArtworkToList(artwork_info, &artwork_info->artwork_list[i],
                      file_list[i].filename, i);
+  }
 
 #if 0
   printf("DEBUG: reloading %d dynamic artwork files ...\n",