2011-07-22 01:14:13 +00:00
|
|
|
|
using System;
|
|
|
|
|
using System.IO;
|
|
|
|
|
using System.Windows.Forms;
|
|
|
|
|
|
2013-10-25 00:57:23 +00:00
|
|
|
|
using BizHawk.Client.Common;
|
|
|
|
|
|
2013-11-03 03:54:37 +00:00
|
|
|
|
namespace BizHawk.Client.EmuHawk
|
2011-07-22 01:14:13 +00:00
|
|
|
|
{
|
|
|
|
|
partial class MainForm
|
|
|
|
|
{
|
|
|
|
|
public void StartNewMovie(Movie m, bool record)
|
|
|
|
|
{
|
2012-09-22 20:04:37 +00:00
|
|
|
|
//If a movie is already loaded, save it before starting a new movie
|
2013-10-24 22:26:28 +00:00
|
|
|
|
if (Global.MovieSession.Movie.IsActive)
|
2012-09-22 20:04:37 +00:00
|
|
|
|
{
|
2013-10-24 22:26:28 +00:00
|
|
|
|
Global.MovieSession.Movie.WriteMovie();
|
2012-09-22 20:04:37 +00:00
|
|
|
|
}
|
2012-10-13 21:30:19 +00:00
|
|
|
|
|
2013-11-01 18:52:26 +00:00
|
|
|
|
Global.MovieSession = new MovieSession
|
|
|
|
|
{
|
|
|
|
|
Movie = m,
|
|
|
|
|
MessageCallback = GlobalWinF.OSD.AddMessage,
|
|
|
|
|
AskYesNoCallback = StateErrorAskUser
|
|
|
|
|
};
|
|
|
|
|
|
2011-07-24 23:14:16 +00:00
|
|
|
|
RewireInputChain();
|
2011-07-22 01:14:13 +00:00
|
|
|
|
|
2011-09-04 19:04:00 +00:00
|
|
|
|
if (!record)
|
2012-09-03 19:42:53 +00:00
|
|
|
|
{
|
2013-10-24 22:26:28 +00:00
|
|
|
|
Global.MovieSession.Movie.LoadMovie();
|
2012-11-22 03:47:18 +00:00
|
|
|
|
SetSyncDependentSettings();
|
2012-09-03 19:42:53 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-10-25 00:57:23 +00:00
|
|
|
|
LoadRom(GlobalWinF.MainForm.CurrentlyOpenRom, true, !record);
|
2012-11-22 03:47:18 +00:00
|
|
|
|
|
2011-07-22 01:14:13 +00:00
|
|
|
|
Global.Config.RecentMovies.Add(m.Filename);
|
2013-10-24 22:26:28 +00:00
|
|
|
|
if (Global.MovieSession.Movie.StartsFromSavestate)
|
2011-07-30 20:49:36 +00:00
|
|
|
|
{
|
2013-10-24 22:26:28 +00:00
|
|
|
|
LoadStateFile(Global.MovieSession.Movie.Filename, Path.GetFileName(Global.MovieSession.Movie.Filename));
|
2013-10-20 18:02:43 +00:00
|
|
|
|
Global.Emulator.ResetFrameCounter();
|
2011-07-30 20:49:36 +00:00
|
|
|
|
}
|
2011-07-22 01:14:13 +00:00
|
|
|
|
if (record)
|
|
|
|
|
{
|
2013-11-03 02:51:21 +00:00
|
|
|
|
Global.Emulator.ClearSaveRam();
|
2013-10-24 22:26:28 +00:00
|
|
|
|
Global.MovieSession.Movie.StartRecording();
|
2013-11-01 15:35:30 +00:00
|
|
|
|
Global.ReadOnly = false;
|
2011-07-22 01:14:13 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2013-11-03 02:51:21 +00:00
|
|
|
|
Global.Emulator.ClearSaveRam();
|
2013-10-24 22:26:28 +00:00
|
|
|
|
Global.MovieSession.Movie.StartPlayback();
|
2011-07-22 01:14:13 +00:00
|
|
|
|
}
|
|
|
|
|
SetMainformMovieInfo();
|
2013-11-03 00:16:46 +00:00
|
|
|
|
GlobalWinF.Tools.Restart<TAStudio>();
|
2013-11-02 21:31:04 +00:00
|
|
|
|
GlobalWinF.Tools.Restart<VirtualPadForm>();
|
2013-10-25 00:57:23 +00:00
|
|
|
|
GlobalWinF.DisplayManager.NeedsToPaint = true;
|
2011-07-22 01:14:13 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void SetMainformMovieInfo()
|
|
|
|
|
{
|
2013-10-24 22:26:28 +00:00
|
|
|
|
if (Global.MovieSession.Movie.IsPlaying)
|
2011-07-22 01:14:13 +00:00
|
|
|
|
{
|
2013-10-24 22:26:28 +00:00
|
|
|
|
Text = DisplayNameForSystem(Global.Game.System) + " - " + Global.Game.Name + " - " + Path.GetFileName(Global.MovieSession.Movie.Filename);
|
2013-10-27 15:53:37 +00:00
|
|
|
|
PlayRecordStatusButton.Image = Properties.Resources.Play;
|
|
|
|
|
PlayRecordStatusButton.ToolTipText = "Movie is in playback mode";
|
|
|
|
|
PlayRecordStatusButton.Visible = true;
|
2011-07-22 01:14:13 +00:00
|
|
|
|
}
|
2013-10-24 22:26:28 +00:00
|
|
|
|
else if (Global.MovieSession.Movie.IsRecording)
|
2011-07-22 01:14:13 +00:00
|
|
|
|
{
|
2013-10-24 22:26:28 +00:00
|
|
|
|
Text = DisplayNameForSystem(Global.Game.System) + " - " + Global.Game.Name + " - " + Path.GetFileName(Global.MovieSession.Movie.Filename);
|
2013-10-27 15:53:37 +00:00
|
|
|
|
PlayRecordStatusButton.Image = Properties.Resources.RecordHS;
|
|
|
|
|
PlayRecordStatusButton.ToolTipText = "Movie is in record mode";
|
|
|
|
|
PlayRecordStatusButton.Visible = true;
|
2011-07-22 01:14:13 +00:00
|
|
|
|
}
|
2013-10-24 22:26:28 +00:00
|
|
|
|
else if (!Global.MovieSession.Movie.IsActive)
|
2011-07-22 01:14:13 +00:00
|
|
|
|
{
|
|
|
|
|
Text = DisplayNameForSystem(Global.Game.System) + " - " + Global.Game.Name;
|
2013-10-27 15:53:37 +00:00
|
|
|
|
PlayRecordStatusButton.Image = Properties.Resources.Blank;
|
|
|
|
|
PlayRecordStatusButton.ToolTipText = "No movie is active";
|
|
|
|
|
PlayRecordStatusButton.Visible = false;
|
2011-07-22 01:14:13 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2013-11-01 18:52:26 +00:00
|
|
|
|
public void LoadPlayMovieDialog()
|
2011-07-22 01:14:13 +00:00
|
|
|
|
{
|
2013-08-24 20:11:41 +00:00
|
|
|
|
new PlayMovie().ShowDialog();
|
2011-07-22 01:14:13 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-11-01 18:52:26 +00:00
|
|
|
|
public void LoadRecordMovieDialog()
|
2011-07-22 01:14:13 +00:00
|
|
|
|
{
|
2012-11-24 22:14:05 +00:00
|
|
|
|
// put any BEETA quality cores here
|
2013-10-20 18:02:43 +00:00
|
|
|
|
if (Global.Emulator is Emulation.Consoles.Nintendo.GBA.GBA ||
|
|
|
|
|
Global.Emulator is Emulation.Consoles.Sega.Genesis ||
|
|
|
|
|
Global.Emulator is Emulation.Consoles.Sega.Saturn.Yabause ||
|
2013-11-01 18:52:26 +00:00
|
|
|
|
Global.Emulator is Emulation.Consoles.Sony.PSP.PSP)
|
2012-11-24 22:14:05 +00:00
|
|
|
|
{
|
|
|
|
|
var result = MessageBox.Show
|
|
|
|
|
(this, "Thanks for using Bizhawk! The emulation core you have selected " +
|
|
|
|
|
"is currently BETA-status. We appreciate your help in testing Bizhawk. " +
|
|
|
|
|
"You can record a movie on this core if you'd like to, but expect to " +
|
|
|
|
|
"encounter bugs and sync problems. Continue?", "BizHawk", MessageBoxButtons.YesNo);
|
2013-11-01 18:52:26 +00:00
|
|
|
|
if (result != DialogResult.Yes) return;
|
2012-11-24 22:14:05 +00:00
|
|
|
|
}
|
2013-08-24 20:11:41 +00:00
|
|
|
|
new RecordMovie().ShowDialog();
|
2011-07-22 01:14:13 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-11-01 18:52:26 +00:00
|
|
|
|
public void RestartMovie()
|
2011-07-22 01:14:13 +00:00
|
|
|
|
{
|
2013-10-24 22:26:28 +00:00
|
|
|
|
if (Global.MovieSession.Movie.IsActive)
|
2011-07-22 01:14:13 +00:00
|
|
|
|
{
|
2013-06-08 20:13:11 +00:00
|
|
|
|
LoadRom(CurrentlyOpenRom, true, true);
|
2013-10-24 22:26:28 +00:00
|
|
|
|
if (Global.MovieSession.Movie.StartsFromSavestate)
|
2011-09-04 19:06:18 +00:00
|
|
|
|
{
|
2013-10-24 22:26:28 +00:00
|
|
|
|
LoadStateFile(Global.MovieSession.Movie.Filename, Path.GetFileName(Global.MovieSession.Movie.Filename));
|
2013-10-20 18:02:43 +00:00
|
|
|
|
Global.Emulator.ResetFrameCounter();
|
2011-09-04 19:06:18 +00:00
|
|
|
|
}
|
2013-11-03 02:51:21 +00:00
|
|
|
|
Global.Emulator.ClearSaveRam();
|
2013-10-24 22:26:28 +00:00
|
|
|
|
Global.MovieSession.Movie.StartPlayback();
|
2011-07-22 01:14:13 +00:00
|
|
|
|
SetMainformMovieInfo();
|
2013-10-25 00:57:23 +00:00
|
|
|
|
GlobalWinF.OSD.AddMessage("Replaying movie file in read-only mode");
|
2013-11-01 15:35:30 +00:00
|
|
|
|
Global.ReadOnly = true;
|
2011-07-22 01:14:13 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2011-07-22 01:34:21 +00:00
|
|
|
|
|
2013-03-10 23:03:52 +00:00
|
|
|
|
public void StopMovie(bool abortchanges = false)
|
2011-07-22 01:34:21 +00:00
|
|
|
|
{
|
2013-11-01 18:52:26 +00:00
|
|
|
|
Global.MovieSession.StopMovie();
|
|
|
|
|
SetMainformMovieInfo();
|
2013-10-25 00:57:23 +00:00
|
|
|
|
}
|
|
|
|
|
|
2012-11-22 03:47:18 +00:00
|
|
|
|
//On movie load, these need to be set based on the contents of the movie file
|
|
|
|
|
private void SetSyncDependentSettings()
|
|
|
|
|
{
|
2013-10-20 18:02:43 +00:00
|
|
|
|
switch (Global.Emulator.SystemId)
|
2012-11-22 03:47:18 +00:00
|
|
|
|
{
|
|
|
|
|
case "Coleco":
|
2013-10-24 22:26:28 +00:00
|
|
|
|
string str = Global.MovieSession.Movie.Header.GetHeaderLine(MovieHeader.SKIPBIOS);
|
2012-11-22 03:47:18 +00:00
|
|
|
|
if (!String.IsNullOrWhiteSpace(str))
|
|
|
|
|
{
|
|
|
|
|
if (str.ToLower() == "true")
|
|
|
|
|
{
|
|
|
|
|
Global.Config.ColecoSkipBiosIntro = true;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Global.Config.ColecoSkipBiosIntro = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
2011-07-22 01:14:13 +00:00
|
|
|
|
}
|
|
|
|
|
}
|