From 5d779c2dfb13c57360c23f229790deaea8684b81 Mon Sep 17 00:00:00 2001
From: "Travis J. Gutjahr" <33809229+Squirrelies@users.noreply.github.com>
Date: Sun, 10 Feb 2019 00:36:33 -0600
Subject: [PATCH] Added options UI.
---
RE2REmakeSRT/AttachUI.cs | 3 +
RE2REmakeSRT/MainUI.cs | 13 +-
RE2REmakeSRT/Options.cs | 77 ++++++++++
RE2REmakeSRT/OptionsUI.Designer.cs | 191 ++++++++++++++++++++++++
RE2REmakeSRT/OptionsUI.cs | 66 ++++++++
RE2REmakeSRT/OptionsUI.resx | 120 +++++++++++++++
RE2REmakeSRT/Program.cs | 44 ++++--
RE2REmakeSRT/Properties/AssemblyInfo.cs | 4 +-
RE2REmakeSRT/RE2REmakeSRT.csproj | 11 ++
RE2REmakeSRT/REmake2VersionDetector.cs | 2 +-
RE2REmakeSRT/RegistryHelper.cs | 15 ++
11 files changed, 524 insertions(+), 22 deletions(-)
create mode 100644 RE2REmakeSRT/Options.cs
create mode 100644 RE2REmakeSRT/OptionsUI.Designer.cs
create mode 100644 RE2REmakeSRT/OptionsUI.cs
create mode 100644 RE2REmakeSRT/OptionsUI.resx
create mode 100644 RE2REmakeSRT/RegistryHelper.cs
diff --git a/RE2REmakeSRT/AttachUI.cs b/RE2REmakeSRT/AttachUI.cs
index 20696a9..0bcfa7f 100644
--- a/RE2REmakeSRT/AttachUI.cs
+++ b/RE2REmakeSRT/AttachUI.cs
@@ -11,6 +11,9 @@ public partial class AttachUI : Form
public AttachUI()
{
InitializeComponent();
+
+ this.ContextMenu = Program.contextMenu;
+
processPollingTimer = new System.Timers.Timer() { AutoReset = false, Interval = 250 };
processPollingTimer.Elapsed += ProcessPollingTimer_Elapsed;
processPollingTimer.Start();
diff --git a/RE2REmakeSRT/MainUI.cs b/RE2REmakeSRT/MainUI.cs
index 2d879c0..d400a33 100644
--- a/RE2REmakeSRT/MainUI.cs
+++ b/RE2REmakeSRT/MainUI.cs
@@ -50,10 +50,10 @@ public MainUI()
// Set titlebar.
this.Text += string.Format(" v{0}", System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString());
- if (Program.programSpecialOptions.HasFlag(ProgramFlags.NoTitleBar))
+ if (Program.programSpecialOptions.Flags.HasFlag(ProgramFlags.NoTitleBar))
this.FormBorderStyle = FormBorderStyle.None;
- if (Program.programSpecialOptions.HasFlag(ProgramFlags.Transparent))
+ if (Program.programSpecialOptions.Flags.HasFlag(ProgramFlags.Transparent))
this.TransparencyKey = Color.Black;
// Set the width and height of the inventory display so it matches the maximum items and the scaling size of those items.
@@ -71,6 +71,11 @@ public MainUI()
lastPtrUpdate = DateTime.UtcNow.Ticks;
lastFullUIDraw = DateTime.UtcNow.Ticks;
+ this.ContextMenu = Program.contextMenu;
+ this.playerHealthStatus.ContextMenu = Program.contextMenu;
+ this.statisticsPanel.ContextMenu = Program.contextMenu;
+ this.inventoryPanel.ContextMenu = Program.contextMenu;
+
memoryPollingTimer = new System.Timers.Timer() { AutoReset = false, Interval = SLIM_UI_DRAW_MS };
memoryPollingTimer.Elapsed += MemoryPollingTimer_Elapsed;
memoryPollingTimer.Start();
@@ -83,7 +88,7 @@ private void MemoryPollingTimer_Elapsed(object sender, System.Timers.ElapsedEven
// Suspend UI layout logic to perform redrawing.
MainUI uiForm = (MainUI)Program.mainContext.MainForm;
- if (Program.programSpecialOptions.HasFlag(ProgramFlags.AlwaysOnTop))
+ if (Program.programSpecialOptions.Flags.HasFlag(ProgramFlags.AlwaysOnTop))
{
if (uiForm.InvokeRequired)
uiForm.Invoke(new Action(() => uiForm.TopMost = true));
@@ -238,7 +243,7 @@ private void statisticsPanel_Paint(object sender, PaintEventArgs e)
// IGT Display.
e.Graphics.DrawString(string.Format("{0}", Program.gameMem.IGTString), new Font("Consolas", 16, FontStyle.Bold), Brushes.White, 0, 0, stdStringFormat);
- if (Program.programSpecialOptions.HasFlag(ProgramFlags.Debug))
+ if (Program.programSpecialOptions.Flags.HasFlag(ProgramFlags.Debug))
{
e.Graphics.DrawString("Raw IGT", new Font("Consolas", 9, FontStyle.Bold), Brushes.Gray, 2, 25, stdStringFormat);
e.Graphics.DrawString(Program.gameMem.IGTRaw.ToString(), new Font("Consolas", 12, FontStyle.Bold), Brushes.Gray, 0, 37, stdStringFormat);
diff --git a/RE2REmakeSRT/Options.cs b/RE2REmakeSRT/Options.cs
new file mode 100644
index 0000000..d89243c
--- /dev/null
+++ b/RE2REmakeSRT/Options.cs
@@ -0,0 +1,77 @@
+using Microsoft.Win32;
+
+namespace RE2REmakeSRT
+{
+ public struct Options
+ {
+ public ProgramFlags Flags;
+ public double ScalingFactor;
+
+ public void GetOptions()
+ {
+ // Initialize registry key.
+ RegistryKey optionsKey = Registry.CurrentUser.CreateSubKey("SOFTWARE\\RE2REmakeSRT", false);
+
+ // Load registry values.
+ if (RegistryHelper.GetBoolValue(optionsKey, "Debug", false))
+ Flags |= ProgramFlags.Debug;
+ else
+ Flags &= ~ProgramFlags.Debug;
+
+ if (RegistryHelper.GetBoolValue(optionsKey, "SkipChecksumCheck", false))
+ Flags |= ProgramFlags.SkipChecksumCheck;
+ else
+ Flags &= ~ProgramFlags.SkipChecksumCheck;
+
+ if (RegistryHelper.GetBoolValue(optionsKey, "NoTitleBar", false))
+ Flags |= ProgramFlags.NoTitleBar;
+ else
+ Flags &= ~ProgramFlags.NoTitleBar;
+
+ if (RegistryHelper.GetBoolValue(optionsKey, "AlwaysOnTop", false))
+ Flags |= ProgramFlags.AlwaysOnTop;
+ else
+ Flags &= ~ProgramFlags.AlwaysOnTop;
+
+ if (RegistryHelper.GetBoolValue(optionsKey, "Transparent", false))
+ Flags |= ProgramFlags.Transparent;
+ else
+ Flags &= ~ProgramFlags.Transparent;
+
+ double.TryParse(RegistryHelper.GetValue(optionsKey, "ScalingFactor", "0.75"), out ScalingFactor);
+ }
+
+ public void SetOptions()
+ {
+ // Initialize registry key.
+ RegistryKey optionsKey = Registry.CurrentUser.CreateSubKey("SOFTWARE\\RE2REmakeSRT", true);
+
+ if ((Flags & ProgramFlags.Debug) == ProgramFlags.Debug)
+ optionsKey.SetValue("Debug", 1, RegistryValueKind.DWord);
+ else
+ optionsKey.SetValue("Debug", 0, RegistryValueKind.DWord);
+
+ if ((Flags & ProgramFlags.SkipChecksumCheck) == ProgramFlags.SkipChecksumCheck)
+ optionsKey.SetValue("SkipChecksumCheck", 1, RegistryValueKind.DWord);
+ else
+ optionsKey.SetValue("SkipChecksumCheck", 0, RegistryValueKind.DWord);
+
+ if ((Flags & ProgramFlags.NoTitleBar) == ProgramFlags.NoTitleBar)
+ optionsKey.SetValue("NoTitleBar", 1, RegistryValueKind.DWord);
+ else
+ optionsKey.SetValue("NoTitleBar", 0, RegistryValueKind.DWord);
+
+ if ((Flags & ProgramFlags.AlwaysOnTop) == ProgramFlags.AlwaysOnTop)
+ optionsKey.SetValue("AlwaysOnTop", 1, RegistryValueKind.DWord);
+ else
+ optionsKey.SetValue("AlwaysOnTop", 0, RegistryValueKind.DWord);
+
+ if ((Flags & ProgramFlags.Transparent) == ProgramFlags.Transparent)
+ optionsKey.SetValue("Transparent", 1, RegistryValueKind.DWord);
+ else
+ optionsKey.SetValue("Transparent", 0, RegistryValueKind.DWord);
+
+ optionsKey.SetValue("ScalingFactor", ScalingFactor.ToString(), RegistryValueKind.String);
+ }
+ }
+}
diff --git a/RE2REmakeSRT/OptionsUI.Designer.cs b/RE2REmakeSRT/OptionsUI.Designer.cs
new file mode 100644
index 0000000..0d9b423
--- /dev/null
+++ b/RE2REmakeSRT/OptionsUI.Designer.cs
@@ -0,0 +1,191 @@
+namespace RE2REmakeSRT
+{
+ partial class OptionsUI
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.debugCheckBox = new System.Windows.Forms.CheckBox();
+ this.skipChecksumCheckBox = new System.Windows.Forms.CheckBox();
+ this.noTitlebarCheckBox = new System.Windows.Forms.CheckBox();
+ this.alwaysOnTopCheckBox = new System.Windows.Forms.CheckBox();
+ this.transparentBackgroundCheckBox = new System.Windows.Forms.CheckBox();
+ this.optionsGroupBox = new System.Windows.Forms.GroupBox();
+ this.label1 = new System.Windows.Forms.Label();
+ this.scalingFactorNumericUpDown = new System.Windows.Forms.NumericUpDown();
+ this.cancelButton = new System.Windows.Forms.Button();
+ this.saveButton = new System.Windows.Forms.Button();
+ this.optionsGroupBox.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.scalingFactorNumericUpDown)).BeginInit();
+ this.SuspendLayout();
+ //
+ // debugCheckBox
+ //
+ this.debugCheckBox.AutoSize = true;
+ this.debugCheckBox.Location = new System.Drawing.Point(6, 122);
+ this.debugCheckBox.Name = "debugCheckBox";
+ this.debugCheckBox.Size = new System.Drawing.Size(88, 17);
+ this.debugCheckBox.TabIndex = 0;
+ this.debugCheckBox.Text = "Debug Mode";
+ this.debugCheckBox.UseVisualStyleBackColor = true;
+ //
+ // skipChecksumCheckBox
+ //
+ this.skipChecksumCheckBox.AutoSize = true;
+ this.skipChecksumCheckBox.Location = new System.Drawing.Point(6, 99);
+ this.skipChecksumCheckBox.Name = "skipChecksumCheckBox";
+ this.skipChecksumCheckBox.Size = new System.Drawing.Size(148, 17);
+ this.skipChecksumCheckBox.TabIndex = 1;
+ this.skipChecksumCheckBox.Text = "Skip Checksum Checking";
+ this.skipChecksumCheckBox.UseVisualStyleBackColor = true;
+ //
+ // noTitlebarCheckBox
+ //
+ this.noTitlebarCheckBox.AutoSize = true;
+ this.noTitlebarCheckBox.Location = new System.Drawing.Point(6, 53);
+ this.noTitlebarCheckBox.Name = "noTitlebarCheckBox";
+ this.noTitlebarCheckBox.Size = new System.Drawing.Size(78, 17);
+ this.noTitlebarCheckBox.TabIndex = 2;
+ this.noTitlebarCheckBox.Text = "No Titlebar";
+ this.noTitlebarCheckBox.UseVisualStyleBackColor = true;
+ //
+ // alwaysOnTopCheckBox
+ //
+ this.alwaysOnTopCheckBox.AutoSize = true;
+ this.alwaysOnTopCheckBox.Location = new System.Drawing.Point(6, 30);
+ this.alwaysOnTopCheckBox.Name = "alwaysOnTopCheckBox";
+ this.alwaysOnTopCheckBox.Size = new System.Drawing.Size(96, 17);
+ this.alwaysOnTopCheckBox.TabIndex = 3;
+ this.alwaysOnTopCheckBox.Text = "Always on Top";
+ this.alwaysOnTopCheckBox.UseVisualStyleBackColor = true;
+ //
+ // transparentBackgroundCheckBox
+ //
+ this.transparentBackgroundCheckBox.AutoSize = true;
+ this.transparentBackgroundCheckBox.Location = new System.Drawing.Point(6, 76);
+ this.transparentBackgroundCheckBox.Name = "transparentBackgroundCheckBox";
+ this.transparentBackgroundCheckBox.Size = new System.Drawing.Size(144, 17);
+ this.transparentBackgroundCheckBox.TabIndex = 4;
+ this.transparentBackgroundCheckBox.Text = "Transparent Background";
+ this.transparentBackgroundCheckBox.UseVisualStyleBackColor = true;
+ //
+ // optionsGroupBox
+ //
+ this.optionsGroupBox.Controls.Add(this.label1);
+ this.optionsGroupBox.Controls.Add(this.scalingFactorNumericUpDown);
+ this.optionsGroupBox.Controls.Add(this.skipChecksumCheckBox);
+ this.optionsGroupBox.Controls.Add(this.debugCheckBox);
+ this.optionsGroupBox.Controls.Add(this.transparentBackgroundCheckBox);
+ this.optionsGroupBox.Controls.Add(this.noTitlebarCheckBox);
+ this.optionsGroupBox.Controls.Add(this.alwaysOnTopCheckBox);
+ this.optionsGroupBox.Location = new System.Drawing.Point(2, 2);
+ this.optionsGroupBox.Name = "optionsGroupBox";
+ this.optionsGroupBox.Size = new System.Drawing.Size(169, 174);
+ this.optionsGroupBox.TabIndex = 5;
+ this.optionsGroupBox.TabStop = false;
+ this.optionsGroupBox.Text = "Options";
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(65, 147);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(75, 13);
+ this.label1.TabIndex = 6;
+ this.label1.Text = "Scaling Factor";
+ //
+ // scalingFactorNumericUpDown
+ //
+ this.scalingFactorNumericUpDown.DecimalPlaces = 2;
+ this.scalingFactorNumericUpDown.Increment = new decimal(new int[] {
+ 5,
+ 0,
+ 0,
+ 131072});
+ this.scalingFactorNumericUpDown.Location = new System.Drawing.Point(6, 145);
+ this.scalingFactorNumericUpDown.Name = "scalingFactorNumericUpDown";
+ this.scalingFactorNumericUpDown.Size = new System.Drawing.Size(53, 20);
+ this.scalingFactorNumericUpDown.TabIndex = 5;
+ this.scalingFactorNumericUpDown.Value = new decimal(new int[] {
+ 75,
+ 0,
+ 0,
+ 131072});
+ //
+ // cancelButton
+ //
+ this.cancelButton.Location = new System.Drawing.Point(2, 182);
+ this.cancelButton.Name = "cancelButton";
+ this.cancelButton.Size = new System.Drawing.Size(75, 23);
+ this.cancelButton.TabIndex = 6;
+ this.cancelButton.Text = "Cancel";
+ this.cancelButton.UseVisualStyleBackColor = true;
+ this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click);
+ //
+ // saveButton
+ //
+ this.saveButton.Location = new System.Drawing.Point(96, 182);
+ this.saveButton.Name = "saveButton";
+ this.saveButton.Size = new System.Drawing.Size(75, 23);
+ this.saveButton.TabIndex = 7;
+ this.saveButton.Text = "Save";
+ this.saveButton.UseVisualStyleBackColor = true;
+ this.saveButton.Click += new System.EventHandler(this.saveButton_Click);
+ //
+ // OptionsUI
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(173, 207);
+ this.Controls.Add(this.saveButton);
+ this.Controls.Add(this.cancelButton);
+ this.Controls.Add(this.optionsGroupBox);
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
+ this.Name = "OptionsUI";
+ this.ShowIcon = false;
+ this.ShowInTaskbar = false;
+ this.Text = "RE2 (2019) SRT";
+ this.optionsGroupBox.ResumeLayout(false);
+ this.optionsGroupBox.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.scalingFactorNumericUpDown)).EndInit();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.CheckBox debugCheckBox;
+ private System.Windows.Forms.CheckBox skipChecksumCheckBox;
+ private System.Windows.Forms.CheckBox noTitlebarCheckBox;
+ private System.Windows.Forms.CheckBox alwaysOnTopCheckBox;
+ private System.Windows.Forms.CheckBox transparentBackgroundCheckBox;
+ private System.Windows.Forms.GroupBox optionsGroupBox;
+ private System.Windows.Forms.Button cancelButton;
+ private System.Windows.Forms.Button saveButton;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.NumericUpDown scalingFactorNumericUpDown;
+ }
+}
\ No newline at end of file
diff --git a/RE2REmakeSRT/OptionsUI.cs b/RE2REmakeSRT/OptionsUI.cs
new file mode 100644
index 0000000..a74ee5d
--- /dev/null
+++ b/RE2REmakeSRT/OptionsUI.cs
@@ -0,0 +1,66 @@
+using System;
+using System.Windows.Forms;
+
+namespace RE2REmakeSRT
+{
+ public partial class OptionsUI : Form
+ {
+ public OptionsUI()
+ {
+ InitializeComponent();
+
+ // Set titlebar.
+ this.Text += string.Format(" v{0}", System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString());
+
+ debugCheckBox.Checked = (Program.programSpecialOptions.Flags & ProgramFlags.Debug) == ProgramFlags.Debug;
+ skipChecksumCheckBox.Checked = (Program.programSpecialOptions.Flags & ProgramFlags.SkipChecksumCheck) == ProgramFlags.SkipChecksumCheck;
+ noTitlebarCheckBox.Checked = (Program.programSpecialOptions.Flags & ProgramFlags.NoTitleBar) == ProgramFlags.NoTitleBar;
+ alwaysOnTopCheckBox.Checked = (Program.programSpecialOptions.Flags & ProgramFlags.AlwaysOnTop) == ProgramFlags.AlwaysOnTop;
+ transparentBackgroundCheckBox.Checked = (Program.programSpecialOptions.Flags & ProgramFlags.Transparent) == ProgramFlags.Transparent;
+ scalingFactorNumericUpDown.Value = (decimal)Program.programSpecialOptions.ScalingFactor;
+ }
+
+ private void cancelButton_Click(object sender, EventArgs e)
+ {
+ // Close form.
+ this.Close();
+ }
+
+ private void saveButton_Click(object sender, EventArgs e)
+ {
+ // Set flag changes prior to saving.
+ if (debugCheckBox.Checked && (Program.programSpecialOptions.Flags & ProgramFlags.Debug) != ProgramFlags.Debug)
+ Program.programSpecialOptions.Flags |= ProgramFlags.Debug;
+ else if (!debugCheckBox.Checked && (Program.programSpecialOptions.Flags & ProgramFlags.Debug) == ProgramFlags.Debug)
+ Program.programSpecialOptions.Flags &= ~ProgramFlags.Debug;
+
+ if (skipChecksumCheckBox.Checked && (Program.programSpecialOptions.Flags & ProgramFlags.SkipChecksumCheck) != ProgramFlags.SkipChecksumCheck)
+ Program.programSpecialOptions.Flags |= ProgramFlags.SkipChecksumCheck;
+ else if (!skipChecksumCheckBox.Checked && (Program.programSpecialOptions.Flags & ProgramFlags.SkipChecksumCheck) == ProgramFlags.SkipChecksumCheck)
+ Program.programSpecialOptions.Flags &= ~ProgramFlags.SkipChecksumCheck;
+
+ if (noTitlebarCheckBox.Checked && (Program.programSpecialOptions.Flags & ProgramFlags.NoTitleBar) != ProgramFlags.NoTitleBar)
+ Program.programSpecialOptions.Flags |= ProgramFlags.NoTitleBar;
+ else if (!noTitlebarCheckBox.Checked && (Program.programSpecialOptions.Flags & ProgramFlags.NoTitleBar) == ProgramFlags.NoTitleBar)
+ Program.programSpecialOptions.Flags &= ~ProgramFlags.NoTitleBar;
+
+ if (alwaysOnTopCheckBox.Checked && (Program.programSpecialOptions.Flags & ProgramFlags.AlwaysOnTop) != ProgramFlags.AlwaysOnTop)
+ Program.programSpecialOptions.Flags |= ProgramFlags.AlwaysOnTop;
+ else if (!alwaysOnTopCheckBox.Checked && (Program.programSpecialOptions.Flags & ProgramFlags.AlwaysOnTop) == ProgramFlags.AlwaysOnTop)
+ Program.programSpecialOptions.Flags &= ~ProgramFlags.AlwaysOnTop;
+
+ if (transparentBackgroundCheckBox.Checked && (Program.programSpecialOptions.Flags & ProgramFlags.Transparent) != ProgramFlags.Transparent)
+ Program.programSpecialOptions.Flags |= ProgramFlags.Transparent;
+ else if (!transparentBackgroundCheckBox.Checked && (Program.programSpecialOptions.Flags & ProgramFlags.Transparent) == ProgramFlags.Transparent)
+ Program.programSpecialOptions.Flags &= ~ProgramFlags.Transparent;
+
+ Program.programSpecialOptions.ScalingFactor = (double)scalingFactorNumericUpDown.Value;
+
+ // Write registry values.
+ Program.programSpecialOptions.SetOptions();
+
+ // Close form.
+ this.Close();
+ }
+ }
+}
diff --git a/RE2REmakeSRT/OptionsUI.resx b/RE2REmakeSRT/OptionsUI.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/RE2REmakeSRT/OptionsUI.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/RE2REmakeSRT/Program.cs b/RE2REmakeSRT/Program.cs
index c5414a4..e773b66 100644
--- a/RE2REmakeSRT/Program.cs
+++ b/RE2REmakeSRT/Program.cs
@@ -11,12 +11,12 @@ namespace RE2REmakeSRT
public static class Program
{
public static ApplicationContext mainContext;
- public static ProgramFlags programSpecialOptions;
+ public static ContextMenu contextMenu;
+ public static Options programSpecialOptions;
public static Process gameProc;
public static GameMemory gameMem;
public static Bitmap inventoryImage; // The inventory item sheet.
public static Bitmap inventoryError; // An error image.
- public static double INV_SLOT_SCALING = 0.75d; // Scaling factor for the inventory images.
public static int INV_SLOT_WIDTH;
public static int INV_SLOT_HEIGHT;
@@ -27,7 +27,9 @@ public static class Program
public static void Main(string[] args)
{
// Handle command-line parameters.
- programSpecialOptions = ProgramFlags.None;
+ programSpecialOptions = new Options();
+ programSpecialOptions.GetOptions();
+
foreach (string arg in args)
{
if (arg.Equals("--Help", StringComparison.InvariantCultureIgnoreCase))
@@ -45,28 +47,28 @@ public static void Main(string[] args)
}
if (arg.Equals("--Skip-Checksum", StringComparison.InvariantCultureIgnoreCase))
- programSpecialOptions |= ProgramFlags.SkipChecksumCheck;
+ programSpecialOptions.Flags |= ProgramFlags.SkipChecksumCheck;
if (arg.Equals("--No-Titlebar", StringComparison.InvariantCultureIgnoreCase))
- programSpecialOptions |= ProgramFlags.NoTitleBar;
+ programSpecialOptions.Flags |= ProgramFlags.NoTitleBar;
if (arg.Equals("--Always-On-Top", StringComparison.InvariantCultureIgnoreCase))
- programSpecialOptions |= ProgramFlags.AlwaysOnTop;
+ programSpecialOptions.Flags |= ProgramFlags.AlwaysOnTop;
if (arg.Equals("--Transparent", StringComparison.InvariantCultureIgnoreCase))
- programSpecialOptions |= ProgramFlags.Transparent;
+ programSpecialOptions.Flags |= ProgramFlags.Transparent;
if (arg.StartsWith("--ScalingFactor=", StringComparison.InvariantCultureIgnoreCase))
- if (!double.TryParse(arg.Split(new char[1] { '=' }, 2, StringSplitOptions.None)[1], out INV_SLOT_SCALING))
- INV_SLOT_SCALING = 0.75d; // Default scaling factor for the inventory images. If we fail to process the user input, ensure this gets set to the default value just in case.
+ if (!double.TryParse(arg.Split(new char[1] { '=' }, 2, StringSplitOptions.None)[1], out programSpecialOptions.ScalingFactor))
+ programSpecialOptions.ScalingFactor = 0.75d; // Default scaling factor for the inventory images. If we fail to process the user input, ensure this gets set to the default value just in case.
if (arg.Equals("--Debug", StringComparison.InvariantCultureIgnoreCase))
- programSpecialOptions |= ProgramFlags.Debug;
+ programSpecialOptions.Flags |= ProgramFlags.Debug;
}
// Set item slot sizes after scaling is determined.
- INV_SLOT_WIDTH = (int)Math.Round(112d * INV_SLOT_SCALING, MidpointRounding.AwayFromZero); // Individual inventory slot width.
- INV_SLOT_HEIGHT = (int)Math.Round(112d * INV_SLOT_SCALING, MidpointRounding.AwayFromZero); // Individual inventory slot height.
+ INV_SLOT_WIDTH = (int)Math.Round(112d * programSpecialOptions.ScalingFactor, MidpointRounding.AwayFromZero); // Individual inventory slot width.
+ INV_SLOT_HEIGHT = (int)Math.Round(112d * programSpecialOptions.ScalingFactor, MidpointRounding.AwayFromZero); // Individual inventory slot height.
// Standard WinForms stuff.
Application.EnableVisualStyles();
@@ -76,10 +78,10 @@ public static void Main(string[] args)
inventoryImage = Properties.Resources.ui0100_iam_texout.Clone(new Rectangle(0, 0, Properties.Resources.ui0100_iam_texout.Width, Properties.Resources.ui0100_iam_texout.Height), PixelFormat.Format32bppPArgb);
// Rescales the image down if the scaling factor is not 1.
- if (INV_SLOT_SCALING != 1d)
+ if (programSpecialOptions.ScalingFactor != 1d)
{
- int sheetWidth = (int)Math.Round(inventoryImage.Width * INV_SLOT_SCALING, MidpointRounding.AwayFromZero);
- int sheetHeight = (int)Math.Round(inventoryImage.Height * INV_SLOT_SCALING, MidpointRounding.AwayFromZero);
+ int sheetWidth = (int)Math.Round(inventoryImage.Width * programSpecialOptions.ScalingFactor, MidpointRounding.AwayFromZero);
+ int sheetHeight = (int)Math.Round(inventoryImage.Height * programSpecialOptions.ScalingFactor, MidpointRounding.AwayFromZero);
inventoryImage = new Bitmap(inventoryImage, sheetWidth, sheetHeight);
}
@@ -92,6 +94,18 @@ public static void Main(string[] args)
grp.DrawLine(new Pen(Color.FromArgb(150, 255, 0, 0), 3), inventoryError.Width, 0, 0, inventoryError.Height);
}
+ contextMenu = new ContextMenu();
+ contextMenu.MenuItems.Add("Options", (object sender, EventArgs e) =>
+ {
+ using (OptionsUI optionsForm = new OptionsUI())
+ optionsForm.ShowDialog();
+ });
+ contextMenu.MenuItems.Add("-", (object sender, EventArgs e) => { });
+ contextMenu.MenuItems.Add("Exit", (object sender, EventArgs e) =>
+ {
+ Environment.Exit(0);
+ });
+
// This form finds the process for re2.exe (assigned to gameProc) or waits until it is found.
using (mainContext = new ApplicationContext(new AttachUI()))
Application.Run(mainContext);
diff --git a/RE2REmakeSRT/Properties/AssemblyInfo.cs b/RE2REmakeSRT/Properties/AssemblyInfo.cs
index 3ecb5a5..74d5693 100644
--- a/RE2REmakeSRT/Properties/AssemblyInfo.cs
+++ b/RE2REmakeSRT/Properties/AssemblyInfo.cs
@@ -32,5 +32,5 @@
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.1.5.2")]
-[assembly: AssemblyFileVersion("1.1.5.2")]
+[assembly: AssemblyVersion("1.1.6.0")]
+[assembly: AssemblyFileVersion("1.1.6.0")]
diff --git a/RE2REmakeSRT/RE2REmakeSRT.csproj b/RE2REmakeSRT/RE2REmakeSRT.csproj
index db667a4..e2d76d5 100644
--- a/RE2REmakeSRT/RE2REmakeSRT.csproj
+++ b/RE2REmakeSRT/RE2REmakeSRT.csproj
@@ -72,16 +72,27 @@
+
+
+ Form
+
+
+ OptionsUI.cs
+
+
MainUI.cs
+
+ OptionsUI.cs
+
ResXFileCodeGenerator
Resources.Designer.cs
diff --git a/RE2REmakeSRT/REmake2VersionDetector.cs b/RE2REmakeSRT/REmake2VersionDetector.cs
index 09ebd59..1c775d6 100644
--- a/RE2REmakeSRT/REmake2VersionDetector.cs
+++ b/RE2REmakeSRT/REmake2VersionDetector.cs
@@ -20,7 +20,7 @@ private static byte[] GetSHA256Checksum(string filePath)
public static REmake2VersionEnumeration GetVersion(Process remake2Proc)
{
// If we're skipping the checksum version check, return the latest version we kow about.
- if (Program.programSpecialOptions.HasFlag(ProgramFlags.SkipChecksumCheck))
+ if (Program.programSpecialOptions.Flags.HasFlag(ProgramFlags.SkipChecksumCheck))
return REmake2VersionEnumeration.Stock_1p01;
byte[] processHash = GetSHA256Checksum(remake2Proc.MainModule.FileName);
diff --git a/RE2REmakeSRT/RegistryHelper.cs b/RE2REmakeSRT/RegistryHelper.cs
new file mode 100644
index 0000000..a345f9b
--- /dev/null
+++ b/RE2REmakeSRT/RegistryHelper.cs
@@ -0,0 +1,15 @@
+using Microsoft.Win32;
+
+namespace RE2REmakeSRT
+{
+ public static class RegistryHelper
+ {
+ public static T GetValue(RegistryKey baseKey, string valueKey, T defaultValue) => (T)baseKey.GetValue(valueKey, defaultValue);
+
+ public static bool GetBoolValue(RegistryKey baseKey, string valueKey, bool defaultValue)
+ {
+ int dwordValue = GetValue(baseKey, valueKey, (defaultValue) ? 1 : 0);
+ return (dwordValue == 0) ? false : true;
+ }
+ }
+}