diff --git a/src/BizHawk.Client.Common/movie/MovieService.cs b/src/BizHawk.Client.Common/movie/MovieService.cs index aca979861b..74f38d5aea 100644 --- a/src/BizHawk.Client.Common/movie/MovieService.cs +++ b/src/BizHawk.Client.Common/movie/MovieService.cs @@ -6,12 +6,12 @@ namespace BizHawk.Client.Common { public static class MovieService { - public static IMovie Get(string path, bool startsFromSavestate = false) + public static IMovie Get(string path) { // TODO: change IMovies to take HawkFiles only and not path if (Path.GetExtension(path)?.EndsWith("tasproj") ?? false) { - return new TasMovie(path, startsFromSavestate); + return new TasMovie(path); } return new Bk2Movie(path); diff --git a/src/BizHawk.Client.Common/movie/bk2/Bk2Movie.HeaderApi.cs b/src/BizHawk.Client.Common/movie/bk2/Bk2Movie.HeaderApi.cs index e790571ef2..dba7de4948 100644 --- a/src/BizHawk.Client.Common/movie/bk2/Bk2Movie.HeaderApi.cs +++ b/src/BizHawk.Client.Common/movie/bk2/Bk2Movie.HeaderApi.cs @@ -48,7 +48,7 @@ namespace BizHawk.Client.Common } } - public bool StartsFromSavestate + public virtual bool StartsFromSavestate { get => Header.ContainsKey(HeaderKeys.StartsFromSavestate) && bool.Parse(Header[HeaderKeys.StartsFromSavestate]); set diff --git a/src/BizHawk.Client.Common/movie/conversions/MovieConversionExtensions.cs b/src/BizHawk.Client.Common/movie/conversions/MovieConversionExtensions.cs index e74f524492..28629ae359 100644 --- a/src/BizHawk.Client.Common/movie/conversions/MovieConversionExtensions.cs +++ b/src/BizHawk.Client.Common/movie/conversions/MovieConversionExtensions.cs @@ -19,7 +19,7 @@ namespace BizHawk.Client.Common.MovieConversionExtensions { string newFilename = GetNewFileName(old.Filename); - var tas = (ITasMovie)MovieService.Get(newFilename, old.StartsFromSavestate); + var tas = (ITasMovie)MovieService.Get(newFilename); for (var i = 0; i < old.InputLogLength; i++) { @@ -49,6 +49,7 @@ namespace BizHawk.Client.Common.MovieConversionExtensions tas.Subtitles.Add(sub); } + tas.StartsFromSavestate = old.StartsFromSavestate; tas.TextSavestate = old.TextSavestate; tas.BinarySavestate = old.BinarySavestate; tas.SaveRam = old.SaveRam; @@ -97,7 +98,7 @@ namespace BizHawk.Client.Common.MovieConversionExtensions { string newFilename = GetNewFileName(old.Filename); - var tas = (ITasMovie)MovieService.Get(newFilename, true); + var tas = (ITasMovie)MovieService.Get(newFilename); tas.BinarySavestate = savestate; tas.LagLog.Clear(); @@ -154,7 +155,7 @@ namespace BizHawk.Client.Common.MovieConversionExtensions { string newFilename = GetNewFileName(old.Filename); - var tas = (ITasMovie) MovieService.Get(newFilename, false); + var tas = (ITasMovie) MovieService.Get(newFilename); tas.SaveRam = saveRam; tas.TasStateManager.Clear(); tas.LagLog.Clear(); diff --git a/src/BizHawk.Client.Common/movie/tasproj/TasMovie.cs b/src/BizHawk.Client.Common/movie/tasproj/TasMovie.cs index ae0d7a7337..b534b0adaf 100644 --- a/src/BizHawk.Client.Common/movie/tasproj/TasMovie.cs +++ b/src/BizHawk.Client.Common/movie/tasproj/TasMovie.cs @@ -13,7 +13,7 @@ namespace BizHawk.Client.Common private IInputPollable _inputPollable; /// loaded core does not implement - internal TasMovie(string path, bool startsFromSavestate) : base(path) + internal TasMovie(string path) : base(path) { Branches = new TasBranchCollection(this); ChangeLog = new TasMovieChangeLog(this); @@ -21,7 +21,7 @@ namespace BizHawk.Client.Common Header[HeaderKeys.MovieVersion] = "BizHawk v2.0 Tasproj v1.0"; Markers = new TasMovieMarkerList(this); Markers.CollectionChanged += Markers_CollectionChanged; - Markers.Add(0, startsFromSavestate ? "Savestate" : "Power on"); + Markers.Add(0, "Power on"); } public override void Attach(IMovieSession session, IEmulator emulator) @@ -38,9 +38,20 @@ namespace BizHawk.Client.Common _inputPollable = emulator.AsInputPollable(); TasStateManager.Attach(emulator); + base.Attach(session, emulator); } + public override bool StartsFromSavestate + { + get => base.StartsFromSavestate; + set + { + Markers.Add(0, value ? "Savestate" : "Power on"); + base.StartsFromSavestate = value; + } + } + public IStringLog VerificationLog { get; } = StringLogUtil.MakeStringLog(); // For movies that do not begin with power-on, this is the input required to get into the initial state public ITasBranchCollection Branches { get; } public ITasSession TasSession { get; private set; } = new TasSession();