X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ftools.c;h=537a0e2174e860ad0cefe01ac9a70e8df5d374ae;hb=c50ed169cbd9ea0a7ed120a2f6dc0042a84e104a;hp=c271314e406df9222193be7e68343322a07014f3;hpb=e781055ddb3142d2d309a98e67ec66cf261eb179;p=rocksndiamonds.git diff --git a/src/tools.c b/src/tools.c index c271314e..537a0e21 100644 --- a/src/tools.c +++ b/src/tools.c @@ -3465,11 +3465,27 @@ void DrawMiniLevel(int size_x, int size_y, int scroll_x, int scroll_y) redraw_mask |= REDRAW_FIELD; } +static int getPreviewLevelWidth(void) +{ + if (level.game_engine_type == GAME_ENGINE_TYPE_BD) + return (level.native_bd_level->cave->x2 - level.native_bd_level->cave->x1 + 1); + + return lev_fieldx; +} + +static int getPreviewLevelHeight(void) +{ + if (level.game_engine_type == GAME_ENGINE_TYPE_BD) + return (level.native_bd_level->cave->y2 - level.native_bd_level->cave->y1 + 1); + + return lev_fieldy; +} + static void DrawPreviewLevelPlayfield(int from_x, int from_y) { boolean show_level_border = (BorderElement != EL_EMPTY); - int level_xsize = lev_fieldx + (show_level_border ? 2 : 0); - int level_ysize = lev_fieldy + (show_level_border ? 2 : 0); + int level_xsize = getPreviewLevelWidth() + (show_level_border ? 2 : 0); + int level_ysize = getPreviewLevelHeight() + (show_level_border ? 2 : 0); int tile_size = preview.tile_size; int preview_width = preview.xsize * tile_size; int preview_height = preview.ysize * tile_size; @@ -3838,15 +3854,17 @@ static void PreparePreviewTileBitmap(void) int scale_down_factor = original_tilesize / preview.tile_size; Bitmap *src_bitmap; int src_x, src_y; - int element = EL_BD_ROCK; - int graphic = el2preimg(element); + int element_template = EL_BD_GAME_GRAPHICS_COLOR_TEMPLATE; + int graphic_template = el2preimg(element_template); + int element_default = EL_BD_ROCK; + int graphic_default = el2preimg(element_default); // create special preview bitmap and scale it down to preview tile size - getSizedGraphicSource(graphic, 0, original_tilesize, &src_bitmap, &src_x, &src_y); + getSizedGraphicSource(graphic_template, 0, original_tilesize, &src_bitmap, &src_x, &src_y); PreparePreviewTileBitmap_BD(src_bitmap, scale_down_factor); // force using special preview bitmap to replace original preview bitmap - getSizedGraphicSource(graphic, 0, preview.tile_size, &src_bitmap, &src_x, &src_y); + getSizedGraphicSource(graphic_default, 0, preview.tile_size, &src_bitmap, &src_x, &src_y); SetPreviewTileBitmapReference_BD(src_bitmap); } @@ -10155,6 +10173,20 @@ void InitGraphicInfo_BD(void) g_bd->height = TILEY; } } + + // game graphics template for level-specific colors for native BD levels + int graphic = IMG_BD_GAME_GRAPHICS_COLOR_TEMPLATE; + struct GraphicInfo_BD *g_bd = &graphic_info_bd_color_template; + Bitmap *src_bitmap; + int src_x, src_y; + + getGraphicSourceExt(graphic, 0, &src_bitmap, &src_x, &src_y, FALSE); + + g_bd->bitmap = src_bitmap; + g_bd->src_x = src_x; + g_bd->src_y = src_y; + g_bd->width = TILEX; + g_bd->height = TILEY; } void InitGraphicInfo_EM(void)