bk2 savestate anchor stuff
This commit is contained in:
parent
f561528846
commit
71ddbde18d
|
@ -9,8 +9,6 @@ namespace BizHawk.Client.Common
|
|||
{
|
||||
protected readonly Bk2Header Header = new Bk2Header();
|
||||
private string _syncSettingsJson = string.Empty;
|
||||
private string _savestateBlob = string.Empty;
|
||||
|
||||
|
||||
public IDictionary<string, string> HeaderEntries
|
||||
{
|
||||
|
@ -26,19 +24,6 @@ namespace BizHawk.Client.Common
|
|||
set { _syncSettingsJson = value; }
|
||||
}
|
||||
|
||||
public string SavestateBinaryBase64Blob
|
||||
{
|
||||
get
|
||||
{
|
||||
return _savestateBlob;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
_savestateBlob = value;
|
||||
}
|
||||
}
|
||||
|
||||
public ulong Rerecords
|
||||
{
|
||||
get
|
||||
|
@ -197,5 +182,8 @@ namespace BizHawk.Client.Common
|
|||
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
public string TextSavestate { get; set; }
|
||||
public byte[] BinarySavestate { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -117,23 +117,19 @@ namespace BizHawk.Client.Common
|
|||
}
|
||||
});
|
||||
|
||||
// Movies 2.0 TODO: be smart about text or binary state
|
||||
if (StartsFromSavestate)
|
||||
{
|
||||
bl.GetLump(BinaryStateLump.CorestateText, true, delegate(TextReader tr)
|
||||
{
|
||||
string line;
|
||||
while ((line = tr.ReadLine()) != null)
|
||||
bl.GetCoreState(
|
||||
delegate(BinaryReader br)
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(line))
|
||||
{
|
||||
SavestateBinaryBase64Blob = line;
|
||||
}
|
||||
}
|
||||
});
|
||||
BinarySavestate = br.ReadBytes((int)br.BaseStream.Length);
|
||||
},
|
||||
delegate(TextReader tr)
|
||||
{
|
||||
TextSavestate = tr.ReadToEnd();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -164,7 +160,14 @@ namespace BizHawk.Client.Common
|
|||
|
||||
if (StartsFromSavestate)
|
||||
{
|
||||
bs.PutLump(BinaryStateLump.CorestateText, (tw) => tw.WriteLine(SavestateBinaryBase64Blob));
|
||||
if (TextSavestate != null)
|
||||
{
|
||||
bs.PutLump(BinaryStateLump.CorestateText, (TextWriter tw) => tw.Write(TextSavestate));
|
||||
}
|
||||
else
|
||||
{
|
||||
bs.PutLump(BinaryStateLump.Corestate, (BinaryWriter bw) => bw.Write(BinarySavestate));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -178,7 +181,8 @@ namespace BizHawk.Client.Common
|
|||
Subtitles.Clear();
|
||||
Comments.Clear();
|
||||
_syncSettingsJson = string.Empty;
|
||||
_savestateBlob = string.Empty;
|
||||
TextSavestate = null;
|
||||
BinarySavestate = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,12 +28,6 @@ namespace BizHawk.Client.Common
|
|||
set { Header[HeaderKeys.SYNCSETTINGS] = value; }
|
||||
}
|
||||
|
||||
public string SavestateBinaryBase64Blob
|
||||
{
|
||||
get { return Header.SavestateBinaryBase64Blob; }
|
||||
set { Header.SavestateBinaryBase64Blob = value; }
|
||||
}
|
||||
|
||||
public ulong Rerecords
|
||||
{
|
||||
get { return Header.Rerecords; }
|
||||
|
@ -99,5 +93,8 @@ namespace BizHawk.Client.Common
|
|||
get { return Header[HeaderKeys.FIRMWARESHA1]; }
|
||||
set { Header[HeaderKeys.FIRMWARESHA1] = value; }
|
||||
}
|
||||
|
||||
public string TextSavestate { get; set; }
|
||||
public byte[] BinarySavestate { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -107,6 +107,8 @@ namespace BizHawk.Client.Common
|
|||
}
|
||||
}
|
||||
}
|
||||
if (Header.SavestateBinaryBase64Blob != null)
|
||||
BinarySavestate = Convert.FromBase64String(Header.SavestateBinaryBase64Blob);
|
||||
|
||||
Loaded = true;
|
||||
return true;
|
||||
|
@ -229,6 +231,11 @@ namespace BizHawk.Client.Common
|
|||
|
||||
private void Write(string fn)
|
||||
{
|
||||
if (BinarySavestate != null)
|
||||
Header.SavestateBinaryBase64Blob = Convert.ToBase64String(BinarySavestate);
|
||||
else
|
||||
Header.SavestateBinaryBase64Blob = null;
|
||||
|
||||
using (var fs = new FileStream(fn, FileMode.Create, FileAccess.Write, FileShare.Read))
|
||||
{
|
||||
using (var sw = new StreamWriter(fs))
|
||||
|
|
|
@ -32,7 +32,8 @@ namespace BizHawk.Client.Common.MovieConversionExtensions
|
|||
bk2.Subtitles.Add(sub);
|
||||
}
|
||||
|
||||
bk2.SavestateBinaryBase64Blob = bkm.SavestateBinaryBase64Blob;
|
||||
bk2.TextSavestate = bkm.TextSavestate;
|
||||
bk2.BinarySavestate = bkm.BinarySavestate;
|
||||
|
||||
for (int i = 0; i < bkm.InputLogLength; i++)
|
||||
{
|
||||
|
|
|
@ -58,10 +58,9 @@ namespace BizHawk.Client.Common
|
|||
SubtitleList Subtitles { get; }
|
||||
IList<string> Comments { get; }
|
||||
|
||||
/// <summary>
|
||||
/// For savestate anchored movies, this is the starting savestate
|
||||
/// </summary>
|
||||
string SavestateBinaryBase64Blob { get; set; }
|
||||
// savestate anchor.
|
||||
string TextSavestate { get; set; }
|
||||
byte[] BinarySavestate { get; set; }
|
||||
|
||||
ulong Rerecords { get; set; }
|
||||
bool StartsFromSavestate { get; set; }
|
||||
|
|
|
@ -80,9 +80,10 @@ namespace BizHawk.Client.EmuHawk
|
|||
|
||||
if (Global.MovieSession.Movie.StartsFromSavestate)
|
||||
{
|
||||
var state = Convert.FromBase64String(Global.MovieSession.Movie.SavestateBinaryBase64Blob);
|
||||
Global.Emulator.LoadStateBinary(new BinaryReader(new MemoryStream(state)));
|
||||
Global.Emulator.ResetCounters();
|
||||
if (Global.MovieSession.Movie.TextSavestate != null)
|
||||
Global.Emulator.LoadStateText(new StringReader(Global.MovieSession.Movie.TextSavestate));
|
||||
else
|
||||
Global.Emulator.LoadStateBinary(new BinaryReader(new MemoryStream(Global.MovieSession.Movie.BinarySavestate, false)));
|
||||
}
|
||||
|
||||
if (!fromTastudio)
|
||||
|
@ -195,8 +196,19 @@ namespace BizHawk.Client.EmuHawk
|
|||
LoadRom(CurrentlyOpenRom);
|
||||
if (Global.MovieSession.Movie.StartsFromSavestate)
|
||||
{
|
||||
var state = Convert.FromBase64String(Global.MovieSession.Movie.SavestateBinaryBase64Blob);
|
||||
Global.Emulator.LoadStateBinary(new BinaryReader(new MemoryStream(state)));
|
||||
// TODO: why does this code exist twice??
|
||||
|
||||
if (Global.MovieSession.Movie.TextSavestate != null)
|
||||
{
|
||||
Global.Emulator.LoadStateText(new StringReader(Global.MovieSession.Movie.TextSavestate));
|
||||
}
|
||||
else
|
||||
{
|
||||
Global.Emulator.LoadStateBinary(new BinaryReader(new MemoryStream(Global.MovieSession.Movie.BinarySavestate, false)));
|
||||
}
|
||||
|
||||
//var state = Convert.FromBase64String(Global.MovieSession.Movie.SavestateBinaryBase64Blob);
|
||||
//Global.Emulator.LoadStateBinary(new BinaryReader(new MemoryStream(state)));
|
||||
Global.Emulator.ResetCounters();
|
||||
}
|
||||
|
||||
|
|
|
@ -70,11 +70,22 @@ namespace BizHawk.Client.EmuHawk
|
|||
|
||||
movieToRecord.StartsFromSavestate = true;
|
||||
|
||||
// TODO - some emulators (c++ cores) are just returning a hex string already
|
||||
// theres no sense hexifying those again. we need to record that fact in the IEmulator somehow
|
||||
var bytestate = Global.Emulator.SaveStateBinary();
|
||||
string stringstate = Convert.ToBase64String(bytestate);
|
||||
movieToRecord.SavestateBinaryBase64Blob = stringstate;
|
||||
if (Global.Emulator.BinarySaveStatesPreferred)
|
||||
{
|
||||
movieToRecord.BinarySavestate = (byte[])Global.Emulator.SaveStateBinary().Clone();
|
||||
}
|
||||
else
|
||||
{
|
||||
using (var sw = new StringWriter())
|
||||
{
|
||||
Global.Emulator.SaveStateText(sw);
|
||||
movieToRecord.TextSavestate = sw.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
//var bytestate = Global.Emulator.SaveStateBinary();
|
||||
//string stringstate = Convert.ToBase64String(bytestate);
|
||||
//movieToRecord.SavestateBinaryBase64Blob = stringstate;
|
||||
}
|
||||
|
||||
// Header
|
||||
|
|
Loading…
Reference in New Issue