return;
}
- FadeScreen(NULL, FADE_MODE_FADE_IN, fade_delay, 0);
+ FadeRectangle(NULL, 0, 0, WIN_XSIZE, WIN_YSIZE,
+ FADE_MODE_FADE_IN, fade_delay, 0);
redraw_mask = REDRAW_NONE;
}
return;
}
- FadeScreen(NULL, FADE_MODE_FADE_OUT, fade_delay, post_delay);
+ FadeRectangle(NULL, 0, 0, WIN_XSIZE, WIN_YSIZE,
+ FADE_MODE_FADE_OUT, fade_delay, post_delay);
redraw_mask = REDRAW_NONE;
}
return;
}
- FadeScreen(bitmap_db_title, FADE_MODE_CROSSFADE, fade_delay, 0);
+ FadeRectangle(bitmap_db_title, 0, 0, WIN_XSIZE, WIN_YSIZE,
+ FADE_MODE_CROSSFADE, fade_delay, 0);
redraw_mask = REDRAW_NONE;
}
+void FadeInField(int fade_delay)
+{
+ if (fade_delay == 0)
+ {
+ BackToFront();
+
+ return;
+ }
+
+ FadeRectangle(NULL, REAL_SX, REAL_SY, FULL_SXSIZE, FULL_SYSIZE,
+ FADE_MODE_FADE_IN, fade_delay, 0);
+
+ redraw_mask &= ~REDRAW_FIELD;
+}
+
+void FadeOutField(int fade_delay, int post_delay)
+{
+ if (fade_delay == 0)
+ {
+ ClearRectangle(backbuffer, REAL_SX, REAL_SY, FULL_SXSIZE, FULL_SYSIZE);
+ BackToFront();
+
+ return;
+ }
+
+ FadeRectangle(NULL, REAL_SX, REAL_SY, FULL_SXSIZE, FULL_SYSIZE,
+ FADE_MODE_FADE_OUT, fade_delay, post_delay);
+
+ redraw_mask &= ~REDRAW_FIELD;
+}
+
+void FadeCrossField(int fade_delay)
+{
+ if (fade_delay == 0)
+ {
+ BlitBitmap(bitmap_db_title, backbuffer, REAL_SX, REAL_SY,
+ FULL_SXSIZE, FULL_SYSIZE, REAL_SX, REAL_SY);
+ BackToFront();
+
+ return;
+ }
+
+ FadeRectangle(bitmap_db_title, REAL_SX, REAL_SY, FULL_SXSIZE, FULL_SYSIZE,
+ FADE_MODE_CROSSFADE, fade_delay, 0);
+
+ redraw_mask &= ~REDRAW_FIELD;
+}
+
void SetMainBackgroundImageIfDefined(int graphic)
{
if (graphic_info[graphic].bitmap)
void DrawBackground(int dst_x, int dst_y, int width, int height)
{
+#if 1
+ ClearRectangleOnBackground(drawto, dst_x, dst_y, width, height);
+#else
ClearRectangleOnBackground(backbuffer, dst_x, dst_y, width, height);
+#endif
redraw_mask |= REDRAW_FIELD;
}
GfxElement[jx][jy] = EL_UNDEFINED;
/* make sure that pushed elements are drawn with correct frame rate */
+#if 1
+ graphic = el_act_dir2img(element, ACTION_PUSHING, move_dir);
+
+ if (player->is_pushing && player->is_moving && !IS_ANIM_MODE_CE(graphic))
+ GfxFrame[jx][jy] = player->StepFrame;
+#else
if (player->is_pushing && player->is_moving)
GfxFrame[jx][jy] = player->StepFrame;
+#endif
DrawLevelField(jx, jy);
}
int px = SCREENX(jx), py = SCREENY(jy);
int pxx = (TILEX - ABS(sxx)) * dx;
int pyy = (TILEY - ABS(syy)) * dy;
+ int gfx_frame = GfxFrame[jx][jy];
int graphic;
+ int sync_frame;
int frame;
if (!IS_MOVING(jx, jy)) /* push movement already finished */
+ {
element = Feld[next_jx][next_jy];
+ gfx_frame = GfxFrame[next_jx][next_jy];
+ }
graphic = el_act_dir2img(element, ACTION_PUSHING, move_dir);
+
+#if 1
+ sync_frame = (IS_ANIM_MODE_CE(graphic) ? gfx_frame : player->StepFrame);
+ frame = getGraphicAnimationFrame(graphic, sync_frame);
+#else
frame = getGraphicAnimationFrame(graphic, player->StepFrame);
+#endif
/* draw background element under pushed element (like the Sokoban field) */
if (Back[next_jx][next_jy])