diff --git a/BizHawk.Client.Common/movie/tasproj/TasMovie.Editing.cs b/BizHawk.Client.Common/movie/tasproj/TasMovie.Editing.cs index f7ee10d123..6c8eb27985 100644 --- a/BizHawk.Client.Common/movie/tasproj/TasMovie.Editing.cs +++ b/BizHawk.Client.Common/movie/tasproj/TasMovie.Editing.cs @@ -23,6 +23,9 @@ namespace BizHawk.Client.Common LagLog.RemoveFrom(frame); LagLog[frame] = Global.Emulator.AsInputPollable().IsLagFrame; + if (IsRecording) + StateManager.Invalidate(frame + 1); + if (frame != 0) ChangeLog.SetGeneralRedo(); } diff --git a/BizHawk.Client.Common/movie/tasproj/TasMovie.cs b/BizHawk.Client.Common/movie/tasproj/TasMovie.cs index 0fd425b6fe..1bec1774b1 100644 --- a/BizHawk.Client.Common/movie/tasproj/TasMovie.cs +++ b/BizHawk.Client.Common/movie/tasproj/TasMovie.cs @@ -218,6 +218,11 @@ namespace BizHawk.Client.Common _mode = Moviemode.Play; } + public override void SwitchToRecord() + { + _mode = Moviemode.Record; + } + /// /// Removes lag log and greenzone after this frame /// diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.IControlMainForm.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.IControlMainForm.cs index 9ad2455e74..818396aa06 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.IControlMainForm.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.IControlMainForm.cs @@ -45,11 +45,20 @@ namespace BizHawk.Client.EmuHawk BookMarkControl.SelectBranchExternal(true); } - public bool WantsToControlReadOnly { get { return false; } } + public bool WantsToControlReadOnly { get { return true; } } public void ToggleReadOnly() { - GlobalWin.OSD.AddMessage("TAStudio does not allow manual readonly toggle"); + if (CurrentTasMovie.IsPlaying) + { + TastudioRecordMode(); + GlobalWin.OSD.AddMessage("Tastudio: Recording mode"); + } + else if (CurrentTasMovie.IsRecording) + { + TastudioPlayMode(); + GlobalWin.OSD.AddMessage("Tastudio: Playback mode"); + } } public bool WantsToControlStopMovie { get; private set; } diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.IToolForm.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.IToolForm.cs index e361238f0a..4eb4050124 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.IToolForm.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.IToolForm.cs @@ -78,7 +78,7 @@ namespace BizHawk.Client.EmuHawk { if (Global.Game.Hash != CurrentTasMovie.Hash) { - TastudioToStopMovie(); + TastudioStopMovie(); TasView.AllColumns.Clear(); StartNewTasMovie(); SetUpColumns(); diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.ListView.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.ListView.cs index 2a1d7e90eb..d6ca90cdb7 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.ListView.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.ListView.cs @@ -54,6 +54,7 @@ namespace BizHawk.Client.EmuHawk private int? _autoRestoreFrame; // The frame auto-restore will restore to, if set private bool? _autoRestorePaused = null; private int? _seekStartFrame = null; + private bool _wasRecording = false; private void JumpToGreenzone() { @@ -92,6 +93,11 @@ namespace BizHawk.Client.EmuHawk public void StopSeeking() { _seekBackgroundWorker.CancelAsync(); + if (_wasRecording) + { + TastudioRecordMode(); + _wasRecording = false; + } if (IgnoreSeekFrame) { GlobalWin.MainForm.UnpauseEmulator(); diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.Navigation.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.Navigation.cs index 9ed99c4194..f7186c1239 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.Navigation.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.Navigation.cs @@ -50,7 +50,7 @@ namespace BizHawk.Client.EmuHawk } else { - CurrentTasMovie.SwitchToPlay(); + TastudioPlayMode(); int lastState = CurrentTasMovie.TasStateManager.GetStateClosestToFrame(frame).Key; // Simply getting the last state doesn't work if that state is the frame. [dispaly isn't saved in the state, need to emulate to frame] if (lastState > Emulator.Frame) diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs index b64e91840f..faa35212ae 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs @@ -639,6 +639,7 @@ namespace BizHawk.Client.EmuHawk return true; } + private bool StartNewMovieWrapper(bool record, IMovie movie = null) { _initializing = true; @@ -656,6 +657,7 @@ namespace BizHawk.Client.EmuHawk if (AskSaveChanges()) LoadFile(new FileInfo(path)); } + private void DummyLoadMacro(string path) { if (!TasView.AnyRowsSelected) @@ -682,7 +684,19 @@ namespace BizHawk.Client.EmuHawk #endregion - private void TastudioToStopMovie() + private void TastudioPlayMode() + { + CurrentTasMovie.SwitchToPlay(); + GlobalWin.MainForm.SetMainformMovieInfo(); + } + + private void TastudioRecordMode() + { + CurrentTasMovie.SwitchToRecord(); + GlobalWin.MainForm.SetMainformMovieInfo(); + } + + private void TastudioStopMovie() { Global.MovieSession.StopMovie(false); GlobalWin.MainForm.SetMainformMovieInfo(); @@ -795,7 +809,8 @@ namespace BizHawk.Client.EmuHawk if (frame == Emulator.Frame) return; - CurrentTasMovie.SwitchToPlay(); + _wasRecording = CurrentTasMovie.IsRecording || _wasRecording; + TastudioPlayMode(); KeyValuePair closestState = CurrentTasMovie.TasStateManager.GetStateClosestToFrame(frame); if (closestState.Value != null && (frame < Emulator.Frame || closestState.Key > Emulator.Frame)) {