From 884012f34f9f3c22bf75d1468e4ed57d7795a24b Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Tue, 20 Mar 2007 21:57:22 +0100 Subject: [PATCH] rnd-20070320-3-src * improved menu fading, adding separate fading definitions for fading between menu screens and fading between menu and "destination" screens --- ChangeLog | 4 + src/conftime.h | 2 +- src/editor.c | 33 ++++- src/editor.h | 2 +- src/game.c | 56 ++++++++ src/init.c | 4 + src/main.c | 8 ++ src/main.h | 1 + src/screens.c | 381 ++++++++++++++++++++++++++++++++++++++++++++++++- src/tools.c | 11 +- 10 files changed, 493 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index cc9c815a..82551132 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2007-03-20 + * improved menu fading, adding separate fading definitions for fading + between menu screens and fading between menu and "destination" screens + 2007-03-19 * titlemessage_initial_x and titlemessage_x set to "[DEFAULT]" in static configuration (set from "[titlemessage_initial]" and "[titlemessage]") diff --git a/src/conftime.h b/src/conftime.h index 4f9b213b..3b496277 100644 --- a/src/conftime.h +++ b/src/conftime.h @@ -1 +1 @@ -#define COMPILE_DATE_STRING "2007-03-20 01:35" +#define COMPILE_DATE_STRING "2007-03-20 21:54" diff --git a/src/editor.c b/src/editor.c index 009297ae..aceedf17 100644 --- a/src/editor.c +++ b/src/editor.c @@ -7051,8 +7051,26 @@ void DrawLevelEd() #endif MapControlButtons(); +#if 0 + fading = menu.navigation; +#endif + +#if 1 + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_FIELD); +#endif + DrawEditModeWindow(); +#if 1 + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCross(REDRAW_FIELD); + else + FadeIn(REDRAW_FIELD); +#endif + /* copy actual editor door content to door double buffer for OpenDoor() */ BlitBitmap(drawto, bitmap_db_door, DX, DY, DXSIZE, DYSIZE, DOOR_GFX_PAGEX1, DOOR_GFX_PAGEY1); @@ -10882,7 +10900,7 @@ static void HandleControlButtons(struct GadgetInfo *gi) break; case GADGET_ID_EXIT: - RequestExitLevelEditor(TRUE); /* if level has changed, ask user */ + RequestExitLevelEditor(TRUE, FALSE); /* if level has changed, ask user */ break; default: @@ -11061,7 +11079,7 @@ void HandleLevelEditorKeyInput(Key key) case KSYM_Escape: if (edit_mode == ED_MODE_DRAWING) { - RequestExitLevelEditor(setup.ask_on_escape_editor); + RequestExitLevelEditor(setup.ask_on_escape_editor, TRUE); } else if (edit_mode == ED_MODE_INFO) { @@ -11332,7 +11350,8 @@ static void HandleDrawingAreaInfo(struct GadgetInfo *gi) DrawTextS(INFOTEXT_XPOS - SX, INFOTEXT_YPOS - SY, FONT_TEXT_2, infotext); } -void RequestExitLevelEditor(boolean ask_if_level_has_changed) +void RequestExitLevelEditor(boolean ask_if_level_has_changed, + boolean quick_quit) { if (!ask_if_level_has_changed || !LevelChanged() || @@ -11341,8 +11360,16 @@ void RequestExitLevelEditor(boolean ask_if_level_has_changed) { CloseDoor(DOOR_CLOSE_1); SetDoorState(DOOR_CLOSE_2); + + if (quick_quit) + fading = fading_none; + game_status = GAME_MODE_MAIN; +#if 1 + DrawAndFadeInMainMenu(REDRAW_FIELD); +#else DrawMainMenu(); +#endif } else { diff --git a/src/editor.h b/src/editor.h index 245e0566..717c07a0 100644 --- a/src/editor.h +++ b/src/editor.h @@ -23,7 +23,7 @@ void DrawLevelEd(void); void HandleLevelEditorKeyInput(Key); void HandleLevelEditorIdle(); void HandleEditorGadgetInfoText(void *ptr); -void RequestExitLevelEditor(boolean); +void RequestExitLevelEditor(boolean, boolean); void PrintEditorElementList(); void DumpBrush(); diff --git a/src/game.c b/src/game.c index c257bb40..593a8bac 100644 --- a/src/game.c +++ b/src/game.c @@ -3155,8 +3155,20 @@ void InitGame() if (!game.restart_level) CloseDoor(DOOR_CLOSE_1); + if (level_editor_test_game) + fading = fading_none; + else + fading = menu.destination; + +#if 1 + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_FIELD); +#else if (do_fading) FadeOut(REDRAW_FIELD); +#endif /* !!! FIX THIS (START) !!! */ if (level.game_engine_type == GAME_ENGINE_TYPE_EM) @@ -3183,10 +3195,17 @@ void InitGame() } /* !!! FIX THIS (END) !!! */ +#if 1 + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCross(redraw_mask); + else + FadeIn(redraw_mask); +#else if (do_fading) FadeIn(REDRAW_FIELD); BackToFront(); +#endif if (!game.restart_level) { @@ -3637,14 +3656,25 @@ void GameEnd() { game_status = GAME_MODE_MAIN; +#if 1 + DrawAndFadeInMainMenu(REDRAW_FIELD); +#else DrawMainMenu(); +#endif return; } if (!local_player->LevelSolved_SaveScore) { +#if 1 + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_FIELD); +#else FadeOut(REDRAW_FIELD); +#endif game_status = GAME_MODE_MAIN; @@ -3676,7 +3706,14 @@ void GameEnd() } else { +#if 1 + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_FIELD); +#else FadeOut(REDRAW_FIELD); +#endif game_status = GAME_MODE_MAIN; @@ -14093,13 +14130,32 @@ void RequestQuitGameExt(boolean skip_request, boolean quick_quit, char *message) { if (quick_quit) { +#if 1 + fading = fading_none; +#else + OpenDoor(DOOR_CLOSE_1); +#endif + game_status = GAME_MODE_MAIN; +#if 1 + DrawAndFadeInMainMenu(REDRAW_FIELD); +#else DrawMainMenu(); +#endif } else { +#if 0 +#if 1 + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_FIELD); +#else FadeOut(REDRAW_FIELD); +#endif +#endif game_status = GAME_MODE_MAIN; diff --git a/src/init.c b/src/init.c index dcef9e26..a8017155 100644 --- a/src/init.c +++ b/src/init.c @@ -5111,6 +5111,8 @@ void ReloadCustomArtwork(int force_reload) /* force redraw of (open or closed) door graphics */ SetDoorState(DOOR_OPEN_ALL); CloseDoor(DOOR_CLOSE_ALL | DOOR_NO_DELAY); + + fading = fading_none; } } @@ -5195,6 +5197,8 @@ void OpenAll() return; } + fading = fading_none; + game_status = GAME_MODE_MAIN; DrawMainMenu(); diff --git a/src/main.c b/src/main.c index 5174a162..d978a588 100644 --- a/src/main.c +++ b/src/main.c @@ -5449,6 +5449,14 @@ struct MusicPrefixInfo music_prefix_info[NUM_MUSIC_PREFIXES + 1] = { NULL, 0 } }; +struct TitleFadingInfo fading_none = +{ + ANIM_NONE, + 0, + 0, + 0 +}; + /* ========================================================================= */ /* main() */ diff --git a/src/main.h b/src/main.h index 11ee9c0f..e400c20e 100644 --- a/src/main.h +++ b/src/main.h @@ -2686,6 +2686,7 @@ extern struct TapeInfo tape; extern struct GlobalInfo global; extern struct BorderInfo border; extern struct TitleFadingInfo fading; +extern struct TitleFadingInfo fading_none; extern struct TitleFadingInfo title_initial_default; extern struct TitleFadingInfo title_default; extern struct TitleMessageInfo titlemessage_initial_default; diff --git a/src/screens.c b/src/screens.c index 66544991..6b96420a 100644 --- a/src/screens.c +++ b/src/screens.c @@ -204,6 +204,8 @@ static struct { -1, NULL }, }; +#define XFADE 1 + #define DRAW_MODE(s) ((s) >= GAME_MODE_MAIN && \ (s) <= GAME_MODE_SETUP ? (s) : \ (s) == GAME_MODE_PSEUDO_TYPENAME ? \ @@ -641,8 +643,10 @@ static struct TitleFadingInfo getTitleFading(struct TitleControlInfo *tci) } } +#if 0 if (ti.anim_mode == ANIM_NONE) ti.fade_delay = ti.post_delay = 0; +#endif return ti; } @@ -1228,6 +1232,20 @@ void DrawMainMenuExt(int redraw_mask, boolean do_fading) title = title_default; #endif +#if 0 + printf("::: %d, %d\n", fading.anim_mode == ANIM_CROSSFADE, + redraw_mask == REDRAW_ALL); +#endif + +#if 1 +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(redraw_mask); +#endif +#endif + UnmapAllGadgets(); FadeSoundsAndMusic(); @@ -1273,7 +1291,7 @@ void DrawMainMenuExt(int redraw_mask, boolean do_fading) SetDrawtoField(DRAW_BACKBUFFER); #endif -#if 1 +#if 0 if (levelset_has_changed) fading = title_default; #endif @@ -1313,6 +1331,35 @@ void DrawMainMenuExt(int redraw_mask, boolean do_fading) LoadLevel(level_nr); SetMainBackgroundImage(IMG_BACKGROUND_MAIN); + +#if 0 +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(redraw_mask); +#endif +#endif + +#if 1 + if (redraw_mask == REDRAW_ALL) + { + int door_state = GetDoorState(); + + RedrawBackground(); + + // OpenDoor(door_state | DOOR_NO_DELAY | DOOR_FORCE_REDRAW); + +#if 0 +#if 1 + OpenDoor(DOOR_NO_DELAY | DOOR_FORCE_REDRAW); +#else + OpenDoor(DOOR_CLOSE_1 | DOOR_CLOSE_2 | DOOR_NO_DELAY | DOOR_FORCE_REDRAW); +#endif +#endif + } +#endif + ClearWindow(); #if 1 @@ -1402,12 +1449,32 @@ void DrawMainMenuExt(int redraw_mask, boolean do_fading) FreeScreenGadgets(); CreateScreenGadgets(); +#if 0 + BlitBitmap(drawto, window, VX, VY, VXSIZE, VYSIZE, VX, VY); + Delay(3000); +#endif + /* map gadgets for main menu screen */ MapTapeButtons(); MapScreenMenuGadgets(SCREEN_MASK_MAIN); DrawMaskedBorder(REDRAW_ALL); +#if 1 + if (redraw_mask == REDRAW_ALL) + { + int door_state = GetDoorState(); + + OpenDoor(door_state | DOOR_NO_DELAY | DOOR_FORCE_REDRAW); + } +#endif + +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCross(redraw_mask); + else + FadeIn(redraw_mask); +#else #if 1 if (!do_fading) BackToFront(); @@ -1421,6 +1488,7 @@ void DrawMainMenuExt(int redraw_mask, boolean do_fading) else BackToFront(); #endif +#endif #if 1 fading = menu.navigation; @@ -1594,7 +1662,18 @@ void HandleTitleScreen(int mx, int my, int dx, int dy, int button) if (game_status == GAME_MODE_INFO && num_title_screens == 0) { +#if 0 +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_FIELD); +#else FadeOut(REDRAW_FIELD); +#endif +#endif + + fading = menu.destination; info_mode = INFO_MODE_MAIN; DrawAndFadeInInfoScreen(REDRAW_FIELD); @@ -1676,6 +1755,7 @@ void HandleTitleScreen(int mx, int my, int dx, int dy, int button) { FadeSoundsAndMusic(); +#if 0 #if 1 { #if 0 @@ -1689,6 +1769,7 @@ void HandleTitleScreen(int mx, int my, int dx, int dy, int button) } #else FadeOut(REDRAW_ALL); +#endif #endif return_to_main_menu = TRUE; @@ -1697,20 +1778,26 @@ void HandleTitleScreen(int mx, int my, int dx, int dy, int button) if (return_to_main_menu) { +#if 0 RedrawBackground(); +#endif SetMouseCursor(CURSOR_DEFAULT); if (game_status == GAME_MODE_INFO) { +#if 0 OpenDoor(DOOR_CLOSE_1 | DOOR_CLOSE_2 | DOOR_NO_DELAY | DOOR_FORCE_REDRAW); +#endif info_mode = INFO_MODE_MAIN; DrawInfoScreenExt(REDRAW_ALL, use_fading_main_menu); } else /* default: return to main menu */ { +#if 0 OpenDoor(DOOR_CLOSE_1 | DOOR_OPEN_2 | DOOR_NO_DELAY | DOOR_FORCE_REDRAW); +#endif game_status = GAME_MODE_MAIN; DrawMainMenuExt(REDRAW_ALL, use_fading_main_menu); @@ -1868,6 +1955,8 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button) game_status = GAME_MODE_EDITOR; + fading = menu.destination; + DrawLevelEd(); } else if (pos == MAIN_CONTROL_INFO) @@ -1875,6 +1964,8 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button) game_status = GAME_MODE_INFO; info_mode = INFO_MODE_MAIN; + fading = menu.navigation; + DrawInfoScreen(); } else if (pos == MAIN_CONTROL_GAME) @@ -2038,50 +2129,70 @@ static int num_info_info; static void execInfoTitleScreen() { + fading = menu.destination; + info_mode = INFO_MODE_TITLE; DrawInfoScreen(); } static void execInfoElements() { + fading = menu.destination; + info_mode = INFO_MODE_ELEMENTS; DrawInfoScreen(); } static void execInfoMusic() { + fading = menu.destination; + info_mode = INFO_MODE_MUSIC; DrawInfoScreen(); } static void execInfoCredits() { + fading = menu.destination; + info_mode = INFO_MODE_CREDITS; DrawInfoScreen(); } static void execInfoProgram() { + fading = menu.destination; + info_mode = INFO_MODE_PROGRAM; DrawInfoScreen(); } static void execInfoVersion() { + fading = menu.destination; + info_mode = INFO_MODE_VERSION; DrawInfoScreen(); } static void execInfoLevelSet() { + fading = menu.destination; + info_mode = INFO_MODE_LEVELSET; DrawInfoScreen(); } static void execExitInfo() { + fading = menu.navigation; + game_status = GAME_MODE_MAIN; +#if 1 + DrawMainMenuExt(REDRAW_FIELD, FALSE); +#else DrawMainMenu(); +#endif } static struct TokenInfo info_info_main[] = @@ -2121,6 +2232,21 @@ static void DrawInfoScreen_Main(int redraw_mask, boolean do_fading) UnmapAllGadgets(); CloseDoor(DOOR_CLOSE_2); +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(redraw_mask); +#endif + +#if 1 + if (redraw_mask == REDRAW_ALL) + { + RedrawBackground(); + OpenDoor(DOOR_CLOSE_1 | DOOR_CLOSE_2 | DOOR_NO_DELAY | DOOR_FORCE_REDRAW); + } +#endif + ClearWindow(); DrawTextSCentered(mSY - SY + 16, FONT_TITLE_1, "Info Screen"); @@ -2159,6 +2285,12 @@ static void DrawInfoScreen_Main(int redraw_mask, boolean do_fading) DrawMaskedBorder(REDRAW_ALL); +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCross(redraw_mask); + else + FadeIn(redraw_mask); +#else #if 1 if (!do_fading) BackToFront(); @@ -2171,6 +2303,7 @@ static void DrawInfoScreen_Main(int redraw_mask, boolean do_fading) FadeIn(redraw_mask); else BackToFront(); +#endif #endif InitAnimation(); @@ -2289,7 +2422,14 @@ void DrawInfoScreen_NotAvailable(char *text_title, char *text_error) SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_LEVELSET); +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_FIELD); +#else FadeOut(REDRAW_FIELD); +#endif ClearWindow(); DrawHeadline(); @@ -2300,7 +2440,14 @@ void DrawInfoScreen_NotAvailable(char *text_title, char *text_error) DrawTextSCentered(ybottom, FONT_TEXT_4, "Press any key or button for info menu"); +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCross(REDRAW_FIELD); + else + FadeIn(REDRAW_FIELD); +#else FadeIn(REDRAW_FIELD); +#endif } void DrawInfoScreen_HelpAnim(int start, int max_anims, boolean init) @@ -2489,14 +2636,28 @@ void DrawInfoScreen_Elements() { SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_ELEMENTS); +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_FIELD); +#else FadeOut(REDRAW_FIELD); +#endif LoadHelpAnimInfo(); LoadHelpTextInfo(); HandleInfoScreen_Elements(MB_MENU_INITIALIZE); +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCross(REDRAW_FIELD); + else + FadeIn(REDRAW_FIELD); +#else FadeIn(REDRAW_FIELD); +#endif InitAnimation(); } @@ -2552,7 +2713,17 @@ void HandleInfoScreen_Elements(int button) if (page >= num_pages) { FadeSoundsAndMusic(); + +#if 0 +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_FIELD); +#else FadeOut(REDRAW_FIELD); +#endif +#endif info_mode = INFO_MODE_MAIN; DrawAndFadeInInfoScreen(REDRAW_FIELD); @@ -2582,7 +2753,14 @@ void DrawInfoScreen_Music() { SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_MUSIC); +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_FIELD); +#else FadeOut(REDRAW_FIELD); +#endif ClearWindow(); DrawHeadline(); @@ -2591,7 +2769,14 @@ void DrawInfoScreen_Music() HandleInfoScreen_Music(MB_MENU_INITIALIZE); +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCross(REDRAW_FIELD); + else + FadeIn(REDRAW_FIELD); +#else FadeIn(REDRAW_FIELD); +#endif } void HandleInfoScreen_Music(int button) @@ -2649,7 +2834,17 @@ void HandleInfoScreen_Music(int button) if (list == NULL) { FadeSoundsAndMusic(); + +#if 0 +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_FIELD); +#else FadeOut(REDRAW_FIELD); +#endif +#endif info_mode = INFO_MODE_MAIN; DrawAndFadeInInfoScreen(REDRAW_FIELD); @@ -2915,11 +3110,25 @@ void DrawInfoScreen_Credits() FadeSoundsAndMusic(); +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_FIELD); +#else FadeOut(REDRAW_FIELD); +#endif HandleInfoScreen_Credits(MB_MENU_INITIALIZE); +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCross(REDRAW_FIELD); + else + FadeIn(REDRAW_FIELD); +#else FadeIn(REDRAW_FIELD); +#endif } void HandleInfoScreen_Credits(int button) @@ -2960,7 +3169,17 @@ void HandleInfoScreen_Credits(int button) else { FadeSoundsAndMusic(); + +#if 0 +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_FIELD); +#else FadeOut(REDRAW_FIELD); +#endif +#endif info_mode = INFO_MODE_MAIN; DrawAndFadeInInfoScreen(REDRAW_FIELD); @@ -2981,7 +3200,14 @@ void DrawInfoScreen_Program() SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_PROGRAM); +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_FIELD); +#else FadeOut(REDRAW_FIELD); +#endif ClearWindow(); DrawHeadline(); @@ -3018,7 +3244,14 @@ void DrawInfoScreen_Program() DrawTextSCentered(ybottom, FONT_TEXT_4, "Press any key or button for info menu"); +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCross(REDRAW_FIELD); + else + FadeIn(REDRAW_FIELD); +#else FadeIn(REDRAW_FIELD); +#endif } void HandleInfoScreen_Program(int button) @@ -3037,7 +3270,17 @@ void HandleInfoScreen_Program(int button) PlaySound(SND_MENU_ITEM_SELECTING); FadeSoundsAndMusic(); + +#if 0 +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_FIELD); +#else FadeOut(REDRAW_FIELD); +#endif +#endif info_mode = INFO_MODE_MAIN; DrawAndFadeInInfoScreen(REDRAW_FIELD); @@ -3069,7 +3312,14 @@ void DrawInfoScreen_Version() SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_VERSION); +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_FIELD); +#else FadeOut(REDRAW_FIELD); +#endif ClearWindow(); DrawHeadline(); @@ -3180,7 +3430,14 @@ void DrawInfoScreen_Version() DrawTextSCentered(ybottom, FONT_TEXT_4, "Press any key or button for info menu"); +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCross(REDRAW_FIELD); + else + FadeIn(REDRAW_FIELD); +#else FadeIn(REDRAW_FIELD); +#endif } void HandleInfoScreen_Version(int button) @@ -3199,7 +3456,17 @@ void HandleInfoScreen_Version(int button) PlaySound(SND_MENU_ITEM_SELECTING); FadeSoundsAndMusic(); + +#if 0 +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_FIELD); +#else FadeOut(REDRAW_FIELD); +#endif +#endif info_mode = INFO_MODE_MAIN; DrawAndFadeInInfoScreen(REDRAW_FIELD); @@ -3229,7 +3496,14 @@ void DrawInfoScreen_LevelSet() SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_LEVELSET); +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_FIELD); +#else FadeOut(REDRAW_FIELD); +#endif ClearWindow(); DrawHeadline(); @@ -3247,7 +3521,14 @@ void DrawInfoScreen_LevelSet() DrawTextCentered(mSY + SYSIZE - 20, FONT_TEXT_4, "Press any key or button for info menu"); +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCross(REDRAW_FIELD); + else + FadeIn(REDRAW_FIELD); +#else FadeIn(REDRAW_FIELD); +#endif } void HandleInfoScreen_LevelSet(int button) @@ -3266,7 +3547,17 @@ void HandleInfoScreen_LevelSet(int button) PlaySound(SND_MENU_ITEM_SELECTING); FadeSoundsAndMusic(); + +#if 0 +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_FIELD); +#else FadeOut(REDRAW_FIELD); +#endif +#endif info_mode = INFO_MODE_MAIN; DrawAndFadeInInfoScreen(REDRAW_FIELD); @@ -3314,8 +3605,6 @@ void DrawAndFadeInInfoScreen(int redraw_mask) void DrawInfoScreen() { - fading = menu.destination; - DrawInfoScreenExt(REDRAW_ALL, FALSE); } @@ -3482,12 +3771,27 @@ static void DrawChooseTree(TreeInfo **ti_ptr) CloseDoor(DOOR_CLOSE_2); +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_FIELD); +#endif + ClearWindow(); HandleChooseTree(0, 0, 0, 0, MB_MENU_INITIALIZE, ti_ptr); MapScreenTreeGadgets(*ti_ptr); +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCross(redraw_mask); + else + FadeIn(redraw_mask); +#else FadeToFront(); +#endif + InitAnimation(); } @@ -3681,7 +3985,11 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button, else { game_status = GAME_MODE_MAIN; +#if 1 + DrawMainMenuExt(REDRAW_FIELD, FALSE); +#else DrawMainMenu(); +#endif } return; @@ -3892,7 +4200,16 @@ void DrawHallOfFame(int highlight_position) if (highlight_position < 0) LoadScore(level_nr); + fading = menu.destination; + +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_FIELD); +#else FadeOut(REDRAW_FIELD); +#endif InitAnimation(); @@ -3901,7 +4218,14 @@ void DrawHallOfFame(int highlight_position) HandleHallOfFame(highlight_position, 0, 0, 0, MB_MENU_INITIALIZE); +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCross(REDRAW_FIELD); + else + FadeIn(REDRAW_FIELD); +#else FadeIn(REDRAW_FIELD); +#endif } static void drawHallOfFameList(int first_entry, int highlight_position) @@ -3996,7 +4320,17 @@ void HandleHallOfFame(int mx, int my, int dx, int dy, int button) PlaySound(SND_MENU_ITEM_SELECTING); FadeSound(SND_BACKGROUND_SCORES); + +#if 0 +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_FIELD); +#else FadeOut(REDRAW_FIELD); +#endif +#endif game_status = GAME_MODE_MAIN; @@ -4228,7 +4562,11 @@ static void execSetupShortcut2() static void execExitSetup() { game_status = GAME_MODE_MAIN; +#if 1 + DrawMainMenuExt(REDRAW_FIELD, FALSE); +#else DrawMainMenu(); +#endif } static void execSaveAndExitSetup() @@ -4623,6 +4961,13 @@ static void DrawSetupScreen_Generic() UnmapAllGadgets(); CloseDoor(DOOR_CLOSE_2); +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_FIELD); +#endif + ClearWindow(); if (setup_mode == SETUP_MODE_MAIN) @@ -4713,9 +5058,23 @@ static void DrawSetupScreen_Generic() "Joysticks deactivated in setup menu"); #endif +#if 1 + HandleSetupScreen_Generic(0, 0, 0, 0, MB_MENU_INITIALIZE); +#endif + +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCross(redraw_mask); + else + FadeIn(redraw_mask); +#else FadeToFront(); +#endif + InitAnimation(); +#if 0 HandleSetupScreen_Generic(0, 0, 0, 0, MB_MENU_INITIALIZE); +#endif } void HandleSetupScreen_Generic(int mx, int my, int dx, int dy, int button) @@ -4838,6 +5197,13 @@ void DrawSetupScreen_Input() int i; #endif +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCrossSaveBackbuffer(); + else + FadeOut(REDRAW_FIELD); +#endif + ClearWindow(); #if 1 @@ -4885,7 +5251,16 @@ void DrawSetupScreen_Input() MapScreenMenuGadgets(SCREEN_MASK_INPUT); HandleSetupScreen_Input(0, 0, 0, 0, MB_MENU_INITIALIZE); + +#if XFADE + if (fading.anim_mode == ANIM_CROSSFADE) + FadeCross(redraw_mask); + else + FadeIn(redraw_mask); +#else FadeToFront(); +#endif + InitAnimation(); } diff --git a/src/tools.c b/src/tools.c index f21f2329..c820bff1 100644 --- a/src/tools.c +++ b/src/tools.c @@ -551,7 +551,16 @@ void FadeExt(int fade_mask, int fade_mode) redraw_mask |= fade_mask; +#if 1 + if (fading.anim_mode == ANIM_NONE) + return; +#endif + +#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); @@ -2988,7 +2997,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; } -- 2.34.1