Movies - fix a regression that happened at some point where the movie is not truncated on a loadstate that triggers record mode (instead it would keep the entire movie in the savestate and record over each frame, this would leave garbage data that could lead to potential desyncs)

This commit is contained in:
adelikat 2012-08-25 22:18:54 +00:00
parent cca1396fad
commit 5486acbbbc
3 changed files with 26 additions and 6 deletions

View File

@ -121,16 +121,20 @@ namespace BizHawk.MultiClient
{
//Note, some of the situations in these IF's may be identical and could be combined but I intentionally separated it out for clarity
if (Global.MovieSession.Movie.Mode == MOVIEMODE.INACTIVE)
{
return true;
}
if (Global.MovieSession.Movie.Mode == MOVIEMODE.RECORD)
else if (Global.MovieSession.Movie.Mode == MOVIEMODE.RECORD)
{
if (ReadOnly)
{
if (!Global.MovieSession.Movie.CheckTimeLines(path, false))
{
return false; //Timeline/GUID error
}
else
{
Global.MovieSession.Movie.WriteMovie();
@ -141,22 +145,29 @@ namespace BizHawk.MultiClient
else
{
if (!Global.MovieSession.Movie.CheckTimeLines(path, true))
{
return false; //GUID Error
}
Global.MovieSession.Movie.LoadLogFromSavestateText(path);
}
}
else if (Global.MovieSession.Movie.Mode == MOVIEMODE.PLAY)
{
if (ReadOnly)
{
if (!Global.MovieSession.Movie.CheckTimeLines(path, false))
{
return false; //Timeline/GUID error
}
//Frame loop automatically handles the rewinding effect based on Global.Emulator.Frame so nothing else is needed here
}
else
{
if (!Global.MovieSession.Movie.CheckTimeLines(path, true))
{
return false; //GUID Error
}
Global.MovieSession.Movie.ResumeRecording();
SetMainformMovieInfo();
Global.MovieSession.Movie.LoadLogFromSavestateText(path);
@ -168,9 +179,13 @@ namespace BizHawk.MultiClient
{
{
if (!Global.MovieSession.Movie.CheckTimeLines(path, false))
{
return false; //Timeline/GUID error
if (Global.MovieSession.Movie.Mode == MOVIEMODE.FINISHED)
}
else if (Global.MovieSession.Movie.Mode == MOVIEMODE.FINISHED) //TimeLine check can change a movie to finished, hence the check here (not a good design)
{
Global.MovieSession.LatchInputFromPlayer(Global.MovieInputSourceAdapter);
}
else
{
Global.MovieSession.Movie.StartPlayback();
@ -182,9 +197,13 @@ namespace BizHawk.MultiClient
{
{
if (!Global.MovieSession.Movie.CheckTimeLines(path, true))
{
return false; //GUID Error
if (Global.MovieSession.Movie.Mode == MOVIEMODE.FINISHED)
}
else if (Global.MovieSession.Movie.Mode == MOVIEMODE.FINISHED)
{
Global.MovieSession.LatchInputFromPlayer(Global.MovieInputSourceAdapter);
}
else
{
Global.MovieSession.Movie.StartNewRecording();

View File

@ -1944,7 +1944,7 @@ namespace BizHawk.MultiClient
if (-1 != StopOnFrame && StopOnFrame == Global.Emulator.Frame + 1)
{
if(StopOnFrame == Global.MovieSession.Movie.LogLength())
if (StopOnFrame == Global.MovieSession.Movie.LogLength())
{
Global.MovieSession.Movie.SetMovieFinished();
}
@ -1953,7 +1953,7 @@ namespace BizHawk.MultiClient
PauseEmulator();
StopOnFrame = -1;
}
if(true == RestoreReadWriteOnStop)
if (RestoreReadWriteOnStop == true)
{
Global.MovieSession.Movie.Mode = MOVIEMODE.RECORD;
RestoreReadWriteOnStop = false;

View File

@ -529,7 +529,8 @@ namespace BizHawk.MultiClient
}
if (stateFrame > 0 && stateFrame < Log.MovieLength())
{
Log.TruncateStates(Global.Emulator.Frame);
Log.TruncateStates(stateFrame);
Log.TruncateMovie(stateFrame);
}
IncrementRerecords();
reader.Close();