Genesis GG decoder/encoder (working codes!) and revamped UI of SNES/GG/GB Decoders
This commit is contained in:
parent
df99f36464
commit
670460df8c
|
@ -370,6 +370,12 @@
|
|||
<Compile Include="NEStools\SpriteViewer.cs">
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
<Compile Include="GENtools\GenGameGenie.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="GENtools\GenGameGenie.Designer.cs">
|
||||
<DependentUpon>GenGameGenie.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="PCEtools\PCEBGCanvas.cs">
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
|
@ -568,6 +574,9 @@
|
|||
<EmbeddedResource Include="NEStools\NESSoundConfig.resx">
|
||||
<DependentUpon>NESSoundConfig.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="GENtools\GenGameGenie.resx">
|
||||
<DependentUpon>GenGameGenie.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="PCEtools\PCEBGViewer.resx">
|
||||
<DependentUpon>PCEBGViewer.cs</DependentUpon>
|
||||
</EmbeddedResource>
|
||||
|
|
|
@ -586,6 +586,12 @@ namespace BizHawk.MultiClient
|
|||
public int GBGGWndx = -1;
|
||||
public int GBGGWndy = -1;
|
||||
|
||||
// GEN Game Genie Encoder/Decoder
|
||||
public bool GENGGAutoload = false;
|
||||
public bool GENGGSaveWindowPosition = true;
|
||||
public int GENGGWndx = -1;
|
||||
public int GENGGWndy = -1;
|
||||
|
||||
//Movie Settings
|
||||
public RecentFiles RecentMovies = new RecentFiles(8);
|
||||
public bool AutoLoadMostRecentMovie = false;
|
||||
|
|
|
@ -28,15 +28,13 @@
|
|||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.GameGenieCode = new System.Windows.Forms.TextBox();
|
||||
this.GameGenieCodeBox = new System.Windows.Forms.GroupBox();
|
||||
this.GGCodeMaskBox = new System.Windows.Forms.MaskedTextBox();
|
||||
this.label3 = new System.Windows.Forms.Label();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.CompareBox = new BizHawk.HexTextBox();
|
||||
this.ValueBox = new BizHawk.HexTextBox();
|
||||
this.AddressBox = new BizHawk.HexTextBox();
|
||||
this.AddCheat = new System.Windows.Forms.Button();
|
||||
this.addcheatbt = new System.Windows.Forms.Button();
|
||||
this.ButtonPanel = new System.Windows.Forms.Panel();
|
||||
this.BF = new System.Windows.Forms.Button();
|
||||
this.BD = new System.Windows.Forms.Button();
|
||||
|
@ -56,7 +54,6 @@
|
|||
this.B0 = new System.Windows.Forms.Button();
|
||||
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
||||
this.label6 = new System.Windows.Forms.Label();
|
||||
this.label5 = new System.Windows.Forms.Label();
|
||||
this.label4 = new System.Windows.Forms.Label();
|
||||
this.ClearButton = new System.Windows.Forms.Button();
|
||||
this.menuStrip1 = new System.Windows.Forms.MenuStrip();
|
||||
|
@ -65,83 +62,66 @@
|
|||
this.saveWindowPositionToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.groupBox2 = new System.Windows.Forms.GroupBox();
|
||||
this.cheatname = new System.Windows.Forms.TextBox();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.label5 = new System.Windows.Forms.Label();
|
||||
this.CompareBox = new BizHawk.HexTextBox();
|
||||
this.GameGenieCodeBox.SuspendLayout();
|
||||
this.ButtonPanel.SuspendLayout();
|
||||
this.groupBox1.SuspendLayout();
|
||||
this.menuStrip1.SuspendLayout();
|
||||
this.groupBox2.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// GameGenieCode
|
||||
//
|
||||
this.GameGenieCode.CharacterCasing = System.Windows.Forms.CharacterCasing.Upper;
|
||||
this.GameGenieCode.Location = new System.Drawing.Point(8, 23);
|
||||
this.GameGenieCode.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.GameGenieCode.MaxLength = 9;
|
||||
this.GameGenieCode.Name = "GameGenieCode";
|
||||
this.GameGenieCode.Size = new System.Drawing.Size(113, 22);
|
||||
this.GameGenieCode.TabIndex = 20;
|
||||
this.GameGenieCode.TextChanged += new System.EventHandler(this.GameGenieCode_TextChanged);
|
||||
this.GameGenieCode.KeyDown += new System.Windows.Forms.KeyEventHandler(this.GameGenieCode_KeyDown);
|
||||
this.GameGenieCode.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.GameGenieCode_KeyPress);
|
||||
//
|
||||
// GameGenieCodeBox
|
||||
//
|
||||
this.GameGenieCodeBox.Controls.Add(this.GameGenieCode);
|
||||
this.GameGenieCodeBox.Controls.Add(this.GGCodeMaskBox);
|
||||
this.GameGenieCodeBox.Location = new System.Drawing.Point(41, 127);
|
||||
this.GameGenieCodeBox.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.GameGenieCodeBox.Name = "GameGenieCodeBox";
|
||||
this.GameGenieCodeBox.Padding = new System.Windows.Forms.Padding(4);
|
||||
this.GameGenieCodeBox.Size = new System.Drawing.Size(153, 66);
|
||||
this.GameGenieCodeBox.Size = new System.Drawing.Size(158, 66);
|
||||
this.GameGenieCodeBox.TabIndex = 1;
|
||||
this.GameGenieCodeBox.TabStop = false;
|
||||
this.GameGenieCodeBox.Text = "Game Genie Code";
|
||||
//
|
||||
// GGCodeMaskBox
|
||||
//
|
||||
this.GGCodeMaskBox.Location = new System.Drawing.Point(33, 32);
|
||||
this.GGCodeMaskBox.Mask = ">AAA-AAA-AAA";
|
||||
this.GGCodeMaskBox.Name = "GGCodeMaskBox";
|
||||
this.GGCodeMaskBox.Size = new System.Drawing.Size(99, 22);
|
||||
this.GGCodeMaskBox.TabIndex = 10;
|
||||
this.GGCodeMaskBox.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
|
||||
this.GGCodeMaskBox.TextMaskFormat = System.Windows.Forms.MaskFormat.ExcludePromptAndLiterals;
|
||||
this.GGCodeMaskBox.TextChanged += new System.EventHandler(this.GGCodeMaskBox_TextChanged);
|
||||
this.GGCodeMaskBox.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.GGCodeMaskBox_KeyPress);
|
||||
//
|
||||
// label3
|
||||
//
|
||||
this.label3.AutoSize = true;
|
||||
this.label3.Location = new System.Drawing.Point(11, 84);
|
||||
this.label3.Location = new System.Drawing.Point(11, 80);
|
||||
this.label3.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||
this.label3.Name = "label3";
|
||||
this.label3.Size = new System.Drawing.Size(44, 17);
|
||||
this.label3.TabIndex = 5;
|
||||
this.label3.Text = "Value";
|
||||
//
|
||||
// label2
|
||||
//
|
||||
this.label2.AutoSize = true;
|
||||
this.label2.Location = new System.Drawing.Point(11, 52);
|
||||
this.label2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||
this.label2.Name = "label2";
|
||||
this.label2.Size = new System.Drawing.Size(65, 17);
|
||||
this.label2.TabIndex = 4;
|
||||
this.label2.Text = "Compare";
|
||||
//
|
||||
// label1
|
||||
//
|
||||
this.label1.AutoSize = true;
|
||||
this.label1.Location = new System.Drawing.Point(11, 20);
|
||||
this.label1.Location = new System.Drawing.Point(11, 24);
|
||||
this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||
this.label1.Name = "label1";
|
||||
this.label1.Size = new System.Drawing.Size(60, 17);
|
||||
this.label1.TabIndex = 3;
|
||||
this.label1.Text = "Address";
|
||||
//
|
||||
// CompareBox
|
||||
//
|
||||
this.CompareBox.CharacterCasing = System.Windows.Forms.CharacterCasing.Upper;
|
||||
this.CompareBox.Location = new System.Drawing.Point(116, 48);
|
||||
this.CompareBox.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.CompareBox.MaxLength = 2;
|
||||
this.CompareBox.Name = "CompareBox";
|
||||
this.CompareBox.RightToLeft = System.Windows.Forms.RightToLeft.Yes;
|
||||
this.CompareBox.Size = new System.Drawing.Size(35, 22);
|
||||
this.CompareBox.TabIndex = 22;
|
||||
this.CompareBox.TextChanged += new System.EventHandler(this.CompareBox_TextChanged);
|
||||
//
|
||||
// ValueBox
|
||||
//
|
||||
this.ValueBox.CharacterCasing = System.Windows.Forms.CharacterCasing.Upper;
|
||||
this.ValueBox.Location = new System.Drawing.Point(116, 80);
|
||||
this.ValueBox.Location = new System.Drawing.Point(140, 75);
|
||||
this.ValueBox.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.ValueBox.MaxLength = 2;
|
||||
this.ValueBox.Name = "ValueBox";
|
||||
|
@ -153,26 +133,27 @@
|
|||
// AddressBox
|
||||
//
|
||||
this.AddressBox.CharacterCasing = System.Windows.Forms.CharacterCasing.Upper;
|
||||
this.AddressBox.Location = new System.Drawing.Point(100, 16);
|
||||
this.AddressBox.Location = new System.Drawing.Point(117, 20);
|
||||
this.AddressBox.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.AddressBox.MaxLength = 4;
|
||||
this.AddressBox.Name = "AddressBox";
|
||||
this.AddressBox.RightToLeft = System.Windows.Forms.RightToLeft.Yes;
|
||||
this.AddressBox.Size = new System.Drawing.Size(51, 22);
|
||||
this.AddressBox.Size = new System.Drawing.Size(58, 22);
|
||||
this.AddressBox.TabIndex = 21;
|
||||
this.AddressBox.TextChanged += new System.EventHandler(this.AddressBox_TextChanged);
|
||||
//
|
||||
// AddCheat
|
||||
// addcheatbt
|
||||
//
|
||||
this.AddCheat.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.AddCheat.Location = new System.Drawing.Point(269, 276);
|
||||
this.AddCheat.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.AddCheat.Name = "AddCheat";
|
||||
this.AddCheat.Size = new System.Drawing.Size(92, 26);
|
||||
this.AddCheat.TabIndex = 33;
|
||||
this.AddCheat.Text = "&Add Cheat";
|
||||
this.AddCheat.UseVisualStyleBackColor = true;
|
||||
this.AddCheat.Click += new System.EventHandler(this.AddCheat_Click);
|
||||
this.addcheatbt.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.addcheatbt.Enabled = false;
|
||||
this.addcheatbt.Location = new System.Drawing.Point(117, 201);
|
||||
this.addcheatbt.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.addcheatbt.Name = "addcheatbt";
|
||||
this.addcheatbt.Size = new System.Drawing.Size(82, 32);
|
||||
this.addcheatbt.TabIndex = 33;
|
||||
this.addcheatbt.Text = "&Add Cheat";
|
||||
this.addcheatbt.UseVisualStyleBackColor = true;
|
||||
this.addcheatbt.Click += new System.EventHandler(this.AddCheatClick);
|
||||
//
|
||||
// ButtonPanel
|
||||
//
|
||||
|
@ -193,7 +174,7 @@
|
|||
this.ButtonPanel.Controls.Add(this.B4);
|
||||
this.ButtonPanel.Controls.Add(this.B2);
|
||||
this.ButtonPanel.Controls.Add(this.B0);
|
||||
this.ButtonPanel.Location = new System.Drawing.Point(41, 37);
|
||||
this.ButtonPanel.Location = new System.Drawing.Point(47, 37);
|
||||
this.ButtonPanel.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.ButtonPanel.Name = "ButtonPanel";
|
||||
this.ButtonPanel.Size = new System.Drawing.Size(319, 82);
|
||||
|
@ -378,47 +359,38 @@
|
|||
// groupBox1
|
||||
//
|
||||
this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.groupBox1.Controls.Add(this.label6);
|
||||
this.groupBox1.Controls.Add(this.label2);
|
||||
this.groupBox1.Controls.Add(this.label5);
|
||||
this.groupBox1.Controls.Add(this.CompareBox);
|
||||
this.groupBox1.Controls.Add(this.label6);
|
||||
this.groupBox1.Controls.Add(this.label4);
|
||||
this.groupBox1.Controls.Add(this.label3);
|
||||
this.groupBox1.Controls.Add(this.label1);
|
||||
this.groupBox1.Controls.Add(this.label2);
|
||||
this.groupBox1.Controls.Add(this.AddressBox);
|
||||
this.groupBox1.Controls.Add(this.ValueBox);
|
||||
this.groupBox1.Controls.Add(this.CompareBox);
|
||||
this.groupBox1.Location = new System.Drawing.Point(41, 201);
|
||||
this.groupBox1.Location = new System.Drawing.Point(207, 127);
|
||||
this.groupBox1.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.groupBox1.Name = "groupBox1";
|
||||
this.groupBox1.Padding = new System.Windows.Forms.Padding(4);
|
||||
this.groupBox1.Size = new System.Drawing.Size(168, 114);
|
||||
this.groupBox1.Size = new System.Drawing.Size(183, 101);
|
||||
this.groupBox1.TabIndex = 5;
|
||||
this.groupBox1.TabStop = false;
|
||||
this.groupBox1.Text = "Decoded Value";
|
||||
//
|
||||
// label6
|
||||
//
|
||||
this.label6.AutoSize = true;
|
||||
this.label6.Location = new System.Drawing.Point(92, 85);
|
||||
this.label6.Location = new System.Drawing.Point(116, 80);
|
||||
this.label6.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||
this.label6.Name = "label6";
|
||||
this.label6.Size = new System.Drawing.Size(22, 17);
|
||||
this.label6.TabIndex = 9;
|
||||
this.label6.Text = "0x";
|
||||
//
|
||||
// label5
|
||||
//
|
||||
this.label5.AutoSize = true;
|
||||
this.label5.Location = new System.Drawing.Point(92, 52);
|
||||
this.label5.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||
this.label5.Name = "label5";
|
||||
this.label5.Size = new System.Drawing.Size(22, 17);
|
||||
this.label5.TabIndex = 8;
|
||||
this.label5.Text = "0x";
|
||||
//
|
||||
// label4
|
||||
//
|
||||
this.label4.AutoSize = true;
|
||||
this.label4.Location = new System.Drawing.Point(76, 20);
|
||||
this.label4.Location = new System.Drawing.Point(76, 24);
|
||||
this.label4.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||
this.label4.Name = "label4";
|
||||
this.label4.Size = new System.Drawing.Size(22, 17);
|
||||
|
@ -428,10 +400,9 @@
|
|||
// ClearButton
|
||||
//
|
||||
this.ClearButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.ClearButton.Location = new System.Drawing.Point(288, 201);
|
||||
this.ClearButton.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.ClearButton.Location = new System.Drawing.Point(41, 201);
|
||||
this.ClearButton.Name = "ClearButton";
|
||||
this.ClearButton.Size = new System.Drawing.Size(72, 28);
|
||||
this.ClearButton.Size = new System.Drawing.Size(72, 32);
|
||||
this.ClearButton.TabIndex = 32;
|
||||
this.ClearButton.Text = "&Clear";
|
||||
this.ClearButton.UseVisualStyleBackColor = true;
|
||||
|
@ -487,15 +458,65 @@
|
|||
this.exitToolStripMenuItem.Text = "E&xit";
|
||||
this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click);
|
||||
//
|
||||
// groupBox2
|
||||
//
|
||||
this.groupBox2.Controls.Add(this.cheatname);
|
||||
this.groupBox2.Location = new System.Drawing.Point(41, 242);
|
||||
this.groupBox2.Name = "groupBox2";
|
||||
this.groupBox2.Size = new System.Drawing.Size(349, 61);
|
||||
this.groupBox2.TabIndex = 24;
|
||||
this.groupBox2.TabStop = false;
|
||||
this.groupBox2.Text = "Cheat Title (Uses GG code if left empty)";
|
||||
//
|
||||
// cheatname
|
||||
//
|
||||
this.cheatname.Location = new System.Drawing.Point(24, 28);
|
||||
this.cheatname.Name = "cheatname";
|
||||
this.cheatname.Size = new System.Drawing.Size(301, 22);
|
||||
this.cheatname.TabIndex = 0;
|
||||
//
|
||||
// label2
|
||||
//
|
||||
this.label2.AutoSize = true;
|
||||
this.label2.Location = new System.Drawing.Point(116, 52);
|
||||
this.label2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||
this.label2.Name = "label2";
|
||||
this.label2.Size = new System.Drawing.Size(22, 17);
|
||||
this.label2.TabIndex = 25;
|
||||
this.label2.Text = "0x";
|
||||
//
|
||||
// label5
|
||||
//
|
||||
this.label5.AutoSize = true;
|
||||
this.label5.Location = new System.Drawing.Point(11, 52);
|
||||
this.label5.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||
this.label5.Name = "label5";
|
||||
this.label5.Size = new System.Drawing.Size(65, 17);
|
||||
this.label5.TabIndex = 24;
|
||||
this.label5.Text = "Compare";
|
||||
//
|
||||
// CompareBox
|
||||
//
|
||||
this.CompareBox.CharacterCasing = System.Windows.Forms.CharacterCasing.Upper;
|
||||
this.CompareBox.Location = new System.Drawing.Point(140, 47);
|
||||
this.CompareBox.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.CompareBox.MaxLength = 2;
|
||||
this.CompareBox.Name = "CompareBox";
|
||||
this.CompareBox.RightToLeft = System.Windows.Forms.RightToLeft.Yes;
|
||||
this.CompareBox.Size = new System.Drawing.Size(35, 22);
|
||||
this.CompareBox.TabIndex = 26;
|
||||
this.CompareBox.TextChanged += new System.EventHandler(this.CompareBox_TextChanged);
|
||||
//
|
||||
// GBGameGenie
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(403, 315);
|
||||
this.Controls.Add(this.groupBox2);
|
||||
this.Controls.Add(this.ClearButton);
|
||||
this.Controls.Add(this.groupBox1);
|
||||
this.Controls.Add(this.ButtonPanel);
|
||||
this.Controls.Add(this.AddCheat);
|
||||
this.Controls.Add(this.addcheatbt);
|
||||
this.Controls.Add(this.GameGenieCodeBox);
|
||||
this.Controls.Add(this.menuStrip1);
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D;
|
||||
|
@ -507,7 +528,6 @@
|
|||
this.Name = "GBGameGenie";
|
||||
this.ShowIcon = false;
|
||||
this.Text = "Game Genie Encoder / Decoder";
|
||||
this.Load += new System.EventHandler(this.GBGameGenie_Load);
|
||||
this.GameGenieCodeBox.ResumeLayout(false);
|
||||
this.GameGenieCodeBox.PerformLayout();
|
||||
this.ButtonPanel.ResumeLayout(false);
|
||||
|
@ -515,6 +535,8 @@
|
|||
this.groupBox1.PerformLayout();
|
||||
this.menuStrip1.ResumeLayout(false);
|
||||
this.menuStrip1.PerformLayout();
|
||||
this.groupBox2.ResumeLayout(false);
|
||||
this.groupBox2.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
|
@ -522,15 +544,12 @@
|
|||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.TextBox GameGenieCode;
|
||||
private System.Windows.Forms.GroupBox GameGenieCodeBox;
|
||||
private System.Windows.Forms.Label label3;
|
||||
private System.Windows.Forms.Label label2;
|
||||
private System.Windows.Forms.Label label1;
|
||||
private HexTextBox CompareBox;
|
||||
private System.Windows.Forms.GroupBox GameGenieCodeBox;
|
||||
private System.Windows.Forms.Label label3;
|
||||
private System.Windows.Forms.Label label1;
|
||||
private HexTextBox ValueBox;
|
||||
private HexTextBox AddressBox;
|
||||
private System.Windows.Forms.Button AddCheat;
|
||||
private System.Windows.Forms.Button addcheatbt;
|
||||
private System.Windows.Forms.Panel ButtonPanel;
|
||||
private System.Windows.Forms.Button B6;
|
||||
private System.Windows.Forms.Button B4;
|
||||
|
@ -549,8 +568,7 @@
|
|||
private System.Windows.Forms.Button B3;
|
||||
private System.Windows.Forms.Button B1;
|
||||
private System.Windows.Forms.GroupBox groupBox1;
|
||||
private System.Windows.Forms.Label label6;
|
||||
private System.Windows.Forms.Label label5;
|
||||
private System.Windows.Forms.Label label6;
|
||||
private System.Windows.Forms.Label label4;
|
||||
private System.Windows.Forms.Button ClearButton;
|
||||
private System.Windows.Forms.MenuStrip menuStrip1;
|
||||
|
@ -558,6 +576,12 @@
|
|||
private System.Windows.Forms.ToolStripMenuItem autoloadToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem saveWindowPositionToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
|
||||
private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem;
|
||||
private System.Windows.Forms.MaskedTextBox GGCodeMaskBox;
|
||||
private System.Windows.Forms.GroupBox groupBox2;
|
||||
private System.Windows.Forms.TextBox cheatname;
|
||||
private System.Windows.Forms.Label label2;
|
||||
private System.Windows.Forms.Label label5;
|
||||
private HexTextBox CompareBox;
|
||||
}
|
||||
}
|
|
@ -3,19 +3,16 @@ using System.Collections.Generic;
|
|||
using System.Drawing;
|
||||
using System.Windows.Forms;
|
||||
using System.Globalization;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace BizHawk.MultiClient
|
||||
{
|
||||
public partial class GBGameGenie : Form
|
||||
{
|
||||
public int Address = -1;
|
||||
public int Value = -1;
|
||||
public int Compare = -1;
|
||||
private readonly Dictionary<char, int> GameGenieTable = new Dictionary<char, int>();
|
||||
private bool Decoding = false;
|
||||
private bool Encoding = false;
|
||||
private bool Processing = false;
|
||||
|
||||
public GBGameGenie()
|
||||
public GBGameGenie()
|
||||
{
|
||||
InitializeComponent();
|
||||
Closing += (o, e) => SaveConfigSettings();
|
||||
|
@ -38,84 +35,53 @@ namespace BizHawk.MultiClient
|
|||
GameGenieTable.Add('F', 15); //1111
|
||||
}
|
||||
|
||||
private void GBGameGenie_Load(object sender, EventArgs e)
|
||||
public void GBGGDecode(string code, ref int val, ref int add, ref int cmp)
|
||||
{
|
||||
AddCheat.Enabled = false;
|
||||
|
||||
if (Global.Config.GBGGSaveWindowPosition && Global.Config.GBGGWndx >= 0 && Global.Config.GBGGWndy >= 0)
|
||||
Location = new Point(Global.Config.GBGGWndx, Global.Config.GBGGWndy);
|
||||
}
|
||||
|
||||
private void SaveConfigSettings()
|
||||
{
|
||||
Global.Config.GBGGWndx = Location.X;
|
||||
Global.Config.GBGGWndy = Location.Y;
|
||||
}
|
||||
|
||||
private void GameGenieCode_KeyPress(object sender, KeyPressEventArgs e)
|
||||
{
|
||||
//Make uppercase
|
||||
if (e.KeyChar >= 97 && e.KeyChar < 123)
|
||||
e.KeyChar -= (char)32;
|
||||
|
||||
if (!(GameGenieTable.ContainsKey(e.KeyChar)))
|
||||
{
|
||||
if (e.KeyChar != (char)Keys.Back || e.KeyChar == '\b' || e.KeyChar == 22 || e.KeyChar == 1 || e.KeyChar == 3)
|
||||
{
|
||||
e.Handled = true;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void GBDecodeGameGenieCode(string code)
|
||||
{
|
||||
//No cypher on value
|
||||
//Char # | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|
||||
//Bit # |3|2|1|0|3|2|1|0|3|2|1|0|3|2|1|0|3|2|1|0|3|2|1|0|3|2|1|0|3|2|1|0|3|2|1|0|
|
||||
//maps to| Value |A|B|C|D|E|F|G|H|I|J|K|L|XOR 0xF|a|b|c|c|NotUsed|e|f|g|h|
|
||||
//proper | Value |XOR 0xF|A|B|C|D|E|F|G|H|I|J|K|L|g|h|a|b|Nothing|c|d|e|f|
|
||||
|
||||
int x;
|
||||
byte[] val = { 0, 0 };
|
||||
|
||||
int x;
|
||||
// Getting Value
|
||||
if (code.Length > 0)
|
||||
{
|
||||
GameGenieTable.TryGetValue(code[0], out x);
|
||||
Value = x << 4;
|
||||
val = x << 4;
|
||||
}
|
||||
|
||||
if (code.Length > 1)
|
||||
{
|
||||
GameGenieTable.TryGetValue(code[1], out x);
|
||||
Value |= x;
|
||||
val |= x;
|
||||
}
|
||||
//Address
|
||||
if (code.Length > 2)
|
||||
{
|
||||
GameGenieTable.TryGetValue(code[2], out x);
|
||||
Address = (x << 8);
|
||||
add = (x << 8);
|
||||
}
|
||||
else
|
||||
Address = -1;
|
||||
add = -1;
|
||||
|
||||
if (code.Length > 3)
|
||||
{
|
||||
GameGenieTable.TryGetValue(code[3], out x);
|
||||
Address |= (x << 4);
|
||||
add |= (x << 4);
|
||||
}
|
||||
|
||||
if (code.Length > 4)
|
||||
{
|
||||
GameGenieTable.TryGetValue(code[4], out x);
|
||||
Address |= x;
|
||||
add |= x;
|
||||
}
|
||||
|
||||
if (code.Length > 5)
|
||||
{
|
||||
GameGenieTable.TryGetValue(code[5], out x);
|
||||
Address |= ((x ^ 0xF) <<12);
|
||||
add |= ((x ^ 0xF) << 12);
|
||||
}
|
||||
// compare need to be full
|
||||
if (code.Length > 8)
|
||||
|
@ -127,188 +93,29 @@ namespace BizHawk.MultiClient
|
|||
GameGenieTable.TryGetValue(code[8], out x);
|
||||
comp |= ((x & 0xC) >> 2);
|
||||
comp |= ((x & 0x3) << 6);
|
||||
Compare = comp ^ 0xBA;
|
||||
cmp = comp ^ 0xBA;
|
||||
}
|
||||
else
|
||||
Compare = -1;
|
||||
cmp = -1;
|
||||
|
||||
SetProperties();
|
||||
}
|
||||
|
||||
private void SetProperties()
|
||||
{
|
||||
if (Address >= 0)
|
||||
AddressBox.Text = String.Format("{0:X4}", Address);
|
||||
else
|
||||
AddressBox.Text = "";
|
||||
|
||||
if (Compare >= 0)
|
||||
CompareBox.Text = String.Format("{0:X2}", Compare);
|
||||
else
|
||||
CompareBox.Text = "";
|
||||
|
||||
if (Value >= 0)
|
||||
ValueBox.Text = String.Format("{0:X2}", Value);
|
||||
|
||||
}
|
||||
|
||||
private void ClearProperties()
|
||||
{
|
||||
bool tempenc = Encoding;
|
||||
bool tempdec = Decoding;
|
||||
Encoding = true;
|
||||
Decoding = true;
|
||||
Address = -1;
|
||||
Value = -1;
|
||||
Compare = -1;
|
||||
AddressBox.Text = "";
|
||||
CompareBox.Text = "";
|
||||
ValueBox.Text = "";
|
||||
AddCheat.Enabled = false;
|
||||
Encoding = tempenc;
|
||||
Decoding = tempdec;
|
||||
}
|
||||
|
||||
private void GameGenieCode_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
if (Encoding == false)
|
||||
{
|
||||
if (GameGenieCode.Text.Length > 0)
|
||||
{
|
||||
Decoding = true;
|
||||
GBDecodeGameGenieCode(GameGenieCode.Text);
|
||||
}
|
||||
else
|
||||
ClearProperties();
|
||||
}
|
||||
TryEnableAddCheat();
|
||||
Decoding = false;
|
||||
}
|
||||
|
||||
private void Keypad_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (GameGenieCode.Text.Length < 9)
|
||||
{
|
||||
string code = "";
|
||||
if (sender == B0) code = "0";
|
||||
if (sender == B1) code += "1";
|
||||
if (sender == B2) code += "2";
|
||||
if (sender == B3) code += "3";
|
||||
if (sender == B4) code += "4";
|
||||
if (sender == B5) code += "5";
|
||||
if (sender == B6) code += "6";
|
||||
if (sender == B7) code += "7";
|
||||
if (sender == B8) code += "8";
|
||||
if (sender == B9) code += "9";
|
||||
if (sender == BA) code += "A";
|
||||
if (sender == BB) code += "B";
|
||||
if (sender == BC) code += "C";
|
||||
if (sender == BD) code += "D";
|
||||
if (sender == BE) code += "E";
|
||||
if (sender == BF) code += "F";
|
||||
|
||||
int x = GameGenieCode.SelectionStart;
|
||||
GameGenieCode.Text = GameGenieCode.Text.Insert(x, code);
|
||||
GameGenieCode.SelectionStart = x + 1;
|
||||
}
|
||||
}
|
||||
|
||||
private void AddressBox_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (Decoding == false)
|
||||
{
|
||||
if (AddressBox.Text.Length > 0)
|
||||
{
|
||||
Address = int.Parse(AddressBox.Text, NumberStyles.HexNumber);
|
||||
if (ValueBox.Text.Length > 0)
|
||||
Value = int.Parse(ValueBox.Text, NumberStyles.HexNumber);
|
||||
else
|
||||
Value = 0;
|
||||
if (CompareBox.Text.Length == 2)
|
||||
Compare = int.Parse(CompareBox.Text, NumberStyles.HexNumber);
|
||||
else
|
||||
Compare = 0;
|
||||
Encoding = true;
|
||||
GBEncodeGameGenie();
|
||||
Encoding = false;
|
||||
}
|
||||
}
|
||||
|
||||
TryEnableAddCheat();
|
||||
}
|
||||
|
||||
private void CompareBox_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (Decoding == false)
|
||||
{
|
||||
if (CompareBox.Text.Length == 2)
|
||||
Compare = int.Parse(CompareBox.Text, NumberStyles.HexNumber);
|
||||
if (AddressBox.Text.Length > 0)
|
||||
Address = int.Parse(AddressBox.Text, NumberStyles.HexNumber);
|
||||
else
|
||||
Address = 0x0000;
|
||||
if (ValueBox.Text.Length > 0)
|
||||
Value = int.Parse(ValueBox.Text, NumberStyles.HexNumber);
|
||||
else
|
||||
Value = 0;
|
||||
Encoding = true;
|
||||
GBEncodeGameGenie();
|
||||
Encoding = false;
|
||||
|
||||
}
|
||||
TryEnableAddCheat();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void TryEnableAddCheat()
|
||||
{
|
||||
if (AddressBox.Text.Length == 4 && ValueBox.Text.Length == 2)
|
||||
AddCheat.Enabled = true;
|
||||
else
|
||||
AddCheat.Enabled = false;
|
||||
}
|
||||
|
||||
private void ValueBox_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (Decoding == false)
|
||||
{
|
||||
if (ValueBox.Text.Length > 0)
|
||||
{
|
||||
if (AddressBox.Text.Length > 0)
|
||||
Address = int.Parse(AddressBox.Text, NumberStyles.HexNumber);
|
||||
else
|
||||
Address = 0x0000;
|
||||
if (CompareBox.Text.Length == 2)
|
||||
Compare = int.Parse(CompareBox.Text, NumberStyles.HexNumber);
|
||||
else
|
||||
Compare = 0;
|
||||
Value = int.Parse(ValueBox.Text, NumberStyles.HexNumber);
|
||||
Encoding = true;
|
||||
GBEncodeGameGenie();
|
||||
Encoding = false;
|
||||
}
|
||||
}
|
||||
TryEnableAddCheat();
|
||||
}
|
||||
|
||||
private void GBEncodeGameGenie()
|
||||
private string GBGGEncode(int val, int add, int cmp)
|
||||
{
|
||||
char[] letters = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
|
||||
GameGenieCode.Text = "";
|
||||
string code = "";
|
||||
int[] num = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
|
||||
num[0] = (Value & 0xF0) >> 4;
|
||||
num[1] = Value & 0x0F;
|
||||
num[0] = (val & 0xF0) >> 4;
|
||||
num[1] = val & 0x0F;
|
||||
|
||||
num[2] = (Address & 0x0F00) >> 8;
|
||||
num[3] = (Address & 0x00F0) >> 4;
|
||||
num[4] = (Address & 0x000F);
|
||||
num[5] = (((Address & 0xF000) >> 12) ^ 0xF);
|
||||
if (CompareBox.Text.Length == 2)
|
||||
num[2] = (add & 0x0F00) >> 8;
|
||||
num[3] = (add & 0x00F0) >> 4;
|
||||
num[4] = (add & 0x000F);
|
||||
num[5] = (((add & 0xF000) >> 12) ^ 0xF);
|
||||
if (cmp > -1)
|
||||
{
|
||||
|
||||
int xoredcomp = ((Compare &0xFF) ^ 0xBA);
|
||||
|
||||
int xoredcomp = ((cmp & 0xFF) ^ 0xBA);
|
||||
num[6] = ((xoredcomp & 0x30) >> 2);
|
||||
num[6] |= ((xoredcomp & 0x0C) >> 2);
|
||||
// 8th char has no real use (its value is not reflected in the address:value:compare
|
||||
|
@ -316,45 +123,251 @@ namespace BizHawk.MultiClient
|
|||
// to get back what the original code had (Might be more to it)
|
||||
num[7] = num[6] ^ 8;
|
||||
num[8] = ((xoredcomp & 0xC0) >> 6);
|
||||
num[8] |= ((xoredcomp &0x03) << 2);
|
||||
num[8] |= ((xoredcomp & 0x03) << 2);
|
||||
for (int x = 0; x < 9; x++)
|
||||
GameGenieCode.Text += letters[num[x]];
|
||||
}
|
||||
code += letters[num[x]];
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int x = 0; x < 6; x++)
|
||||
GameGenieCode.Text += letters[num[x]];
|
||||
code += letters[num[x]];
|
||||
}
|
||||
return code;
|
||||
}
|
||||
private void GBGameGenie_Load(object sender, EventArgs e)
|
||||
{
|
||||
addcheatbt.Enabled = false;
|
||||
|
||||
if (Global.Config.GBGGSaveWindowPosition && Global.Config.GBGGWndx >= 0 && Global.Config.GBGGWndy >= 0)
|
||||
Location = new Point(Global.Config.GBGGWndx, Global.Config.GBGGWndy);
|
||||
}
|
||||
|
||||
private void SaveConfigSettings()
|
||||
{
|
||||
Global.Config.GBGGWndx = Location.X;
|
||||
Global.Config.GBGGWndy = Location.Y;
|
||||
}
|
||||
|
||||
private void GGCodeMaskBox_KeyPress(object sender, KeyPressEventArgs e)
|
||||
{
|
||||
// Find a better way to remove all NON HEX char, while still allowing copy/paste
|
||||
//Right now its all done through removing em GGCodeMaskBox_TextChanged
|
||||
}
|
||||
|
||||
private void GGCodeMaskBox_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
if (Processing == false)
|
||||
{
|
||||
Processing = true;
|
||||
//insert REGEX Remove non HEXA char
|
||||
if (Regex.IsMatch(GGCodeMaskBox.Text, @"[^a-fA-F0-9]"))
|
||||
{
|
||||
string temp = Regex.Replace(GGCodeMaskBox.Text, @"[^a-fA-F0-9]", string.Empty);
|
||||
GGCodeMaskBox.Text = temp;
|
||||
}
|
||||
|
||||
if (GGCodeMaskBox.Text.Length > 0)
|
||||
{
|
||||
int val = -1;
|
||||
int add = -1;
|
||||
int cmp = -1;
|
||||
GBGGDecode(GGCodeMaskBox.Text, ref val, ref add, ref cmp);
|
||||
if (add > -1)
|
||||
AddressBox.Text = String.Format("{0:X4}", add);
|
||||
if (val > -1)
|
||||
ValueBox.Text = String.Format("{0:X2}", val);
|
||||
if (cmp > -1)
|
||||
CompareBox.Text = String.Format("{0:X2}", cmp);
|
||||
else
|
||||
CompareBox.Text = "";
|
||||
|
||||
addcheatbt.Enabled = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
AddressBox.Text = "";
|
||||
ValueBox.Text = "";
|
||||
CompareBox.Text = "";
|
||||
addcheatbt.Enabled = false;
|
||||
}
|
||||
Processing = false;
|
||||
}
|
||||
}
|
||||
|
||||
private void Keypad_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (GGCodeMaskBox.Text.Length < 9)
|
||||
{
|
||||
string code = "";
|
||||
if (sender == B0) code = "0";
|
||||
if (sender == B1) code = "1";
|
||||
if (sender == B2) code = "2";
|
||||
if (sender == B3) code = "3";
|
||||
if (sender == B4) code = "4";
|
||||
if (sender == B5) code = "5";
|
||||
if (sender == B6) code = "6";
|
||||
if (sender == B7) code = "7";
|
||||
if (sender == B8) code = "8";
|
||||
if (sender == B9) code = "9";
|
||||
if (sender == BA) code = "A";
|
||||
if (sender == BB) code = "B";
|
||||
if (sender == BC) code = "C";
|
||||
if (sender == BD) code = "D";
|
||||
if (sender == BE) code = "E";
|
||||
if (sender == BF) code = "F";
|
||||
|
||||
GGCodeMaskBox.Text += code;
|
||||
//int x = GGCodeMaskBox.SelectionStart;
|
||||
//GGCodeMaskBox.Text = GGCodeMaskBox.Text.Insert(x, code);
|
||||
//GGCodeMaskBox.SelectionStart = x + 1;
|
||||
}
|
||||
}
|
||||
|
||||
private void AddressBox_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
//remove invalid character when pasted
|
||||
if (Processing == false)
|
||||
{
|
||||
Processing = true;
|
||||
if (Regex.IsMatch(AddressBox.Text, @"[^a-fA-F0-9]"))
|
||||
{
|
||||
string temp = Regex.Replace(AddressBox.Text, @"[^a-fA-F0-9]", string.Empty);
|
||||
AddressBox.Text = temp;
|
||||
}
|
||||
if ((AddressBox.Text.Length > 0) || (ValueBox.Text.Length > 0))
|
||||
{
|
||||
int val = 0;
|
||||
int add = 0;
|
||||
int cmp = -1;
|
||||
if (ValueBox.Text.Length > 0)
|
||||
val = int.Parse(ValueBox.Text, NumberStyles.HexNumber);
|
||||
if (AddressBox.Text.Length > 0)
|
||||
add = int.Parse(AddressBox.Text, NumberStyles.HexNumber);
|
||||
if (CompareBox.Text.Length == 2)
|
||||
cmp = int.Parse(CompareBox.Text, NumberStyles.HexNumber);
|
||||
|
||||
GGCodeMaskBox.Text = GBGGEncode(val, add, cmp);
|
||||
addcheatbt.Enabled = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
GGCodeMaskBox.Text = "";
|
||||
addcheatbt.Enabled = false;
|
||||
}
|
||||
Processing = false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
private void ValueBox_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (Processing == false)
|
||||
{
|
||||
Processing = true;
|
||||
//remove invalid character when pasted
|
||||
if (Regex.IsMatch(ValueBox.Text, @"[^a-fA-F0-9]"))
|
||||
{
|
||||
string temp = Regex.Replace(ValueBox.Text, @"[^a-fA-F0-9]", string.Empty);
|
||||
ValueBox.Text = temp;
|
||||
}
|
||||
if ((AddressBox.Text.Length > 0) || (ValueBox.Text.Length > 0))
|
||||
{
|
||||
int val = 0;
|
||||
int add = 0;
|
||||
int cmp = -1;
|
||||
if (ValueBox.Text.Length > 0)
|
||||
val = int.Parse(ValueBox.Text, NumberStyles.HexNumber);
|
||||
if (AddressBox.Text.Length > 0)
|
||||
add = int.Parse(AddressBox.Text, NumberStyles.HexNumber);
|
||||
if (CompareBox.Text.Length == 2)
|
||||
cmp = int.Parse(CompareBox.Text, NumberStyles.HexNumber);
|
||||
GGCodeMaskBox.Text = GBGGEncode(val, add, cmp);
|
||||
addcheatbt.Enabled = true;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
GGCodeMaskBox.Text = "";
|
||||
addcheatbt.Enabled = false;
|
||||
}
|
||||
Processing = false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void CompareBox_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (Processing == false)
|
||||
{
|
||||
Processing = true;
|
||||
//remove invalid character when pasted
|
||||
if (Regex.IsMatch(CompareBox.Text, @"[^a-fA-F0-9]"))
|
||||
{
|
||||
string temp = Regex.Replace(CompareBox.Text, @"[^a-fA-F0-9]", string.Empty);
|
||||
CompareBox.Text = temp;
|
||||
}
|
||||
if ((CompareBox.Text.Length == 2) || (CompareBox.Text.Length == 0))
|
||||
{
|
||||
if ((AddressBox.Text.Length > 0) || (ValueBox.Text.Length > 0))
|
||||
{
|
||||
int val = 0;
|
||||
int add = 0;
|
||||
int cmp = -1;
|
||||
if (ValueBox.Text.Length > 0)
|
||||
val = int.Parse(ValueBox.Text, NumberStyles.HexNumber);
|
||||
if (AddressBox.Text.Length > 0)
|
||||
add = int.Parse(AddressBox.Text, NumberStyles.HexNumber);
|
||||
if (CompareBox.Text.Length == 2)
|
||||
cmp = int.Parse(CompareBox.Text, NumberStyles.HexNumber);
|
||||
GGCodeMaskBox.Text = GBGGEncode(val, add, cmp);
|
||||
addcheatbt.Enabled = true;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
GGCodeMaskBox.Text = "";
|
||||
addcheatbt.Enabled = false;
|
||||
}
|
||||
}
|
||||
Processing = false;
|
||||
}
|
||||
}
|
||||
|
||||
private void ClearButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
ClearProperties();
|
||||
GameGenieCode.Text = "";
|
||||
|
||||
AddressBox.Text = "";
|
||||
ValueBox.Text = "";
|
||||
CompareBox.Text = "";
|
||||
GGCodeMaskBox.Text = "";
|
||||
addcheatbt.Enabled = false;
|
||||
}
|
||||
|
||||
private void AddCheat_Click(object sender, EventArgs e)
|
||||
private void AddCheatClick(object sender, EventArgs e)
|
||||
{
|
||||
AddCheatClick();
|
||||
}
|
||||
|
||||
private void AddCheatClick()
|
||||
{
|
||||
Cheat c = new Cheat {name = GameGenieCode.Text};
|
||||
Cheat c = new Cheat();
|
||||
if (cheatname.Text.Length > 0)
|
||||
c.name = cheatname.Text;
|
||||
else
|
||||
{
|
||||
Processing = true;
|
||||
GGCodeMaskBox.TextMaskFormat = MaskFormat.IncludeLiterals;
|
||||
c.name = GGCodeMaskBox.Text;
|
||||
GGCodeMaskBox.TextMaskFormat = MaskFormat.ExcludePromptAndLiterals;
|
||||
Processing = false;
|
||||
}
|
||||
|
||||
if (String.IsNullOrWhiteSpace(AddressBox.Text))
|
||||
{
|
||||
return;
|
||||
}
|
||||
else if (String.IsNullOrWhiteSpace(ValueBox.Text))
|
||||
{
|
||||
return;
|
||||
}
|
||||
c.address = int.Parse(AddressBox.Text, NumberStyles.HexNumber);
|
||||
c.value = byte.Parse(ValueBox.Text, NumberStyles.HexNumber);
|
||||
c.address = 0;
|
||||
else
|
||||
c.address = int.Parse(AddressBox.Text, NumberStyles.HexNumber);
|
||||
|
||||
if (String.IsNullOrWhiteSpace(ValueBox.Text))
|
||||
c.value = 0;
|
||||
else
|
||||
c.value = (byte)((int.Parse(ValueBox.Text, NumberStyles.HexNumber) & 0xFF00) >> 8);
|
||||
|
||||
if (!String.IsNullOrWhiteSpace(CompareBox.Text))
|
||||
{
|
||||
|
@ -371,15 +384,15 @@ namespace BizHawk.MultiClient
|
|||
{
|
||||
c.compare = null;
|
||||
}
|
||||
c.Enable();
|
||||
for (int x = 0; x < Global.Emulator.MemoryDomains.Count; x++)
|
||||
|
||||
if (Global.Emulator.MemoryDomains[x].ToString() == "System Bus")
|
||||
{
|
||||
c.domain = Global.Emulator.MemoryDomains[x]; //Bus
|
||||
c.domain = Global.Emulator.MemoryDomains[x];
|
||||
c.Enable();
|
||||
Global.MainForm.Cheats1.AddCheat(c);
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
|
@ -403,15 +416,6 @@ namespace BizHawk.MultiClient
|
|||
saveWindowPositionToolStripMenuItem.Checked = Global.Config.GBGGSaveWindowPosition;
|
||||
}
|
||||
|
||||
private void GameGenieCode_KeyDown(object sender, KeyEventArgs e)
|
||||
{
|
||||
if (e.KeyData == Keys.Enter)
|
||||
{
|
||||
if (AddCheat.Enabled)
|
||||
{
|
||||
AddCheatClick();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,304 @@
|
|||
namespace BizHawk.MultiClient
|
||||
{
|
||||
partial class GenGameGenie
|
||||
{
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Windows Form Designer generated code
|
||||
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.menuStrip1 = new System.Windows.Forms.MenuStrip();
|
||||
this.optionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.autoloadToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.saveWindowPositionToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.GGCodeMaskBox = new System.Windows.Forms.MaskedTextBox();
|
||||
this.addcheatbt = new System.Windows.Forms.Button();
|
||||
this.GameGenieCodeBox = new System.Windows.Forms.GroupBox();
|
||||
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
||||
this.ValueBox = new BizHawk.HexTextBox();
|
||||
this.AddressBox = new BizHawk.HexTextBox();
|
||||
this.label6 = new System.Windows.Forms.Label();
|
||||
this.label4 = new System.Windows.Forms.Label();
|
||||
this.label3 = new System.Windows.Forms.Label();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.ClearBT = new System.Windows.Forms.Button();
|
||||
this.groupBox2 = new System.Windows.Forms.GroupBox();
|
||||
this.cheatname = new System.Windows.Forms.TextBox();
|
||||
this.menuStrip1.SuspendLayout();
|
||||
this.GameGenieCodeBox.SuspendLayout();
|
||||
this.groupBox1.SuspendLayout();
|
||||
this.groupBox2.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// menuStrip1
|
||||
//
|
||||
this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.optionsToolStripMenuItem});
|
||||
this.menuStrip1.Location = new System.Drawing.Point(0, 0);
|
||||
this.menuStrip1.Name = "menuStrip1";
|
||||
this.menuStrip1.Padding = new System.Windows.Forms.Padding(8, 2, 0, 2);
|
||||
this.menuStrip1.Size = new System.Drawing.Size(403, 28);
|
||||
this.menuStrip1.TabIndex = 8;
|
||||
this.menuStrip1.Text = "menuStrip1";
|
||||
//
|
||||
// optionsToolStripMenuItem
|
||||
//
|
||||
this.optionsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.autoloadToolStripMenuItem,
|
||||
this.saveWindowPositionToolStripMenuItem,
|
||||
this.toolStripSeparator1,
|
||||
this.exitToolStripMenuItem});
|
||||
this.optionsToolStripMenuItem.Name = "optionsToolStripMenuItem";
|
||||
this.optionsToolStripMenuItem.Size = new System.Drawing.Size(73, 24);
|
||||
this.optionsToolStripMenuItem.Text = "&Options";
|
||||
//
|
||||
// autoloadToolStripMenuItem
|
||||
//
|
||||
this.autoloadToolStripMenuItem.Name = "autoloadToolStripMenuItem";
|
||||
this.autoloadToolStripMenuItem.Size = new System.Drawing.Size(225, 24);
|
||||
this.autoloadToolStripMenuItem.Text = "Auto-load";
|
||||
this.autoloadToolStripMenuItem.Click += new System.EventHandler(this.autoloadToolStripMenuItem_Click);
|
||||
//
|
||||
// saveWindowPositionToolStripMenuItem
|
||||
//
|
||||
this.saveWindowPositionToolStripMenuItem.Name = "saveWindowPositionToolStripMenuItem";
|
||||
this.saveWindowPositionToolStripMenuItem.Size = new System.Drawing.Size(225, 24);
|
||||
this.saveWindowPositionToolStripMenuItem.Text = "Save Window Position";
|
||||
this.saveWindowPositionToolStripMenuItem.Click += new System.EventHandler(this.saveWindowPositionToolStripMenuItem_Click);
|
||||
//
|
||||
// toolStripSeparator1
|
||||
//
|
||||
this.toolStripSeparator1.Name = "toolStripSeparator1";
|
||||
this.toolStripSeparator1.Size = new System.Drawing.Size(222, 6);
|
||||
//
|
||||
// exitToolStripMenuItem
|
||||
//
|
||||
this.exitToolStripMenuItem.Name = "exitToolStripMenuItem";
|
||||
this.exitToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.F4)));
|
||||
this.exitToolStripMenuItem.Size = new System.Drawing.Size(225, 24);
|
||||
this.exitToolStripMenuItem.Text = "E&xit";
|
||||
this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click);
|
||||
//
|
||||
// GGCodeMaskBox
|
||||
//
|
||||
this.GGCodeMaskBox.Location = new System.Drawing.Point(24, 37);
|
||||
this.GGCodeMaskBox.Mask = ">AAAA-AAAA";
|
||||
this.GGCodeMaskBox.Name = "GGCodeMaskBox";
|
||||
this.GGCodeMaskBox.Size = new System.Drawing.Size(99, 22);
|
||||
this.GGCodeMaskBox.TabIndex = 9;
|
||||
this.GGCodeMaskBox.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
|
||||
this.GGCodeMaskBox.TextMaskFormat = System.Windows.Forms.MaskFormat.ExcludePromptAndLiterals;
|
||||
this.GGCodeMaskBox.TextChanged += new System.EventHandler(this.GGCodeMaskBox_TextChanged);
|
||||
this.GGCodeMaskBox.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.GGCodeMaskBox_KeyPress);
|
||||
//
|
||||
// addcheatbt
|
||||
//
|
||||
this.addcheatbt.Enabled = false;
|
||||
this.addcheatbt.Location = new System.Drawing.Point(208, 144);
|
||||
this.addcheatbt.Name = "addcheatbt";
|
||||
this.addcheatbt.Size = new System.Drawing.Size(96, 32);
|
||||
this.addcheatbt.TabIndex = 10;
|
||||
this.addcheatbt.Text = "&Add Cheat";
|
||||
this.addcheatbt.UseVisualStyleBackColor = true;
|
||||
this.addcheatbt.Click += new System.EventHandler(this.addcheatbt_Click);
|
||||
//
|
||||
// GameGenieCodeBox
|
||||
//
|
||||
this.GameGenieCodeBox.Controls.Add(this.GGCodeMaskBox);
|
||||
this.GameGenieCodeBox.Location = new System.Drawing.Point(27, 43);
|
||||
this.GameGenieCodeBox.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.GameGenieCodeBox.Name = "GameGenieCodeBox";
|
||||
this.GameGenieCodeBox.Padding = new System.Windows.Forms.Padding(4);
|
||||
this.GameGenieCodeBox.Size = new System.Drawing.Size(153, 85);
|
||||
this.GameGenieCodeBox.TabIndex = 11;
|
||||
this.GameGenieCodeBox.TabStop = false;
|
||||
this.GameGenieCodeBox.Text = "Game Genie Code";
|
||||
//
|
||||
// groupBox1
|
||||
//
|
||||
this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
|
||||
this.groupBox1.Controls.Add(this.ValueBox);
|
||||
this.groupBox1.Controls.Add(this.AddressBox);
|
||||
this.groupBox1.Controls.Add(this.label6);
|
||||
this.groupBox1.Controls.Add(this.label4);
|
||||
this.groupBox1.Controls.Add(this.label3);
|
||||
this.groupBox1.Controls.Add(this.label1);
|
||||
this.groupBox1.Location = new System.Drawing.Point(208, 43);
|
||||
this.groupBox1.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.groupBox1.Name = "groupBox1";
|
||||
this.groupBox1.Padding = new System.Windows.Forms.Padding(4);
|
||||
this.groupBox1.Size = new System.Drawing.Size(182, 85);
|
||||
this.groupBox1.TabIndex = 12;
|
||||
this.groupBox1.TabStop = false;
|
||||
this.groupBox1.Text = "Decoded Value";
|
||||
//
|
||||
// ValueBox
|
||||
//
|
||||
this.ValueBox.CharacterCasing = System.Windows.Forms.CharacterCasing.Upper;
|
||||
this.ValueBox.Location = new System.Drawing.Point(122, 53);
|
||||
this.ValueBox.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.ValueBox.MaxLength = 4;
|
||||
this.ValueBox.Name = "ValueBox";
|
||||
this.ValueBox.RightToLeft = System.Windows.Forms.RightToLeft.Yes;
|
||||
this.ValueBox.Size = new System.Drawing.Size(52, 22);
|
||||
this.ValueBox.TabIndex = 23;
|
||||
this.ValueBox.TextChanged += new System.EventHandler(this.ValueBox_TextChanged);
|
||||
//
|
||||
// AddressBox
|
||||
//
|
||||
this.AddressBox.CharacterCasing = System.Windows.Forms.CharacterCasing.Upper;
|
||||
this.AddressBox.Location = new System.Drawing.Point(95, 23);
|
||||
this.AddressBox.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.AddressBox.MaxLength = 6;
|
||||
this.AddressBox.Name = "AddressBox";
|
||||
this.AddressBox.RightToLeft = System.Windows.Forms.RightToLeft.Yes;
|
||||
this.AddressBox.Size = new System.Drawing.Size(79, 22);
|
||||
this.AddressBox.TabIndex = 22;
|
||||
this.AddressBox.TextChanged += new System.EventHandler(this.AddressBox_TextChanged);
|
||||
//
|
||||
// label6
|
||||
//
|
||||
this.label6.AutoSize = true;
|
||||
this.label6.Location = new System.Drawing.Point(92, 57);
|
||||
this.label6.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||
this.label6.Name = "label6";
|
||||
this.label6.Size = new System.Drawing.Size(22, 17);
|
||||
this.label6.TabIndex = 9;
|
||||
this.label6.Text = "0x";
|
||||
//
|
||||
// label4
|
||||
//
|
||||
this.label4.AutoSize = true;
|
||||
this.label4.Location = new System.Drawing.Point(70, 28);
|
||||
this.label4.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||
this.label4.Name = "label4";
|
||||
this.label4.Size = new System.Drawing.Size(22, 17);
|
||||
this.label4.TabIndex = 7;
|
||||
this.label4.Text = "0x";
|
||||
//
|
||||
// label3
|
||||
//
|
||||
this.label3.AutoSize = true;
|
||||
this.label3.Location = new System.Drawing.Point(11, 56);
|
||||
this.label3.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||
this.label3.Name = "label3";
|
||||
this.label3.Size = new System.Drawing.Size(44, 17);
|
||||
this.label3.TabIndex = 5;
|
||||
this.label3.Text = "Value";
|
||||
//
|
||||
// label1
|
||||
//
|
||||
this.label1.AutoSize = true;
|
||||
this.label1.Location = new System.Drawing.Point(11, 28);
|
||||
this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||
this.label1.Name = "label1";
|
||||
this.label1.Size = new System.Drawing.Size(60, 17);
|
||||
this.label1.TabIndex = 3;
|
||||
this.label1.Text = "Address";
|
||||
//
|
||||
// ClearBT
|
||||
//
|
||||
this.ClearBT.Location = new System.Drawing.Point(88, 144);
|
||||
this.ClearBT.Name = "ClearBT";
|
||||
this.ClearBT.Size = new System.Drawing.Size(92, 32);
|
||||
this.ClearBT.TabIndex = 13;
|
||||
this.ClearBT.Text = "&Clear";
|
||||
this.ClearBT.UseVisualStyleBackColor = true;
|
||||
this.ClearBT.Click += new System.EventHandler(this.ClearBT_Click);
|
||||
//
|
||||
// groupBox2
|
||||
//
|
||||
this.groupBox2.Controls.Add(this.cheatname);
|
||||
this.groupBox2.Location = new System.Drawing.Point(27, 188);
|
||||
this.groupBox2.Name = "groupBox2";
|
||||
this.groupBox2.Size = new System.Drawing.Size(355, 61);
|
||||
this.groupBox2.TabIndex = 14;
|
||||
this.groupBox2.TabStop = false;
|
||||
this.groupBox2.Text = "Cheat Title (Uses GG code if left empty)";
|
||||
//
|
||||
// cheatname
|
||||
//
|
||||
this.cheatname.Location = new System.Drawing.Point(24, 28);
|
||||
this.cheatname.Name = "cheatname";
|
||||
this.cheatname.Size = new System.Drawing.Size(301, 22);
|
||||
this.cheatname.TabIndex = 0;
|
||||
//
|
||||
// GenGameGenie
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(403, 261);
|
||||
this.Controls.Add(this.groupBox2);
|
||||
this.Controls.Add(this.ClearBT);
|
||||
this.Controls.Add(this.groupBox1);
|
||||
this.Controls.Add(this.GameGenieCodeBox);
|
||||
this.Controls.Add(this.addcheatbt);
|
||||
this.Controls.Add(this.menuStrip1);
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D;
|
||||
this.MainMenuStrip = this.menuStrip1;
|
||||
this.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.MaximizeBox = false;
|
||||
this.MaximumSize = new System.Drawing.Size(413, 354);
|
||||
this.MinimumSize = new System.Drawing.Size(413, 300);
|
||||
this.Name = "GenGameGenie";
|
||||
this.ShowIcon = false;
|
||||
this.Text = "Game Genie Encoder / Decoder";
|
||||
this.menuStrip1.ResumeLayout(false);
|
||||
this.menuStrip1.PerformLayout();
|
||||
this.GameGenieCodeBox.ResumeLayout(false);
|
||||
this.GameGenieCodeBox.PerformLayout();
|
||||
this.groupBox1.ResumeLayout(false);
|
||||
this.groupBox1.PerformLayout();
|
||||
this.groupBox2.ResumeLayout(false);
|
||||
this.groupBox2.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.MenuStrip menuStrip1;
|
||||
private System.Windows.Forms.ToolStripMenuItem optionsToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem autoloadToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripMenuItem saveWindowPositionToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
|
||||
private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem;
|
||||
private System.Windows.Forms.MaskedTextBox GGCodeMaskBox;
|
||||
private System.Windows.Forms.Button addcheatbt;
|
||||
private System.Windows.Forms.GroupBox GameGenieCodeBox;
|
||||
private System.Windows.Forms.GroupBox groupBox1;
|
||||
private System.Windows.Forms.Label label6;
|
||||
private System.Windows.Forms.Label label4;
|
||||
private System.Windows.Forms.Label label3;
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.Button ClearBT;
|
||||
private HexTextBox ValueBox;
|
||||
private HexTextBox AddressBox;
|
||||
private System.Windows.Forms.GroupBox groupBox2;
|
||||
private System.Windows.Forms.TextBox cheatname;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,307 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Windows.Forms;
|
||||
using System.Globalization;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace BizHawk.MultiClient
|
||||
{
|
||||
public partial class GenGameGenie : Form
|
||||
{
|
||||
bool Processing = false;
|
||||
private readonly Dictionary<char, int> GameGenieTable = new Dictionary<char, int>();
|
||||
|
||||
public GenGameGenie()
|
||||
{
|
||||
InitializeComponent();
|
||||
Closing += (o, e) => SaveConfigSettings();
|
||||
|
||||
GameGenieTable.Add('A', 0);
|
||||
GameGenieTable.Add('B', 1);
|
||||
GameGenieTable.Add('C', 2);
|
||||
GameGenieTable.Add('D', 3);
|
||||
GameGenieTable.Add('E', 4);
|
||||
GameGenieTable.Add('F', 5);
|
||||
GameGenieTable.Add('G', 6);
|
||||
GameGenieTable.Add('H', 7);
|
||||
GameGenieTable.Add('J', 8);
|
||||
GameGenieTable.Add('K', 9);
|
||||
GameGenieTable.Add('L', 10);
|
||||
GameGenieTable.Add('M', 11);
|
||||
GameGenieTable.Add('N', 12);
|
||||
GameGenieTable.Add('P', 13);
|
||||
GameGenieTable.Add('R', 14);
|
||||
GameGenieTable.Add('S', 15);
|
||||
GameGenieTable.Add('T', 16);
|
||||
GameGenieTable.Add('V', 17);
|
||||
GameGenieTable.Add('W', 18);
|
||||
GameGenieTable.Add('X', 19);
|
||||
GameGenieTable.Add('Y', 20);
|
||||
GameGenieTable.Add('Z', 21);
|
||||
GameGenieTable.Add('0', 22);
|
||||
GameGenieTable.Add('1', 23);
|
||||
GameGenieTable.Add('2', 24);
|
||||
GameGenieTable.Add('3', 25);
|
||||
GameGenieTable.Add('4', 26);
|
||||
GameGenieTable.Add('5', 27);
|
||||
GameGenieTable.Add('6', 28);
|
||||
GameGenieTable.Add('7', 29);
|
||||
GameGenieTable.Add('8', 30);
|
||||
GameGenieTable.Add('9', 31);
|
||||
}
|
||||
|
||||
|
||||
// code is code to be converted, val is pointer to value, add is pointer to address
|
||||
private void GenGGDecode(string code, ref int val, ref int add)
|
||||
{
|
||||
long hexcode = 0;
|
||||
long decoded = 0;
|
||||
int y = 0;
|
||||
|
||||
//convert code to a long binary string
|
||||
for (int x = 0; x < code.Length; x++)
|
||||
{
|
||||
hexcode <<= 5;
|
||||
GameGenieTable.TryGetValue(code[x], out y);
|
||||
hexcode |= y;
|
||||
}
|
||||
|
||||
decoded = ((hexcode & 0xFF00000000) >> 32);
|
||||
decoded |= (hexcode & 0x00FF000000);
|
||||
decoded |= ((hexcode & 0x0000FF0000) << 16 );
|
||||
decoded |= ((hexcode & 0x00000000700) << 5);
|
||||
decoded |= ((hexcode & 0x000000F800) >> 3);
|
||||
decoded |= ((hexcode & 0x00000000FF) << 16);
|
||||
|
||||
val = (int)(decoded & 0x000000FFFF);
|
||||
add = (int)((decoded & 0xFFFFFF0000) >> 16);
|
||||
|
||||
}
|
||||
|
||||
private string GenGGEncode(int val, int add)
|
||||
{
|
||||
long encoded = 0;
|
||||
string code = null;
|
||||
|
||||
encoded = ((long)(val & 0x00FF) << 32);
|
||||
encoded |= ((val & 0xE000) >> 5);
|
||||
encoded |= ((val & 0x1F00) << 3);
|
||||
encoded |= (add & 0xFF0000);
|
||||
encoded |= ((add & 0x00FF00) << 16);
|
||||
encoded |= (add & 0x0000FF);
|
||||
|
||||
char[] letters = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'R', 'S', 'T', 'V', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
|
||||
for (int x = 0; x < 8; x++)
|
||||
{
|
||||
int chr = 0;
|
||||
chr = (int)(encoded & 0x1F);
|
||||
code += letters[chr];
|
||||
encoded >>= 5;
|
||||
}
|
||||
//reverse string, as its build backward
|
||||
char[] array = code.ToCharArray();
|
||||
Array.Reverse(array);
|
||||
return (new string(array));
|
||||
}
|
||||
|
||||
private void GGCodeMaskBox_KeyPress(object sender, KeyPressEventArgs e)
|
||||
{
|
||||
//ignore I O Q U
|
||||
if ((e.KeyChar == 73) || (e.KeyChar == 79) || (e.KeyChar == 81) || (e.KeyChar == 85) ||
|
||||
(e.KeyChar == 105) || (e.KeyChar == 111) || (e.KeyChar == 113) || (e.KeyChar == 117))
|
||||
{
|
||||
e.KeyChar = '\n' ;
|
||||
}
|
||||
}
|
||||
|
||||
private void GGCodeMaskBox_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (Processing == false)
|
||||
{
|
||||
Processing = true;
|
||||
//remove Invalid I O Q P if pasted
|
||||
GGCodeMaskBox.Text = GGCodeMaskBox.Text.Replace("I", string.Empty);
|
||||
GGCodeMaskBox.Text = GGCodeMaskBox.Text.Replace("O", string.Empty);
|
||||
GGCodeMaskBox.Text = GGCodeMaskBox.Text.Replace("Q", string.Empty);
|
||||
GGCodeMaskBox.Text = GGCodeMaskBox.Text.Replace("U", string.Empty);
|
||||
|
||||
|
||||
if (GGCodeMaskBox.Text.Length > 0)
|
||||
{
|
||||
int val = 0;
|
||||
int add = 0;
|
||||
GenGGDecode(GGCodeMaskBox.Text, ref val, ref add);
|
||||
AddressBox.Text = String.Format("{0:X6}", add);
|
||||
ValueBox.Text = String.Format("{0:X4}", val);
|
||||
addcheatbt.Enabled = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
AddressBox.Text = "";
|
||||
ValueBox.Text = "";
|
||||
addcheatbt.Enabled = false;
|
||||
}
|
||||
Processing = false;
|
||||
}
|
||||
}
|
||||
|
||||
private void ClearBT_Click(object sender, EventArgs e)
|
||||
{
|
||||
AddressBox.Text = "";
|
||||
ValueBox.Text = "";
|
||||
GGCodeMaskBox.Text = "";
|
||||
addcheatbt.Enabled = false;
|
||||
}
|
||||
|
||||
private void AddressBox_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
//remove invalid character when pasted
|
||||
if (Processing == false)
|
||||
{
|
||||
Processing = true;
|
||||
if (Regex.IsMatch(AddressBox.Text, @"[^a-fA-F0-9]"))
|
||||
{
|
||||
string temp = Regex.Replace(AddressBox.Text, @"[^a-fA-F0-9]", string.Empty);
|
||||
AddressBox.Text = temp;
|
||||
}
|
||||
if ((AddressBox.Text.Length > 0) || (ValueBox.Text.Length > 0))
|
||||
{
|
||||
int val = 0;
|
||||
int add = 0;
|
||||
if (ValueBox.Text.Length > 0)
|
||||
val = int.Parse(ValueBox.Text, NumberStyles.HexNumber);
|
||||
if (AddressBox.Text.Length > 0)
|
||||
add = int.Parse(AddressBox.Text, NumberStyles.HexNumber);
|
||||
GGCodeMaskBox.Text = GenGGEncode(val, add);
|
||||
addcheatbt.Enabled = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
GGCodeMaskBox.Text = "";
|
||||
addcheatbt.Enabled = false;
|
||||
}
|
||||
Processing = false;
|
||||
}
|
||||
}
|
||||
|
||||
private void ValueBox_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (Processing == false)
|
||||
{
|
||||
Processing = true;
|
||||
//remove invalid character when pasted
|
||||
if (Regex.IsMatch(ValueBox.Text, @"[^a-fA-F0-9]"))
|
||||
{
|
||||
string temp = Regex.Replace(ValueBox.Text, @"[^a-fA-F0-9]", string.Empty);
|
||||
ValueBox.Text = temp;
|
||||
}
|
||||
if ((AddressBox.Text.Length > 0) || (ValueBox.Text.Length > 0))
|
||||
{
|
||||
int val = 0;
|
||||
int add = 0;
|
||||
if (ValueBox.Text.Length > 0)
|
||||
val = int.Parse(ValueBox.Text, NumberStyles.HexNumber);
|
||||
if (AddressBox.Text.Length > 0)
|
||||
add = int.Parse(AddressBox.Text, NumberStyles.HexNumber);
|
||||
GGCodeMaskBox.Text = GenGGEncode(val, add);
|
||||
addcheatbt.Enabled = true;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
GGCodeMaskBox.Text = "";
|
||||
addcheatbt.Enabled = false;
|
||||
}
|
||||
Processing = false;
|
||||
}
|
||||
}
|
||||
|
||||
private void addcheatbt_Click(object sender, EventArgs e)
|
||||
{
|
||||
Cheat c = new Cheat();
|
||||
Cheat d = new Cheat();
|
||||
if (cheatname.Text.Length > 0)
|
||||
{
|
||||
c.name = cheatname.Text + " Part 1";
|
||||
d.name = cheatname.Text + " Part 2";
|
||||
}
|
||||
else
|
||||
{
|
||||
Processing = true;
|
||||
GGCodeMaskBox.TextMaskFormat = MaskFormat.IncludeLiterals;
|
||||
c.name = GGCodeMaskBox.Text + " Part 1";
|
||||
d.name = GGCodeMaskBox.Text + " Part 2";
|
||||
GGCodeMaskBox.TextMaskFormat = MaskFormat.ExcludePromptAndLiterals;
|
||||
Processing = false;
|
||||
}
|
||||
|
||||
if (String.IsNullOrWhiteSpace(AddressBox.Text))
|
||||
{
|
||||
c.address = 0;
|
||||
d.address = 0+1;
|
||||
}
|
||||
else
|
||||
{
|
||||
c.address = int.Parse(AddressBox.Text, NumberStyles.HexNumber);
|
||||
d.address = c.address + 1;
|
||||
}
|
||||
if (String.IsNullOrWhiteSpace(ValueBox.Text))
|
||||
{
|
||||
c.value = 0;
|
||||
d.value = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
c.value = (byte)((int.Parse(ValueBox.Text, NumberStyles.HexNumber) & 0xFF00) >> 8);
|
||||
d.value = (byte)(int.Parse(ValueBox.Text, NumberStyles.HexNumber) & 0x00FF);
|
||||
}
|
||||
c.compare = null;
|
||||
d.compare = null;
|
||||
for (int x = 0; x < Global.Emulator.MemoryDomains.Count; x++)
|
||||
|
||||
if (Global.Emulator.MemoryDomains[x].ToString() == "Rom Data")
|
||||
{
|
||||
c.domain = Global.Emulator.MemoryDomains[x];
|
||||
c.Enable();
|
||||
Global.MainForm.Cheats1.AddCheat(c);
|
||||
d.domain = Global.Emulator.MemoryDomains[x];
|
||||
d.Enable();
|
||||
Global.MainForm.Cheats1.AddCheat(d);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void autoloadToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
Global.Config.GENGGAutoload ^= true;
|
||||
}
|
||||
|
||||
private void saveWindowPositionToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
Global.Config.GENGGSaveWindowPosition ^= true;
|
||||
}
|
||||
|
||||
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
{
|
||||
Close();
|
||||
}
|
||||
|
||||
private void GENGameGenie_Load(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
if (Global.Config.GENGGSaveWindowPosition && Global.Config.GENGGWndx >= 0 && Global.Config.GENGGWndy >= 0)
|
||||
Location = new Point(Global.Config.GENGGWndx, Global.Config.GENGGWndy);
|
||||
}
|
||||
|
||||
private void SaveConfigSettings()
|
||||
{
|
||||
Global.Config.GENGGWndx = Location.X;
|
||||
Global.Config.GENGGWndy = Location.Y;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,123 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<metadata name="menuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>17, 17</value>
|
||||
</metadata>
|
||||
</root>
|
|
@ -3345,6 +3345,11 @@ namespace BizHawk.MultiClient
|
|||
GBGameGenie gg = new GBGameGenie();
|
||||
gg.Show();
|
||||
}
|
||||
else if (Global.Emulator is Genesis)
|
||||
{
|
||||
GenGameGenie gg = new GenGameGenie();
|
||||
gg.Show();
|
||||
}
|
||||
}
|
||||
|
||||
public void LoadSNESGraphicsDebugger()
|
||||
|
|
|
@ -28,13 +28,13 @@
|
|||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.GameGenieCode = new System.Windows.Forms.TextBox();
|
||||
this.GameGenieCodeBox = new System.Windows.Forms.GroupBox();
|
||||
this.GGCodeMaskBox = new System.Windows.Forms.MaskedTextBox();
|
||||
this.label3 = new System.Windows.Forms.Label();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.ValueBox = new BizHawk.HexTextBox();
|
||||
this.AddressBox = new BizHawk.HexTextBox();
|
||||
this.AddCheat = new System.Windows.Forms.Button();
|
||||
this.addcheatbt = new System.Windows.Forms.Button();
|
||||
this.ButtonPanel = new System.Windows.Forms.Panel();
|
||||
this.BF = new System.Windows.Forms.Button();
|
||||
this.BD = new System.Windows.Forms.Button();
|
||||
|
@ -62,41 +62,43 @@
|
|||
this.saveWindowPositionToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
|
||||
this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
||||
this.groupBox2 = new System.Windows.Forms.GroupBox();
|
||||
this.cheatname = new System.Windows.Forms.TextBox();
|
||||
this.GameGenieCodeBox.SuspendLayout();
|
||||
this.ButtonPanel.SuspendLayout();
|
||||
this.groupBox1.SuspendLayout();
|
||||
this.menuStrip1.SuspendLayout();
|
||||
this.groupBox2.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// GameGenieCode
|
||||
//
|
||||
this.GameGenieCode.CharacterCasing = System.Windows.Forms.CharacterCasing.Upper;
|
||||
this.GameGenieCode.Location = new System.Drawing.Point(8, 23);
|
||||
this.GameGenieCode.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.GameGenieCode.MaxLength = 8;
|
||||
this.GameGenieCode.Name = "GameGenieCode";
|
||||
this.GameGenieCode.Size = new System.Drawing.Size(113, 22);
|
||||
this.GameGenieCode.TabIndex = 20;
|
||||
this.GameGenieCode.TextChanged += new System.EventHandler(this.GameGenieCode_TextChanged);
|
||||
this.GameGenieCode.KeyDown += new System.Windows.Forms.KeyEventHandler(this.GameGenieCode_KeyDown);
|
||||
this.GameGenieCode.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.GameGenieCode_KeyPress);
|
||||
//
|
||||
// GameGenieCodeBox
|
||||
//
|
||||
this.GameGenieCodeBox.Controls.Add(this.GameGenieCode);
|
||||
this.GameGenieCodeBox.Controls.Add(this.GGCodeMaskBox);
|
||||
this.GameGenieCodeBox.Location = new System.Drawing.Point(41, 127);
|
||||
this.GameGenieCodeBox.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.GameGenieCodeBox.Name = "GameGenieCodeBox";
|
||||
this.GameGenieCodeBox.Padding = new System.Windows.Forms.Padding(4);
|
||||
this.GameGenieCodeBox.Size = new System.Drawing.Size(153, 66);
|
||||
this.GameGenieCodeBox.Size = new System.Drawing.Size(158, 66);
|
||||
this.GameGenieCodeBox.TabIndex = 1;
|
||||
this.GameGenieCodeBox.TabStop = false;
|
||||
this.GameGenieCodeBox.Text = "Game Genie Code";
|
||||
//
|
||||
// GGCodeMaskBox
|
||||
//
|
||||
this.GGCodeMaskBox.Location = new System.Drawing.Point(33, 32);
|
||||
this.GGCodeMaskBox.Mask = ">AAAA-AAAA";
|
||||
this.GGCodeMaskBox.Name = "GGCodeMaskBox";
|
||||
this.GGCodeMaskBox.Size = new System.Drawing.Size(99, 22);
|
||||
this.GGCodeMaskBox.TabIndex = 10;
|
||||
this.GGCodeMaskBox.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
|
||||
this.GGCodeMaskBox.TextMaskFormat = System.Windows.Forms.MaskFormat.ExcludePromptAndLiterals;
|
||||
this.GGCodeMaskBox.TextChanged += new System.EventHandler(this.GGCodeMaskBox_TextChanged);
|
||||
this.GGCodeMaskBox.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.GGCodeMaskBox_KeyPress);
|
||||
//
|
||||
// label3
|
||||
//
|
||||
this.label3.AutoSize = true;
|
||||
this.label3.Location = new System.Drawing.Point(11, 56);
|
||||
this.label3.Location = new System.Drawing.Point(11, 67);
|
||||
this.label3.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||
this.label3.Name = "label3";
|
||||
this.label3.Size = new System.Drawing.Size(44, 17);
|
||||
|
@ -106,7 +108,7 @@
|
|||
// label1
|
||||
//
|
||||
this.label1.AutoSize = true;
|
||||
this.label1.Location = new System.Drawing.Point(11, 20);
|
||||
this.label1.Location = new System.Drawing.Point(11, 27);
|
||||
this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||
this.label1.Name = "label1";
|
||||
this.label1.Size = new System.Drawing.Size(60, 17);
|
||||
|
@ -116,7 +118,7 @@
|
|||
// ValueBox
|
||||
//
|
||||
this.ValueBox.CharacterCasing = System.Windows.Forms.CharacterCasing.Upper;
|
||||
this.ValueBox.Location = new System.Drawing.Point(140, 51);
|
||||
this.ValueBox.Location = new System.Drawing.Point(140, 62);
|
||||
this.ValueBox.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.ValueBox.MaxLength = 2;
|
||||
this.ValueBox.Name = "ValueBox";
|
||||
|
@ -128,7 +130,7 @@
|
|||
// AddressBox
|
||||
//
|
||||
this.AddressBox.CharacterCasing = System.Windows.Forms.CharacterCasing.Upper;
|
||||
this.AddressBox.Location = new System.Drawing.Point(100, 16);
|
||||
this.AddressBox.Location = new System.Drawing.Point(100, 23);
|
||||
this.AddressBox.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.AddressBox.MaxLength = 6;
|
||||
this.AddressBox.Name = "AddressBox";
|
||||
|
@ -137,17 +139,18 @@
|
|||
this.AddressBox.TabIndex = 21;
|
||||
this.AddressBox.TextChanged += new System.EventHandler(this.AddressBox_TextChanged);
|
||||
//
|
||||
// AddCheat
|
||||
// addcheatbt
|
||||
//
|
||||
this.AddCheat.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.AddCheat.Location = new System.Drawing.Point(268, 276);
|
||||
this.AddCheat.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.AddCheat.Name = "AddCheat";
|
||||
this.AddCheat.Size = new System.Drawing.Size(92, 26);
|
||||
this.AddCheat.TabIndex = 33;
|
||||
this.AddCheat.Text = "&Add Cheat";
|
||||
this.AddCheat.UseVisualStyleBackColor = true;
|
||||
this.AddCheat.Click += new System.EventHandler(this.AddCheat_Click);
|
||||
this.addcheatbt.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.addcheatbt.Enabled = false;
|
||||
this.addcheatbt.Location = new System.Drawing.Point(117, 201);
|
||||
this.addcheatbt.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.addcheatbt.Name = "addcheatbt";
|
||||
this.addcheatbt.Size = new System.Drawing.Size(82, 32);
|
||||
this.addcheatbt.TabIndex = 33;
|
||||
this.addcheatbt.Text = "&Add Cheat";
|
||||
this.addcheatbt.UseVisualStyleBackColor = true;
|
||||
this.addcheatbt.Click += new System.EventHandler(this.AddCheat_Click);
|
||||
//
|
||||
// ButtonPanel
|
||||
//
|
||||
|
@ -168,7 +171,7 @@
|
|||
this.ButtonPanel.Controls.Add(this.B4);
|
||||
this.ButtonPanel.Controls.Add(this.B2);
|
||||
this.ButtonPanel.Controls.Add(this.B0);
|
||||
this.ButtonPanel.Location = new System.Drawing.Point(41, 37);
|
||||
this.ButtonPanel.Location = new System.Drawing.Point(47, 37);
|
||||
this.ButtonPanel.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.ButtonPanel.Name = "ButtonPanel";
|
||||
this.ButtonPanel.Size = new System.Drawing.Size(319, 82);
|
||||
|
@ -359,18 +362,19 @@
|
|||
this.groupBox1.Controls.Add(this.label1);
|
||||
this.groupBox1.Controls.Add(this.AddressBox);
|
||||
this.groupBox1.Controls.Add(this.ValueBox);
|
||||
this.groupBox1.Location = new System.Drawing.Point(41, 201);
|
||||
this.groupBox1.Location = new System.Drawing.Point(207, 127);
|
||||
this.groupBox1.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.groupBox1.Name = "groupBox1";
|
||||
this.groupBox1.Padding = new System.Windows.Forms.Padding(4);
|
||||
this.groupBox1.Size = new System.Drawing.Size(183, 101);
|
||||
this.groupBox1.TabIndex = 5;
|
||||
this.groupBox1.TabStop = false;
|
||||
this.groupBox1.Text = "Decoded Value";
|
||||
//
|
||||
// label6
|
||||
//
|
||||
this.label6.AutoSize = true;
|
||||
this.label6.Location = new System.Drawing.Point(116, 56);
|
||||
this.label6.Location = new System.Drawing.Point(116, 67);
|
||||
this.label6.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||
this.label6.Name = "label6";
|
||||
this.label6.Size = new System.Drawing.Size(22, 17);
|
||||
|
@ -380,7 +384,7 @@
|
|||
// label4
|
||||
//
|
||||
this.label4.AutoSize = true;
|
||||
this.label4.Location = new System.Drawing.Point(76, 20);
|
||||
this.label4.Location = new System.Drawing.Point(76, 27);
|
||||
this.label4.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
|
||||
this.label4.Name = "label4";
|
||||
this.label4.Size = new System.Drawing.Size(22, 17);
|
||||
|
@ -390,10 +394,9 @@
|
|||
// ClearButton
|
||||
//
|
||||
this.ClearButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.ClearButton.Location = new System.Drawing.Point(288, 210);
|
||||
this.ClearButton.Margin = new System.Windows.Forms.Padding(4);
|
||||
this.ClearButton.Location = new System.Drawing.Point(41, 201);
|
||||
this.ClearButton.Name = "ClearButton";
|
||||
this.ClearButton.Size = new System.Drawing.Size(72, 28);
|
||||
this.ClearButton.Size = new System.Drawing.Size(72, 32);
|
||||
this.ClearButton.TabIndex = 32;
|
||||
this.ClearButton.Text = "&Clear";
|
||||
this.ClearButton.UseVisualStyleBackColor = true;
|
||||
|
@ -449,15 +452,33 @@
|
|||
this.exitToolStripMenuItem.Text = "E&xit";
|
||||
this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click);
|
||||
//
|
||||
// groupBox2
|
||||
//
|
||||
this.groupBox2.Controls.Add(this.cheatname);
|
||||
this.groupBox2.Location = new System.Drawing.Point(41, 242);
|
||||
this.groupBox2.Name = "groupBox2";
|
||||
this.groupBox2.Size = new System.Drawing.Size(349, 61);
|
||||
this.groupBox2.TabIndex = 24;
|
||||
this.groupBox2.TabStop = false;
|
||||
this.groupBox2.Text = "Cheat Title (Uses GG code if left empty)";
|
||||
//
|
||||
// cheatname
|
||||
//
|
||||
this.cheatname.Location = new System.Drawing.Point(24, 28);
|
||||
this.cheatname.Name = "cheatname";
|
||||
this.cheatname.Size = new System.Drawing.Size(301, 22);
|
||||
this.cheatname.TabIndex = 0;
|
||||
//
|
||||
// SNESGameGenie
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(403, 315);
|
||||
this.Controls.Add(this.groupBox2);
|
||||
this.Controls.Add(this.ClearButton);
|
||||
this.Controls.Add(this.groupBox1);
|
||||
this.Controls.Add(this.ButtonPanel);
|
||||
this.Controls.Add(this.AddCheat);
|
||||
this.Controls.Add(this.addcheatbt);
|
||||
this.Controls.Add(this.GameGenieCodeBox);
|
||||
this.Controls.Add(this.menuStrip1);
|
||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D;
|
||||
|
@ -476,6 +497,8 @@
|
|||
this.groupBox1.PerformLayout();
|
||||
this.menuStrip1.ResumeLayout(false);
|
||||
this.menuStrip1.PerformLayout();
|
||||
this.groupBox2.ResumeLayout(false);
|
||||
this.groupBox2.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
|
@ -483,13 +506,12 @@
|
|||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.TextBox GameGenieCode;
|
||||
private System.Windows.Forms.GroupBox GameGenieCodeBox;
|
||||
private System.Windows.Forms.GroupBox GameGenieCodeBox;
|
||||
private System.Windows.Forms.Label label3;
|
||||
private System.Windows.Forms.Label label1;
|
||||
private HexTextBox ValueBox;
|
||||
private HexTextBox AddressBox;
|
||||
private System.Windows.Forms.Button AddCheat;
|
||||
private System.Windows.Forms.Button addcheatbt;
|
||||
private System.Windows.Forms.Panel ButtonPanel;
|
||||
private System.Windows.Forms.Button B6;
|
||||
private System.Windows.Forms.Button B4;
|
||||
|
@ -517,5 +539,8 @@
|
|||
private System.Windows.Forms.ToolStripMenuItem saveWindowPositionToolStripMenuItem;
|
||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
|
||||
private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem;
|
||||
private System.Windows.Forms.MaskedTextBox GGCodeMaskBox;
|
||||
private System.Windows.Forms.GroupBox groupBox2;
|
||||
private System.Windows.Forms.TextBox cheatname;
|
||||
}
|
||||
}
|
|
@ -3,19 +3,16 @@ using System.Collections.Generic;
|
|||
using System.Drawing;
|
||||
using System.Windows.Forms;
|
||||
using System.Globalization;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace BizHawk.MultiClient
|
||||
{
|
||||
public partial class SNESGameGenie : Form
|
||||
{
|
||||
public int Address = -1;
|
||||
public int Value = -1;
|
||||
private readonly Dictionary<char, int> GameGenieTable = new Dictionary<char, int>();
|
||||
private bool Decoding = false;
|
||||
private bool Encoding = false;
|
||||
|
||||
private bool Processing = false;
|
||||
|
||||
public SNESGameGenie()
|
||||
public SNESGameGenie()
|
||||
{
|
||||
InitializeComponent();
|
||||
Closing += (o, e) => SaveConfigSettings();
|
||||
|
@ -41,9 +38,101 @@ namespace BizHawk.MultiClient
|
|||
GameGenieTable.Add('E', 15); //1111
|
||||
}
|
||||
|
||||
public void SNESGGDecode(string code, ref int val, ref int add)
|
||||
{
|
||||
|
||||
//Code: D F 4 7 0 9 1 5 6 B C 8 A 2 3 E
|
||||
//Hex: 0 1 2 3 4 5 6 7 8 9 A B C D E F
|
||||
//XXYY-YYYY, where XX is the value, and YY-YYYY is the address.
|
||||
//Char # | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|
||||
//Bit # |3|2|1|0|3|2|1|0|3|2|1|0|3|2|1|0|3|2|1|0|3|2|1|0|3|2|1|0|3|2|1|0|
|
||||
//maps to| Value |i|j|k|l|q|r|s|t|o|p|a|b|c|d|u|v|w|x|e|f|g|h|m|n|
|
||||
//order | Value |a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|
|
||||
|
||||
int x;
|
||||
|
||||
// Getting Value
|
||||
if (code.Length > 0)
|
||||
{
|
||||
GameGenieTable.TryGetValue(code[0], out x);
|
||||
val = x << 4;
|
||||
}
|
||||
|
||||
if (code.Length > 1)
|
||||
{
|
||||
GameGenieTable.TryGetValue(code[1], out x);
|
||||
val |= x;
|
||||
}
|
||||
//Address
|
||||
if (code.Length > 2)
|
||||
{
|
||||
GameGenieTable.TryGetValue(code[2], out x);
|
||||
add = (x << 12);
|
||||
}
|
||||
|
||||
if (code.Length > 3)
|
||||
{
|
||||
GameGenieTable.TryGetValue(code[3], out x);
|
||||
add |= (x << 4);
|
||||
}
|
||||
|
||||
if (code.Length > 4)
|
||||
{
|
||||
GameGenieTable.TryGetValue(code[4], out x);
|
||||
add |= ((x & 0xC) << 6);
|
||||
add |= ((x & 0x3) << 22);
|
||||
}
|
||||
|
||||
if (code.Length > 5)
|
||||
{
|
||||
GameGenieTable.TryGetValue(code[5], out x);
|
||||
add |= ((x & 0xC) << 18);
|
||||
add |= ((x & 0x3) << 2);
|
||||
}
|
||||
|
||||
if (code.Length > 6)
|
||||
{
|
||||
GameGenieTable.TryGetValue(code[6], out x);
|
||||
add |= ((x & 0xC) >> 2);
|
||||
add |= ((x & 0x3) << 18);
|
||||
}
|
||||
|
||||
if (code.Length > 7)
|
||||
{
|
||||
GameGenieTable.TryGetValue(code[7], out x);
|
||||
add |= ((x & 0xC) << 14);
|
||||
add |= ((x & 0x3) << 10);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private string SNESGGEncode(int val, int add)
|
||||
{
|
||||
//Code: D F 4 7 0 9 1 5 6 B C 8 A 2 3 E
|
||||
//Hex: 0 1 2 3 4 5 6 7 8 9 A B C D E F
|
||||
//Char # | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|
||||
//Bit # |3|2|1|0|3|2|1|0|3|2|1|0|3|2|1|0|3|2|1|0|3|2|1|0|3|2|1|0|3|2|1|0|
|
||||
//maps to| Value |i|j|k|l|q|r|s|t|o|p|a|b|c|d|u|v|w|x|e|f|g|h|m|n|
|
||||
//order | Value |a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|
|
||||
char[] letters = { 'D', 'F', '4', '7', '0', '9', '1', '5', '6', 'B', 'C', '8', 'A', '2', '3', 'E' };
|
||||
string code = "";
|
||||
int[] num = { 0, 0, 0, 0, 0, 0, 0, 0 };
|
||||
num[0] = (val & 0xF0) >>4;
|
||||
num[1] = val & 0x0F;
|
||||
|
||||
num[2] = (add & 0x00F000) >> 12; //ijkl
|
||||
num[3] = (add & 0x0000F0) >> 4; //qrst
|
||||
num[4] = ((add & 0x000300) >> 6) | ((add & 0xC00000) >> 22); //opab
|
||||
num[5] = ((add & 0x300000) >> 18) | ((add & 0x00000C) >>2); //cduv
|
||||
num[6] = ((add & 0x000003) << 2)| ((add & 0x0C0000) >> 18);//wxef
|
||||
num[7] = ((add & 0x030000) >> 14) | ((add & 0x000C00) >> 10);//ghmn*/
|
||||
for (int x = 0; x < 8; x++)
|
||||
code += letters[num[x]];
|
||||
return code;
|
||||
}
|
||||
private void SNESGameGenie_Load(object sender, EventArgs e)
|
||||
{
|
||||
AddCheat.Enabled = false;
|
||||
addcheatbt.Enabled = false;
|
||||
|
||||
if (Global.Config.SNESGGSaveWindowPosition && Global.Config.SNESGGWndx >= 0 && Global.Config.SNESGGWndy >= 0)
|
||||
Location = new Point(Global.Config.SNESGGWndx, Global.Config.SNESGGWndy);
|
||||
|
@ -55,270 +144,185 @@ namespace BizHawk.MultiClient
|
|||
Global.Config.SNESGGWndy = Location.Y;
|
||||
}
|
||||
|
||||
private void GameGenieCode_KeyPress(object sender, KeyPressEventArgs e)
|
||||
private void GGCodeMaskBox_KeyPress(object sender, KeyPressEventArgs e)
|
||||
{
|
||||
// Find a better way to remove all NON HEX char, while still allowing copy/paste
|
||||
//Right now its all done through removing em GGCodeMaskBox_TextChanged
|
||||
}
|
||||
|
||||
private void GGCodeMaskBox_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
//Make uppercase
|
||||
if (e.KeyChar >= 97 && e.KeyChar < 123)
|
||||
e.KeyChar -= (char)32;
|
||||
|
||||
if (!(GameGenieTable.ContainsKey(e.KeyChar)))
|
||||
if (Processing == false)
|
||||
{
|
||||
if (e.KeyChar != (char)Keys.Back || e.KeyChar == '\b' || e.KeyChar == 22 || e.KeyChar == 1 || e.KeyChar == 3)
|
||||
Processing = true;
|
||||
//insert REGEX Remove non HEXA char
|
||||
if (Regex.IsMatch(GGCodeMaskBox.Text, @"[^a-fA-F0-9]"))
|
||||
{
|
||||
e.Handled = true;
|
||||
string temp = Regex.Replace(GGCodeMaskBox.Text, @"[^a-fA-F0-9]", string.Empty);
|
||||
GGCodeMaskBox.Text = temp;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void SNESDecodeGameGenieCode(string code)
|
||||
{
|
||||
|
||||
//Code: D F 4 7 0 9 1 5 6 B C 8 A 2 3 E
|
||||
//Hex: 0 1 2 3 4 5 6 7 8 9 A B C D E F
|
||||
//XXYY-YYYY, where XX is the value, and YY-YYYY is the address.
|
||||
//Char # | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|
||||
//Bit # |3|2|1|0|3|2|1|0|3|2|1|0|3|2|1|0|3|2|1|0|3|2|1|0|3|2|1|0|3|2|1|0|
|
||||
//maps to| Value |i|j|k|l|q|r|s|t|o|p|a|b|c|d|u|v|w|x|e|f|g|h|m|n|
|
||||
//order | Value |a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|
|
||||
//Decoding = true;
|
||||
|
||||
int x;
|
||||
byte[] val = { 0, 0};
|
||||
|
||||
// Getting Value
|
||||
if (code.Length > 0)
|
||||
{
|
||||
GameGenieTable.TryGetValue(code[0], out x);
|
||||
Value = x << 4;
|
||||
}
|
||||
|
||||
if (code.Length > 1)
|
||||
{
|
||||
GameGenieTable.TryGetValue(code[1], out x);
|
||||
Value |= x;
|
||||
}
|
||||
//Address
|
||||
if (code.Length > 2)
|
||||
{
|
||||
GameGenieTable.TryGetValue(code[2], out x);
|
||||
Address = (x << 12);
|
||||
}
|
||||
|
||||
if (code.Length > 3)
|
||||
{
|
||||
GameGenieTable.TryGetValue(code[3], out x);
|
||||
Address |= (x << 4);
|
||||
}
|
||||
|
||||
if (code.Length > 4)
|
||||
{
|
||||
GameGenieTable.TryGetValue(code[4], out x);
|
||||
Address |= ((x & 0xC) << 6);
|
||||
Address |= ((x & 0x3) << 22);
|
||||
}
|
||||
|
||||
if (code.Length > 5)
|
||||
{
|
||||
GameGenieTable.TryGetValue(code[5], out x);
|
||||
Address |= ((x & 0xC) << 18);
|
||||
Address |= ((x & 0x3) << 2);
|
||||
}
|
||||
|
||||
if (code.Length > 6)
|
||||
{
|
||||
GameGenieTable.TryGetValue(code[6], out x);
|
||||
Address |= ((x & 0xC) >> 2);
|
||||
Address |= ((x & 0x3) << 18);
|
||||
}
|
||||
|
||||
if (code.Length > 7)
|
||||
{
|
||||
GameGenieTable.TryGetValue(code[7], out x);
|
||||
Address |= ((x & 0xC) << 14);
|
||||
Address |= ((x & 0x3) << 10);
|
||||
}
|
||||
|
||||
SetProperties();
|
||||
|
||||
}
|
||||
|
||||
private void SetProperties()
|
||||
{
|
||||
if (Address >= 0)
|
||||
AddressBox.Text = String.Format("{0:X6}", Address);
|
||||
else
|
||||
AddressBox.Text = "";
|
||||
|
||||
if (Value >= 0)
|
||||
ValueBox.Text = String.Format("{0:X2}", Value);
|
||||
|
||||
}
|
||||
|
||||
private void ClearProperties()
|
||||
{
|
||||
Address = -1;
|
||||
Value = -1;
|
||||
AddressBox.Text = "";
|
||||
ValueBox.Text = "";
|
||||
AddCheat.Enabled = false;
|
||||
//Decoding = false;
|
||||
}
|
||||
|
||||
private void GameGenieCode_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
if (Encoding == false)
|
||||
{
|
||||
if (GameGenieCode.Text.Length > 0)
|
||||
if (GGCodeMaskBox.Text.Length > 0)
|
||||
{
|
||||
Decoding = true;
|
||||
SNESDecodeGameGenieCode(GameGenieCode.Text);
|
||||
int val = 0;
|
||||
int add = 0;
|
||||
SNESGGDecode(GGCodeMaskBox.Text, ref val, ref add);
|
||||
AddressBox.Text = String.Format("{0:X6}", add);
|
||||
ValueBox.Text = String.Format("{0:X2}", val);
|
||||
addcheatbt.Enabled = true;
|
||||
}
|
||||
else
|
||||
ClearProperties();
|
||||
{
|
||||
AddressBox.Text = "";
|
||||
ValueBox.Text = "";
|
||||
addcheatbt.Enabled = false;
|
||||
}
|
||||
Processing = false;
|
||||
}
|
||||
TryEnableAddCheat();
|
||||
Decoding = false;
|
||||
}
|
||||
|
||||
private void Keypad_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (GameGenieCode.Text.Length < 8)
|
||||
if (GGCodeMaskBox.Text.Length < 8)
|
||||
{
|
||||
string code = "";
|
||||
if (sender == B0) code = "0";
|
||||
if (sender == B1) code += "1";
|
||||
if (sender == B2) code += "2";
|
||||
if (sender == B3) code += "3";
|
||||
if (sender == B4) code += "4";
|
||||
if (sender == B5) code += "5";
|
||||
if (sender == B6) code += "6";
|
||||
if (sender == B7) code += "7";
|
||||
if (sender == B8) code += "8";
|
||||
if (sender == B9) code += "9";
|
||||
if (sender == BA) code += "A";
|
||||
if (sender == BB) code += "B";
|
||||
if (sender == BC) code += "C";
|
||||
if (sender == BD) code += "D";
|
||||
if (sender == BE) code += "E";
|
||||
if (sender == BF) code += "F";
|
||||
if (sender == B1) code = "1";
|
||||
if (sender == B2) code = "2";
|
||||
if (sender == B3) code = "3";
|
||||
if (sender == B4) code = "4";
|
||||
if (sender == B5) code = "5";
|
||||
if (sender == B6) code = "6";
|
||||
if (sender == B7) code = "7";
|
||||
if (sender == B8) code = "8";
|
||||
if (sender == B9) code = "9";
|
||||
if (sender == BA) code = "A";
|
||||
if (sender == BB) code = "B";
|
||||
if (sender == BC) code = "C";
|
||||
if (sender == BD) code = "D";
|
||||
if (sender == BE) code = "E";
|
||||
if (sender == BF) code = "F";
|
||||
|
||||
int x = GameGenieCode.SelectionStart;
|
||||
GameGenieCode.Text = GameGenieCode.Text.Insert(x, code);
|
||||
GameGenieCode.SelectionStart = x + 1;
|
||||
GGCodeMaskBox.Text += code;
|
||||
//int x = GGCodeMaskBox.SelectionStart;
|
||||
//GGCodeMaskBox.Text = GGCodeMaskBox.Text.Insert(x, code);
|
||||
//GGCodeMaskBox.SelectionStart = x + 1;
|
||||
}
|
||||
}
|
||||
|
||||
private void AddressBox_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (Decoding == false)
|
||||
//remove invalid character when pasted
|
||||
if (Processing == false)
|
||||
{
|
||||
if (AddressBox.Text.Length > 0 )
|
||||
Processing = true;
|
||||
if (Regex.IsMatch(AddressBox.Text, @"[^a-fA-F0-9]"))
|
||||
{
|
||||
Address = int.Parse(AddressBox.Text, NumberStyles.HexNumber);
|
||||
if (ValueBox.Text.Length > 0)
|
||||
Value = int.Parse(ValueBox.Text, NumberStyles.HexNumber);
|
||||
else
|
||||
Value = 0;
|
||||
Encoding = true;
|
||||
SNESEncodeGameGenie();
|
||||
Encoding = false;
|
||||
string temp = Regex.Replace(AddressBox.Text, @"[^a-fA-F0-9]", string.Empty);
|
||||
AddressBox.Text = temp;
|
||||
}
|
||||
if ((AddressBox.Text.Length > 0) || (ValueBox.Text.Length > 0))
|
||||
{
|
||||
int val = 0;
|
||||
int add = 0;
|
||||
if (ValueBox.Text.Length > 0)
|
||||
val = int.Parse(ValueBox.Text, NumberStyles.HexNumber);
|
||||
if (AddressBox.Text.Length > 0)
|
||||
add = int.Parse(AddressBox.Text, NumberStyles.HexNumber);
|
||||
GGCodeMaskBox.Text = SNESGGEncode(val, add);
|
||||
addcheatbt.Enabled = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
GGCodeMaskBox.Text = "";
|
||||
addcheatbt.Enabled = false;
|
||||
}
|
||||
Processing = false;
|
||||
}
|
||||
TryEnableAddCheat();
|
||||
|
||||
}
|
||||
|
||||
private void TryEnableAddCheat()
|
||||
{
|
||||
if (AddressBox.Text.Length == 6 && ValueBox.Text.Length == 2)
|
||||
AddCheat.Enabled = true;
|
||||
else
|
||||
AddCheat.Enabled = false;
|
||||
}
|
||||
|
||||
private void ValueBox_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (Decoding == false)
|
||||
if (Processing == false)
|
||||
{
|
||||
if (ValueBox.Text.Length > 0)
|
||||
Processing = true;
|
||||
//remove invalid character when pasted
|
||||
if (Regex.IsMatch(ValueBox.Text, @"[^a-fA-F0-9]"))
|
||||
{
|
||||
if (AddressBox.Text.Length > 0)
|
||||
Address = int.Parse(AddressBox.Text, NumberStyles.HexNumber);
|
||||
else
|
||||
Address = 0x000000;
|
||||
Value = int.Parse(ValueBox.Text, NumberStyles.HexNumber);
|
||||
Encoding = true;
|
||||
SNESEncodeGameGenie();
|
||||
Encoding = false;
|
||||
string temp = Regex.Replace(ValueBox.Text, @"[^a-fA-F0-9]", string.Empty);
|
||||
ValueBox.Text = temp;
|
||||
}
|
||||
if ((AddressBox.Text.Length > 0) || (ValueBox.Text.Length > 0))
|
||||
{
|
||||
int val = 0;
|
||||
int add = 0;
|
||||
if (ValueBox.Text.Length > 0)
|
||||
val = int.Parse(ValueBox.Text, NumberStyles.HexNumber);
|
||||
if (AddressBox.Text.Length > 0)
|
||||
add = int.Parse(AddressBox.Text, NumberStyles.HexNumber);
|
||||
GGCodeMaskBox.Text = SNESGGEncode(val, add);
|
||||
addcheatbt.Enabled = true;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
GGCodeMaskBox.Text = "";
|
||||
addcheatbt.Enabled = false;
|
||||
}
|
||||
Processing = false;
|
||||
}
|
||||
TryEnableAddCheat();
|
||||
|
||||
}
|
||||
|
||||
|
||||
private void SNESEncodeGameGenie()
|
||||
{
|
||||
//Code: D F 4 7 0 9 1 5 6 B C 8 A 2 3 E
|
||||
//Hex: 0 1 2 3 4 5 6 7 8 9 A B C D E F
|
||||
//Char # | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|
||||
//Bit # |3|2|1|0|3|2|1|0|3|2|1|0|3|2|1|0|3|2|1|0|3|2|1|0|3|2|1|0|3|2|1|0|
|
||||
//maps to| Value |i|j|k|l|q|r|s|t|o|p|a|b|c|d|u|v|w|x|e|f|g|h|m|n|
|
||||
//order | Value |a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|
|
||||
char[] letters = { 'D', 'F', '4', '7', '0', '9', '1', '5', '6', 'B', 'C', '8', 'A', '2', '3', 'E' };
|
||||
GameGenieCode.Text = "";
|
||||
int[] num = { 0, 0, 0, 0, 0, 0, 0, 0 };
|
||||
num[0] = (Value & 0xF0) >>4;
|
||||
num[1] = Value & 0x0F;
|
||||
|
||||
num[2] = (Address & 0x00F000) >> 12; //ijkl
|
||||
num[3] = (Address & 0x0000F0) >> 4; //qrst
|
||||
num[4] = ((Address & 0x000300) >> 6) | ((Address & 0xC00000) >> 22); //opab
|
||||
num[5] = ((Address & 0x300000) >> 18) | ((Address & 0x00000C) >>2); //cduv
|
||||
num[6] = ((Address & 0x000003) << 2)| ((Address & 0x0C0000) >> 18);//wxef
|
||||
num[7] = ((Address & 0x030000) >> 14) | ((Address & 0x000C00) >> 10);//ghmn*/
|
||||
for (int x = 0; x < 8; x++)
|
||||
GameGenieCode.Text += letters[num[x]];
|
||||
}
|
||||
|
||||
|
||||
private void ClearButton_Click(object sender, EventArgs e)
|
||||
{
|
||||
ClearProperties();
|
||||
GameGenieCode.Text = "";
|
||||
AddressBox.Text = "";
|
||||
ValueBox.Text = "";
|
||||
GGCodeMaskBox.Text = "";
|
||||
addcheatbt.Enabled = false;
|
||||
}
|
||||
|
||||
private void AddCheat_Click(object sender, EventArgs e)
|
||||
{
|
||||
AddCheatClick();
|
||||
}
|
||||
|
||||
private void AddCheatClick()
|
||||
{
|
||||
Cheat c = new Cheat {name = GameGenieCode.Text};
|
||||
Cheat c = new Cheat();
|
||||
if (cheatname.Text.Length > 0)
|
||||
c.name = cheatname.Text;
|
||||
else
|
||||
{
|
||||
Processing = true;
|
||||
GGCodeMaskBox.TextMaskFormat = MaskFormat.IncludeLiterals;
|
||||
c.name = GGCodeMaskBox.Text;
|
||||
GGCodeMaskBox.TextMaskFormat = MaskFormat.ExcludePromptAndLiterals;
|
||||
Processing = false;
|
||||
}
|
||||
|
||||
if (String.IsNullOrWhiteSpace(AddressBox.Text))
|
||||
{
|
||||
return;
|
||||
}
|
||||
else if (String.IsNullOrWhiteSpace(ValueBox.Text))
|
||||
{
|
||||
return;
|
||||
}
|
||||
c.address = 0;
|
||||
else
|
||||
c.address = int.Parse(AddressBox.Text, NumberStyles.HexNumber);
|
||||
|
||||
if (String.IsNullOrWhiteSpace(ValueBox.Text))
|
||||
c.value = 0;
|
||||
else
|
||||
c.value = (byte)((int.Parse(ValueBox.Text, NumberStyles.HexNumber) & 0xFF00) >> 8);
|
||||
|
||||
c.address = int.Parse(AddressBox.Text, NumberStyles.HexNumber);
|
||||
c.value = byte.Parse(ValueBox.Text, NumberStyles.HexNumber);
|
||||
c.compare = null;
|
||||
c.Enable();
|
||||
for (int x = 0; x < Global.Emulator.MemoryDomains.Count; x++)
|
||||
if (Global.Emulator.MemoryDomains[x].ToString() == "BUS")
|
||||
{
|
||||
c.domain = Global.Emulator.MemoryDomains[x]; //Bus
|
||||
Global.MainForm.Cheats1.AddCheat(c);
|
||||
break;
|
||||
}
|
||||
|
||||
if (Global.Emulator.MemoryDomains[x].ToString() == "BUS")
|
||||
{
|
||||
c.domain = Global.Emulator.MemoryDomains[x];
|
||||
c.Enable();
|
||||
Global.MainForm.Cheats1.AddCheat(c);
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
|
||||
|
@ -342,16 +346,9 @@ namespace BizHawk.MultiClient
|
|||
saveWindowPositionToolStripMenuItem.Checked = Global.Config.SNESGGSaveWindowPosition;
|
||||
}
|
||||
|
||||
private void GameGenieCode_KeyDown(object sender, KeyEventArgs e)
|
||||
{
|
||||
if (e.KeyData == Keys.Enter)
|
||||
{
|
||||
if (AddCheat.Enabled)
|
||||
{
|
||||
AddCheatClick();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -7,7 +7,9 @@ using System.Windows.Forms;
|
|||
using System.IO;
|
||||
using System.Globalization;
|
||||
|
||||
using BizHawk.Emulation.Consoles.Nintendo.SNES;
|
||||
using BizHawk.Emulation.Consoles.Nintendo;
|
||||
using BizHawk.Emulation.Consoles.Sega;
|
||||
|
||||
namespace BizHawk.MultiClient
|
||||
{
|
||||
|
@ -149,7 +151,7 @@ namespace BizHawk.MultiClient
|
|||
|
||||
private void ToggleGameGenieButtons()
|
||||
{
|
||||
if (Global.Emulator is NES)
|
||||
if ((Global.Emulator is NES) || (Global.Emulator is Genesis) || (Global.Emulator.SystemId == "GB") || (Global.Game.System == "GG") || (Global.Emulator is LibsnesCore))
|
||||
{
|
||||
toolStripButtonLoadGameGenie.Visible = true;
|
||||
toolStripSeparator7.Visible = true;
|
||||
|
|
Loading…
Reference in New Issue