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))
{