rnd-20070320-3-src
authorHolger Schemel <info@artsoft.org>
Tue, 20 Mar 2007 20:57:22 +0000 (21:57 +0100)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:55:04 +0000 (10:55 +0200)
* improved menu fading, adding separate fading definitions for fading
  between menu screens and fading between menu and "destination" screens

ChangeLog
src/conftime.h
src/editor.c
src/editor.h
src/game.c
src/init.c
src/main.c
src/main.h
src/screens.c
src/tools.c

index cc9c815a974270babd05f5da2492cb655c87d3d7..825511327feafff156c0b5f74996083ec3d9c43d 100644 (file)
--- 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]")
index 4f9b213bd39095eb389afe7323218492528b380f..3b496277ba41915ae6ae630eb5767a659e64ad4e 100644 (file)
@@ -1 +1 @@
-#define COMPILE_DATE_STRING "2007-03-20 01:35"
+#define COMPILE_DATE_STRING "2007-03-20 21:54"
index 009297ae66122de238e2126ce7312d66015739e3..aceedf17b3bec3652c04116d07ac5fb1935c82f1 100644 (file)
@@ -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
   {
index 245e056685fe00856f3dcaa783a3d7ab12260612..717c07a042396ddc2a265f5dc9afa31e92d01aa6 100644 (file)
@@ -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();
index c257bb4062115b2e76886d7110076f4903198cf7..593a8bac409ac4b4a1f45cf0fc957ffe0d49ec56 100644 (file)
@@ -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;
 
index dcef9e26dc253956421beea98ab050e15eb7f55d..a8017155d78226cad43a2891794f528a7bc913b6 100644 (file)
@@ -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();
index 5174a1624edd4d3e52fec1d195f6fa118b45587c..d978a588e30b7c36c2a716c47ad3729d833f17c9 100644 (file)
@@ -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()                                                                    */
index 11ee9c0fb79ee6465a938610c3e75778abaeffe9..e400c20e7dfa7df68dbfa50ad63fe0c512891a3e 100644 (file)
@@ -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;
index 6654499152ebcf2fcd03d05b0936dc8ea6f2b288..6b96420a5b364ddf7ca0c7f1407354778c429508 100644 (file)
@@ -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();
 }
 
index f21f232956e07c2ed8ac11d4924b2a6e569f235d..c820bff1cbff3726c99e7737fbae413203104c21 100644 (file)
@@ -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;
   }