X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Ftools.c;h=76fa6c484a282c8a2170ac80b5a997b7d66d6e46;hp=2c6055320b15605caa58765cdad7a255cc0f3eb5;hb=33cabd20cdb4e7aa84dfd30975f1364e7b776121;hpb=013e137cafaa16827d0f27e10538b6e90ee0aed0 diff --git a/src/tools.c b/src/tools.c index 2c605532..76fa6c48 100644 --- a/src/tools.c +++ b/src/tools.c @@ -17,7 +17,7 @@ #include "init.h" #include "game.h" #include "events.h" -#include "cartoons.h" +#include "anim.h" #include "network.h" #include "tape.h" #include "screens.h" @@ -234,7 +234,7 @@ void DumpTile(int x, int y) void SetDrawtoField(int mode) { - if (mode == DRAW_FIELDBUFFER) + if (mode == DRAW_TO_FIELDBUFFER) { FX = 2 * TILEX_VAR; FY = 2 * TILEY_VAR; @@ -245,7 +245,7 @@ void SetDrawtoField(int mode) drawto_field = fieldbuffer; } - else /* DRAW_BACKBUFFER */ + else /* DRAW_TO_BACKBUFFER */ { FX = SX; FY = SY; @@ -294,7 +294,7 @@ static void DrawMaskedBorderExt_Rect(int x, int y, int width, int height, if (x == -1 && y == -1) return; - if (draw_target == DRAW_BORDER_TO_SCREEN) + if (draw_target == DRAW_TO_SCREEN) BlitToScreenMasked(src_bitmap, x, y, width, height, x, y); else BlitBitmapMasked(src_bitmap, dst_bitmap, x, y, width, height, x, y); @@ -312,7 +312,7 @@ static void DrawMaskedBorderExt_FIELD(int draw_target) static void DrawMaskedBorderExt_DOOR_1(int draw_target) { // when drawing to backbuffer, never draw border over open doors - if (draw_target == DRAW_BORDER_TO_BACKBUFFER && + if (draw_target == DRAW_TO_BACKBUFFER && (GetDoorState() & DOOR_OPEN_1)) return; @@ -325,7 +325,7 @@ static void DrawMaskedBorderExt_DOOR_1(int draw_target) static void DrawMaskedBorderExt_DOOR_2(int draw_target) { // when drawing to backbuffer, never draw border over open doors - if (draw_target == DRAW_BORDER_TO_BACKBUFFER && + if (draw_target == DRAW_TO_BACKBUFFER && (GetDoorState() & DOOR_OPEN_2)) return; @@ -371,18 +371,18 @@ static void DrawMaskedBorderExt(int redraw_mask, int draw_target) void DrawMaskedBorder_FIELD() { - DrawMaskedBorderExt_FIELD(DRAW_BORDER_TO_BACKBUFFER); + DrawMaskedBorderExt_FIELD(DRAW_TO_BACKBUFFER); } void DrawMaskedBorder(int redraw_mask) { - DrawMaskedBorderExt(redraw_mask, DRAW_BORDER_TO_BACKBUFFER); + DrawMaskedBorderExt(redraw_mask, DRAW_TO_BACKBUFFER); } void DrawMaskedBorderToTarget(int draw_target) { - if (draw_target == DRAW_BORDER_TO_BACKBUFFER || - draw_target == DRAW_BORDER_TO_SCREEN) + if (draw_target == DRAW_TO_BACKBUFFER || + draw_target == DRAW_TO_SCREEN) { DrawMaskedBorderExt(REDRAW_ALL, draw_target); } @@ -390,12 +390,12 @@ void DrawMaskedBorderToTarget(int draw_target) { int last_border_status = global.border_status; - if (draw_target == DRAW_BORDER_TO_FADE_SOURCE) + if (draw_target == DRAW_TO_FADE_SOURCE) { global.border_status = gfx.fade_border_source_status; gfx.masked_border_bitmap_ptr = gfx.fade_bitmap_source; } - else if (draw_target == DRAW_BORDER_TO_FADE_TARGET) + else if (draw_target == DRAW_TO_FADE_TARGET) { global.border_status = gfx.fade_border_target_status; gfx.masked_border_bitmap_ptr = gfx.fade_bitmap_target; @@ -598,26 +598,10 @@ void BackToFront_WithFrameDelay(unsigned int frame_delay_value) SetVideoFrameDelay(frame_delay_value_old); } -static void FadeCrossSaveBackbuffer() -{ - BlitBitmap(backbuffer, bitmap_db_cross, 0, 0, WIN_XSIZE, WIN_YSIZE, 0, 0); -} - -static void FadeCrossRestoreBackbuffer() -{ - int redraw_mask_last = redraw_mask; - - BlitBitmap(bitmap_db_cross, backbuffer, 0, 0, WIN_XSIZE, WIN_YSIZE, 0, 0); - - // do not change redraw mask when restoring backbuffer after cross-fading - redraw_mask = redraw_mask_last; -} - static void FadeExt(int fade_mask, int fade_mode, int fade_type) { static int fade_type_skip = FADE_TYPE_NONE; void (*draw_border_function)(void) = NULL; - Bitmap *bitmap = (fade_mode & FADE_TYPE_TRANSFORM ? bitmap_db_cross : NULL); int x, y, width, height; int fade_delay, post_delay; @@ -632,18 +616,8 @@ static void FadeExt(int fade_mask, int fade_mode, int fade_type) return; } -#if 1 - FadeCrossSaveBackbuffer(); -#endif - if (fading.fade_mode & FADE_TYPE_TRANSFORM) - { -#if 0 - FadeCrossSaveBackbuffer(); -#endif - return; - } } redraw_mask |= fade_mask; @@ -706,17 +680,22 @@ static void FadeExt(int fade_mask, int fade_mode, int fade_type) return; } - FadeRectangle(bitmap, x, y, width, height, fade_mode, fade_delay, post_delay, + FadeRectangle(x, y, width, height, fade_mode, fade_delay, post_delay, draw_border_function); - if (fade_type == FADE_TYPE_FADE_OUT) - FadeCrossRestoreBackbuffer(); - redraw_mask &= ~fade_mask; } static void SetScreenStates_BeforeFadingIn() { + // temporarily set screen mode for animations to screen after fading in + global.anim_status = global.anim_status_next; + + // store backbuffer with all animations that will be started after fading in + PrepareFadeBitmap(DRAW_TO_FADE_TARGET); + + // set screen mode for animations back to fading + global.anim_status = GAME_MODE_PSEUDO_FADING; } static void SetScreenStates_AfterFadingIn() @@ -736,7 +715,11 @@ static void SetScreenStates_BeforeFadingOut() // store new target screen (to use correct masked border for fading) gfx.fade_border_target_status = game_status; + // set screen mode for animations to fading global.anim_status = GAME_MODE_PSEUDO_FADING; + + // store backbuffer with all animations that will be stopped for fading out + PrepareFadeBitmap(DRAW_TO_FADE_SOURCE); } static void SetScreenStates_AfterFadingOut() @@ -1041,7 +1024,7 @@ static void RedrawGlobalBorderIfNeeded() // copy current draw buffer to later copy back areas that have not changed if (game_status_last != GAME_MODE_TITLE) - BlitBitmap(backbuffer, bitmap_db_store, 0, 0, WIN_XSIZE, WIN_YSIZE, 0, 0); + BlitBitmap(backbuffer, bitmap_db_store_1, 0, 0, WIN_XSIZE, WIN_YSIZE, 0, 0); if (CheckIfGlobalBorderRedrawIsNeeded()) { @@ -1054,20 +1037,20 @@ static void RedrawGlobalBorderIfNeeded() if (real_sx_last != -1 && real_sy_last != -1 && REAL_SX != -1 && REAL_SY != -1 && full_sxsize_last == FULL_SXSIZE && full_sysize_last == FULL_SYSIZE) - BlitBitmap(bitmap_db_store, backbuffer, + BlitBitmap(bitmap_db_store_1, backbuffer, real_sx_last, real_sy_last, FULL_SXSIZE, FULL_SYSIZE, REAL_SX, REAL_SY); if (dx_last != -1 && dy_last != -1 && DX != -1 && DY != -1 && dxsize_last == DXSIZE && dysize_last == DYSIZE) - BlitBitmap(bitmap_db_store, backbuffer, + BlitBitmap(bitmap_db_store_1, backbuffer, dx_last, dy_last, DXSIZE, DYSIZE, DX, DY); if (vx_last != -1 && vy_last != -1 && VX != -1 && VY != -1 && vxsize_last == VXSIZE && vysize_last == VYSIZE) - BlitBitmap(bitmap_db_store, backbuffer, + BlitBitmap(bitmap_db_store_1, backbuffer, vx_last, vy_last, VXSIZE, VYSIZE, VX, VY); redraw_mask = REDRAW_ALL; @@ -1103,11 +1086,11 @@ void ClearField() if (game_status == GAME_MODE_PLAYING) { ClearRectangle(fieldbuffer, 0, 0, FXSIZE, FYSIZE); - SetDrawtoField(DRAW_FIELDBUFFER); + SetDrawtoField(DRAW_TO_FIELDBUFFER); } else { - SetDrawtoField(DRAW_BACKBUFFER); + SetDrawtoField(DRAW_TO_BACKBUFFER); } } @@ -2300,11 +2283,11 @@ void AnimateEnvelope(int envelope_nr, int anim_mode, int action) int sy = SY + (SYSIZE - ysize * font_height) / 2; int xx, yy; - SetDrawtoField(DRAW_FIELDBUFFER); + SetDrawtoField(DRAW_TO_FIELDBUFFER); BlitScreenToBitmap(backbuffer); - SetDrawtoField(DRAW_BACKBUFFER); + SetDrawtoField(DRAW_TO_BACKBUFFER); for (yy = 0; yy < ysize; yy++) for (xx = 0; xx < xsize; xx++) @@ -2361,7 +2344,7 @@ void ShowEnvelope(int envelope_nr) game.envelope_active = FALSE; - SetDrawtoField(DRAW_FIELDBUFFER); + SetDrawtoField(DRAW_TO_FIELDBUFFER); redraw_mask |= REDRAW_FIELD; BackToFront(); @@ -2515,7 +2498,7 @@ void DrawEnvelopeRequest(char *text) RedrawGadget(tool_gadget[i]); // store readily prepared envelope request for later use when animating - BlitBitmap(backbuffer, bitmap_db_cross, 0, 0, WIN_XSIZE, WIN_YSIZE, 0, 0); + BlitBitmap(backbuffer, bitmap_db_store_2, 0, 0, WIN_XSIZE, WIN_YSIZE, 0, 0); if (text_door_style) free(text_door_style); @@ -2576,7 +2559,7 @@ void AnimateEnvelopeRequest(int anim_mode, int action) setRequestPosition(&src_x, &src_y, FALSE); setRequestPositionExt(&dst_x, &dst_y, width, height, FALSE); - BlitBitmap(bitmap_db_store, backbuffer, 0, 0, WIN_XSIZE, WIN_YSIZE, 0, 0); + BlitBitmap(bitmap_db_store_1, backbuffer, 0, 0, WIN_XSIZE, WIN_YSIZE, 0, 0); for (yy = 0; yy < 2; yy++) { @@ -2590,10 +2573,10 @@ void AnimateEnvelopeRequest(int anim_mode, int action) int yy_size = (yy ? tile_size : ysize_size_top); if (draw_masked) - BlitBitmapMasked(bitmap_db_cross, backbuffer, + BlitBitmapMasked(bitmap_db_store_2, backbuffer, src_xx, src_yy, xx_size, yy_size, dst_xx, dst_yy); else - BlitBitmap(bitmap_db_cross, backbuffer, + BlitBitmap(bitmap_db_store_2, backbuffer, src_xx, src_yy, xx_size, yy_size, dst_xx, dst_yy); } } @@ -2620,13 +2603,13 @@ void ShowEnvelopeRequest(char *text, unsigned int req_state, int action) if (game_status == GAME_MODE_PLAYING) BlitScreenToBitmap(backbuffer); - SetDrawtoField(DRAW_BACKBUFFER); + SetDrawtoField(DRAW_TO_BACKBUFFER); // SetDrawBackgroundMask(REDRAW_NONE); if (action == ACTION_OPENING) { - BlitBitmap(backbuffer, bitmap_db_store, 0, 0, WIN_XSIZE, WIN_YSIZE, 0, 0); + BlitBitmap(backbuffer, bitmap_db_store_1, 0, 0, WIN_XSIZE, WIN_YSIZE, 0, 0); if (req_state & REQ_ASK) { @@ -2673,7 +2656,7 @@ void ShowEnvelopeRequest(char *text, unsigned int req_state, int action) game.envelope_active = FALSE; if (action == ACTION_CLOSING) - BlitBitmap(bitmap_db_store, backbuffer, 0, 0, WIN_XSIZE, WIN_YSIZE, 0, 0); + BlitBitmap(bitmap_db_store_1, backbuffer, 0, 0, WIN_XSIZE, WIN_YSIZE, 0, 0); // SetDrawBackgroundMask(last_draw_background_mask); @@ -2684,7 +2667,7 @@ void ShowEnvelopeRequest(char *text, unsigned int req_state, int action) if (action == ACTION_CLOSING && game_status == GAME_MODE_PLAYING && level.game_engine_type == GAME_ENGINE_TYPE_RND) - SetDrawtoField(DRAW_FIELDBUFFER); + SetDrawtoField(DRAW_TO_FIELDBUFFER); } void DrawPreviewElement(int dst_x, int dst_y, int element, int tilesize) @@ -3569,16 +3552,16 @@ static int RequestHandleEvents(unsigned int req_state) { if (level_solved) { - SetDrawtoField(DRAW_FIELDBUFFER); + SetDrawtoField(DRAW_TO_FIELDBUFFER); HandleGameActions(); - SetDrawtoField(DRAW_BACKBUFFER); + SetDrawtoField(DRAW_TO_BACKBUFFER); if (global.use_envelope_request) { /* copy current state of request area to middle of playfield area */ - BlitBitmap(bitmap_db_cross, drawto, sx, sy, width, height, sx, sy); + BlitBitmap(bitmap_db_store_2, drawto, sx, sy, width, height, sx, sy); } } @@ -3706,7 +3689,7 @@ static int RequestHandleEvents(unsigned int req_state) if (global.use_envelope_request) { /* copy back current state of pressed buttons inside request area */ - BlitBitmap(drawto, bitmap_db_cross, sx, sy, width, height, sx, sy); + BlitBitmap(drawto, bitmap_db_store_2, sx, sy, width, height, sx, sy); } } @@ -8339,7 +8322,7 @@ void ChangeViewportPropertiesIfNeeded() int new_scr_fieldy_buffers = new_sysize / new_tilesize_var; boolean init_gfx_buffers = FALSE; boolean init_video_buffer = FALSE; - boolean init_gadgets_and_toons = FALSE; + boolean init_gadgets_and_anims = FALSE; boolean init_em_graphics = FALSE; if (new_win_xsize != WIN_XSIZE || @@ -8350,7 +8333,7 @@ void ChangeViewportPropertiesIfNeeded() init_video_buffer = TRUE; init_gfx_buffers = TRUE; - init_gadgets_and_toons = TRUE; + init_gadgets_and_anims = TRUE; // printf("::: video: init_video_buffer, init_gfx_buffers\n"); } @@ -8465,10 +8448,10 @@ void ChangeViewportPropertiesIfNeeded() TILESIZE_VAR = new_tilesize_var; init_gfx_buffers = TRUE; - init_gadgets_and_toons = TRUE; + init_gadgets_and_anims = TRUE; // printf("::: viewports: init_gfx_buffers\n"); - // printf("::: viewports: init_gadgets_and_toons\n"); + // printf("::: viewports: init_gadgets_and_anims\n"); } if (init_gfx_buffers) @@ -8495,9 +8478,9 @@ void ChangeViewportPropertiesIfNeeded() InitImageTextures(); } - if (init_gadgets_and_toons) + if (init_gadgets_and_anims) { - // printf("::: init_gadgets_and_toons\n"); + // printf("::: init_gadgets_and_anims\n"); InitGadgets(); InitGlobalAnimations();