Provides information required for the programme to manage Gamebryo based game plugins and mods.
Inheritance: GameModeBase
        /// <summary>
        /// Builds the game mode.
        /// </summary>
        /// <param name="p_futFileUtility">The file utility class to be used by the game mode.</param>
        /// <param name="p_imsWarning">The resultant warning resultant from the creation of the game mode.
        /// <c>null</c> if there are no warnings.</param>
        /// <returns>The game mode.</returns>
        public IGameMode BuildGameMode(FileUtil p_futFileUtility, out ViewMessage p_imsWarning)
        {
            if (EnvironmentInfo.Settings.CustomGameModeSettings[GameModeDescriptor.ModeId] == null)
            {
                EnvironmentInfo.Settings.CustomGameModeSettings[GameModeDescriptor.ModeId] = new PerGameModeSettings <object>();
            }
            if (!EnvironmentInfo.Settings.CustomGameModeSettings[GameModeDescriptor.ModeId].ContainsKey("AskAboutReadOnlySettingsFiles"))
            {
                EnvironmentInfo.Settings.CustomGameModeSettings[GameModeDescriptor.ModeId]["AskAboutReadOnlySettingsFiles"] = true;
                EnvironmentInfo.Settings.CustomGameModeSettings[GameModeDescriptor.ModeId]["UnReadOnlySettingsFiles"]       = true;
                EnvironmentInfo.Settings.Save();
            }

            /*if (File.Exists("FO3Edit.exe"))
             *      m_lstTools.Add(new Command<MainForm>("FO3Edit", "Launches FO3Edit, if it is installed.", LaunchFO3Edit));
             * m_lstTools.Add(new CheckedCommand<MainForm>("Archive Invalidation", "Toggles Archive Invalidation.", Fallout3.Tools.ArchiveInvalidation.IsActive(), ToggleArchiveInvalidation));
             */

            GamebryoGameModeBase gmdGameMode = InstantiateGameMode(p_futFileUtility);

            if (!File.Exists(((GamebryoGameModeBase)gmdGameMode).SettingsFiles.IniPath))
            {
                p_imsWarning = new ViewMessage(String.Format("You have no {0} INI file. Please run {0} to initialize the file before installing any mods or turning on Archive Invalidation.", gmdGameMode.Name), null, "Missing INI", MessageBoxIcon.Warning);
            }
            else
            {
                p_imsWarning = null;
            }

            return(gmdGameMode);
        }
        /// <summary>
        /// Builds the game mode.
        /// </summary>
        /// <param name="p_futFileUtility">The file utility class to be used by the game mode.</param>
        /// <param name="p_imsWarning">The resultant warning resultant from the creation of the game mode.
        /// <c>null</c> if there are no warnings.</param>
        /// <returns>The game mode.</returns>
        public IGameMode BuildGameMode(FileUtil p_futFileUtility, out ViewMessage p_imsWarning)
        {
            GamebryoGameModeBase gmdGameMode = null;

            if (EnvironmentInfo.Settings.CustomGameModeSettings[GameModeDescriptor.ModeId] == null)
            {
                EnvironmentInfo.Settings.CustomGameModeSettings[GameModeDescriptor.ModeId] = new PerGameModeSettings <object>();
            }
            if (!EnvironmentInfo.Settings.CustomGameModeSettings[GameModeDescriptor.ModeId].ContainsKey("AskAboutReadOnlySettingsFiles"))
            {
                EnvironmentInfo.Settings.CustomGameModeSettings[GameModeDescriptor.ModeId]["AskAboutReadOnlySettingsFiles"] = true;
                EnvironmentInfo.Settings.CustomGameModeSettings[GameModeDescriptor.ModeId]["UnReadOnlySettingsFiles"]       = true;
                EnvironmentInfo.Settings.Save();
            }

            try
            {
                gmdGameMode = InstantiateGameMode(p_futFileUtility);

                if (!File.Exists(((GamebryoGameModeBase)gmdGameMode).SettingsFiles.IniPath))
                {
                    // Skyrim VR doesn't create this file automatically.
                    if (gmdGameMode.ModeId.Equals("SkyrimVR", StringComparison.OrdinalIgnoreCase))
                    {
                        File.Create(gmdGameMode.SettingsFiles.IniPath);
                        p_imsWarning = null;
                    }
                    else
                    {
                        p_imsWarning = new ViewMessage(String.Format("You have no {0} INI file. Please run {0} to initialize the file before installing any mods or turning on Archive Invalidation.", gmdGameMode.Name), null, "Missing INI", MessageBoxIcon.Warning);
                    }
                }
                else
                {
                    p_imsWarning = null;
                }
            }
            catch (SorterException e)
            {
                gmdGameMode  = null;
                p_imsWarning = new ViewMessage(String.Format(e.Message), null, "SorterException", MessageBoxIcon.Error);
            }
            catch (FileNotFoundException e)
            {
                gmdGameMode  = null;
                p_imsWarning = new ViewMessage(string.Format(e.Message), null, "FileNotFoundException", MessageBoxIcon.Error);
            }

            return(gmdGameMode);
        }