Add NullGame as an inherited class of RomGame and assign Global.Game to this instead of null whenever a ROM is not loaded. This fixes using the record dialog with no game loaded and lots of other situations during Null Emulator. Also cleaned up the record dialog a bit

This commit is contained in:
andres.delikat 2011-07-30 23:20:49 +00:00
parent 2e68314e01
commit ccae3cc1c9
5 changed files with 82 additions and 4 deletions

View File

@ -238,6 +238,7 @@
<Compile Include="NEStools\SpriteViewer.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="NullGame.cs" />
<Compile Include="PlayMovie.cs">
<SubType>Form</SubType>
</Compile>

View File

@ -67,6 +67,7 @@ namespace BizHawk.MultiClient
public MainForm(string[] args)
{
InitializeComponent();
Global.Game = new NullGame();
if (Global.Config.ShowLogWindow)
{
LogConsole.ShowConsole();
@ -804,6 +805,7 @@ namespace BizHawk.MultiClient
public bool LoadRom(string path)
{
if (path == null) return false;
using (var file = new HawkFile())
{
string[] romExtensions = new string[] { "SMS", "PCE", "SGX", "GG", "SG", "BIN", "SMD", "GB", "NES", "ROM" };
@ -2013,7 +2015,7 @@ namespace BizHawk.MultiClient
{
CloseGame();
Global.Emulator = new NullEmulator();
Global.Game = null;
Global.Game = new NullGame();
RamSearch1.Restart();
RamWatch1.Restart();
HexEditor1.Restart();

View File

@ -0,0 +1,75 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
namespace BizHawk.MultiClient
{
public class NullGame : RomGame
{
private List<string> options;
private const int BankSize = 4096;
new public RomStatus Status { get; private set; }
new public string Name { get { return "Null Game"; } set { } }
new public string FilesystemSafeName { get { return "Null Game"; } }
public NullGame()
{
FileData = new byte[1];
FileData[0] = new byte();
RomData = new byte[1];
RomData[0] = new byte();
System = "Null";
Status = RomStatus.GoodDump;
options = new List<String>();
options.Add("null");
}
private byte[] DeInterleaveSMD(byte[] source)
{
return FileData;
}
private void CheckForPatchOptions()
{
}
new public string SaveRamPath
{
get
{
return Path.Combine(PathManager.MakeAbsolutePath(Global.Config.BasePath, ""), "Null Game.SaveRAM");
}
}
new public string SaveStatePrefix
{
get
{
string Bind = "";
if (Global.Config.BindSavestatesToMovies && Global.MainForm.UserMovie.Mode != MOVIEMODE.INACTIVE)
Bind += " - " + Path.GetFileNameWithoutExtension(Global.MainForm.UserMovie.Filename);
return Path.Combine(PathManager.MakeAbsolutePath(Global.Config.BasePath, ""), "Null Game" + Bind);
}
}
new public string MoviePrefix
{
get
{
return PathManager.MakeAbsolutePath(Global.Config.BasePath, "") + "Null Game";
}
}
new public string ScreenshotPrefix
{
get
{
return PathManager.MakeAbsolutePath(Global.Config.BasePath, "") + "/" + "Null Game";
}
}
}
}

View File

@ -86,7 +86,7 @@ namespace BizHawk.MultiClient
MovieToRecord.Header.Comments.Add(str);
}
}
file.Delete();
}
Global.MainForm.StartNewMovie(MovieToRecord, true);
@ -112,7 +112,7 @@ namespace BizHawk.MultiClient
sfd.InitialDirectory = PathManager.MakeAbsolutePath(Global.Config.MoviesPath, "");
sfd.DefaultExt = ".tas";
sfd.FileName = Global.Game.FilesystemSafeName;
sfd.Filter = "Movie files (*.tas)|*.TAS";
sfd.Filter = "Movie files (*.tas)|*.tas";
Global.Sound.StopSound();
var result = sfd.ShowDialog();

View File

@ -10,7 +10,7 @@ namespace BizHawk.MultiClient
public byte[] RomData;
public byte[] FileData;
public string System;
public RomStatus Status { get; private set; }
public RomStatus Status { get; private set; }
private string name;
private string filesystemSafeName;