mirror of
https://github.com/argonlefou/TSR_Loader.git
synced 2024-11-28 00:10:49 +01:00
375 lines
17 KiB
C#
375 lines
17 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Runtime.InteropServices;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
|
|
namespace Transformers2_Configurator
|
|
{
|
|
public partial class WndMain : Form
|
|
{
|
|
#region WIN32
|
|
|
|
[DllImport("user32.dll")]
|
|
public static extern bool EnumDisplaySettings(
|
|
string deviceName, int modeNum, ref DEVMODE devMode);
|
|
const int ENUM_CURRENT_SETTINGS = -1;
|
|
|
|
const int ENUM_REGISTRY_SETTINGS = -2;
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct DEVMODE
|
|
{
|
|
|
|
private const int CCHDEVICENAME = 0x20;
|
|
private const int CCHFORMNAME = 0x20;
|
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 0x20)]
|
|
public string dmDeviceName;
|
|
public short dmSpecVersion;
|
|
public short dmDriverVersion;
|
|
public short dmSize;
|
|
public short dmDriverExtra;
|
|
public int dmFields;
|
|
public int dmPositionX;
|
|
public int dmPositionY;
|
|
public ScreenOrientation dmDisplayOrientation;
|
|
public int dmDisplayFixedOutput;
|
|
public short dmColor;
|
|
public short dmDuplex;
|
|
public short dmYResolution;
|
|
public short dmTTOption;
|
|
public short dmCollate;
|
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 0x20)]
|
|
public string dmFormName;
|
|
public short dmLogPixels;
|
|
public int dmBitsPerPel;
|
|
public int dmPelsWidth;
|
|
public int dmPelsHeight;
|
|
public int dmDisplayFlags;
|
|
public int dmDisplayFrequency;
|
|
public int dmICMMethod;
|
|
public int dmICMIntent;
|
|
public int dmMediaType;
|
|
public int dmDitherType;
|
|
public int dmReserved1;
|
|
public int dmReserved2;
|
|
public int dmPanningWidth;
|
|
public int dmPanningHeight;
|
|
|
|
}
|
|
|
|
#endregion
|
|
|
|
private const string GAMESETTINGS_INI_PATH = @"..\ShellData\GameSettings.ini";
|
|
private const string SHELLDATA_INI_PATH =@"..\ShellData\ShellData.ini";
|
|
private const string LAUNCHER_INI_PATH = @".\Transformers2_Launcher.ini";
|
|
private INIFile _GameSettings_IniFile;
|
|
private INIFile _ShellData_IniFile;
|
|
private INIFile _Launcher_IniFile;
|
|
|
|
public WndMain()
|
|
{
|
|
InitializeComponent();
|
|
this.Text = "Transformers Shadow Rising - System Menu v" + System.Reflection.Assembly.GetEntryAssembly().GetName().Version.ToString();
|
|
_GameSettings_IniFile = new INIFile(GAMESETTINGS_INI_PATH);
|
|
_ShellData_IniFile = new INIFile(SHELLDATA_INI_PATH);
|
|
_Launcher_IniFile = new INIFile(LAUNCHER_INI_PATH);
|
|
|
|
ListAvailableScreenResolutions();
|
|
}
|
|
|
|
#region Resolution Listing
|
|
|
|
private void ListAvailableScreenResolutions()
|
|
{
|
|
DEVMODE vDevMode = new DEVMODE();
|
|
int i = 0;
|
|
while (EnumDisplaySettings(null, i, ref vDevMode))
|
|
{
|
|
string res = vDevMode.dmPelsWidth + "x" + vDevMode.dmPelsHeight;
|
|
if (!CheckIfResolutionAlreadyExists(res))
|
|
Cbox_Resolution.Items.Add(res);
|
|
i++;
|
|
}
|
|
}
|
|
|
|
private bool CheckIfResolutionAlreadyExists(string Resolution)
|
|
{
|
|
for (int i = 0; i < Cbox_Resolution.Items.Count; i++)
|
|
{
|
|
if (Cbox_Resolution.Items[i].ToString().Equals(Resolution))
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
#endregion
|
|
|
|
private void WndMain_Load(object sender, EventArgs e)
|
|
{
|
|
DisplayDefaultValues();
|
|
|
|
if (File.Exists(_GameSettings_IniFile.FInfo.FullName))
|
|
{
|
|
DisplayGameSettings();
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show("TEST MENU config file not found :\n\n" + _GameSettings_IniFile.FInfo.FullName, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
}
|
|
|
|
if (File.Exists(_ShellData_IniFile.FInfo.FullName))
|
|
{
|
|
DisplayShellSettings();
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show("SHELL config file not found :\n\n" + _ShellData_IniFile.FInfo.FullName, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
}
|
|
|
|
if (File.Exists(_Launcher_IniFile.FInfo.FullName))
|
|
{
|
|
DisplayLauncherSettings();
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show("LAUNCHER config file not found :\n\n" + _Launcher_IniFile.FInfo.FullName, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
}
|
|
}
|
|
|
|
private void DisplayDefaultValues()
|
|
{
|
|
DisplayComboBoxValue(Cbox_Language, Cbox_Language.Items[0].ToString());
|
|
DisplayComboBoxValue(Cbox_Difficulty, Cbox_Difficulty.Items[2].ToString());
|
|
DisplayComboBoxValue(Cbox_Advertise, Cbox_Advertise.Items[0].ToString());
|
|
DisplayComboBoxValue(Cbox_Revival, Cbox_Revival.Items[0].ToString());
|
|
DisplayComboBoxValue(Cbox_P1Recoil, Cbox_P1Recoil.Items[1].ToString());
|
|
DisplayComboBoxValue(Cbox_P2Recoil, Cbox_P2Recoil.Items[1].ToString());
|
|
DisplayComboBoxValue(Cbox_ContinueCountdown, Cbox_ContinueCountdown.Items[1].ToString());
|
|
DisplayComboBoxValue(Cbox_EnnemyBoost, Cbox_EnnemyBoost.Items[0].ToString());
|
|
DisplayComboBoxValue(Cbox_FirstMn, Cbox_FirstMn.Items[0].ToString());
|
|
DisplayComboBoxValue(Cbox_KidsMode, Cbox_KidsMode.Items[0].ToString());
|
|
DisplayComboBoxValue(Cbox_StageSelect, Cbox_StageSelect.Items[1].ToString());
|
|
DisplayComboBoxValue(Cbox_EnglishSubtitles, Cbox_EnglishSubtitles.Items[1].ToString());
|
|
DisplayComboBoxValue(Cbox_Swipe, Cbox_Swipe.Items[0].ToString());
|
|
Cbox_FreePlay.Text = Cbox_FreePlay.Items[1].ToString();
|
|
Cbox_EntryType.Text = Cbox_EntryType.Items[0].ToString();
|
|
|
|
Cbox_Resolution.Text = Cbox_Resolution.Items[Cbox_Resolution.Items.Count - 1].ToString();
|
|
Cbox_ScreenMode.Text = Cbox_ScreenMode.Items[1].ToString();
|
|
}
|
|
|
|
private void DisplayGameSettings()
|
|
{
|
|
try
|
|
{
|
|
DisplayComboBoxValue(Cbox_Language, _GameSettings_IniFile.IniReadValue("GameSettings", "LANGUAGE"));
|
|
DisplayComboBoxValue(Cbox_Difficulty, _GameSettings_IniFile.IniReadValue("GameSettings", "GAME DIFFICULTY"));
|
|
DisplayComboBoxValue(Cbox_Advertise, _GameSettings_IniFile.IniReadValue("GameSettings", "ADVERTISE SOUND"));
|
|
DisplayComboBoxValue(Cbox_Revival, _GameSettings_IniFile.IniReadValue("GameSettings", "REVIVAL"));
|
|
DisplayComboBoxValue(Cbox_P1Recoil, _GameSettings_IniFile.IniReadValue("GameSettings", "PLAYER1 CONTROLLER REACTION"));
|
|
DisplayComboBoxValue(Cbox_P2Recoil, _GameSettings_IniFile.IniReadValue("GameSettings", "PLAYER2 CONTROLLER REACTION"));
|
|
DisplayComboBoxValue(Cbox_ContinueCountdown, _GameSettings_IniFile.IniReadValue("GameSettings", "CONTINUE COUNTDOWN"));
|
|
DisplayComboBoxValue(Cbox_EnnemyBoost, _GameSettings_IniFile.IniReadValue("GameSettings", "ENEMY BOOST"));
|
|
DisplayComboBoxValue(Cbox_FirstMn, _GameSettings_IniFile.IniReadValue("GameSettings", "1ST MIN GAME PLAY"));
|
|
DisplayComboBoxValue(Cbox_KidsMode, _GameSettings_IniFile.IniReadValue("GameSettings", "KIDS MODE"));
|
|
DisplayComboBoxValue(Cbox_StageSelect, _GameSettings_IniFile.IniReadValue("GameSettings", "SELECT STAGE"));
|
|
DisplayComboBoxValue(Cbox_EnglishSubtitles, _GameSettings_IniFile.IniReadValue("GameSettings", "ENGLISH SUBTITLES"));
|
|
DisplayComboBoxValue(Cbox_Swipe, _GameSettings_IniFile.IniReadValue("GameSettings", "SWIPE CARD TO PLAY"));
|
|
}
|
|
catch (Exception Ex)
|
|
{
|
|
MessageBox.Show("GameSettings : Invalid value found: \n\n" + Ex.Message.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
}
|
|
}
|
|
|
|
private void DisplayShellSettings()
|
|
{
|
|
try
|
|
{
|
|
int iIndex = int.Parse(_ShellData_IniFile.IniReadValue("Credit", "Freeplay"));
|
|
Cbox_FreePlay.Text = Cbox_FreePlay.Items[iIndex].ToString();
|
|
}
|
|
catch (Exception Ex)
|
|
{
|
|
MessageBox.Show(SHELLDATA_INI_PATH + "\n: Invalid value found for Freeplay : \n\n" + Ex.Message.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
}
|
|
|
|
try
|
|
{
|
|
int iIndex = int.Parse(_ShellData_IniFile.IniReadValue("Credit", "EntryType"));
|
|
Cbox_EntryType.Text = Cbox_EntryType.Items[iIndex].ToString();
|
|
}
|
|
catch (Exception Ex)
|
|
{
|
|
MessageBox.Show(SHELLDATA_INI_PATH + "\n: Invalid value found for EntryType: \n\n" + Ex.Message.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
}
|
|
}
|
|
|
|
private void DisplayLauncherSettings()
|
|
{
|
|
try
|
|
{
|
|
//Resolution:
|
|
string res = _Launcher_IniFile.IniReadValue("Video", "WIDTH") + "x" + _Launcher_IniFile.IniReadValue("Video", "HEIGHT");
|
|
if (CheckIfResolutionAlreadyExists(res))
|
|
Cbox_Resolution.Text = res;
|
|
//Mode
|
|
int iIndex = int.Parse(_Launcher_IniFile.IniReadValue("Video", "FULLSCREEN"));
|
|
Cbox_ScreenMode.Text = Cbox_ScreenMode.Items[iIndex].ToString();
|
|
}
|
|
catch (Exception Ex)
|
|
{
|
|
MessageBox.Show("Launcher Settings : Invalid value found: \n\n" + Ex.Message.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
}
|
|
}
|
|
|
|
private void DisplayComboBoxValue(ComboBox Target, String sValue)
|
|
{
|
|
for (int i = 0; i < Target.Items.Count; i++)
|
|
{
|
|
if (Target.Items[i].ToString().Equals(sValue))
|
|
{
|
|
Target.Text = sValue;
|
|
return;
|
|
}
|
|
}
|
|
MessageBox.Show(GAMESETTINGS_INI_PATH + "\n: Invalid value found for " + Target.Name + " : \n\n" + sValue, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
}
|
|
|
|
private void DisplayTrackBarValue(TrackBar Target, String sValue)
|
|
{
|
|
int iValue = 0;
|
|
if (int.TryParse(sValue, out iValue))
|
|
{
|
|
if (iValue >= Target.Minimum && iValue <= Target.Maximum)
|
|
{
|
|
Target.Value = iValue;
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show(SHELLDATA_INI_PATH + " :\n" + sValue + " out of bound for " + Target.Name, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show(SHELLDATA_INI_PATH + " :\n" + sValue + " is not valid value for " + Target.Name, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
}
|
|
}
|
|
|
|
private void SaveGameSettings()
|
|
{
|
|
if (!_GameSettings_IniFile.FInfo.Exists)
|
|
Directory.CreateDirectory(_GameSettings_IniFile.FInfo.Directory.FullName);
|
|
|
|
try
|
|
{
|
|
_GameSettings_IniFile.IniWriteValue("GameSettings", "LANGUAGE", Cbox_Language.Text);
|
|
_GameSettings_IniFile.IniWriteValue("GameSettings", "GAME DIFFICULTY", Cbox_Difficulty.Text);
|
|
_GameSettings_IniFile.IniWriteValue("GameSettings", "ADVERTISE SOUND", Cbox_Advertise.Text);
|
|
_GameSettings_IniFile.IniWriteValue("GameSettings", "REVIVAL", Cbox_Revival.Text);
|
|
_GameSettings_IniFile.IniWriteValue("GameSettings", "PLAYER1 CONTROLLER REACTION", Cbox_P1Recoil.Text);
|
|
_GameSettings_IniFile.IniWriteValue("GameSettings", "PLAYER2 CONTROLLER REACTION", Cbox_P2Recoil.Text);
|
|
_GameSettings_IniFile.IniWriteValue("GameSettings", "CONTINUE COUNTDOWN", Cbox_ContinueCountdown.Text);
|
|
_GameSettings_IniFile.IniWriteValue("GameSettings", "ENEMY BOOST", Cbox_EnnemyBoost.Text);
|
|
_GameSettings_IniFile.IniWriteValue("GameSettings", "1ST MIN GAME PLAY", Cbox_FirstMn.Text);
|
|
_GameSettings_IniFile.IniWriteValue("GameSettings", "KIDS MODE", Cbox_KidsMode.Text);
|
|
_GameSettings_IniFile.IniWriteValue("GameSettings", "SELECT STAGE", Cbox_StageSelect.Text);
|
|
_GameSettings_IniFile.IniWriteValue("GameSettings", "ENGLISH SUBTITLES", Cbox_EnglishSubtitles.Text);
|
|
_GameSettings_IniFile.IniWriteValue("GameSettings", "SWIPE CARD TO PLAY", Cbox_Swipe.Text);
|
|
}
|
|
catch (Exception Ex)
|
|
{
|
|
MessageBox.Show("Error saving GameSettings to disk : " + _GameSettings_IniFile.FInfo.FullName + "\n\n" + Ex.Message.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
}
|
|
|
|
MessageBox.Show("GameSettings successfully saved to : \n\n" + _GameSettings_IniFile.FInfo.FullName, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
|
|
}
|
|
|
|
private void SaveShellSettings()
|
|
{
|
|
if (!_ShellData_IniFile.FInfo.Exists)
|
|
Directory.CreateDirectory(_ShellData_IniFile.FInfo.Directory.FullName);
|
|
|
|
try
|
|
{
|
|
_ShellData_IniFile.IniWriteValue("Credit", "Freeplay", Cbox_FreePlay.SelectedIndex.ToString());
|
|
_ShellData_IniFile.IniWriteValue("Credit", "EntryType", Cbox_EntryType.SelectedIndex.ToString());
|
|
}
|
|
catch (Exception Ex)
|
|
{
|
|
MessageBox.Show("Error saving ShellSettings to disk : " + _ShellData_IniFile.FInfo.FullName + "\n\n" + Ex.Message.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
}
|
|
|
|
MessageBox.Show("ShellData successfully saved to : \n\n" + _ShellData_IniFile.FInfo.FullName, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
|
|
}
|
|
|
|
private void SaveLauncherSettings()
|
|
{
|
|
if (!_Launcher_IniFile.FInfo.Exists)
|
|
Directory.CreateDirectory(_Launcher_IniFile.FInfo.Directory.FullName);
|
|
|
|
try
|
|
{
|
|
string[] sBuffer = Cbox_Resolution.Text.Split('x');
|
|
_Launcher_IniFile.IniWriteValue("Video", "WIDTH", sBuffer[0]);
|
|
_Launcher_IniFile.IniWriteValue("Video", "HEIGHT", sBuffer[1]);
|
|
_Launcher_IniFile.IniWriteValue("Video", "FULLSCREEN", Cbox_ScreenMode.SelectedIndex.ToString());
|
|
}
|
|
catch (Exception Ex)
|
|
{
|
|
MessageBox.Show("Error saving Launcher Settings to disk : " + _Launcher_IniFile.FInfo.FullName + "\n\n" + Ex.Message.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
|
}
|
|
|
|
MessageBox.Show("Launcher Settings successfully saved to : \n\n" + _Launcher_IniFile.FInfo.FullName, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
|
|
}
|
|
|
|
private void Btn_Save_Click(object sender, EventArgs e)
|
|
{
|
|
SaveGameSettings();
|
|
SaveShellSettings();
|
|
SaveLauncherSettings();
|
|
}
|
|
|
|
private void Btn_Close_Click(object sender, EventArgs e)
|
|
{
|
|
Application.Exit();
|
|
}
|
|
|
|
#region INI class
|
|
|
|
public class INIFile
|
|
{
|
|
private string _RelativePath = string.Empty;
|
|
public FileInfo FInfo { get; private set; }
|
|
|
|
[DllImport("kernel32")]
|
|
private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
|
|
[DllImport("kernel32")]
|
|
private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);
|
|
|
|
public INIFile(string INIPath)
|
|
{
|
|
_RelativePath = INIPath;
|
|
FInfo = new FileInfo(_RelativePath);
|
|
}
|
|
public long IniWriteValue(string Section, string Key, string Value)
|
|
{
|
|
return WritePrivateProfileString(Section, Key, Value, this._RelativePath);
|
|
}
|
|
|
|
public string IniReadValue(string Section, string Key)
|
|
{
|
|
StringBuilder temp = new StringBuilder(255);
|
|
int i = GetPrivateProfileString(Section, Key, "", temp, 255, this._RelativePath);
|
|
return temp.ToString();
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
}
|
|
}
|