rnd-20070825-4-src
[rocksndiamonds.git] / src / screens.c
index 4a0110fb00733cb49bd60ec4a8db5992bdfd7e85..3bc6c2b3ef1b50e7b1f5204d027e58be01636da6 100644 (file)
@@ -747,6 +747,12 @@ static void InitializeTitleControls_CheckTitleInfo(boolean initial)
     Bitmap *bitmap = graphic_info[graphic].bitmap;
     int sort_priority = graphic_info[graphic].sort_priority;
 
+#if 0
+    /* skip images and messages (fonts!) when using forced custom graphics */
+    if (setup.override_level_graphics && !initial)
+      continue;
+#endif
+
     if (bitmap != NULL)
       InitializeTitleControlsExt_AddTitleInfo(TRUE, initial, i, sort_priority);
   }
@@ -757,6 +763,12 @@ static void InitializeTitleControls_CheckTitleInfo(boolean initial)
     char *filename = getLevelSetTitleMessageFilename(i, initial);
     int sort_priority = tmi->sort_priority;
 
+#if 0
+    /* skip images and messages (fonts!) when using forced custom graphics */
+    if (setup.override_level_graphics)
+      continue;
+#endif
+
     if (filename != NULL)
       InitializeTitleControlsExt_AddTitleInfo(FALSE, initial, i, sort_priority);
   }
@@ -766,8 +778,10 @@ static void InitializeTitleControls(boolean show_title_initial)
 {
   num_title_screens = 0;
 
+#if 0
   if (show_title_initial)
     InitializeTitleControls_CheckTitleInfo(TRUE);
+#endif
 
   InitializeTitleControls_CheckTitleInfo(FALSE);
 
@@ -1280,43 +1294,12 @@ void DrawMainMenuExt(int redraw_mask, boolean do_fading)
 {
   static LevelDirTree *leveldir_last_valid = NULL;
   boolean levelset_has_changed = FALSE;
-#if 0
-  boolean local_team_mode = (!options.network && setup.team_mode);
-  char *name_text = (local_team_mode ? "Team:" : "Name:");
-  int name_width, level_width;
-#endif
-#if 0
-  int i;
-#endif
-
-#if 0
-  /* !!! CHANGE THIS !!! */
-  title = title_default;
-#endif
-
-#if 0
-  {
-    int graphicA = element_info[EL_EM_DYNAMITE_ACTIVE].special_graphic[GFX_SPECIAL_ARG_EDITOR];
-    int graphicB = element_info[EL_EM_DYNAMITE_ACTIVE].special_graphic[GFX_SPECIAL_ARG_PANEL];
-    int graphic1 = element_info[EL_CONVEYOR_BELT_1_MIDDLE].special_graphic[GFX_SPECIAL_ARG_EDITOR];
-    int graphic2 = element_info[EL_CONVEYOR_BELT_1_MIDDLE_ACTIVE].special_graphic[GFX_SPECIAL_ARG_EDITOR];
-
-    printf("::: %d [%d] -> %d, %d [%d, %d]\n",
-          graphicA, graphicB,
-          graphic_info[graphicA].src_x,
-          graphic_info[graphicA].src_y,
-          graphic1, graphic2);
-  }
-#endif
-
-#if 0
-  printf("::: %d, %d\n", fading.anim_mode == ANIM_CROSSFADE,
-        redraw_mask == REDRAW_ALL);
-#endif
+  boolean redraw_all = FALSE;
 
   FadeSetLeaveScreen();
 
-#if 1
+  /* (does not work well when changing to editor, which fades out itself) */
+#if 0
   FadeOut(redraw_mask);
 #endif
 
@@ -1342,8 +1325,12 @@ void DrawMainMenuExt(int redraw_mask, boolean do_fading)
     return;
   }
 
+#if 0
+  FadeOut(redraw_mask);
+
   /* needed if last screen was the editor screen */
   UndrawSpecialEditorDoor();
+#endif
 
   /* needed if last screen was the setup screen and fullscreen state changed */
   ToggleFullscreenIfNeeded();
@@ -1361,34 +1348,27 @@ void DrawMainMenuExt(int redraw_mask, boolean do_fading)
   /* needed if last screen (level choice) changed graphics, sounds or music */
   ReloadCustomArtwork(0);
 
-#if defined(TARGET_SDL)
-  SetDrawtoField(DRAW_BACKBUFFER);
-#endif
+  if (redraw_mask & REDRAW_ALL)
+    redraw_all = TRUE;
 
+#if 1
 #if 0
-  if (levelset_has_changed)
-    fading = title_default;
+  printf("::: FadeOut @ DrawMainMenuExt ...\n");
+#endif
+  FadeOut(redraw_mask);
+#if 0
+  printf("::: FadeOut @ DrawMainMenuExt done\n");
 #endif
 
-#if 1
-  if (CheckTitleScreen(levelset_has_changed))
-  {
-    game_status = GAME_MODE_TITLE;
-
-    DrawTitleScreen();
-
-    return;
-  }
+  /* needed if last screen was the editor screen */
+  UndrawSpecialEditorDoor();
+#endif
 
-#else
+#if defined(TARGET_SDL)
+  SetDrawtoField(DRAW_BACKBUFFER);
+#endif
 
-  if (setup.show_titlescreen &&
-      ((levelset_has_changed &&
-       (graphic_info[IMG_TITLESCREEN_1].bitmap != NULL ||
-        getLevelSetMessageFilename(1, FALSE) != NULL)) ||
-       (show_title_initial &&
-       (graphic_info[IMG_TITLESCREEN_INITIAL_1].bitmap != NULL ||
-        getLevelSetMessageFilename(1, TRUE) != NULL))))
+  if (CheckTitleScreen(levelset_has_changed))
   {
     game_status = GAME_MODE_TITLE;
 
@@ -1396,7 +1376,6 @@ void DrawMainMenuExt(int redraw_mask, boolean do_fading)
 
     return;
   }
-#endif
 
   /* level_nr may have been set to value over handicap with level editor */
   if (setup.handicap && level_nr > leveldir_current->handicap_level)
@@ -1413,97 +1392,19 @@ void DrawMainMenuExt(int redraw_mask, boolean do_fading)
 #if 1
   if (redraw_mask == REDRAW_ALL)
   {
-#if 0
-    int door_state = GetDoorState();
-#endif
+    // 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
   InitializeMainControls();
 
-#if 1
   DrawCursorAndText_Main(-1, FALSE);
-#else
-  for (i = 0; main_controls[i].nr != -1; i++)
-  {
-    struct MenuPosInfo *pos_button = main_controls[i].pos_button;
-    struct MenuPosInfo *pos_text   = main_controls[i].pos_text;
-    struct MenuPosInfo *pos_input  = main_controls[i].pos_input;
-    char *text                     = main_controls[i].text;
-    char *input                    = main_controls[i].input;
-    int button_graphic             = main_controls[i].button_graphic;
-    int font_text                  = main_controls[i].font_text;
-    int font_input                 = main_controls[i].font_input;
-
-    if (pos_button != NULL)
-      DrawGraphicThruMaskExt(drawto, mSX + pos_button->x, mSY + pos_button->y,
-                            button_graphic, 0);
-
-    if (pos_text != NULL && text != NULL)
-      DrawText(mSX + pos_text->x, mSY + pos_text->y, text, font_text);
-
-    if (pos_input != NULL && input != NULL)
-      DrawText(mSX + pos_input->x, mSY + pos_input->y, input, font_input);
-  }
-#endif
-
-#else
-
-  DrawHeadline();
-
-  DrawText(mSX + 32, mSY + 2 * 32, name_text,       FONT_MENU_1);
-  DrawText(mSX + 32, mSY + 3 * 32, "Levelset",      FONT_MENU_1);
-  DrawText(mSX + 32, mSY + 4 * 32, "Hall Of Fame",  FONT_MENU_1);
-  DrawText(mSX + 32, mSY + 5 * 32, "Level Creator", FONT_MENU_1);
-  DrawText(mSX + 32, mSY + 6 * 32, "Info Screen",   FONT_MENU_1);
-  DrawText(mSX + 32, mSY + 7 * 32, "Start Game",    FONT_MENU_1);
-  DrawText(mSX + 32, mSY + 8 * 32, "Setup",         FONT_MENU_1);
-  DrawText(mSX + 32, mSY + 9 * 32, "Quit",          FONT_MENU_1);
-
-  /* calculated after (possible) reload of custom artwork */
-  name_width  = getTextWidth(name_text,  FONT_MENU_1);
-  level_width = 9 * 32;
-
-  DrawText(mSX + 32 + name_width, mSY + 2 * 32, setup.player_name,
-          FONT_INPUT_1);
-
-  DrawText(mSX + getCurrentLevelTextPos() * 32, mSY + 3 * 32,
-          int2str(level_nr, 3), FONT_VALUE_1);
-
-  {
-    int text_height = getFontHeight(FONT_TEXT_3);
-    int xpos = getLevelRangeTextPos() * 32 + 8;
-    int ypos2 = 3 * 32 + 16;
-    int ypos1 = ypos2 - text_height;
-
-    DrawTextF(mSX - SX + xpos, mSY - SY + ypos1, FONT_TEXT_3,
-             "%03d", leveldir_current->first_level);
-    DrawTextF(mSX - SX + xpos, mSY - SY + ypos2, FONT_TEXT_3,
-             "%03d", leveldir_current->last_level);
-  }
-
-  for (i = 0; i < 8; i++)
-    initCursor(i, (i == 1 || i == 4 || i == 6 ? IMG_MENU_BUTTON_ENTER_MENU :
-                  IMG_MENU_BUTTON));
-
-  DrawTextSCentered(326, FONT_TITLE_2, PROGRAM_GAME_BY_STRING);
-#endif
-
   DrawPreviewLevel(TRUE);
 
   HandleMainMenu(0, 0, 0, 0, MB_MENU_INITIALIZE);
@@ -1520,63 +1421,37 @@ 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);
 
+#if 0
   DrawMaskedBorder(REDRAW_ALL);
+#endif
 
 #if 1
   if (redraw_mask == REDRAW_ALL)
   {
     int door_state = GetDoorState();
 
+    // RedrawBackground();
+
     OpenDoor(door_state | DOOR_NO_DELAY | DOOR_FORCE_REDRAW);
   }
 #endif
 
-#if 0
- {
-   game_status = GAME_MODE_PSEUDO_PREVIEW;
-
-   DrawText(20, 400, "text_3.PREVIEW", FONT_TEXT_3);
-   DrawText(20, 420, "text_4.PREVIEW", FONT_TEXT_4);
-
-   game_status = GAME_MODE_MAIN;
+#if 1
+  DrawMaskedBorder(REDRAW_ALL);
+#endif
 
-   DrawText(20, 440, "text_3.MAIN", FONT_TEXT_3);
-   DrawText(20, 460, "text_4.MAIN", FONT_TEXT_4);
- }
+#if 0
+  if (redraw_all)
+    redraw_mask = REDRAW_ALL;
 #endif
 
-#if 1
   FadeIn(redraw_mask);
-#else
-#if 1
-  if (!do_fading)
-    BackToFront();
-  else if (fading.anim_mode == ANIM_CROSSFADE)
-    FadeCross(redraw_mask);
-  else
-    FadeIn(redraw_mask);
-#else
-  if (do_fading)
-    FadeIn(redraw_mask);
-  else
-    BackToFront();
-#endif
-#endif
 
-#if 1
   FadeSetEnterMenu();
-#else
-  fading = title_default;
-#endif
 
   SetMouseCursor(CURSOR_DEFAULT);
 
@@ -2369,6 +2244,7 @@ static void DrawInfoScreen_Main(int redraw_mask, boolean do_fading)
   if (redraw_mask == REDRAW_ALL)
   {
     RedrawBackground();
+
     OpenDoor(DOOR_CLOSE_1 | DOOR_CLOSE_2 | DOOR_NO_DELAY | DOOR_FORCE_REDRAW);
   }
 #endif
@@ -2380,14 +2256,12 @@ static void DrawInfoScreen_Main(int redraw_mask, boolean do_fading)
   info_info = info_info_main;
   num_info_info = 0;
 
+#if 1
+  for (i = 0; info_info[i].type != 0 && i < MAX_MENU_ENTRIES_ON_SCREEN; i++)
+#else
   for (i = 0; info_info[i].type != 0 && i < NUM_MENU_ENTRIES_ON_SCREEN; i++)
-  {
-#if 0
-    int xpos = MENU_SCREEN_START_XPOS;
-    int ypos = MENU_SCREEN_START_YPOS + i;
-    int font_nr = FONT_MENU_1;
 #endif
-
+  {
     if (info_info[i].type & (TYPE_ENTER_MENU|TYPE_ENTER_LIST))
       initCursor(i, IMG_MENU_BUTTON_ENTER_MENU);
     else if (info_info[i].type & (TYPE_LEAVE_MENU|TYPE_LEAVE_LIST))
@@ -2395,11 +2269,7 @@ static void DrawInfoScreen_Main(int redraw_mask, boolean do_fading)
     else if (info_info[i].type & ~TYPE_SKIP_ENTRY)
       initCursor(i, IMG_MENU_BUTTON);
 
-#if 1
     DrawCursorAndText_Info(i, FALSE);
-#else
-    DrawText(mSX + xpos * 32, mSY + ypos * 32, info_info[i].text, font_nr);
-#endif
 
     num_info_info++;
   }
@@ -2411,23 +2281,7 @@ static void DrawInfoScreen_Main(int redraw_mask, boolean do_fading)
 
   DrawMaskedBorder(redraw_mask);
 
-#if 1
   FadeIn(redraw_mask);
-#else
-#if 1
-  if (!do_fading)
-    BackToFront();
-  else if (fading.anim_mode == ANIM_CROSSFADE)
-    FadeCross(redraw_mask);
-  else
-    FadeIn(redraw_mask);
-#else
-  if (do_fading)
-    FadeIn(redraw_mask);
-  else
-    BackToFront();
-#endif
-#endif
 
   InitAnimation();
 }
@@ -2447,11 +2301,7 @@ void HandleInfoScreen_Main(int mx, int my, int dx, int dy, int button)
       choice++;
     choice_store[info_mode] = choice;
 
-#if 1
     DrawCursorAndText_Info(choice, TRUE);
-#else
-    drawCursor(choice, TRUE);
-#endif
 
     return;
   }
@@ -2508,13 +2358,8 @@ void HandleInfoScreen_Main(int mx, int my, int dx, int dy, int button)
       {
        PlaySound(SND_MENU_ITEM_ACTIVATING);
 
-#if 1
        DrawCursorAndText_Info(choice, FALSE);
        DrawCursorAndText_Info(y, TRUE);
-#else
-       drawCursor(choice, FALSE);
-       drawCursor(y, TRUE);
-#endif
 
        choice = choice_store[info_mode] = y;
       }
@@ -2537,21 +2382,13 @@ void HandleInfoScreen_Main(int mx, int my, int dx, int dy, int button)
 
 void DrawInfoScreen_NotAvailable(char *text_title, char *text_error)
 {
-#if 1
   int ystart1 = mSY - SY + 100;
   int ystart2 = mSY - SY + 150;
   int ybottom = mSY - SY + SYSIZE - 20;
-#else
-  int ystart1 = 100;
-  int ystart2 = 150;
-  int ybottom = SYSIZE - 20;
-#endif
 
   SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_LEVELSET);
 
-#if 1
   FadeOut(REDRAW_FIELD);
-#endif
 
   ClearWindow();
   DrawHeadline();
@@ -2562,9 +2399,7 @@ void DrawInfoScreen_NotAvailable(char *text_title, char *text_error)
   DrawTextSCentered(ybottom, FONT_TEXT_4,
                    "Press any key or button for info menu");
 
-#if 1
   FadeIn(REDRAW_FIELD);
-#endif
 }
 
 void DrawInfoScreen_HelpAnim(int start, int max_anims, boolean init)
@@ -2697,11 +2532,7 @@ static char *getHelpText(int element, int action, int direction)
 
 void DrawInfoScreen_HelpText(int element, int action, int direction, int ypos)
 {
-#if 1
   int font_nr = FONT_INFO_ELEMENTS;
-#else
-  int font_nr = FONT_LEVEL_NUMBER;
-#endif
   int font_width = getFontWidth(font_nr);
   int sx = mSX + MINI_TILEX + TILEX + MINI_TILEX;
   int sy = mSY + 65 + 2 * 32 + 1;
@@ -2729,14 +2560,9 @@ void DrawInfoScreen_HelpText(int element, int action, int direction, int ypos)
   if (strlen(text) <= max_chars_per_line)      /* only one line of text */
     sy += getFontHeight(font_nr) / 2;
 
-#if 1
   DrawTextBuffer(sx, sy + ypos * ystep, text, font_nr,
                 max_chars_per_line, -1, max_lines_per_text, -1,
                 TRUE, FALSE, FALSE);
-#else
-  DrawTextWrapped(sx, sy + ypos * ystep, text, font_nr,
-                 max_chars_per_line, max_lines_per_text);
-#endif
 }
 
 void DrawInfoScreen_TitleScreen()
@@ -2753,18 +2579,14 @@ void DrawInfoScreen_Elements()
 {
   SetMainBackgroundImageIfDefined(IMG_BACKGROUND_INFO_ELEMENTS);
 
-#if 1
   FadeOut(REDRAW_FIELD);
-#endif
 
   LoadHelpAnimInfo();
   LoadHelpTextInfo();
 
   HandleInfoScreen_Elements(MB_MENU_INITIALIZE);
 
-#if 1
   FadeIn(REDRAW_FIELD);
-#endif
 
   InitAnimation();
 }
@@ -2821,23 +2643,34 @@ void HandleInfoScreen_Elements(int button)
     {
       FadeSoundsAndMusic();
 
-#if 0
-      FadeOut(REDRAW_FIELD);
-#endif
-
       info_mode = INFO_MODE_MAIN;
       DrawAndFadeInInfoScreen(REDRAW_FIELD);
 
       return;
     }
 
+#if 1
+    if (page > 0)
+      FadeSetNextScreen();
+#endif
+
+#if 1
+    if (button != MB_MENU_INITIALIZE)
+      FadeOut(REDRAW_FIELD);
+#else
     if (button != MB_MENU_INITIALIZE)
       FadeCrossSaveBackbuffer();
+#endif
 
     DrawInfoScreen_HelpAnim(page * anims_per_page, num_anims, TRUE);
 
+#if 1
+    if (button != MB_MENU_INITIALIZE)
+      FadeIn(REDRAW_FIELD);
+#else
     if (button != MB_MENU_INITIALIZE)
       FadeCross(REDRAW_FIELD);
+#endif
   }
   else
   {
@@ -2925,10 +2758,6 @@ void HandleInfoScreen_Music(int button)
     {
       FadeSoundsAndMusic();
 
-#if 0
-      FadeOut(REDRAW_FIELD);
-#endif
-
       info_mode = INFO_MODE_MAIN;
       DrawAndFadeInInfoScreen(REDRAW_FIELD);
 
@@ -2937,8 +2766,18 @@ void HandleInfoScreen_Music(int button)
 
     FadeSoundsAndMusic();
 
+#if 1
+    if (list != music_file_info)
+      FadeSetNextScreen();
+#endif
+
+#if 1
+    if (button != MB_MENU_INITIALIZE)
+      FadeOut(REDRAW_FIELD);
+#else
     if (button != MB_MENU_INITIALIZE)
       FadeCrossSaveBackbuffer();
+#endif
 
     ClearWindow();
     DrawHeadline();
@@ -3002,24 +2841,26 @@ void HandleInfoScreen_Music(int button)
     DrawTextSCentered(ybottom, FONT_TEXT_4,
                      "Press any key or button for next page");
 
+#if 1
+    if (button != MB_MENU_INITIALIZE)
+      FadeIn(REDRAW_FIELD);
+#else
     if (button != MB_MENU_INITIALIZE)
       FadeCross(REDRAW_FIELD);
+#endif
   }
 
   if (list != NULL && list->is_sound && sound_info[list->music].loop)
     PlaySoundLoop(list->music);
 }
 
-static boolean DrawInfoScreen_CreditsScreen(int screen_nr)
+static void DrawInfoScreen_CreditsScreen(int screen_nr)
 {
   int ystart1 = mSY - SY + 100;
   int ystart2 = mSY - SY + 150;
   int ybottom = mSY - SY + SYSIZE - 20;
   int ystep = 30;
 
-  if (screen_nr > 8)
-    return FALSE;
-
   ClearWindow();
   DrawHeadline();
 
@@ -3174,17 +3015,9 @@ static boolean DrawInfoScreen_CreditsScreen(int screen_nr)
     DrawTextSCentered(ystart2 + 4 * ystep, FONT_TEXT_3,
                      "since 1995");
   }
-#if 0
-  else
-  {
-    return FALSE;
-  }
-#endif
 
   DrawTextSCentered(ybottom, FONT_TEXT_4,
                    "Press any key or button for next page");
-
-  return TRUE;
 }
 
 void DrawInfoScreen_Credits()
@@ -3207,14 +3040,16 @@ void DrawInfoScreen_Credits()
 void HandleInfoScreen_Credits(int button)
 {
   static int screen_nr = 0;
+  int num_screens = 9;
 
   if (button == MB_MENU_INITIALIZE)
   {
     screen_nr = 0;
 
-    DrawInfoScreen_CreditsScreen(screen_nr);
+    // DrawInfoScreen_CreditsScreen(screen_nr);
   }
-  else if (button == MB_MENU_LEAVE)
+
+  if (button == MB_MENU_LEAVE)
   {
     PlaySound(SND_MENU_ITEM_SELECTING);
 
@@ -3223,33 +3058,47 @@ void HandleInfoScreen_Credits(int button)
 
     return;
   }
-  else if (button == MB_MENU_CHOICE)
+  else if (button == MB_MENU_CHOICE || button == MB_MENU_INITIALIZE)
   {
-    boolean show_screen;
+    if (button != MB_MENU_INITIALIZE)
+    {
+      PlaySound(SND_MENU_ITEM_SELECTING);
 
-    PlaySound(SND_MENU_ITEM_SELECTING);
+      screen_nr++;
+    }
 
-    screen_nr++;
+    if (screen_nr >= num_screens)
+    {
+      FadeSoundsAndMusic();
 
-    FadeCrossSaveBackbuffer();
+      info_mode = INFO_MODE_MAIN;
+      DrawAndFadeInInfoScreen(REDRAW_FIELD);
 
-    show_screen = DrawInfoScreen_CreditsScreen(screen_nr);
-  
-    if (show_screen)
-    {
-      FadeCross(REDRAW_FIELD);
+      return;
     }
-    else
-    {
-      FadeSoundsAndMusic();
 
-#if 0
+#if 1
+    if (screen_nr > 0)
+      FadeSetNextScreen();
+#endif
+
+#if 1
+    if (button != MB_MENU_INITIALIZE)
       FadeOut(REDRAW_FIELD);
+#else
+    if (button != MB_MENU_INITIALIZE)
+      FadeCrossSaveBackbuffer();
 #endif
 
-      info_mode = INFO_MODE_MAIN;
-      DrawAndFadeInInfoScreen(REDRAW_FIELD);
-    }
+    DrawInfoScreen_CreditsScreen(screen_nr);
+
+#if 1
+    if (button != MB_MENU_INITIALIZE)
+      FadeIn(REDRAW_FIELD);
+#else
+    if (button != MB_MENU_INITIALIZE)
+      FadeCross(REDRAW_FIELD);
+#endif
   }
   else
   {
@@ -5091,13 +4940,26 @@ static void DrawCursorAndText_Setup(int pos, boolean active)
 
 static void DrawSetupScreen_Generic()
 {
+  boolean redraw_all = FALSE;
   char *title_string = NULL;
   int i;
 
   UnmapAllGadgets();
   CloseDoor(DOOR_CLOSE_2);
 
-#if 1
+  if (redraw_mask & REDRAW_ALL)
+    redraw_all = TRUE;
+
+#if 0
+  printf("::: %s\n", (redraw_mask & REDRAW_FIELD ? "REDRAW_FIELD" :
+                     redraw_mask & REDRAW_ALL ? "REDRAW_ALL" :
+                     int2str(0, redraw_mask)));
+#endif
+
+#if 0
+  /* !!! usually REDRAW_NONE => DOES NOT WORK (with fade) => CHECK THIS !!! */
+  FadeOut(redraw_mask);
+#else
   FadeOut(REDRAW_FIELD);
 #endif
 
@@ -5147,7 +5009,11 @@ static void DrawSetupScreen_Generic()
   DrawTextSCentered(mSY - SY + 16, FONT_TITLE_1, title_string);
 
   num_setup_info = 0;
+#if 1
+  for (i = 0; setup_info[i].type != 0 && i < MAX_MENU_ENTRIES_ON_SCREEN; i++)
+#else
   for (i = 0; setup_info[i].type != 0 && i < NUM_MENU_ENTRIES_ON_SCREEN; i++)
+#endif
   {
     void *value_ptr = setup_info[i].value;
 #if 1
@@ -5195,7 +5061,12 @@ static void DrawSetupScreen_Generic()
   HandleSetupScreen_Generic(0, 0, 0, 0, MB_MENU_INITIALIZE);
 #endif
 
+  if (redraw_all)
+    redraw_mask = REDRAW_ALL;
+
 #if 1
+  FadeIn(redraw_mask);
+#else
   FadeIn(REDRAW_FIELD);
 #endif
 
@@ -5342,7 +5213,21 @@ void DrawSetupScreen_Input()
   DrawTextSCentered(mSY - SY + 16, FONT_TITLE_1, "Setup Input");
 
 #if 1
+#if 1
+  DrawTextSCentered(SYSIZE - 20, FONT_TITLE_2,
+                   "Joysticks deactivated on this screen");
+#else
+  DrawTextSCentered(SYSIZE - 20, FONT_TEXT_4,
+                   "Joysticks deactivated on this screen");
+#endif
+#endif
+
+#if 1
+#if 1
+  for (i = 0; setup_info[i].type != 0 && i < MAX_MENU_ENTRIES_ON_SCREEN; i++)
+#else
   for (i = 0; setup_info[i].type != 0 && i < NUM_MENU_ENTRIES_ON_SCREEN; i++)
+#endif
   {
     if (setup_info[i].type & (TYPE_ENTER_MENU|TYPE_ENTER_LIST))
       initCursor(i, IMG_MENU_BUTTON_ENTER_MENU);
@@ -5367,9 +5252,15 @@ void DrawSetupScreen_Input()
 #if 0
   DeactivateJoystickForCalibration();
 #endif
+
+#if 0
 #if 1
+  DrawTextSCentered(SYSIZE - 20, FONT_TITLE_2,
+                   "Joysticks deactivated on this screen");
+#else
   DrawTextSCentered(SYSIZE - 20, FONT_TEXT_4,
                    "Joysticks deactivated on this screen");
+#endif
 #endif
 
   /* create gadgets for setup input menu screen */