diff --git a/BizHawk.Client.EmuHawk/AVOut/AVSync.cs b/BizHawk.Client.EmuHawk/AVOut/AVSync.cs
index 045ad03808..b58ec79ae9 100644
--- a/BizHawk.Client.EmuHawk/AVOut/AVSync.cs
+++ b/BizHawk.Client.EmuHawk/AVOut/AVSync.cs
@@ -14,6 +14,10 @@ namespace BizHawk.Client.EmuHawk
private long _soundRemainder; // audio timekeeping for video dumping
+ ///
+ /// 's mode is not , or
+ /// A/V parameters haven't been set (need to call and )
+ ///
public void DumpAV(IVideoProvider v, ISoundProvider asyncSoundProvider, out short[] samples, out int samplesprovided)
{
// Sound refactor TODO: we could try set it here, but we want the client to be responsible for mode switching? There may be non-trivial complications with when to switch modes that we don't want this object worrying about
@@ -78,6 +82,7 @@ namespace BizHawk.Client.EmuHawk
}
}
+ /// 's mode is not
public void DumpAV(IVideoProvider v, ISoundProvider syncSoundProvider, out short[] samples, out int samplesprovided)
{
// Sound refactor TODO: we could just set it here, but we want the client to be responsible for mode switching? There may be non-trivial complications with when to switch modes that we don't want this object worrying about
@@ -140,7 +145,7 @@ namespace BizHawk.Client.EmuHawk
protected int bits;
protected bool aset = false;
-
+ /// already set
public new virtual void SetMovieParameters(int fpsnum, int fpsden)
{
if (vset)
@@ -155,6 +160,7 @@ namespace BizHawk.Client.EmuHawk
base.SetMovieParameters(fpsnum, fpsden);
}
+ /// already set, or is not 16
public new virtual void SetAudioParameters(int sampleRate, int channels, int bits)
{
if (aset)
@@ -180,11 +186,13 @@ namespace BizHawk.Client.EmuHawk
// this writer will never support this capability
}
+ /// always
public new virtual void AddFrame(IVideoProvider source)
{
throw new InvalidOperationException("Must call AddAV()!");
}
+ /// always
public new virtual void AddSamples(short[] samples)
{
throw new InvalidOperationException("Must call AddAV()!");
diff --git a/BizHawk.Client.EmuHawk/AVOut/AviWriter.cs b/BizHawk.Client.EmuHawk/AVOut/AviWriter.cs
index 3ea0f9320f..6fe0efa9c2 100644
--- a/BizHawk.Client.EmuHawk/AVOut/AviWriter.cs
+++ b/BizHawk.Client.EmuHawk/AVOut/AviWriter.cs
@@ -30,9 +30,8 @@ namespace BizHawk.Client.EmuHawk
_currSegment?.Dispose();
}
- ///
- /// sets the codec token to be used for video compression
- ///
+ /// sets the codec token to be used for video compression
+ /// does not inherit
public void SetVideoCodecToken(IDisposable token)
{
if (token is CodecToken)
@@ -133,10 +132,8 @@ namespace BizHawk.Client.EmuHawk
}
}
- ///
- /// opens an avi file for recording with the supplied enumerator used to name files.
- /// set a video codec token first.
- ///
+ /// opens an avi file for recording, with being used to name files
+ /// no video codec token set
public void OpenFile(IEnumerator nameProvider)
{
_nameProvider = nameProvider;
@@ -158,6 +155,7 @@ namespace BizHawk.Client.EmuHawk
_currSegment = null;
}
+ /// worker thrread died
public void AddFrame(IVideoProvider source)
{
while (!threadQ.TryAdd(new VideoCopy(source), 1000))
@@ -181,6 +179,7 @@ namespace BizHawk.Client.EmuHawk
_currSegment.AddFrame(source);
}
+ /// worker thrread died
public void AddSamples(short[] samples)
{
// as MainForm.cs is written now, samples is all ours (nothing else will use it for anything)
@@ -316,6 +315,8 @@ namespace BizHawk.Client.EmuHawk
public bool has_audio;
public int a_samplerate, a_channels, a_bits;
+
+ /// is not 8 or 16, or is not in range 1..2
public void PopulateWAVEFORMATEX(ref AVIWriterImports.WAVEFORMATEX wfex)
{
const int WAVE_FORMAT_PCM = 1;
@@ -640,6 +641,8 @@ namespace BizHawk.Client.EmuHawk
}
Parameters parameters;
+
+ /// unmanaged call failed
public void OpenFile(string destPath, Parameters parameters, CodecToken videoCodecToken)
{
static int mmioFOURCC(string str) => (
@@ -700,9 +703,8 @@ namespace BizHawk.Client.EmuHawk
}
- ///
- /// Acquires a video codec configuration from the user
- ///
+ /// acquires a video codec configuration from the user
+ /// no file open (need to call )
public IDisposable AcquireVideoCodecToken(IntPtr hwnd, CodecToken lastCodecToken)
{
if (!IsOpen)
@@ -741,9 +743,8 @@ namespace BizHawk.Client.EmuHawk
return null;
}
- ///
- /// begin recording
- ///
+ /// begin recording
+ /// no video codec token set (need to call ), or unmanaged call failed
public void OpenStreams()
{
if (currVideoCodecToken == null)
@@ -882,6 +883,7 @@ namespace BizHawk.Client.EmuHawk
outStatus.audio_buffered_shorts = 0;
}
+ /// attempted frame resize during encoding
public unsafe void AddFrame(IVideoProvider source)
{
const int AVIIF_KEYFRAME = 0x00000010;
@@ -965,6 +967,7 @@ namespace BizHawk.Client.EmuHawk
}
}
+ /// no default codec token in config
public void SetDefaultVideoCodecToken()
{
CodecToken ct = CodecToken.DeSerialize(Global.Config.AVICodecToken);
diff --git a/BizHawk.Client.EmuHawk/AVOut/FFmpegWriter.cs b/BizHawk.Client.EmuHawk/AVOut/FFmpegWriter.cs
index dd567eabc6..de8fc8423c 100644
--- a/BizHawk.Client.EmuHawk/AVOut/FFmpegWriter.cs
+++ b/BizHawk.Client.EmuHawk/AVOut/FFmpegWriter.cs
@@ -174,7 +174,7 @@ namespace BizHawk.Client.EmuHawk
return s.ToString();
}
-
+ /// FFmpeg call failed
public void AddFrame(IVideoProvider source)
{
if (source.BufferWidth != width || source.BufferHeight != height)
@@ -206,7 +206,8 @@ namespace BizHawk.Client.EmuHawk
{
return FFmpegWriterForm.DoFFmpegWriterDlg(hwnd);
}
-
+
+ /// does not inherit
public void SetVideoCodecToken(IDisposable token)
{
if (token is FFmpegWriterForm.FormatPreset)
@@ -261,6 +262,7 @@ namespace BizHawk.Client.EmuHawk
}
}
+ /// FFmpeg call failed
public void AddSamples(short[] samples)
{
if (_ffmpeg.HasExited)
@@ -285,6 +287,7 @@ namespace BizHawk.Client.EmuHawk
}
}
+ /// is not 16
public void SetAudioParameters(int sampleRate, int channels, int bits)
{
if (bits != 16)
diff --git a/BizHawk.Client.EmuHawk/AVOut/GifWriter.cs b/BizHawk.Client.EmuHawk/AVOut/GifWriter.cs
index e1c980b35c..ff4eb2cb67 100644
--- a/BizHawk.Client.EmuHawk/AVOut/GifWriter.cs
+++ b/BizHawk.Client.EmuHawk/AVOut/GifWriter.cs
@@ -82,6 +82,7 @@ namespace BizHawk.Client.EmuHawk
private GifToken _token;
+ /// does not inherit
public void SetVideoCodecToken(IDisposable token)
{
if (token is GifToken gifToken)
diff --git a/BizHawk.Client.EmuHawk/AVOut/JMDWriter.cs b/BizHawk.Client.EmuHawk/AVOut/JMDWriter.cs
index 6acabff970..e0621b74f0 100644
--- a/BizHawk.Client.EmuHawk/AVOut/JMDWriter.cs
+++ b/BizHawk.Client.EmuHawk/AVOut/JMDWriter.cs
@@ -178,6 +178,8 @@ namespace BizHawk.Client.EmuHawk
/// underlying bytestream that is being written to
///
Stream f;
+
+ /// cannot be written to
public JMDfile(Stream f, int fpsnum, int fpsden, int audiosamplerate, bool stereo)
{
if (!f.CanWrite)
@@ -535,9 +537,8 @@ namespace BizHawk.Client.EmuHawk
// we have no unmanaged resources
}
- ///
- /// sets the codec token to be used for video compression
- ///
+ /// sets the codec token to be used for video compression
+ /// does not inherit
public void SetVideoCodecToken(IDisposable token)
{
if (token is CodecToken)
@@ -589,9 +590,8 @@ namespace BizHawk.Client.EmuHawk
// each frame is dumped independently with its own resolution tag, so we don't care to store this
}
- ///
- /// set audio parameters. cannot change later
- ///
+ /// set audio parameters, cannot change later
+ /// is outside range 8000..96000, is outside range 1..2, or is not 16
public void SetAudioParameters(int sampleRate, int channels, int bits)
{
// the sampleRate limits are arbitrary, just to catch things which are probably silly-wrong
diff --git a/BizHawk.Client.EmuHawk/AVOut/NutMuxer.cs b/BizHawk.Client.EmuHawk/AVOut/NutMuxer.cs
index a974785b1b..a56bc28051 100644
--- a/BizHawk.Client.EmuHawk/AVOut/NutMuxer.cs
+++ b/BizHawk.Client.EmuHawk/AVOut/NutMuxer.cs
@@ -66,6 +66,7 @@ namespace BizHawk.Client.EmuHawk
return GetBufferInternal(length, zerofill, a => a.Length >= length && a.Length / (float)length <= 2.0f);
}
+ /// is not in use
public void ReleaseBuffer(T[] buffer)
{
if (!_inuse.Remove(buffer))
@@ -580,16 +581,16 @@ namespace BizHawk.Client.EmuHawk
}
}
- ///
- /// write a video frame to the stream
- ///
+ /// write a video frame to the stream
/// raw video data; if length 0, write EOR
+ /// internal error, possible A/V desync
+ /// already written EOR
public void WriteVideoFrame(int[] video)
{
if (videodone)
throw new InvalidOperationException("Can't write data after end of relevance!");
if (audioqueue.Count > 5)
- throw new Exception("A\\V Desync?");
+ throw new Exception("A/V Desync?");
int datalen = video.Length * sizeof(int);
byte[] data = _bufferpool.GetBufferAtLeast(datalen);
Buffer.BlockCopy(video, 0, data, 0, datalen);
@@ -603,16 +604,16 @@ namespace BizHawk.Client.EmuHawk
audioqueue.Dequeue().WriteData(output);
}
- ///
- /// write an audio frame to the stream
- ///
+ /// write an audio frame to the stream
/// raw audio data; if length 0, write EOR
+ /// internal error, possible A/V desync
+ /// already written EOR
public void WriteAudioFrame(short[] samples)
{
if (audiodone)
throw new Exception("Can't write audio after end of relevance!");
if (videoqueue.Count > 5)
- throw new Exception("A\\V Desync?");
+ throw new Exception("A/V Desync?");
int datalen = samples.Length * sizeof(short);
byte[] data = _bufferpool.GetBufferAtLeast(datalen);
Buffer.BlockCopy(samples, 0, data, 0, datalen);
diff --git a/BizHawk.Client.EmuHawk/AVOut/NutWriter.cs b/BizHawk.Client.EmuHawk/AVOut/NutWriter.cs
index 3dbd1b4ca6..bdf0ce996f 100644
--- a/BizHawk.Client.EmuHawk/AVOut/NutWriter.cs
+++ b/BizHawk.Client.EmuHawk/AVOut/NutWriter.cs
@@ -108,6 +108,7 @@ namespace BizHawk.Client.EmuHawk
}
}
+ /// is not 16
public void SetAudioParameters(int sampleRate, int channels, int bits)
{
if (bits != 16)
diff --git a/BizHawk.Client.EmuHawk/AVOut/Quantize/OctreeQuantizer.cs b/BizHawk.Client.EmuHawk/AVOut/Quantize/OctreeQuantizer.cs
index 6e57519a29..4d5e8cc5e9 100644
--- a/BizHawk.Client.EmuHawk/AVOut/Quantize/OctreeQuantizer.cs
+++ b/BizHawk.Client.EmuHawk/AVOut/Quantize/OctreeQuantizer.cs
@@ -38,17 +38,11 @@ namespace BizHawk.Client.EmuHawk
///
private int _maxColors;
- ///
- /// Construct the octree quantizer
- ///
- ///
- /// The Octree quantizer is a two pass algorithm. The initial pass sets up the octree,
- /// the second pass quantizes a color based on the nodes in the tree
- ///
/// The maximum number of colors to return
/// The number of significant bits
- public OctreeQuantizer(int maxColors, int maxColorBits)
- : base(false)
+ /// ≥ 256 or outside range 1..8
+ /// The Octree quantizer is a two pass algorithm. The initial pass sets up the octree, the second pass quantizes a color based on the nodes in the tree.
+ public OctreeQuantizer(int maxColors, int maxColorBits) : base(false)
{
if (maxColors > 255)
throw new ArgumentOutOfRangeException(nameof(maxColors), maxColors, "The number of colors should be less than 256");
diff --git a/BizHawk.Client.EmuHawk/AVOut/WavWriter.cs b/BizHawk.Client.EmuHawk/AVOut/WavWriter.cs
index 195c47b029..ee0818d734 100644
--- a/BizHawk.Client.EmuHawk/AVOut/WavWriter.cs
+++ b/BizHawk.Client.EmuHawk/AVOut/WavWriter.cs
@@ -184,6 +184,7 @@ namespace BizHawk.Client.EmuHawk
/// WavWriter now owns any of these streams that it enumerates
/// sampling rate in HZ
/// number of audio channels
+ /// cannot be progressed
public WavWriter(IEnumerator ss, int samplerate, int numchannels)
{
this.samplerate = samplerate;
@@ -228,6 +229,7 @@ namespace BizHawk.Client.EmuHawk
return new WavWriterVToken();
}
+ /// is not 16
public void SetAudioParameters(int sampleRate, int channels, int bits)
{
this.sampleRate = sampleRate;
diff --git a/BizHawk.Client.EmuHawk/ArgParser.cs b/BizHawk.Client.EmuHawk/ArgParser.cs
index 9258c0e3d2..02dab02522 100644
--- a/BizHawk.Client.EmuHawk/ArgParser.cs
+++ b/BizHawk.Client.EmuHawk/ArgParser.cs
@@ -35,6 +35,7 @@ namespace BizHawk.Client.EmuHawk
public string URL_post = null;
public bool? audiosync = null;
+ /// --socket_ip passed without specifying --socket_port or vice-versa
public void ParseArguments(string[] args)
{
for (int i = 0; i < args.Length; i++)
diff --git a/BizHawk.Client.EmuHawk/CustomControls/MsgBox.cs b/BizHawk.Client.EmuHawk/CustomControls/MsgBox.cs
index 1ac3b5346e..9527eb16c0 100644
--- a/BizHawk.Client.EmuHawk/CustomControls/MsgBox.cs
+++ b/BizHawk.Client.EmuHawk/CustomControls/MsgBox.cs
@@ -52,23 +52,15 @@ namespace BizHawk.Client.EmuHawk.CustomControls
messageLbl.MaximumSize = new Size(MaximumSize.Width - _msgIcon.Width - UIHelper.ScaleX(25), MaximumSize.Height);
}
- ///
- /// Create up to 3 buttons with given DialogResult values.
- ///
- /// Array of button names. Must of length 1-3.
- /// Array of DialogResult values. Must be same length as names.
- public void SetButtons(string[] names, DialogResult[] results)
- {
- SetButtons(names, results, 1);
- }
-
///
/// Create up to 3 buttons with given DialogResult values.
///
/// Array of button names. Must of length 1-3.
/// Array of DialogResult values. Must be same length as names.
/// Default Button number. Must be 1-3.
- public void SetButtons(string[] names, DialogResult[] results, int def)
+ /// length of is not in range 1..3
+ /// is null
+ public void SetButtons(string[] names, DialogResult[] results, int def = 1)
{
if (names == null)
{
diff --git a/BizHawk.Client.EmuHawk/DisplayManager/DisplayManager.cs b/BizHawk.Client.EmuHawk/DisplayManager/DisplayManager.cs
index 15ec44c822..9b81333ecf 100644
--- a/BizHawk.Client.EmuHawk/DisplayManager/DisplayManager.cs
+++ b/BizHawk.Client.EmuHawk/DisplayManager/DisplayManager.cs
@@ -483,8 +483,10 @@ namespace BizHawk.Client.EmuHawk
public int BufferHeight { get; set; }
public int BackgroundColor { get; set; }
+ /// always
public int VsyncNumerator => throw new InvalidOperationException();
+ /// always
public int VsyncDenominator => throw new InvalidOperationException();
}
@@ -968,9 +970,8 @@ namespace BizHawk.Client.EmuHawk
return null;
}
- ///
- /// Locks the requested lua surface name
- ///
+ /// locks the lua surface called
+ /// already locked, or unknown surface
public DisplaySurface LockLuaSurface(string name, bool clear=true)
{
if (MapNameToLuaSurface.ContainsKey(name))
@@ -1037,9 +1038,8 @@ namespace BizHawk.Client.EmuHawk
}
}
- ///
- /// Unlocks this DisplaySurface which had better have been locked as a lua surface
- ///
+ /// unlocks this DisplaySurface which had better have been locked as a lua surface
+ /// already unlocked
public void UnlockLuaSurface(DisplaySurface surface)
{
if (!MapLuaSurfaceToName.ContainsKey(surface))
diff --git a/BizHawk.Client.EmuHawk/Extensions/ControlExtensions.cs b/BizHawk.Client.EmuHawk/Extensions/ControlExtensions.cs
index 188104276b..81ddd448f8 100644
--- a/BizHawk.Client.EmuHawk/Extensions/ControlExtensions.cs
+++ b/BizHawk.Client.EmuHawk/Extensions/ControlExtensions.cs
@@ -14,6 +14,7 @@ namespace BizHawk.Client.EmuHawk.WinFormExtensions
{
public static class ControlExtensions
{
+ /// does not inherit
public static void PopulateFromEnum(this ComboBox box, object enumVal)
where T : struct, IConvertible
{
@@ -213,6 +214,7 @@ namespace BizHawk.Client.EmuHawk.WinFormExtensions
return sb.ToString();
}
+ /// unmanaged call failed
public static void SetSortIcon(this ListView listViewControl, int columnIndex, SortOrder order)
{
const int LVM_GETHEADER = 4127;
diff --git a/BizHawk.Client.EmuHawk/GLManager.cs b/BizHawk.Client.EmuHawk/GLManager.cs
index 547496936f..fa030b6bae 100644
--- a/BizHawk.Client.EmuHawk/GLManager.cs
+++ b/BizHawk.Client.EmuHawk/GLManager.cs
@@ -20,6 +20,7 @@ namespace BizHawk.Client.EmuHawk
public static GLManager Instance { get; private set; }
+ /// instance already created
public static void CreateInstance()
{
if (Instance != null)
diff --git a/BizHawk.Client.EmuHawk/MainForm.cs b/BizHawk.Client.EmuHawk/MainForm.cs
index 391c57e4e6..c83fb1a034 100644
--- a/BizHawk.Client.EmuHawk/MainForm.cs
+++ b/BizHawk.Client.EmuHawk/MainForm.cs
@@ -2208,6 +2208,7 @@ namespace BizHawk.Client.EmuHawk
return FormatFilter(items.ToArray());
}
+ /// contains unpaired element
public static string FormatFilter(params string[] args)
{
var sb = new StringBuilder();
diff --git a/BizHawk.Client.EmuHawk/Sound/Utilities/BufferedAsync.cs b/BizHawk.Client.EmuHawk/Sound/Utilities/BufferedAsync.cs
index 4b132e6b0c..a67436e771 100644
--- a/BizHawk.Client.EmuHawk/Sound/Utilities/BufferedAsync.cs
+++ b/BizHawk.Client.EmuHawk/Sound/Utilities/BufferedAsync.cs
@@ -58,6 +58,7 @@ namespace BizHawk.Client.EmuHawk
BaseSoundProvider.DiscardSamples();
}
+ /// . is not
public void GetSamplesAsync(short[] samples)
{
int samplesToGenerate = SamplesInOneFrame;
@@ -97,6 +98,7 @@ namespace BizHawk.Client.EmuHawk
get { return SyncSoundMode.Async; }
}
+ /// is not
public void SetSyncMode(SyncSoundMode mode)
{
if (mode != SyncSoundMode.Async)
@@ -105,6 +107,7 @@ namespace BizHawk.Client.EmuHawk
}
}
+ /// always
public void GetSamplesSync(out short[] samples, out int nsamp)
{
throw new InvalidOperationException("Sync mode is not supported.");
diff --git a/BizHawk.Client.EmuHawk/Sound/Utilities/SoundOutputProvider.cs b/BizHawk.Client.EmuHawk/Sound/Utilities/SoundOutputProvider.cs
index 575bb9c3da..dc576a73b3 100644
--- a/BizHawk.Client.EmuHawk/Sound/Utilities/SoundOutputProvider.cs
+++ b/BizHawk.Client.EmuHawk/Sound/Utilities/SoundOutputProvider.cs
@@ -63,6 +63,7 @@ namespace BizHawk.Client.EmuHawk
ResetBuffer();
}
+ /// (from setter) constructed in standalone mode
public int MaxSamplesDeficit
{
get { return _maxSamplesDeficit; }
@@ -124,6 +125,7 @@ namespace BizHawk.Client.EmuHawk
get { return SampleRate / Global.Emulator.VsyncRate(); }
}
+ /// not constructed in standalone mode
public void GetSamples(short[] samples)
{
if (!_standaloneMode) throw new InvalidOperationException();
@@ -132,6 +134,7 @@ namespace BizHawk.Client.EmuHawk
GetSamplesFromBuffer(samples, returnSampleCount);
}
+ /// constructed in standalone mode
public void GetSamples(int idealSampleCount, out short[] samples, out int sampleCount)
{
if (_standaloneMode) throw new InvalidOperationException();
diff --git a/BizHawk.Client.EmuHawk/Sound/Utilities/SyncToAsyncProvider.cs b/BizHawk.Client.EmuHawk/Sound/Utilities/SyncToAsyncProvider.cs
index a09c812c7f..2e09c43545 100644
--- a/BizHawk.Client.EmuHawk/Sound/Utilities/SyncToAsyncProvider.cs
+++ b/BizHawk.Client.EmuHawk/Sound/Utilities/SyncToAsyncProvider.cs
@@ -28,6 +28,7 @@ namespace BizHawk.Client.EmuHawk
get { return SyncSoundMode.Async; }
}
+ /// is not
public void SetSyncMode(SyncSoundMode mode)
{
if (mode != SyncSoundMode.Async)
@@ -36,6 +37,7 @@ namespace BizHawk.Client.EmuHawk
}
}
+ /// always
public void GetSamplesSync(out short[] samples, out int nsamp)
{
throw new InvalidOperationException("Sync mode is not supported.");
diff --git a/BizHawk.Client.EmuHawk/tools/Lua/Libraries/EmuLuaLibrary.Forms.cs b/BizHawk.Client.EmuHawk/tools/Lua/Libraries/EmuLuaLibrary.Forms.cs
index 02bc748d49..792de5d523 100644
--- a/BizHawk.Client.EmuHawk/tools/Lua/Libraries/EmuLuaLibrary.Forms.cs
+++ b/BizHawk.Client.EmuHawk/tools/Lua/Libraries/EmuLuaLibrary.Forms.cs
@@ -1302,6 +1302,7 @@ namespace BizHawk.Client.EmuHawk
}
}
+ /// misformatted colour
[LuaMethodExample("forms.setproperty( 332, \"Property\", \"Property value\" );")]
[LuaMethod("setproperty", "Attempts to set the given property of the widget with the given value. Note: not all properties will be able to be represented for the control to accept")]
public void SetProperty(int handle, string property, object value)
diff --git a/BizHawk.Client.EmuHawk/tools/MultiDiskBundler/MultiDiskBundler.cs b/BizHawk.Client.EmuHawk/tools/MultiDiskBundler/MultiDiskBundler.cs
index f6f39000a0..c42f7a0a4e 100644
--- a/BizHawk.Client.EmuHawk/tools/MultiDiskBundler/MultiDiskBundler.cs
+++ b/BizHawk.Client.EmuHawk/tools/MultiDiskBundler/MultiDiskBundler.cs
@@ -255,6 +255,8 @@ namespace BizHawk.Client.EmuHawk
}
}
+ /// running on Windows host, and unmanaged call failed
+ /// running on Windows host, and either path is not a regular file or directory
/// Algorithm for Windows taken from https://stackoverflow.com/a/485516/7467292
public static string GetRelativePath(string fromPath, string toPath)
{
diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/NesSchema.cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/NesSchema.cs
index a8ab4d3031..27cb994303 100644
--- a/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/NesSchema.cs
+++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/NesSchema.cs
@@ -14,6 +14,7 @@ namespace BizHawk.Client.EmuHawk
// ReSharper disable once UnusedMember.Global
public class NesSchema : IVirtualPadSchema
{
+ /// found ControllerSNES
public IEnumerable GetPadSchemas(IEmulator core)
{
if (core is NES || core is SubNESHawk)