gadgets_initialized = TRUE;
}
+inline void InitElementSmallImagesScaledUp(int graphic)
+{
+ CreateImageWithSmallImages(graphic, graphic_info[graphic].scale_up_factor);
+}
+
void InitElementSmallImages()
{
struct PropertyMapping *property_mapping = getImageListPropertyMapping();
/* initialize normal images from static configuration */
for (i = 0; element_to_graphic[i].element > -1; i++)
- CreateImageWithSmallImages(element_to_graphic[i].graphic);
+ InitElementSmallImagesScaledUp(element_to_graphic[i].graphic);
/* initialize special images from static configuration */
for (i = 0; element_to_special_graphic[i].element > -1; i++)
- CreateImageWithSmallImages(element_to_special_graphic[i].graphic);
+ InitElementSmallImagesScaledUp(element_to_special_graphic[i].graphic);
/* initialize images from dynamic configuration */
for (i = 0; i < num_property_mappings; i++)
if (property_mapping[i].artwork_index < MAX_NUM_ELEMENTS)
- CreateImageWithSmallImages(property_mapping[i].artwork_index);
+ InitElementSmallImagesScaledUp(property_mapping[i].artwork_index);
+
+ /* !!! FIX ME (CHANGE TO USING NORMAL ELEMENT GRAPHIC DEFINITIONS) !!! */
+#if 1
+ for (i = IMG_EMC_OBJECT; i <= IMG_EMC_TITLE; i++)
+ InitElementSmallImagesScaledUp(i);
+#endif
+}
+
+void SetBitmaps_EM(Bitmap **em_bitmap)
+{
+ em_bitmap[0] = graphic_info[IMG_EMC_OBJECT].bitmap;
+ em_bitmap[1] = graphic_info[IMG_EMC_SCORE].bitmap;
+ em_bitmap[2] = graphic_info[IMG_EMC_SPRITE].bitmap;
+ em_bitmap[3] = graphic_info[IMG_EMC_TITLE].bitmap;
}
static int getFontBitmapID(int font_nr)
graphic_info[graphic].crumbled_like = -1; /* do not use clone element */
graphic_info[graphic].diggable_like = -1; /* do not use clone element */
graphic_info[graphic].border_size = TILEX / 8; /* "CRUMBLED" border size */
- graphic_info[graphic].scale_up_factor = 0; /* default: no scaling up */
+ graphic_info[graphic].scale_up_factor = 1; /* default: no scaling up */
graphic_info[graphic].anim_delay_fixed = 0;
graphic_info[graphic].anim_delay_random = 0;
graphic_info[graphic].post_delay_fixed = 0;
/* optional zoom factor for scaling up the image to a larger size */
if (parameter[GFX_ARG_SCALE_UP] != ARG_UNDEFINED_VALUE)
graphic_info[graphic].scale_up_factor = parameter[GFX_ARG_SCALE_UP];
+ if (graphic_info[graphic].scale_up_factor < 1)
+ graphic_info[graphic].scale_up_factor = 1; /* no scaling */
/* this is only used for player "boring" and "sleeping" actions */
if (parameter[GFX_ARG_ANIM_DELAY_FIXED] != ARG_UNDEFINED_VALUE)
#endif
#include "system.h"
+#include "image.h"
#include "sound.h"
#include "setup.h"
#include "joystick.h"
return dst_bitmap;
}
-void CreateBitmapWithSmallBitmaps(Bitmap *src_bitmap)
+void CreateBitmapWithSmallBitmaps(Bitmap *old_bitmap, int zoom_factor)
{
Bitmap swap_bitmap;
- Bitmap *tmp_bitmap, *tmp_bitmap_2, *tmp_bitmap_8;
- int src_width, src_height;
- int tmp_width, tmp_height;
+ Bitmap *new_bitmap, *tmp_bitmap_1, *tmp_bitmap_2, *tmp_bitmap_8;
+ int width_1, height_1, width_2, height_2, width_8, height_8;
+ int new_width, new_height;
+
+ width_1 = old_bitmap->width * zoom_factor;
+ height_1 = old_bitmap->height * zoom_factor;
+ width_2 = width_1 / 2;
+ height_2 = height_1 / 2;
+ width_8 = width_1 / 8;
+ height_8 = height_1 / 8;
+
+ /* get image with normal size (this might require scaling up) */
+ if (zoom_factor != 1)
+ tmp_bitmap_1 = ZoomBitmap(old_bitmap, width_1, height_1);
+ else
+ tmp_bitmap_1 = old_bitmap;
+
+ /* get image with 1/2 of normal size (for use in the level editor) */
+ if (zoom_factor != 2)
+ tmp_bitmap_2 = ZoomBitmap(tmp_bitmap_1, width_1 / 2, height_1 / 2);
+ else
+ tmp_bitmap_2 = old_bitmap;
+
+ /* get image with 1/8 of normal size (for use on the preview screen) */
+ if (zoom_factor != 8)
+ tmp_bitmap_8 = ZoomBitmap(tmp_bitmap_1, width_1 / 8, height_1 / 8);
+ else
+ tmp_bitmap_8 = old_bitmap;
+
+ /* if image was scaled up, create new clipmask for normal size image */
+ if (zoom_factor != 1)
+ {
+#if defined(TARGET_X11)
+ if (old_bitmap->clip_mask)
+ XFreePixmap(display, old_bitmap->clip_mask);
+
+ old_bitmap->clip_mask =
+ Pixmap_to_Mask(tmp_bitmap_1->drawable, width_1, height_1);
+
+ XSetClipMask(display, old_bitmap->stored_clip_gc, old_bitmap->clip_mask);
+#else
+ SDL_Surface *tmp_surface_1 = tmp_bitmap_1->surface;
+
+ if (old_bitmap->surface_masked)
+ SDL_FreeSurface(old_bitmap->surface_masked);
+
+ SDL_SetColorKey(tmp_surface_1, SDL_SRCCOLORKEY,
+ SDL_MapRGB(tmp_surface_1->format, 0x00, 0x00, 0x00));
+ if ((old_bitmap->surface_masked = SDL_DisplayFormat(tmp_surface_1)) ==NULL)
+ Error(ERR_EXIT, "SDL_DisplayFormat() failed");
+ SDL_SetColorKey(tmp_surface_1, 0, 0); /* reset transparent pixel */
+#endif
+ }
- src_width = src_bitmap->width;
- src_height = src_bitmap->height;
+ new_width = width_1;
+ new_height = height_1 + (height_1 + 1) / 2; /* prevent odd height */
- tmp_width = src_width;
- tmp_height = src_height + (src_height + 1) / 2; /* prevent odd height */
+ new_bitmap = CreateBitmap(new_width, new_height, DEFAULT_DEPTH);
- tmp_bitmap = CreateBitmap(tmp_width, tmp_height, DEFAULT_DEPTH);
+ BlitBitmap(tmp_bitmap_1, new_bitmap, 0, 0, width_1, height_1, 0, 0);
+ BlitBitmap(tmp_bitmap_2, new_bitmap, 0, 0, width_1 / 2, height_1 / 2,
+ 0, height_1);
+ BlitBitmap(tmp_bitmap_8, new_bitmap, 0, 0, width_1 / 8, height_1 / 8,
+ 3 * width_1 / 4, height_1);
- tmp_bitmap_2 = ZoomBitmap(src_bitmap, src_width / 2, src_height / 2);
- tmp_bitmap_8 = ZoomBitmap(src_bitmap, src_width / 8, src_height / 8);
+ if (zoom_factor != 1)
+ FreeBitmap(tmp_bitmap_1);
- BlitBitmap(src_bitmap, tmp_bitmap, 0, 0, src_width, src_height, 0, 0);
- BlitBitmap(tmp_bitmap_2, tmp_bitmap, 0, 0, src_width / 2, src_height / 2,
- 0, src_height);
- BlitBitmap(tmp_bitmap_8, tmp_bitmap, 0, 0, src_width / 8, src_height / 8,
- 3 * src_width / 4, src_height);
+ if (zoom_factor != 2)
+ FreeBitmap(tmp_bitmap_2);
- FreeBitmap(tmp_bitmap_2);
- FreeBitmap(tmp_bitmap_8);
+ if (zoom_factor != 8)
+ FreeBitmap(tmp_bitmap_8);
#if 0
#if defined(TARGET_SDL)
- /* !!! what about the old src_bitmap->surface ??? FIX ME !!! */
- src_bitmap->surface = tmp_bitmap->surface;
- tmp_bitmap->surface = NULL;
+ /* !!! what about the old old_bitmap->surface ??? FIX ME !!! */
+ old_bitmap->surface = new_bitmap->surface;
+ new_bitmap->surface = NULL;
#else
/* !!! see above !!! */
- src_bitmap->drawable = tmp_bitmap->drawable;
- tmp_bitmap->drawable = None;
+ old_bitmap->drawable = new_bitmap->drawable;
+ new_bitmap->drawable = None;
#endif
#else
+ /* replace image with extended image (containing normal, 1/2 and 1/8 size) */
#if defined(TARGET_SDL)
- swap_bitmap.surface = src_bitmap->surface;
- src_bitmap->surface = tmp_bitmap->surface;
- tmp_bitmap->surface = swap_bitmap.surface;
+ swap_bitmap.surface = old_bitmap->surface;
+ old_bitmap->surface = new_bitmap->surface;
+ new_bitmap->surface = swap_bitmap.surface;
#else
- swap_bitmap.drawable = src_bitmap->drawable;
- src_bitmap->drawable = tmp_bitmap->drawable;
- tmp_bitmap->drawable = swap_bitmap.drawable;
+ swap_bitmap.drawable = old_bitmap->drawable;
+ old_bitmap->drawable = new_bitmap->drawable;
+ new_bitmap->drawable = swap_bitmap.drawable;
#endif
#endif
- src_bitmap->height = tmp_bitmap->height;
+ old_bitmap->height = new_bitmap->height;
- FreeBitmap(tmp_bitmap);
+ FreeBitmap(new_bitmap);
}