diff --git a/BizHawk.Client.Common/RomLoader.cs b/BizHawk.Client.Common/RomLoader.cs index 94c48a8ac3..5f989de38a 100644 --- a/BizHawk.Client.Common/RomLoader.cs +++ b/BizHawk.Client.Common/RomLoader.cs @@ -445,7 +445,7 @@ namespace BizHawk.Client.Common } else { - ThrowLoadError("A core accepted the rom, but throw an exception while loading it:\n\n" + ex, system); + ThrowLoadError("A core accepted the rom, but threw an exception while loading it:\n\n" + ex, system); } return false; diff --git a/BizHawk.Client.Common/movie/MovieImport.cs b/BizHawk.Client.Common/movie/MovieImport.cs index 267eedd3c1..a92a9951a4 100644 --- a/BizHawk.Client.Common/movie/MovieImport.cs +++ b/BizHawk.Client.Common/movie/MovieImport.cs @@ -79,6 +79,9 @@ namespace BizHawk.Client.Common case ".VMV": m = ImportVMV(path, out errorMsg, out warningMsg); break; + case ".YMV": + m = ImportYMV(path, out errorMsg, out warningMsg); + break; case ".ZMV": m = ImportZMV(path, out errorMsg, out warningMsg); break; @@ -100,7 +103,7 @@ namespace BizHawk.Client.Common { string[] extensions = new[] { - "FCM", "FM2", "FMV", "GMV", "MCM", "MC2", "MMV", "NMV", "LSMV", "SMV", "VBM", "VMV", "ZMV" + "FCM", "FM2", "FMV", "GMV", "MCM", "MC2", "MMV", "NMV", "LSMV", "SMV", "VBM", "VMV", "YMV", "ZMV" }; return extensions.Any(ext => extension.ToUpper() == "." + ext); } @@ -150,6 +153,10 @@ namespace BizHawk.Client.Common controller = "Gameboy Controller"; } break; + case ".YMV": + buttons = new[] { "Left", "Right", "Up", "Down", "Start", "A", "B", "C", "X", "Y", "Z", "L", "R" }; + controller = "Saturn Controller"; + break; } SimpleController controllers = new SimpleController {Type = new ControllerDefinition {Name = controller}}; // Split up the sections of the frame. @@ -282,7 +289,7 @@ namespace BizHawk.Client.Common return m; } - // Import a text-based movie format. This works for .FM2 and .MC2. + // Import a text-based movie format. This works for .FM2, .MC2, and .YMV. private static Movie ImportText(string path, out string errorMsg, out string warningMsg) { errorMsg = warningMsg = String.Empty; @@ -301,6 +308,10 @@ namespace BizHawk.Client.Common emulator = "Mednafen/PCEjin"; platform = "PCE"; break; + case ".YMV": + emulator = "Yabause"; + platform = "Sega Saturn"; + break; } m.Header[HeaderKeys.PLATFORM] = platform; int lineNum = 0; @@ -348,64 +359,73 @@ namespace BizHawk.Client.Common { m.Header[HeaderKeys.GAMENAME] = ParseHeader(line, "romFilename"); } - else if (line.ToLower().StartsWith("romchecksum")) - { - string blob = ParseHeader(line, "romChecksum"); - byte[] md5 = DecodeBlob(blob); - if (md5 != null && md5.Length == 16) - { - m.Header[MD5] = Util.BytesToHexString(md5).ToLower(); - } - else - { - warningMsg = "Bad ROM checksum."; - } - } - else if (line.ToLower().StartsWith("comment author")) - { - m.Header[HeaderKeys.AUTHOR] = ParseHeader(line, "comment author"); - } - else if (line.ToLower().StartsWith("rerecordcount")) - { - int rerecordCount; - // Try to parse the re-record count as an integer, defaulting to 0 if it fails. - try - { - rerecordCount = int.Parse(ParseHeader(line, "rerecordCount")); - } - catch - { - rerecordCount = 0; - } - m.Header.Rerecords = (ulong)rerecordCount; - } - else if (line.ToLower().StartsWith("guid")) - { - continue; //We no longer care to keep this info - } - else if (line.ToLower().StartsWith("startsfromsavestate")) - { - // If this movie starts from a savestate, we can't support it. - if (ParseHeader(line, "StartsFromSavestate") == "1") - { - errorMsg = "Movies that begin with a savestate are not supported."; - sr.Close(); - return null; - } - } - else if (line.ToLower().StartsWith("palflag")) - { - bool pal = (ParseHeader(line, "palFlag") == "1"); - m.Header[HeaderKeys.PAL] = pal.ToString(); - } - else if (line.ToLower().StartsWith("fourscore")) - { - bool fourscore = (ParseHeader(line, "fourscore") == "1"); - m.Header[HeaderKeys.FOURSCORE] = fourscore.ToString(); - } - else - // Everything not explicitly defined is treated as a comment. - m.Header.Comments.Add(line); + else if (line.ToLower().StartsWith("cdgamename")) + { + m.Header[HeaderKeys.GAMENAME] = ParseHeader(line, "cdGameName"); + } + else if (line.ToLower().StartsWith("romchecksum")) + { + string blob = ParseHeader(line, "romChecksum"); + byte[] md5 = DecodeBlob(blob); + if (md5 != null && md5.Length == 16) + { + m.Header[MD5] = Util.BytesToHexString(md5).ToLower(); + } + else + { + warningMsg = "Bad ROM checksum."; + } + } + else if (line.ToLower().StartsWith("comment author")) + { + m.Header[HeaderKeys.AUTHOR] = ParseHeader(line, "comment author"); + } + else if (line.ToLower().StartsWith("rerecordcount")) + { + int rerecordCount; + // Try to parse the re-record count as an integer, defaulting to 0 if it fails. + try + { + rerecordCount = int.Parse(ParseHeader(line, "rerecordCount")); + } + catch + { + rerecordCount = 0; + } + m.Header.Rerecords = (ulong)rerecordCount; + } + else if (line.ToLower().StartsWith("guid")) + { + continue; //We no longer care to keep this info + } + else if (line.ToLower().StartsWith("startsfromsavestate")) + { + // If this movie starts from a savestate, we can't support it. + if (ParseHeader(line, "StartsFromSavestate") == "1") + { + errorMsg = "Movies that begin with a savestate are not supported."; + sr.Close(); + return null; + } + } + else if (line.ToLower().StartsWith("palflag")) + { + bool pal = (ParseHeader(line, "palFlag") == "1"); + m.Header[HeaderKeys.PAL] = pal.ToString(); + } + else if (line.ToLower().StartsWith("ispal")) + { + bool pal = (ParseHeader(line, "isPal") == "1"); + m.Header[HeaderKeys.PAL] = pal.ToString(); + } + else if (line.ToLower().StartsWith("fourscore")) + { + bool fourscore = (ParseHeader(line, "fourscore") == "1"); + m.Header[HeaderKeys.FOURSCORE] = fourscore.ToString(); + } + else + // Everything not explicitly defined is treated as a comment. + m.Header.Comments.Add(line); } sr.Close(); return m; @@ -2431,6 +2451,12 @@ namespace BizHawk.Client.Common return m; } + // YMV file format: https://code.google.com/p/yabause-rr/wiki/YMVfileformat + private static Movie ImportYMV(string path, out string errorMsg, out string warningMsg) + { + return ImportText(path, out errorMsg, out warningMsg); + } + // ZMV file format: http://tasvideos.org/ZMV.html private static Movie ImportZMV(string path, out string errorMsg, out string warningMsg) { diff --git a/BizHawk.Client.EmuHawk/MainForm.Events.cs b/BizHawk.Client.EmuHawk/MainForm.Events.cs index 4bd37f57d8..b22579afaa 100644 --- a/BizHawk.Client.EmuHawk/MainForm.Events.cs +++ b/BizHawk.Client.EmuHawk/MainForm.Events.cs @@ -399,7 +399,7 @@ namespace BizHawk.Client.EmuHawk InitialDirectory = PathManager.GetRomsPath(Global.Emulator.SystemId), Multiselect = true, Filter = FormatFilter( - "Movie Files", "*.fm2;*.mc2;*.mcm;*.mmv;*.gmv;*.vbm;*.lsmv;*.fcm;*.fmv;*.vmv;*.nmv;*.smv;*.zmv;", + "Movie Files", "*.fm2;*.mc2;*.mcm;*.mmv;*.gmv;*.vbm;*.lsmv;*.fcm;*.fmv;*.vmv;*.nmv;*.smv;*.ymv;*.zmv;", "FCEUX", "*.fm2", "PCEjin/Mednafen", "*.mc2;*.mcm", "Dega", "*.mmv", @@ -411,6 +411,7 @@ namespace BizHawk.Client.EmuHawk "VirtuaNES", "*.vmv", "Nintendulator", "*.nmv", "Snes9x", "*.smv", + "Yabause", "*.ymv", "ZSNES", "*.zmv", "All Files", "*.*"), RestoreDirectory = false diff --git a/BizHawk.Client.EmuHawk/PlatformChooser.Designer.cs b/BizHawk.Client.EmuHawk/PlatformChooser.Designer.cs index ce71ca390f..640682866a 100644 --- a/BizHawk.Client.EmuHawk/PlatformChooser.Designer.cs +++ b/BizHawk.Client.EmuHawk/PlatformChooser.Designer.cs @@ -53,7 +53,7 @@ this.textBox1.ReadOnly = true; this.textBox1.Size = new System.Drawing.Size(414, 35); this.textBox1.TabIndex = 2; - this.textBox1.Text = "This Rom was not found in the database. Further more, the extension leaves no cl" + + this.textBox1.Text = "This Rom was not found in the database. Furthermore, the extension leaves no cl" + "ue as to which platform should be chosen."; // // OkBtn