diff --git a/BizHawk.Client.Common/movie/MovieService.cs b/BizHawk.Client.Common/movie/MovieService.cs
index 981cd68cd4..8cd4cf2b84 100644
--- a/BizHawk.Client.Common/movie/MovieService.cs
+++ b/BizHawk.Client.Common/movie/MovieService.cs
@@ -19,7 +19,7 @@ namespace BizHawk.Client.Common
if (Path.GetExtension(path).EndsWith("bkm"))
{
var bkm = new BkmMovie(path);
- bkm.Load();
+ bkm.Load(false);
// Hackery to fix how things used to work
if (bkm.SystemID == "GBC")
diff --git a/BizHawk.Client.Common/movie/MovieSession.cs b/BizHawk.Client.Common/movie/MovieSession.cs
index 196fcfedb3..57e8be4bb7 100644
--- a/BizHawk.Client.Common/movie/MovieSession.cs
+++ b/BizHawk.Client.Common/movie/MovieSession.cs
@@ -182,7 +182,7 @@ namespace BizHawk.Client.Common
public bool MovieLoad()
{
MovieControllerAdapter = Movie.LogGeneratorInstance().MovieControllerAdapter;
- return Movie.Load();
+ return Movie.Load(false);
}
public void StopMovie(bool saveChanges = true)
@@ -463,7 +463,7 @@ namespace BizHawk.Client.Common
{
if (!record) // The semantics of record is that we are starting a new movie, and even wiping a pre-existing movie with the same path, but non-record means we are loading an existing movie into playback mode
{
- movie.Load();
+ movie.Load(false);
if (movie.SystemID != emulator.SystemId)
{
throw new MoviePlatformMismatchException(
diff --git a/BizHawk.Client.Common/movie/bk2/Bk2Movie.IO.cs b/BizHawk.Client.Common/movie/bk2/Bk2Movie.IO.cs
index c70783acde..396f6239f8 100644
--- a/BizHawk.Client.Common/movie/bk2/Bk2Movie.IO.cs
+++ b/BizHawk.Client.Common/movie/bk2/Bk2Movie.IO.cs
@@ -32,7 +32,7 @@ namespace BizHawk.Client.Common
Write(backupName);
}
- public virtual bool Load()
+ public virtual bool Load(bool preload)
{
var file = new FileInfo(Filename);
if (!file.Exists)
@@ -158,7 +158,6 @@ namespace BizHawk.Client.Common
public bool PreLoadHeaderAndLength(HawkFile hawkFile)
{
- // For now, preload simply loads everything
var file = new FileInfo(Filename);
if (!file.Exists)
{
@@ -166,7 +165,7 @@ namespace BizHawk.Client.Common
}
Filename = file.FullName;
- return Load();
+ return Load(true);
}
protected virtual void Write(string fn)
diff --git a/BizHawk.Client.Common/movie/bkm/BkmMovie.IO.cs b/BizHawk.Client.Common/movie/bkm/BkmMovie.IO.cs
index a8f1be0f29..f104de55de 100644
--- a/BizHawk.Client.Common/movie/bkm/BkmMovie.IO.cs
+++ b/BizHawk.Client.Common/movie/bkm/BkmMovie.IO.cs
@@ -58,7 +58,7 @@ namespace BizHawk.Client.Common
Write(backupName);
}
- public bool Load()
+ public bool Load(bool preload)
{
var file = new FileInfo(Filename);
diff --git a/BizHawk.Client.Common/movie/conversions/MovieConversionExtensions.cs b/BizHawk.Client.Common/movie/conversions/MovieConversionExtensions.cs
index efa950ef25..616ce7e57c 100644
--- a/BizHawk.Client.Common/movie/conversions/MovieConversionExtensions.cs
+++ b/BizHawk.Client.Common/movie/conversions/MovieConversionExtensions.cs
@@ -34,6 +34,7 @@ namespace BizHawk.Client.Common.MovieConversionExtensions
}
var tas = new TasMovie(newFilename, old.StartsFromSavestate);
+ tas.TasStateManager.MountWriteAccess();
for (var i = 0; i < old.InputLogLength; i++)
{
diff --git a/BizHawk.Client.Common/movie/import/MovieImport.cs b/BizHawk.Client.Common/movie/import/MovieImport.cs
index 97c42ff241..3be588f999 100644
--- a/BizHawk.Client.Common/movie/import/MovieImport.cs
+++ b/BizHawk.Client.Common/movie/import/MovieImport.cs
@@ -140,7 +140,7 @@ namespace BizHawk.Client.Common
break;
case ".BKM":
m.Filename = path;
- m.Load();
+ m.Load(false);
break;
}
}
diff --git a/BizHawk.Client.Common/movie/interfaces/IMovie.cs b/BizHawk.Client.Common/movie/interfaces/IMovie.cs
index bbe78438c8..d6edda3e0a 100644
--- a/BizHawk.Client.Common/movie/interfaces/IMovie.cs
+++ b/BizHawk.Client.Common/movie/interfaces/IMovie.cs
@@ -99,7 +99,7 @@ namespace BizHawk.Client.Common
/// Tells the movie to load the contents of Filename
///
/// Return whether or not the file was successfully loaded
- bool Load();
+ bool Load(bool preload);
///
/// Instructs the movie to save the current contents to Filename
diff --git a/BizHawk.Client.Common/movie/tasproj/TasMovie.IO.cs b/BizHawk.Client.Common/movie/tasproj/TasMovie.IO.cs
index b655c02647..fe8dbf7d9b 100644
--- a/BizHawk.Client.Common/movie/tasproj/TasMovie.IO.cs
+++ b/BizHawk.Client.Common/movie/tasproj/TasMovie.IO.cs
@@ -107,7 +107,7 @@ namespace BizHawk.Client.Common
Changes = false;
}
- public override bool Load()
+ public override bool Load(bool preload)
{
var file = new FileInfo(Filename);
if (!file.Exists)
@@ -221,16 +221,20 @@ namespace BizHawk.Client.Common
StateManager.Settings.PopulateFromString(tr.ReadToEnd());
});
- if (StateManager.Settings.SaveStateHistory)
+ if(!preload)
{
- bl.GetLump(BinaryStateLump.StateHistory, false, delegate(BinaryReader br, long length)
+ if (StateManager.Settings.SaveStateHistory)
{
- StateManager.Load(br);
- });
+ bl.GetLump(BinaryStateLump.StateHistory, false, delegate(BinaryReader br, long length)
+ {
+ StateManager.Load(br);
+ });
+ }
+
+ // Movie should always have a state at frame 0.
+ if (!this.StartsFromSavestate)
+ StateManager.Capture();
}
- // Movie should always have a state at frame 0.
- if (!this.StartsFromSavestate)
- StateManager.Capture();
bl.GetLump(BinaryStateLump.Markers, false, delegate(TextReader tr)
{
diff --git a/BizHawk.Client.Common/movie/tasproj/TasStateManager.cs b/BizHawk.Client.Common/movie/tasproj/TasStateManager.cs
index 2e155a7db4..8b3d29f8d1 100644
--- a/BizHawk.Client.Common/movie/tasproj/TasStateManager.cs
+++ b/BizHawk.Client.Common/movie/tasproj/TasStateManager.cs
@@ -36,7 +36,7 @@ namespace BizHawk.Client.Common
}
private Guid guid = Guid.NewGuid();
- private readonly SortedList States = new SortedList();
+ private SortedList States = new SortedList();
private string statePath
{
get
@@ -46,6 +46,7 @@ namespace BizHawk.Client.Common
}
}
+ private bool _isMountedForWrite;
private readonly TasMovie _movie;
private ulong _expectedStateSize = 0;
@@ -80,6 +81,25 @@ namespace BizHawk.Client.Common
Settings = new TasStateManagerSettings(Global.Config.DefaultTasProjSettings);
+ accessed = new List();
+ }
+
+ ///
+ /// Mounts this instance for write access. Prior to that it's read-only
+ ///
+ public void MountWriteAccess()
+ {
+ if (_isMountedForWrite)
+ return;
+
+ _isMountedForWrite = true;
+
+ if (Directory.Exists(statePath))
+ {
+ Directory.Delete(statePath, true); // To delete old files that may still exist.
+ }
+ Directory.CreateDirectory(statePath);
+
int limit = 0;
_expectedStateSize = (ulong)Core.SaveStateBinary().Length;
@@ -90,20 +110,6 @@ namespace BizHawk.Client.Common
}
States = new SortedList(limit);
-
- accessed = new List();
- }
-
- ///
- /// Mounts this instance for write access. Prior to that it's read-only
- ///
- public void MountWriteAccess()
- {
- if (Directory.Exists(statePath))
- {
- Directory.Delete(statePath, true); // To delete old files that may still exist.
- }
- Directory.CreateDirectory(statePath);
}
public TasStateManagerSettings Settings { get; set; }
diff --git a/BizHawk.Client.EmuHawk/MainForm.Movie.cs b/BizHawk.Client.EmuHawk/MainForm.Movie.cs
index 076dbc1bb2..5843066a6a 100644
--- a/BizHawk.Client.EmuHawk/MainForm.Movie.cs
+++ b/BizHawk.Client.EmuHawk/MainForm.Movie.cs
@@ -30,6 +30,9 @@ namespace BizHawk.Client.EmuHawk
try
{
+ var tasmovie = (movie as TasMovie);
+ if (tasmovie != null)
+ tasmovie.TasStateManager.MountWriteAccess();
Global.MovieSession.QueueNewMovie(movie, record, Global.Emulator);
}
catch (MoviePlatformMismatchException ex)
diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs
index bd74a44af8..31b18b964f 100644
--- a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs
+++ b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs
@@ -407,7 +407,7 @@ namespace BizHawk.Client.EmuHawk
CurrentTasMovie.Filename = file.FullName;
try
{
- CurrentTasMovie.Load();
+ CurrentTasMovie.Load(false);
}
catch
{