diff --git a/BizHawk.Client.EmuHawk/MainForm.Events.cs b/BizHawk.Client.EmuHawk/MainForm.Events.cs index 9279133ff7..48effc94fb 100644 --- a/BizHawk.Client.EmuHawk/MainForm.Events.cs +++ b/BizHawk.Client.EmuHawk/MainForm.Events.cs @@ -453,22 +453,6 @@ namespace BizHawk.Client.EmuHawk FlushSaveRAM(); } - private void AutoFlushMenuItem_Click(object sender, EventArgs e) - { - switch (((ToolStripMenuItem)sender).Text) - { - case "Off": Global.Config.FlushSaveRamFrames = 0; break; - case "1s": Global.Config.FlushSaveRamFrames = 1 * 60; break; - case "5s": Global.Config.FlushSaveRamFrames = 5 * 60; break; - case "15s": Global.Config.FlushSaveRamFrames = 15 * 60; break; - case "30s": Global.Config.FlushSaveRamFrames = 30 * 60; break; - case "1m": Global.Config.FlushSaveRamFrames = 60 * 60; break; - case "5m": Global.Config.FlushSaveRamFrames = 300 * 60; break; - } - if (_flushSaveRamIn > Global.Config.FlushSaveRamFrames) - _flushSaveRamIn = Global.Config.FlushSaveRamFrames; - } - private void ReadonlyMenuItem_Click(object sender, EventArgs e) { ToggleReadOnly(); diff --git a/BizHawk.Client.EmuHawk/MainForm.cs b/BizHawk.Client.EmuHawk/MainForm.cs index e10f007b18..cc5601f98f 100644 --- a/BizHawk.Client.EmuHawk/MainForm.cs +++ b/BizHawk.Client.EmuHawk/MainForm.cs @@ -405,9 +405,7 @@ namespace BizHawk.Client.EmuHawk { PauseEmulator(); } - - _flushSaveRamIn = Global.Config.FlushSaveRamFrames; - + // start dumping, if appropriate if (argParse.cmdDumpType != null && argParse.cmdDumpName != null) { @@ -1418,6 +1416,7 @@ namespace BizHawk.Client.EmuHawk public PresentationPanel PresentationPanel { get; } private int _flushSaveRamIn; + public int FlushSaveRamIn { get { return _flushSaveRamIn; } set { _flushSaveRamIn = value; } } #endregion #region Private methods @@ -1599,6 +1598,7 @@ namespace BizHawk.Client.EmuHawk } Emulator.AsSaveRam().StoreSaveRam(sram); + _flushSaveRamIn = Global.Config.FlushSaveRamFrames; } catch (IOException) { @@ -1613,36 +1613,47 @@ namespace BizHawk.Client.EmuHawk { var path = PathManager.SaveRamPath(Global.Game); if (autosave) - path=path.Insert(path.Length-8, ".autosave"); //becomes path\name.autosave.SaveRAM - var f = new FileInfo(path); - if (f.Directory != null && !f.Directory.Exists) { - f.Directory.Create(); + _flushSaveRamIn = Global.Config.FlushSaveRamFrames; + path = path.Insert(path.Length - 8, ".autosave"); //becomes path\name.autosave.SaveRAM + } + var file = new FileInfo(path); + var newPath = path + ".new"; + var newFile = new FileInfo(newPath); + var backupPath = path + ".bak"; + var backupFile = new FileInfo(backupPath); + if (file.Directory != null && !file.Directory.Exists) + { + file.Directory.Create(); } - // Make backup first - if (Global.Config.BackupSaveram && f.Exists) - { - var backup = path + ".bak"; - var backupFile = new FileInfo(backup); - if (backupFile.Exists) - { - backupFile.Delete(); - } - - f.CopyTo(backup); - } - - var writer = new BinaryWriter(new FileStream(path, FileMode.Create, FileAccess.Write)); + var writer = new BinaryWriter(new FileStream(newPath, FileMode.Create, FileAccess.Write)); var saveram = Emulator.AsSaveRam().CloneSaveRam(); if (saveram != null) { writer.Write(saveram, 0, saveram.Length); } - _flushSaveRamIn = Global.Config.FlushSaveRamFrames; - writer.Close(); + + if (file.Exists) + { + if (Global.Config.BackupSaveram) + { + if (backupFile.Exists) + { + backupFile.Delete(); + } + + file.MoveTo(backupPath); + } + else + { + file.Delete(); + } + } + + newFile.MoveTo(path); } } @@ -2912,13 +2923,11 @@ namespace BizHawk.Client.EmuHawk Global.MovieSession.HandleMovieOnFrameLoop(); - if (Global.Config.AutosaveSaveRAM && Global.Config.FlushSaveRamFrames > 0) + if (Global.Config.AutosaveSaveRAM) { - _flushSaveRamIn -= 1; - if (_flushSaveRamIn <= 0) + if (FlushSaveRamIn-- <= 0) { FlushSaveRAM(true); - _flushSaveRamIn = Global.Config.FlushSaveRamFrames; } } // why not skip audio if the user doesnt want sound diff --git a/BizHawk.Client.EmuHawk/config/GuiOptions.cs b/BizHawk.Client.EmuHawk/config/GuiOptions.cs index 23897839f8..ce1ada362c 100644 --- a/BizHawk.Client.EmuHawk/config/GuiOptions.cs +++ b/BizHawk.Client.EmuHawk/config/GuiOptions.cs @@ -89,6 +89,8 @@ namespace BizHawk.Client.EmuHawk Global.Config.BackupSaveram = BackupSRamCheckbox.Checked; Global.Config.AutosaveSaveRAM = AutosaveSRAMCheckbox.Checked; Global.Config.FlushSaveRamFrames = AutosaveSaveRAMSeconds * 60; + if (GlobalWin.MainForm.FlushSaveRamIn > Global.Config.FlushSaveRamFrames) + GlobalWin.MainForm.FlushSaveRamIn = Global.Config.FlushSaveRamFrames; Global.Config.SkipLagFrame = FrameAdvSkipLagCheckbox.Checked; Global.Config.WIN32_CONSOLE = LogWindowAsConsoleCheckbox.Checked; Global.Config.RunLuaDuringTurbo = LuaDuringTurboCheckbox.Checked;