diff --git a/BizHawk.Client.Common/BizHawk.Client.Common.csproj b/BizHawk.Client.Common/BizHawk.Client.Common.csproj
index e3d36f0bf9..47967a1d38 100644
--- a/BizHawk.Client.Common/BizHawk.Client.Common.csproj
+++ b/BizHawk.Client.Common/BizHawk.Client.Common.csproj
@@ -121,7 +121,9 @@
+
+
diff --git a/BizHawk.Client.Common/movie/HeaderKeys.cs b/BizHawk.Client.Common/movie/HeaderKeys.cs
new file mode 100644
index 0000000000..91341e318c
--- /dev/null
+++ b/BizHawk.Client.Common/movie/HeaderKeys.cs
@@ -0,0 +1,60 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+
+namespace BizHawk.Client.Common
+{
+ public static class HeaderKeys
+ {
+ public const string MovieVersion = "BizHawk v0.0.1";
+
+ public const string EMULATIONVERSION = "emuVersion";
+ public const string MOVIEVERSION = "MovieVersion";
+ public const string PLATFORM = "Platform";
+ public const string GAMENAME = "GameName";
+ public const string AUTHOR = "Author";
+ public const string RERECORDS = "rerecordCount";
+ public const string GUID = "GUID";
+ public const string STARTSFROMSAVESTATE = "StartsFromSavestate";
+ public const string FOURSCORE = "FourScore";
+ public const string SHA1 = "SHA1";
+ public const string FIRMWARESHA1 = "FirmwareSHA1";
+ public const string PAL = "PAL";
+ public const string BOARDNAME = "BoardName";
+
+ //Gameboy Settings that affect sync
+ public const string GB_FORCEDMG = "Force_DMG_Mode";
+ public const string GB_GBA_IN_CGB = "GBA_In_CGB";
+ public const string SGB = "SGB"; //a snes movie will set this to indicate that it's actually SGB
+
+ //BIO skipping setting (affects sync)
+ public const string SKIPBIOS = "Skip_Bios";
+
+ //Plugin Settings
+ public const string VIDEOPLUGIN = "VideoPlugin";
+
+ //Board properties
+ public const string BOARDPROPERTIES = "BoardProperty";
+
+ public static string NewGuid
+ {
+ get
+ {
+ return Guid.NewGuid().ToString();
+ }
+ }
+
+ public static bool Contains(string val)
+ {
+ var keys = new List();
+ foreach (FieldInfo field in typeof(HeaderKeys).GetFields())
+ {
+ keys.Add(field.GetValue(null).ToString());
+ }
+
+ return keys.Contains(val);
+ }
+ }
+}
diff --git a/BizHawk.Client.Common/movie/IMovie.cs b/BizHawk.Client.Common/movie/IMovie.cs
index d4dc1a26f3..1f7c947d3b 100644
--- a/BizHawk.Client.Common/movie/IMovie.cs
+++ b/BizHawk.Client.Common/movie/IMovie.cs
@@ -91,7 +91,7 @@ namespace BizHawk.Client.Common
string GetInput(int frame); // Should be a property of a Record object
- MovieHeader Header { get; } // Expose IMovieHEader instead
+ IMovieHeader Header { get; } // Expose IMovieHEader instead
MovieLog LogDump { get; } // Don't expose this!!!
//SubtitleList Subtitles { get; } // Don't expose this!!!
diff --git a/BizHawk.Client.Common/movie/IMovieHeader.cs b/BizHawk.Client.Common/movie/IMovieHeader.cs
new file mode 100644
index 0000000000..18fcbb842b
--- /dev/null
+++ b/BizHawk.Client.Common/movie/IMovieHeader.cs
@@ -0,0 +1,35 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace BizHawk.Client.Common
+{
+ public interface IMovieHeader : IDictionary
+ {
+ SubtitleList Subtitles { get; }
+ Dictionary BoardProperties { get; }
+
+ #region Dubious, should reconsider
+
+ List Comments { get; } // Consider making this a readonly list, or custom object, to control editing api
+
+ Dictionary Parameters { get; } //rename to Parameters, make a custom object, that controls what params are valid
+
+ ///
+ /// Adds the key value pair to header params. If key already exists, value will be updated
+ ///
+ ///
+ ///
+ void AddHeaderLine(string key, string value); // delete in favor of AddHeaderFromLine
+
+ //TODO: replace Movie Preload & Load functions with this
+ ///
+ /// Receives a line and attempts to add as a header, returns false if not a useable header line
+ ///
+ ///
+ ///
+ bool AddHeaderFromLine(string line); // rename to AddFromString, should be a property of HeaderParams
+ #endregion
+ }
+}
diff --git a/BizHawk.Client.Common/movie/Movie.cs b/BizHawk.Client.Common/movie/Movie.cs
index 54ecc3227a..dfc97a9442 100644
--- a/BizHawk.Client.Common/movie/Movie.cs
+++ b/BizHawk.Client.Common/movie/Movie.cs
@@ -34,7 +34,7 @@ namespace BizHawk.Client.Common
#endregion
#region Properties
- public MovieHeader Header { get; private set; }
+ public IMovieHeader Header { get; private set; }
public bool MakeBackup { get; set; }
public string Filename { get; set; }
@@ -49,18 +49,18 @@ namespace BizHawk.Client.Common
set
{
_rerecords = value;
- Header.SetHeaderLine(MovieHeader.RERECORDS, Rerecords.ToString());
+ Header.Parameters[HeaderKeys.RERECORDS] = Rerecords.ToString();
}
}
public string SysID
{
- get { return Header.GetHeaderLine(MovieHeader.PLATFORM); }
+ get { return Header.Parameters[HeaderKeys.PLATFORM]; }
}
public string GameName
{
- get { return Header.GetHeaderLine(MovieHeader.GAMENAME); }
+ get { return Header.Parameters[HeaderKeys.GAMENAME]; }
}
public int RawFrames
@@ -98,11 +98,11 @@ namespace BizHawk.Client.Common
_startsfromsavestate = value;
if (value)
{
- Header.AddHeaderLine(MovieHeader.STARTSFROMSAVESTATE, "1");
+ Header.AddHeaderLine(HeaderKeys.STARTSFROMSAVESTATE, "1");
}
else
{
- Header.RemoveHeaderLine(MovieHeader.STARTSFROMSAVESTATE);
+ Header.Parameters.Remove(HeaderKeys.STARTSFROMSAVESTATE);
}
}
}
@@ -453,7 +453,7 @@ namespace BizHawk.Client.Common
public void DumpLogIntoSavestateText(TextWriter writer)
{
writer.WriteLine("[Input]");
- writer.WriteLine(MovieHeader.GUID + " " + Header.GetHeaderLine(MovieHeader.GUID));
+ writer.WriteLine(HeaderKeys.GUID + " " + Header.Parameters[HeaderKeys.GUID]);
for (int x = 0; x < _log.Length; x++)
{
@@ -619,8 +619,8 @@ namespace BizHawk.Client.Common
}
else if (line.Contains("GUID"))
{
- string guid = ParseHeader(line, MovieHeader.GUID);
- if (Header.GetHeaderLine(MovieHeader.GUID) != guid)
+ string guid = ParseHeader(line, HeaderKeys.GUID);
+ if (Header.Parameters[HeaderKeys.GUID] != guid)
{
if (!ignoreGuidMismatch)
{
@@ -798,9 +798,9 @@ namespace BizHawk.Client.Common
continue;
}
- if (str.Contains(MovieHeader.RERECORDS))
+ if (str.Contains(HeaderKeys.RERECORDS))
{
- string rerecordStr = ParseHeader(str, MovieHeader.RERECORDS);
+ string rerecordStr = ParseHeader(str, HeaderKeys.RERECORDS);
try
{
Rerecords = int.Parse(rerecordStr);
@@ -810,9 +810,9 @@ namespace BizHawk.Client.Common
Rerecords = 0;
}
}
- else if (str.Contains(MovieHeader.STARTSFROMSAVESTATE))
+ else if (str.Contains(HeaderKeys.STARTSFROMSAVESTATE))
{
- str = ParseHeader(str, MovieHeader.STARTSFROMSAVESTATE);
+ str = ParseHeader(str, HeaderKeys.STARTSFROMSAVESTATE);
if (str == "1")
StartsFromSavestate = true;
}
@@ -878,9 +878,9 @@ namespace BizHawk.Client.Common
return 0;
}
- string system = Header.GetHeaderLine(MovieHeader.PLATFORM);
- bool pal = Header.HeaderParams.ContainsKey(MovieHeader.PAL) &&
- Header.HeaderParams[MovieHeader.PAL] == "1";
+ string system = Header.Parameters[HeaderKeys.PLATFORM];
+ bool pal = Header.Parameters.ContainsKey(HeaderKeys.PAL) &&
+ Header.Parameters[HeaderKeys.PAL] == "1";
return frames / _PlatformFrameRates[system, pal];
}
@@ -895,9 +895,9 @@ namespace BizHawk.Client.Common
{
get
{
- string system = Header.GetHeaderLine(MovieHeader.PLATFORM);
- bool pal = Header.HeaderParams.ContainsKey(MovieHeader.PAL) &&
- Header.HeaderParams[MovieHeader.PAL] == "1";
+ string system = Header.Parameters[HeaderKeys.PLATFORM];
+ bool pal = Header.Parameters.ContainsKey(HeaderKeys.PAL) &&
+ Header.Parameters[HeaderKeys.PAL] == "1";
return _PlatformFrameRates[system, pal];
}
diff --git a/BizHawk.Client.Common/movie/MovieHeader.cs b/BizHawk.Client.Common/movie/MovieHeader.cs
index a4ac24e0ba..6311e46dc4 100644
--- a/BizHawk.Client.Common/movie/MovieHeader.cs
+++ b/BizHawk.Client.Common/movie/MovieHeader.cs
@@ -3,9 +3,11 @@ using System.Collections.Generic;
using System.IO;
using System.Text;
+using BizHawk.Common;
+
namespace BizHawk.Client.Common
{
- public class MovieHeader
+ public class MovieHeader : Dictionary, IMovieHeader
{
//Required Header Params
//Emulation - Core version, will be 1.0.0 until there is a versioning system
@@ -14,62 +16,27 @@ namespace BizHawk.Client.Common
//GameName - Which game
//TODO: checksum of game, other stuff
- public Dictionary HeaderParams = new Dictionary(); //Platform specific options go here
- public List Comments = new List();
+ public Dictionary Parameters { get; private set; }
+ public List Comments { get; private set; }
- public Dictionary BoardProperties = new Dictionary();
+ public Dictionary BoardProperties { get; private set; }
public SubtitleList Subtitles { get; private set; }
- #region Header Constants
-
- public const string EMULATIONVERSION = "emuVersion";
- public const string MOVIEVERSION = "MovieVersion";
- public const string PLATFORM = "Platform";
- public const string GAMENAME = "GameName";
- public const string AUTHOR = "Author";
- public const string RERECORDS = "rerecordCount";
- public const string GUID = "GUID";
- public const string STARTSFROMSAVESTATE = "StartsFromSavestate";
- public const string FOURSCORE = "FourScore";
- public const string SHA1 = "SHA1";
- public const string FIRMWARESHA1 = "FirmwareSHA1";
- public const string PAL = "PAL";
- public const string BOARDNAME = "BoardName";
-
- //Gameboy Settings that affect sync
- public const string GB_FORCEDMG = "Force_DMG_Mode";
- public const string GB_GBA_IN_CGB = "GBA_In_CGB";
- public const string SGB = "SGB"; //a snes movie will set this to indicate that it's actually SGB
-
- //BIO skipping setting (affects sync)
- public const string SKIPBIOS = "Skip_Bios";
-
- //Plugin Settings
- public const string VIDEOPLUGIN = "VideoPlugin";
-
- //Board properties
- public const string BOARDPROPERTIES = "BoardProperty";
-
- #endregion
-
- public static string MovieVersion = "BizHawk v0.0.1";
-
- public static string MakeGUID()
- {
- return Guid.NewGuid().ToString();
- }
-
public MovieHeader() //All required fields will be set to default values
{
+ Parameters = new Dictionary(); //Platform specific options go here
+ BoardProperties = new Dictionary();
+ Comments = new List();
Subtitles = new SubtitleList();
- HeaderParams.Add(EMULATIONVERSION, VersionInfo.GetEmuVersion());
- HeaderParams.Add(MOVIEVERSION, MovieVersion);
- HeaderParams.Add(PLATFORM, String.Empty);
- HeaderParams.Add(GAMENAME, String.Empty);
- HeaderParams.Add(AUTHOR, String.Empty);
- HeaderParams.Add(RERECORDS, "0");
- HeaderParams.Add(GUID, MakeGUID());
+
+ Parameters.Add(HeaderKeys.EMULATIONVERSION, VersionInfo.GetEmuVersion());
+ Parameters.Add(HeaderKeys.MOVIEVERSION, HeaderKeys.MovieVersion);
+ Parameters.Add(HeaderKeys.PLATFORM, String.Empty);
+ Parameters.Add(HeaderKeys.GAMENAME, String.Empty);
+ Parameters.Add(HeaderKeys.AUTHOR, String.Empty);
+ Parameters.Add(HeaderKeys.RERECORDS, "0");
+ Parameters.Add(HeaderKeys.GUID, HeaderKeys.NewGuid);
}
///
@@ -81,11 +48,11 @@ namespace BizHawk.Client.Common
{
string temp;
- if (!HeaderParams.TryGetValue(key, out temp)) //TODO: does a failed attempt mess with value?
- HeaderParams.Add(key, value);
+ if (!Parameters.TryGetValue(key, out temp)) //TODO: does a failed attempt mess with value?
+ Parameters.Add(key, value);
}
- public void AddBoardProperty(string key, string value)
+ private void AddBoardProperty(string key, string value)
{
string temp;
if (!BoardProperties.TryGetValue(key, out temp))
@@ -94,38 +61,20 @@ namespace BizHawk.Client.Common
}
}
- public void UpdateRerecordCount(int count)
+ new public void Clear()
{
- HeaderParams[RERECORDS] = count.ToString();
- }
-
- public bool RemoveHeaderLine(string key)
- {
- return HeaderParams.Remove(key);
- }
-
- public void Clear()
- {
- HeaderParams.Clear();
- }
-
- public string GetHeaderLine(string key)
- {
- string value;
- HeaderParams.TryGetValue(key, out value);
- return value;
- }
-
- public void SetHeaderLine(string key, string value)
- {
- HeaderParams[key] = value;
+ Parameters.Clear();
+ BoardProperties.Clear();
+ Comments.Clear();
+ Subtitles.Clear();
+ base.Clear();
}
public override string ToString()
{
- StringBuilder sb = new StringBuilder();
+ var sb = new StringBuilder();
- foreach (KeyValuePair kvp in HeaderParams)
+ foreach (var kvp in Parameters)
{
sb
.Append(kvp.Key)
@@ -134,10 +83,10 @@ namespace BizHawk.Client.Common
.AppendLine();
}
- foreach (KeyValuePair kvp in BoardProperties)
+ foreach (var kvp in BoardProperties)
{
sb
- .Append(BOARDPROPERTIES)
+ .Append(HeaderKeys.BOARDPROPERTIES)
.Append(' ')
.Append(kvp.Key)
.Append(' ')
@@ -150,169 +99,71 @@ namespace BizHawk.Client.Common
sb.AppendLine(t);
}
+ //TOD: subtitles go here not wherever it is currently located
+
return sb.ToString();
}
- private string ParseHeader(string line, string headerName)
- {
- int x = line.LastIndexOf(headerName) + headerName.Length;
- string str = line.Substring(x + 1, line.Length - x - 1);
- return str;
- }
-
- //TODO: replace Movie Preload & Load functions with this
- ///
- /// Receives a line and attempts to add as a header, returns false if not a useable header line
- ///
- ///
- ///
public bool AddHeaderFromLine(string line)
{
- if (line.Length == 0) return false;
- else if (line.Contains(EMULATIONVERSION))
+ if (!String.IsNullOrWhiteSpace(line))
{
- line = ParseHeader(line, EMULATIONVERSION);
- AddHeaderLine(EMULATIONVERSION, line);
- }
- else if (line.Contains(MOVIEVERSION))
- {
- line = ParseHeader(line, MOVIEVERSION);
- AddHeaderLine(MOVIEVERSION, line);
- }
- else if (line.Contains(PLATFORM))
- {
- line = ParseHeader(line, PLATFORM);
- AddHeaderLine(PLATFORM, line);
- }
- else if (line.Contains(GAMENAME))
- {
- line = ParseHeader(line, GAMENAME);
- AddHeaderLine(GAMENAME, line);
- }
- else if (line.Contains(RERECORDS))
- {
- line = ParseHeader(line, RERECORDS);
- AddHeaderLine(RERECORDS, line);
- }
- else if (line.Contains(AUTHOR))
- {
- line = ParseHeader(line, AUTHOR);
- AddHeaderLine(AUTHOR, line);
- }
- else if (line.ToUpper().Contains(GUID))
- {
- line = ParseHeader(line, GUID);
- AddHeaderLine(GUID, line);
- }
- else if (line.Contains(STARTSFROMSAVESTATE))
- {
- line = ParseHeader(line, STARTSFROMSAVESTATE);
- AddHeaderLine(STARTSFROMSAVESTATE, line);
- }
- else if (line.Contains(SHA1))
- {
- line = ParseHeader(line, SHA1);
- AddHeaderLine(SHA1, line);
- }
- else if (line.Contains(SKIPBIOS))
- {
- line = ParseHeader(line, SKIPBIOS);
- AddHeaderLine(SKIPBIOS, line);
- }
- else if (line.Contains(GB_FORCEDMG))
- {
- line = ParseHeader(line, GB_FORCEDMG);
- AddHeaderLine(GB_FORCEDMG, line);
- }
- else if (line.Contains(GB_GBA_IN_CGB))
- {
- line = ParseHeader(line, GB_GBA_IN_CGB);
- AddHeaderLine(GB_GBA_IN_CGB, line);
- }
- else if (line.Contains(SGB))
- {
- line = ParseHeader(line, SGB);
- AddHeaderLine(SGB, line);
- }
- else if (line.Contains(PAL))
- {
- line = ParseHeader(line, PAL);
- AddHeaderLine(PAL, line);
- }
- else if (line.Contains(VIDEOPLUGIN))
- {
- line = ParseHeader(line, VIDEOPLUGIN);
- AddHeaderLine(VIDEOPLUGIN, line);
- }
- else if (line.Contains(BOARDPROPERTIES))
- {
- line = ParseHeader(line, BOARDPROPERTIES);
- string[] vals = line.Split(' ');
- AddBoardProperty(vals[0], vals[1]);
- }
- else if (line.StartsWith("subtitle") || line.StartsWith("sub"))
- {
- return false;
- }
- else if (line.StartsWith("comment"))
- {
- Comments.Add(line.Substring(8, line.Length - 8));
- }
- else if (line[0] == '|')
- {
- return false;
- }
- else
- {
- if (HeaderParams[PLATFORM] == "N64")
+ var splitLine = line.Split(new char[] { ' ' }, 2);
+
+ if (line.Contains(HeaderKeys.BOARDPROPERTIES))
{
- if (HeaderParams.ContainsKey(VIDEOPLUGIN))
+ var boardSplit = splitLine[1].Split(' ');
+ AddBoardProperty(boardSplit[0], boardSplit[1]);
+ }
+ else if (HeaderKeys.Contains(splitLine[0]))
+ {
+ Parameters.Add(splitLine[0], splitLine[1]);
+ }
+ else if (line.StartsWith("subtitle") || line.StartsWith("sub"))
+ {
+ return false;
+ }
+ else if (line.StartsWith("comment"))
+ {
+ Comments.Add(line.Substring(8, line.Length - 8));
+ }
+ else if (line[0] == '|')
+ {
+ return false;
+ }
+ else if (Parameters.ContainsKey(HeaderKeys.PLATFORM) && Parameters[HeaderKeys.PLATFORM] == "N64")
+ {
+ if (Parameters.ContainsKey(HeaderKeys.VIDEOPLUGIN))
{
- if (HeaderParams[VIDEOPLUGIN] == "Rice")
+ if (Parameters[HeaderKeys.VIDEOPLUGIN] == "Rice")
{
ICollection settings = Global.Config.RicePlugin.GetPluginSettings().Keys;
- foreach (string setting in settings)
+ foreach (var setting in settings)
{
if (line.Contains(setting))
{
- line = ParseHeader(line, setting);
- AddHeaderLine(setting, line);
+ Parameters.Add(splitLine[0], splitLine[1]);
break;
}
}
}
- else if (HeaderParams[VIDEOPLUGIN] == "Glide64")
+ else if (Parameters[HeaderKeys.VIDEOPLUGIN] == "Glide64")
{
ICollection settings = Global.Config.GlidePlugin.GetPluginSettings().Keys;
foreach (string setting in settings)
{
if (line.Contains(setting))
{
- line = ParseHeader(line, setting);
- AddHeaderLine(setting, line);
+ Parameters.Add(splitLine[0], splitLine[1]);
break;
}
}
}
}
}
- else
- {
- Comments.Add(line);
- }
}
return true;
}
-
- public void ReadHeader(StreamReader reader)
- {
- string str;
- while ((str = reader.ReadLine()) != null)
- {
- AddHeaderFromLine(str);
- }
- reader.Close();
- }
}
}
diff --git a/BizHawk.Client.Common/movie/MovieImport.cs b/BizHawk.Client.Common/movie/MovieImport.cs
index 50451a9260..d00bc2dcfb 100644
--- a/BizHawk.Client.Common/movie/MovieImport.cs
+++ b/BizHawk.Client.Common/movie/MovieImport.cs
@@ -85,7 +85,7 @@ namespace BizHawk.Client.Common
}
if (errorMsg == String.Empty)
{
- m.Header.SetHeaderLine(MovieHeader.MOVIEVERSION, MovieHeader.MovieVersion);
+ m.Header.Parameters[HeaderKeys.MOVIEVERSION] = HeaderKeys.MovieVersion;
}
}
catch (Exception except)
@@ -304,7 +304,7 @@ namespace BizHawk.Client.Common
platform = "PCE";
break;
}
- m.Header.SetHeaderLine(MovieHeader.PLATFORM, platform);
+ m.Header.Parameters[HeaderKeys.PLATFORM] = platform;
int lineNum = 0;
string line;
while ((line = sr.ReadLine()) != null)
@@ -348,7 +348,7 @@ namespace BizHawk.Client.Common
}
else if (line.ToLower().StartsWith("romfilename"))
{
- m.Header.SetHeaderLine(MovieHeader.GAMENAME, ParseHeader(line, "romFilename"));
+ m.Header.Parameters[HeaderKeys.GAMENAME] = ParseHeader(line, "romFilename");
}
else if (line.ToLower().StartsWith("romchecksum"))
{
@@ -356,7 +356,7 @@ namespace BizHawk.Client.Common
byte[] md5 = DecodeBlob(blob);
if (md5 != null && md5.Length == 16)
{
- m.Header.SetHeaderLine(MD5, Util.BytesToHexString(md5).ToLower());
+ m.Header.Parameters[MD5] = Util.BytesToHexString(md5).ToLower();
}
else
{
@@ -365,7 +365,7 @@ namespace BizHawk.Client.Common
}
else if (line.ToLower().StartsWith("comment author"))
{
- m.Header.SetHeaderLine(MovieHeader.AUTHOR, ParseHeader(line, "comment author"));
+ m.Header.Parameters[HeaderKeys.AUTHOR] = ParseHeader(line, "comment author");
}
else if (line.ToLower().StartsWith("rerecordcount"))
{
@@ -383,7 +383,7 @@ namespace BizHawk.Client.Common
}
else if (line.ToLower().StartsWith("guid"))
{
- m.Header.SetHeaderLine(MovieHeader.GUID, ParseHeader(line, "guid"));
+ m.Header.Parameters[HeaderKeys.GUID] = ParseHeader(line, "guid");
}
else if (line.ToLower().StartsWith("startsfromsavestate"))
{
@@ -398,12 +398,12 @@ namespace BizHawk.Client.Common
else if (line.ToLower().StartsWith("palflag"))
{
bool pal = (ParseHeader(line, "palFlag") == "1");
- m.Header.SetHeaderLine(MovieHeader.PAL, pal.ToString());
+ m.Header.Parameters[HeaderKeys.PAL] = pal.ToString();
}
else if (line.ToLower().StartsWith("fourscore"))
{
bool fourscore = (ParseHeader(line, "fourscore") == "1");
- m.Header.SetHeaderLine(MovieHeader.FOURSCORE, fourscore.ToString());
+ m.Header.Parameters[HeaderKeys.FOURSCORE] = fourscore.ToString();
}
else
// Everything not explicitly defined is treated as a comment.
@@ -515,7 +515,7 @@ namespace BizHawk.Client.Common
preference. This means that this site cannot calculate movie lengths reliably.
*/
bool pal = (((flags >> 2) & 0x1) != 0);
- m.Header.SetHeaderLine(MovieHeader.PAL, pal.ToString());
+ m.Header.Parameters[HeaderKeys.PAL] = pal.ToString();
// other: reserved, set to 0
bool syncHack = (((flags >> 4) & 0x1) != 0);
m.Header.Comments.Add(SYNCHACK + " " + syncHack.ToString());
@@ -541,7 +541,7 @@ namespace BizHawk.Client.Common
uint firstFrameOffset = r.ReadUInt32();
// 020 16-byte md5sum of the ROM used
byte[] md5 = r.ReadBytes(16);
- m.Header.SetHeaderLine(MD5, Util.BytesToHexString(md5).ToLower());
+ m.Header.Parameters[MD5] = Util.BytesToHexString(md5).ToLower();
// 030 4-byte little-endian unsigned int: version of the emulator used
uint emuVersion = r.ReadUInt32();
m.Header.Comments.Add(EMULATIONORIGIN + " FCEU " + emuVersion.ToString());
@@ -552,7 +552,7 @@ namespace BizHawk.Client.Common
// Advance past null byte.
r.ReadByte();
string gameName = Encoding.UTF8.GetString(gameBytes.ToArray());
- m.Header.SetHeaderLine(MovieHeader.GAMENAME, gameName);
+ m.Header.Parameters[HeaderKeys.GAMENAME] = gameName;
/*
After the header comes "metadata", which is UTF8-coded movie title string. The metadata begins after the ROM
name and ends at the savestate offset. This string is displayed as "Author Info" in the Windows version of the
@@ -564,7 +564,7 @@ namespace BizHawk.Client.Common
// Advance past null byte.
r.ReadByte();
string author = Encoding.UTF8.GetString(authorBytes.ToArray());
- m.Header.SetHeaderLine(MovieHeader.AUTHOR, author);
+ m.Header.Parameters[HeaderKeys.AUTHOR] = author;
// Advance to first byte of input data.
r.BaseStream.Position = firstFrameOffset;
SimpleController controllers = new SimpleController {Type = new ControllerDefinition {Name = "NES Controller"}};
@@ -707,9 +707,9 @@ namespace BizHawk.Client.Common
controllers["P" + player + " " + buttons[button]] = !controllers["P" + player + " " + buttons[button]];
}
}
- m.Header.SetHeaderLine(MovieHeader.PLATFORM, "NES");
- if (fds) { m.Header.SetHeaderLine(MovieHeader.BOARDNAME, "FDS"); }
- m.Header.SetHeaderLine(MovieHeader.FOURSCORE, fourscore.ToString());
+ m.Header.Parameters[HeaderKeys.PLATFORM] = "NES";
+ if (fds) { m.Header.Parameters[HeaderKeys.BOARDNAME] = "FDS"; }
+ m.Header.Parameters[HeaderKeys.FOURSCORE] = fourscore.ToString();
r.Close();
fs.Close();
return m;
@@ -755,7 +755,7 @@ namespace BizHawk.Client.Common
if (((flags >> 5) & 0x1) != 0)
{
FDS = true;
- m.Header.SetHeaderLine(MovieHeader.BOARDNAME, "FDS");
+ m.Header.Parameters[HeaderKeys.BOARDNAME] = "FDS";
}
else
{
@@ -763,7 +763,7 @@ namespace BizHawk.Client.Common
}
- m.Header.SetHeaderLine(MovieHeader.PLATFORM, "NES");
+ m.Header.Parameters[HeaderKeys.PLATFORM] = "NES";
// bit 6: uses controller 2
bool controller2 = (((flags >> 6) & 0x1) != 0);
@@ -800,7 +800,7 @@ namespace BizHawk.Client.Common
The file format has no means of identifying NTSC/"PAL". It is always assumed that the game is NTSC - that is,
60 fps.
*/
- m.Header.SetHeaderLine(MovieHeader.PAL, "False");
+ m.Header.Parameters[HeaderKeys.PAL] = "False";
// 090 frame data begins here
SimpleController controllers = new SimpleController {Type = new ControllerDefinition {Name = "NES Controller"}};
MnemonicsGenerator mg = new MnemonicsGenerator();
@@ -879,7 +879,7 @@ namespace BizHawk.Client.Common
fs.Close();
return null;
}
- m.Header.SetHeaderLine(MovieHeader.PLATFORM, "Genesis");
+ m.Header.Parameters[HeaderKeys.PLATFORM] = "Genesis";
// 00F ASCII-encoded GMV file format version. The most recent is 'A'. (?)
string version = r.ReadStringFixedAscii(1);
m.Header.Comments.Add(MOVIEORIGIN + " .GMV version " + version);
@@ -903,7 +903,7 @@ namespace BizHawk.Client.Common
header.
*/
bool pal = (((flags >> 7) & 0x1) != 0);
- m.Header.SetHeaderLine(MovieHeader.PAL, pal.ToString());
+ m.Header.Parameters[HeaderKeys.PAL] = pal.ToString();
// bit 6: if "1", movie requires a savestate.
if (((flags >> 6) & 0x1) != 0)
{
@@ -1035,7 +1035,7 @@ namespace BizHawk.Client.Common
{
author_list += author_last;
}
- m.Header.SetHeaderLine(MovieHeader.AUTHOR, author_list);
+ m.Header.Parameters[HeaderKeys.AUTHOR] = author_list;
hf.Unbind();
}
else if (item.name == "coreversion")
@@ -1051,7 +1051,7 @@ namespace BizHawk.Client.Common
hf.BindArchiveMember(item.index);
var stream = hf.GetStream();
string gamename = Encoding.UTF8.GetString(Util.ReadAllBytes(stream)).Trim();
- m.Header.SetHeaderLine(MovieHeader.GAMENAME, gamename);
+ m.Header.Parameters[HeaderKeys.GAMENAME] = gamename;
hf.Unbind();
}
else if (item.name == "gametype")
@@ -1072,11 +1072,11 @@ namespace BizHawk.Client.Common
case "sgb_ntsc":
case "sgb_pal":
platform = "SNES";
- m.Header.SetHeaderLine(MovieHeader.SGB, true.ToString());
+ m.Header.Parameters[HeaderKeys.SGB] = "True";
break;
}
bool pal = (gametype == "snes_pal" || gametype == "sgb_pal");
- m.Header.SetHeaderLine(MovieHeader.PAL, pal.ToString());
+ m.Header.Parameters[HeaderKeys.PAL] = pal.ToString();
hf.Unbind();
}
else if (item.name == "input")
@@ -1123,7 +1123,7 @@ namespace BizHawk.Client.Common
hf.BindArchiveMember(item.index);
var stream = hf.GetStream();
string port1 = Encoding.UTF8.GetString(Util.ReadAllBytes(stream)).Trim();
- m.Header.SetHeaderLine(PORT1, port1);
+ m.Header.Parameters[PORT1] = port1;
hf.Unbind();
}
else if (item.name == "port2")
@@ -1131,7 +1131,7 @@ namespace BizHawk.Client.Common
hf.BindArchiveMember(item.index);
var stream = hf.GetStream();
string port2 = Encoding.UTF8.GetString(Util.ReadAllBytes(stream)).Trim();
- m.Header.SetHeaderLine(PORT2, port2);
+ m.Header.Parameters[PORT2] = port2;
hf.Unbind();
}
else if (item.name == "projectid")
@@ -1139,7 +1139,7 @@ namespace BizHawk.Client.Common
hf.BindArchiveMember(item.index);
var stream = hf.GetStream();
string projectid = Encoding.UTF8.GetString(Util.ReadAllBytes(stream)).Trim();
- m.Header.SetHeaderLine(PROJECTID, projectid);
+ m.Header.Parameters[PROJECTID] = projectid;
hf.Unbind();
}
else if (item.name == "rerecords")
@@ -1167,7 +1167,7 @@ namespace BizHawk.Client.Common
string rom = Encoding.UTF8.GetString(Util.ReadAllBytes(stream)).Trim();
int pos = item.name.LastIndexOf(".sha256");
string name = item.name.Substring(0, pos);
- m.Header.SetHeaderLine(SHA256 + "_" + name, rom);
+ m.Header.Parameters[SHA256 + "_" + name] = rom;
hf.Unbind();
}
else if (item.name == "savestate")
@@ -1193,7 +1193,7 @@ namespace BizHawk.Client.Common
hf.BindArchiveMember(item.index);
var stream = hf.GetStream();
string startSecond = Encoding.UTF8.GetString(Util.ReadAllBytes(stream)).Trim();
- m.Header.SetHeaderLine(STARTSECOND, startSecond);
+ m.Header.Parameters[STARTSECOND] = startSecond;
hf.Unbind();
}
else if (item.name == "starttime.subsecond")
@@ -1201,7 +1201,7 @@ namespace BizHawk.Client.Common
hf.BindArchiveMember(item.index);
var stream = hf.GetStream();
string startSubSecond = Encoding.UTF8.GetString(Util.ReadAllBytes(stream)).Trim();
- m.Header.SetHeaderLine(STARTSUBSECOND, startSubSecond);
+ m.Header.Parameters[STARTSUBSECOND] = startSubSecond;
hf.Unbind();
}
else if (item.name == "systemid")
@@ -1213,7 +1213,7 @@ namespace BizHawk.Client.Common
hf.Unbind();
}
}
- m.Header.SetHeaderLine(MovieHeader.PLATFORM, platform);
+ m.Header.Parameters[HeaderKeys.PLATFORM] = platform;
return m;
}
@@ -1246,10 +1246,10 @@ namespace BizHawk.Client.Common
byte[] md5 = r.ReadBytes(16);
// Discard the second 16 bytes.
r.ReadBytes(16);
- m.Header.SetHeaderLine(MD5, Util.BytesToHexString(md5).ToLower());
+ m.Header.Parameters[MD5] = Util.BytesToHexString(md5).ToLower();
// 030 64-byte Filename of the ROM used (with extension)
string gameName = NullTerminated(r.ReadStringFixedAscii(64));
- m.Header.SetHeaderLine(MovieHeader.GAMENAME, gameName);
+ m.Header.Parameters[HeaderKeys.GAMENAME] = gameName;
// 070 uint32 Re-record Count
uint rerecordCount = r.ReadUInt32();
m.Rerecords = (int)rerecordCount;
@@ -1285,10 +1285,10 @@ namespace BizHawk.Client.Common
return null;
}
string name = (string)platforms[platform]["name"];
- m.Header.SetHeaderLine(MovieHeader.PLATFORM, name);
+ m.Header.Parameters[HeaderKeys.PLATFORM] = name;
// 079 32-byte Author name
string author = NullTerminated(r.ReadStringFixedAscii(32));
- m.Header.SetHeaderLine(MovieHeader.AUTHOR, author);
+ m.Header.Parameters[HeaderKeys.AUTHOR] = author;
// 099 103-byte Padding 0s
r.ReadBytes(103);
// TODO: Verify if NTSC/"PAL" mode used for the movie can be detected or not.
@@ -1385,36 +1385,36 @@ namespace BizHawk.Client.Common
r.ReadUInt32();
// 0020-005f: string: author info (UTF-8)
string author = NullTerminated(r.ReadStringFixedAscii(64));
- m.Header.SetHeaderLine(MovieHeader.AUTHOR, author);
+ m.Header.Parameters[HeaderKeys.AUTHOR] = author;
// 0060: 4-byte little endian flags
byte flags = r.ReadByte();
// bit 0: unused
// bit 1: "PAL"
bool pal = (((flags >> 1) & 0x1) != 0);
- m.Header.SetHeaderLine(MovieHeader.PAL, pal.ToString());
+ m.Header.Parameters[HeaderKeys.PAL] = pal.ToString();
// bit 2: Japan
bool japan = (((flags >> 2) & 0x1) != 0);
- m.Header.SetHeaderLine(JAPAN, japan.ToString());
+ m.Header.Parameters[JAPAN] = japan.ToString();
// bit 3: Game Gear (version 1.16+)
bool gamegear;
if (((flags >> 3) & 0x1) != 0)
{
gamegear = true;
- m.Header.SetHeaderLine(MovieHeader.PLATFORM, "GG");
+ m.Header.Parameters[HeaderKeys.PLATFORM] = "GG";
}
else
{
gamegear = false;
- m.Header.SetHeaderLine(MovieHeader.PLATFORM, "SMS");
+ m.Header.Parameters[HeaderKeys.PLATFORM] = "SMS";
}
// bits 4-31: unused
r.ReadBytes(3);
// 0064-00e3: string: rom name (ASCII)
string gameName = NullTerminated(r.ReadStringFixedAscii(128));
- m.Header.SetHeaderLine(MovieHeader.GAMENAME, gameName);
+ m.Header.Parameters[HeaderKeys.GAMENAME] = gameName;
// 00e4-00f3: binary: rom MD5 digest
byte[] md5 = r.ReadBytes(16);
- m.Header.SetHeaderLine(MD5, String.Format("{0:x8}", Util.BytesToHexString(md5).ToLower()));
+ m.Header.Parameters[MD5] = String.Format("{0:x8}", Util.BytesToHexString(md5).ToLower());
SimpleController controllers = new SimpleController {Type = new ControllerDefinition {Name = "SMS Controller"}};
MnemonicsGenerator mg = new MnemonicsGenerator();
/*
@@ -1526,7 +1526,7 @@ namespace BizHawk.Client.Common
* 7 - Vs Unisystem Zapper (3 bytes)
*/
bool fourscore = (controller1 == 5);
- m.Header.SetHeaderLine(MovieHeader.FOURSCORE, fourscore.ToString());
+ m.Header.Parameters[HeaderKeys.FOURSCORE] = fourscore.ToString();
bool[] masks = new[] { false, false, false, false, false };
if (fourscore)
{
@@ -1629,7 +1629,7 @@ namespace BizHawk.Client.Common
* if "1", "PAL" timing
*/
bool pal = (((data >> 7) & 0x1) != 0);
- m.Header.SetHeaderLine(MovieHeader.PAL, pal.ToString());
+ m.Header.Parameters[HeaderKeys.PAL] = pal.ToString();
// 004 4-byte little-endian unsigned int: rerecord count
uint rerecordCount = r.ReadUInt32();
m.Rerecords = (int)rerecordCount;
@@ -1704,7 +1704,7 @@ namespace BizHawk.Client.Common
fs.Close();
return null;
}
- m.Header.SetHeaderLine(MovieHeader.PLATFORM, "SNES");
+ m.Header.Parameters[HeaderKeys.PLATFORM] = "SNES";
// 004 4-byte little-endian unsigned int: version number
uint versionNumber = r.ReadUInt32();
string version;
@@ -1732,7 +1732,7 @@ namespace BizHawk.Client.Common
recording time in Unix epoch format
*/
uint uid = r.ReadUInt32();
- m.Header.SetHeaderLine(MovieHeader.GUID, String.Format("{0:X8}", uid) + "-0000-0000-0000-000000000000");
+ m.Header.Parameters[HeaderKeys.GUID] = String.Format("{0:X8}", uid) + "-0000-0000-0000-000000000000";
// 00C 4-byte little-endian unsigned int: rerecord count
m.Rerecords = (int)r.ReadUInt32();
// 010 4-byte little-endian unsigned int: number of frames
@@ -1770,7 +1770,7 @@ namespace BizHawk.Client.Common
}
// bit 1: if "0", movie is NTSC (60 fps); if "1", movie is PAL (50 fps)
bool pal = (((movieFlags >> 1) & 0x1) != 0);
- m.Header.SetHeaderLine(MovieHeader.PAL, pal.ToString());
+ m.Header.Parameters[HeaderKeys.PAL] = pal.ToString();
// other: reserved, set to 0
/*
016 1-byte flags "sync options":
@@ -1830,17 +1830,17 @@ namespace BizHawk.Client.Common
string author = NullTerminated(Encoding.Unicode.GetString(metadata).Trim());
if (author != "")
{
- m.Header.SetHeaderLine(MovieHeader.AUTHOR, author);
+ m.Header.Parameters[HeaderKeys.AUTHOR] = author;
}
if (extraRomInfo == 30)
{
// 000 3 bytes of zero padding: 00 00 00 003 4-byte integer: CRC32 of the ROM 007 23-byte ascii string
r.ReadBytes(3);
int crc32 = r.ReadInt32();
- m.Header.SetHeaderLine(CRC32, crc32.ToString());
+ m.Header.Parameters[CRC32] = crc32.ToString();
// the game name copied from the ROM, truncated to 23 bytes (the game name in the ROM is 21 bytes)
string gameName = NullTerminated(Encoding.UTF8.GetString(r.ReadBytes(23)));
- m.Header.SetHeaderLine(MovieHeader.GAMENAME, gameName);
+ m.Header.Parameters[HeaderKeys.GAMENAME] = gameName;
}
r.BaseStream.Position = firstFrameOffset;
/*
@@ -1991,7 +1991,7 @@ namespace BizHawk.Client.Common
recording time in Unix epoch format
*/
uint uid = r.ReadUInt32();
- m.Header.SetHeaderLine(MovieHeader.GUID, String.Format("{0:X8}", uid) + "-0000-0000-0000-000000000000");
+ m.Header.Parameters[HeaderKeys.GUID] = String.Format("{0:X8}", uid) + "-0000-0000-0000-000000000000";
// 00C 4-byte little-endian unsigned int: number of frames
uint frameCount = r.ReadUInt32();
// 010 4-byte little-endian unsigned int: rerecord count
@@ -2080,7 +2080,7 @@ namespace BizHawk.Client.Common
{
m.Header.Comments.Add(SUPERGAMEBOYMODE + " True");
}
- m.Header.SetHeaderLine(MovieHeader.PLATFORM, platform);
+ m.Header.Parameters[HeaderKeys.PLATFORM] = platform;
// 017 1-byte flags: (values of some boolean emulator options)
flags = r.ReadByte();
/*
@@ -2117,7 +2117,7 @@ namespace BizHawk.Client.Common
null-terminated (ASCII?)
*/
string gameName = NullTerminated(r.ReadStringFixedAscii(12));
- m.Header.SetHeaderLine(MovieHeader.GAMENAME, gameName);
+ m.Header.Parameters[HeaderKeys.GAMENAME] = gameName;
// 030 1-byte unsigned char: minor version/revision number of current VBM version, the latest is "1"
byte minorVersion = r.ReadByte();
m.Header.Comments.Add(MOVIEORIGIN + " .VBM version " + majorVersion + "." + minorVersion);
@@ -2136,13 +2136,13 @@ namespace BizHawk.Client.Common
uint gameCode_unitCode = r.ReadUInt32();
if (platform == "GBA")
{
- m.Header.SetHeaderLine(CRC16, checksum_crc16.ToString());
- m.Header.SetHeaderLine(GAMECODE, gameCode_unitCode.ToString());
+ m.Header.Parameters[CRC16] = checksum_crc16.ToString();
+ m.Header.Parameters[GAMECODE] = gameCode_unitCode.ToString();
}
else
{
- m.Header.SetHeaderLine(INTERNALCHECKSUM, checksum_crc16.ToString());
- m.Header.SetHeaderLine(UNITCODE, gameCode_unitCode.ToString());
+ m.Header.Parameters[INTERNALCHECKSUM] = checksum_crc16.ToString();
+ m.Header.Parameters[UNITCODE] = gameCode_unitCode.ToString();
}
// 038 4-byte little-endian unsigned int: offset to the savestate or SRAM inside file, set to 0 if unused
r.ReadBytes(4);
@@ -2150,7 +2150,7 @@ namespace BizHawk.Client.Common
uint firstFrameOffset = r.ReadUInt32();
// After the header is 192 bytes of text. The first 64 of these 192 bytes are for the author's name (or names).
string author = NullTerminated(r.ReadStringFixedAscii(64));
- m.Header.SetHeaderLine(MovieHeader.AUTHOR, author);
+ m.Header.Parameters[HeaderKeys.AUTHOR] = author;
// The following 128 bytes are for a description of the movie. Both parts must be null-terminated.
string movieDescription = NullTerminated(r.ReadStringFixedAscii(128));
m.Header.Comments.Add(COMMENT + " " + movieDescription);
@@ -2249,7 +2249,7 @@ namespace BizHawk.Client.Common
fs.Close();
return null;
}
- m.Header.SetHeaderLine(MovieHeader.PLATFORM, "NES");
+ m.Header.Parameters[HeaderKeys.PLATFORM] = "NES";
// 00C 2-byte little-endian integer: movie version 0x0400
ushort version = r.ReadUInt16();
m.Header.Comments.Add(MOVIEORIGIN + " .VMV version " + version);
@@ -2271,7 +2271,7 @@ namespace BizHawk.Client.Common
controllersUsed[controller - 1] = (((flags >> (controller - 1)) & 0x1) != 0);
}
bool fourscore = (controllersUsed[2] || controllersUsed[3]);
- m.Header.SetHeaderLine(MovieHeader.FOURSCORE, fourscore.ToString());
+ m.Header.Parameters[HeaderKeys.FOURSCORE] = fourscore.ToString();
/*
bit 6: 1=reset-based, 0=savestate-based (movie version <= 0x300 is always savestate-based)
If the movie version is < 0x400, or the "from-reset" flag is not set, a savestate is loaded from the movie.
@@ -2312,7 +2312,7 @@ namespace BizHawk.Client.Common
r.ReadByte();
// 023 1-byte flag: 0=NTSC (60 Hz), 1="PAL" (50 Hz)
bool pal = (r.ReadByte() == 1);
- m.Header.SetHeaderLine(MovieHeader.PAL, pal.ToString());
+ m.Header.Parameters[HeaderKeys.PAL] = pal.ToString();
// 024 8-bytes: reserved, set to 0
r.ReadBytes(8);
// 02C 4-byte little-endian integer: save state start offset
@@ -2325,7 +2325,7 @@ namespace BizHawk.Client.Common
uint frameCount = r.ReadUInt32();
// 03C 4-byte little-endian integer: CRC (CRC excluding this data(to prevent cheating))
int crc32 = r.ReadInt32();
- m.Header.SetHeaderLine(CRC32, crc32.ToString());
+ m.Header.Parameters[CRC32] = crc32.ToString();
if (!controllersUsed[0] && !controllersUsed[1] && !controllersUsed[2] && !controllersUsed[3])
{
warningMsg = "No input recorded.";
@@ -2469,14 +2469,14 @@ namespace BizHawk.Client.Common
fs.Close();
return null;
}
- m.Header.SetHeaderLine(MovieHeader.PLATFORM, "SNES");
+ m.Header.Parameters[HeaderKeys.PLATFORM] = "SNES";
// 003 2-byte little-endian unsigned int: zsnes version number
short version = r.ReadInt16();
m.Header.Comments.Add(EMULATIONORIGIN + " ZSNES version " + version);
m.Header.Comments.Add(MOVIEORIGIN + " .ZMV");
// 005 4-byte little-endian integer: CRC32 of the ROM
int crc32 = r.ReadInt32();
- m.Header.SetHeaderLine(CRC32, crc32.ToString());
+ m.Header.Parameters[CRC32] = crc32.ToString();
// 009 4-byte little-endian unsigned int: number of frames
uint frameCount = r.ReadUInt32();
// 00D 4-byte little-endian unsigned int: number of rerecords
@@ -2558,7 +2558,7 @@ namespace BizHawk.Client.Common
// if "11", movie begins from power-on with SRAM clear
// bit 5: if "0", movie is NTSC (60 fps); if "1", movie is PAL (50 fps)
bool pal = (((movieFlags >> 5) & 0x1) != 0);
- m.Header.SetHeaderLine(MovieHeader.PAL, pal.ToString());
+ m.Header.Parameters[HeaderKeys.PAL] = pal.ToString();
// other: reserved, set to 0
/*
028 3-byte little-endian unsigned int: initial save state size, highest bit specifies compression, next 23
@@ -2750,7 +2750,7 @@ namespace BizHawk.Client.Common
r.BaseStream.Position = r.BaseStream.Length - authorSize;
// Last in the file comes the author name field, which is an UTF-8 encoded text string.
string author = Encoding.UTF8.GetString(r.ReadBytes(authorSize));
- m.Header.SetHeaderLine(MovieHeader.AUTHOR, author);
+ m.Header.Parameters[HeaderKeys.AUTHOR] = author;
return m;
}
}
diff --git a/BizHawk.Client.EmuHawk/MainForm.Movie.cs b/BizHawk.Client.EmuHawk/MainForm.Movie.cs
index 4422da38d4..17f1174268 100644
--- a/BizHawk.Client.EmuHawk/MainForm.Movie.cs
+++ b/BizHawk.Client.EmuHawk/MainForm.Movie.cs
@@ -136,7 +136,7 @@ namespace BizHawk.Client.EmuHawk
switch (Global.Emulator.SystemId)
{
case "Coleco":
- string str = Global.MovieSession.Movie.Header.GetHeaderLine(MovieHeader.SKIPBIOS);
+ string str = Global.MovieSession.Movie.Header.Parameters[HeaderKeys.SKIPBIOS];
if (!String.IsNullOrWhiteSpace(str))
{
if (str.ToLower() == "true")
diff --git a/BizHawk.Client.EmuHawk/MainForm.cs b/BizHawk.Client.EmuHawk/MainForm.cs
index 564d6a4360..b5cf8ca7d5 100644
--- a/BizHawk.Client.EmuHawk/MainForm.cs
+++ b/BizHawk.Client.EmuHawk/MainForm.cs
@@ -1829,9 +1829,9 @@ namespace BizHawk.Client.EmuHawk
{
var PluginToUse = String.Empty;
- if (hasmovie && Global.MovieSession.Movie.Header.HeaderParams[MovieHeader.PLATFORM] == "N64" && Global.MovieSession.Movie.Header.HeaderParams.ContainsKey(MovieHeader.VIDEOPLUGIN))
+ if (hasmovie && Global.MovieSession.Movie.Header.Parameters[HeaderKeys.PLATFORM] == "N64" && Global.MovieSession.Movie.Header.Parameters.ContainsKey(HeaderKeys.VIDEOPLUGIN))
{
- PluginToUse = Global.MovieSession.Movie.Header.HeaderParams[MovieHeader.VIDEOPLUGIN];
+ PluginToUse = Global.MovieSession.Movie.Header.Parameters[HeaderKeys.VIDEOPLUGIN];
}
if (PluginToUse == "" || (PluginToUse != "Rice" && PluginToUse != "Glide64"))
@@ -1857,14 +1857,14 @@ namespace BizHawk.Client.EmuHawk
video_settings.Parameters = Global.Config.Glide64mk2Plugin.GetPluginSettings();
}
- if (hasmovie && Global.MovieSession.Movie.Header.HeaderParams[MovieHeader.PLATFORM] == "N64" && Global.MovieSession.Movie.Header.HeaderParams.ContainsKey(MovieHeader.VIDEOPLUGIN))
+ if (hasmovie && Global.MovieSession.Movie.Header.Parameters[HeaderKeys.PLATFORM] == "N64" && Global.MovieSession.Movie.Header.Parameters.ContainsKey(HeaderKeys.VIDEOPLUGIN))
{
var settings = new List(video_settings.Parameters.Keys);
foreach (var setting in settings)
{
- if (Global.MovieSession.Movie.Header.HeaderParams.ContainsKey(setting))
+ if (Global.MovieSession.Movie.Header.Parameters.ContainsKey(setting))
{
- var Value = Global.MovieSession.Movie.Header.HeaderParams[setting];
+ var Value = Global.MovieSession.Movie.Header.Parameters[setting];
if (video_settings.Parameters[setting] is bool)
{
try
diff --git a/BizHawk.Client.EmuHawk/movie/PlayMovie.cs b/BizHawk.Client.EmuHawk/movie/PlayMovie.cs
index 60cf6f54fe..3451a49b81 100644
--- a/BizHawk.Client.EmuHawk/movie/PlayMovie.cs
+++ b/BizHawk.Client.EmuHawk/movie/PlayMovie.cs
@@ -171,19 +171,18 @@ namespace BizHawk.Client.EmuHawk
{
var movie = new Movie(hf.CanonicalFullPath);
movie.PreLoadText(hf);
- if (hf.Extension == ".FM2")
+ try
{
- movie.Header.SetHeaderLine(MovieHeader.PLATFORM, "NES");
+ //Don't do this from browse
+ if (movie.Header.Parameters[HeaderKeys.GAMENAME] == Global.Game.Name ||
+ Global.Config.PlayMovie_MatchGameName == false || force)
+ {
+ _movieList.Add(movie);
+ }
}
- else if (hf.Extension == ".MC2")
+ catch (Exception ex)
{
- movie.Header.SetHeaderLine(MovieHeader.PLATFORM, "PCE");
- }
- //Don't do this from browse
- if (movie.Header.GetHeaderLine(MovieHeader.GAMENAME) == Global.Game.Name ||
- Global.Config.PlayMovie_MatchGameName == false || force)
- {
- _movieList.Add(movie);
+ Console.WriteLine(ex.Message);
}
}
@@ -334,7 +333,7 @@ namespace BizHawk.Client.EmuHawk
int firstIndex = MovieView.SelectedIndices[0];
MovieView.ensureVisible(firstIndex);
- var headers = _movieList[firstIndex].Header.HeaderParams;
+ var headers = _movieList[firstIndex].Header.Parameters;
foreach (var kvp in headers)
{
@@ -343,26 +342,26 @@ namespace BizHawk.Client.EmuHawk
switch (kvp.Key)
{
- case MovieHeader.SHA1:
+ case HeaderKeys.SHA1:
if (kvp.Value != Global.Game.Hash)
{
item.BackColor = Color.Pink;
toolTip1.SetToolTip(DetailsView, "Current SHA1: " + Global.Game.Hash);
}
break;
- case MovieHeader.MOVIEVERSION:
- if (kvp.Value != MovieHeader.MovieVersion)
+ case HeaderKeys.MOVIEVERSION:
+ if (kvp.Value != HeaderKeys.MovieVersion)
{
item.BackColor = Color.Yellow;
}
break;
- case MovieHeader.EMULATIONVERSION:
+ case HeaderKeys.EMULATIONVERSION:
if (kvp.Value != VersionInfo.GetEmuVersion())
{
item.BackColor = Color.Yellow;
}
break;
- case MovieHeader.PLATFORM:
+ case HeaderKeys.PLATFORM:
if (kvp.Value != Global.Game.System)
{
item.BackColor = Color.Pink;
diff --git a/BizHawk.Client.EmuHawk/movie/RecordMovie.cs b/BizHawk.Client.EmuHawk/movie/RecordMovie.cs
index 9b76a4bed5..7924da310a 100644
--- a/BizHawk.Client.EmuHawk/movie/RecordMovie.cs
+++ b/BizHawk.Client.EmuHawk/movie/RecordMovie.cs
@@ -94,73 +94,73 @@ namespace BizHawk.Client.EmuHawk
}
//Header
- _movieToRecord.Header.SetHeaderLine(MovieHeader.AUTHOR, AuthorBox.Text);
- _movieToRecord.Header.SetHeaderLine(MovieHeader.EMULATIONVERSION, VersionInfo.GetEmuVersion());
- _movieToRecord.Header.SetHeaderLine(MovieHeader.MOVIEVERSION, MovieHeader.MovieVersion);
- _movieToRecord.Header.SetHeaderLine(MovieHeader.GUID, MovieHeader.MakeGUID());
- _movieToRecord.Header.SetHeaderLine(MovieHeader.PLATFORM, Global.Game.System);
+ _movieToRecord.Header.Parameters[HeaderKeys.AUTHOR] = AuthorBox.Text;
+ _movieToRecord.Header.Parameters[HeaderKeys.EMULATIONVERSION] = VersionInfo.GetEmuVersion();
+ _movieToRecord.Header.Parameters[HeaderKeys.MOVIEVERSION] = HeaderKeys.MovieVersion;
+ _movieToRecord.Header.Parameters[HeaderKeys.GUID] = HeaderKeys.NewGuid;
+ _movieToRecord.Header.Parameters[HeaderKeys.PLATFORM] = Global.Game.System;
if (Global.Game != null)
{
- _movieToRecord.Header.SetHeaderLine(MovieHeader.GAMENAME, PathManager.FilesystemSafeName(Global.Game));
- _movieToRecord.Header.SetHeaderLine(MovieHeader.SHA1, Global.Game.Hash);
+ _movieToRecord.Header.Parameters[HeaderKeys.GAMENAME] = PathManager.FilesystemSafeName(Global.Game);
+ _movieToRecord.Header.Parameters[HeaderKeys.SHA1] = Global.Game.Hash;
if (Global.Game.FirmwareHash != null)
{
- _movieToRecord.Header.SetHeaderLine(MovieHeader.FIRMWARESHA1, Global.Game.FirmwareHash);
+ _movieToRecord.Header.Parameters[HeaderKeys.FIRMWARESHA1] = Global.Game.FirmwareHash;
}
}
else
{
- _movieToRecord.Header.SetHeaderLine(MovieHeader.GAMENAME, "NULL");
+ _movieToRecord.Header.Parameters[HeaderKeys.GAMENAME] = "NULL";
}
if (Global.Emulator.BoardName != null)
{
- _movieToRecord.Header.SetHeaderLine(MovieHeader.BOARDNAME, Global.Emulator.BoardName);
+ _movieToRecord.Header.Parameters[HeaderKeys.BOARDNAME] = Global.Emulator.BoardName;
}
if (Global.Emulator is Gameboy)
{
- _movieToRecord.Header.SetHeaderLine(MovieHeader.GB_FORCEDMG, Global.Config.GB_ForceDMG.ToString());
- _movieToRecord.Header.SetHeaderLine(MovieHeader.GB_GBA_IN_CGB, Global.Config.GB_GBACGB.ToString());
+ _movieToRecord.Header.Parameters[HeaderKeys.GB_FORCEDMG] = Global.Config.GB_ForceDMG.ToString();
+ _movieToRecord.Header.Parameters[HeaderKeys.GB_GBA_IN_CGB] = Global.Config.GB_GBACGB.ToString();
}
if (Global.Emulator is LibsnesCore)
{
- _movieToRecord.Header.SetHeaderLine(MovieHeader.SGB, ((Global.Emulator) as LibsnesCore).IsSGB.ToString());
+ _movieToRecord.Header.Parameters[HeaderKeys.SGB] = ((Global.Emulator) as LibsnesCore).IsSGB.ToString();
if ((Global.Emulator as LibsnesCore).DisplayType == DisplayType.PAL)
{
- _movieToRecord.Header.SetHeaderLine(MovieHeader.PAL, "1");
+ _movieToRecord.Header.Parameters[HeaderKeys.PAL] = "1";
}
}
else if (Global.Emulator is SMS)
{
if ((Global.Emulator as SMS).DisplayType == DisplayType.PAL)
{
- _movieToRecord.Header.SetHeaderLine(MovieHeader.PAL, "1");
+ _movieToRecord.Header.Parameters[HeaderKeys.PAL] = "1";
}
}
else if (Global.Emulator is NES)
{
if ((Global.Emulator as NES).DisplayType == DisplayType.PAL)
{
- _movieToRecord.Header.SetHeaderLine(MovieHeader.PAL, "1");
+ _movieToRecord.Header.Parameters[HeaderKeys.PAL] = "1";
}
}
else if (Global.Emulator is ColecoVision)
{
- _movieToRecord.Header.SetHeaderLine(MovieHeader.SKIPBIOS, Global.Config.ColecoSkipBiosIntro.ToString());
+ _movieToRecord.Header.Parameters[HeaderKeys.SKIPBIOS] = Global.Config.ColecoSkipBiosIntro.ToString();
}
else if (Global.Emulator is N64)
{
- _movieToRecord.Header.SetHeaderLine(MovieHeader.VIDEOPLUGIN, Global.Config.N64VidPlugin);
+ _movieToRecord.Header.Parameters[HeaderKeys.VIDEOPLUGIN] = Global.Config.N64VidPlugin;
if (Global.Config.N64VidPlugin == "Rice")
{
var rice_settings = Global.Config.RicePlugin.GetPluginSettings();
foreach(var setting in rice_settings)
{
- _movieToRecord.Header.SetHeaderLine(setting.Key, setting.Value.ToString());
+ _movieToRecord.Header.Parameters[setting.Key] = setting.Value.ToString();
}
}
else if (Global.Config.N64VidPlugin == "Glide64")
@@ -168,13 +168,13 @@ namespace BizHawk.Client.EmuHawk
var glide_settings = Global.Config.GlidePlugin.GetPluginSettings();
foreach (var setting in glide_settings)
{
- _movieToRecord.Header.SetHeaderLine(setting.Key, setting.Value.ToString());
+ _movieToRecord.Header.Parameters[setting.Key] = setting.Value.ToString();
}
}
if ((Global.Emulator as N64).DisplayType == DisplayType.PAL)
{
- _movieToRecord.Header.SetHeaderLine(MovieHeader.PAL, "1");
+ _movieToRecord.Header.Parameters[HeaderKeys.PAL] = "1";
}
}