diff --git a/src/BizHawk.Client.Common/movie/interfaces/ITasMovie.cs b/src/BizHawk.Client.Common/movie/interfaces/ITasMovie.cs index 4a55199063..0752930020 100644 --- a/src/BizHawk.Client.Common/movie/interfaces/ITasMovie.cs +++ b/src/BizHawk.Client.Common/movie/interfaces/ITasMovie.cs @@ -53,5 +53,7 @@ namespace BizHawk.Client.Common void LoadBranch(TasBranch branch); void CopyVerificationLog(IEnumerable log); + + bool IsReserved(int frame); } } diff --git a/src/BizHawk.Client.Common/movie/tasproj/TasBranch.cs b/src/BizHawk.Client.Common/movie/tasproj/TasBranch.cs index d2c08dd595..6df10f9835 100644 --- a/src/BizHawk.Client.Common/movie/tasproj/TasBranch.cs +++ b/src/BizHawk.Client.Common/movie/tasproj/TasBranch.cs @@ -87,6 +87,9 @@ namespace BizHawk.Client.Common newBranch.Uuid = old.Uuid; if (newBranch.UserText.Length is 0) newBranch.UserText = old.UserText; this[index] = newBranch; + if (!_movie.IsReserved(old.Frame)) + _movie.TasStateManager.EvictReserved(old.Frame); + _movie.FlagChanges(); } @@ -116,6 +119,9 @@ namespace BizHawk.Client.Common var result = base.Remove(item); if (result) { + if (!_movie.IsReserved(item!.Frame)) + _movie.TasStateManager.EvictReserved(item.Frame); + _movie.FlagChanges(); } diff --git a/src/BizHawk.Client.Common/movie/tasproj/TasMovie.cs b/src/BizHawk.Client.Common/movie/tasproj/TasMovie.cs index 5a1c8dc2eb..c780ca3573 100644 --- a/src/BizHawk.Client.Common/movie/tasproj/TasMovie.cs +++ b/src/BizHawk.Client.Common/movie/tasproj/TasMovie.cs @@ -340,7 +340,7 @@ namespace BizHawk.Client.Common public void ClearChanges() => Changes = false; public void FlagChanges() => Changes = true; - private bool IsReserved(int frame) + public bool IsReserved(int frame) { // Why the frame before? // because we always navigate to the frame before and emulate 1 frame so that we ensure a proper frame buffer on the screen