From eb0b4176978cefc7cd20ec7e2b415f5dfbc48820 Mon Sep 17 00:00:00 2001 From: Kurt Date: Sat, 26 Jul 2014 20:21:31 -0700 Subject: [PATCH] Handling improvements call garbage collection, prevent large file loading to keep low RAM footprint longer, Box data clarified a little bit more labeled O-Power with guesses --- CodeGenerator.cs | 14 +++++-- SAV_BoxLayout.Designer.cs | 84 +++++++++++++++++++++++++++++---------- SAV_BoxLayout.cs | 12 ++++-- SAV_BoxLayout.resx | 32 ++++++++++++++- SAV_OPower.Designer.cs | 30 +++++++------- f1-Main.Designer.cs | 16 ++++---- f1-Main.cs | 18 +++++++-- 7 files changed, 151 insertions(+), 55 deletions(-) diff --git a/CodeGenerator.cs b/CodeGenerator.cs index 101500eb0..3f45a9506 100644 --- a/CodeGenerator.cs +++ b/CodeGenerator.cs @@ -265,28 +265,36 @@ private void B_Copy_Click(object sender, EventArgs e) private void B_Diff_Click(object sender, EventArgs e) { + string result = ""; RTB_Code.Clear(); byte[] cybersav = m_parent.cyberSAV; byte[] editedsav = m_parent.savefile; byte[] newcyber = new Byte[0x65600]; Array.Copy(editedsav, 0x5400, newcyber, 0, 0x65600); + if (!m_parent.cybergadget) Array.Copy(editedsav, m_parent.savindex * 0x7F000 + 0x5400, newcyber, 0, 0x65600); int lines = 0; for (int i = 0; i < 0x65400; i += 4) { if (BitConverter.ToUInt32(cybersav, i) != BitConverter.ToUInt32(newcyber, i)) { - RTB_Code.AppendText((0x20000000 + i).ToString("X8") + " "); - RTB_Code.AppendText(BitConverter.ToUInt32(newcyber, i).ToString("X8") + "\n"); + result += ((0x20000000 + i).ToString("X8") + " "); + result += (BitConverter.ToUInt32(newcyber, i).ToString("X8") + "\n"); lines++; if (lines % 128 == 0) - { RTB_Code.AppendText("\r\n--- Segment " + (lines/128 + 1).ToString() + " ---\r\n\r\n"); } + { result += ("\r\n--- Segment " + (lines / 128 + 1).ToString() + " ---\r\n\r\n"); } + if (lines > 10000) goto toomany; } } if (lines / 128 > 0) { MessageBox.Show((1+ (lines / 128)).ToString() + " Code Segments","Alert"); } + RTB_Code.Text = result; return; + toomany: + { + MessageBox.Show("Too many differences. Export your save instead.", "Alert"); + } } } } diff --git a/SAV_BoxLayout.Designer.cs b/SAV_BoxLayout.Designer.cs index 2a2962f35..38d64ef53 100644 --- a/SAV_BoxLayout.Designer.cs +++ b/SAV_BoxLayout.Designer.cs @@ -37,9 +37,10 @@ private void InitializeComponent() this.L_Flags = new System.Windows.Forms.Label(); this.MT_BG1 = new System.Windows.Forms.MaskedTextBox(); this.MT_BG2 = new System.Windows.Forms.MaskedTextBox(); - this.MT_BG3 = new System.Windows.Forms.MaskedTextBox(); this.B_Save = new System.Windows.Forms.Button(); this.B_Cancel = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.CB_Unlocked = new System.Windows.Forms.ComboBox(); this.SuspendLayout(); // // LB_BoxSelect @@ -79,7 +80,7 @@ private void InitializeComponent() "Box 31"}); this.LB_BoxSelect.Location = new System.Drawing.Point(12, 14); this.LB_BoxSelect.Name = "LB_BoxSelect"; - this.LB_BoxSelect.Size = new System.Drawing.Size(78, 134); + this.LB_BoxSelect.Size = new System.Drawing.Size(78, 212); this.LB_BoxSelect.TabIndex = 0; this.LB_BoxSelect.SelectedIndexChanged += new System.EventHandler(this.changeBox); // @@ -124,7 +125,7 @@ private void InitializeComponent() // L_Flags // this.L_Flags.AutoSize = true; - this.L_Flags.Location = new System.Drawing.Point(104, 82); + this.L_Flags.Location = new System.Drawing.Point(103, 112); this.L_Flags.Name = "L_Flags"; this.L_Flags.Size = new System.Drawing.Size(102, 13); this.L_Flags.TabIndex = 5; @@ -132,7 +133,7 @@ private void InitializeComponent() // // MT_BG1 // - this.MT_BG1.Location = new System.Drawing.Point(106, 98); + this.MT_BG1.Location = new System.Drawing.Point(117, 128); this.MT_BG1.Mask = "00"; this.MT_BG1.Name = "MT_BG1"; this.MT_BG1.Size = new System.Drawing.Size(29, 20); @@ -142,7 +143,7 @@ private void InitializeComponent() // // MT_BG2 // - this.MT_BG2.Location = new System.Drawing.Point(142, 98); + this.MT_BG2.Location = new System.Drawing.Point(157, 128); this.MT_BG2.Mask = "00"; this.MT_BG2.Name = "MT_BG2"; this.MT_BG2.Size = new System.Drawing.Size(29, 20); @@ -150,19 +151,9 @@ private void InitializeComponent() this.MT_BG2.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; this.MT_BG2.TextChanged += new System.EventHandler(this.changeBoxDetails); // - // MT_BG3 - // - this.MT_BG3.Location = new System.Drawing.Point(177, 98); - this.MT_BG3.Mask = "00"; - this.MT_BG3.Name = "MT_BG3"; - this.MT_BG3.Size = new System.Drawing.Size(29, 20); - this.MT_BG3.TabIndex = 8; - this.MT_BG3.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; - this.MT_BG3.TextChanged += new System.EventHandler(this.changeBoxDetails); - // // B_Save // - this.B_Save.Location = new System.Drawing.Point(157, 127); + this.B_Save.Location = new System.Drawing.Point(157, 203); this.B_Save.Name = "B_Save"; this.B_Save.Size = new System.Drawing.Size(50, 23); this.B_Save.TabIndex = 9; @@ -172,7 +163,7 @@ private void InitializeComponent() // // B_Cancel // - this.B_Cancel.Location = new System.Drawing.Point(101, 127); + this.B_Cancel.Location = new System.Drawing.Point(96, 203); this.B_Cancel.Name = "B_Cancel"; this.B_Cancel.Size = new System.Drawing.Size(50, 23); this.B_Cancel.TabIndex = 10; @@ -180,14 +171,66 @@ private void InitializeComponent() this.B_Cancel.UseVisualStyleBackColor = true; this.B_Cancel.Click += new System.EventHandler(this.B_Cancel_Click); // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(103, 179); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(56, 13); + this.label1.TabIndex = 11; + this.label1.Text = "Unlocked:"; + // + // CB_Unlocked + // + this.CB_Unlocked.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.CB_Unlocked.FormattingEnabled = true; + this.CB_Unlocked.Items.AddRange(new object[] { + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + "14", + "15", + "16", + "17", + "18", + "19", + "20", + "21", + "22", + "23", + "24", + "25", + "26", + "27", + "28", + "29", + "30", + "31"}); + this.CB_Unlocked.Location = new System.Drawing.Point(165, 176); + this.CB_Unlocked.Name = "CB_Unlocked"; + this.CB_Unlocked.Size = new System.Drawing.Size(40, 21); + this.CB_Unlocked.TabIndex = 12; + this.CB_Unlocked.TextChanged += new System.EventHandler(this.changeBoxDetails); + // // SAV_BoxLayout // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(219, 162); + this.ClientSize = new System.Drawing.Size(219, 239); + this.Controls.Add(this.CB_Unlocked); + this.Controls.Add(this.label1); this.Controls.Add(this.B_Cancel); this.Controls.Add(this.B_Save); - this.Controls.Add(this.MT_BG3); this.Controls.Add(this.MT_BG2); this.Controls.Add(this.MT_BG1); this.Controls.Add(this.L_Flags); @@ -218,8 +261,9 @@ private void InitializeComponent() private System.Windows.Forms.Label L_Flags; private System.Windows.Forms.MaskedTextBox MT_BG1; private System.Windows.Forms.MaskedTextBox MT_BG2; - private System.Windows.Forms.MaskedTextBox MT_BG3; private System.Windows.Forms.Button B_Save; private System.Windows.Forms.Button B_Cancel; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.ComboBox CB_Unlocked; } } \ No newline at end of file diff --git a/SAV_BoxLayout.cs b/SAV_BoxLayout.cs index cdd471088..e2348433a 100644 --- a/SAV_BoxLayout.cs +++ b/SAV_BoxLayout.cs @@ -15,6 +15,7 @@ public SAV_BoxLayout(Form1 frm1) { InitializeComponent(); m_parent = frm1; + editing = true; Array.Copy(m_parent.savefile, sav, 0x100000); savindex = m_parent.savindex; LB_BoxSelect.SelectedIndex = 0; @@ -41,8 +42,10 @@ private void changeBox(object sender, EventArgs e) MT_BG.Text = sav[0x9C1E + savindex * 0x7F000 + index].ToString(); MT_BG1.Text = sav[0x9C3D + savindex * 0x7F000].ToString(); - MT_BG2.Text = sav[0x9C3E + savindex * 0x7F000].ToString(); - MT_BG3.Text = sav[0x9C3F + savindex * 0x7F000].ToString(); + MT_BG2.Text = sav[0x9C3F + savindex * 0x7F000].ToString(); + + CB_Unlocked.SelectedIndex = sav[0x9C3E + savindex * 0x7F000] - 1; + editing = false; } private void changeBoxDetails(object sender, EventArgs e) @@ -60,8 +63,9 @@ private void changeBoxDetails(object sender, EventArgs e) sav[0x9C1E + savindex * 0x7F000 + index] = (byte)ToUInt32(MT_BG.Text); sav[0x9C3D + savindex * 0x7F000] = (byte)ToUInt32(MT_BG1.Text); - sav[0x9C3E + savindex * 0x7F000] = (byte)ToUInt32(MT_BG2.Text); - sav[0x9C3F + savindex * 0x7F000] = (byte)ToUInt32(MT_BG3.Text); + sav[0x9C3F + savindex * 0x7F000] = (byte)ToUInt32(MT_BG2.Text); + + sav[0x9C3E + savindex * 0x7F000] = (byte)ToUInt32(CB_Unlocked.Text); } } private void B_Cancel_Click(object sender, EventArgs e) diff --git a/SAV_BoxLayout.resx b/SAV_BoxLayout.resx index ce77b21c0..84d1fbe93 100644 --- a/SAV_BoxLayout.resx +++ b/SAV_BoxLayout.resx @@ -117,7 +117,37 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + + True + + True diff --git a/SAV_OPower.Designer.cs b/SAV_OPower.Designer.cs index ba804052d..480ac8365 100644 --- a/SAV_OPower.Designer.cs +++ b/SAV_OPower.Designer.cs @@ -90,7 +90,7 @@ private void InitializeComponent() this.L_1.Name = "L_1"; this.L_1.Size = new System.Drawing.Size(70, 13); this.L_1.TabIndex = 1; - this.L_1.Text = "Power 1:"; + this.L_1.Text = "?Bargain:"; this.L_1.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // L_2 @@ -99,7 +99,7 @@ private void InitializeComponent() this.L_2.Name = "L_2"; this.L_2.Size = new System.Drawing.Size(70, 13); this.L_2.TabIndex = 3; - this.L_2.Text = "Power 2:"; + this.L_2.Text = "?EXP:"; this.L_2.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // CB_2 @@ -123,7 +123,7 @@ private void InitializeComponent() this.L_3.Name = "L_3"; this.L_3.Size = new System.Drawing.Size(70, 13); this.L_3.TabIndex = 5; - this.L_3.Text = "Power 3:"; + this.L_3.Text = "?Prize:"; this.L_3.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // CB_3 @@ -147,7 +147,7 @@ private void InitializeComponent() this.L_4.Name = "L_4"; this.L_4.Size = new System.Drawing.Size(70, 13); this.L_4.TabIndex = 7; - this.L_4.Text = "Power 4:"; + this.L_4.Text = "?Hatch:"; this.L_4.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // CB_4 @@ -195,7 +195,7 @@ private void InitializeComponent() this.L_6.Name = "L_6"; this.L_6.Size = new System.Drawing.Size(70, 13); this.L_6.TabIndex = 11; - this.L_6.Text = "Power 6:"; + this.L_6.Text = "?Encounter"; this.L_6.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // CB_6 @@ -218,7 +218,7 @@ private void InitializeComponent() this.L_7.Name = "L_7"; this.L_7.Size = new System.Drawing.Size(70, 13); this.L_7.TabIndex = 13; - this.L_7.Text = "Power 7:"; + this.L_7.Text = "?Stealth:"; this.L_7.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // CB_7 @@ -264,7 +264,7 @@ private void InitializeComponent() this.L_17.Name = "L_17"; this.L_17.Size = new System.Drawing.Size(70, 13); this.L_17.TabIndex = 31; - this.L_17.Text = "Power 17:"; + this.L_17.Text = "?Accuracy:"; this.L_17.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // CB_17 @@ -287,7 +287,7 @@ private void InitializeComponent() this.L_16.Name = "L_16"; this.L_16.Size = new System.Drawing.Size(70, 13); this.L_16.TabIndex = 29; - this.L_16.Text = "Power 16:"; + this.L_16.Text = "?Critical Hit:"; this.L_16.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // CB_16 @@ -310,7 +310,7 @@ private void InitializeComponent() this.L_15.Name = "L_15"; this.L_15.Size = new System.Drawing.Size(70, 13); this.L_15.TabIndex = 27; - this.L_15.Text = "Power 15:"; + this.L_15.Text = "?Speed:"; this.L_15.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // CB_15 @@ -333,7 +333,7 @@ private void InitializeComponent() this.L_14.Name = "L_14"; this.L_14.Size = new System.Drawing.Size(70, 13); this.L_14.TabIndex = 25; - this.L_14.Text = "Power 14:"; + this.L_14.Text = "?Sp. Def:"; this.L_14.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // CB_14 @@ -356,7 +356,7 @@ private void InitializeComponent() this.L_13.Name = "L_13"; this.L_13.Size = new System.Drawing.Size(70, 13); this.L_13.TabIndex = 23; - this.L_13.Text = "Power 13:"; + this.L_13.Text = "?Sp. Atk:"; this.L_13.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // CB_13 @@ -379,7 +379,7 @@ private void InitializeComponent() this.L_12.Name = "L_12"; this.L_12.Size = new System.Drawing.Size(70, 13); this.L_12.TabIndex = 21; - this.L_12.Text = "Power 12:"; + this.L_12.Text = "?Defense:"; this.L_12.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // CB_12 @@ -402,7 +402,7 @@ private void InitializeComponent() this.L_11.Name = "L_11"; this.L_11.Size = new System.Drawing.Size(70, 13); this.L_11.TabIndex = 19; - this.L_11.Text = "Power 11:"; + this.L_11.Text = "?Attack:"; this.L_11.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // CB_11 @@ -425,7 +425,7 @@ private void InitializeComponent() this.L_10.Name = "L_10"; this.L_10.Size = new System.Drawing.Size(70, 13); this.L_10.TabIndex = 17; - this.L_10.Text = "Power 10:"; + this.L_10.Text = "?Befriend:"; this.L_10.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // CB_10 @@ -449,7 +449,7 @@ private void InitializeComponent() this.L_9.Name = "L_9"; this.L_9.Size = new System.Drawing.Size(70, 13); this.L_9.TabIndex = 33; - this.L_9.Text = "Power 9:"; + this.L_9.Text = "?PP:"; this.L_9.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // CB_9 diff --git a/f1-Main.Designer.cs b/f1-Main.Designer.cs index 4c581a593..babc60a12 100644 --- a/f1-Main.Designer.cs +++ b/f1-Main.Designer.cs @@ -212,7 +212,7 @@ public void InitializeComponent() this.Menu_Save = new System.Windows.Forms.ToolStripMenuItem(); this.Menu_Exit = new System.Windows.Forms.ToolStripMenuItem(); this.Menu_Tools = new System.Windows.Forms.ToolStripMenuItem(); - this.Menu_OpenBoxUI = new System.Windows.Forms.ToolStripMenuItem(); + this.Menu_ToggleBoxUI = new System.Windows.Forms.ToolStripMenuItem(); this.Menu_BoxIO = new System.Windows.Forms.ToolStripMenuItem(); this.reportToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.codeGeneratorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -2540,7 +2540,7 @@ public void InitializeComponent() // Menu_Tools // this.Menu_Tools.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.Menu_OpenBoxUI, + this.Menu_ToggleBoxUI, this.Menu_BoxIO, this.reportToolStripMenuItem, this.codeGeneratorToolStripMenuItem}); @@ -2548,12 +2548,12 @@ public void InitializeComponent() this.Menu_Tools.Size = new System.Drawing.Size(48, 20); this.Menu_Tools.Text = "Tools"; // - // Menu_OpenBoxUI + // Menu_ToggleBoxUI // - this.Menu_OpenBoxUI.Name = "Menu_OpenBoxUI"; - this.Menu_OpenBoxUI.Size = new System.Drawing.Size(182, 22); - this.Menu_OpenBoxUI.Text = "Toggle Box Interface"; - this.Menu_OpenBoxUI.Click += new System.EventHandler(this.mainmenuWiden); + this.Menu_ToggleBoxUI.Name = "Menu_ToggleBoxUI"; + this.Menu_ToggleBoxUI.Size = new System.Drawing.Size(182, 22); + this.Menu_ToggleBoxUI.Text = "Toggle Box Interface"; + this.Menu_ToggleBoxUI.Click += new System.EventHandler(this.mainmenuWiden); // // Menu_BoxIO // @@ -4184,7 +4184,7 @@ public void InitializeComponent() private System.Windows.Forms.ComboBox CB_EggLocation; private System.Windows.Forms.Label Label_CharacteristicPrefix; private System.Windows.Forms.ToolStripMenuItem Menu_Tools; - private System.Windows.Forms.ToolStripMenuItem Menu_OpenBoxUI; + private System.Windows.Forms.ToolStripMenuItem Menu_ToggleBoxUI; private System.Windows.Forms.ToolStripMenuItem Menu_Options; private System.Windows.Forms.ToolStripMenuItem Menu_Language; private System.Windows.Forms.ToolStripComboBox CB_MainLanguage; diff --git a/f1-Main.cs b/f1-Main.cs index fc752eb2f..ec9799a0b 100644 --- a/f1-Main.cs +++ b/f1-Main.cs @@ -5940,6 +5940,11 @@ private void mainmenuOpen(object sender, EventArgs e) { string path = OpenPKX.FileName; string ext = Path.GetExtension(path); + if (new FileInfo(path).Length > 0x10009C) + { + MessageBox.Show("Input file is too large.", "Alert"); return; + } + byte[] input = File.ReadAllBytes(path); try { @@ -6061,7 +6066,6 @@ private void openfile(byte[] input, string path, string ext) B_VerifyCHK.Enabled = B_OUTHallofFame.Enabled = true; B_VerifySHA.Enabled = false; - reportToolStripMenuItem.Enabled = true; B_SwitchSAV.Enabled = false; tabBoxMulti.Enabled = true; C_BoxSelect.SelectedIndex = 0; @@ -6085,7 +6089,6 @@ private void openfile(byte[] input, string path, string ext) { B_ExportSAV.Enabled = false; B_SwitchSAV.Enabled = false; - reportToolStripMenuItem.Enabled = false; B_OUTPasserby.Enabled = B_OUTHallofFame.Enabled = B_JPEG.Enabled = false; if ((BitConverter.ToUInt32(input, 0x100) != 0x41534944) && (BitConverter.ToUInt32(input, 0x5234) != 0x6E69616D)) { @@ -6132,7 +6135,6 @@ private void openfile(byte[] input, string path, string ext) { B_ExportSAV.Enabled = true; B_SwitchSAV.Enabled = true; - reportToolStripMenuItem.Enabled = true; savindex = detectSAVIndex(input); opensave(input, path, ext); } @@ -6202,6 +6204,7 @@ private void openfile(byte[] input, string path, string ext) MessageBox.Show(message, caption); } } + GC.Collect(); } private void opensave(byte[] input, string path, string ext) { @@ -6210,7 +6213,7 @@ private void opensave(byte[] input, string path, string ext) int newwidth = (this.Width * (54000 / 260)) / 100 + 2; this.Width = newwidth; } - Menu_OpenBoxUI.Visible = false; + Menu_ToggleBoxUI.Visible = false; savefile = input; savedited = false; L_Save.Text = "SAV: " + Path.GetFileName(path); @@ -6246,6 +6249,8 @@ private void opensave(byte[] input, string path, string ext) B_SwitchSAV.Enabled = (hashValue1.SequenceEqual(realHash1) && hashValue2.SequenceEqual(realHash2)); getSAVOffsets(); + Array.Copy(savefile, 0x5400 + 0x7F000 * savindex, cyberSAV, 0, cyberSAV.Length); + cybergadget = false; } private void openg5pkm() { @@ -6936,6 +6941,11 @@ private void tabMain_DragDrop(object sender, DragEventArgs e) } string ext = Path.GetExtension(path); + FileInfo fi = new FileInfo(path); + if (fi.Length > 0x10009C) + { + MessageBox.Show("Input file is too large.", "Alert"); return; + } byte[] input = File.ReadAllBytes(path); try {