Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/ClusterM/hakchi2.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com>2017-10-05 23:42:19 +0300
committerAlexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com>2017-10-05 23:42:19 +0300
commitad222ad525a69ff39a0c7a6120eb45e6bae3ce70 (patch)
treecf91cbf0cc629809bca3ab52f1bae0ea3fd5039d
parent100852f221b8f1b83c978d29c0cd56f54d7ffab8 (diff)
Finally SNES patcher
-rw-r--r--Apps/AppTypeCollection.cs2
-rw-r--r--Apps/FdsGame.cs2
-rw-r--r--Apps/NesGame.cs81
-rw-r--r--Apps/NesMiniApplication.cs77
-rw-r--r--Apps/SnesGame.cs322
-rw-r--r--MainForm.Designer.cs47
-rw-r--r--MainForm.cs13
-rw-r--r--MainForm.resx550
-rw-r--r--Program.cs1
-rw-r--r--Properties/Resources.Designer.cs11
-rw-r--r--Properties/Resources.resx3
-rw-r--r--TarStream.cs6
-rw-r--r--WorkerForm.cs10
-rw-r--r--mods/mod_hakchi/hakchi/rootfs/bin/clover-canoe-shvc-wr6
14 files changed, 831 insertions, 300 deletions
diff --git a/Apps/AppTypeCollection.cs b/Apps/AppTypeCollection.cs
index 1ad25fab..112d3031 100644
--- a/Apps/AppTypeCollection.cs
+++ b/Apps/AppTypeCollection.cs
@@ -51,7 +51,7 @@ namespace com.clusterrr.hakchi_gui
{
Class = typeof(SnesGame),
Extensions = new string[] { ".sfc", ".smc", ".sfrom" },
- DefaultApps = new string[] { "/bin/snes", "/usr/bin/clover-canoe-shvc", },
+ DefaultApps = new string[] { "/bin/snes", "/bin/clover-canoe-shvc-wr", "/usr/bin/clover-canoe-shvc" },
Prefix = 'U',
DefaultCover = Resources.blank_snes_us
},
diff --git a/Apps/FdsGame.cs b/Apps/FdsGame.cs
index 271391b1..5f862cd8 100644
--- a/Apps/FdsGame.cs
+++ b/Apps/FdsGame.cs
@@ -40,6 +40,8 @@ namespace com.clusterrr.hakchi_gui
}
if (ConfigIni.ConsoleType == MainForm.ConsoleType.NES || ConfigIni.ConsoleType == MainForm.ConsoleType.Famicom)
application = "/bin/clover-kachikachi-wr";
+ else
+ application = "/bin/nes";
args = DefaultArgs;
return true;
}
diff --git a/Apps/NesGame.cs b/Apps/NesGame.cs
index eb9e699c..6fedd280 100644
--- a/Apps/NesGame.cs
+++ b/Apps/NesGame.cs
@@ -113,85 +113,6 @@ namespace com.clusterrr.hakchi_gui
return true;
}
- /*
- public static NesMiniApplication Import(string nesFileName, string sourceFileName, bool? ignoreMapper, ref bool? needPatch, NeedPatchDelegate needPatchCallback = null, Form parentForm = null, byte[] rawRomData = null)
- {
- NesFile nesFile;
- try
- {
- if (rawRomData != null)
- nesFile = new NesFile(rawRomData);
- else
- nesFile = new NesFile(nesFileName);
- }
- catch
- {
- return NesMiniApplication.Import(nesFileName, sourceFileName, rawRomData);
- }
- nesFile.CorrectRom();
- var crc32 = nesFile.CRC32;
- var code = GenerateCode(crc32, Prefix);
- var gamePath = Path.Combine(GamesDirectory, code);
- var nesPath = Path.Combine(gamePath, code + ".nes");
- var patchesDirectory = Path.Combine(Program.BaseDirectoryExternal, "patches");
- Directory.CreateDirectory(patchesDirectory);
- Directory.CreateDirectory(gamePath);
- var patches = Directory.GetFiles(patchesDirectory, string.Format("{0:X8}*.ips", crc32), SearchOption.AllDirectories);
- if (patches.Length > 0 && needPatch != false)
- {
- if (needPatch == true || ((needPatchCallback != null) && needPatchCallback(parentForm, Path.GetFileName(nesFileName))))
- {
- needPatch = true;
- var patch = patches[0];
- if (rawRomData == null)
- rawRomData = File.ReadAllBytes(nesFileName);
- Debug.WriteLine(string.Format("Patching {0}", nesFileName));
- IpsPatcher.Patch(patch, ref rawRomData);
- nesFile = new NesFile(rawRomData);
- }
- else needPatch = false;
- }
-
- if (!supportedMappers.Contains(nesFile.Mapper) && (ignoreMapper != true))
- {
- Directory.Delete(gamePath, true);
- if (ignoreMapper != false)
- throw new UnsupportedMapperException(nesFile);
- else
- {
- Debug.WriteLine(string.Format("Game {0} has mapper #{1}, skipped", nesFileName, nesFile.Mapper));
- return null;
- }
- }
- if ((nesFile.Mirroring == NesFile.MirroringType.FourScreenVram) && (ignoreMapper != true))
- {
- Directory.Delete(gamePath, true);
- if (ignoreMapper != false)
- throw new UnsupportedFourScreenException(nesFile);
- else
- {
- Debug.WriteLine(string.Format("Game {0} has four-screen mirroring, skipped", nesFileName, nesFile.Mapper));
- return null;
- }
- }
- // TODO: Make trainer check. I think that the NES Mini doesn't support it.
-
- nesFile.Save(nesPath);
- var game = new NesGame(gamePath, true);
-
- game.Name = Path.GetFileNameWithoutExtension(nesFileName);
- if (game.Name.Contains("(J)")) game.region = "Japan";
- game.TryAutofill(crc32);
- game.Name = Regex.Replace(game.Name, @" ?\(.*?\)", string.Empty).Trim();
- game.Name = Regex.Replace(game.Name, @" ?\[.*?\]", string.Empty).Trim();
- game.Name = game.Name.Replace("_", " ").Replace(" ", " ");
- game.FindCover(nesFileName, sourceFileName, (game.region == "Japan") ? Resources.blank_jp : Resources.blank_nes, crc32);
- game.Args = DefaultArgs;
- game.Save();
- return game;
- }
- */
-
public bool TryAutofill(uint crc32)
{
CachedGameInfo gameinfo;
@@ -228,7 +149,7 @@ namespace com.clusterrr.hakchi_gui
if (!string.IsNullOrEmpty(GameGenie))
{
var codes = GameGenie.Split(new char[] { ',', '\t', ' ', ';' }, StringSplitOptions.RemoveEmptyEntries);
- var nesFiles = Directory.GetFiles(this.Path, "*.nes", SearchOption.TopDirectoryOnly);
+ var nesFiles = Directory.GetFiles(this.GamePath, "*.nes", SearchOption.TopDirectoryOnly);
foreach (var f in nesFiles)
{
var nesFile = new NesFile(f);
diff --git a/Apps/NesMiniApplication.cs b/Apps/NesMiniApplication.cs
index 437253ce..c1ee4eb2 100644
--- a/Apps/NesMiniApplication.cs
+++ b/Apps/NesMiniApplication.cs
@@ -65,7 +65,7 @@ namespace com.clusterrr.hakchi_gui
get { return "game"; }
}
- public readonly string Path;
+ public readonly string GamePath;
public readonly string ConfigPath;
public readonly string IconPath;
public readonly string SmallIconPath;
@@ -201,10 +201,18 @@ namespace com.clusterrr.hakchi_gui
FindPatch(ref rawRomData, inputFileName, crc32);
var code = GenerateCode(crc32, prefix);
- var gamePath = System.IO.Path.Combine(GamesDirectory, code);
- var romPath = System.IO.Path.Combine(gamePath, outputFileName);
+ var gamePath = Path.Combine(GamesDirectory, code);
+ var romPath = Path.Combine(gamePath, outputFileName);
if (Directory.Exists(gamePath))
- Directory.Delete(gamePath, true);
+ {
+ var files = Directory.GetFiles(gamePath, "*.*", SearchOption.AllDirectories);
+ foreach (var f in files)
+ try
+ {
+ File.Delete(f);
+ }
+ catch { }
+ }
Directory.CreateDirectory(gamePath);
File.WriteAllBytes(romPath, rawRomData);
var game = new NesMiniApplication(gamePath, true);
@@ -240,7 +248,7 @@ namespace com.clusterrr.hakchi_gui
protected NesMiniApplication()
{
- Path = null;
+ GamePath = null;
ConfigPath = null;
Players = 1;
Simultaneous = false;
@@ -251,7 +259,7 @@ namespace com.clusterrr.hakchi_gui
protected NesMiniApplication(string path, bool ignoreEmptyConfig = false)
{
- Path = path;
+ GamePath = path;
code = System.IO.Path.GetFileName(path);
Name = Code;
ConfigPath = System.IO.Path.Combine(path, Code + ".desktop");
@@ -305,27 +313,24 @@ namespace com.clusterrr.hakchi_gui
if (!hasUnsavedChanges) return false;
Debug.WriteLine(string.Format("Saving application \"{0}\" as {1}", Name, Code));
Name = Regex.Replace(Name, @"'(\d)", @"`$1"); // Apostrophe + any number in game name crashes whole system. What. The. Fuck?
- File.WriteAllText(ConfigPath, string.Format(
- "[Desktop Entry]\n" +
- "Type=Application\n" +
- "Exec={1}\n" +
- "Path=/var/lib/clover/profiles/0/{0}\n" +
- "Name={2}\n" +
- "Icon=/usr/share/games/nes/kachikachi/{0}/{0}.png\n\n" +
- "[X-CLOVER Game]\n" +
- "Code={0}\n" +
- "TestID=777\n" +
- "ID=0\n" +
- "Players={3}\n" +
- "Simultaneous={7}\n" +
- "ReleaseDate={4}\n" +
- "SaveCount=0\n" +
- "SortRawTitle={5}\n" +
- "SortRawPublisher={6}\n" +
- "Copyright=hakchi2 ©2017 Alexey 'Cluster' Avdyukhin\n",
- Code, command, Name ?? Code, Players, ReleaseDate ?? DefaultReleaseDate,
- (Name ?? Code).ToLower(), (Publisher ?? DefaultPublisher).ToUpper(),
- Simultaneous ? 1 : 0));
+ File.WriteAllText(ConfigPath,
+ $"[Desktop Entry]\n" +
+ $"Type=Application\n" +
+ $"Exec={command}\n" +
+ $"Path=/var/lib/clover/profiles/0/{Code}\n" +
+ $"Name={Name ?? Code}\n" +
+ $"Icon={GamesCloverPath}/{Code}/{Code}.png\n\n" +
+ $"[X-CLOVER Game]\n" +
+ $"Code={Code}\n" +
+ $"TestID=777\n" +
+ $"ID=0\n" +
+ $"Players={Players}\n" +
+ $"Simultaneous={(Simultaneous ? 1 : 0)}\n" +
+ $"ReleaseDate={ReleaseDate ?? DefaultReleaseDate}\n" +
+ $"SaveCount=0\n" +
+ $"SortRawTitle={(Name ?? Code).ToLower()}\n" +
+ $"SortRawPublisher={(Publisher ?? DefaultPublisher).ToUpper()}\n" +
+ $"Copyright=hakchi2 ©2017 Alexey 'Cluster' Avdyukhin\n");
hasUnsavedChanges = false;
return true;
}
@@ -481,7 +486,7 @@ namespace com.clusterrr.hakchi_gui
public NesMiniApplication CopyTo(string path)
{
var targetDir = System.IO.Path.Combine(path, code);
- DirectoryCopy(Path, targetDir, true);
+ DirectoryCopy(GamePath, targetDir, true);
return FromDirectory(targetDir);
}
@@ -528,7 +533,7 @@ namespace com.clusterrr.hakchi_gui
public long Size(string path = null)
{
if (path == null)
- path = Path;
+ path = GamePath;
long size = 0;
// Get the subdirectories for the specified directory.
DirectoryInfo dir = new DirectoryInfo(path);
@@ -600,15 +605,15 @@ namespace com.clusterrr.hakchi_gui
public string[] CompressPossible()
{
var result = new List<string>();
- var exec = Regex.Replace(Command, "['\\\"]", " ") + " ";
- var files = Directory.GetFiles(Path, "*.*", SearchOption.TopDirectoryOnly);
+ var exec = Regex.Replace(Command, "['/\\\"]", " ") + " ";
+ var files = Directory.GetFiles(GamePath, "*.*", SearchOption.TopDirectoryOnly);
foreach (var file in files)
{
if (System.IO.Path.GetExtension(file).ToLower() == ".7z")
continue;
if (System.IO.Path.GetExtension(file).ToLower() == ".zip")
continue;
- if (exec.Contains(System.IO.Path.GetFileName(file) + " "))
+ if (exec.Contains(" " + System.IO.Path.GetFileName(file) + " "))
result.Add(file);
}
return result.ToArray();
@@ -617,11 +622,11 @@ namespace com.clusterrr.hakchi_gui
public string[] DecompressPossible()
{
var result = new List<string>();
- var exec = Regex.Replace(Command, "['\\\"]", " ") + " ";
- var files = Directory.GetFiles(Path, "*.7z", SearchOption.TopDirectoryOnly);
+ var exec = Regex.Replace(Command, "['/\\\"]", " ") + " ";
+ var files = Directory.GetFiles(GamePath, "*.7z", SearchOption.TopDirectoryOnly);
foreach (var file in files)
{
- if (exec.Contains(System.IO.Path.GetFileName(file) + " "))
+ if (exec.Contains(" " + System.IO.Path.GetFileName(file) + " "))
result.Add(file);
}
return result.ToArray();
@@ -650,7 +655,7 @@ namespace com.clusterrr.hakchi_gui
using (var szExtractor = new SevenZipExtractor(filename))
{
Debug.WriteLine("Decompressing " + filename);
- szExtractor.ExtractArchive(Path);
+ szExtractor.ExtractArchive(GamePath);
foreach (var f in szExtractor.ArchiveFileNames)
Command = Command.Replace(System.IO.Path.GetFileName(filename), f);
}
diff --git a/Apps/SnesGame.cs b/Apps/SnesGame.cs
index 49e3d365..e780badd 100644
--- a/Apps/SnesGame.cs
+++ b/Apps/SnesGame.cs
@@ -1,12 +1,59 @@
#pragma warning disable 0108
using com.clusterrr.hakchi_gui.Properties;
+using System;
+using System.Collections.Generic;
using System.Drawing;
+using System.IO;
+using System.Runtime.InteropServices;
+using System.Text;
using System.Windows.Forms;
namespace com.clusterrr.hakchi_gui
{
public class SnesGame : NesMiniApplication
{
+ const string DefaultArgs = "--volume 100 -rollback-snapshot-period 600";
+ static List<byte> SfxTypes = new List<byte>() { 0x13, 0x14, 0x15, 0x1a };
+ static List<byte> Dsp1Types = new List<byte>() { 0x03, 0x05 };
+ static List<byte> SA1Types = new List<byte>() { 0x34, 0x35 };
+ static Dictionary<string, ushort> knownPresets = new Dictionary<string, ushort>()
+ {
+ { "SUPER MARIOWORLD", 0x1011 },
+ { "F-ZERO", 0x1018 },
+ { "THE LEGEND OF ZELDA", 0x101D },
+ { "SUPER MARIO KART", 0x10BD },
+ { "Super Metroid", 0x1040 },
+ { "EARTH BOUND", 0x1070 },
+ { "Kirby's Dream Course", 0x1058 },
+ { "DONKEY KONG COUNTRY", 0x1077 },
+ { "KIRBY SUPER DELUXE", 0x109F },
+ { "Super Punch-Out!!", 0x10A9 },
+ { "MEGAMAN X", 0x1109 },
+ { "SUPER GHOULS'N GHOST", 0x1003 },
+ { "Street Fighter2 Turb", 0x1065 },
+ { "SUPER MARIO RPG", 0x109E },
+ { "Secret of MANA", 0x10B0 },
+ { "FINAL FANTASY 3", 0x10DC },
+ { "SUPER CASTLEVANIA 4", 0x1030 },
+ { "CONTRA3 THE ALIEN WA", 0x1036 },
+ { "STAR FOX", 0x123B },
+ { "YOSHI'S ISLAND", 0x123D },
+ { "STARFOX2", 0x1245 },
+ { "FINAL FIGHT", 0x100E },
+ { "DIDDY'S KONG QUEST", 0x105D },
+ { "KIRBY'S DREAM LAND 3", 0x10A2 },
+ { "BREATH OF FIRE 2", 0x1068 },
+ { "FINAL FIGHT 2", 0x10E1 },
+ { "MEGAMAN X2", 0x1117 },
+ { "FINAL FIGHT 3", 0x10E3 },
+ { "GENGHIS KHAN 2", 0x10C4 },
+ { "CASTLEVANIA DRACULA", 0x1131 },
+ { "STREET FIGHTER ALPHA", 0x10DF },
+ { "MEGAMAN 7", 0x113A },
+ { "MEGAMAN X3", 0x113D },
+ { "Breath of Fire", 0x1144 },
+ };
+
public override string GoogleSuffix
{
get
@@ -20,13 +67,280 @@ namespace com.clusterrr.hakchi_gui
{
}
- public static NesMiniApplication Import(string fileName, string sourceFile = null, byte[] rawRomData = null)
+ public static bool Patch(string inputFileName, ref byte[] rawRomData, ref char prefix, ref string application, ref string outputFileName, ref string args, ref Image cover, ref uint crc32)
{
- if (ConfigIni.ConsoleType != MainForm.ConsoleType.SNES && ConfigIni.ConsoleType != MainForm.ConsoleType.SuperFamicom)
- return null;
+ FindPatch(ref rawRomData, inputFileName, crc32);
+ if (inputFileName.Contains("(E)") || inputFileName.Contains("(J)"))
+ cover = Resources.blank_snes_eu_jp;
+ if (ConfigIni.ConsoleType == MainForm.ConsoleType.SNES || ConfigIni.ConsoleType == MainForm.ConsoleType.SuperFamicom)
+ {
+ application = "/bin/clover-canoe-shvc-wr -rom";
+ args = DefaultArgs;
+ var ext = Path.GetExtension(inputFileName);
+ if (ext.ToLower() != ".sfrom") // Need to patch for canoe
+ {
+ if ((ext.ToLower() == ".smc") && ((rawRomData.Length % 1024) != 0))
+ {
+ var stripped = new byte[rawRomData.Length - 512];
+ Array.Copy(rawRomData, 512, stripped, 0, stripped.Length);
+ rawRomData = stripped;
+ }
+ MakeSfrom(ref rawRomData);
+ outputFileName = Path.GetFileNameWithoutExtension(outputFileName) + ".sfrom";
+ }
+ }
+ else
+ {
+ application = "/bin/snes";
+ }
+
+ return true;
+ }
+
+ private static void MakeSfrom(ref byte[] rawRomData)
+ {
+ var romHeaderLoRom = SnesRomHeader.Read(rawRomData, 0x7FC0);
+ var romHeaderHiRom = SnesRomHeader.Read(rawRomData, 0xFFC0);
+ SnesRomHeader romHeader;
+ bool loRom = true;
+ bool hiRom = true;
+ if (romHeaderLoRom.GameTitle.Length == 0)
+ loRom = false;
+ foreach (char c in romHeaderLoRom.GameTitle)
+ if (c < 31 || c > 127) loRom = false;
+ if (romHeaderHiRom.GameTitle.Length == 0)
+ hiRom = false;
+ foreach (char c in romHeaderHiRom.GameTitle)
+ if (c < 31 || c > 127) hiRom = false;
+ SnesRomType romType;
+ if (loRom && !hiRom)
+ {
+ romType = SnesRomType.LoRom;
+ romHeader = romHeaderLoRom;
+ }
+ else if (!loRom && hiRom)
+ {
+ romType = SnesRomType.HiRom;
+ romHeader = romHeaderHiRom;
+ }
+ else if ((romHeaderLoRom.RomMakeup & 1) == 0)
+ {
+ romType = SnesRomType.LoRom;
+ romHeader = romHeaderLoRom;
+ }
+ else
+ {
+ romType = SnesRomType.HiRom;
+ romHeader = romHeaderHiRom;
+ }
+
+ string gameTitle = romHeader.GameTitle.Trim();
+ ushort presetId = 0; // 0x1011;
+ ushort chip = 0;
+ if (SfxTypes.Contains(romHeader.RomType)) // Super FX chip
+ chip = 0x0C;
+ if (!knownPresets.TryGetValue(gameTitle, out presetId)) // Known codes
+ {
+ if (Dsp1Types.Contains(romHeader.RomType))
+ presetId = 0x10BD; // ID from Mario Kard, DSP1
+ if (SA1Types.Contains(romHeader.RomType))
+ presetId = 0x109C; // ID from Super Mario RPG, SA1
+ }
- return null;
+ var sfromHeader1 = new SfromHeader1((uint)rawRomData.Length);
+ var sfromHeader2 = new SfromHeader2((uint)rawRomData.Length, presetId, romType, chip);
+ var sfromHeader1Raw = sfromHeader1.GetBytes();
+ var sfromHeader2Raw = sfromHeader2.GetBytes();
+ var result = new byte[sfromHeader1Raw.Length + rawRomData.Length + sfromHeader2Raw.Length];
+ Array.Copy(sfromHeader1Raw, 0, result, 0, sfromHeader1Raw.Length);
+ Array.Copy(rawRomData, 0, result, sfromHeader1Raw.Length, rawRomData.Length);
+ Array.Copy(sfromHeader2Raw, 0, result, sfromHeader1Raw.Length + rawRomData.Length, sfromHeader2Raw.Length);
+ rawRomData = result;
}
+
+ [StructLayout(LayoutKind.Sequential)]
+ private struct SnesRomHeader
+ {
+ [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 21)]
+ public string GameTitle;
+ [MarshalAs(UnmanagedType.U1)] // $xFD5
+ public byte RomMakeup;
+ [MarshalAs(UnmanagedType.U1)] // $xFD6
+ public byte RomType;
+ [MarshalAs(UnmanagedType.U1)] // $xFD7
+ public byte RomSize;
+ [MarshalAs(UnmanagedType.U1)] // $xFD8
+ public byte SramSize;
+ [MarshalAs(UnmanagedType.U2)] // $xFD9
+ public ushort LicenseId;
+ [MarshalAs(UnmanagedType.U1)] // $xFDB
+ public byte Version;
+ [MarshalAs(UnmanagedType.U2)] // $xFDC
+ public ushort ChecksumComplement;
+ [MarshalAs(UnmanagedType.U2)] // $xFDE
+ public ushort Checksum;
+
+ public byte[] GetBytes()
+ {
+ int size = Marshal.SizeOf(this);
+ byte[] arr = new byte[size];
+
+ IntPtr ptr = Marshal.AllocHGlobal(size);
+ Marshal.StructureToPtr(this, ptr, true);
+ Marshal.Copy(ptr, arr, 0, size);
+ Marshal.FreeHGlobal(ptr);
+ return arr;
+ }
+
+ public static SnesRomHeader Read(byte[] buffer, int pos)
+ {
+ var size = Marshal.SizeOf(typeof(SnesRomHeader));
+ IntPtr ptr = Marshal.AllocHGlobal(size);
+ Marshal.Copy(buffer, pos, ptr, size);
+ var r = (SnesRomHeader)Marshal.PtrToStructure(ptr, typeof(SnesRomHeader));
+ Marshal.FreeHGlobal(ptr);
+ return r;
+ }
+ }
+
+
+ [StructLayout(LayoutKind.Sequential)]
+ private struct SfromHeader1
+ {
+ [MarshalAs(UnmanagedType.U4)]
+ public uint Uknown1_0x00000100;
+ [MarshalAs(UnmanagedType.U4)]
+ public uint FileSize;
+ [MarshalAs(UnmanagedType.U4)]
+ public uint Uknown2_0x00000030;
+ [MarshalAs(UnmanagedType.U4)]
+ public uint RomEnd;
+ [MarshalAs(UnmanagedType.U4)]
+ public uint FooterStart;
+ [MarshalAs(UnmanagedType.U4)]
+ public uint Header2;
+ [MarshalAs(UnmanagedType.U4)]
+ public uint FileSize2;
+ [MarshalAs(UnmanagedType.U4)]
+ public uint Uknown3_0x00000000;
+ [MarshalAs(UnmanagedType.U4)]
+ public uint Flags;
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
+ public byte[] VCGameID;
+ [MarshalAs(UnmanagedType.U4)]
+ public uint Uknown4_0x00000000;
+
+ public SfromHeader1(uint romSize)
+ {
+ Uknown1_0x00000100 = 0x00000100;
+ FileSize = (uint)(48 + romSize + 38);
+ Uknown2_0x00000030 = 0x00000030;
+ RomEnd = (uint)(48 + romSize);
+ FooterStart = FileSize;
+ Header2 = RomEnd;
+ FileSize2 = FileSize;
+ Uknown3_0x00000000 = 0;
+ Flags = FileSize - 11;
+ VCGameID = new byte[8];
+ var VCGameID_s = Encoding.ASCII.GetBytes("WUP-XXXX");
+ Array.Copy(VCGameID_s, VCGameID, VCGameID_s.Length);
+ Uknown4_0x00000000 = 0;
+ }
+
+ public byte[] GetBytes()
+ {
+ int size = Marshal.SizeOf(this);
+ byte[] arr = new byte[size];
+
+ IntPtr ptr = Marshal.AllocHGlobal(size);
+ Marshal.StructureToPtr(this, ptr, true);
+ Marshal.Copy(ptr, arr, 0, size);
+ Marshal.FreeHGlobal(ptr);
+ return arr;
+ }
+
+ public static SfromHeader1 Read(byte[] buffer, int pos)
+ {
+ var size = Marshal.SizeOf(typeof(SfromHeader1));
+ IntPtr ptr = Marshal.AllocHGlobal(size);
+ Marshal.Copy(buffer, pos, ptr, size);
+ var r = (SfromHeader1)Marshal.PtrToStructure(ptr, typeof(SfromHeader1));
+ Marshal.FreeHGlobal(ptr);
+ return r;
+ }
+ }
+
+ [StructLayout(LayoutKind.Sequential, Pack = 1)]
+ private struct SfromHeader2
+ {
+ [MarshalAs(UnmanagedType.U1)] // 0x00
+ public byte FPS;
+ [MarshalAs(UnmanagedType.U4)] // 0x01
+ public uint RomSize;
+ [MarshalAs(UnmanagedType.U4)] // 0x05
+ public uint PcmSize;
+ [MarshalAs(UnmanagedType.U4)] // 0x09
+ public uint FooterSize;
+ [MarshalAs(UnmanagedType.U2)] // 0x0D
+ public ushort PresetID;
+ [MarshalAs(UnmanagedType.U1)] // 0x0F
+ public byte Mostly2;
+ [MarshalAs(UnmanagedType.U1)] // 0x10
+ public byte Volume;
+ [MarshalAs(UnmanagedType.U1)] // 0x11
+ public byte RomType;
+ [MarshalAs(UnmanagedType.U4)] // 0x12
+ public uint Chip;
+ [MarshalAs(UnmanagedType.U4)] // 0x16
+ public uint Unknown1_0x00000000;
+ [MarshalAs(UnmanagedType.U4)] // 0x1A
+ public uint Unknown2_0x00000100;
+ [MarshalAs(UnmanagedType.U4)] // 0x1E
+ public uint Unknown3_0x00000100;
+ [MarshalAs(UnmanagedType.U4)]
+ public uint Unknown4_0x00000000;
+
+ public SfromHeader2(uint romSize, ushort presetId, SnesRomType romType, uint chip)
+ {
+ FPS = 60;
+ RomSize = romSize;
+ PcmSize = 0;
+ FooterSize = 0;
+ PresetID = presetId;
+ Mostly2 = 2;
+ Volume = 100;
+ RomType = (byte)romType;
+ Chip = chip;
+ Unknown1_0x00000000 = 0x00000000;
+ Unknown2_0x00000100 = 0x00000100;
+ Unknown3_0x00000100 = 0x00000100;
+ Unknown4_0x00000000 = 0x00000000;
+ }
+
+ public byte[] GetBytes()
+ {
+ int size = Marshal.SizeOf(this);
+ byte[] arr = new byte[size];
+
+ IntPtr ptr = Marshal.AllocHGlobal(size);
+ Marshal.StructureToPtr(this, ptr, true);
+ Marshal.Copy(ptr, arr, 0, size);
+ Marshal.FreeHGlobal(ptr);
+ return arr;
+ }
+
+ public static SfromHeader2 Read(byte[] buffer, int pos)
+ {
+ var size = Marshal.SizeOf(typeof(SfromHeader2));
+ IntPtr ptr = Marshal.AllocHGlobal(size);
+ Marshal.Copy(buffer, pos, ptr, size);
+ var r = (SfromHeader2)Marshal.PtrToStructure(ptr, typeof(SfromHeader2));
+ Marshal.FreeHGlobal(ptr);
+ return r;
+ }
+ }
+
+ private enum SnesRomType { LoRom = 0x14, HiRom = 0x15 };
}
}
diff --git a/MainForm.Designer.cs b/MainForm.Designer.cs
index 542d3545..1a38437e 100644
--- a/MainForm.Designer.cs
+++ b/MainForm.Designer.cs
@@ -73,7 +73,7 @@
this.upABStartOnSecondControllerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.useExtendedFontToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.epilepsyProtectionToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.compressGamesIfPossibleToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.compressGamesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.pagesfoldersTypeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.disablePagefoldersToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripMenuItem3 = new System.Windows.Forms.ToolStripSeparator();
@@ -119,6 +119,8 @@
this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.checkedListBoxGames = new System.Windows.Forms.CheckedListBox();
this.groupBoxOptions = new System.Windows.Forms.GroupBox();
+ this.labelSize = new System.Windows.Forms.Label();
+ this.checkBoxCompressed = new System.Windows.Forms.CheckBox();
this.buttonShowGameGenieDatabase = new System.Windows.Forms.Button();
this.maskedTextBoxReleaseDate = new System.Windows.Forms.MaskedTextBox();
this.label1 = new System.Windows.Forms.Label();
@@ -159,8 +161,6 @@
this.timerConnectionCheck = new System.Windows.Forms.Timer(this.components);
this.saveDumpFileDialog = new System.Windows.Forms.SaveFileDialog();
this.openDumpFileDialog = new System.Windows.Forms.OpenFileDialog();
- this.checkBoxCompressed = new System.Windows.Forms.CheckBox();
- this.labelSize = new System.Windows.Forms.Label();
this.menuStrip.SuspendLayout();
this.groupBoxOptions.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBoxArt)).BeginInit();
@@ -369,8 +369,8 @@
this.cloverconHackToolStripMenuItem,
this.useExtendedFontToolStripMenuItem,
this.epilepsyProtectionToolStripMenuItem,
- this.compressGamesIfPossibleToolStripMenuItem,
this.pagesfoldersTypeToolStripMenuItem,
+ this.compressGamesToolStripMenuItem,
this.globalCommandLineArgumentsexpertsOnluToolStripMenuItem,
this.toolStripMenuItem5,
this.saveSettingsToNESMiniNowToolStripMenuItem});
@@ -481,12 +481,14 @@
resources.ApplyResources(this.epilepsyProtectionToolStripMenuItem, "epilepsyProtectionToolStripMenuItem");
this.epilepsyProtectionToolStripMenuItem.Click += new System.EventHandler(this.ToolStripMenuItemArmet_Click);
//
- // compressGamesIfPossibleToolStripMenuItem
+ // compressGamesToolStripMenuItem
//
- this.compressGamesIfPossibleToolStripMenuItem.CheckOnClick = true;
- this.compressGamesIfPossibleToolStripMenuItem.Name = "compressGamesIfPossibleToolStripMenuItem";
- resources.ApplyResources(this.compressGamesIfPossibleToolStripMenuItem, "compressGamesIfPossibleToolStripMenuItem");
- this.compressGamesIfPossibleToolStripMenuItem.Click += new System.EventHandler(this.compressGamesIfPossibleToolStripMenuItem_Click);
+ this.compressGamesToolStripMenuItem.Checked = true;
+ this.compressGamesToolStripMenuItem.CheckOnClick = true;
+ this.compressGamesToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked;
+ this.compressGamesToolStripMenuItem.Name = "compressGamesToolStripMenuItem";
+ resources.ApplyResources(this.compressGamesToolStripMenuItem, "compressGamesToolStripMenuItem");
+ this.compressGamesToolStripMenuItem.Click += new System.EventHandler(this.compressGamesToolStripMenuItem_Click);
//
// pagesfoldersTypeToolStripMenuItem
//
@@ -794,7 +796,6 @@
// checkedListBoxGames
//
resources.ApplyResources(this.checkedListBoxGames, "checkedListBoxGames");
- this.checkedListBoxGames.FormattingEnabled = true;
this.checkedListBoxGames.Name = "checkedListBoxGames";
this.checkedListBoxGames.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.checkedListBoxGames_ItemCheck);
this.checkedListBoxGames.SelectedIndexChanged += new System.EventHandler(this.checkedListBoxGames_SelectedIndexChanged);
@@ -829,6 +830,18 @@
this.groupBoxOptions.Name = "groupBoxOptions";
this.groupBoxOptions.TabStop = false;
//
+ // labelSize
+ //
+ resources.ApplyResources(this.labelSize, "labelSize");
+ this.labelSize.Name = "labelSize";
+ //
+ // checkBoxCompressed
+ //
+ resources.ApplyResources(this.checkBoxCompressed, "checkBoxCompressed");
+ this.checkBoxCompressed.Name = "checkBoxCompressed";
+ this.checkBoxCompressed.UseVisualStyleBackColor = true;
+ this.checkBoxCompressed.CheckedChanged += new System.EventHandler(this.checkBoxCompressed_CheckedChanged);
+ //
// buttonShowGameGenieDatabase
//
resources.ApplyResources(this.buttonShowGameGenieDatabase, "buttonShowGameGenieDatabase");
@@ -1083,18 +1096,6 @@
//
this.openDumpFileDialog.FileName = "...";
//
- // checkBoxCompressed
- //
- resources.ApplyResources(this.checkBoxCompressed, "checkBoxCompressed");
- this.checkBoxCompressed.Name = "checkBoxCompressed";
- this.checkBoxCompressed.UseVisualStyleBackColor = true;
- this.checkBoxCompressed.CheckedChanged += new System.EventHandler(this.checkBoxCompressed_CheckedChanged);
- //
- // labelSize
- //
- resources.ApplyResources(this.labelSize, "labelSize");
- this.labelSize.Name = "labelSize";
- //
// MainForm
//
this.AllowDrop = true;
@@ -1239,7 +1240,6 @@
private System.Windows.Forms.Timer timerConnectionCheck;
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem5;
private System.Windows.Forms.ToolStripMenuItem saveSettingsToNESMiniNowToolStripMenuItem;
- private System.Windows.Forms.ToolStripMenuItem compressGamesIfPossibleToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem toolsToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem saveStateManagerToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem FTPToolStripMenuItem;
@@ -1265,6 +1265,7 @@
private System.Windows.Forms.ToolStripMenuItem membootOriginalKernelToolStripMenuItem;
private System.Windows.Forms.CheckBox checkBoxCompressed;
private System.Windows.Forms.Label labelSize;
+ private System.Windows.Forms.ToolStripMenuItem compressGamesToolStripMenuItem;
}
}
diff --git a/MainForm.cs b/MainForm.cs
index e3c9f857..13085ea7 100644
--- a/MainForm.cs
+++ b/MainForm.cs
@@ -162,7 +162,7 @@ namespace com.clusterrr.hakchi_gui
enableAutofireToolStripMenuItem.Checked = ConfigIni.AutofireHack;
useXYOnClassicControllerAsAutofireABToolStripMenuItem.Checked = ConfigIni.AutofireXYHack;
upABStartOnSecondControllerToolStripMenuItem.Checked = ConfigIni.FcStart;
- compressGamesIfPossibleToolStripMenuItem.Checked = ConfigIni.Compress;
+ compressGamesToolStripMenuItem.Checked = ConfigIni.Compress;
disablePagefoldersToolStripMenuItem.Checked = (byte)ConfigIni.FoldersMode == 0;
automaticToolStripMenuItem.Checked = (byte)ConfigIni.FoldersMode == 2;
@@ -656,7 +656,7 @@ namespace com.clusterrr.hakchi_gui
{
// Maybe type was changed? Need to reload games
if ((game as NesMiniApplication).Save())
- checkedListBoxGames.Items[i] = NesMiniApplication.FromDirectory((game as NesMiniApplication).Path);
+ checkedListBoxGames.Items[i] = NesMiniApplication.FromDirectory((game as NesMiniApplication).GamePath);
}
}
catch (Exception ex)
@@ -1320,7 +1320,7 @@ namespace com.clusterrr.hakchi_gui
var game = checkedListBoxGames.Items[pos] as NesMiniApplication;
if (MessageBox.Show(this, string.Format(Resources.DeleteGame, game.Name), Resources.AreYouSure, MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == System.Windows.Forms.DialogResult.Yes)
{
- Directory.Delete(game.Path, true);
+ Directory.Delete(game.GamePath, true);
checkedListBoxGames.Items.RemoveAt(pos);
}
}
@@ -1450,10 +1450,10 @@ namespace com.clusterrr.hakchi_gui
max90toolStripMenuItem.Checked = ConfigIni.MaxGamesPerFolder == 90;
max100toolStripMenuItem.Checked = ConfigIni.MaxGamesPerFolder == 100;
}
-
- private void compressGamesIfPossibleToolStripMenuItem_Click(object sender, EventArgs e)
+
+ private void compressGamesToolStripMenuItem_Click(object sender, EventArgs e)
{
- ConfigIni.Compress = compressGamesIfPossibleToolStripMenuItem.Checked;
+ ConfigIni.Compress = compressGamesToolStripMenuItem.Checked;
}
private void buttonShowGameGenieDatabase_Click(object sender, EventArgs e)
@@ -1713,6 +1713,7 @@ namespace com.clusterrr.hakchi_gui
else
selected.Decompress();
selected.Save();
+ timerCalculateGames.Enabled = true;
ShowSelected();
}
catch (Exception ex)
diff --git a/MainForm.resx b/MainForm.resx
index 14b38805..2e4697a9 100644
--- a/MainForm.resx
+++ b/MainForm.resx
@@ -121,6 +121,122 @@
<value>315, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+ <data name="fileToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
+ <value>37, 20</value>
+ </data>
+ <data name="fileToolStripMenuItem.Text" xml:space="preserve">
+ <value>&amp;File</value>
+ </data>
+ <data name="kernelToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
+ <value>52, 20</value>
+ </data>
+ <data name="kernelToolStripMenuItem.Text" xml:space="preserve">
+ <value>&amp;Kernel</value>
+ </data>
+ <data name="modulesToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
+ <value>65, 20</value>
+ </data>
+ <data name="modulesToolStripMenuItem.Text" xml:space="preserve">
+ <value>&amp;Modules</value>
+ </data>
+ <data name="languageToolStripMenuItem.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAA0BJREFUOE91
+ k31Qy3Ecx39TuqPrPPVHqW1cHmZrq8zKsqxpKzYPc+hhbpU8DUMllkxW2M3VnKeIphBOpTuVY51E3HAe
+ SpEreUy1TlQ4lKO3X/O7czivu/d9/nm/Pvf9/PEl/maGTE5LP2BxKbU1zLQ974qva+tNrGl8HWrMyXem
+ Kv9ne36xa3VL185H7T1dj9t7UPumG7Wt79Hc+QGNHb3vbC/f6qnqv2zIq3BVW82X1jYsh/VZB441lSGt
+ xQ5LSztM9+xYfb4FmpNXoLmadjYwVvXna3jhy2izc7NLZ93iI+GBAuWthXjysRKFPZ1YY/+KhJsdiMtr
+ QMyeKujuajHfuOsQpf7CT2FaxLVOHYio94e+WYWHvVbU9nWhrL8fiZ19iKtpQ+zxBij1NiSVmCGJNw34
+ KrVBlE4QvhG7rzHKvcC6yEJs41IYu7tR0Pcd5k/fsOr5B0RWvkJ0bh3m6W5iwbZCHG6KRExx1AmH7M4M
+ d/EJTuv3yVSAv6MEEZevY1H9OywjRXVTD1S3O6AoaoYy6x7CtdegyjYhszYU6qqFrY4Fo7xm0encFEzQ
+ xIC7/gSCcm5AWPQU4osvEVr+AuIzzZDuf4gInQ0zoisRvTcN2utCBJ/i/3AsGOkpcR/LShpg8lPBWWkC
+ b10NhDurMW3PA0zPqkNI5n1INpGyugrc0Avgr0gH+ygDE3VzvjgWDMLg6toYbAPY0kOYsiEJvtuTIdSd
+ wvQV1QiOq4JgodUhTxGeBVtkAUepB0e+4w6lE8SkQIN5PC8Dk4P3w22LJ9wyxsAzzxssQyS4YUXgzCwG
+ R3wavhILuNLD8JPvA0dqTKR0ghBJN3sIZ+/tFskPwCdVANd1YzAseRRGGDzATJWBlZKAgKgcCJbkQ6Qu
+ QJim8MVEsXY4pf9CqsyWixTmfpFaD7ZRCLqBBY/dPvA+yAPvSCRkm0swN70Cyoyyz/QAmWTocDcapf6G
+ MUEiF4RtfSvemIyQgigEnpNBcnwjFmSfgSr3BjlL34wez9aQVX8yIx3SXzjRhjgHuDPZB8fJBPVB8Rp7
+ iDrTLohOqacLwiw0J+fFZCeQjDcZl0Hhfwx+lhFkxpJhUnM0mcG7nchQEMRPy1alIv5O+PUAAAAASUVO
+ RK5CYII=
+</value>
+ </data>
+ <data name="languageToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
+ <value>327, 22</value>
+ </data>
+ <data name="languageToolStripMenuItem.Text" xml:space="preserve">
+ <value>Language</value>
+ </data>
+ <data name="consoleTypeToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
+ <value>327, 22</value>
+ </data>
+ <data name="consoleTypeToolStripMenuItem.Text" xml:space="preserve">
+ <value>Console type</value>
+ </data>
+ <data name="cloverconHackToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
+ <value>327, 22</value>
+ </data>
+ <data name="cloverconHackToolStripMenuItem.Text" xml:space="preserve">
+ <value>Controller hacks</value>
+ </data>
+ <data name="useExtendedFontToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
+ <value>327, 22</value>
+ </data>
+ <data name="useExtendedFontToolStripMenuItem.Text" xml:space="preserve">
+ <value>Use extended font</value>
+ </data>
+ <data name="epilepsyProtectionToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
+ <value>327, 22</value>
+ </data>
+ <data name="epilepsyProtectionToolStripMenuItem.Text" xml:space="preserve">
+ <value>Disable epilepsy protection</value>
+ </data>
+ <data name="pagesfoldersTypeToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
+ <value>327, 22</value>
+ </data>
+ <data name="pagesfoldersTypeToolStripMenuItem.Text" xml:space="preserve">
+ <value>Pages/folders structure</value>
+ </data>
+ <data name="compressGamesToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
+ <value>327, 22</value>
+ </data>
+ <data name="compressGamesToolStripMenuItem.Text" xml:space="preserve">
+ <value>Compress games</value>
+ </data>
+ <data name="globalCommandLineArgumentsexpertsOnluToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
+ <value>327, 22</value>
+ </data>
+ <data name="globalCommandLineArgumentsexpertsOnluToolStripMenuItem.Text" xml:space="preserve">
+ <value>Global command-line arguments (experts only!)</value>
+ </data>
+ <data name="toolStripMenuItem5.Size" type="System.Drawing.Size, System.Drawing">
+ <value>324, 6</value>
+ </data>
+ <data name="saveSettingsToNESMiniNowToolStripMenuItem.Font" type="System.Drawing.Font, System.Drawing">
+ <value>Segoe UI, 9pt, style=Bold</value>
+ </data>
+ <data name="saveSettingsToNESMiniNowToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
+ <value>327, 22</value>
+ </data>
+ <data name="saveSettingsToNESMiniNowToolStripMenuItem.Text" xml:space="preserve">
+ <value>Save settings to NES/SNES Mini now</value>
+ </data>
+ <data name="settingsToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
+ <value>61, 20</value>
+ </data>
+ <data name="settingsToolStripMenuItem.Text" xml:space="preserve">
+ <value>&amp;Settings</value>
+ </data>
+ <data name="toolsToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
+ <value>47, 20</value>
+ </data>
+ <data name="toolsToolStripMenuItem.Text" xml:space="preserve">
+ <value>&amp;Tools</value>
+ </data>
+ <data name="helpToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
+ <value>44, 20</value>
+ </data>
+ <data name="helpToolStripMenuItem.Text" xml:space="preserve">
+ <value>&amp;Help</value>
+ </data>
<data name="menuStrip.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
@@ -146,12 +262,6 @@
<data name="&gt;&gt;menuStrip.ZOrder" xml:space="preserve">
<value>6</value>
</data>
- <data name="fileToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
- <value>37, 20</value>
- </data>
- <data name="fileToolStripMenuItem.Text" xml:space="preserve">
- <value>&amp;File</value>
- </data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="addMoreGamesToolStripMenuItem.ShortcutKeys" type="System.Windows.Forms.Keys, System.Windows.Forms">
<value>Ctrl+O</value>
@@ -216,12 +326,6 @@
<data name="exitToolStripMenuItem.Text" xml:space="preserve">
<value>&amp;Exit</value>
</data>
- <data name="kernelToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
- <value>52, 20</value>
- </data>
- <data name="kernelToolStripMenuItem.Text" xml:space="preserve">
- <value>&amp;Kernel</value>
- </data>
<data name="dumpKernelToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>270, 22</value>
</data>
@@ -288,12 +392,6 @@
<data name="uninstallToolStripMenuItem.Text" xml:space="preserve">
<value>Uninstall</value>
</data>
- <data name="modulesToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
- <value>65, 20</value>
- </data>
- <data name="modulesToolStripMenuItem.Text" xml:space="preserve">
- <value>&amp;Modules</value>
- </data>
<data name="installModulesToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>197, 22</value>
</data>
@@ -306,44 +404,6 @@
<data name="uninstallModulesToolStripMenuItem.Text" xml:space="preserve">
<value>Uninstall extra modules</value>
</data>
- <data name="settingsToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
- <value>61, 20</value>
- </data>
- <data name="settingsToolStripMenuItem.Text" xml:space="preserve">
- <value>&amp;Settings</value>
- </data>
- <data name="languageToolStripMenuItem.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
- <value>
- iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAA0BJREFUOE91
- k31Qy3Ecx39TuqPrPPVHqW1cHmZrq8zKsqxpKzYPc+hhbpU8DUMllkxW2M3VnKeIphBOpTuVY51E3HAe
- SpEreUy1TlQ4lKO3X/O7czivu/d9/nm/Pvf9/PEl/maGTE5LP2BxKbU1zLQ974qva+tNrGl8HWrMyXem
- Kv9ne36xa3VL185H7T1dj9t7UPumG7Wt79Hc+QGNHb3vbC/f6qnqv2zIq3BVW82X1jYsh/VZB441lSGt
- xQ5LSztM9+xYfb4FmpNXoLmadjYwVvXna3jhy2izc7NLZ93iI+GBAuWthXjysRKFPZ1YY/+KhJsdiMtr
- QMyeKujuajHfuOsQpf7CT2FaxLVOHYio94e+WYWHvVbU9nWhrL8fiZ19iKtpQ+zxBij1NiSVmCGJNw34
- KrVBlE4QvhG7rzHKvcC6yEJs41IYu7tR0Pcd5k/fsOr5B0RWvkJ0bh3m6W5iwbZCHG6KRExx1AmH7M4M
- d/EJTuv3yVSAv6MEEZevY1H9OywjRXVTD1S3O6AoaoYy6x7CtdegyjYhszYU6qqFrY4Fo7xm0encFEzQ
- xIC7/gSCcm5AWPQU4osvEVr+AuIzzZDuf4gInQ0zoisRvTcN2utCBJ/i/3AsGOkpcR/LShpg8lPBWWkC
- b10NhDurMW3PA0zPqkNI5n1INpGyugrc0Avgr0gH+ygDE3VzvjgWDMLg6toYbAPY0kOYsiEJvtuTIdSd
- wvQV1QiOq4JgodUhTxGeBVtkAUepB0e+4w6lE8SkQIN5PC8Dk4P3w22LJ9wyxsAzzxssQyS4YUXgzCwG
- R3wavhILuNLD8JPvA0dqTKR0ghBJN3sIZ+/tFskPwCdVANd1YzAseRRGGDzATJWBlZKAgKgcCJbkQ6Qu
- QJim8MVEsXY4pf9CqsyWixTmfpFaD7ZRCLqBBY/dPvA+yAPvSCRkm0swN70Cyoyyz/QAmWTocDcapf6G
- MUEiF4RtfSvemIyQgigEnpNBcnwjFmSfgSr3BjlL34wez9aQVX8yIx3SXzjRhjgHuDPZB8fJBPVB8Rp7
- iDrTLohOqacLwiw0J+fFZCeQjDcZl0Hhfwx+lhFkxpJhUnM0mcG7nchQEMRPy1alIv5O+PUAAAAASUVO
- RK5CYII=
-</value>
- </data>
- <data name="languageToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
- <value>376, 22</value>
- </data>
- <data name="languageToolStripMenuItem.Text" xml:space="preserve">
- <value>Language</value>
- </data>
- <data name="consoleTypeToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
- <value>376, 22</value>
- </data>
- <data name="consoleTypeToolStripMenuItem.Text" xml:space="preserve">
- <value>Console type</value>
- </data>
<data name="nESMiniToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>184, 22</value>
</data>
@@ -371,12 +431,6 @@
<data name="superFamicomMiniToolStripMenuItem.Text" xml:space="preserve">
<value>Super Famicom Mini</value>
</data>
- <data name="cloverconHackToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
- <value>376, 22</value>
- </data>
- <data name="cloverconHackToolStripMenuItem.Text" xml:space="preserve">
- <value>Controller hacks</value>
- </data>
<data name="resetUsingCombinationOfButtonsToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>308, 22</value>
</data>
@@ -407,30 +461,6 @@
<data name="upABStartOnSecondControllerToolStripMenuItem.Text" xml:space="preserve">
<value>"Up+A+B = Start" on 2nd controller</value>
</data>
- <data name="useExtendedFontToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
- <value>376, 22</value>
- </data>
- <data name="useExtendedFontToolStripMenuItem.Text" xml:space="preserve">
- <value>Use extended font</value>
- </data>
- <data name="epilepsyProtectionToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
- <value>376, 22</value>
- </data>
- <data name="epilepsyProtectionToolStripMenuItem.Text" xml:space="preserve">
- <value>Disable epilepsy protection</value>
- </data>
- <data name="compressGamesIfPossibleToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
- <value>376, 22</value>
- </data>
- <data name="compressGamesIfPossibleToolStripMenuItem.Text" xml:space="preserve">
- <value>Compress non-NES games (for additional emulator mod)</value>
- </data>
- <data name="pagesfoldersTypeToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
- <value>376, 22</value>
- </data>
- <data name="pagesfoldersTypeToolStripMenuItem.Text" xml:space="preserve">
- <value>Pages/folders structure</value>
- </data>
<data name="disablePagefoldersToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>356, 22</value>
</data>
@@ -581,30 +611,6 @@
<data name="customToolStripMenuItem.Text" xml:space="preserve">
<value>Custom - show Folders Manager every time</value>
</data>
- <data name="globalCommandLineArgumentsexpertsOnluToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
- <value>376, 22</value>
- </data>
- <data name="globalCommandLineArgumentsexpertsOnluToolStripMenuItem.Text" xml:space="preserve">
- <value>Global command-line arguments (experts only!)</value>
- </data>
- <data name="toolStripMenuItem5.Size" type="System.Drawing.Size, System.Drawing">
- <value>373, 6</value>
- </data>
- <data name="saveSettingsToNESMiniNowToolStripMenuItem.Font" type="System.Drawing.Font, System.Drawing">
- <value>Segoe UI, 9pt, style=Bold</value>
- </data>
- <data name="saveSettingsToNESMiniNowToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
- <value>376, 22</value>
- </data>
- <data name="saveSettingsToNESMiniNowToolStripMenuItem.Text" xml:space="preserve">
- <value>Save settings to NES/SNES Mini now</value>
- </data>
- <data name="toolsToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
- <value>47, 20</value>
- </data>
- <data name="toolsToolStripMenuItem.Text" xml:space="preserve">
- <value>&amp;Tools</value>
- </data>
<data name="saveStateManagerToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>331, 22</value>
</data>
@@ -656,12 +662,6 @@
<data name="takeScreenshotToolStripMenuItem.Text" xml:space="preserve">
<value>Take screenshot</value>
</data>
- <data name="helpToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
- <value>44, 20</value>
- </data>
- <data name="helpToolStripMenuItem.Text" xml:space="preserve">
- <value>&amp;Help</value>
- </data>
<data name="gitHubPageWithActualReleasesToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>246, 22</value>
</data>
@@ -707,6 +707,294 @@
<data name="groupBoxOptions.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>None</value>
</data>
+ <data name="&gt;&gt;labelSize.Name" xml:space="preserve">
+ <value>labelSize</value>
+ </data>
+ <data name="&gt;&gt;labelSize.Type" xml:space="preserve">
+ <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </data>
+ <data name="&gt;&gt;labelSize.Parent" xml:space="preserve">
+ <value>groupBoxOptions</value>
+ </data>
+ <data name="&gt;&gt;labelSize.ZOrder" xml:space="preserve">
+ <value>0</value>
+ </data>
+ <data name="&gt;&gt;checkBoxCompressed.Name" xml:space="preserve">
+ <value>checkBoxCompressed</value>
+ </data>
+ <data name="&gt;&gt;checkBoxCompressed.Type" xml:space="preserve">
+ <value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </data>
+ <data name="&gt;&gt;checkBoxCompressed.Parent" xml:space="preserve">
+ <value>groupBoxOptions</value>
+ </data>
+ <data name="&gt;&gt;checkBoxCompressed.ZOrder" xml:space="preserve">
+ <value>1</value>
+ </data>
+ <data name="&gt;&gt;buttonShowGameGenieDatabase.Name" xml:space="preserve">
+ <value>buttonShowGameGenieDatabase</value>
+ </data>
+ <data name="&gt;&gt;buttonShowGameGenieDatabase.Type" xml:space="preserve">
+ <value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </data>
+ <data name="&gt;&gt;buttonShowGameGenieDatabase.Parent" xml:space="preserve">
+ <value>groupBoxOptions</value>
+ </data>
+ <data name="&gt;&gt;buttonShowGameGenieDatabase.ZOrder" xml:space="preserve">
+ <value>2</value>
+ </data>
+ <data name="&gt;&gt;maskedTextBoxReleaseDate.Name" xml:space="preserve">
+ <value>maskedTextBoxReleaseDate</value>
+ </data>
+ <data name="&gt;&gt;maskedTextBoxReleaseDate.Type" xml:space="preserve">
+ <value>System.Windows.Forms.MaskedTextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </data>
+ <data name="&gt;&gt;maskedTextBoxReleaseDate.Parent" xml:space="preserve">
+ <value>groupBoxOptions</value>
+ </data>
+ <data name="&gt;&gt;maskedTextBoxReleaseDate.ZOrder" xml:space="preserve">
+ <value>3</value>
+ </data>
+ <data name="&gt;&gt;label1.Name" xml:space="preserve">
+ <value>label1</value>
+ </data>
+ <data name="&gt;&gt;label1.Type" xml:space="preserve">
+ <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </data>
+ <data name="&gt;&gt;label1.Parent" xml:space="preserve">
+ <value>groupBoxOptions</value>
+ </data>
+ <data name="&gt;&gt;label1.ZOrder" xml:space="preserve">
+ <value>4</value>
+ </data>
+ <data name="&gt;&gt;textBoxGameGenie.Name" xml:space="preserve">
+ <value>textBoxGameGenie</value>
+ </data>
+ <data name="&gt;&gt;textBoxGameGenie.Type" xml:space="preserve">
+ <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </data>
+ <data name="&gt;&gt;textBoxGameGenie.Parent" xml:space="preserve">
+ <value>groupBoxOptions</value>
+ </data>
+ <data name="&gt;&gt;textBoxGameGenie.ZOrder" xml:space="preserve">
+ <value>5</value>
+ </data>
+ <data name="&gt;&gt;label7.Name" xml:space="preserve">
+ <value>label7</value>
+ </data>
+ <data name="&gt;&gt;label7.Type" xml:space="preserve">
+ <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </data>
+ <data name="&gt;&gt;label7.Parent" xml:space="preserve">
+ <value>groupBoxOptions</value>
+ </data>
+ <data name="&gt;&gt;label7.ZOrder" xml:space="preserve">
+ <value>6</value>
+ </data>
+ <data name="&gt;&gt;label6.Name" xml:space="preserve">
+ <value>label6</value>
+ </data>
+ <data name="&gt;&gt;label6.Type" xml:space="preserve">
+ <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </data>
+ <data name="&gt;&gt;label6.Parent" xml:space="preserve">
+ <value>groupBoxOptions</value>
+ </data>
+ <data name="&gt;&gt;label6.ZOrder" xml:space="preserve">
+ <value>7</value>
+ </data>
+ <data name="&gt;&gt;radioButtonTwoSim.Name" xml:space="preserve">
+ <value>radioButtonTwoSim</value>
+ </data>
+ <data name="&gt;&gt;radioButtonTwoSim.Type" xml:space="preserve">
+ <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </data>
+ <data name="&gt;&gt;radioButtonTwoSim.Parent" xml:space="preserve">
+ <value>groupBoxOptions</value>
+ </data>
+ <data name="&gt;&gt;radioButtonTwoSim.ZOrder" xml:space="preserve">
+ <value>8</value>
+ </data>
+ <data name="&gt;&gt;buttonGoogle.Name" xml:space="preserve">
+ <value>buttonGoogle</value>
+ </data>
+ <data name="&gt;&gt;buttonGoogle.Type" xml:space="preserve">
+ <value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </data>
+ <data name="&gt;&gt;buttonGoogle.Parent" xml:space="preserve">
+ <value>groupBoxOptions</value>
+ </data>
+ <data name="&gt;&gt;buttonGoogle.ZOrder" xml:space="preserve">
+ <value>9</value>
+ </data>
+ <data name="&gt;&gt;buttonBrowseImage.Name" xml:space="preserve">
+ <value>buttonBrowseImage</value>
+ </data>
+ <data name="&gt;&gt;buttonBrowseImage.Type" xml:space="preserve">
+ <value>System.Windows.Forms.Button, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </data>
+ <data name="&gt;&gt;buttonBrowseImage.Parent" xml:space="preserve">
+ <value>groupBoxOptions</value>
+ </data>
+ <data name="&gt;&gt;buttonBrowseImage.ZOrder" xml:space="preserve">
+ <value>10</value>
+ </data>
+ <data name="&gt;&gt;pictureBoxArt.Name" xml:space="preserve">
+ <value>pictureBoxArt</value>
+ </data>
+ <data name="&gt;&gt;pictureBoxArt.Type" xml:space="preserve">
+ <value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </data>
+ <data name="&gt;&gt;pictureBoxArt.Parent" xml:space="preserve">
+ <value>groupBoxOptions</value>
+ </data>
+ <data name="&gt;&gt;pictureBoxArt.ZOrder" xml:space="preserve">
+ <value>11</value>
+ </data>
+ <data name="&gt;&gt;label4.Name" xml:space="preserve">
+ <value>label4</value>
+ </data>
+ <data name="&gt;&gt;label4.Type" xml:space="preserve">
+ <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </data>
+ <data name="&gt;&gt;label4.Parent" xml:space="preserve">
+ <value>groupBoxOptions</value>
+ </data>
+ <data name="&gt;&gt;label4.ZOrder" xml:space="preserve">
+ <value>12</value>
+ </data>
+ <data name="&gt;&gt;textBoxArguments.Name" xml:space="preserve">
+ <value>textBoxArguments</value>
+ </data>
+ <data name="&gt;&gt;textBoxArguments.Type" xml:space="preserve">
+ <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </data>
+ <data name="&gt;&gt;textBoxArguments.Parent" xml:space="preserve">
+ <value>groupBoxOptions</value>
+ </data>
+ <data name="&gt;&gt;textBoxArguments.ZOrder" xml:space="preserve">
+ <value>13</value>
+ </data>
+ <data name="&gt;&gt;label3.Name" xml:space="preserve">
+ <value>label3</value>
+ </data>
+ <data name="&gt;&gt;label3.Type" xml:space="preserve">
+ <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </data>
+ <data name="&gt;&gt;label3.Parent" xml:space="preserve">
+ <value>groupBoxOptions</value>
+ </data>
+ <data name="&gt;&gt;label3.ZOrder" xml:space="preserve">
+ <value>14</value>
+ </data>
+ <data name="&gt;&gt;textBoxPublisher.Name" xml:space="preserve">
+ <value>textBoxPublisher</value>
+ </data>
+ <data name="&gt;&gt;textBoxPublisher.Type" xml:space="preserve">
+ <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </data>
+ <data name="&gt;&gt;textBoxPublisher.Parent" xml:space="preserve">
+ <value>groupBoxOptions</value>
+ </data>
+ <data name="&gt;&gt;textBoxPublisher.ZOrder" xml:space="preserve">
+ <value>15</value>
+ </data>
+ <data name="&gt;&gt;label2.Name" xml:space="preserve">
+ <value>label2</value>
+ </data>
+ <data name="&gt;&gt;label2.Type" xml:space="preserve">
+ <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </data>
+ <data name="&gt;&gt;label2.Parent" xml:space="preserve">
+ <value>groupBoxOptions</value>
+ </data>
+ <data name="&gt;&gt;label2.ZOrder" xml:space="preserve">
+ <value>16</value>
+ </data>
+ <data name="&gt;&gt;radioButtonTwo.Name" xml:space="preserve">
+ <value>radioButtonTwo</value>
+ </data>
+ <data name="&gt;&gt;radioButtonTwo.Type" xml:space="preserve">
+ <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </data>
+ <data name="&gt;&gt;radioButtonTwo.Parent" xml:space="preserve">
+ <value>groupBoxOptions</value>
+ </data>
+ <data name="&gt;&gt;radioButtonTwo.ZOrder" xml:space="preserve">
+ <value>17</value>
+ </data>
+ <data name="&gt;&gt;radioButtonOne.Name" xml:space="preserve">
+ <value>radioButtonOne</value>
+ </data>
+ <data name="&gt;&gt;radioButtonOne.Type" xml:space="preserve">
+ <value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </data>
+ <data name="&gt;&gt;radioButtonOne.Parent" xml:space="preserve">
+ <value>groupBoxOptions</value>
+ </data>
+ <data name="&gt;&gt;radioButtonOne.ZOrder" xml:space="preserve">
+ <value>18</value>
+ </data>
+ <data name="&gt;&gt;textBoxName.Name" xml:space="preserve">
+ <value>textBoxName</value>
+ </data>
+ <data name="&gt;&gt;textBoxName.Type" xml:space="preserve">
+ <value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </data>
+ <data name="&gt;&gt;textBoxName.Parent" xml:space="preserve">
+ <value>groupBoxOptions</value>
+ </data>
+ <data name="&gt;&gt;textBoxName.ZOrder" xml:space="preserve">
+ <value>19</value>
+ </data>
+ <data name="&gt;&gt;labelName.Name" xml:space="preserve">
+ <value>labelName</value>
+ </data>
+ <data name="&gt;&gt;labelName.Type" xml:space="preserve">
+ <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </data>
+ <data name="&gt;&gt;labelName.Parent" xml:space="preserve">
+ <value>groupBoxOptions</value>
+ </data>
+ <data name="&gt;&gt;labelName.ZOrder" xml:space="preserve">
+ <value>20</value>
+ </data>
+ <data name="&gt;&gt;labelID.Name" xml:space="preserve">
+ <value>labelID</value>
+ </data>
+ <data name="&gt;&gt;labelID.Type" xml:space="preserve">
+ <value>System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </data>
+ <data name="&gt;&gt;labelID.Parent" xml:space="preserve">
+ <value>groupBoxOptions</value>
+ </data>
+ <data name="&gt;&gt;labelID.ZOrder" xml:space="preserve">
+ <value>21</value>
+ </data>
+ <data name="groupBoxOptions.Location" type="System.Drawing.Point, System.Drawing">
+ <value>306, 27</value>
+ </data>
+ <data name="groupBoxOptions.Size" type="System.Drawing.Size, System.Drawing">
+ <value>293, 529</value>
+ </data>
+ <data name="groupBoxOptions.TabIndex" type="System.Int32, mscorlib">
+ <value>4</value>
+ </data>
+ <data name="groupBoxOptions.Text" xml:space="preserve">
+ <value>Game options</value>
+ </data>
+ <data name="&gt;&gt;groupBoxOptions.Name" xml:space="preserve">
+ <value>groupBoxOptions</value>
+ </data>
+ <data name="&gt;&gt;groupBoxOptions.Type" xml:space="preserve">
+ <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </data>
+ <data name="&gt;&gt;groupBoxOptions.Parent" xml:space="preserve">
+ <value>$this</value>
+ </data>
+ <data name="&gt;&gt;groupBoxOptions.ZOrder" xml:space="preserve">
+ <value>7</value>
+ </data>
<data name="labelSize.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
@@ -1274,30 +1562,6 @@
<data name="&gt;&gt;labelID.ZOrder" xml:space="preserve">
<value>21</value>
</data>
- <data name="groupBoxOptions.Location" type="System.Drawing.Point, System.Drawing">
- <value>306, 27</value>
- </data>
- <data name="groupBoxOptions.Size" type="System.Drawing.Size, System.Drawing">
- <value>293, 529</value>
- </data>
- <data name="groupBoxOptions.TabIndex" type="System.Int32, mscorlib">
- <value>4</value>
- </data>
- <data name="groupBoxOptions.Text" xml:space="preserve">
- <value>Game options</value>
- </data>
- <data name="&gt;&gt;groupBoxOptions.Name" xml:space="preserve">
- <value>groupBoxOptions</value>
- </data>
- <data name="&gt;&gt;groupBoxOptions.Type" xml:space="preserve">
- <value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
- </data>
- <data name="&gt;&gt;groupBoxOptions.Parent" xml:space="preserve">
- <value>$this</value>
- </data>
- <data name="&gt;&gt;groupBoxOptions.ZOrder" xml:space="preserve">
- <value>7</value>
- </data>
<data name="label5.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>None</value>
</data>
@@ -2967,10 +3231,10 @@
<data name="&gt;&gt;epilepsyProtectionToolStripMenuItem.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
- <data name="&gt;&gt;compressGamesIfPossibleToolStripMenuItem.Name" xml:space="preserve">
- <value>compressGamesIfPossibleToolStripMenuItem</value>
+ <data name="&gt;&gt;compressGamesToolStripMenuItem.Name" xml:space="preserve">
+ <value>compressGamesToolStripMenuItem</value>
</data>
- <data name="&gt;&gt;compressGamesIfPossibleToolStripMenuItem.Type" xml:space="preserve">
+ <data name="&gt;&gt;compressGamesToolStripMenuItem.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;pagesfoldersTypeToolStripMenuItem.Name" xml:space="preserve">
diff --git a/Program.cs b/Program.cs
index 8ae34e00..a59366c6 100644
--- a/Program.cs
+++ b/Program.cs
@@ -70,6 +70,7 @@ namespace com.clusterrr.hakchi_gui
}
Debug.AutoFlush = true;
#endif
+
try
{
bool createdNew = true;
diff --git a/Properties/Resources.Designer.cs b/Properties/Resources.Designer.cs
index eb5541d8..7acdef17 100644
--- a/Properties/Resources.Designer.cs
+++ b/Properties/Resources.Designer.cs
@@ -124,7 +124,16 @@ namespace com.clusterrr.hakchi_gui.Properties {
return ((System.Drawing.Bitmap)(obj));
}
}
-
+
+ internal static System.Drawing.Bitmap blank_snes_eu_jp
+ {
+ get
+ {
+ object obj = ResourceManager.GetObject("blank_snes_eu_jp", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
diff --git a/Properties/Resources.resx b/Properties/Resources.resx
index 8c8957e2..366b80df 100644
--- a/Properties/Resources.resx
+++ b/Properties/Resources.resx
@@ -652,6 +652,9 @@
<data name="Membooting" xml:space="preserve">
<value>Booting the kernel from RAM...</value>
</data>
+ <data name="blank_snes_eu_jp" type="System.Resources.ResXFileRef, System.Windows.Forms">
+ <value>..\images\blank_snes-eu-jp.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+ </data>
<data name="Size" xml:space="preserve">
<value>Size:</value>
</data>
diff --git a/TarStream.cs b/TarStream.cs
index 4ffcf3ea..2019a8e3 100644
--- a/TarStream.cs
+++ b/TarStream.cs
@@ -63,7 +63,7 @@ namespace com.clusterrr.util
public void CalcChecksum()
{
Checksum = new byte[] { 32, 32, 32, 32, 32, 32, 32, 32 };
- var bytes = getBytes();
+ var bytes = GetBytes();
uint summ = 0;
foreach (var b in bytes)
summ += b;
@@ -72,7 +72,7 @@ namespace com.clusterrr.util
Checksum[7] = 32;
}
- public byte[] getBytes()
+ public byte[] GetBytes()
{
int size = Marshal.SizeOf(this);
byte[] arr = new byte[size];
@@ -256,7 +256,7 @@ namespace com.clusterrr.util
header.UstarMagic = "ustar ";
//header.UstarVersion = new char[] {'0', '0'};
header.CalcChecksum();
- currentHeader = header.getBytes();
+ currentHeader = header.GetBytes();
}
if (currentEntryPosition < 512) // Header
diff --git a/WorkerForm.cs b/WorkerForm.cs
index 701ec3bd..2546444e 100644
--- a/WorkerForm.cs
+++ b/WorkerForm.cs
@@ -1086,7 +1086,7 @@ namespace com.clusterrr.hakchi_gui
int i = 0;
foreach (NesMiniApplication game in Games)
{
- SetStatus(Resources.GooglingFor + " " + game.Name);
+ SetStatus(Resources.GooglingFor.Trim() + " " + game.Name);
string[] urls = null;
for (int tries = 0; tries < 5; tries++)
{
@@ -1163,7 +1163,15 @@ namespace com.clusterrr.hakchi_gui
{
if (gameCopy is ISupportsGameGenie && File.Exists((gameCopy as NesGame).GameGeniePath))
{
+ bool compressed = false;
+ if (gameCopy.DecompressPossible().Count() > 0)
+ {
+ gameCopy.Decompress();
+ compressed = true;
+ }
(gameCopy as ISupportsGameGenie).ApplyGameGenie();
+ if (compressed)
+ gameCopy.Compress();
File.Delete((gameCopy as ISupportsGameGenie).GameGeniePath);
}
}
diff --git a/mods/mod_hakchi/hakchi/rootfs/bin/clover-canoe-shvc-wr b/mods/mod_hakchi/hakchi/rootfs/bin/clover-canoe-shvc-wr
index 62fc841b..97fe3e9d 100644
--- a/mods/mod_hakchi/hakchi/rootfs/bin/clover-canoe-shvc-wr
+++ b/mods/mod_hakchi/hakchi/rootfs/bin/clover-canoe-shvc-wr
@@ -6,7 +6,8 @@
source /etc/preinit
script_init
-filename=$1
+arg1=$1
+filename=$2
filebase=$(basename "$filename")
extension="${filebase##*.}"
tmppath=/tmp/rom
@@ -18,7 +19,8 @@ if [ "$extension" == "7z" ]; then
filename=$(ls)
fi
shift
+shift
-args="$filename $@ $cfg_snes_extra_args"
+args="$arg1 $filename $@ $cfg_snes_extra_args"
exec /usr/bin/clover-canoe-shvc $args