X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fimage.c;h=31975e04b29850fa988377c88f6ccfcec57e2cef;hb=8458af9ed76d6194de77b184e4e1ba2041e6aa17;hp=dfd806e37ddec66c4e3dfc9fdb33b857a4c611da;hpb=ba0568bc8d5b8b3d081691b8e987f2b66a4c13e6;p=rocksndiamonds.git diff --git a/src/libgame/image.c b/src/libgame/image.c index dfd806e3..31975e04 100644 --- a/src/libgame/image.c +++ b/src/libgame/image.c @@ -696,16 +696,30 @@ static void FreeImage(void *ptr) free(image); } -struct FileInfo *getCurrentImageList() +int getImageListSize() { - return image_info->file_list; + return (image_info->num_file_list_entries + + image_info->num_dynamic_file_list_entries); } -Bitmap *getBitmapFromImageID(int graphic) +struct FileInfo *getImageListEntry(int pos) { - ImageInfo **img_info = (ImageInfo **)image_info->artwork_list; + int num_list_entries = image_info->num_file_list_entries; + int list_pos = (pos < num_list_entries ? pos : pos - num_list_entries); - return (img_info[graphic] != NULL ? img_info[graphic]->bitmap : NULL); + return (pos < num_list_entries ? &image_info->file_list[list_pos] : + &image_info->dynamic_file_list[list_pos]); +} + +Bitmap *getBitmapFromImageID(int pos) +{ + int num_list_entries = image_info->num_file_list_entries; + int list_pos = (pos < num_list_entries ? pos : pos - num_list_entries); + ImageInfo **img_info = + (ImageInfo **)(pos < num_list_entries ? image_info->artwork_list : + image_info->dynamic_artwork_list); + + return (img_info[list_pos] != NULL ? img_info[list_pos]->bitmap : NULL); } char *getTokenFromImageID(int graphic) @@ -720,6 +734,16 @@ char *getImageConfigFilename() return getCustomArtworkConfigFilename(image_info->type); } +int getImageListPropertyMappingSize() +{ + return image_info->num_property_mapping_entries; +} + +struct PropertyMapping *getImageListPropertyMapping() +{ + return image_info->property_mapping; +} + void InitImageList(struct ConfigInfo *config_list, int num_file_list_entries, struct ConfigInfo *config_suffix_list, char **base_prefixes, @@ -734,14 +758,17 @@ void InitImageList(struct ConfigInfo *config_list, int num_file_list_entries, /* ---------- initialize file list and suffix lists ---------- */ image_info->num_file_list_entries = num_file_list_entries; + image_info->num_dynamic_file_list_entries = 0; + + image_info->file_list = + getFileListFromConfigList(config_list, config_suffix_list, + num_file_list_entries); + image_info->dynamic_file_list = NULL; image_info->num_suffix_list_entries = 0; for (i=0; config_suffix_list[i].token != NULL; i++) image_info->num_suffix_list_entries++; - image_info->file_list = - getFileListFromConfigList(config_list, config_suffix_list, - num_file_list_entries); image_info->suffix_list = config_suffix_list; /* ---------- initialize base prefix and suffixes lists ---------- */ @@ -761,12 +788,18 @@ void InitImageList(struct ConfigInfo *config_list, int num_file_list_entries, image_info->base_prefixes = base_prefixes; image_info->ext1_suffixes = ext1_suffixes; image_info->ext2_suffixes = ext2_suffixes; - image_info->custom_setup_list = NULL; + + image_info->num_property_mapping_entries = 0; + + image_info->property_mapping = NULL; /* ---------- initialize artwork reference and content lists ---------- */ + image_info->sizeof_artwork_list_entry = sizeof(ImageInfo *); + image_info->artwork_list = checked_calloc(num_file_list_entries * sizeof(ImageInfo *)); + image_info->dynamic_artwork_list = NULL; image_info->content_list = NULL; @@ -788,5 +821,5 @@ void ReloadCustomImages() void FreeAllImages() { - FreeCustomArtworkList(image_info); + FreeCustomArtworkLists(image_info); }