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"; } }