X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Flibgame%2Fimage.h;h=04952e74882e0535b766c4a6a687dd4311f53379;hp=9d001aae86244a5e1ff58b44a917cbb4f4f98542;hb=HEAD;hpb=68a47a5b92e7c62a8c8a06391e4f9b8d53eeb82f diff --git a/src/libgame/image.h b/src/libgame/image.h index 9d001aae..04952e74 100644 --- a/src/libgame/image.h +++ b/src/libgame/image.h @@ -1,15 +1,13 @@ -/*********************************************************** -* Artsoft Retro-Game Library * -*----------------------------------------------------------* -* (c) 1994-2002 Artsoft Entertainment * -* Holger Schemel * -* Detmolder Strasse 189 * -* 33604 Bielefeld * -* Germany * -* e-mail: info@artsoft.org * -*----------------------------------------------------------* -* image.h * -***********************************************************/ +// ============================================================================ +// Artsoft Retro-Game Library +// ---------------------------------------------------------------------------- +// (c) 1995-2014 by Artsoft Entertainment +// Holger Schemel +// info@artsoft.org +// https://www.artsoft.org/ +// ---------------------------------------------------------------------------- +// image.h +// ============================================================================ #ifndef IMAGE_H #define IMAGE_H @@ -17,64 +15,80 @@ #include "system.h" -#if defined(TARGET_X11) - -#define MAX_COLORS 256 /* maximal number of colors for each image */ - -typedef unsigned short Intensity; /* RGB intensity for X11 */ - -typedef struct -{ - Display *display; /* destination display */ - int depth; /* depth of destination drawable */ - Pixel index[MAX_COLORS]; /* array of pixel values */ - int no; /* number of pixels in the array */ - Colormap cmap; /* colormap used for image */ - Pixmap pixmap; /* final pixmap */ - Pixmap pixmap_mask; /* final pixmap of mask */ -} XImageInfo; - -struct RGBMap -{ - unsigned int used; /* number of colors used in RGB map */ - Intensity red[MAX_COLORS]; /* color values in X style */ - Intensity green[MAX_COLORS]; - Intensity blue[MAX_COLORS]; - boolean color_used[MAX_COLORS]; /* flag if color cell is used */ -}; - -typedef struct -{ - unsigned int type; /* type of image (True-Color etc.) */ - struct RGBMap rgb; /* RGB map of image if IRGB type */ - unsigned int width; /* width of image in pixels */ - unsigned int height; /* height of image in pixels */ - unsigned int depth; /* depth of image in bits if IRGB type */ - unsigned int bytes_per_pixel;/* (depth + 7) / 8 */ - unsigned int bytes_per_row; /* width * bytes_per_pixel */ - byte *data; /* image data */ -} Image; - -#define IMAGETYPE_BITMAP 0 /* monochrome bitmap */ -#define IMAGETYPE_RGB 1 /* RGB image with colormap */ -#define IMAGETYPE_TRUECOLOR 2 /* true-color image */ - -#define TRUECOLOR_RED(pixel) (((unsigned long)((pixel) & 0xff0000)) >> 16) -#define TRUECOLOR_GREEN(pixel) (((unsigned long)((pixel) & 0xff00)) >> 8) -#define TRUECOLOR_BLUE(pixel) ( (unsigned long)((pixel) & 0xff)) -#define RGB_TO_TRUECOLOR(r,g,b) ((((unsigned long)((r) & 0xff00)) << 8) | ((g) & 0xff00) | (((unsigned short)(b)) >> 8)) - -Image *newImage(unsigned int, unsigned int, unsigned int); -void freeImage(Image *); -void freeXImage(Image *, XImageInfo *); -int Read_PCX_to_Pixmap(Display *, Window, GC, char *, Pixmap *, Pixmap *); - -#endif /* TARGET_X11 */ - - -struct FileInfo *getCurrentImageList(); -void InitImageList(struct ConfigInfo *, struct ConfigInfo *, int); -void ReloadCustomImages(); -void FreeAllImages(); - -#endif /* IMAGE_H */ +// bitmap array positions for various element sizes, if available +// +// for any loaded image, the "standard" size (which represents the 32x32 pixel +// size for game elements) is always defined; other bitmap sizes may be NULL +// +// formats from 32x32 down to 1x1 are standard bitmap sizes for game elements +// (used in the game, in the level editor, in the level preview etc.) +// +// "CUSTOM" sizes for game elements (like 64x64) may be additionally created; +// all "OTHER" image sizes are stored if different from all other bitmap sizes, +// which may be used "as is" by global animations (as the "standard" size used +// normally may be wrong due to being scaled up or down to a different size if +// the same image contains game elements in a non-standard size) + +#define IMG_BITMAP_32x32 0 +#define IMG_BITMAP_16x16 1 +#define IMG_BITMAP_8x8 2 +#define IMG_BITMAP_4x4 3 +#define IMG_BITMAP_2x2 4 +#define IMG_BITMAP_1x1 5 +#define IMG_BITMAP_CUSTOM 6 +#define IMG_BITMAP_OTHER 7 + +#define NUM_IMG_BITMAPS 8 + +// these bitmap pointers point to one of the above bitmaps (do not free them) +#define IMG_BITMAP_PTR_GAME 8 +#define IMG_BITMAP_PTR_ORIGINAL 9 + +#define NUM_IMG_BITMAP_POINTERS 10 + +// this bitmap pointer points to the bitmap with default image size +#define IMG_BITMAP_STANDARD IMG_BITMAP_32x32 + +// maximum number of statically and dynamically defined image files +#define MAX_IMAGE_FILES 1000000 + + +#define GET_BITMAP_ID_FROM_TILESIZE(x) ((x) == 1 ? IMG_BITMAP_1x1 : \ + (x) == 2 ? IMG_BITMAP_2x2 : \ + (x) == 4 ? IMG_BITMAP_4x4 : \ + (x) == 8 ? IMG_BITMAP_8x8 : \ + (x) == 16 ? IMG_BITMAP_16x16 : \ + (x) == 32 ? IMG_BITMAP_32x32 : \ + IMG_BITMAP_CUSTOM) + +#define GET_TILESIZE_FROM_BITMAP_ID(x) ((x) == IMG_BITMAP_1x1 ? 1 : \ + (x) == IMG_BITMAP_2x2 ? 2 : \ + (x) == IMG_BITMAP_4x4 ? 4 : \ + (x) == IMG_BITMAP_8x8 ? 8 : \ + (x) == IMG_BITMAP_16x16 ? 16 : \ + (x) == IMG_BITMAP_32x32 ? 32 : \ + 0) + + +int getImageListSize(void); +struct FileInfo *getImageListEntryFromImageID(int); +Bitmap **getBitmapsFromImageID(int); +int getOriginalImageWidthFromImageID(int); +int getOriginalImageHeightFromImageID(int); +char *getTokenFromImageID(int); +int getImageIDFromToken(char *); +char *getImageConfigFilename(void); +int getImageListPropertyMappingSize(void); +struct PropertyMapping *getImageListPropertyMapping(void); +void InitImageList(struct ConfigInfo *, int, struct ConfigTypeInfo *, + char **, char **, char **, char **, char **); + +void ReloadCustomImages(void); +void CreateImageWithSmallImages(int, int, int); +void CreateImageTextures(int); +void FreeAllImageTextures(void); +void ScaleImage(int, int); + +void FreeAllImages(void); + +#endif // IMAGE_H