X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ftools.c;h=9530644e204d1787fbe18e240867c44b5923b7e9;hb=585994e9f3f77300b730f790062010518f35a739;hp=c820bff1cbff3726c99e7737fbae413203104c21;hpb=884012f34f9f3c22bf75d1468e4ed57d7795a24b;p=rocksndiamonds.git diff --git a/src/tools.c b/src/tools.c index c820bff1..9530644e 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,13 +590,6 @@ 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 (fading.anim_mode == ANIM_NONE) - return; -#endif - #if 1 if (!setup.fade_screens || fade_delay == 0) #else @@ -578,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) @@ -596,6 +662,69 @@ void FadeCrossSaveBackbuffer() BlitBitmap(backbuffer, bitmap_db_cross, 0, 0, WIN_XSIZE, WIN_YSIZE, 0, 0); } +static void FadeSetLeaveNext(struct TitleFadingInfo fading_leave, boolean set) +{ + static struct TitleFadingInfo fading_leave_stored; + + if (set) + fading_leave_stored = fading_leave; + else + fading = fading_leave_stored; +} + +void FadeSetEnterMenu() +{ + fading = menu.enter_menu; + + FadeSetLeaveNext(fading, TRUE); /* (keep same fade mode) */ +} + +void FadeSetLeaveMenu() +{ + fading = menu.leave_menu; + + FadeSetLeaveNext(fading, TRUE); /* (keep same fade mode) */ +} + +void FadeSetEnterScreen() +{ + fading = menu.enter_screen[game_status]; + + FadeSetLeaveNext(menu.leave_screen[game_status], TRUE); /* store */ +} + +void FadeSetLeaveScreen() +{ + FadeSetLeaveNext(menu.leave_screen[game_status], FALSE); /* recall */ +} + +void FadeSetFromType(int type) +{ + if (type & TYPE_ENTER_SCREEN) + FadeSetEnterScreen(); + 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) @@ -1704,15 +1833,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;