diff --git a/src/BizHawk.Client.Common/movie/tasproj/ZwinderStateManager.cs b/src/BizHawk.Client.Common/movie/tasproj/ZwinderStateManager.cs index 31cb2ce487..ba12abd5c2 100644 --- a/src/BizHawk.Client.Common/movie/tasproj/ZwinderStateManager.cs +++ b/src/BizHawk.Client.Common/movie/tasproj/ZwinderStateManager.cs @@ -251,14 +251,13 @@ namespace BizHawk.Client.Common } /// - /// Enumerate all states in reverse order + /// Enumerate all states in the following order: current -> recent -> gap -> reserved states /// internal IEnumerable AllStates() { return CurrentAndRecentStates() .Concat(GapStates()) - .Concat(ReservedStates()) - .OrderByDescending(s => s.Frame); + .Concat(ReservedStates()); } public int Last => StateCache.Max(); @@ -474,8 +473,15 @@ namespace BizHawk.Client.Common if (frame < 0) throw new ArgumentOutOfRangeException(nameof(frame)); - var si = AllStates().First(s => s.Frame <= frame); - return new KeyValuePair(si.Frame, si.Read()); + StateInfo closestState = null; + foreach (var state in AllStates()) + { + if (state.Frame <= frame && (closestState is null || state.Frame > closestState.Frame)) + { + closestState = state; + } + } + return new KeyValuePair(closestState!.Frame, closestState.Read()); } public bool HasState(int frame)