added configurability of different window size for title screens
[rocksndiamonds.git] / src / screens.c
index 83e508ea3af63c962b4004828b9ae75add0f0d1d..e68ec1a8d37efb07cee16488cc4a1c64f5a1a93f 100644 (file)
@@ -1252,14 +1252,6 @@ void DrawHeadline()
                    setup.internal.program_copyright);
 }
 
-int effectiveGameStatus()
-{
-  if (game_status == GAME_MODE_INFO && info_mode == INFO_MODE_TITLE)
-    return GAME_MODE_TITLE;
-
-  return game_status;
-}
-
 void DrawTitleScreenImage(int nr, boolean initial)
 {
   int graphic = getTitleScreenGraphic(nr, initial);
@@ -1416,24 +1408,17 @@ void DrawMainMenu()
   /* needed if last screen (level choice) changed graphics, sounds or music */
   ReloadCustomArtwork(0);
 
-#if 1
   /* needed if different viewport properties defined for menues */
   ChangeViewportPropertiesIfNeeded();
-#endif
 
   if (redraw_mask & REDRAW_ALL)
     fade_mask = REDRAW_ALL;
 
-  if (CheckIfRedrawGlobalBorderIsNeeded())
+  if (CheckIfGlobalBorderHasChanged())
     fade_mask = REDRAW_ALL;
 
   FadeOut(fade_mask);
 
-#if 0
-  /* needed if different viewport properties defined for menues */
-  ChangeViewportPropertiesIfNeeded();
-#endif
-
   /* needed if last screen was the editor screen */
   UndrawSpecialEditorDoor();
 
@@ -1441,6 +1426,7 @@ void DrawMainMenu()
 
   if (CheckTitleScreen(levelset_has_changed))
   {
+    game_status_last_screen = GAME_MODE_MAIN;
     game_status = GAME_MODE_TITLE;
 
     DrawTitleScreen();
@@ -1461,7 +1447,7 @@ void DrawMainMenu()
 
   SetMainBackgroundImage(IMG_BACKGROUND_MAIN);
 
-#if 1
+#if 0
   if (fade_mask == REDRAW_ALL)
     RedrawGlobalBorder();
 #endif
@@ -1492,16 +1478,12 @@ void DrawMainMenu()
   MapScreenMenuGadgets(SCREEN_MASK_MAIN);
 
   /* copy actual game door content to door double buffer for OpenDoor() */
+  BlitBitmap(drawto, bitmap_db_door_1, DX, DY, DXSIZE, DYSIZE, 0, 0);
   BlitBitmap(drawto, bitmap_db_door_2, VX, VY, VXSIZE, VYSIZE, 0, 0);
 
   OpenDoor(GetDoorState() | DOOR_NO_DELAY | DOOR_FORCE_REDRAW);
 
-  DrawMaskedBorder(REDRAW_ALL);
-
-#if 0
-  if (redraw_mask & REDRAW_ALL)
-    fade_mask = REDRAW_ALL;
-#endif
+  DrawMaskedBorder(fade_mask);
 
   FadeIn(fade_mask);
   FadeSetEnterMenu();
@@ -1568,7 +1550,7 @@ void HandleTitleScreen(int mx, int my, int dx, int dy, int button)
     last_sound = SND_UNDEFINED;
     last_music = MUS_UNDEFINED;
 
-    if (game_status == GAME_MODE_INFO)
+    if (game_status_last_screen == GAME_MODE_INFO)
     {
       if (num_title_screens == 0)
       {
@@ -1581,8 +1563,13 @@ void HandleTitleScreen(int mx, int my, int dx, int dy, int button)
       FadeSoundsAndMusic();
 
       FadeOut(REDRAW_ALL);
+
+      /* only required to update logic for redrawing global border */
+      ClearField();
     }
 
+    ChangeViewportPropertiesIfNeeded();
+
     if (tci->is_image)
       DrawTitleScreenImage(tci->local_nr, tci->initial);
     else
@@ -1630,11 +1617,13 @@ void HandleTitleScreen(int mx, int my, int dx, int dy, int button)
   }
   else if (button == MB_MENU_CHOICE)
   {
-    if (game_status == GAME_MODE_INFO && num_title_screens == 0)
+    if (game_status_last_screen == GAME_MODE_INFO && num_title_screens == 0)
     {
       FadeSetEnterScreen();
 
+      game_status = GAME_MODE_INFO;
       info_mode = INFO_MODE_MAIN;
+
       DrawInfoScreen();
 
       return;
@@ -1699,8 +1688,9 @@ void HandleTitleScreen(int mx, int my, int dx, int dy, int button)
     /* force full menu screen redraw after displaying title screens */
     redraw_mask = REDRAW_ALL;
 
-    if (game_status == GAME_MODE_INFO)
+    if (game_status_last_screen == GAME_MODE_INFO)
     {
+      game_status = GAME_MODE_INFO;
       info_mode = INFO_MODE_MAIN;
 
       DrawInfoScreen();
@@ -1838,6 +1828,10 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button)
   }
   else if (pos == MAIN_CONTROL_LEVEL_NUMBER && !button)
   {
+    StopAnimation();
+
+    CloseDoor(DOOR_CLOSE_2);
+
     game_status = GAME_MODE_LEVELNR;
 
     ChangeViewportPropertiesIfNeeded();
@@ -1872,6 +1866,10 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button)
       {
        if (leveldir_first)
        {
+         StopAnimation();
+
+         CloseDoor(DOOR_CLOSE_2);
+
          game_status = GAME_MODE_LEVELS;
 
          SaveLevelSetup_LastSeries();
@@ -1887,6 +1885,10 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button)
       }
       else if (pos == MAIN_CONTROL_SCORES)
       {
+       StopAnimation();
+
+       CloseDoor(DOOR_CLOSE_2);
+
        game_status = GAME_MODE_SCORES;
 
        DrawHallOfFame(-1);
@@ -1897,6 +1899,8 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button)
            !strEqual(setup.player_name, "Artsoft"))
          Request("This level is read only!", REQ_CONFIRM);
 
+       StopAnimation();
+
        CloseDoor(DOOR_CLOSE_2);
 
        game_status = GAME_MODE_EDITOR;
@@ -1907,6 +1911,10 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button)
       }
       else if (pos == MAIN_CONTROL_INFO)
       {
+       StopAnimation();
+
+       CloseDoor(DOOR_CLOSE_2);
+
        game_status = GAME_MODE_INFO;
        info_mode = INFO_MODE_MAIN;
 
@@ -1916,10 +1924,16 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button)
       }
       else if (pos == MAIN_CONTROL_GAME)
       {
+       StopAnimation();
+
        StartGameActions(options.network, setup.autorecord, level.random_seed);
       }
       else if (pos == MAIN_CONTROL_SETUP)
       {
+       StopAnimation();
+
+       CloseDoor(DOOR_CLOSE_2);
+
        game_status = GAME_MODE_SETUP;
        setup_mode = SETUP_MODE_MAIN;
 
@@ -2129,7 +2143,7 @@ static void DrawInfoScreen_Main()
   if (redraw_mask & REDRAW_ALL)
     fade_mask = REDRAW_ALL;
 
-  if (CheckIfRedrawGlobalBorderIsNeeded())
+  if (CheckIfGlobalBorderHasChanged())
     fade_mask = REDRAW_ALL;
 
   UnmapAllGadgets();
@@ -2146,12 +2160,9 @@ static void DrawInfoScreen_Main()
 
   FadeOut(fade_mask);
 
-  if (fade_mask == REDRAW_ALL)
-  {
-    RedrawGlobalBorder();
+  ChangeViewportPropertiesIfNeeded();
 
-    OpenDoor(DOOR_CLOSE_1 | DOOR_CLOSE_2 | DOOR_NO_DELAY | DOOR_FORCE_REDRAW);
-  }
+  OpenDoor(GetDoorState() | DOOR_NO_DELAY | DOOR_FORCE_REDRAW);
 
   ClearField();
 
@@ -2654,6 +2665,9 @@ void DrawInfoScreen_HelpText(int element, int action, int direction, int ypos)
 
 void DrawInfoScreen_TitleScreen()
 {
+  game_status_last_screen = GAME_MODE_INFO;
+  game_status = GAME_MODE_TITLE;
+
   DrawTitleScreen();
 }
 
@@ -3626,7 +3640,7 @@ static void DrawChooseTree(TreeInfo **ti_ptr)
 {
   int fade_mask = REDRAW_FIELD;
 
-  if (CheckIfRedrawGlobalBorderIsNeeded())
+  if (CheckIfGlobalBorderHasChanged())
     fade_mask = REDRAW_ALL;
 
   if (strEqual((*ti_ptr)->subdir, STRING_TOP_DIRECTORY))
@@ -3647,11 +3661,15 @@ static void DrawChooseTree(TreeInfo **ti_ptr)
 
   FadeOut(fade_mask);
 
+  OpenDoor(GetDoorState() | DOOR_NO_DELAY | DOOR_FORCE_REDRAW);
+
   ClearField();
 
   HandleChooseTree(0, 0, 0, 0, MB_MENU_INITIALIZE, ti_ptr);
   MapScreenTreeGadgets(*ti_ptr);
 
+  DrawMaskedBorder(fade_mask);
+
   FadeIn(fade_mask);
 
   InitAnimation();
@@ -4131,7 +4149,7 @@ void DrawHallOfFame(int highlight_position)
   /* needed if different viewport properties defined for scores */
   ChangeViewportPropertiesIfNeeded();
 
-  if (CheckIfRedrawGlobalBorderIsNeeded())
+  if (CheckIfGlobalBorderHasChanged())
     fade_mask = REDRAW_ALL;
 
   UnmapAllGadgets();
@@ -4157,8 +4175,12 @@ void DrawHallOfFame(int highlight_position)
   PlayMenuSound();
   PlayMenuMusic();
 
+  OpenDoor(GetDoorState() | DOOR_NO_DELAY | DOOR_FORCE_REDRAW);
+
   HandleHallOfFame(highlight_position, 0, 0, 0, MB_MENU_INITIALIZE);
 
+  DrawMaskedBorder(fade_mask);
+
   FadeIn(fade_mask);
 }
 
@@ -5741,7 +5763,7 @@ static void DrawSetupScreen_Generic()
   char *title_string = NULL;
   int i;
 
-  if (CheckIfRedrawGlobalBorderIsNeeded())
+  if (CheckIfGlobalBorderHasChanged())
     fade_mask = REDRAW_ALL;
 
   UnmapAllGadgets();
@@ -5756,6 +5778,8 @@ static void DrawSetupScreen_Generic()
 
   FadeOut(fade_mask);
 
+  OpenDoor(GetDoorState() | DOOR_NO_DELAY | DOOR_FORCE_REDRAW);
+
   ClearField();
 
   if (setup_mode == SETUP_MODE_MAIN)
@@ -5843,6 +5867,8 @@ static void DrawSetupScreen_Generic()
   if (redraw_all)
     redraw_mask = fade_mask = REDRAW_ALL;
 
+  DrawMaskedBorder(fade_mask);
+
   FadeIn(fade_mask);
 
   InitAnimation();