added connecting to network server from setup menu without program restart
[rocksndiamonds.git] / src / screens.c
index 9906b6441289415c54f5fb38c6af82f5bbf2be32..54e27e311f8c4d0f086cb4a1e7207f2eaf291207 100644 (file)
@@ -2073,7 +2073,7 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button)
 
        SetGameStatus(GAME_MODE_SCORES);
 
-       DrawHallOfFame(-1);
+       DrawHallOfFame(level_nr, -1);
       }
       else if (pos == MAIN_CONTROL_EDITOR)
       {
@@ -4498,7 +4498,7 @@ void HandleChooseLevelNr(int mx, int my, int dx, int dy, int button)
   HandleChooseTree(mx, my, dx, dy, button, &level_number_current);
 }
 
-void DrawHallOfFame(int highlight_position)
+void DrawHallOfFame(int level_nr, int highlight_position)
 {
   int fade_mask = REDRAW_FIELD;
 
@@ -4619,25 +4619,23 @@ void HandleHallOfFame(int mx, int my, int dx, int dy, int button)
       drawHallOfFameList(first_entry, highlight_position);
     }
   }
-  else if (button == MB_MENU_LEAVE)
+  else if (button == MB_MENU_LEAVE || button == MB_MENU_CHOICE)
   {
     PlaySound(SND_MENU_ITEM_SELECTING);
 
     FadeSound(SND_BACKGROUND_SCORES);
 
-    SetGameStatus(GAME_MODE_MAIN);
-
-    DrawMainMenu();
-  }
-  else if (button == MB_MENU_CHOICE)
-  {
-    PlaySound(SND_MENU_ITEM_SELECTING);
-
-    FadeSound(SND_BACKGROUND_SCORES);
-
-    SetGameStatus(GAME_MODE_MAIN);
+    if (game_status_last_screen != GAME_MODE_PLAYING ||
+       !setup.auto_play_next_level || !setup.increment_levels)
+    {
+      SetGameStatus(GAME_MODE_MAIN);
 
-    DrawMainMenu();
+      DrawMainMenu();
+    }
+    else
+    {
+      StartGameActions(network.enabled, setup.autorecord, level.random_seed);
+    }
   }
 
   if (game_status == GAME_MODE_SCORES)
@@ -5888,6 +5886,8 @@ static struct TokenInfo setup_info_game[] =
   { TYPE_SWITCH,       &setup.handicap,        "Handicap:"             },
   { TYPE_SWITCH,       &setup.skip_levels,     "Skip Unsolved Levels:" },
   { TYPE_SWITCH,       &setup.increment_levels,"Increment Solved Levels:" },
+  { TYPE_SWITCH,       &setup.auto_play_next_level,"Auto-play Next Level:" },
+  { TYPE_SWITCH,       &setup.skip_scores_after_game,"Skip Scores After Game:" },
   { TYPE_SWITCH,       &setup.autorecord,      "Auto-Record Tapes:"    },
   { TYPE_ENTER_LIST,   execSetupChooseGameSpeed, "Game Speed:"         },
   { TYPE_STRING,       &game_speed_text,       ""                      },
@@ -6447,7 +6447,27 @@ static void changeSetupValue(int screen_pos, int setup_info_pos_raw, int dx)
   if (si->value == &setup.network_mode &&
       setup.network_mode &&
       !network.enabled)
-    Request("Please restart game to enable network games!", REQ_CONFIRM);
+  {
+    network.enabled = TRUE;
+
+    SetGameStatus(GAME_MODE_LOADING);
+    SetDrawBackgroundMask(REDRAW_NONE);
+
+    FadeOut(REDRAW_ALL);
+
+    ClearRectangle(drawto, 0, 0, WIN_XSIZE, WIN_YSIZE);
+
+    FadeIn(REDRAW_ALL);
+
+    InitNetworkServer();
+
+    SetGameStatus(GAME_MODE_SETUP);
+    SetDrawBackgroundMask(REDRAW_FIELD);
+
+    redraw_mask = REDRAW_ALL;
+
+    DrawSetupScreen();
+  }
 }
 
 static struct TokenInfo *getSetupInfoFinal(struct TokenInfo *setup_info_orig)