diff --git a/src/BizHawk.Client.Common/movie/MovieConversionExtensions.cs b/src/BizHawk.Client.Common/movie/MovieConversionExtensions.cs index c0b5c7ea5a..cecd8f7439 100644 --- a/src/BizHawk.Client.Common/movie/MovieConversionExtensions.cs +++ b/src/BizHawk.Client.Common/movie/MovieConversionExtensions.cs @@ -100,7 +100,9 @@ namespace BizHawk.Client.Common // States can't be easily moved over, because they contain the frame number. // TODO? I'm not sure how this would be done. + // Also TODO: Properly manage disposal of the old movie/TasStateManager instead of clearing it here. old.TasStateManager.Clear(); + old.ClearChanges(); // avoid issue with asking to save the cleared state log // Lag Log tas.LagLog.FromLagLog(old.LagLog); @@ -138,6 +140,7 @@ namespace BizHawk.Client.Common tas.TasStateManager.Settings = old.TasStateManager.Settings; tas.Save(); + tas.ClearChanges(); return tas; } @@ -179,6 +182,7 @@ namespace BizHawk.Client.Common tas.TasStateManager.Settings = old.TasStateManager.Settings; tas.Save(); + tas.ClearChanges(); return tas; } diff --git a/src/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs b/src/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs index 785382fa52..e257ba0905 100644 --- a/src/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs +++ b/src/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs @@ -43,7 +43,7 @@ namespace BizHawk.Client.EmuHawk Emulator.Frame, StatableEmulator.CloneSavestate()); MainForm.PauseEmulator(); - LoadFile(new FileInfo(newProject.Filename), true); + LoadFile(new FileInfo(newProject.Filename)); } } @@ -63,7 +63,7 @@ namespace BizHawk.Client.EmuHawk var newProject = CurrentTasMovie.ConvertToSaveRamAnchoredMovie( SaveRamEmulator.CloneSaveRam()); MainForm.PauseEmulator(); - LoadFile(new FileInfo(newProject.Filename), true); + LoadFile(new FileInfo(newProject.Filename)); } else { diff --git a/src/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs b/src/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs index 0ce5d091ab..2531712020 100644 --- a/src/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs +++ b/src/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs @@ -218,7 +218,7 @@ namespace BizHawk.Client.EmuHawk // Start Scenario 2: A tasproj is already active else if (MovieSession.Movie.IsActive() && MovieSession.Movie is ITasMovie) { - bool result = LoadFile(new FileInfo(CurrentTasMovie.Filename), gotoFrame: Emulator.Frame); + bool result = LoadFile(new FileInfo(CurrentTasMovie.Filename), Emulator.Frame); if (!result) { TasView.AllColumns.Clear(); @@ -529,7 +529,7 @@ namespace BizHawk.Client.EmuHawk MainForm.SetMainformMovieInfo(); } - private bool LoadFile(FileInfo file, bool startsFromSavestate = false, int gotoFrame = 0) + private bool LoadFile(FileInfo file, int gotoFrame = 0) { if (!file.Exists) { @@ -537,31 +537,24 @@ namespace BizHawk.Client.EmuHawk return false; } + return LoadMovie((ITasMovie)MovieSession.Get(file.FullName), gotoFrame); + } + + private bool LoadMovie(ITasMovie newMovie, int gotoFrame) + { + if (newMovie == null) return false; + _engaged = false; - var newMovie = (ITasMovie)MovieSession.Get(file.FullName); newMovie.BindMarkersToInput = Settings.BindMarkersToInput; newMovie.TasStateManager.InvalidateCallback = GreenzoneInvalidated; if (!HandleMovieLoadStuff(newMovie)) - { return false; - } _engaged = true; Settings.RecentTas.Add(newMovie.Filename); // only add if it did load - if (startsFromSavestate) - { - GoToFrame(0); - } - else if (gotoFrame > 0) - { - GoToFrame(gotoFrame); - } - else - { - GoToFrame(CurrentTasMovie.TasSession.CurrentFrame); - } + GoToFrame(gotoFrame); // If we are loading an existing non-default movie, we will already have columns generated // Only set up columns if needed @@ -588,39 +581,18 @@ namespace BizHawk.Client.EmuHawk private void StartNewTasMovie() { if (!AskSaveChanges()) - { return; - } - var filename = DefaultTasProjName(); // TODO don't do this, take over any mainform actions that can crash without a filename - var tasMovie = (ITasMovie)MovieSession.Get(filename); - tasMovie.BindMarkersToInput = Settings.BindMarkersToInput; - + string filename = DefaultTasProjName(); // TODO don't do this, take over any mainform actions that can crash without a filename + ITasMovie tasMovie = (ITasMovie)MovieSession.Get(filename); - tasMovie.TasStateManager.InvalidateCallback = GreenzoneInvalidated; - tasMovie.PropertyChanged += TasMovie_OnPropertyChanged; - tasMovie.PopulateWithDefaultHeaderValues( Emulator, Game, GlobalWin.FirmwareManager, Config.DefaultAuthor); - SetTasMovieCallbacks(tasMovie); - tasMovie.ClearChanges(); // Don't ask to save changes here. - tasMovie.Save(); - if (HandleMovieLoadStuff(tasMovie)) - { - CurrentTasMovie.TasStateManager.Capture(); // Capture frame 0 always. - } - - // clear all selections - TasView.DeselectAll(); - BookMarkControl.Restart(); - MarkerControl.Restart(); - SetUpColumns(); - RefreshDialog(); - TasView.Refresh(); + LoadMovie(tasMovie, 0); } private bool HandleMovieLoadStuff(ITasMovie movie) @@ -685,7 +657,6 @@ namespace BizHawk.Client.EmuHawk TasView.AllColumns.Clear(); WantsToControlReboot = false; StartNewTasMovie(); - _engaged = true; } }