X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fmisc.c;h=32910410bff9d25d3732813e85091a0fae53f269;hb=ab0c2cf87c09fdc785f5124640a9f3334bb3a4b4;hp=31138a682a1f68677556bac20fdedf814af3a79d;hpb=3683bbbe90156d2a9ab32de08099e094a446e5f8;p=rocksndiamonds.git diff --git a/src/libgame/misc.c b/src/libgame/misc.c index 31138a68..32910410 100644 --- a/src/libgame/misc.c +++ b/src/libgame/misc.c @@ -442,7 +442,7 @@ char *getPath3(char *path1, char *path2, char *path3) return complete_path; } -static char *getStringCat2(char *s1, char *s2) +char *getStringCat2(char *s1, char *s2) { char *complete_string = checked_malloc(strlen(s1) + strlen(s2) + 1); @@ -1709,6 +1709,25 @@ static void add_dynamic_file_list_entry(struct FileInfo **list, read_token_parameters(extra_file_list, suffix_list, new_list_entry); } +static void add_property_mapping(struct PropertyMapping **list, + int *num_list_entries, + int base_index, int ext1_index,int ext2_index, + int artwork_index) +{ + struct PropertyMapping *new_list_entry; + + (*num_list_entries)++; + *list = checked_realloc(*list, + *num_list_entries * sizeof(struct PropertyMapping)); + new_list_entry = &(*list)[*num_list_entries - 1]; + + new_list_entry->base_index = base_index; + new_list_entry->ext1_index = ext1_index; + new_list_entry->ext2_index = ext2_index; + + new_list_entry->artwork_index = artwork_index; +} + void LoadArtworkConfig(struct ArtworkListInfo *artwork_info) { struct FileInfo *file_list = artwork_info->file_list; @@ -1754,14 +1773,21 @@ void LoadArtworkConfig(struct ArtworkListInfo *artwork_info) } free(artwork_info->dynamic_file_list); - artwork_info->dynamic_file_list = NULL; - artwork_info->num_dynamic_file_list_entries = 0; 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; @@ -1772,7 +1798,7 @@ void LoadArtworkConfig(struct ArtworkListInfo *artwork_info) for (i=0; inext) { - struct FileInfo **dynamic_file_list = &artwork_info->dynamic_file_list; + struct FileInfo **dynamic_file_list = + &artwork_info->dynamic_file_list; int *num_dynamic_file_list_entries = &artwork_info->num_dynamic_file_list_entries; + struct PropertyMapping **property_mapping = + &artwork_info->property_mapping; + int *num_property_mapping_entries = + &artwork_info->num_property_mapping_entries; + int current_summarized_file_list_entry = + artwork_info->num_file_list_entries + + artwork_info->num_dynamic_file_list_entries; char *token = list->token; int len_token = strlen(token); int start_pos; @@ -1848,6 +1882,10 @@ void LoadArtworkConfig(struct ArtworkListInfo *artwork_info) suffix_list, num_suffix_list_entries, token); + add_property_mapping(property_mapping, + num_property_mapping_entries, + i, -1, -1, + current_summarized_file_list_entry); continue; } @@ -1878,6 +1916,10 @@ void LoadArtworkConfig(struct ArtworkListInfo *artwork_info) suffix_list, num_suffix_list_entries, token); + add_property_mapping(property_mapping, + num_property_mapping_entries, + i, j, -1, + current_summarized_file_list_entry); continue; } @@ -1907,6 +1949,10 @@ void LoadArtworkConfig(struct ArtworkListInfo *artwork_info) suffix_list, num_suffix_list_entries, token); + add_property_mapping(property_mapping, + num_property_mapping_entries, + i, j, k, + current_summarized_file_list_entry); continue; } }