#include "init.h"
#include "game.h"
#include "events.h"
-#include "cartoons.h"
+#include "anim.h"
#include "network.h"
#include "tape.h"
#include "screens.h"
void SetDrawtoField(int mode)
{
- if (mode == DRAW_FIELDBUFFER)
+ if (mode == DRAW_TO_FIELDBUFFER)
{
FX = 2 * TILEX_VAR;
FY = 2 * TILEY_VAR;
drawto_field = fieldbuffer;
}
- else /* DRAW_BACKBUFFER */
+ else /* DRAW_TO_BACKBUFFER */
{
FX = SX;
FY = SY;
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);
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;
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;
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);
}
{
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;
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;
return;
}
-#if 1
- FadeCrossSaveBackbuffer();
-#endif
-
if (fading.fade_mode & FADE_TYPE_TRANSFORM)
- {
-#if 0
- FadeCrossSaveBackbuffer();
-#endif
-
return;
- }
}
redraw_mask |= fade_mask;
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()
// 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()
// 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())
{
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;
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);
}
}
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++)
game.envelope_active = FALSE;
- SetDrawtoField(DRAW_FIELDBUFFER);
+ SetDrawtoField(DRAW_TO_FIELDBUFFER);
redraw_mask |= REDRAW_FIELD;
BackToFront();
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);
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++)
{
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);
}
}
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)
{
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);
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)
{
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);
}
}
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);
}
}
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 ||
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");
}
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)
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();