From 74d20ca45cd7d4c19c979e68e60d019b28637fb9 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Sat, 12 Jan 2019 13:27:00 -0600 Subject: [PATCH] SubNEShawk: Add VBL Count to BK2 movie header --- BizHawk.Client.Common/movie/bk2/Bk2Movie.IO.cs | 6 ++++++ .../movie/conversions/MovieConversionExtensions.cs | 6 ++++++ .../Consoles/Nintendo/SubNESHawk/SubNESHawk.IEmulator.cs | 1 + .../Consoles/Nintendo/SubNESHawk/SubNESHawk.IStatable.cs | 1 + .../Consoles/Nintendo/SubNESHawk/SubNESHawk.cs | 5 +++++ 5 files changed, 19 insertions(+) diff --git a/BizHawk.Client.Common/movie/bk2/Bk2Movie.IO.cs b/BizHawk.Client.Common/movie/bk2/Bk2Movie.IO.cs index f56331b533..c7d63a4c8d 100644 --- a/BizHawk.Client.Common/movie/bk2/Bk2Movie.IO.cs +++ b/BizHawk.Client.Common/movie/bk2/Bk2Movie.IO.cs @@ -166,6 +166,12 @@ namespace BizHawk.Client.Common protected virtual void Write(string fn, bool backup = false) { + if (Global.Emulator is BizHawk.Emulation.Cores.Nintendo.SubNESHawk.SubNESHawk) + { + var _subnes = (BizHawk.Emulation.Cores.Nintendo.SubNESHawk.SubNESHawk)Global.Emulator; + Header["VBlankCount"] = _subnes.VBL_CNT.ToString(); + } + var file = new FileInfo(fn); if (!file.Directory.Exists) { diff --git a/BizHawk.Client.Common/movie/conversions/MovieConversionExtensions.cs b/BizHawk.Client.Common/movie/conversions/MovieConversionExtensions.cs index dd5c1e36c4..0cd32aa7ef 100644 --- a/BizHawk.Client.Common/movie/conversions/MovieConversionExtensions.cs +++ b/BizHawk.Client.Common/movie/conversions/MovieConversionExtensions.cs @@ -4,6 +4,7 @@ using System.Linq; using BizHawk.Emulation.Common; using BizHawk.Emulation.Cores.Nintendo.Gameboy; +using BizHawk.Emulation.Cores.Nintendo.SubNESHawk; using BizHawk.Emulation.Cores.Sega.MasterSystem; using BizHawk.Emulation.Common.IEmulatorExtensions; using BizHawk.Emulation.Cores.Consoles.Sega.gpgx; @@ -336,6 +337,11 @@ namespace BizHawk.Client.Common.MovieConversionExtensions movie.HeaderEntries.Add("Is32X", "1"); } + if (Global.Emulator is SubNESHawk) + { + movie.HeaderEntries.Add("VBlankCount", "0"); + } + movie.Core = ((CoreAttribute)Attribute .GetCustomAttribute(Global.Emulator.GetType(), typeof(CoreAttribute))) .CoreName; diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IEmulator.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IEmulator.cs index 5e31027258..106ebbd9b6 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IEmulator.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IEmulator.cs @@ -54,6 +54,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk if (_islag) { _lagcount++; + VBL_CNT++; } return ret; diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IStatable.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IStatable.cs index 0f6a4b3e54..201b6d584e 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IStatable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IStatable.cs @@ -54,6 +54,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk ser.Sync("IsLag", ref _islag); ser.Sync("pass_a_frame", ref pass_a_frame); ser.Sync("pass_new_input", ref pass_new_input); + ser.Sync("VBL_CNT", ref VBL_CNT); } } } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs index 90b3904778..05c61c4680 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs @@ -17,6 +17,9 @@ namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk { public NES.NES subnes; + // needed for movies to accurately calculate timing + public int VBL_CNT; + [CoreConstructor("NES")] public SubNESHawk(CoreComm comm, GameInfo game, byte[] rom, /*string gameDbFn,*/ object settings, object syncSettings) { @@ -41,6 +44,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk SetupMemoryDomains(); HardReset(); + + VBL_CNT = 0; } public void HardReset()