From 7e34e7f88b8c23157fd0783b327e61c6fa802030 Mon Sep 17 00:00:00 2001 From: goyuken Date: Sat, 29 Sep 2012 15:32:44 +0000 Subject: [PATCH] multiclient: add saveram backup feature, similar to savestate backup feature, and config\menu items. defaults to ON. at the moment, there's no way in the ui to choose to load a backup saveram. not sure if this is desirable.... --- BizHawk.MultiClient/Config.cs | 1 + BizHawk.MultiClient/MainForm.Designer.cs | 50 ++++++++++++++--------- BizHawk.MultiClient/MainForm.MenuItems.cs | 1 + BizHawk.MultiClient/MainForm.cs | 25 ++++++++++++ 4 files changed, 57 insertions(+), 20 deletions(-) diff --git a/BizHawk.MultiClient/Config.cs b/BizHawk.MultiClient/Config.cs index 0ff1ad5150..e1830070fa 100644 --- a/BizHawk.MultiClient/Config.cs +++ b/BizHawk.MultiClient/Config.cs @@ -178,6 +178,7 @@ namespace BizHawk.MultiClient public bool InputConfigAutoTab = true; public bool ShowLogWindow = false; public bool BackupSavestates = true; + public bool BackupSaveram = true; public bool AutoSavestates = false; public bool SaveScreenshotWithStates = true; public int AutofireOn = 1; diff --git a/BizHawk.MultiClient/MainForm.Designer.cs b/BizHawk.MultiClient/MainForm.Designer.cs index 7c69fa99c2..ffee42fd82 100644 --- a/BizHawk.MultiClient/MainForm.Designer.cs +++ b/BizHawk.MultiClient/MainForm.Designer.cs @@ -288,6 +288,7 @@ this.cmiScreenshotClipboard = new System.Windows.Forms.ToolStripMenuItem(); this.cmiCloseRom = new System.Windows.Forms.ToolStripMenuItem(); this.cmiShowMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.backupSaveramToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.menuStrip1.SuspendLayout(); this.StatusSlot0.SuspendLayout(); this.contextMenuStrip1.SuspendLayout(); @@ -313,7 +314,7 @@ this.menuStrip1.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.Flow; this.menuStrip1.Location = new System.Drawing.Point(0, 0); this.menuStrip1.Name = "menuStrip1"; - this.menuStrip1.Size = new System.Drawing.Size(470, 38); + this.menuStrip1.Size = new System.Drawing.Size(470, 40); this.menuStrip1.TabIndex = 0; this.menuStrip1.Text = "menuStrip1"; this.menuStrip1.MenuActivate += new System.EventHandler(this.menuStrip1_MenuActivate); @@ -995,7 +996,7 @@ // this.pauseToolStripMenuItem.Image = global::BizHawk.MultiClient.Properties.Resources.Pause; this.pauseToolStripMenuItem.Name = "pauseToolStripMenuItem"; - this.pauseToolStripMenuItem.Size = new System.Drawing.Size(135, 22); + this.pauseToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.pauseToolStripMenuItem.Text = "&Pause"; this.pauseToolStripMenuItem.Click += new System.EventHandler(this.pauseToolStripMenuItem_Click); // @@ -1003,26 +1004,26 @@ // this.rebootCoreToolStripMenuItem.Image = global::BizHawk.MultiClient.Properties.Resources.reboot; this.rebootCoreToolStripMenuItem.Name = "rebootCoreToolStripMenuItem"; - this.rebootCoreToolStripMenuItem.Size = new System.Drawing.Size(135, 22); + this.rebootCoreToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.rebootCoreToolStripMenuItem.Text = "&Reboot Core"; this.rebootCoreToolStripMenuItem.Click += new System.EventHandler(this.powerToolStripMenuItem_Click); // // toolStripSeparator1 // this.toolStripSeparator1.Name = "toolStripSeparator1"; - this.toolStripSeparator1.Size = new System.Drawing.Size(132, 6); + this.toolStripSeparator1.Size = new System.Drawing.Size(149, 6); // // resetToolStripMenuItem // this.resetToolStripMenuItem.Name = "resetToolStripMenuItem"; - this.resetToolStripMenuItem.Size = new System.Drawing.Size(135, 22); + this.resetToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.resetToolStripMenuItem.Text = "&Soft Reset"; this.resetToolStripMenuItem.Click += new System.EventHandler(this.resetToolStripMenuItem_Click); // // hardResetToolStripMenuItem // this.hardResetToolStripMenuItem.Name = "hardResetToolStripMenuItem"; - this.hardResetToolStripMenuItem.Size = new System.Drawing.Size(135, 22); + this.hardResetToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.hardResetToolStripMenuItem.Text = "&Hard Reset"; this.hardResetToolStripMenuItem.Click += new System.EventHandler(this.hardResetToolStripMenuItem_Click); // @@ -1239,7 +1240,7 @@ // this.controllersToolStripMenuItem.Image = global::BizHawk.MultiClient.Properties.Resources.GameController; this.controllersToolStripMenuItem.Name = "controllersToolStripMenuItem"; - this.controllersToolStripMenuItem.Size = new System.Drawing.Size(138, 22); + this.controllersToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.controllersToolStripMenuItem.Text = "&Controllers..."; this.controllersToolStripMenuItem.Click += new System.EventHandler(this.controllersToolStripMenuItem_Click); // @@ -1247,7 +1248,7 @@ // this.hotkeysToolStripMenuItem.Image = global::BizHawk.MultiClient.Properties.Resources.HotKeys; this.hotkeysToolStripMenuItem.Name = "hotkeysToolStripMenuItem"; - this.hotkeysToolStripMenuItem.Size = new System.Drawing.Size(138, 22); + this.hotkeysToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.hotkeysToolStripMenuItem.Text = "&Hotkeys..."; this.hotkeysToolStripMenuItem.Click += new System.EventHandler(this.hotkeysToolStripMenuItem_Click); // @@ -1255,7 +1256,7 @@ // this.messagesToolStripMenuItem.Image = global::BizHawk.MultiClient.Properties.Resources.MessageConfig; this.messagesToolStripMenuItem.Name = "messagesToolStripMenuItem"; - this.messagesToolStripMenuItem.Size = new System.Drawing.Size(138, 22); + this.messagesToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.messagesToolStripMenuItem.Text = "&Messages..."; this.messagesToolStripMenuItem.Click += new System.EventHandler(this.messagesToolStripMenuItem_Click); // @@ -1263,7 +1264,7 @@ // this.pathsToolStripMenuItem.Image = global::BizHawk.MultiClient.Properties.Resources.CopyFolderHS; this.pathsToolStripMenuItem.Name = "pathsToolStripMenuItem"; - this.pathsToolStripMenuItem.Size = new System.Drawing.Size(138, 22); + this.pathsToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.pathsToolStripMenuItem.Text = "Paths..."; this.pathsToolStripMenuItem.Click += new System.EventHandler(this.pathsToolStripMenuItem_Click); // @@ -1271,7 +1272,7 @@ // this.soundToolStripMenuItem.Image = global::BizHawk.MultiClient.Properties.Resources.AudioHS; this.soundToolStripMenuItem.Name = "soundToolStripMenuItem"; - this.soundToolStripMenuItem.Size = new System.Drawing.Size(138, 22); + this.soundToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.soundToolStripMenuItem.Text = "&Sound..."; this.soundToolStripMenuItem.Click += new System.EventHandler(this.soundToolStripMenuItem_Click); // @@ -1279,14 +1280,14 @@ // this.autofireToolStripMenuItem.Image = global::BizHawk.MultiClient.Properties.Resources.Lightning; this.autofireToolStripMenuItem.Name = "autofireToolStripMenuItem"; - this.autofireToolStripMenuItem.Size = new System.Drawing.Size(138, 22); + this.autofireToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.autofireToolStripMenuItem.Text = "&Autofire..."; this.autofireToolStripMenuItem.Click += new System.EventHandler(this.autofireToolStripMenuItem_Click); // // toolStripSeparator9 // this.toolStripSeparator9.Name = "toolStripSeparator9"; - this.toolStripSeparator9.Size = new System.Drawing.Size(135, 6); + this.toolStripSeparator9.Size = new System.Drawing.Size(149, 6); // // enableToolStripMenuItem // @@ -1296,9 +1297,10 @@ this.backupSavestatesToolStripMenuItem, this.autoSavestatesToolStripMenuItem, this.saveScreenshotWithSavestatesToolStripMenuItem, - this.frameAdvanceSkipLagFramesToolStripMenuItem}); + this.frameAdvanceSkipLagFramesToolStripMenuItem, + this.backupSaveramToolStripMenuItem}); this.enableToolStripMenuItem.Name = "enableToolStripMenuItem"; - this.enableToolStripMenuItem.Size = new System.Drawing.Size(138, 22); + this.enableToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.enableToolStripMenuItem.Text = "&Enable"; this.enableToolStripMenuItem.DropDownOpened += new System.EventHandler(this.enableToolStripMenuItem_DropDownOpened); // @@ -1361,7 +1363,7 @@ this.toolStripSeparator23, this.logWindowAsConsoleToolStripMenuItem}); this.gUIToolStripMenuItem.Name = "gUIToolStripMenuItem"; - this.gUIToolStripMenuItem.Size = new System.Drawing.Size(138, 22); + this.gUIToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.gUIToolStripMenuItem.Text = "GUI"; this.gUIToolStripMenuItem.DropDownOpened += new System.EventHandler(this.gUIToolStripMenuItem_DropDownOpened); // @@ -1476,7 +1478,7 @@ this.miSpeed150, this.miSpeed200}); this.frameSkipToolStripMenuItem.Name = "frameSkipToolStripMenuItem"; - this.frameSkipToolStripMenuItem.Size = new System.Drawing.Size(138, 22); + this.frameSkipToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.frameSkipToolStripMenuItem.Text = "Speed/Skip"; this.frameSkipToolStripMenuItem.DropDownOpened += new System.EventHandler(this.frameSkipToolStripMenuItem_DropDownOpened); // @@ -1619,13 +1621,13 @@ // toolStripSeparator10 // this.toolStripSeparator10.Name = "toolStripSeparator10"; - this.toolStripSeparator10.Size = new System.Drawing.Size(135, 6); + this.toolStripSeparator10.Size = new System.Drawing.Size(149, 6); // // saveConfigToolStripMenuItem // this.saveConfigToolStripMenuItem.Image = global::BizHawk.MultiClient.Properties.Resources.Save; this.saveConfigToolStripMenuItem.Name = "saveConfigToolStripMenuItem"; - this.saveConfigToolStripMenuItem.Size = new System.Drawing.Size(138, 22); + this.saveConfigToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.saveConfigToolStripMenuItem.Text = "Save Config"; this.saveConfigToolStripMenuItem.Click += new System.EventHandler(this.saveConfigToolStripMenuItem_Click); // @@ -1633,7 +1635,7 @@ // this.loadConfigToolStripMenuItem.Image = global::BizHawk.MultiClient.Properties.Resources.LoadConfig; this.loadConfigToolStripMenuItem.Name = "loadConfigToolStripMenuItem"; - this.loadConfigToolStripMenuItem.Size = new System.Drawing.Size(138, 22); + this.loadConfigToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.loadConfigToolStripMenuItem.Text = "Load Config"; // // toolsToolStripMenuItem @@ -2479,6 +2481,13 @@ this.cmiShowMenu.Text = "Show Menu"; this.cmiShowMenu.Click += new System.EventHandler(this.showMenuToolStripMenuItem_Click); // + // backupSaveramToolStripMenuItem + // + this.backupSaveramToolStripMenuItem.Name = "backupSaveramToolStripMenuItem"; + this.backupSaveramToolStripMenuItem.Size = new System.Drawing.Size(236, 22); + this.backupSaveramToolStripMenuItem.Text = "Backup Saveram"; + this.backupSaveramToolStripMenuItem.Click += new System.EventHandler(this.backupSaveramToolStripMenuItem_Click); + // // MainForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 14F); @@ -2778,6 +2787,7 @@ private System.Windows.Forms.ToolStripMenuItem captureOSDToolStripMenuItem1; private System.Windows.Forms.ToolStripMenuItem loadGBInSGBToolStripMenuItem1; private System.Windows.Forms.ToolStripMenuItem loadGBInSGBToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem backupSaveramToolStripMenuItem; } } diff --git a/BizHawk.MultiClient/MainForm.MenuItems.cs b/BizHawk.MultiClient/MainForm.MenuItems.cs index 04117bb192..5a9a031b5b 100644 --- a/BizHawk.MultiClient/MainForm.MenuItems.cs +++ b/BizHawk.MultiClient/MainForm.MenuItems.cs @@ -1298,6 +1298,7 @@ namespace BizHawk.MultiClient autoSavestatesToolStripMenuItem.Checked = Global.Config.AutoSavestates; saveScreenshotWithSavestatesToolStripMenuItem.Checked = Global.Config.SaveScreenshotWithStates; frameAdvanceSkipLagFramesToolStripMenuItem.Checked = Global.Config.SkipLagFrame; + backupSaveramToolStripMenuItem.Checked = Global.Config.BackupSaveram; } private void frameAdvanceSkipLagFramesToolStripMenuItem_Click(object sender, EventArgs e) diff --git a/BizHawk.MultiClient/MainForm.cs b/BizHawk.MultiClient/MainForm.cs index 966f37679d..4b85d80413 100644 --- a/BizHawk.MultiClient/MainForm.cs +++ b/BizHawk.MultiClient/MainForm.cs @@ -1677,6 +1677,17 @@ namespace BizHawk.MultiClient if (f.Directory.Exists == false) f.Directory.Create(); + //Make backup first + if (Global.Config.BackupSaveram && f.Exists == true) + { + string backup = path + ".bak"; + var backupFile = new FileInfo(backup); + if (backupFile.Exists == true) + backupFile.Delete(); + f.CopyTo(backup); + } + + var writer = new BinaryWriter(new FileStream(path, FileMode.Create, FileAccess.Write)); var saveram = Global.Emulator.ReadSaveRam(); @@ -3679,5 +3690,19 @@ namespace BizHawk.MultiClient { Global.RenderPanel.Resized = true; } + + private void backupSaveramToolStripMenuItem_Click(object sender, EventArgs e) + { + Global.Config.BackupSaveram ^= true; + if (Global.Config.BackupSaveram) + { + Global.OSD.AddMessage("Backup saveram enabled"); + } + else + { + Global.OSD.AddMessage("Backup saveram disabled"); + } + + } } }