X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ftools.c;h=ba774925f95d7128c5a3c9c8be3f48cbdf8b9aa8;hb=0fa270ea50e806d9af79d08a9bf9386593a4e6cb;hp=f21f232956e07c2ed8ac11d4924b2a6e569f235d;hpb=2f8bd98e428f73379a9173ccc9f7d03c885d641a;p=rocksndiamonds.git diff --git a/src/tools.c b/src/tools.c index f21f2329..ba774925 100644 --- a/src/tools.c +++ b/src/tools.c @@ -521,11 +521,52 @@ void FadeToFront() void FadeExt(int fade_mask, int fade_mode) { + static int fade_mode_skip = FADE_MODE_NONE; void (*draw_border_function)(void) = NULL; - Bitmap *bitmap = (fade_mode == FADE_MODE_CROSSFADE ? bitmap_db_cross : NULL); +#if 0 + Bitmap *bitmap = (fade_mode != FADE_MODE_FADE_IN ? bitmap_db_cross : NULL); +#else + Bitmap *bitmap = (fade_mode & FADE_TYPE_TRANSFORM ? bitmap_db_cross : NULL); +#endif int x, y, width, height; int fade_delay, post_delay; + redraw_mask |= fade_mask; + + if (fade_mode & FADE_TYPE_SKIP) + { +#if 0 + printf("::: will skip %d ... [%d]\n", fade_mode, fade_mode_skip); +#endif + + fade_mode_skip = fade_mode; + + return; + } + + if (fade_mode_skip & FADE_TYPE_SKIP) + { +#if 0 + printf("::: skipping %d ... [%d]\n", fade_mode, fade_mode_skip); +#endif + + /* skip all fade operations until specified fade operation */ + if (fade_mode & fade_mode_skip) + fade_mode_skip = FADE_MODE_NONE; + + return; + } + +#if 1 + if (global.autoplay_leveldir) + fading.fade_mode = FADE_MODE_NONE; +#endif + +#if 1 + if (fading.fade_mode == FADE_MODE_NONE) + return; +#endif + if (fade_mask & REDRAW_FIELD) { x = REAL_SX; @@ -549,9 +590,11 @@ void FadeExt(int fade_mask, int fade_mode) post_delay = (fade_mode == FADE_MODE_FADE_OUT ? fading.post_delay : 0); } - redraw_mask |= fade_mask; - +#if 1 if (!setup.fade_screens || fade_delay == 0) +#else + if (!setup.fade_screens || fade_delay == 0 || fading.anim_mode == ANIM_NONE) +#endif { if (fade_mode == FADE_MODE_FADE_OUT) ClearRectangle(backbuffer, x, y, width, height); @@ -569,12 +612,44 @@ void FadeExt(int fade_mask, int fade_mode) void FadeIn(int fade_mask) { +#if 1 + // printf("::: now fading in...\n"); + + if (fading.fade_mode & FADE_TYPE_TRANSFORM) + FadeExt(fade_mask, fading.fade_mode); + else + FadeExt(fade_mask, FADE_MODE_FADE_IN); +#else +#if 1 + if (fading.fade_mode == FADE_MODE_CROSSFADE) + FadeExt(fade_mask, FADE_MODE_CROSSFADE); + else + FadeExt(fade_mask, FADE_MODE_FADE_IN); +#else FadeExt(fade_mask, FADE_MODE_FADE_IN); +#endif +#endif } void FadeOut(int fade_mask) { +#if 1 + // printf("::: fading.fade_mode == %d\n", fading.fade_mode); + + if (fading.fade_mode & FADE_TYPE_TRANSFORM) + FadeCrossSaveBackbuffer(); + else + FadeExt(fade_mask, FADE_MODE_FADE_OUT); +#else +#if 1 + if (fading.fade_mode == FADE_MODE_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeExt(fade_mask, FADE_MODE_FADE_OUT); +#else FadeExt(fade_mask, FADE_MODE_FADE_OUT); +#endif +#endif } void FadeCross(int fade_mask) @@ -587,6 +662,48 @@ void FadeCrossSaveBackbuffer() BlitBitmap(backbuffer, bitmap_db_cross, 0, 0, WIN_XSIZE, WIN_YSIZE, 0, 0); } +void FadeSetEnterMenu() +{ + fading = menu.enter_menu; +} + +void FadeSetLeaveMenu() +{ + fading = menu.leave_menu; +} + +void FadeSetStartItem() +{ + fading = menu.start_item; +} + +void FadeSetFromType(int type) +{ + if (type & TYPE_ENTER_SCREEN) + FadeSetStartItem(); + else if (type & TYPE_ENTER) + FadeSetEnterMenu(); + else if (type & TYPE_LEAVE) + FadeSetLeaveMenu(); +} + +void FadeSetDisabled() +{ + static struct TitleFadingInfo fading_none = { FADE_MODE_NONE, -1, -1, -1 }; + + fading = fading_none; +} + +void FadeSkipNextFadeIn() +{ + FadeExt(0, FADE_MODE_SKIP_FADE_IN); +} + +void FadeSkipNextFadeOut() +{ + FadeExt(0, FADE_MODE_SKIP_FADE_OUT); +} + void SetWindowBackgroundImageIfDefined(int graphic) { if (graphic_info[graphic].bitmap) @@ -1695,15 +1812,29 @@ void getPreviewGraphicSource(int graphic, Bitmap **bitmap, int *x, int *y, { int width_mult, width_div; int height_mult, height_div; - } offset_calc[4] = +#if 1 + } + offset_calc[6] = +#else + offset_calc[4] = +#endif { { 0, 1, 0, 1 }, { 0, 1, 2, 3 }, { 1, 2, 2, 3 }, { 3, 4, 2, 3 }, +#if 1 + { 7, 8, 2, 3 }, + { 15, 16, 2, 3 }, +#endif }; +#if 1 + int offset_calc_pos = (tilesize < MICRO_TILESIZE / 4 || + tilesize > TILESIZE ? 5 : 5 - log_2(tilesize)); +#else int offset_calc_pos = (tilesize < MICRO_TILESIZE || tilesize > TILESIZE ? 3 : 5 - log_2(tilesize)); +#endif Bitmap *src_bitmap = graphic_info[graphic].bitmap; int width_mult = offset_calc[offset_calc_pos].width_mult; int width_div = offset_calc[offset_calc_pos].width_div; @@ -2988,7 +3119,7 @@ unsigned int MoveDoor(unsigned int door_state) if (setup.quick_doors) { - stepsize = 20; /* must be choosen to always draw last frame */ + stepsize = 20; /* must be chosen to always draw last frame */ door_delay_value = 0; }