X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Finit.c;h=45945dcd2d2f7868056be394ef789c4b34bf293c;hb=895d5cb33db251c933445778400bb3e50b76d4ab;hp=4407567a3299729d09233cf4897bb5a20d81c74e;hpb=7680c02a2b77086db2cd5ffec28cafe80d4ba236;p=rocksndiamonds.git diff --git a/src/init.c b/src/init.c index 4407567a..45945dcd 100644 --- a/src/init.c +++ b/src/init.c @@ -722,14 +722,23 @@ static void InitGlobalAnimGraphicInfo(void) struct GraphicInfo *g = &graphic_info[graphic]; struct FileInfo *image = getImageListEntryFromImageID(graphic); char **parameter_raw = image->parameter; - int p = GFX_ARG_DRAW_MASKED; - int draw_masked = get_graphic_parameter_value(parameter_raw[p], - image_config_suffix[p].token, - image_config_suffix[p].type); + int p1 = GFX_ARG_DRAW_MASKED; + int p2 = GFX_ARG_DRAW_ORDER; + int draw_masked = get_graphic_parameter_value(parameter_raw[p1], + image_config_suffix[p1].token, + image_config_suffix[p1].type); + int draw_order = get_graphic_parameter_value(parameter_raw[p2], + image_config_suffix[p2].token, + image_config_suffix[p2].type); // if ".draw_masked" parameter is undefined, use default value "TRUE" if (draw_masked == ARG_UNDEFINED_VALUE) g->draw_masked = TRUE; + + // if ".draw_order" parameter is undefined, set back to "undefined" + // (used to be able to inherit draw order from main animation later) + if (draw_order == ARG_UNDEFINED_VALUE) + g->draw_order = ARG_UNDEFINED_VALUE; } #if 0 @@ -1337,19 +1346,27 @@ static int get_graphic_parameter_value(char *value_raw, char *suffix, int type) return -1; } -static int get_scaled_graphic_width(int graphic) +static int get_scaled_graphic_width(Bitmap *src_bitmap, int graphic) { int original_width = getOriginalImageWidthFromImageID(graphic); int scale_up_factor = graphic_info[graphic].scale_up_factor; + // only happens when loaded outside artwork system (like "global.busy") + if (graphic_info == image_initial && src_bitmap) + original_width = src_bitmap->width; + return original_width * scale_up_factor; } -static int get_scaled_graphic_height(int graphic) +static int get_scaled_graphic_height(Bitmap *src_bitmap, int graphic) { int original_height = getOriginalImageHeightFromImageID(graphic); int scale_up_factor = graphic_info[graphic].scale_up_factor; + // only happens when loaded outside artwork system (like "global.busy") + if (graphic_info == image_initial && src_bitmap) + original_height = src_bitmap->height; + return original_height * scale_up_factor; } @@ -1404,6 +1421,7 @@ static void set_graphic_parameters_ext(int graphic, int *parameter, g->sort_priority = 0; // default for title screens g->class = 0; g->style = STYLE_DEFAULT; + g->alpha = -1; g->bitmaps = src_bitmaps; g->bitmap = src_bitmap; @@ -1433,8 +1451,8 @@ static void set_graphic_parameters_ext(int graphic, int *parameter, if (g->use_image_size) { // set new default bitmap size (with scaling, but without small images) - g->width = get_scaled_graphic_width(graphic); - g->height = get_scaled_graphic_height(graphic); + g->width = get_scaled_graphic_width(src_bitmap, graphic); + g->height = get_scaled_graphic_height(src_bitmap, graphic); } // optional width and height of each animation frame @@ -1481,15 +1499,8 @@ static void set_graphic_parameters_ext(int graphic, int *parameter, if (src_bitmap) { // get final bitmap size (with scaling, but without small images) - int src_image_width = get_scaled_graphic_width(graphic); - int src_image_height = get_scaled_graphic_height(graphic); - - if (src_image_width == 0 || src_image_height == 0) - { - // only happens when loaded outside artwork system (like "global.busy") - src_image_width = src_bitmap->width; - src_image_height = src_bitmap->height; - } + int src_image_width = get_scaled_graphic_width(src_bitmap, graphic); + int src_image_height = get_scaled_graphic_height(src_bitmap, graphic); if (parameter[GFX_ARG_TILE_SIZE] != ARG_UNDEFINED_VALUE) { @@ -1647,7 +1658,7 @@ static void set_graphic_parameters_ext(int graphic, int *parameter, g->draw_yoffset = parameter[GFX_ARG_DRAW_YOFFSET]; // use a different default value for global animations and toons - if ((graphic >= IMG_GFX_GLOBAL_ANIM_1 && graphic <= IMG_GFX_GLOBAL_ANIM_8) || + if ((graphic >= IMG_GFX_GLOBAL_ANIM_1 && graphic <= IMG_GFX_GLOBAL_ANIM_32) || (graphic >= IMG_TOON_1 && graphic <= IMG_TOON_20)) g->draw_masked = TRUE; @@ -1655,6 +1666,10 @@ static void set_graphic_parameters_ext(int graphic, int *parameter, if (parameter[GFX_ARG_DRAW_MASKED] != ARG_UNDEFINED_VALUE) g->draw_masked = parameter[GFX_ARG_DRAW_MASKED]; + // use a different default value for global animations (corrected later) + if (graphic >= IMG_GLOBAL_ANIM_1 && graphic <= IMG_GLOBAL_ANIM_32) + g->draw_order = ARG_UNDEFINED_VALUE; + // used for toon animations and global animations if (parameter[GFX_ARG_DRAW_ORDER] != ARG_UNDEFINED_VALUE) g->draw_order = parameter[GFX_ARG_DRAW_ORDER]; @@ -1685,6 +1700,8 @@ static void set_graphic_parameters_ext(int graphic, int *parameter, g->class = parameter[GFX_ARG_CLASS]; if (parameter[GFX_ARG_STYLE] != ARG_UNDEFINED_VALUE) g->style = parameter[GFX_ARG_STYLE]; + if (parameter[GFX_ARG_ALPHA] != ARG_UNDEFINED_VALUE) + g->alpha = parameter[GFX_ARG_ALPHA]; // this is only used for drawing menu buttons and text g->active_xoffset = parameter[GFX_ARG_ACTIVE_XOFFSET]; @@ -5489,9 +5506,7 @@ static void InitSetup(void) static void InitGameInfo(void) { game.restart_level = FALSE; - game.request_active = FALSE; - game.request_active_or_moving = FALSE; game.use_masked_elements_initial = FALSE; } @@ -5889,6 +5904,9 @@ static void InitGfx(void) checked_free(filename_image_initial[i]); } + for (i = 0; i < NUM_INITIAL_IMAGES; i++) + image_initial[i].use_image_size = TRUE; + graphic_info = image_initial; // graphic == 0 => image_initial for (i = 0; i < NUM_INITIAL_IMAGES; i++) @@ -5913,6 +5931,7 @@ static void InitGfx(void) InitGfxDrawGlobalAnimFunction(DrawGlobalAnimations); InitGfxDrawGlobalBorderFunction(DrawMaskedBorderToTarget); InitGfxDrawTileCursorFunction(DrawTileCursor); + InitGfxDrawEnvelopeRequestFunction(DrawEnvelopeRequestToScreen); gfx.fade_border_source_status = global.border_status; gfx.fade_border_target_status = global.border_status;