X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ftools.c;h=6e1ffddc06280eb9fa6510707c636e42290606aa;hb=5abed77f4575375756d228a2afc749589a25c87a;hp=62cd26a8d9ebaeb2c4f1065d8361cdb7848c073f;hpb=12a8eb6ca28aa97f422e7cf9317f01eb0dfc9a11;p=rocksndiamonds.git diff --git a/src/tools.c b/src/tools.c index 62cd26a8..6e1ffddc 100644 --- a/src/tools.c +++ b/src/tools.c @@ -300,17 +300,17 @@ void SetDrawtoField(int mode) static void RedrawPlayfield_RND() { - int x, y; - if (game.envelope_active) return; -#if 0 - DrawLevel(); +#if 1 + DrawLevel(REDRAW_ALL); #else + int x, y; SetMainBackgroundImage(IMG_BACKGROUND_PLAYING); // SetDrawBackgroundMask(REDRAW_FIELD); // !!! CHECK THIS !!! + SetDrawBackgroundMask(REDRAW_ALL); // !!! CHECK THIS !!! for (x = BX1; x <= BX2; x++) for (y = BY1; y <= BY2; y++) @@ -713,15 +713,37 @@ void BackToFront() if (redraw_mask & REDRAW_ALL) { +#if 0 + if (game_status != GAME_MODE_PLAYING || + redraw_mask & REDRAW_FROM_BACKBUFFER) + { +#if 0 + printf("::: REDRAW_ALL [%d]\n", FrameCounter); +#endif + + BlitBitmap(backbuffer, window, 0, 0, WIN_XSIZE, WIN_YSIZE, 0, 0); + + redraw_mask = REDRAW_NONE; + } + else + { + redraw_mask &= ~REDRAW_ALL; + } +#else +#if 0 + printf("::: REDRAW_ALL [%d]\n", FrameCounter); +#endif + BlitBitmap(backbuffer, window, 0, 0, WIN_XSIZE, WIN_YSIZE, 0, 0); redraw_mask = REDRAW_NONE; +#endif } if (redraw_mask & REDRAW_FIELD) { #if 0 - printf("::: REDRAW_FIELD\n"); + printf("::: REDRAW_FIELD [%d]\n", FrameCounter); #endif if (game_status != GAME_MODE_PLAYING || @@ -1498,12 +1520,28 @@ void getSizedGraphicSourceExt(int graphic, int frame, int tilesize_raw, Bitmap *src_bitmap = g->bitmap; int tilesize = MIN(MAX(1, tilesize_raw), TILESIZE); int offset_calc_pos = log_2(tilesize); + int bitmap_width = src_bitmap->width; + int bitmap_height = src_bitmap->height; int width_mult = offset_calc[offset_calc_pos].width_mult; int width_div = offset_calc[offset_calc_pos].width_div; int height_mult = offset_calc[offset_calc_pos].height_mult; int height_div = offset_calc[offset_calc_pos].height_div; - int startx = src_bitmap->width * width_mult / width_div; - int starty = src_bitmap->height * height_mult / height_div; + int startx = bitmap_width * width_mult / width_div; + int starty = bitmap_height * height_mult / height_div; + +#if NEW_GAME_TILESIZE + + int src_x = (g->src_x + (get_backside ? g->offset2_x : 0)) * + tilesize_raw / TILESIZE; + int src_y = (g->src_y + (get_backside ? g->offset2_y : 0)) * + tilesize_raw / TILESIZE; + int width = g->width * tilesize_raw / TILESIZE; + int height = g->height * tilesize_raw / TILESIZE; + int offset_x = g->offset_x * tilesize_raw / TILESIZE; + int offset_y = g->offset_y * tilesize_raw / TILESIZE; + +#else + #if NEW_TILESIZE int src_x = (g->src_x + (get_backside ? g->offset2_x : 0)) * tilesize / TILESIZE; @@ -1518,6 +1556,34 @@ void getSizedGraphicSourceExt(int graphic, int frame, int tilesize_raw, int offset_x = g->offset_x * tilesize / TILESIZE; int offset_y = g->offset_y * tilesize / TILESIZE; +#endif + +#if NEW_GAME_TILESIZE + if (game.tile_size != TILESIZE) + { + int bitmap_width_std = + bitmap_width * TILESIZE / (TILESIZE + game.tile_size); + int bitmap_height_std = + bitmap_height * TILESIZE / game.tile_size * 3 / 2; + + if (tilesize_raw == game.tile_size) + { + startx = bitmap_width_std; + starty = 0; + } + else + { + bitmap_width = bitmap_width_std; + + if (game.tile_size > TILESIZE * 3 / 2) + bitmap_height = bitmap_height_std; + + startx = bitmap_width * width_mult / width_div; + starty = bitmap_height * height_mult / height_div; + } + } +#endif + if (g->offset_y == 0) /* frames are ordered horizontally */ { int max_width = g->anim_frames_per_line * width; @@ -2168,8 +2234,8 @@ static void DrawLevelFieldCrumbledInnerCorners(int x, int y, int dx, int dy, #if NEW_TILESIZE width = crumbled_border_size * TILESIZE_VAR / TILESIZE; height = crumbled_border_size * TILESIZE_VAR / TILESIZE; - cx = (dx > 0 ? TILEX - crumbled_border_size : 0) * TILESIZE_VAR / TILESIZE; - cy = (dy > 0 ? TILEY - crumbled_border_size : 0) * TILESIZE_VAR / TILESIZE; + cx = (dx > 0 ? TILESIZE_VAR - width : 0); + cy = (dy > 0 ? TILESIZE_VAR - height : 0); BlitBitmap(src_bitmap, drawto_field, src_x + cx, src_y + cy, width, height, FX + sx * TILEX_VAR + cx, FY + sy * TILEY_VAR + cy); @@ -2192,6 +2258,8 @@ static void DrawLevelFieldCrumbledBorders(int x, int y, int graphic, int frame, int width, height, bx, by, cx, cy; int sx = SCREENX(x), sy = SCREENY(y); int crumbled_border_size = graphic_info[graphic].border_size; + int crumbled_border_size_var = crumbled_border_size * TILESIZE_VAR / TILESIZE; + int crumbled_border_pos_var = TILESIZE_VAR - crumbled_border_size_var; int i; getGraphicSource(graphic, frame, &src_bitmap, &src_x, &src_y); @@ -2199,10 +2267,10 @@ static void DrawLevelFieldCrumbledBorders(int x, int y, int graphic, int frame, /* draw simple, sloppy, non-corner-accurate crumbled border */ #if 1 - width = (dir == 1 || dir == 2 ? crumbled_border_size : TILEX); - height = (dir == 0 || dir == 3 ? crumbled_border_size : TILEY); - cx = (dir == 2 ? TILEX - crumbled_border_size : 0); - cy = (dir == 3 ? TILEY - crumbled_border_size : 0); + width = (dir == 1 || dir == 2 ? crumbled_border_size_var : TILESIZE_VAR); + height = (dir == 0 || dir == 3 ? crumbled_border_size_var : TILESIZE_VAR); + cx = (dir == 2 ? crumbled_border_pos_var : 0); + cy = (dir == 3 ? crumbled_border_pos_var : 0); #else if (dir == 1 || dir == 2) /* left or right crumbled border */ { @@ -2222,12 +2290,12 @@ static void DrawLevelFieldCrumbledBorders(int x, int y, int graphic, int frame, #if NEW_TILESIZE BlitBitmap(src_bitmap, drawto_field, - src_x + cx * TILESIZE_VAR / TILESIZE, - src_y + cy * TILESIZE_VAR / TILESIZE, - width * TILESIZE_VAR / TILESIZE, - height * TILESIZE_VAR / TILESIZE, - FX + sx * TILEX_VAR + cx * TILESIZE_VAR / TILESIZE, - FY + sy * TILEY_VAR + cy * TILESIZE_VAR / TILESIZE); + src_x + cx, + src_y + cy, + width, + height, + FX + sx * TILEX_VAR + cx, + FY + sy * TILEY_VAR + cy); #else BlitBitmap(src_bitmap, drawto_field, src_x + cx, src_y + cy, width, height, FX + sx * TILEX + cx, FY + sy * TILEY + cy); @@ -2241,7 +2309,7 @@ static void DrawLevelFieldCrumbledBorders(int x, int y, int graphic, int frame, /* correct corners of crumbled border, if needed */ #if 1 - for (i = -1; i <= 1; i+=2) + for (i = -1; i <= 1; i += 2) { int xx = x + (dir == 0 || dir == 3 ? i : 0); int yy = y + (dir == 1 || dir == 2 ? i : 0); @@ -2255,13 +2323,13 @@ static void DrawLevelFieldCrumbledBorders(int x, int y, int graphic, int frame, { /* no crumbled corner, but continued crumbled border */ - int c1 = (dir == 2 || dir == 3 ? TILESIZE - crumbled_border_size : 0); - int c2 = (i == 1 ? TILESIZE - crumbled_border_size : 0); - int b1 = (i == 1 ? crumbled_border_size : - TILESIZE - 2 * crumbled_border_size); + int c1 = (dir == 2 || dir == 3 ? crumbled_border_pos_var : 0); + int c2 = (i == 1 ? crumbled_border_pos_var : 0); + int b1 = (i == 1 ? crumbled_border_size_var : + TILESIZE_VAR - 2 * crumbled_border_size_var); - width = crumbled_border_size; - height = crumbled_border_size; + width = crumbled_border_size_var; + height = crumbled_border_size_var; if (dir == 1 || dir == 2) { @@ -2280,12 +2348,12 @@ static void DrawLevelFieldCrumbledBorders(int x, int y, int graphic, int frame, #if NEW_TILESIZE BlitBitmap(src_bitmap, drawto_field, - src_x + bx * TILESIZE_VAR / TILESIZE, - src_y + by * TILESIZE_VAR / TILESIZE, - width * TILESIZE_VAR / TILESIZE, - height * TILESIZE_VAR / TILESIZE, - FX + sx * TILEX_VAR + cx * TILESIZE_VAR / TILESIZE, - FY + sy * TILEY_VAR + cy * TILESIZE_VAR / TILESIZE); + src_x + bx, + src_y + by, + width, + height, + FX + sx * TILEX_VAR + cx, + FY + sy * TILEY_VAR + cy); #else BlitBitmap(src_bitmap, drawto_field, src_x + bx, src_y + by, width, height, FX + sx * TILEX + cx, FY + sy * TILEY + cy); @@ -3513,15 +3581,20 @@ void DrawPreviewElement(int dst_x, int dst_y, int element, int tilesize) BlitBitmap(src_bitmap, drawto, src_x, src_y, tilesize, tilesize, dst_x,dst_y); } -void DrawLevel() +void DrawLevel(int draw_background_mask) { int x,y; +#if 1 + SetMainBackgroundImage(IMG_BACKGROUND_PLAYING); + SetDrawBackgroundMask(draw_background_mask); +#else #if 1 SetMainBackgroundImage(IMG_BACKGROUND_PLAYING); SetDrawBackgroundMask(REDRAW_FIELD); #else SetDrawBackgroundMask(REDRAW_NONE); +#endif #endif ClearField(); @@ -4572,6 +4645,9 @@ static int RequestHandleEvents(unsigned int req_state) break; case KSYM_Return: +#if defined(TARGET_SDL2) + case KSYM_Menu: +#endif result = 1; break; @@ -11479,7 +11555,14 @@ void ChangeViewportPropertiesIfNeeded() int new_exsize = vp_door_3->width; int new_eysize = vp_door_3->height; #if NEW_TILESIZE + +#if NEW_GAME_TILESIZE + int new_tilesize_var = + (setup.small_game_graphics ? MINI_TILESIZE : game.tile_size); +#else int new_tilesize_var = TILESIZE / (setup.small_game_graphics ? 2 : 1); +#endif + int tilesize = (gfx_game_mode == GAME_MODE_PLAYING ? new_tilesize_var : gfx_game_mode == GAME_MODE_EDITOR ? MINI_TILESIZE : TILESIZE); int new_scr_fieldx = new_sxsize / tilesize; @@ -11493,6 +11576,7 @@ void ChangeViewportPropertiesIfNeeded() boolean init_gfx_buffers = FALSE; boolean init_video_buffer = FALSE; boolean init_gadgets_and_toons = FALSE; + boolean init_em_graphics = FALSE; #if 0 /* !!! TEST ONLY !!! */ @@ -11580,12 +11664,15 @@ void ChangeViewportPropertiesIfNeeded() ) { #if 1 - // changing tile size invalidates scroll values of engine snapshots if (new_tilesize_var != TILESIZE_VAR) { // printf("::: new_tilesize_var != TILESIZE_VAR\n"); + // changing tile size invalidates scroll values of engine snapshots FreeEngineSnapshot(); + + // changing tile size requires update of graphic mapping for EM engine + init_em_graphics = TRUE; } #endif @@ -11678,6 +11765,11 @@ void ChangeViewportPropertiesIfNeeded() InitToons(); } + if (init_em_graphics) + { + InitGraphicInfo_EM(); + } + #if 0 printf("::: %d, %d / %d, %d [%d]\n", VX, VY, EX, EY, game_status); #endif