diff --git a/BizHawk.Client.Common/movie/tasproj/TasMovie.cs b/BizHawk.Client.Common/movie/tasproj/TasMovie.cs index a8abdf9ddb..464bf8451d 100644 --- a/BizHawk.Client.Common/movie/tasproj/TasMovie.cs +++ b/BizHawk.Client.Common/movie/tasproj/TasMovie.cs @@ -176,9 +176,13 @@ namespace BizHawk.Client.Common private void InvalidateAfter(int frame) { LagLog.RemoveFrom(frame); - StateManager.Invalidate(frame + 1); + var anyInvalidated = StateManager.Invalidate(frame + 1); Changes = true; // TODO check if this actually removed anything before flagging changes - base.Rerecords++; + + if (anyInvalidated) + { + base.Rerecords++; + } } /// diff --git a/BizHawk.Client.Common/movie/tasproj/TasStateManager.cs b/BizHawk.Client.Common/movie/tasproj/TasStateManager.cs index 8cac9f61e6..cf357adb9b 100644 --- a/BizHawk.Client.Common/movie/tasproj/TasStateManager.cs +++ b/BizHawk.Client.Common/movie/tasproj/TasStateManager.cs @@ -322,8 +322,10 @@ namespace BizHawk.Client.Common /// /// Clears out all savestates after the given frame number /// - public void Invalidate(int frame) + public bool Invalidate(int frame) { + bool anyInvalidated = false; + if (Any()) { if (!_movie.StartsFromSavestate && frame == 0) // Never invalidate frame 0 on a non-savestate-anchored movie @@ -334,6 +336,9 @@ namespace BizHawk.Client.Common var statesToRemove = States .Where(x => x.Key >= frame) .ToList(); + + anyInvalidated = statesToRemove.Any(); + foreach (var state in statesToRemove) { if (state.Value == null) @@ -346,6 +351,8 @@ namespace BizHawk.Client.Common CallInvalidateCallback(frame); } + + return anyInvalidated; } ///