X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fimage.c;h=31975e04b29850fa988377c88f6ccfcec57e2cef;hb=8458af9ed76d6194de77b184e4e1ba2041e6aa17;hp=3ec55f390ff6b313d64ac5f8f269904ac269745d;hpb=68a47a5b92e7c62a8c8a06391e4f9b8d53eeb82f;p=rocksndiamonds.git diff --git a/src/libgame/image.c b/src/libgame/image.c index 3ec55f39..31975e04 100644 --- a/src/libgame/image.c +++ b/src/libgame/image.c @@ -14,6 +14,7 @@ #include "image.h" #include "pcx.h" #include "misc.h" +#include "setup.h" /* ========================================================================= */ @@ -37,8 +38,8 @@ Image *newImage(unsigned int width, unsigned int height, unsigned int depth) depth = 8; #endif - image = checked_malloc(sizeof(Image)); - image->data = checked_malloc(width * height * bytes_per_pixel); + image = checked_calloc(sizeof(Image)); + image->data = checked_calloc(width * height * bytes_per_pixel); image->width = width; image->height = height; image->depth = depth; @@ -695,36 +696,115 @@ 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); } -void InitImageList(struct ConfigInfo *config_list, +struct FileInfo *getImageListEntry(int pos) +{ + int num_list_entries = image_info->num_file_list_entries; + int list_pos = (pos < num_list_entries ? pos : pos - num_list_entries); + + 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) +{ + struct FileInfo *file_list = (struct FileInfo *)image_info->file_list; + + return file_list[graphic].token; +} + +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, - int num_file_list_entries) + char **base_prefixes, + char **ext1_suffixes, + char **ext2_suffixes) { int i; image_info = checked_calloc(sizeof(struct ArtworkListInfo)); - image_info->type = ARTWORK_TYPE_GRAPHICS; + /* ---------- initialize file list and suffix lists ---------- */ + image_info->num_file_list_entries = num_file_list_entries; - 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->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->suffix_list = config_suffix_list; + /* ---------- initialize base prefix and suffixes lists ---------- */ + + image_info->num_base_prefixes = 0; + for (i=0; base_prefixes[i] != NULL; i++) + image_info->num_base_prefixes++; + + image_info->num_ext1_suffixes = 0; + for (i=0; ext1_suffixes[i] != NULL; i++) + image_info->num_ext1_suffixes++; + + image_info->num_ext2_suffixes = 0; + for (i=0; ext2_suffixes[i] != NULL; i++) + image_info->num_ext2_suffixes++; + + image_info->base_prefixes = base_prefixes; + image_info->ext1_suffixes = ext1_suffixes; + image_info->ext2_suffixes = ext2_suffixes; + + 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; + /* ---------- initialize artwork loading/freeing functions ---------- */ + image_info->load_artwork = Load_PCX; image_info->free_artwork = FreeImage; } @@ -735,10 +815,11 @@ void ReloadCustomImages() printf("DEBUG: reloading images '%s' ...\n", artwork.gfx_current_identifier); #endif + LoadArtworkConfig(image_info); ReloadCustomArtworkList(image_info); } void FreeAllImages() { - FreeCustomArtworkList(image_info); + FreeCustomArtworkLists(image_info); }