From 66b67391c88332e94ccd0439280fdc926b97d69e Mon Sep 17 00:00:00 2001
From: jsalmon3 <>
Date: Wed, 7 Aug 2002 03:37:36 +0000
Subject: [PATCH] Fixed bug #577066: Restart loses custom settings

---
 doc/ChangeLog.html     |  1 +
 src/game/game.cpp      | 15 +++++++++++++++
 src/include/settings.h |  2 ++
 src/ui/menus.cpp       |  8 ++++++++
 4 files changed, 26 insertions(+)

diff --git a/doc/ChangeLog.html b/doc/ChangeLog.html
index bd36dd03f..f4ccc2bb2 100644
--- a/doc/ChangeLog.html
+++ b/doc/ChangeLog.html
@@ -930,6 +930,7 @@
     <LI>Added initial support for game replay (from Jimmy Salmon).
     <LI>Fixed bug #536262: Oil icon changes colors (from Jimmy Salmon).
     <LI>Fixed bug #587638: Transports can carry ships (from Jimmy Salmon).
+    <LI>Fixed bug #577066: Restart loses custom settings (from Jimmy Salmon).
     <LI>+++
     </UL>
 </UL>
diff --git a/src/game/game.cpp b/src/game/game.cpp
index d63eb95e5..415e2cd4d 100644
--- a/src/game/game.cpp
+++ b/src/game/game.cpp
@@ -152,6 +152,9 @@ local void LoadMap(const char* filename,WorldMap* map)
 --	Game creation
 ----------------------------------------------------------------------------*/
 
+/**
+**	Free for all
+*/
 local void GameTypeFreeForAll(void)
 {
     int i;
@@ -166,6 +169,9 @@ local void GameTypeFreeForAll(void)
     }
 }
 
+/**
+**	Top vs Bottom
+*/
 local void GameTypeTopVsBottom(void)
 {
     int i;
@@ -189,6 +195,9 @@ local void GameTypeTopVsBottom(void)
     }
 }
 
+/**
+**	Left vs Right
+*/
 local void GameTypeLeftVsRight(void)
 {
     int i;
@@ -484,6 +493,12 @@ global void InitSettings(void)
 {
     int i;
 
+    if (RestartScenario) {
+	TheMap.NoFogOfWar = GameSettings.NoFogOfWar;
+	FlagRevealMap = GameSettings.RevealMap;
+	return;
+    }
+
     for (i = 0; i < PlayerMax; i++) {
 	GameSettings.Presets[i].Race = SettingsPresetMapDefault;
 	GameSettings.Presets[i].Team = SettingsPresetMapDefault;
diff --git a/src/include/settings.h b/src/include/settings.h
index 897a2dbce..fa9e2e80c 100644
--- a/src/include/settings.h
+++ b/src/include/settings.h
@@ -68,6 +68,8 @@ struct _settings_ {
     unsigned	Opponents;		/// Preset # of ai-opponents
     unsigned	Terrain;		/// Terrain type (summer,winter,...)
     unsigned	GameType;		/// Game type (melee, free for all,...)
+    unsigned	NoFogOfWar;		/// No fog of war
+    unsigned	RevealMap;		/// Reveal map
 };
 
 #define SettingsPresetMapDefault	(~0ul)	/// Special: Use pud/cm supplied
diff --git a/src/ui/menus.cpp b/src/ui/menus.cpp
index cc8b00789..cfb30e711 100644
--- a/src/ui/menus.cpp
+++ b/src/ui/menus.cpp
@@ -3780,18 +3780,26 @@ local void MultiGameFWSAction(Menuitem *mi, int i)
 	    case 0:
 		TheMap.NoFogOfWar = 0;
 		FlagRevealMap = 0;
+		GameSettings.NoFogOfWar = 0;
+		GameSettings.RevealMap = 0;
 		break;
 	    case 1:
 		TheMap.NoFogOfWar = 1;
 		FlagRevealMap = 0;
+		GameSettings.NoFogOfWar = 1;
+		GameSettings.RevealMap = 0;
 		break;
 	    case 2:
 		TheMap.NoFogOfWar = 0;
 		FlagRevealMap = 1;
+		GameSettings.NoFogOfWar = 0;
+		GameSettings.RevealMap = 1;
 		break;
 	    case 3:
 		TheMap.NoFogOfWar = 1;
 		FlagRevealMap = 1;
+		GameSettings.NoFogOfWar = 1;
+		GameSettings.RevealMap = 1;
 		break;
 	}
 	ServerSetupState.FwsOpt = i;