inline void InitElementSmallImagesScaledUp(int graphic)
{
- CreateImageWithSmallImages(graphic, graphic_info[graphic].scale_up_factor,
- graphic_info[graphic].tile_size);
+ struct GraphicInfo *g = &graphic_info[graphic];
+
+ // create small and game tile sized bitmaps (and scale up, if needed)
+ CreateImageWithSmallImages(graphic, g->scale_up_factor, g->tile_size);
+
+ // default (standard sized) bitmap may have changed now -- update it
+ if (g->bitmaps)
+ g->bitmap = g->bitmaps[IMG_BITMAP_STANDARD];
}
void InitElementSmallImages()
}
static void set_graphic_parameters_ext(int graphic, int *parameter,
- Bitmap *src_bitmap)
+ Bitmap **src_bitmaps)
{
struct GraphicInfo *g = &graphic_info[graphic];
+ Bitmap *src_bitmap = (src_bitmaps ? src_bitmaps[IMG_BITMAP_STANDARD] : NULL);
int anim_frames_per_row = 1, anim_frames_per_col = 1;
int anim_frames_per_line = 1;
g->class = 0;
g->style = STYLE_DEFAULT;
+ g->bitmaps = src_bitmaps;
g->bitmap = src_bitmap;
/* optional zoom factor for scaling up the image to a larger size */
g->height = get_scaled_graphic_height(graphic);
}
+ /* optional width and height of each animation frame */
+ if (parameter[GFX_ARG_WIDTH] != ARG_UNDEFINED_VALUE)
+ g->width = parameter[GFX_ARG_WIDTH];
+ if (parameter[GFX_ARG_HEIGHT] != ARG_UNDEFINED_VALUE)
+ g->height = parameter[GFX_ARG_HEIGHT];
+
/* optional x and y tile position of animation frame sequence */
if (parameter[GFX_ARG_XPOS] != ARG_UNDEFINED_VALUE)
- g->src_x = parameter[GFX_ARG_XPOS] * TILEX;
+ g->src_x = parameter[GFX_ARG_XPOS] * g->width;
if (parameter[GFX_ARG_YPOS] != ARG_UNDEFINED_VALUE)
- g->src_y = parameter[GFX_ARG_YPOS] * TILEY;
+ g->src_y = parameter[GFX_ARG_YPOS] * g->height;
/* optional x and y pixel position of animation frame sequence */
if (parameter[GFX_ARG_X] != ARG_UNDEFINED_VALUE)
if (parameter[GFX_ARG_Y] != ARG_UNDEFINED_VALUE)
g->src_y = parameter[GFX_ARG_Y];
- /* optional width and height of each animation frame */
- if (parameter[GFX_ARG_WIDTH] != ARG_UNDEFINED_VALUE)
- g->width = parameter[GFX_ARG_WIDTH];
- if (parameter[GFX_ARG_HEIGHT] != ARG_UNDEFINED_VALUE)
- g->height = parameter[GFX_ARG_HEIGHT];
-
if (src_bitmap)
{
if (g->width <= 0)
{
struct FileInfo *image = getImageListEntryFromImageID(graphic);
char **parameter_raw = image->parameter;
- Bitmap *src_bitmap = getBitmapFromImageID(graphic);
+ Bitmap **src_bitmaps = getBitmapsFromImageID(graphic);
int parameter[NUM_GFX_ARGS];
int i;
image_config_suffix[i].token,
image_config_suffix[i].type);
- set_graphic_parameters_ext(graphic, parameter, src_bitmap);
+ set_graphic_parameters_ext(graphic, parameter, src_bitmaps);
UPDATE_BUSY_STATE();
}
if (filename_anim_initial == NULL) /* should not happen */
Error(ERR_EXIT, "cannot get filename for '%s'", CONFIG_TOKEN_GLOBAL_BUSY);
- anim_initial.bitmap = LoadCustomImage(filename_anim_initial);
+ anim_initial.bitmaps =
+ checked_calloc(sizeof(Bitmap *) * NUM_IMG_BITMAP_POINTERS);
+
+ anim_initial.bitmaps[IMG_BITMAP_STANDARD] =
+ LoadCustomImage(filename_anim_initial);
graphic_info = &anim_initial; /* graphic == 0 => anim_initial */
- set_graphic_parameters_ext(0, parameter, anim_initial.bitmap);
+ set_graphic_parameters_ext(0, parameter, anim_initial.bitmaps);
graphic_info = graphic_info_last;