public SelectGameMode ( string p_strRequestedGameMode, bool p_booChangeDefaultGameMode ) : IGameModeFactory | ||
p_strRequestedGameMode | string | The id of the game mode we want to select. |
p_booChangeDefaultGameMode | bool | Whether the users ahs requested a change to the default game mode. |
Результат | IGameModeFactory |
/// <summary> /// Runs the applications /// </summary> /// <remarks> /// This method makes sure the environment is sane. If so, it creates the required services /// and launches the main form. /// </remarks> /// <param name="p_strArgs">The command line arguments passed to the application.</param> /// <returns><c>true</c> if the application started as expected; /// <c>false</c> otherwise.</returns> public bool RunMainForm(string[] p_strArgs) { if (!SandboxCheck(m_eifEnvironmentInfo)) return false; SetCompressorPath(m_eifEnvironmentInfo); string strRequestedGameMode = null; string[] strArgs = p_strArgs; Uri uriModToAdd = null; if ((p_strArgs.Length > 0) && !p_strArgs[0].StartsWith("-")) { if (Uri.TryCreate(p_strArgs[0], UriKind.Absolute, out uriModToAdd) && uriModToAdd.Scheme.Equals("nxm", StringComparison.OrdinalIgnoreCase)) strRequestedGameMode = uriModToAdd.Host; } else for (Int32 i = 0; i < p_strArgs.Length; i++) { string strArg = p_strArgs[i]; if (strArg.StartsWith("-")) { switch (strArg) { case "-game": strRequestedGameMode = p_strArgs[i + 1]; Trace.Write("Game Specified On Command line: " + strRequestedGameMode + ") "); break; } } } bool booChangeDefaultGameMode = false; GameModeRegistry gmrSupportedGames = GetSupportedGameModes(); do { NexusFontSetResolver nfrResolver = SetUpFonts(); GameModeRegistry gmrInstalledGames = GetInstalledGameModes(gmrSupportedGames); if (gmrInstalledGames == null) { Trace.TraceInformation("No installed games."); MessageBox.Show(String.Format("No games were detected! {0} will now close.", m_eifEnvironmentInfo.Settings.ModManagerName), "No Games", MessageBoxButtons.OK, MessageBoxIcon.Error); return false; } GameModeSelector gmsSelector = new GameModeSelector(gmrSupportedGames, gmrInstalledGames, m_eifEnvironmentInfo); IGameModeFactory gmfGameModeFactory = gmsSelector.SelectGameMode(strRequestedGameMode, booChangeDefaultGameMode); if (gmsSelector.RescanRequested) { m_eifEnvironmentInfo.Settings.InstalledGamesDetected = false; m_eifEnvironmentInfo.Settings.Save(); booChangeDefaultGameMode = true; continue; } if (gmfGameModeFactory == null) return false; Trace.TraceInformation(String.Format("Game Mode Factory Selected: {0} ({1})", gmfGameModeFactory.GameModeDescriptor.Name, gmfGameModeFactory.GameModeDescriptor.ModeId)); Mutex mtxGameModeMutex = null; bool booOwnsMutex = false; try { for (Int32 intAttemptCount = 0; intAttemptCount < 3; intAttemptCount++) { Trace.TraceInformation("Creating Game Mode mutex (Attempt: {0})", intAttemptCount); mtxGameModeMutex = new Mutex(true, String.Format("{0}-{1}-GameModeMutex", m_eifEnvironmentInfo.Settings.ModManagerName, gmfGameModeFactory.GameModeDescriptor.ModeId), out booOwnsMutex); //If the mutex is owned, you are the first instance of the mod manager for game mode, so break out of loop. if (booOwnsMutex) break; try { //If the mutex isn't owned, attempt to talk across the messager. using (IMessager msgMessager = MessagerClient.GetMessager(m_eifEnvironmentInfo, gmfGameModeFactory.GameModeDescriptor)) { if (msgMessager != null) { //Messenger was created OK, send download request, or bring to front. if (uriModToAdd != null) { Trace.TraceInformation(String.Format("Messaging to add: {0}", uriModToAdd)); msgMessager.AddMod(uriModToAdd.ToString()); } else { Trace.TraceInformation(String.Format("Messaging to bring to front.")); msgMessager.BringToFront(); } return true; } } mtxGameModeMutex.Close(); mtxGameModeMutex = null; } catch (InvalidOperationException) { StringBuilder stbPromptMessage = new StringBuilder(); stbPromptMessage.AppendFormat("{0} was unable to start. It appears another instance of {0} is already running.", m_eifEnvironmentInfo.Settings.ModManagerName).AppendLine(); stbPromptMessage.AppendFormat("If you were trying to download multiple files, wait for {0} to start before clicking on a new file download.", m_eifEnvironmentInfo.Settings.ModManagerName).AppendLine(); MessageBox.Show(stbPromptMessage.ToString(), "Already running", MessageBoxButtons.OK, MessageBoxIcon.Information); return false; } //Messenger couldn't be created, so sleep for a few seconds to give time for opening // the running copy of the mod manager to start up/shut down Thread.Sleep(TimeSpan.FromSeconds(5.0d)); } if (!booOwnsMutex) { HeaderlessTextWriterTraceListener htlListener = (HeaderlessTextWriterTraceListener)Trace.Listeners["DefaultListener"]; htlListener.ChangeFilePath(Path.Combine(Path.GetDirectoryName(htlListener.FilePath), "Messager" + Path.GetFileName(htlListener.FilePath))); Trace.TraceInformation("THIS IS A MESSAGER TRACE LOG."); if (!htlListener.TraceIsForced) htlListener.SaveToFile(); StringBuilder stbPromptMessage = new StringBuilder(); stbPromptMessage.AppendFormat("{0} was unable to start. It appears another instance of {0} is already running.", m_eifEnvironmentInfo.Settings.ModManagerName).AppendLine(); stbPromptMessage.AppendLine("A Trace Log file was created at:"); stbPromptMessage.AppendLine(htlListener.FilePath); stbPromptMessage.AppendLine("Before reporting the issue, don't close this window and check for a fix here (you can close it afterwards):"); stbPromptMessage.AppendLine(NexusLinks.FAQs); stbPromptMessage.AppendLine("If you can't find a solution, please make a bug report and attach the TraceLog file here:"); stbPromptMessage.AppendLine(NexusLinks.Issues); MessageBox.Show(stbPromptMessage.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Information); return false; } //ApplicationInitializer ainInitializer = new ApplicationInitializer(m_eifEnvironmentInfo, nfrResolver); //ApplicationInitializationForm frmAppInitilizer = new ApplicationInitializationForm(ainInitializer); //ainInitializer.Initialize(gmfGameModeFactory, SynchronizationContext.Current); //frmAppInitilizer.ShowDialog(); ApplicationInitializer ainInitializer = null; ApplicationInitializationForm frmAppInitilizer = null; while ((ainInitializer == null) || (ainInitializer.Status == TaskStatus.Retrying)) { ainInitializer = new ApplicationInitializer(m_eifEnvironmentInfo, nfrResolver); frmAppInitilizer = new ApplicationInitializationForm(ainInitializer); ainInitializer.Initialize(gmfGameModeFactory, SynchronizationContext.Current); frmAppInitilizer.ShowDialog(); } if (ainInitializer.Status != TaskStatus.Complete) { if (ainInitializer.Status == TaskStatus.Error) return false; booChangeDefaultGameMode = true; DisposeServices(ainInitializer.Services); continue; } IGameMode gmdGameMode = ainInitializer.GameMode; ServiceManager svmServices = ainInitializer.Services; MainFormVM vmlMainForm = new MainFormVM(m_eifEnvironmentInfo, gmrInstalledGames, gmdGameMode, svmServices.ModRepository, svmServices.DownloadMonitor, svmServices.ActivateModsMonitor, svmServices.UpdateManager, svmServices.ModManager, svmServices.PluginManager); MainForm frmMain = new MainForm(vmlMainForm); using (IMessager msgMessager = MessagerServer.InitializeListener(m_eifEnvironmentInfo, gmdGameMode, svmServices.ModManager, frmMain)) { if (uriModToAdd != null) { Trace.TraceInformation("Adding mod: " + uriModToAdd.ToString()); msgMessager.AddMod(uriModToAdd.ToString()); uriModToAdd = null; } Trace.TraceInformation("Running Application."); try { Application.Run(frmMain); svmServices.ModInstallLog.Backup(); strRequestedGameMode = vmlMainForm.RequestedGameMode; booChangeDefaultGameMode = vmlMainForm.DefaultGameModeChangeRequested; } finally { DisposeServices(svmServices); gmdGameMode.Dispose(); } } } finally { if (mtxGameModeMutex != null) { if (booOwnsMutex) mtxGameModeMutex.ReleaseMutex(); mtxGameModeMutex.Close(); } FileUtil.ForceDelete(m_eifEnvironmentInfo.TemporaryPath); //Clean up created font's. FontManager.Dispose(); } } while (!String.IsNullOrEmpty(strRequestedGameMode) || booChangeDefaultGameMode); return true; }
/// <summary> /// Runs the applications /// </summary> /// <remarks> /// This method makes sure the environment is sane. If so, it creates the required services /// and launches the main form. /// </remarks> /// <param name="args">The command line arguments passed to the application.</param> /// <returns><c>true</c> if the application started as expected; /// <c>false</c> otherwise.</returns> public bool RunMainForm(string[] args) { if (!SandboxCheck(_environmentInfo)) { return(false); } SetCompressorPath(_environmentInfo); var deletedDll = CheckModScriptDLL(); string requestedGameMode = null; Uri modToAdd = null; if (args.Length > 0 && !args[0].StartsWith("-")) { if (Uri.TryCreate(args[0], UriKind.Absolute, out modToAdd) && modToAdd.Scheme.Equals("nxm", StringComparison.OrdinalIgnoreCase)) { requestedGameMode = DetermineRequestedGameMode(modToAdd.Host); } } else { for (var i = 0; i < args.Length; i++) { var strArg = args[i]; if (strArg == "-game") { requestedGameMode = args[i + 1]; Trace.Write("Game Specified On Command line: " + requestedGameMode + ") "); } } } var changeDefaultGameMode = false; var supportedGames = GetSupportedGameModes(); do { var fontSetResolver = SetUpFonts(); var installedGames = GetInstalledGameModes(supportedGames); if (installedGames == null) { Trace.TraceInformation("No installed games."); MessageBox.Show($"No games were detected! {_environmentInfo.Settings.ModManagerName} will now close.", "No Games", MessageBoxButtons.OK, MessageBoxIcon.Error); return(false); } CheckIfDefaultGameModeIsInstalled(installedGames); var selector = new GameModeSelector(supportedGames, installedGames, _environmentInfo); var gameModeFactory = selector.SelectGameMode(requestedGameMode, changeDefaultGameMode); if (selector.RescanRequested) { _environmentInfo.Settings.InstalledGamesDetected = false; _environmentInfo.Settings.Save(); changeDefaultGameMode = true; continue; } if (gameModeFactory == null) { return(false); } Trace.TraceInformation($"Game Mode Factory Selected: {gameModeFactory.GameModeDescriptor.Name} ({gameModeFactory.GameModeDescriptor.ModeId})"); Mutex gameModeMutex = null; var ownsMutex = false; try { for (var attemptCount = 0; attemptCount < 3; attemptCount++) { Trace.TraceInformation($"Creating Game Mode mutex (Attempt: {attemptCount})"); gameModeMutex = new Mutex(true, $"{_environmentInfo.Settings.ModManagerName}-{gameModeFactory.GameModeDescriptor.ModeId}-GameModeMutex", out ownsMutex); //If the mutex is owned, you are the first instance of the mod manager for game mode, so break out of loop. if (ownsMutex) { break; } try { //If the mutex isn't owned, attempt to talk across the messager. using (var messager = MessagerClient.GetMessager(_environmentInfo, gameModeFactory.GameModeDescriptor)) { if (messager != null) { //Messenger was created OK, send download request, or bring to front. if (modToAdd != null) { Trace.TraceInformation($"Messaging to add: {modToAdd}"); messager.AddMod(modToAdd.ToString()); } else { Trace.TraceInformation("Messaging to bring to front."); messager.BringToFront(); } return(true); } } gameModeMutex.Close(); gameModeMutex = null; } catch (InvalidOperationException) { var stbPromptMessage = new StringBuilder(); stbPromptMessage.AppendLine($"{_environmentInfo.Settings.ModManagerName} was unable to start. It appears another instance of {_environmentInfo.Settings.ModManagerName} is already running."); stbPromptMessage.AppendLine($"If you were trying to download multiple files, wait for {_environmentInfo.Settings.ModManagerName} to start before clicking on a new file download."); MessageBox.Show(stbPromptMessage.ToString(), "Already running", MessageBoxButtons.OK, MessageBoxIcon.Information); return(false); } //Messenger couldn't be created, so sleep for a few seconds to give time for opening // the running copy of the mod manager to start up/shut down Thread.Sleep(TimeSpan.FromSeconds(5.0d)); } if (!ownsMutex) { var htlListener = (HeaderlessTextWriterTraceListener)Trace.Listeners["DefaultListener"]; htlListener.ChangeFilePath(Path.Combine(Path.GetDirectoryName(htlListener.FilePath), "Messager" + Path.GetFileName(htlListener.FilePath))); Trace.TraceInformation("THIS IS A MESSAGER TRACE LOG."); if (!htlListener.TraceIsForced) { htlListener.SaveToFile(); } var stbPromptMessage = new StringBuilder(); stbPromptMessage.AppendLine($"{_environmentInfo.Settings.ModManagerName} was unable to start. It appears another instance of {_environmentInfo.Settings.ModManagerName} is already running."); stbPromptMessage.AppendLine("A Trace Log file was created at:"); stbPromptMessage.AppendLine(htlListener.FilePath); stbPromptMessage.AppendLine("Before reporting the issue, don't close this window and check for a fix here (you can close it afterwards):"); stbPromptMessage.AppendLine(NexusLinks.FAQs); stbPromptMessage.AppendLine("If you can't find a solution, please make a bug report and attach the TraceLog file here:"); stbPromptMessage.AppendLine(NexusLinks.Issues); MessageBox.Show(stbPromptMessage.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Information); return(false); } ApplicationInitializer appInitializer = null; while ((appInitializer == null) || (appInitializer.Status == TaskStatus.Retrying)) { appInitializer = new ApplicationInitializer(_environmentInfo, fontSetResolver, deletedDll); var appInitializerForm = new ApplicationInitializationForm(appInitializer); appInitializer.Initialize(gameModeFactory, SynchronizationContext.Current); appInitializerForm.ShowDialog(); } if (appInitializer.Status != TaskStatus.Complete) { if (appInitializer.Status == TaskStatus.Error) { return(false); } changeDefaultGameMode = true; DisposeServices(appInitializer.Services); continue; } var gameMode = appInitializer.GameMode; var services = appInitializer.Services; var mainFormViewModel = new MainFormVM(_environmentInfo, installedGames, gameMode, services.ModRepository, services.DownloadMonitor, services.ModActivationMonitor, services.ModManager, services.PluginManager); var mainForm = new MainForm(mainFormViewModel); using (var msgMessager = MessagerServer.InitializeListener(_environmentInfo, gameMode, services.ModManager, mainForm)) { if (modToAdd != null) { Trace.TraceInformation("Adding mod: " + modToAdd); msgMessager.AddMod(modToAdd.ToString()); modToAdd = null; } Trace.TraceInformation("Running Application."); try { Application.Run(mainForm); services.ModInstallLog.Backup(); requestedGameMode = mainFormViewModel.RequestedGameMode; changeDefaultGameMode = mainFormViewModel.DefaultGameModeChangeRequested; } finally { DisposeServices(services); gameMode.Dispose(); } } } finally { if (gameModeMutex != null) { if (ownsMutex) { gameModeMutex.ReleaseMutex(); } gameModeMutex.Close(); } FileUtil.ForceDelete(_environmentInfo.TemporaryPath); //Clean up created font's. FontManager.Dispose(); } } while (!string.IsNullOrEmpty(requestedGameMode) || changeDefaultGameMode); return(true); }
/// <summary> /// Runs the applications /// </summary> /// <remarks> /// This method makes sure the environment is sane. If so, it creates the required services /// and launches the main form. /// </remarks> /// <param name="p_strArgs">The command line arguments passed to the application.</param> /// <returns><c>true</c> if the application started as expected; /// <c>false</c> otherwise.</returns> public bool RunMainForm(string[] p_strArgs) { if (!SandboxCheck(m_eifEnvironmentInfo)) return false; SetCompressorPath(m_eifEnvironmentInfo); string strRequestedGameMode = null; string[] strArgs = p_strArgs; Uri uriModToAdd = null; if ((p_strArgs.Length > 0) && !p_strArgs[0].StartsWith("-")) { if (Uri.TryCreate(p_strArgs[0], UriKind.Absolute, out uriModToAdd) && uriModToAdd.Scheme.Equals("nxm", StringComparison.OrdinalIgnoreCase)) strRequestedGameMode = uriModToAdd.Host; } else for (Int32 i = 0; i < p_strArgs.Length; i++) { string strArg = p_strArgs[i]; if (strArg.StartsWith("-")) { switch (strArg) { case "-game": strRequestedGameMode = p_strArgs[i + 1]; Trace.Write("Game Specified On Command line: " + strRequestedGameMode + ") "); break; } } } bool booChangeDefaultGameMode = false; GameModeRegistry gmrSupportedGames = GetSupportedGameModes(); do { NexusFontSetResolver nfrResolver = SetUpFonts(); GameModeRegistry gmrInstalledGames = GetInstalledGameModes(gmrSupportedGames); if (gmrInstalledGames == null) { Trace.TraceInformation("No installed games."); MessageBox.Show(String.Format("No games were detected! {0} will now close.", m_eifEnvironmentInfo.Settings.ModManagerName), "No Games", MessageBoxButtons.OK, MessageBoxIcon.Error); return false; } GameModeSelector gmsSelector = new GameModeSelector(gmrSupportedGames, gmrInstalledGames, m_eifEnvironmentInfo); IGameModeFactory gmfGameModeFactory = gmsSelector.SelectGameMode(strRequestedGameMode, booChangeDefaultGameMode); if (gmsSelector.RescanRequested) { m_eifEnvironmentInfo.Settings.InstalledGamesDetected = false; m_eifEnvironmentInfo.Settings.Save(); booChangeDefaultGameMode = true; continue; } if (gmfGameModeFactory == null) return false; Trace.TraceInformation(String.Format("Game Mode Factory Selected: {0} ({1})", gmfGameModeFactory.GameModeDescriptor.Name, gmfGameModeFactory.GameModeDescriptor.ModeId)); Mutex mtxGameModeMutex = null; bool booOwnsMutex = false; try { for (Int32 intAttemptCount = 0; intAttemptCount < 3; intAttemptCount++) { Trace.TraceInformation("Creating Game Mode mutex (Attempt: {0})", intAttemptCount); mtxGameModeMutex = new Mutex(true, String.Format("{0}-{1}-GameModeMutex", m_eifEnvironmentInfo.Settings.ModManagerName, gmfGameModeFactory.GameModeDescriptor.ModeId), out booOwnsMutex); //If the mutex is owned, you are the first instance of the mod manager for game mode, so break out of loop. if (booOwnsMutex) break; try { //If the mutex isn't owned, attempt to talk across the messager. using (IMessager msgMessager = MessagerClient.GetMessager(m_eifEnvironmentInfo, gmfGameModeFactory.GameModeDescriptor)) { if (msgMessager != null) { //Messenger was created OK, send download request, or bring to front. if (uriModToAdd != null) { Trace.TraceInformation(String.Format("Messaging to add: {0}", uriModToAdd)); msgMessager.AddMod(uriModToAdd.ToString()); } else { Trace.TraceInformation(String.Format("Messaging to bring to front.")); msgMessager.BringToFront(); } return true; } } mtxGameModeMutex.Close(); mtxGameModeMutex = null; } catch (InvalidOperationException) { StringBuilder stbPromptMessage = new StringBuilder(); stbPromptMessage.AppendFormat("{0} was unable to start. It appears another instance of {0} is already running.", m_eifEnvironmentInfo.Settings.ModManagerName).AppendLine(); stbPromptMessage.AppendFormat("If you were trying to download multiple files, wait for {0} to start before clicking on a new file download.", m_eifEnvironmentInfo.Settings.ModManagerName).AppendLine(); MessageBox.Show(stbPromptMessage.ToString(), "Already running", MessageBoxButtons.OK, MessageBoxIcon.Information); return false; } //Messenger couldn't be created, so sleep for a few seconds to give time for opening // the running copy of the mod manager to start up/shut down Thread.Sleep(TimeSpan.FromSeconds(5.0d)); } if (!booOwnsMutex) { HeaderlessTextWriterTraceListener htlListener = (HeaderlessTextWriterTraceListener)Trace.Listeners["DefaultListener"]; htlListener.ChangeFilePath(Path.Combine(Path.GetDirectoryName(htlListener.FilePath), "Messager" + Path.GetFileName(htlListener.FilePath))); Trace.TraceInformation("THIS IS A MESSAGER TRACE LOG."); if (!htlListener.TraceIsForced) htlListener.SaveToFile(); StringBuilder stbPromptMessage = new StringBuilder(); stbPromptMessage.AppendFormat("{0} was unable to start. It appears another instance of {0} is already running.", m_eifEnvironmentInfo.Settings.ModManagerName).AppendLine(); stbPromptMessage.AppendLine("A Trace Log file was created at:"); stbPromptMessage.AppendLine(htlListener.FilePath); stbPromptMessage.AppendLine("Before reporting the issue, don't close this window and check for a fix here (you can close it afterwards):"); stbPromptMessage.AppendLine("http://forums.nexusmods.com/index.php?/topic/721054-read-here-first-nexus-mod-manager-frequent-issues/"); stbPromptMessage.AppendLine("If you can't find a solution, please make a bug report and attach the TraceLog file here:"); stbPromptMessage.AppendLine("http://forums.nexusmods.com/index.php?/tracker/project-3-mod-manager-open-beta/"); MessageBox.Show(stbPromptMessage.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Information); return false; } //ApplicationInitializer ainInitializer = new ApplicationInitializer(m_eifEnvironmentInfo, nfrResolver); //ApplicationInitializationForm frmAppInitilizer = new ApplicationInitializationForm(ainInitializer); //ainInitializer.Initialize(gmfGameModeFactory, SynchronizationContext.Current); //frmAppInitilizer.ShowDialog(); ApplicationInitializer ainInitializer = null; ApplicationInitializationForm frmAppInitilizer = null; while ((ainInitializer == null) || (ainInitializer.Status == TaskStatus.Retrying)) { ainInitializer = new ApplicationInitializer(m_eifEnvironmentInfo, nfrResolver); frmAppInitilizer = new ApplicationInitializationForm(ainInitializer); ainInitializer.Initialize(gmfGameModeFactory, SynchronizationContext.Current); frmAppInitilizer.ShowDialog(); } if (ainInitializer.Status != TaskStatus.Complete) { if (ainInitializer.Status == TaskStatus.Error) return false; booChangeDefaultGameMode = true; DisposeServices(ainInitializer.Services); continue; } IGameMode gmdGameMode = ainInitializer.GameMode; ServiceManager svmServices = ainInitializer.Services; MainFormVM vmlMainForm = new MainFormVM(m_eifEnvironmentInfo, gmrInstalledGames, gmdGameMode, svmServices.ModRepository, svmServices.DownloadMonitor, svmServices.ActivateModsMonitor, svmServices.UpdateManager, svmServices.ModManager, svmServices.PluginManager); MainForm frmMain = new MainForm(vmlMainForm); using (IMessager msgMessager = MessagerServer.InitializeListener(m_eifEnvironmentInfo, gmdGameMode, svmServices.ModManager, frmMain)) { if (uriModToAdd != null) { Trace.TraceInformation("Adding mod: " + uriModToAdd.ToString()); msgMessager.AddMod(uriModToAdd.ToString()); uriModToAdd = null; } Trace.TraceInformation("Running Application."); try { Application.Run(frmMain); svmServices.ModInstallLog.Backup(); strRequestedGameMode = vmlMainForm.RequestedGameMode; booChangeDefaultGameMode = vmlMainForm.DefaultGameModeChangeRequested; } finally { DisposeServices(svmServices); gmdGameMode.Dispose(); } } } finally { if (mtxGameModeMutex != null) { if (booOwnsMutex) mtxGameModeMutex.ReleaseMutex(); mtxGameModeMutex.Close(); } FileUtil.ForceDelete(m_eifEnvironmentInfo.TemporaryPath); //Clean up created font's. FontManager.Dispose(); } } while (!String.IsNullOrEmpty(strRequestedGameMode) || booChangeDefaultGameMode); return true; }