-/***********************************************************
-* 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
#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 *);
-
-void ZoomPixmap(Display *, GC, Pixmap, Pixmap, int, int, int, int);
-
-int Read_PCX_to_Pixmap(Display *, Window, GC, char *, Pixmap *, Pixmap *);
-
-#endif /* TARGET_X11 */
-
-int getImageListSize();
-struct FileInfo *getImageListEntry(int);
-Bitmap *getBitmapFromImageID(int);
+// 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
+
+
+#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);
+char *getFilenameFromImageID(int);
int getImageIDFromToken(char *);
-char *getImageConfigFilename();
-int getImageListPropertyMappingSize();
-struct PropertyMapping *getImageListPropertyMapping();
+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 CreateImageWithSmallImages(int);
+void ReloadCustomImages(void);
+void CreateImageWithSmallImages(int, int, int);
+void CreateImageTextures(int);
+void FreeAllImageTextures(void);
+void ScaleImage(int, int);
-void FreeAllImages();
+void FreeAllImages(void);
-#endif /* IMAGE_H */
+#endif // IMAGE_H