Genesis GG decoder/encoder (working codes!) and revamped UI of SNES/GG/GB Decoders

This commit is contained in:
masterofpuppets152001 2013-04-26 03:12:04 +00:00
parent df99f36464
commit 670460df8c
11 changed files with 1421 additions and 615 deletions

View File

@ -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>

View File

@ -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;

View File

@ -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;
}
}

View File

@ -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();
}
}
}
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}
}

View File

@ -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>

View File

@ -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()

View File

@ -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;
}
}

View File

@ -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();
}
}
}
}

View File

@ -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;