diff --git a/BizHawk.Client.Common/movie/MovieSession.cs b/BizHawk.Client.Common/movie/MovieSession.cs index a77924469e..0415687383 100644 --- a/BizHawk.Client.Common/movie/MovieSession.cs +++ b/BizHawk.Client.Common/movie/MovieSession.cs @@ -3,10 +3,12 @@ using System.IO; using BizHawk.Emulation.Common; using BizHawk.Emulation.Cores.Consoles.Nintendo.QuickNES; +using BizHawk.Emulation.Cores.Nintendo.Gameboy; using BizHawk.Emulation.Cores.Nintendo.NES; using BizHawk.Emulation.Cores.Nintendo.SNES9X; using BizHawk.Emulation.Cores.Nintendo.SNES; using BizHawk.Emulation.Cores.Nintendo.GBA; +using BizHawk.Emulation.Cores.Nintendo.GBHawk; namespace BizHawk.Client.Common { @@ -420,6 +422,7 @@ namespace BizHawk.Client.Common public bool? PreviousNesInQuickNES { get; set; } public bool? PreviousSnesInSnes9x { get; set; } public bool? PreviousGbaUsemGba { get; set; } + public bool? PreviousGbUseGbHawk { get; set; } /// is and . does not match . public void QueueNewMovie(IMovie movie, bool record, IEmulator emulator) @@ -488,6 +491,22 @@ namespace BizHawk.Client.Common Global.Config.GbaUsemGba = false; } } + else if (!record && (emulator.SystemId == "GB" || emulator.SystemId == "GBC")) + { + var gbHawkName = ((CoreAttribute)Attribute.GetCustomAttribute(typeof(GBHawk), typeof(CoreAttribute))).CoreName; + var gambatteName = ((CoreAttribute)Attribute.GetCustomAttribute(typeof(Gameboy), typeof(CoreAttribute))).CoreName; + + if (movie.Core == gbHawkName) + { + PreviousGbUseGbHawk = Global.Config.GbUseGbHawk; + Global.Config.GbUseGbHawk = true; + } + else if (movie.Core == gambatteName) + { + PreviousGbUseGbHawk = Global.Config.GbUseGbHawk; + Global.Config.GbUseGbHawk = false; + } + } if (record) // This is a hack really, we need to set the movie to its proper state so that it will be considered active later { diff --git a/BizHawk.Client.Common/movie/interfaces/IMovieSession.cs b/BizHawk.Client.Common/movie/interfaces/IMovieSession.cs index 5f1f2f07ff..a0e63ed756 100644 --- a/BizHawk.Client.Common/movie/interfaces/IMovieSession.cs +++ b/BizHawk.Client.Common/movie/interfaces/IMovieSession.cs @@ -17,9 +17,11 @@ namespace BizHawk.Client.Common bool ReadOnly { get; set; } bool MovieIsQueued { get; } + // TODO: this isn't sustainable bool? PreviousNesInQuickNES { get; set; } bool? PreviousSnesInSnes9x { get; set; } bool? PreviousGbaUsemGba { get; set; } + bool? PreviousGbUseGbHawk { get; set; } void HandleMovieOnFrameLoop(); void HandleMovieAfterFrameLoop(); diff --git a/BizHawk.Client.EmuHawk/MainForm.Movie.cs b/BizHawk.Client.EmuHawk/MainForm.Movie.cs index 34437dab5b..c7a6684f33 100644 --- a/BizHawk.Client.EmuHawk/MainForm.Movie.cs +++ b/BizHawk.Client.EmuHawk/MainForm.Movie.cs @@ -50,6 +50,12 @@ namespace BizHawk.Client.EmuHawk MovieSession.PreviousGbaUsemGba = null; } + if (MovieSession.PreviousGbUseGbHawk.HasValue) + { + Config.GbUseGbHawk = MovieSession.PreviousGbUseGbHawk.Value; + MovieSession.PreviousGbUseGbHawk = null; + } + Config.RecentMovies.Add(movie.Filename); if (Emulator.HasSavestates() && movie.StartsFromSavestate)