/// <summary> /// Saves a Sonic Heroes configuration file based off of the Sonic_Heroes_Configuration_File struct. /// </summary> public static void Save_Configuration_File(Sonic_Heroes_Configuration_File ConfigFile) { string ConfigFilePath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\SEGA\SONICHEROES\sonic_h.ini"; System.IO.StreamWriter INIConfigFile = new System.IO.StreamWriter(ConfigFilePath); string PadControls1 = ""; foreach (byte PadButton in ConfigFile.ControllerOne) { PadControls1 = PadControls1 + " " + PadButton; } string PadControls2 = ""; foreach (byte PadButton in ConfigFile.ControllerTwo) { PadControls2 = PadControls2 + " " + PadButton; } string MouseControls = ""; foreach (byte MouseButton in ConfigFile.MouseControls) { MouseControls = MouseControls + " " + MouseButton; } INIConfigFile.WriteLine("Frame_Rate " + ConfigFile.FrameRate); INIConfigFile.WriteLine("Free_Camera " + ConfigFile.FreeCamera); INIConfigFile.WriteLine("Fog " + ConfigFile.FogEmulation); INIConfigFile.WriteLine("Clip_Range " + ConfigFile.ClipRange); INIConfigFile.WriteLine("Anisotoropic " + ConfigFile.AnisotropicFiltering); INIConfigFile.WriteLine("Pad_Assign1" + PadControls1); INIConfigFile.WriteLine("Pad_Assign2" + PadControls2); INIConfigFile.WriteLine("Mouse_Assign" + MouseControls); INIConfigFile.WriteLine("Screen_Size_Selection 0"); INIConfigFile.WriteLine("Screen_Full " + ConfigFile.FullScreen); INIConfigFile.WriteLine("Language " + ConfigFile.Language); INIConfigFile.WriteLine("3D_Sound " + ConfigFile.SurroundSound); INIConfigFile.WriteLine("SE_Volume " + ConfigFile.SFXVolume); INIConfigFile.WriteLine("SE_On " + ConfigFile.SFXToggle); INIConfigFile.WriteLine("BGM_Volume " + ConfigFile.BGMVolume); INIConfigFile.WriteLine("BGM_On " + ConfigFile.BGMToggle); INIConfigFile.WriteLine("Cheap_Shadow " + ConfigFile.SoftShadows); INIConfigFile.WriteLine("Mouse_Control_Type " + ConfigFile.MouseControlType); INIConfigFile.Dispose(); }
/// <summary> /// Loads the Sonic Heroes Configuration File, returns under the custom struct defined in the same file. /// </summary> public static Sonic_Heroes_Configuration_File Load_Configuration_File() { Sonic_Heroes_Configuration_File ConfigFile = new Sonic_Heroes_Configuration_File(); string ConfigFilePath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\SEGA\SONICHEROES\sonic_h.ini"; try { string CurrentLine; System.IO.StreamReader INIConfigFile = new System.IO.StreamReader(ConfigFilePath); // Initialize size of struct arrays; ConfigFile.ControllerOne = new byte[8]; ConfigFile.ControllerTwo = new byte[8]; ConfigFile.MouseControls = new byte[8]; while ((CurrentLine = INIConfigFile.ReadLine()) != null) { if (CurrentLine.StartsWith("Frame_Rate")) { ConfigFile.FrameRate = byte.Parse(CurrentLine.Substring(CurrentLine.LastIndexOf(" ") + 1)); } else if (CurrentLine.StartsWith("Free_Camera")) { ConfigFile.FreeCamera = byte.Parse(CurrentLine.Substring(CurrentLine.LastIndexOf(" ") + 1)); } else if (CurrentLine.StartsWith("Fog")) { ConfigFile.FogEmulation = byte.Parse(CurrentLine.Substring(CurrentLine.LastIndexOf(" ") + 1)); } else if (CurrentLine.StartsWith("Clip_Range")) { ConfigFile.ClipRange = byte.Parse(CurrentLine.Substring(CurrentLine.LastIndexOf(" ") + 1)); } else if (CurrentLine.StartsWith("Anisotoropic")) { ConfigFile.AnisotropicFiltering = byte.Parse(CurrentLine.Substring(CurrentLine.LastIndexOf(" ") + 1)); } else if (CurrentLine.StartsWith("Pad_Assign1")) { ReadStringByteArray(CurrentLine.Substring(CurrentLine.IndexOf(" ") + 1), ConfigFile.ControllerOne); } else if (CurrentLine.StartsWith("Pad_Assign2")) { ReadStringByteArray(CurrentLine.Substring(CurrentLine.IndexOf(" ") + 1), ConfigFile.ControllerTwo); } else if (CurrentLine.StartsWith("Mouse_Assign")) { ReadStringByteArray(CurrentLine.Substring(CurrentLine.IndexOf(" ") + 1), ConfigFile.MouseControls); } else if (CurrentLine.StartsWith("Screen_Size_Selection")) { ConfigFile.Screensize = byte.Parse(CurrentLine.Substring(CurrentLine.LastIndexOf(" ") + 1)); } else if (CurrentLine.StartsWith("Screen_Full")) { ConfigFile.FullScreen = byte.Parse(CurrentLine.Substring(CurrentLine.LastIndexOf(" ") + 1)); } else if (CurrentLine.StartsWith("Language")) { ConfigFile.Language = byte.Parse(CurrentLine.Substring(CurrentLine.LastIndexOf(" ") + 1)); } else if (CurrentLine.StartsWith("3D_Sound")) { ConfigFile.SurroundSound = byte.Parse(CurrentLine.Substring(CurrentLine.LastIndexOf(" ") + 1)); } else if (CurrentLine.StartsWith("SE_Volume")) { ConfigFile.SFXVolume = byte.Parse(CurrentLine.Substring(CurrentLine.LastIndexOf(" ") + 1)); } else if (CurrentLine.StartsWith("SE_On")) { ConfigFile.SFXToggle = byte.Parse(CurrentLine.Substring(CurrentLine.LastIndexOf(" ") + 1)); } else if (CurrentLine.StartsWith("BGM_Volume")) { ConfigFile.BGMVolume = byte.Parse(CurrentLine.Substring(CurrentLine.LastIndexOf(" ") + 1)); } else if (CurrentLine.StartsWith("BGM_On")) { ConfigFile.BGMToggle = byte.Parse(CurrentLine.Substring(CurrentLine.LastIndexOf(" ") + 1)); } else if (CurrentLine.StartsWith("Cheap_Shadow")) { ConfigFile.SoftShadows = byte.Parse(CurrentLine.Substring(CurrentLine.LastIndexOf(" ") + 1)); } else if (CurrentLine.StartsWith("Mouse_Control_Type")) { ConfigFile.MouseControlType = byte.Parse(CurrentLine.Substring(CurrentLine.LastIndexOf(" ") + 1)); } } INIConfigFile.Dispose(); return(ConfigFile); } catch (Exception) { // If the game is not Sonic Heroes or a config file is missing, set a default file into memory undefined defaults. MessageBox.Show("Could not find the Sonic Heroes configuration ini. The settings in the mod loader have been replaced with the defaults."); return(ConfigFile); } }