2014-02-04 03:08:20 +00:00
|
|
|
|
using System.Collections.Generic;
|
2013-10-28 01:04:38 +00:00
|
|
|
|
using System.Text;
|
2013-10-25 00:59:34 +00:00
|
|
|
|
|
|
|
|
|
namespace BizHawk.Client.Common
|
|
|
|
|
{
|
2014-06-13 00:43:55 +00:00
|
|
|
|
public class BkmHeader : Dictionary<string, string>
|
2013-10-25 00:59:34 +00:00
|
|
|
|
{
|
2014-06-13 00:43:55 +00:00
|
|
|
|
public BkmHeader()
|
2013-10-25 00:59:34 +00:00
|
|
|
|
{
|
2013-11-29 23:18:46 +00:00
|
|
|
|
Comments = new List<string>();
|
2013-11-29 20:26:24 +00:00
|
|
|
|
Subtitles = new SubtitleList();
|
2013-11-29 23:18:46 +00:00
|
|
|
|
|
2013-11-30 02:20:34 +00:00
|
|
|
|
this[HeaderKeys.EMULATIONVERSION] = VersionInfo.GetEmuVersion();
|
2017-05-10 11:45:23 +00:00
|
|
|
|
this[HeaderKeys.PLATFORM] = Global.Emulator != null ? Global.Emulator.SystemId : "";
|
|
|
|
|
this[HeaderKeys.GAMENAME] = "";
|
|
|
|
|
this[HeaderKeys.AUTHOR] = "";
|
2013-11-30 02:20:34 +00:00
|
|
|
|
this[HeaderKeys.RERECORDS] = "0";
|
2013-10-25 00:59:34 +00:00
|
|
|
|
}
|
|
|
|
|
|
2017-04-14 19:59:01 +00:00
|
|
|
|
public List<string> Comments { get; }
|
|
|
|
|
public SubtitleList Subtitles { get; }
|
2013-11-30 02:20:34 +00:00
|
|
|
|
|
2014-04-25 02:19:46 +00:00
|
|
|
|
public string SavestateBinaryBase64Blob
|
|
|
|
|
{
|
2014-06-29 03:03:27 +00:00
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
if (ContainsKey(HeaderKeys.SAVESTATEBINARYBASE64BLOB))
|
|
|
|
|
{
|
|
|
|
|
return this[HeaderKeys.SAVESTATEBINARYBASE64BLOB];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return null;
|
2014-04-25 02:19:46 +00:00
|
|
|
|
}
|
2014-06-29 03:03:27 +00:00
|
|
|
|
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
if (value == null)
|
|
|
|
|
{
|
|
|
|
|
Remove(HeaderKeys.SAVESTATEBINARYBASE64BLOB);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Add(HeaderKeys.SAVESTATEBINARYBASE64BLOB, value);
|
|
|
|
|
}
|
2014-04-25 02:19:46 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2013-11-30 02:20:34 +00:00
|
|
|
|
public ulong Rerecords
|
|
|
|
|
{
|
|
|
|
|
get
|
2013-10-25 00:59:34 +00:00
|
|
|
|
{
|
2013-11-30 02:20:34 +00:00
|
|
|
|
if (!ContainsKey(HeaderKeys.RERECORDS))
|
|
|
|
|
{
|
|
|
|
|
this[HeaderKeys.RERECORDS] = "0";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return ulong.Parse(this[HeaderKeys.RERECORDS]);
|
2013-10-25 00:59:34 +00:00
|
|
|
|
}
|
2013-10-28 01:04:38 +00:00
|
|
|
|
|
2013-11-30 02:20:34 +00:00
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
this[HeaderKeys.RERECORDS] = value.ToString();
|
|
|
|
|
}
|
|
|
|
|
}
|
2013-10-25 00:59:34 +00:00
|
|
|
|
|
2013-11-30 02:20:34 +00:00
|
|
|
|
public bool StartsFromSavestate
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
if (ContainsKey(HeaderKeys.STARTSFROMSAVESTATE))
|
|
|
|
|
{
|
|
|
|
|
return bool.Parse(this[HeaderKeys.STARTSFROMSAVESTATE]);
|
|
|
|
|
}
|
2014-02-04 03:08:20 +00:00
|
|
|
|
|
|
|
|
|
return false;
|
2013-11-30 02:20:34 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
if (value)
|
|
|
|
|
{
|
|
|
|
|
Add(HeaderKeys.STARTSFROMSAVESTATE, "True");
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Remove(HeaderKeys.STARTSFROMSAVESTATE);
|
|
|
|
|
}
|
|
|
|
|
}
|
2013-10-25 00:59:34 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-11-30 03:23:19 +00:00
|
|
|
|
public string GameName
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
if (ContainsKey(HeaderKeys.GAMENAME))
|
|
|
|
|
{
|
|
|
|
|
return this[HeaderKeys.GAMENAME];
|
|
|
|
|
}
|
2014-02-04 03:08:20 +00:00
|
|
|
|
|
2017-05-10 11:45:23 +00:00
|
|
|
|
return "";
|
2013-11-30 03:23:19 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
this[HeaderKeys.GAMENAME] = value;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2017-05-17 18:18:26 +00:00
|
|
|
|
public string SystemId
|
2013-11-30 03:23:19 +00:00
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
if (ContainsKey(HeaderKeys.PLATFORM))
|
|
|
|
|
{
|
|
|
|
|
return this[HeaderKeys.PLATFORM];
|
|
|
|
|
}
|
2014-02-04 03:08:20 +00:00
|
|
|
|
|
2017-05-10 11:45:23 +00:00
|
|
|
|
return "";
|
2014-02-04 03:08:20 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
this[HeaderKeys.PLATFORM] = value;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public new string this[string key]
|
|
|
|
|
{
|
|
|
|
|
get
|
|
|
|
|
{
|
2017-05-10 18:37:04 +00:00
|
|
|
|
return ContainsKey(key) ? base[key] : "";
|
2014-02-04 03:08:20 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
if (ContainsKey(key))
|
|
|
|
|
{
|
|
|
|
|
base[key] = value;
|
|
|
|
|
}
|
2013-11-30 03:23:19 +00:00
|
|
|
|
else
|
|
|
|
|
{
|
2014-02-04 03:08:20 +00:00
|
|
|
|
Add(key, value);
|
2013-11-30 03:23:19 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2014-02-04 03:08:20 +00:00
|
|
|
|
}
|
2013-11-30 03:23:19 +00:00
|
|
|
|
|
2014-02-04 03:08:20 +00:00
|
|
|
|
public new void Clear()
|
|
|
|
|
{
|
|
|
|
|
Comments.Clear();
|
|
|
|
|
Subtitles.Clear();
|
|
|
|
|
base.Clear();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public override string ToString()
|
|
|
|
|
{
|
|
|
|
|
var sb = new StringBuilder();
|
|
|
|
|
|
|
|
|
|
foreach (var kvp in this)
|
2013-11-30 03:23:19 +00:00
|
|
|
|
{
|
2014-02-04 03:08:20 +00:00
|
|
|
|
sb
|
|
|
|
|
.Append(kvp.Key)
|
|
|
|
|
.Append(' ')
|
|
|
|
|
.Append(kvp.Value)
|
|
|
|
|
.AppendLine();
|
2013-11-30 03:23:19 +00:00
|
|
|
|
}
|
2014-02-04 03:08:20 +00:00
|
|
|
|
|
|
|
|
|
sb.Append(Subtitles);
|
|
|
|
|
Comments.ForEach(comment => sb.AppendLine(comment));
|
|
|
|
|
|
|
|
|
|
return sb.ToString();
|
2013-11-30 03:23:19 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-11-30 02:20:34 +00:00
|
|
|
|
public bool ParseLineFromFile(string line)
|
2013-10-25 00:59:34 +00:00
|
|
|
|
{
|
2014-02-04 03:08:20 +00:00
|
|
|
|
if (!string.IsNullOrWhiteSpace(line))
|
2013-10-25 00:59:34 +00:00
|
|
|
|
{
|
2013-11-30 02:20:34 +00:00
|
|
|
|
var splitLine = line.Split(new[] { ' ' }, 2);
|
2013-11-29 23:18:46 +00:00
|
|
|
|
|
2017-05-10 18:37:04 +00:00
|
|
|
|
if (HeaderKeys.Contains(splitLine[0]) && !ContainsKey(splitLine[0]))
|
2013-11-29 23:18:46 +00:00
|
|
|
|
{
|
2013-11-30 02:20:34 +00:00
|
|
|
|
Add(splitLine[0], splitLine[1]);
|
2013-11-29 23:18:46 +00:00
|
|
|
|
}
|
|
|
|
|
else if (line.StartsWith("subtitle") || line.StartsWith("sub"))
|
|
|
|
|
{
|
2013-11-30 02:20:34 +00:00
|
|
|
|
Subtitles.AddFromString(line);
|
2013-11-29 23:18:46 +00:00
|
|
|
|
}
|
|
|
|
|
else if (line.StartsWith("comment"))
|
|
|
|
|
{
|
|
|
|
|
Comments.Add(line.Substring(8, line.Length - 8));
|
|
|
|
|
}
|
2013-11-30 02:20:34 +00:00
|
|
|
|
else if (line.StartsWith("|"))
|
2013-10-25 00:59:34 +00:00
|
|
|
|
{
|
2013-11-29 23:18:46 +00:00
|
|
|
|
return false;
|
|
|
|
|
}
|
2013-10-25 00:59:34 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|