diff --git a/src/BizHawk.Client.EmuHawk/MainForm.Events.cs b/src/BizHawk.Client.EmuHawk/MainForm.Events.cs index 341968570e..e50269d147 100644 --- a/src/BizHawk.Client.EmuHawk/MainForm.Events.cs +++ b/src/BizHawk.Client.EmuHawk/MainForm.Events.cs @@ -414,9 +414,17 @@ namespace BizHawk.Client.EmuHawk form.ShowDialog(); } + private string CanProvideFirmware(FirmwareID id, string hash) + => FirmwareManager.Resolve( + Config.PathEntries, + Config.FirmwareUserSpecifications, + FirmwareDatabase.FirmwareRecords.First(fr => fr.ID == id), +// exactFile: hash, //TODO re-scan FW dir for this file, then try autopatching + forbidScan: true)?.Hash; + private void PlayMovieMenuItem_Click(object sender, EventArgs e) { - using var form = new PlayMovie(this, Config, Game, Emulator, MovieSession); + using var form = new PlayMovie(this, Config, Game, Emulator, MovieSession, CanProvideFirmware); form.ShowDialog(); } diff --git a/src/BizHawk.Client.EmuHawk/movie/PlayMovie.cs b/src/BizHawk.Client.EmuHawk/movie/PlayMovie.cs index 4f0b803f56..6c694be948 100644 --- a/src/BizHawk.Client.EmuHawk/movie/PlayMovie.cs +++ b/src/BizHawk.Client.EmuHawk/movie/PlayMovie.cs @@ -16,6 +16,8 @@ namespace BizHawk.Client.EmuHawk { public partial class PlayMovie : Form, IDialogParent { + private readonly Func _canProvideFirmware; + private readonly IMainFormForTools _mainForm; private readonly Config _config; private readonly GameInfo _game; @@ -36,9 +38,11 @@ namespace BizHawk.Client.EmuHawk Config config, GameInfo game, IEmulator emulator, - IMovieSession movieSession) + IMovieSession movieSession, + Func canProvideFirmware) { _mainForm = mainForm; + _canProvideFirmware = canProvideFirmware; _config = config; _game = game; _emulator = emulator; @@ -412,6 +416,18 @@ namespace BizHawk.Client.EmuHawk item.ToolTipText = $"Expected: {v}\n Actual: {_emulator.SystemId}"; } break; + default: + if (k.Contains("_Firmware_")) + { + var split = k.Split(new[] { "_Firmware_" }, StringSplitOptions.None); + var actualHash = _canProvideFirmware(new(split[0], split[1]), v); + if (actualHash != v) + { + item.BackColor = Color.Yellow; + item.ToolTipText = $"Expected: {v}\nActual: {actualHash}"; + } + } + break; } DetailsView.Items.Add(item);