2011-02-11 02:30:45 +00:00
|
|
|
|
using System;
|
|
|
|
|
using System.Windows.Forms;
|
2011-05-16 00:56:16 +00:00
|
|
|
|
using System.IO;
|
2012-09-16 15:38:33 +00:00
|
|
|
|
using BizHawk.Emulation.Consoles.GB;
|
2012-10-05 18:20:27 +00:00
|
|
|
|
using BizHawk.Emulation.Consoles.Nintendo.SNES;
|
2012-10-06 17:22:32 +00:00
|
|
|
|
using BizHawk.Emulation.Consoles.Sega;
|
|
|
|
|
using BizHawk.Emulation.Consoles.Nintendo;
|
2012-11-22 02:01:15 +00:00
|
|
|
|
using BizHawk.Emulation.Consoles.Coleco;
|
2013-05-23 01:11:30 +00:00
|
|
|
|
using BizHawk.Emulation.Consoles.Nintendo.N64;
|
2012-09-16 15:38:33 +00:00
|
|
|
|
|
2011-02-11 02:30:45 +00:00
|
|
|
|
namespace BizHawk.MultiClient
|
|
|
|
|
{
|
2011-06-19 14:28:13 +00:00
|
|
|
|
public partial class RecordMovie : Form
|
|
|
|
|
{
|
2012-08-28 02:29:48 +00:00
|
|
|
|
//TODO
|
2011-06-19 14:28:13 +00:00
|
|
|
|
//Allow relative paths in record textbox
|
2011-05-16 17:07:09 +00:00
|
|
|
|
|
2011-06-19 14:28:13 +00:00
|
|
|
|
Movie MovieToRecord;
|
2011-05-18 01:49:20 +00:00
|
|
|
|
|
2011-06-19 14:28:13 +00:00
|
|
|
|
public RecordMovie()
|
|
|
|
|
{
|
|
|
|
|
InitializeComponent();
|
|
|
|
|
}
|
2011-05-16 00:56:16 +00:00
|
|
|
|
|
2011-06-19 14:28:13 +00:00
|
|
|
|
private string MakePath()
|
|
|
|
|
{
|
|
|
|
|
if (RecordBox.Text.Length == 0)
|
|
|
|
|
return "";
|
|
|
|
|
string path = RecordBox.Text;
|
|
|
|
|
if (path.LastIndexOf('\\') == -1)
|
|
|
|
|
{
|
|
|
|
|
if (path[0] != '\\')
|
|
|
|
|
path = path.Insert(0, "\\");
|
2012-12-30 17:52:40 +00:00
|
|
|
|
path = PathManager.MakeAbsolutePath(Global.Config.MoviesPath) + path;
|
2011-05-16 00:56:16 +00:00
|
|
|
|
|
2012-03-31 00:38:39 +00:00
|
|
|
|
if (path[path.Length - 4] != '.') //If no file extension, add movie extension
|
|
|
|
|
path += "." + Global.Config.MovieExtension;
|
2011-06-19 14:28:13 +00:00
|
|
|
|
return path;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
return path;
|
|
|
|
|
}
|
2011-05-18 01:49:20 +00:00
|
|
|
|
|
2011-06-19 14:28:13 +00:00
|
|
|
|
private void OK_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
string path = MakePath();
|
2011-05-16 00:56:16 +00:00
|
|
|
|
|
2011-06-19 14:28:13 +00:00
|
|
|
|
if (path.Length > 0)
|
|
|
|
|
{
|
2012-03-30 00:32:45 +00:00
|
|
|
|
FileInfo test = new FileInfo(path);
|
|
|
|
|
if (test.Exists)
|
|
|
|
|
{
|
|
|
|
|
var result = MessageBox.Show(path + " already exists, overwrite?", "Confirm overwrite", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning);
|
2013-04-15 02:14:14 +00:00
|
|
|
|
if (result == DialogResult.Cancel)
|
2012-03-30 00:32:45 +00:00
|
|
|
|
return;
|
|
|
|
|
}
|
2012-10-05 21:04:46 +00:00
|
|
|
|
|
|
|
|
|
|
2012-09-03 19:42:53 +00:00
|
|
|
|
MovieToRecord = new Movie(path);
|
2011-05-16 00:56:16 +00:00
|
|
|
|
|
2011-06-19 14:28:13 +00:00
|
|
|
|
//Header
|
2011-07-17 17:52:39 +00:00
|
|
|
|
MovieToRecord.Header.SetHeaderLine(MovieHeader.AUTHOR, AuthorBox.Text);
|
2013-03-25 00:20:07 +00:00
|
|
|
|
MovieToRecord.Header.SetHeaderLine(MovieHeader.EMULATIONVERSION, Global.MainForm.GetEmuVersion());
|
2011-07-17 17:52:39 +00:00
|
|
|
|
MovieToRecord.Header.SetHeaderLine(MovieHeader.MOVIEVERSION, MovieHeader.MovieVersion);
|
|
|
|
|
MovieToRecord.Header.SetHeaderLine(MovieHeader.GUID, MovieHeader.MakeGUID());
|
2012-04-29 14:18:10 +00:00
|
|
|
|
MovieToRecord.Header.SetHeaderLine(MovieHeader.PLATFORM, Global.Game.System);
|
2011-06-19 14:28:13 +00:00
|
|
|
|
if (Global.Game != null)
|
2012-04-15 03:02:07 +00:00
|
|
|
|
{
|
2011-08-04 03:20:54 +00:00
|
|
|
|
MovieToRecord.Header.SetHeaderLine(MovieHeader.GAMENAME, PathManager.FilesystemSafeName(Global.Game));
|
2012-04-15 03:02:07 +00:00
|
|
|
|
MovieToRecord.Header.SetHeaderLine(MovieHeader.SHA1, Global.Game.Hash);
|
2012-10-05 21:04:46 +00:00
|
|
|
|
if (Global.Game.FirmwareHash != null)
|
|
|
|
|
MovieToRecord.Header.SetHeaderLine(MovieHeader.FIRMWARESHA1, Global.Game.FirmwareHash);
|
2012-04-15 03:02:07 +00:00
|
|
|
|
}
|
2011-06-19 14:28:13 +00:00
|
|
|
|
else
|
2012-09-16 15:38:33 +00:00
|
|
|
|
{
|
2011-07-17 17:52:39 +00:00
|
|
|
|
MovieToRecord.Header.SetHeaderLine(MovieHeader.GAMENAME, "NULL");
|
2012-09-16 15:38:33 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (Global.Emulator is Gameboy)
|
|
|
|
|
{
|
|
|
|
|
MovieToRecord.Header.SetHeaderLine(MovieHeader.GB_FORCEDMG, Global.Config.GB_ForceDMG.ToString());
|
|
|
|
|
MovieToRecord.Header.SetHeaderLine(MovieHeader.GB_GBA_IN_CGB, Global.Config.GB_GBACGB.ToString());
|
|
|
|
|
}
|
2011-05-16 00:56:16 +00:00
|
|
|
|
|
2012-10-05 18:20:27 +00:00
|
|
|
|
if (Global.Emulator is LibsnesCore)
|
|
|
|
|
{
|
2012-10-05 18:37:20 +00:00
|
|
|
|
MovieToRecord.Header.SetHeaderLine(MovieHeader.SGB, ((Global.Emulator) as LibsnesCore).IsSGB.ToString());
|
2012-10-06 17:22:32 +00:00
|
|
|
|
if ((Global.Emulator as LibsnesCore).DisplayType == DisplayType.PAL)
|
|
|
|
|
{
|
|
|
|
|
MovieToRecord.Header.SetHeaderLine(MovieHeader.PAL, "1");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (Global.Emulator is SMS)
|
|
|
|
|
{
|
|
|
|
|
if ((Global.Emulator as SMS).DisplayType == DisplayType.PAL)
|
|
|
|
|
{
|
|
|
|
|
MovieToRecord.Header.SetHeaderLine(MovieHeader.PAL, "1");
|
|
|
|
|
}
|
2012-10-05 18:20:27 +00:00
|
|
|
|
}
|
2012-10-06 17:22:32 +00:00
|
|
|
|
else if (Global.Emulator is NES)
|
|
|
|
|
{
|
|
|
|
|
if ((Global.Emulator as NES).DisplayType == DisplayType.PAL)
|
|
|
|
|
{
|
|
|
|
|
MovieToRecord.Header.SetHeaderLine(MovieHeader.PAL, "1");
|
|
|
|
|
}
|
|
|
|
|
}
|
2012-11-22 02:01:15 +00:00
|
|
|
|
else if (Global.Emulator is ColecoVision)
|
|
|
|
|
{
|
|
|
|
|
MovieToRecord.Header.SetHeaderLine(MovieHeader.SKIPBIOS, Global.Config.ColecoSkipBiosIntro.ToString());
|
|
|
|
|
}
|
2012-10-05 18:20:27 +00:00
|
|
|
|
|
2013-05-23 01:11:30 +00:00
|
|
|
|
else if (Global.Emulator is N64)
|
|
|
|
|
{
|
|
|
|
|
MovieToRecord.Header.SetHeaderLine(MovieHeader.VIDEOPLUGIN, Global.Config.N64VidPlugin);
|
|
|
|
|
|
|
|
|
|
if (Global.Config.N64VidPlugin == "Rice")
|
|
|
|
|
{
|
|
|
|
|
var rice_settings = Global.Config.RicePlugin.GetPluginSettings();
|
|
|
|
|
foreach(var setting in rice_settings)
|
|
|
|
|
{
|
|
|
|
|
MovieToRecord.Header.SetHeaderLine(setting.Key, setting.Value.ToString());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2011-07-30 20:49:36 +00:00
|
|
|
|
if (StartFromCombo.SelectedItem.ToString() == "Now")
|
|
|
|
|
{
|
2012-09-03 19:42:53 +00:00
|
|
|
|
MovieToRecord.StartsFromSavestate = true;
|
2012-10-20 13:30:32 +00:00
|
|
|
|
var temppath = path;
|
2011-07-30 20:49:36 +00:00
|
|
|
|
var writer = new StreamWriter(temppath);
|
|
|
|
|
Global.Emulator.SaveStateText(writer);
|
|
|
|
|
writer.Close();
|
2012-06-25 00:06:07 +00:00
|
|
|
|
|
2011-07-30 20:49:36 +00:00
|
|
|
|
var file = new FileInfo(temppath);
|
|
|
|
|
using (StreamReader sr = file.OpenText())
|
|
|
|
|
{
|
2013-04-15 02:14:14 +00:00
|
|
|
|
string str;
|
2011-07-30 20:49:36 +00:00
|
|
|
|
|
|
|
|
|
while ((str = sr.ReadLine()) != null)
|
|
|
|
|
{
|
|
|
|
|
if (str == "")
|
|
|
|
|
{
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
MovieToRecord.Header.Comments.Add(str);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2011-06-19 14:28:13 +00:00
|
|
|
|
Global.MainForm.StartNewMovie(MovieToRecord, true);
|
2011-06-30 01:37:54 +00:00
|
|
|
|
|
|
|
|
|
Global.Config.UseDefaultAuthor = DefaultAuthorCheckBox.Checked;
|
|
|
|
|
if (DefaultAuthorCheckBox.Checked)
|
2012-10-20 13:30:32 +00:00
|
|
|
|
{
|
2011-06-30 01:37:54 +00:00
|
|
|
|
Global.Config.DefaultAuthor = AuthorBox.Text;
|
2012-10-20 13:30:32 +00:00
|
|
|
|
}
|
2013-04-15 02:14:14 +00:00
|
|
|
|
Close();
|
2011-06-19 14:28:13 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
2012-10-20 13:30:32 +00:00
|
|
|
|
{
|
2011-06-19 14:28:13 +00:00
|
|
|
|
MessageBox.Show("Please select a movie to record", "File selection error", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
2012-10-20 13:30:32 +00:00
|
|
|
|
}
|
2012-10-05 21:04:46 +00:00
|
|
|
|
|
2011-06-19 14:28:13 +00:00
|
|
|
|
}
|
2011-05-16 00:56:16 +00:00
|
|
|
|
|
2011-06-19 14:28:13 +00:00
|
|
|
|
private void Cancel_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
2013-04-15 02:14:14 +00:00
|
|
|
|
Close();
|
2011-06-19 14:28:13 +00:00
|
|
|
|
}
|
2011-05-22 02:12:36 +00:00
|
|
|
|
|
2011-06-19 14:28:13 +00:00
|
|
|
|
private void button1_Click(object sender, EventArgs e)
|
|
|
|
|
{
|
2012-06-25 00:06:07 +00:00
|
|
|
|
string filename = "";
|
2013-04-15 02:14:14 +00:00
|
|
|
|
SaveFileDialog sfd = new SaveFileDialog
|
|
|
|
|
{
|
|
|
|
|
InitialDirectory = PathManager.MakeAbsolutePath(Global.Config.MoviesPath),
|
|
|
|
|
DefaultExt = "." + Global.Config.MovieExtension,
|
|
|
|
|
FileName = RecordBox.Text,
|
|
|
|
|
OverwritePrompt = false
|
|
|
|
|
};
|
2012-11-17 22:16:23 +00:00
|
|
|
|
string filter = "Movie Files (*." + Global.Config.MovieExtension + ")|*." + Global.Config.MovieExtension + "|Savestates|*.state|All Files|*.*";
|
|
|
|
|
sfd.Filter = filter;
|
2012-06-25 00:06:07 +00:00
|
|
|
|
|
|
|
|
|
Global.Sound.StopSound();
|
|
|
|
|
var result = sfd.ShowDialog();
|
|
|
|
|
Global.Sound.StartSound();
|
|
|
|
|
if (result == DialogResult.OK)
|
|
|
|
|
{
|
|
|
|
|
filename = sfd.FileName;
|
|
|
|
|
}
|
2012-05-28 00:44:27 +00:00
|
|
|
|
|
2012-06-25 00:06:07 +00:00
|
|
|
|
if ("" != filename)
|
2011-06-19 14:28:13 +00:00
|
|
|
|
{
|
2012-06-25 00:06:07 +00:00
|
|
|
|
RecordBox.Text = filename;
|
2011-06-19 14:28:13 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void RecordMovie_Load(object sender, EventArgs e)
|
|
|
|
|
{
|
2012-11-22 03:55:51 +00:00
|
|
|
|
string name = PathManager.FilesystemSafeName(Global.Game);
|
|
|
|
|
name = Path.GetFileNameWithoutExtension(name);
|
|
|
|
|
RecordBox.Text = name;
|
2011-06-19 14:28:13 +00:00
|
|
|
|
StartFromCombo.SelectedIndex = 0;
|
2011-06-30 01:37:54 +00:00
|
|
|
|
DefaultAuthorCheckBox.Checked = Global.Config.UseDefaultAuthor;
|
|
|
|
|
if (Global.Config.UseDefaultAuthor)
|
|
|
|
|
AuthorBox.Text = Global.Config.DefaultAuthor;
|
2011-06-19 14:28:13 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void RecordBox_DragEnter(object sender, DragEventArgs e)
|
|
|
|
|
{
|
2013-04-15 02:14:14 +00:00
|
|
|
|
e.Effect = e.Data.GetDataPresent(DataFormats.FileDrop) ? DragDropEffects.Copy : DragDropEffects.None;
|
2011-06-19 14:28:13 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void RecordBox_DragDrop(object sender, DragEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
string[] filePaths = (string[])e.Data.GetData(DataFormats.FileDrop);
|
|
|
|
|
RecordBox.Text = filePaths[0];
|
|
|
|
|
}
|
|
|
|
|
}
|
2011-02-11 02:30:45 +00:00
|
|
|
|
}
|