X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Finit.c;h=5cd9f8d59e8b2ea63c28d1b90e2edf4d591ac6c0;hb=48ba8a1cc149dd343096cfbe86f5909d074cf180;hp=83d01ab6d529d75b9c80edfc4de8c0ca7d07a63f;hpb=d225818b7c89b2b60e52ac228e47ce303b5d8ef8;p=rocksndiamonds.git diff --git a/src/init.c b/src/init.c index 83d01ab6..5cd9f8d5 100644 --- a/src/init.c +++ b/src/init.c @@ -153,8 +153,14 @@ void InitGadgets() 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() @@ -976,9 +982,10 @@ static int get_scaled_graphic_height(int graphic) } 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; @@ -1014,6 +1021,7 @@ static void set_graphic_parameters_ext(int graphic, int *parameter, 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 */ @@ -1047,11 +1055,17 @@ static void set_graphic_parameters_ext(int graphic, int *parameter, 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) @@ -1059,12 +1073,6 @@ static void set_graphic_parameters_ext(int graphic, int *parameter, 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) @@ -1263,7 +1271,7 @@ static void set_graphic_parameters(int graphic) { 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; @@ -1277,7 +1285,7 @@ static void set_graphic_parameters(int graphic) 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(); } @@ -5009,12 +5017,11 @@ void InitGfx() font_height = getFontHeight(FC_RED); - DrawInitTextAlways(getProgramInitString(), 20, FC_YELLOW); - DrawInitTextAlways(PROGRAM_COPYRIGHT_STRING, 50, FC_RED); - DrawInitTextAlways(PROGRAM_WEBSITE_STRING, WIN_YSIZE - 20 - font_height, - FC_RED); + DrawInitText(getProgramInitString(), 20, FC_YELLOW); + DrawInitText(PROGRAM_COPYRIGHT_STRING, 50, FC_RED); + DrawInitText(PROGRAM_WEBSITE_STRING, WIN_YSIZE - 20 - font_height, FC_RED); - DrawInitTextAlways("Loading graphics", 120, FC_GREEN); + DrawInitText("Loading graphics", 120, FC_GREEN); /* initialize busy animation with default values */ int parameter[NUM_GFX_ARGS]; @@ -5061,11 +5068,15 @@ void InitGfx() 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; @@ -5565,6 +5576,9 @@ void DisplayExitMessage(char *format, va_list ap) redraw_mask = REDRAW_ALL; + /* force drawing exit message even if screen updates are currently limited */ + LimitScreenUpdates(FALSE); + BackToFront(); /* deactivate toons on error message screen */