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:
authorAlftron <mja.haycock@gmail.com>2018-02-21 13:06:42 +0300
committerAlftron <mja.haycock@gmail.com>2018-02-21 13:06:42 +0300
commit3872a5815e79b1ae037aed21ad4ae7f41c9483b1 (patch)
tree756a959b3c993c33dbb057211ef9becf4137d6f3
parent1daf8f19ed52fcaa7942a0af6b2ece90b27e3d50 (diff)
parent855ec1bcd2ba2f060966e024aec732833d2eecee (diff)
Merge branch 'stable' into foldersfix
-rw-r--r--AboutBox.Designer.cs2
-rw-r--r--AboutBox.cs2
-rw-r--r--AboutBox.resx1013
-rw-r--r--Apps/NesMiniApplication.cs72
-rw-r--r--Clovershell/ClovershellConnection.cs1
-rw-r--r--ConfigIni.cs83
-rw-r--r--DesktopEntries/CLV-P-HAAAJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-HAACJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-HAADJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-HAAEJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-HAAHJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-HAAMJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-HAANJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-HAAPJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-HAAQJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-HAARJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-HAASJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-HAAUJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-HAAWJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-HAAXJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-HABBJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-HABCJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-HABLJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-HABMJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-HABNJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-HABQJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-HABRJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-HABVJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-HACAJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-HACBJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-HACCJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-HACEJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-HACHJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-HACJJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-HACLJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-HACPJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-NAAAE.desktop4
-rw-r--r--DesktopEntries/CLV-P-NAACE.desktop4
-rw-r--r--DesktopEntries/CLV-P-NAADE.desktop4
-rw-r--r--DesktopEntries/CLV-P-NAAEE.desktop4
-rw-r--r--DesktopEntries/CLV-P-NAAFE.desktop4
-rw-r--r--DesktopEntries/CLV-P-NAAHE.desktop4
-rw-r--r--DesktopEntries/CLV-P-NAANE.desktop4
-rw-r--r--DesktopEntries/CLV-P-NAAPE.desktop4
-rw-r--r--DesktopEntries/CLV-P-NAAQE.desktop4
-rw-r--r--DesktopEntries/CLV-P-NAARE.desktop4
-rw-r--r--DesktopEntries/CLV-P-NAASE.desktop4
-rw-r--r--DesktopEntries/CLV-P-NAATE.desktop4
-rw-r--r--DesktopEntries/CLV-P-NAAUE.desktop4
-rw-r--r--DesktopEntries/CLV-P-NAAVE.desktop4
-rw-r--r--DesktopEntries/CLV-P-NAAWE.desktop4
-rw-r--r--DesktopEntries/CLV-P-NAAXE.desktop4
-rw-r--r--DesktopEntries/CLV-P-NAAZE.desktop4
-rw-r--r--DesktopEntries/CLV-P-NABBE.desktop4
-rw-r--r--DesktopEntries/CLV-P-NABCE.desktop4
-rw-r--r--DesktopEntries/CLV-P-NABJE.desktop4
-rw-r--r--DesktopEntries/CLV-P-NABKE.desktop4
-rw-r--r--DesktopEntries/CLV-P-NABME.desktop4
-rw-r--r--DesktopEntries/CLV-P-NABNE.desktop4
-rw-r--r--DesktopEntries/CLV-P-NABQE.desktop4
-rw-r--r--DesktopEntries/CLV-P-NABRE.desktop4
-rw-r--r--DesktopEntries/CLV-P-NABVE.desktop4
-rw-r--r--DesktopEntries/CLV-P-NABXE.desktop4
-rw-r--r--DesktopEntries/CLV-P-NACBE.desktop4
-rw-r--r--DesktopEntries/CLV-P-NACDE.desktop4
-rw-r--r--DesktopEntries/CLV-P-NACHE.desktop4
-rw-r--r--DesktopEntries/CLV-P-SAAAE.desktop4
-rw-r--r--DesktopEntries/CLV-P-SAABE.desktop4
-rw-r--r--DesktopEntries/CLV-P-SAAEE.desktop4
-rw-r--r--DesktopEntries/CLV-P-SAAFE.desktop4
-rw-r--r--DesktopEntries/CLV-P-SAAHE.desktop4
-rw-r--r--DesktopEntries/CLV-P-SAAJE.desktop4
-rw-r--r--DesktopEntries/CLV-P-SAAKE.desktop4
-rw-r--r--DesktopEntries/CLV-P-SAALE.desktop4
-rw-r--r--DesktopEntries/CLV-P-SAAQE.desktop4
-rw-r--r--DesktopEntries/CLV-P-SAAXE.desktop4
-rw-r--r--DesktopEntries/CLV-P-SABCE.desktop4
-rw-r--r--DesktopEntries/CLV-P-SABDE.desktop4
-rw-r--r--DesktopEntries/CLV-P-SABHE.desktop4
-rw-r--r--DesktopEntries/CLV-P-SABQE.desktop4
-rw-r--r--DesktopEntries/CLV-P-SABRE.desktop4
-rw-r--r--DesktopEntries/CLV-P-SABTE.desktop4
-rw-r--r--DesktopEntries/CLV-P-SACBE.desktop4
-rw-r--r--DesktopEntries/CLV-P-SACCE.desktop4
-rw-r--r--DesktopEntries/CLV-P-SADGE.desktop4
-rw-r--r--DesktopEntries/CLV-P-SADJE.desktop4
-rw-r--r--DesktopEntries/CLV-P-SADKE.desktop4
-rw-r--r--DesktopEntries/CLV-P-VAAAJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-VAABJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-VAAEJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-VAAFJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-VAAGJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-VAAHJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-VAALJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-VAAQJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-VABBJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-VABCJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-VABDJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-VABQJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-VABRJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-VABTJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-VACCJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-VACDJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-VADFJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-VADGJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-VADJJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-VADKJ.desktop4
-rw-r--r--DesktopEntries/CLV-P-VADZJ.desktop4
-rw-r--r--FtpServer/NesMiniFileSystemHandler.cs19
-rw-r--r--MainForm.Designer.cs80
-rw-r--r--MainForm.cs228
-rw-r--r--MainForm.resx329
-rw-r--r--Properties/AssemblyInfo.cs6
-rw-r--r--Properties/Resources.resx15
-rw-r--r--SaveStateManager.cs7
-rw-r--r--WorkerForm.cs459
-rw-r--r--data/zImagebin2498208 -> 2624208 bytes
-rw-r--r--hakchi_gui.csproj34
-rw-r--r--mods/hmods/core-modules.hmodbin98949 -> 0 bytes
-rw-r--r--mods/hmods/modules-3.4.112.madmonkey.hmodbin0 -> 99217 bytes
-rw-r--r--mods/hmods/ntfs-3g.hmodbin0 -> 434156 bytes
-rwxr-xr-xmods/mod_hakchi/bin/busyboxbin1109128 -> 1427376 bytes
-rw-r--r--mods/mod_hakchi/etc/filesystems37
-rw-r--r--mods/mod_hakchi/hakchi/config9
-rw-r--r--mods/mod_hakchi/hakchi/init6
-rwxr-xr-xmods/mod_hakchi/hakchi/rootfs/bin/chmenu27
-rwxr-xr-xmods/mod_hakchi/hakchi/rootfs/bin/hakchi44
-rwxr-xr-xmods/mod_hakchi/hakchi/rootfs/bin/hsqs3
-rwxr-xr-xmods/mod_hakchi/hakchi/rootfs/bin/remote-exec2
-rw-r--r--mods/mod_hakchi/hakchi/rootfs/etc/hakchi.pngbin0 -> 4620 bytes
-rw-r--r--mods/mod_hakchi/hakchi/rootfs/etc/inittab3
-rw-r--r--mods/mod_hakchi/hakchi/rootfs/etc/pleasewait.fbbin0 -> 4342 bytes
-rw-r--r--mods/mod_hakchi/hakchi/rootfs/etc/pleasewait.pngbin0 -> 5728 bytes
-rw-r--r--mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0000_defines4
-rw-r--r--mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0010_functions200
-rw-r--r--mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0020_backup2
-rw-r--r--mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0030_package25
-rw-r--r--mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0040_usb204
-rw-r--r--mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p0000_config6
-rw-r--r--mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p0000_version18
-rw-r--r--mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7010_bootlogo1
-rw-r--r--mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7020_usb27
-rw-r--r--mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7070_firmware9
-rw-r--r--mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7100_preinit1
-rw-r--r--mods/mod_hakchi/hakchi/script/transfer3
-rwxr-xr-xmods/mod_hakchi/sbin/init4
-rw-r--r--tools/cygpopt-0.dllbin0 -> 22528 bytes
-rw-r--r--tools/rsync.exebin0 -> 334336 bytes
-rw-r--r--tools/xz.exebin0 -> 219136 bytes
149 files changed, 2065 insertions, 1328 deletions
diff --git a/AboutBox.Designer.cs b/AboutBox.Designer.cs
index ac4db201..47b4e91c 100644
--- a/AboutBox.Designer.cs
+++ b/AboutBox.Designer.cs
@@ -137,7 +137,7 @@
this.textBoxDescription.Size = new System.Drawing.Size(271, 234);
this.textBoxDescription.TabIndex = 23;
this.textBoxDescription.TabStop = false;
- this.textBoxDescription.Text = "Description";
+ this.textBoxDescription.Text = resources.GetString("textBoxDescription.Text");
//
// okButton
//
diff --git a/AboutBox.cs b/AboutBox.cs
index 968788be..77416071 100644
--- a/AboutBox.cs
+++ b/AboutBox.cs
@@ -14,7 +14,7 @@ namespace com.clusterrr.hakchi_gui
this.labelVersion.Text = String.Format("Version {0}", AssemblyVersion);
this.labelCopyright.Text = AssemblyCopyright;
this.labelCompanyName.Text = AssemblyCompany;
- this.textBoxDescription.Text = AssemblyDescription;
+ //this.textBoxDescription.Text = AssemblyDescription;
}
#region Assembly Attribute Accessors
diff --git a/AboutBox.resx b/AboutBox.resx
index e0600755..f14140af 100644
--- a/AboutBox.resx
+++ b/AboutBox.resx
@@ -120,487 +120,542 @@
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="logoPictureBox.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
- 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
- AAAAAElFTkSuQmCC
+ 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
</value>
</data>
+ <data name="textBoxDescription.Text" xml:space="preserve">
+ <value>Based on hakchi by madmonkey.
+
+Thanks:
+madmonkey, pcm720, DanTheMan827, princess_daphie, skogaby for great help with everything.
+xsnake for Japanese font.
+Pete Batard/Akeo for Zadig
+pbatard for libwdi.
+Thomas Bleeker for WinUSBNet lib.
+bootgod for cartridge database.
+Markovtsev Vadim for SevenZipSharp lib.
+NeoRame for Graphics.
+Nhakin for Game Genie database.
+mooware for mooftpserv.
+Nintendo for my childhood.
+
+Translators:
+Jhynjhiruu Rekrap &lt;cub3r12@gmail.com&gt;
+Alex Marco Saternus &lt;alex.saternus@outlook.de&gt;
+Alexey Eberhardt &lt;tristamson@hotmail.com&gt;
+Condi - Konrad Płaszczykowski &lt;condiczek@gmail.com&gt;
+Miltos Arpazopoulos &lt;miltos.arpazopoulos@gmail.com&gt;
+Andrea Quagliarini &lt;doc.wave@gmail.com&gt;
+sdfg sdfhsdfh &lt;buggii@hotmail.com&gt;
+Alessio Giuseppe Calì &lt;alessiocal92@gmail.com&gt;
+Naiki &lt;naiki_turincondeliphone@hotmail.com&gt;
+Mad-Mega (aka DasTarD) &lt;dastard@hotmail.nl&gt;
+Lance Krasniqi &lt;lance.krasniqi@outlook.com&gt;
+Patrik Žec &lt;patrik.zec@gmail.com&gt;
+AcK AcK &lt;Acoustik666@gmail.com&gt;
+Xavier M-M &lt;bamargera_666@hotmail.com&gt;
+Jumpman &lt;jumpman@jumpman.fr&gt;
+Angus MACGYVER &lt;r4dius@gmail.com&gt;
+KNTRO &lt;kntro@msn.com&gt;
+Truchen &lt;tarduschl@hotmail.com&gt;
+Jelmer de Groot &lt;de.groot@live.nl&gt;
+Piklz &lt;pixelpiklz@gmail.com&gt;
+Marco Coelho Christian bon_vivant Lindström &lt;christian.lindstrom89@gmail.com&gt;
+Luoti-Lasse maande80 &lt;andre.ronggo@gmail.com&gt;
+Teguh Aditya &lt;tguh.aditya@gmail.com&gt;
+九五二七 &lt;3q.9527.tw&gt;
+Jeff Chen &lt;jeffmobile@hotmail.com&gt;
+Пестренко Олекса &lt;general1308@gmail.com&gt;
+Mikkel Andersen &lt;dasmikko@gmail.com&gt;
+Kleus Balut &lt;saylen.balut@gmail.com&gt;
+Star Light &lt;starlightikaninten@gmail.com&gt;
+Eduard Borsos &lt;borsoseduard@gmail.com&gt;
+Vagnerlandio Nunes &lt;vagnerlandio@gmail.com&gt;
+Mikael Strand &lt;mikael.strand0@gmail.com&gt;
+Joonie C &lt;xfxp1384@gmail.com&gt;
+Edmundas Tauteris &lt;redcatex@gmail.com&gt;
+
+My site: http://clusterrr.com
+Email: clusterrr@clusterrr.com
+PayPal for donations: clusterrr@clusterrr.com</value>
+ </data>
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAEAgIAAAAEAIAAoCAEAFgAAACgAAACAAAAAAAEAAAEAIAAAAAAAAAABABILAAASCwAAAAAAAAAA
diff --git a/Apps/NesMiniApplication.cs b/Apps/NesMiniApplication.cs
index ceeb9f62..c5c8c6f5 100644
--- a/Apps/NesMiniApplication.cs
+++ b/Apps/NesMiniApplication.cs
@@ -7,6 +7,7 @@ using System.Diagnostics;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
+using System.Linq;
using System.Text.RegularExpressions;
using System.Windows.Forms;
@@ -23,6 +24,7 @@ namespace com.clusterrr.hakchi_gui
public static bool? NeedPatch;
public static bool? Need3rdPartyEmulator;
public static bool? NeedAutoDownloadCover;
+ const int MaxCompressSize = 10 * 1024 * 1024;
public static string GamesDirectory
{
@@ -181,22 +183,47 @@ namespace com.clusterrr.hakchi_gui
return new NesMiniApplication(path, ignoreEmptyConfig);
}
+ public static NesMiniApplication CreateEmptyApp()
+ {
+ char prefix = 'X';
+ uint crc32;
+ string code;
+ string gamePath;
+ do
+ {
+ crc32 = (uint)new Random().Next();
+ code = GenerateCode(crc32, prefix);
+ gamePath = Path.Combine(GamesDirectory, code);
+ } while (Directory.Exists(gamePath));
+ Directory.CreateDirectory(gamePath);
+ var game = new NesMiniApplication(gamePath, true);
+ game.Name = "New app";
+ game.Image = DefaultCover;
+ game.Command = "enter some command here";
+ game.SaveCount = 0;
+ game.Save();
+
+ var app = FromDirectory(gamePath);
+ return app;
+ }
+
public static NesMiniApplication Import(string inputFileName, string originalFileName = null, byte[] rawRomData = null)
{
- var extension = System.IO.Path.GetExtension(inputFileName).ToLower();
+ var extension = Path.GetExtension(inputFileName).ToLower();
if (extension == ".desktop")
return ImportApp(inputFileName);
if (rawRomData == null) // Maybe it's already extracted data?
rawRomData = File.ReadAllBytes(inputFileName); // If not, reading file
if (originalFileName == null) // Original file name from archive
- originalFileName = System.IO.Path.GetFileName(inputFileName);
+ originalFileName = Path.GetFileName(inputFileName);
char prefix = DefaultPrefix;
string application = extension.Length > 2 ? ("/bin/" + extension.Substring(1)) : DefaultApp;
string args = null;
Image cover = DefaultCover;
byte saveCount = 0;
uint crc32 = CRC32(rawRomData);
- string outputFileName = Regex.Replace(System.IO.Path.GetFileName(inputFileName), @"[^A-Za-z0-9()!\[\]\.\-]", "_").Trim();
+ string outputFileName = Regex.Replace(Path.GetFileName(inputFileName), @" ?\(.*?\)| ?\[.*?\]", "").Trim();
+ outputFileName = Regex.Replace(outputFileName, @"[^A-Za-z0-9!\.]+", "_");
// Trying to determine file type
var appinfo = AppTypeCollection.GetAppByExtension(extension);
@@ -235,11 +262,11 @@ namespace com.clusterrr.hakchi_gui
{
var files = Directory.GetFiles(gamePath, "*.*", SearchOption.AllDirectories);
foreach (var f in files)
- try
- {
+ try
+ {
File.Delete(f);
- }
- catch { }
+ }
+ catch { }
}
Directory.CreateDirectory(gamePath);
File.WriteAllBytes(romPath, rawRomData);
@@ -357,7 +384,7 @@ namespace com.clusterrr.hakchi_gui
var sortRawTitle = Name.ToLower();
if (sortRawTitle.StartsWith("the "))
sortRawTitle = sortRawTitle.Substring(4); // Sorting without "THE"
- File.WriteAllText(ConfigPath,
+ File.WriteAllText(ConfigPath,
$"[Desktop Entry]\n" +
$"Type=Application\n" +
$"Exec={command}\n" +
@@ -487,14 +514,14 @@ namespace com.clusterrr.hakchi_gui
if (File.Exists(imagePath))
cover = LoadBitmap(imagePath);
}
- if( cover == null )
+ if (cover == null)
{
// do a bidirectional search on sanitized filenames to allow minor variance in filenames, also allows subdirectories
Regex rgx = new Regex("[^a-zA-Z0-9]", RegexOptions.Compiled);
var sanitizedName = rgx.Replace(name, string.Empty).ToLower();
var covers = Directory.GetFiles(artDirectory, "*.*", SearchOption.AllDirectories);
- foreach(var file in covers)
+ foreach (var file in covers)
{
var sanitized = rgx.Replace(System.IO.Path.GetFileNameWithoutExtension(file), "").ToLower();
if (sanitizedName.StartsWith(sanitized) || sanitized.StartsWith(sanitizedName))
@@ -586,7 +613,7 @@ namespace com.clusterrr.hakchi_gui
return FromDirectory(targetDir);
}
- internal static long DirectoryCopy(string sourceDirName, string destDirName, bool copySubDirs)
+ internal static long DirectoryCopy(string sourceDirName, string destDirName, bool copySubDirs, string[] skipFiles = null)
{
long size = 0;
// Get the subdirectories for the specified directory.
@@ -610,6 +637,8 @@ namespace com.clusterrr.hakchi_gui
FileInfo[] files = dir.GetFiles();
foreach (FileInfo file in files)
{
+ if (skipFiles != null && skipFiles.Contains(file.Name))
+ continue;
string temppath = System.IO.Path.Combine(destDirName, file.Name);
size += file.CopyTo(temppath, true).Length;
}
@@ -620,16 +649,19 @@ namespace com.clusterrr.hakchi_gui
foreach (DirectoryInfo subdir in dirs)
{
string temppath = System.IO.Path.Combine(destDirName, subdir.Name);
- size += DirectoryCopy(subdir.FullName, temppath, copySubDirs);
+ size += DirectoryCopy(subdir.FullName, temppath, copySubDirs, skipFiles);
}
}
return size;
}
- public long Size(string path = null)
+ public long Size()
+ {
+ return DirectorySize(GamePath);
+ }
+
+ public static long DirectorySize(string path)
{
- if (path == null)
- path = GamePath;
long size = 0;
// Get the subdirectories for the specified directory.
DirectoryInfo dir = new DirectoryInfo(path);
@@ -645,7 +677,7 @@ namespace com.clusterrr.hakchi_gui
}
foreach (DirectoryInfo subdir in dirs)
{
- size += Size(subdir.FullName);
+ size += DirectorySize(subdir.FullName);
}
return size;
}
@@ -700,11 +732,13 @@ namespace com.clusterrr.hakchi_gui
var result = new List<string>();
var exec = Regex.Replace(Command, "[/\\\"]", " ") + " ";
var files = Directory.GetFiles(GamePath, "*.*", SearchOption.TopDirectoryOnly);
+ var ignoreExtensions = new string[] { ".7z", ".zip", ".hsqs", ".sh" };
foreach (var file in files)
{
- if (Path.GetExtension(file).ToLower() == ".7z")
+ var a = from i in ignoreExtensions select i;
+ if (ignoreExtensions.Contains(Path.GetExtension(file).ToLower()))
continue;
- if (Path.GetExtension(file).ToLower() == ".zip")
+ if (new FileInfo(file).Length > MaxCompressSize)
continue;
if (exec.Contains(" " + Path.GetFileName(file) + " "))
result.Add(file);
@@ -737,7 +771,7 @@ namespace com.clusterrr.hakchi_gui
Debug.WriteLine("Compressing " + filename);
compressor.CompressFiles(archName, filename);
File.Delete(filename);
- Command = Command.Replace(System.IO.Path.GetFileName(filename), System.IO.Path.GetFileName(archName));
+ Command = Command.Replace(Path.GetFileName(filename), Path.GetFileName(archName));
}
}
diff --git a/Clovershell/ClovershellConnection.cs b/Clovershell/ClovershellConnection.cs
index a4662df0..ec136b95 100644
--- a/Clovershell/ClovershellConnection.cs
+++ b/Clovershell/ClovershellConnection.cs
@@ -438,7 +438,6 @@ namespace com.clusterrr.clovershell
if (res != ErrorCode.Ok)
{
if (repeats >= 10) break;
- Debug.WriteLine("write error: " + res);
repeats++;
Thread.Sleep(100);
}
diff --git a/ConfigIni.cs b/ConfigIni.cs
index 4693af30..935424ef 100644
--- a/ConfigIni.cs
+++ b/ConfigIni.cs
@@ -49,6 +49,11 @@ namespace com.clusterrr.hakchi_gui
public static bool FtpServer = false;
public static bool TelnetServer = false;
public static string Language = "";
+ public static bool UsbHostNes = false;
+ public static bool UsbHostFamicom = false;
+ public static bool UsbHostSnes = false;
+ public static bool UsbHostSuperFamicom = false;
+ public static bool AlwaysWriteToUSB = false;
public static bool CustomFlashed
{
@@ -400,6 +405,44 @@ namespace com.clusterrr.hakchi_gui
}
}
+ public static bool UsbHost
+ {
+ get
+ {
+ switch (ConsoleType)
+ {
+ default:
+ case MainForm.ConsoleType.NES:
+ return UsbHostNes;
+ case MainForm.ConsoleType.Famicom:
+ return UsbHostFamicom;
+ case MainForm.ConsoleType.SNES:
+ return UsbHostSnes;
+ case MainForm.ConsoleType.SuperFamicom:
+ return UsbHostSuperFamicom;
+ }
+ }
+ set
+ {
+ switch (ConsoleType)
+ {
+ default:
+ case MainForm.ConsoleType.NES:
+ UsbHostNes = value;
+ break;
+ case MainForm.ConsoleType.Famicom:
+ UsbHostFamicom = value;
+ break;
+ case MainForm.ConsoleType.SNES:
+ UsbHostSnes = value;
+ break;
+ case MainForm.ConsoleType.SuperFamicom:
+ UsbHostSuperFamicom = value;
+ break;
+ }
+ }
+ }
+
public static void Load()
{
Debug.WriteLine("Loading config");
@@ -546,8 +589,20 @@ namespace com.clusterrr.hakchi_gui
case "ftpserver":
FtpServer = !value.ToLower().Equals("false");
break;
- case "telnetserver":
- TelnetServer = !value.ToLower().Equals("false");
+ case "usbhostnes":
+ UsbHostNes = !value.ToLower().Equals("false");
+ break;
+ case "usbhostfamicom":
+ UsbHostFamicom = !value.ToLower().Equals("false");
+ break;
+ case "usbhostsnes":
+ UsbHostSnes = !value.ToLower().Equals("false");
+ break;
+ case "usbhostsuperfamicom":
+ UsbHostSuperFamicom = !value.ToLower().Equals("false");
+ break;
+ case "alwayswritetousb":
+ AlwaysWriteToUSB = !value.ToLower().Equals("false");
break;
}
break;
@@ -589,6 +644,10 @@ namespace com.clusterrr.hakchi_gui
configLines.Add(string.Format("AntiArmetLevel={0}", AntiArmetLevel));
configLines.Add(string.Format("ConsoleType={0}", (byte)ConsoleType));
configLines.Add(string.Format("FcStart={0}", FcStart));
+ configLines.Add(string.Format("UsbHostNes={0}", UsbHostNes));
+ configLines.Add(string.Format("UsbHostFamicom={0}", UsbHostFamicom));
+ configLines.Add(string.Format("UsbHostSuperFamicom={0}", UsbHostSuperFamicom));
+ configLines.Add(string.Format("UsbHostSnes={0}", UsbHostSnes));
configLines.Add(string.Format("ExtraCommandLineArguments={0}", ExtraCommandLineArgumentsNes));
configLines.Add(string.Format("ExtraCommandLineArgumentsSnes={0}", ExtraCommandLineArgumentsSnes));
configLines.Add(string.Format("FoldersMode={0}", (byte)FoldersModeNes));
@@ -603,6 +662,7 @@ namespace com.clusterrr.hakchi_gui
configLines.Add(string.Format("FtpServer={0}", FtpServer));
configLines.Add(string.Format("TelnetServer={0}", TelnetServer));
configLines.Add(string.Format("RunCount={0}", RunCount));
+ configLines.Add(string.Format("AlwaysWriteToUSB={0}", AlwaysWriteToUSB));
configLines.Add("");
configLines.Add("[Presets]");
@@ -617,19 +677,24 @@ namespace com.clusterrr.hakchi_gui
File.WriteAllLines(fileName, configLines.ToArray());
}
- public static Dictionary<string, string> GetConfigDictionary()
+ public static Dictionary<string, string> GetConfigDictionary(MainForm.ConsoleType? consoleType = null)
{
+ MainForm.ConsoleType oldConsoleType = ConsoleType;
+ if (consoleType != null && consoleType != MainForm.ConsoleType.Unknown)
+ ConsoleType = consoleType ?? MainForm.ConsoleType.Unknown;
+
var config = new Dictionary<string, string>();
config["clovercon_home_combination"] = ConfigIni.ResetHack ? string.Format("0x{0:X4}", ConfigIni.ResetCombination) : "0x7FFF";
config["clovercon_autofire"] = ConfigIni.AutofireHack ? "1" : "0";
- config["clovercon_autofire_xy"] = ConfigIni.AutofireXYHack && (ConfigIni.ConsoleType == MainForm.ConsoleType.NES || ConfigIni.ConsoleType == MainForm.ConsoleType.Famicom) ? "1" : "0";
+ config["clovercon_autofire_xy"] = ConfigIni.AutofireXYHack /*&& (ConfigIni.ConsoleType == MainForm.ConsoleType.NES || ConfigIni.ConsoleType == MainForm.ConsoleType.Famicom)*/ ? "1" : "0";
config["clovercon_fc_start"] = ConfigIni.FcStart && (ConfigIni.ConsoleType == MainForm.ConsoleType.Famicom) ? "1" : "0";
config["fontfix_enabled"] = ConfigIni.UseFont ? "y" : "n";
- config["disable_armet"] = (ConfigIni.AntiArmetLevel > 0 && (ConfigIni.ConsoleType == MainForm.ConsoleType.NES || ConfigIni.ConsoleType == MainForm.ConsoleType.Famicom)) ? "y" : "n";
- if ((ConfigIni.ConsoleType == MainForm.ConsoleType.NES || ConfigIni.ConsoleType == MainForm.ConsoleType.Famicom))
- config["nes_extra_args"] = ConfigIni.ExtraCommandLineArguments;
- if ((ConfigIni.ConsoleType == MainForm.ConsoleType.SNES || ConfigIni.ConsoleType == MainForm.ConsoleType.SuperFamicom))
- config["snes_extra_args"] = ConfigIni.ExtraCommandLineArguments;
+ config["disable_armet"] = ConfigIni.AntiArmetLevel > 0 /*&& (ConfigIni.ConsoleType == MainForm.ConsoleType.NES || ConfigIni.ConsoleType == MainForm.ConsoleType.Famicom)*/ ? "y" : "n";
+ config["nes_extra_args"] = ExtraCommandLineArgumentsNes;
+ config["snes_extra_args"] = ExtraCommandLineArgumentsSnes;
+ config["usb_host"] = ConfigIni.UsbHost ? "y" : "n";
+
+ ConsoleType = oldConsoleType;
return config;
}
}
diff --git a/DesktopEntries/CLV-P-HAAAJ.desktop b/DesktopEntries/CLV-P-HAAAJ.desktop
index 6c7ca327..8b863fec 100644
--- a/DesktopEntries/CLV-P-HAAAJ.desktop
+++ b/DesktopEntries/CLV-P-HAAAJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAAAJ/CLV-P-HAAAJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 75 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAAAJ/CLV-P-HAAAJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 75 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-HAAAJ
Name=スーパーマリオブラザーズ
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAAAJ/CLV-P-HAAAJ.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAAAJ/CLV-P-HAAAJ.png
[X-CLOVER Game]
Code=CLV-P-HAAAJ
diff --git a/DesktopEntries/CLV-P-HAACJ.desktop b/DesktopEntries/CLV-P-HAACJ.desktop
index 29bccb83..a2006412 100644
--- a/DesktopEntries/CLV-P-HAACJ.desktop
+++ b/DesktopEntries/CLV-P-HAACJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAACJ/CLV-P-HAACJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 75 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAACJ/CLV-P-HAACJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 75 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-HAACJ
Name=スーパーマリオブラザーズ3
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAACJ/CLV-P-HAACJ.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAACJ/CLV-P-HAACJ.png
[X-CLOVER Game]
Code=CLV-P-HAACJ
diff --git a/DesktopEntries/CLV-P-HAADJ.desktop b/DesktopEntries/CLV-P-HAADJ.desktop
index eac08e21..ab0686e8 100644
--- a/DesktopEntries/CLV-P-HAADJ.desktop
+++ b/DesktopEntries/CLV-P-HAADJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAADJ/CLV-P-HAADJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 70 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAADJ/CLV-P-HAADJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 70 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-HAADJ
Name=スーパーマリオUSA
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAADJ/CLV-P-HAADJ.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAADJ/CLV-P-HAADJ.png
[X-CLOVER Game]
Code=CLV-P-HAADJ
diff --git a/DesktopEntries/CLV-P-HAAEJ.desktop b/DesktopEntries/CLV-P-HAAEJ.desktop
index 9a021c35..39f6fa45 100644
--- a/DesktopEntries/CLV-P-HAAEJ.desktop
+++ b/DesktopEntries/CLV-P-HAAEJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAAEJ/CLV-P-HAAEJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 75 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAAEJ/CLV-P-HAAEJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 75 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-HAAEJ
Name=ドンキーコング
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAAEJ/CLV-P-HAAEJ.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAAEJ/CLV-P-HAAEJ.png
[X-CLOVER Game]
Code=CLV-P-HAAEJ
diff --git a/DesktopEntries/CLV-P-HAAHJ.desktop b/DesktopEntries/CLV-P-HAAHJ.desktop
index 41c378d5..42625733 100644
--- a/DesktopEntries/CLV-P-HAAHJ.desktop
+++ b/DesktopEntries/CLV-P-HAAHJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAAHJ/CLV-P-HAAHJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 70 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAAHJ/CLV-P-HAAHJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 70 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-HAAHJ
Name=エキサイトバイク
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAAHJ/CLV-P-HAAHJ.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAAHJ/CLV-P-HAAHJ.png
[X-CLOVER Game]
Code=CLV-P-HAAHJ
diff --git a/DesktopEntries/CLV-P-HAAMJ.desktop b/DesktopEntries/CLV-P-HAAMJ.desktop
index 64700180..ea56a5ef 100644
--- a/DesktopEntries/CLV-P-HAAMJ.desktop
+++ b/DesktopEntries/CLV-P-HAAMJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAAMJ/CLV-P-HAAMJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 72 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAAMJ/CLV-P-HAAMJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 72 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-HAAMJ
Name=マリオオープンゴルフ
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAAMJ/CLV-P-HAAMJ.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAAMJ/CLV-P-HAAMJ.png
[X-CLOVER Game]
Code=CLV-P-HAAMJ
diff --git a/DesktopEntries/CLV-P-HAANJ.desktop b/DesktopEntries/CLV-P-HAANJ.desktop
index 6a3d4d1c..9cf03495 100644
--- a/DesktopEntries/CLV-P-HAANJ.desktop
+++ b/DesktopEntries/CLV-P-HAANJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAANJ/CLV-P-HAANJ.qd --fds-disk-switch-side-delay 2 --fds-auto-disk-side-switch-on-keypress --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 5,2 --volume 80 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAANJ/CLV-P-HAANJ.qd --fds-disk-switch-side-delay 2 --fds-auto-disk-side-switch-on-keypress --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 5,2 --volume 80 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-HAANJ
Name=ゼルダの伝説
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAANJ/CLV-P-HAANJ.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAANJ/CLV-P-HAANJ.png
[X-CLOVER Game]
Code=CLV-P-HAANJ
diff --git a/DesktopEntries/CLV-P-HAAPJ.desktop b/DesktopEntries/CLV-P-HAAPJ.desktop
index 99ae8b01..05d4b817 100644
--- a/DesktopEntries/CLV-P-HAAPJ.desktop
+++ b/DesktopEntries/CLV-P-HAAPJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAAPJ/CLV-P-HAAPJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 75 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAAPJ/CLV-P-HAAPJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 75 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-HAAPJ
Name=星のカービィ 夢の泉の物語
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAAPJ/CLV-P-HAAPJ.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAAPJ/CLV-P-HAAPJ.png
[X-CLOVER Game]
Code=CLV-P-HAAPJ
diff --git a/DesktopEntries/CLV-P-HAAQJ.desktop b/DesktopEntries/CLV-P-HAAQJ.desktop
index 6443c62d..0ffe9438 100644
--- a/DesktopEntries/CLV-P-HAAQJ.desktop
+++ b/DesktopEntries/CLV-P-HAAQJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAAQJ/CLV-P-HAAQJ.qd --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 80 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAAQJ/CLV-P-HAAQJ.qd --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 80 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-HAAQJ
Name=メトロイド
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAAQJ/CLV-P-HAAQJ.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAAQJ/CLV-P-HAAQJ.png
[X-CLOVER Game]
Code=CLV-P-HAAQJ
diff --git a/DesktopEntries/CLV-P-HAARJ.desktop b/DesktopEntries/CLV-P-HAARJ.desktop
index b77b4ccc..de62ce87 100644
--- a/DesktopEntries/CLV-P-HAARJ.desktop
+++ b/DesktopEntries/CLV-P-HAARJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAARJ/CLV-P-HAARJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 70 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAARJ/CLV-P-HAARJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 70 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-HAARJ
Name=バルーンファイト
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAARJ/CLV-P-HAARJ.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAARJ/CLV-P-HAARJ.png
[X-CLOVER Game]
Code=CLV-P-HAARJ
diff --git a/DesktopEntries/CLV-P-HAASJ.desktop b/DesktopEntries/CLV-P-HAASJ.desktop
index c4bfbc17..75e9d152 100644
--- a/DesktopEntries/CLV-P-HAASJ.desktop
+++ b/DesktopEntries/CLV-P-HAASJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAASJ/CLV-P-HAASJ.qd --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 80 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAASJ/CLV-P-HAASJ.qd --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 80 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-HAASJ
Name=リンクの冒険
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAASJ/CLV-P-HAASJ.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAASJ/CLV-P-HAASJ.png
[X-CLOVER Game]
Code=CLV-P-HAASJ
diff --git a/DesktopEntries/CLV-P-HAAUJ.desktop b/DesktopEntries/CLV-P-HAAUJ.desktop
index 466b4960..557267c2 100644
--- a/DesktopEntries/CLV-P-HAAUJ.desktop
+++ b/DesktopEntries/CLV-P-HAAUJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAAUJ/CLV-P-HAAUJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 72 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAAUJ/CLV-P-HAAUJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 72 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-HAAUJ
Name=アイスクライマー
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAAUJ/CLV-P-HAAUJ.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAAUJ/CLV-P-HAAUJ.png
[X-CLOVER Game]
Code=CLV-P-HAAUJ
diff --git a/DesktopEntries/CLV-P-HAAWJ.desktop b/DesktopEntries/CLV-P-HAAWJ.desktop
index 9ea0fb6e..1f2e1e75 100644
--- a/DesktopEntries/CLV-P-HAAWJ.desktop
+++ b/DesktopEntries/CLV-P-HAAWJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAAWJ/CLV-P-HAAWJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 69 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAAWJ/CLV-P-HAAWJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 69 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-HAAWJ
Name=マリオブラザーズ
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAAWJ/CLV-P-HAAWJ.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAAWJ/CLV-P-HAAWJ.png
[X-CLOVER Game]
Code=CLV-P-HAAWJ
diff --git a/DesktopEntries/CLV-P-HAAXJ.desktop b/DesktopEntries/CLV-P-HAAXJ.desktop
index d0cbd3bb..e3499cbc 100644
--- a/DesktopEntries/CLV-P-HAAXJ.desktop
+++ b/DesktopEntries/CLV-P-HAAXJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAAXJ/CLV-P-HAAXJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 75 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAAXJ/CLV-P-HAAXJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 75 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-HAAXJ
Name=ドクターマリオ
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAAXJ/CLV-P-HAAXJ.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HAAXJ/CLV-P-HAAXJ.png
[X-CLOVER Game]
Code=CLV-P-HAAXJ
diff --git a/DesktopEntries/CLV-P-HABBJ.desktop b/DesktopEntries/CLV-P-HABBJ.desktop
index 6a311f45..2977e4cb 100644
--- a/DesktopEntries/CLV-P-HABBJ.desktop
+++ b/DesktopEntries/CLV-P-HABBJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HABBJ/CLV-P-HABBJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 65 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HABBJ/CLV-P-HABBJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 65 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-HABBJ
Name=ロックマン®2 Dr.ワイリーの謎
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HABBJ/CLV-P-HABBJ.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HABBJ/CLV-P-HABBJ.png
[X-CLOVER Game]
Code=CLV-P-HABBJ
diff --git a/DesktopEntries/CLV-P-HABCJ.desktop b/DesktopEntries/CLV-P-HABCJ.desktop
index fa710cf9..c0fd7cc7 100644
--- a/DesktopEntries/CLV-P-HABCJ.desktop
+++ b/DesktopEntries/CLV-P-HABCJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HABCJ/CLV-P-HABCJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 67 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HABCJ/CLV-P-HABCJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 67 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-HABCJ
Name=魔界村®
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HABCJ/CLV-P-HABCJ.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HABCJ/CLV-P-HABCJ.png
[X-CLOVER Game]
Code=CLV-P-HABCJ
diff --git a/DesktopEntries/CLV-P-HABLJ.desktop b/DesktopEntries/CLV-P-HABLJ.desktop
index 4eb31ec3..18a7572a 100644
--- a/DesktopEntries/CLV-P-HABLJ.desktop
+++ b/DesktopEntries/CLV-P-HABLJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HABLJ/CLV-P-HABLJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 75 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HABLJ/CLV-P-HABLJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 75 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-HABLJ
Name=ファイナルファンタジー®III
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HABLJ/CLV-P-HABLJ.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HABLJ/CLV-P-HABLJ.png
[X-CLOVER Game]
Code=CLV-P-HABLJ
diff --git a/DesktopEntries/CLV-P-HABMJ.desktop b/DesktopEntries/CLV-P-HABMJ.desktop
index b3782556..9edd153a 100644
--- a/DesktopEntries/CLV-P-HABMJ.desktop
+++ b/DesktopEntries/CLV-P-HABMJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HABMJ/CLV-P-HABMJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 75 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HABMJ/CLV-P-HABMJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 75 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-HABMJ
Name=パックマン
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HABMJ/CLV-P-HABMJ.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HABMJ/CLV-P-HABMJ.png
[X-CLOVER Game]
Code=CLV-P-HABMJ
diff --git a/DesktopEntries/CLV-P-HABNJ.desktop b/DesktopEntries/CLV-P-HABNJ.desktop
index 36e24894..124cd544 100644
--- a/DesktopEntries/CLV-P-HABNJ.desktop
+++ b/DesktopEntries/CLV-P-HABNJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HABNJ/CLV-P-HABNJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 63 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HABNJ/CLV-P-HABNJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 63 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-HABNJ
Name=ギャラガ
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HABNJ/CLV-P-HABNJ.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HABNJ/CLV-P-HABNJ.png
[X-CLOVER Game]
Code=CLV-P-HABNJ
diff --git a/DesktopEntries/CLV-P-HABQJ.desktop b/DesktopEntries/CLV-P-HABQJ.desktop
index 23409207..dd98b9bc 100644
--- a/DesktopEntries/CLV-P-HABQJ.desktop
+++ b/DesktopEntries/CLV-P-HABQJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HABQJ/CLV-P-HABQJ.qd --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 90 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HABQJ/CLV-P-HABQJ.qd --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 90 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-HABQJ
Name=悪魔城ドラキュラ
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HABQJ/CLV-P-HABQJ.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HABQJ/CLV-P-HABQJ.png
[X-CLOVER Game]
Code=CLV-P-HABQJ
diff --git a/DesktopEntries/CLV-P-HABRJ.desktop b/DesktopEntries/CLV-P-HABRJ.desktop
index 0367ae15..53177525 100644
--- a/DesktopEntries/CLV-P-HABRJ.desktop
+++ b/DesktopEntries/CLV-P-HABRJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HABRJ/CLV-P-HABRJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 70 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HABRJ/CLV-P-HABRJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 70 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-HABRJ
Name=グラディウス
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HABRJ/CLV-P-HABRJ.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HABRJ/CLV-P-HABRJ.png
[X-CLOVER Game]
Code=CLV-P-HABRJ
diff --git a/DesktopEntries/CLV-P-HABVJ.desktop b/DesktopEntries/CLV-P-HABVJ.desktop
index 8097f15c..18b5d1b3 100644
--- a/DesktopEntries/CLV-P-HABVJ.desktop
+++ b/DesktopEntries/CLV-P-HABVJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HABVJ/CLV-P-HABVJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 77 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HABVJ/CLV-P-HABVJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 77 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-HABVJ
Name=スーパー魂斗羅
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HABVJ/CLV-P-HABVJ.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HABVJ/CLV-P-HABVJ.png
[X-CLOVER Game]
Code=CLV-P-HABVJ
diff --git a/DesktopEntries/CLV-P-HACAJ.desktop b/DesktopEntries/CLV-P-HACAJ.desktop
index 6d156b53..a2e8c32d 100644
--- a/DesktopEntries/CLV-P-HACAJ.desktop
+++ b/DesktopEntries/CLV-P-HACAJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HACAJ/CLV-P-HACAJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 78 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HACAJ/CLV-P-HACAJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 78 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-HACAJ
Name=イー・アル・カンフー
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HACAJ/CLV-P-HACAJ.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HACAJ/CLV-P-HACAJ.png
[X-CLOVER Game]
Code=CLV-P-HACAJ
diff --git a/DesktopEntries/CLV-P-HACBJ.desktop b/DesktopEntries/CLV-P-HACBJ.desktop
index d8172d13..0b4bf992 100644
--- a/DesktopEntries/CLV-P-HACBJ.desktop
+++ b/DesktopEntries/CLV-P-HACBJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HACBJ/CLV-P-HACBJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 82 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HACBJ/CLV-P-HACBJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 82 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-HACBJ
Name=忍者龍剣伝
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HACBJ/CLV-P-HACBJ.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HACBJ/CLV-P-HACBJ.png
[X-CLOVER Game]
Code=CLV-P-HACBJ
diff --git a/DesktopEntries/CLV-P-HACCJ.desktop b/DesktopEntries/CLV-P-HACCJ.desktop
index 5b2f6188..71805271 100644
--- a/DesktopEntries/CLV-P-HACCJ.desktop
+++ b/DesktopEntries/CLV-P-HACCJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HACCJ/CLV-P-HACCJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 75 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HACCJ/CLV-P-HACCJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 75 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-HACCJ
Name=ソロモンの鍵
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HACCJ/CLV-P-HACCJ.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HACCJ/CLV-P-HACCJ.png
[X-CLOVER Game]
Code=CLV-P-HACCJ
diff --git a/DesktopEntries/CLV-P-HACEJ.desktop b/DesktopEntries/CLV-P-HACEJ.desktop
index 9b8c1e9f..85e74a5b 100644
--- a/DesktopEntries/CLV-P-HACEJ.desktop
+++ b/DesktopEntries/CLV-P-HACEJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HACEJ/CLV-P-HACEJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 72 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HACEJ/CLV-P-HACEJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 72 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-HACEJ
Name=つっぱり大相撲
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HACEJ/CLV-P-HACEJ.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HACEJ/CLV-P-HACEJ.png
[X-CLOVER Game]
Code=CLV-P-HACEJ
diff --git a/DesktopEntries/CLV-P-HACHJ.desktop b/DesktopEntries/CLV-P-HACHJ.desktop
index fca811aa..124ee0ef 100644
--- a/DesktopEntries/CLV-P-HACHJ.desktop
+++ b/DesktopEntries/CLV-P-HACHJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HACHJ/CLV-P-HACHJ.nes --guest-overscan-dimensions 12,8,9,11 --initial-fadein-durations 3,2 --volume 80 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HACHJ/CLV-P-HACHJ.nes --guest-overscan-dimensions 12,8,9,11 --initial-fadein-durations 3,2 --volume 80 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-HACHJ
Name=ダブルドラゴンⅡ The Revenge
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HACHJ/CLV-P-HACHJ.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HACHJ/CLV-P-HACHJ.png
[X-CLOVER Game]
Code=CLV-P-HACHJ
diff --git a/DesktopEntries/CLV-P-HACJJ.desktop b/DesktopEntries/CLV-P-HACJJ.desktop
index 1f32c568..e8f90cb2 100644
--- a/DesktopEntries/CLV-P-HACJJ.desktop
+++ b/DesktopEntries/CLV-P-HACJJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HACJJ/CLV-P-HACJJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 83 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HACJJ/CLV-P-HACJJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 83 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-HACJJ
Name=ダウンタウン熱血物語
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HACJJ/CLV-P-HACJJ.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HACJJ/CLV-P-HACJJ.png
[X-CLOVER Game]
Code=CLV-P-HACJJ
diff --git a/DesktopEntries/CLV-P-HACLJ.desktop b/DesktopEntries/CLV-P-HACLJ.desktop
index 85e5dcb3..13759bed 100644
--- a/DesktopEntries/CLV-P-HACLJ.desktop
+++ b/DesktopEntries/CLV-P-HACLJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HACLJ/CLV-P-HACLJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 78 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HACLJ/CLV-P-HACLJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 78 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-HACLJ
Name=ダウンタウン熱血行進曲 それゆけ大運動会
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HACLJ/CLV-P-HACLJ.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HACLJ/CLV-P-HACLJ.png
[X-CLOVER Game]
Code=CLV-P-HACLJ
diff --git a/DesktopEntries/CLV-P-HACPJ.desktop b/DesktopEntries/CLV-P-HACPJ.desktop
index 49fe3829..35fe4cbc 100644
--- a/DesktopEntries/CLV-P-HACPJ.desktop
+++ b/DesktopEntries/CLV-P-HACPJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HACPJ/CLV-P-HACPJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 68 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HACPJ/CLV-P-HACPJ.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 68 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-HACPJ
Name=アトランチスの謎
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-HACPJ/CLV-P-HACPJ.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-HACPJ/CLV-P-HACPJ.png
[X-CLOVER Game]
Code=CLV-P-HACPJ
diff --git a/DesktopEntries/CLV-P-NAAAE.desktop b/DesktopEntries/CLV-P-NAAAE.desktop
index 8fbac89c..e5a9ea4b 100644
--- a/DesktopEntries/CLV-P-NAAAE.desktop
+++ b/DesktopEntries/CLV-P-NAAAE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAAAE/CLV-P-NAAAE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 75 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAAAE/CLV-P-NAAAE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 75 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-NAAAE
Name=Super Mario Bros.
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAAAE/CLV-P-NAAAE.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAAAE/CLV-P-NAAAE.png
[X-CLOVER Game]
Code=CLV-P-NAAAE
diff --git a/DesktopEntries/CLV-P-NAACE.desktop b/DesktopEntries/CLV-P-NAACE.desktop
index 483df9cb..fa997b40 100644
--- a/DesktopEntries/CLV-P-NAACE.desktop
+++ b/DesktopEntries/CLV-P-NAACE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAACE/CLV-P-NAACE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 75 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAACE/CLV-P-NAACE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 75 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-NAACE
Name=Super Mario Bros. 3
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAACE/CLV-P-NAACE.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAACE/CLV-P-NAACE.png
[X-CLOVER Game]
Code=CLV-P-NAACE
diff --git a/DesktopEntries/CLV-P-NAADE.desktop b/DesktopEntries/CLV-P-NAADE.desktop
index 7fc06f73..f7dc0d1c 100644
--- a/DesktopEntries/CLV-P-NAADE.desktop
+++ b/DesktopEntries/CLV-P-NAADE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAADE/CLV-P-NAADE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 70 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAADE/CLV-P-NAADE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 70 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-NAADE
Name=Super Mario Bros. 2
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAADE/CLV-P-NAADE.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAADE/CLV-P-NAADE.png
[X-CLOVER Game]
Code=CLV-P-NAADE
diff --git a/DesktopEntries/CLV-P-NAAEE.desktop b/DesktopEntries/CLV-P-NAAEE.desktop
index 7c3d1b61..abcd3f49 100644
--- a/DesktopEntries/CLV-P-NAAEE.desktop
+++ b/DesktopEntries/CLV-P-NAAEE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAAEE/CLV-P-NAAEE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 75 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAAEE/CLV-P-NAAEE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 75 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-NAAEE
Name=Donkey Kong
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAAEE/CLV-P-NAAEE.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAAEE/CLV-P-NAAEE.png
[X-CLOVER Game]
Code=CLV-P-NAAEE
diff --git a/DesktopEntries/CLV-P-NAAFE.desktop b/DesktopEntries/CLV-P-NAAFE.desktop
index 5e8746a6..07a14111 100644
--- a/DesktopEntries/CLV-P-NAAFE.desktop
+++ b/DesktopEntries/CLV-P-NAAFE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAAFE/CLV-P-NAAFE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 75 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAAFE/CLV-P-NAAFE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 75 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-NAAFE
Name=Donkey Kong Jr.
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAAFE/CLV-P-NAAFE.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAAFE/CLV-P-NAAFE.png
[X-CLOVER Game]
Code=CLV-P-NAAFE
diff --git a/DesktopEntries/CLV-P-NAAHE.desktop b/DesktopEntries/CLV-P-NAAHE.desktop
index 3e5c8f34..187fcf44 100644
--- a/DesktopEntries/CLV-P-NAAHE.desktop
+++ b/DesktopEntries/CLV-P-NAAHE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAAHE/CLV-P-NAAHE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 70 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAAHE/CLV-P-NAAHE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 70 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-NAAHE
Name=Excitebike
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAAHE/CLV-P-NAAHE.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAAHE/CLV-P-NAAHE.png
[X-CLOVER Game]
Code=CLV-P-NAAHE
diff --git a/DesktopEntries/CLV-P-NAANE.desktop b/DesktopEntries/CLV-P-NAANE.desktop
index 675e8163..9875b815 100644
--- a/DesktopEntries/CLV-P-NAANE.desktop
+++ b/DesktopEntries/CLV-P-NAANE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAANE/CLV-P-NAANE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 5,2 --volume 75 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAANE/CLV-P-NAANE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 5,2 --volume 75 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-NAANE
Name=The Legend of Zelda
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAANE/CLV-P-NAANE.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAANE/CLV-P-NAANE.png
[X-CLOVER Game]
Code=CLV-P-NAANE
diff --git a/DesktopEntries/CLV-P-NAAPE.desktop b/DesktopEntries/CLV-P-NAAPE.desktop
index f87b9c3c..4c9020ce 100644
--- a/DesktopEntries/CLV-P-NAAPE.desktop
+++ b/DesktopEntries/CLV-P-NAAPE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAAPE/CLV-P-NAAPE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 75 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAAPE/CLV-P-NAAPE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 75 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-NAAPE
Name=Kirby's Adventure
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAAPE/CLV-P-NAAPE.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAAPE/CLV-P-NAAPE.png
[X-CLOVER Game]
Code=CLV-P-NAAPE
diff --git a/DesktopEntries/CLV-P-NAAQE.desktop b/DesktopEntries/CLV-P-NAAQE.desktop
index 34d54790..93cf4fcf 100644
--- a/DesktopEntries/CLV-P-NAAQE.desktop
+++ b/DesktopEntries/CLV-P-NAAQE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAAQE/CLV-P-NAAQE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 75 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAAQE/CLV-P-NAAQE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 75 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-NAAQE
Name=Metroid
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAAQE/CLV-P-NAAQE.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAAQE/CLV-P-NAAQE.png
[X-CLOVER Game]
Code=CLV-P-NAAQE
diff --git a/DesktopEntries/CLV-P-NAARE.desktop b/DesktopEntries/CLV-P-NAARE.desktop
index cb3c2203..5726d318 100644
--- a/DesktopEntries/CLV-P-NAARE.desktop
+++ b/DesktopEntries/CLV-P-NAARE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAARE/CLV-P-NAARE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 70 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAARE/CLV-P-NAARE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 70 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-NAARE
Name=Balloon Fight
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAARE/CLV-P-NAARE.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAARE/CLV-P-NAARE.png
[X-CLOVER Game]
Code=CLV-P-NAARE
diff --git a/DesktopEntries/CLV-P-NAASE.desktop b/DesktopEntries/CLV-P-NAASE.desktop
index a4fbdc52..7277d425 100644
--- a/DesktopEntries/CLV-P-NAASE.desktop
+++ b/DesktopEntries/CLV-P-NAASE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAASE/CLV-P-NAASE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 70 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAASE/CLV-P-NAASE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 70 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-NAASE
Name=Zelda II - The Adventure of Link
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAASE/CLV-P-NAASE.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAASE/CLV-P-NAASE.png
[X-CLOVER Game]
Code=CLV-P-NAASE
diff --git a/DesktopEntries/CLV-P-NAATE.desktop b/DesktopEntries/CLV-P-NAATE.desktop
index 327e9b79..c44a6b95 100644
--- a/DesktopEntries/CLV-P-NAATE.desktop
+++ b/DesktopEntries/CLV-P-NAATE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAATE/CLV-P-NAATE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 73 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAATE/CLV-P-NAATE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 73 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-NAATE
Name=Punch-Out!! Featuring Mr. Dream
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAATE/CLV-P-NAATE.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAATE/CLV-P-NAATE.png
[X-CLOVER Game]
Code=CLV-P-NAATE
diff --git a/DesktopEntries/CLV-P-NAAUE.desktop b/DesktopEntries/CLV-P-NAAUE.desktop
index dcacf837..d3d05b93 100644
--- a/DesktopEntries/CLV-P-NAAUE.desktop
+++ b/DesktopEntries/CLV-P-NAAUE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAAUE/CLV-P-NAAUE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 72 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAAUE/CLV-P-NAAUE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 72 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-NAAUE
Name=Ice Climber
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAAUE/CLV-P-NAAUE.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAAUE/CLV-P-NAAUE.png
[X-CLOVER Game]
Code=CLV-P-NAAUE
diff --git a/DesktopEntries/CLV-P-NAAVE.desktop b/DesktopEntries/CLV-P-NAAVE.desktop
index 576d4d00..d6dc92a6 100644
--- a/DesktopEntries/CLV-P-NAAVE.desktop
+++ b/DesktopEntries/CLV-P-NAAVE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAAVE/CLV-P-NAAVE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 77 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAAVE/CLV-P-NAAVE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 77 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-NAAVE
Name=Kid Icarus
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAAVE/CLV-P-NAAVE.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAAVE/CLV-P-NAAVE.png
[X-CLOVER Game]
Code=CLV-P-NAAVE
diff --git a/DesktopEntries/CLV-P-NAAWE.desktop b/DesktopEntries/CLV-P-NAAWE.desktop
index 2a52075c..a072cb32 100644
--- a/DesktopEntries/CLV-P-NAAWE.desktop
+++ b/DesktopEntries/CLV-P-NAAWE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAAWE/CLV-P-NAAWE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 69 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAAWE/CLV-P-NAAWE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 69 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-NAAWE
Name=Mario Bros.
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAAWE/CLV-P-NAAWE.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAAWE/CLV-P-NAAWE.png
[X-CLOVER Game]
Code=CLV-P-NAAWE
diff --git a/DesktopEntries/CLV-P-NAAXE.desktop b/DesktopEntries/CLV-P-NAAXE.desktop
index 1c45017e..567a3c4c 100644
--- a/DesktopEntries/CLV-P-NAAXE.desktop
+++ b/DesktopEntries/CLV-P-NAAXE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAAXE/CLV-P-NAAXE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 75 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAAXE/CLV-P-NAAXE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 75 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-NAAXE
Name=Dr. MARIO
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAAXE/CLV-P-NAAXE.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAAXE/CLV-P-NAAXE.png
[X-CLOVER Game]
Code=CLV-P-NAAXE
diff --git a/DesktopEntries/CLV-P-NAAZE.desktop b/DesktopEntries/CLV-P-NAAZE.desktop
index 318aac1c..331219c6 100644
--- a/DesktopEntries/CLV-P-NAAZE.desktop
+++ b/DesktopEntries/CLV-P-NAAZE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAAZE/CLV-P-NAAZE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 75 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAAZE/CLV-P-NAAZE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 75 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-NAAZE
Name=StarTropics
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAAZE/CLV-P-NAAZE.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NAAZE/CLV-P-NAAZE.png
[X-CLOVER Game]
Code=CLV-P-NAAZE
diff --git a/DesktopEntries/CLV-P-NABBE.desktop b/DesktopEntries/CLV-P-NABBE.desktop
index 9a31e8e6..443f6959 100644
--- a/DesktopEntries/CLV-P-NABBE.desktop
+++ b/DesktopEntries/CLV-P-NABBE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NABBE/CLV-P-NABBE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 65 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NABBE/CLV-P-NABBE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 65 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-NABBE
Name=MEGA MAN™ 2
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NABBE/CLV-P-NABBE.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NABBE/CLV-P-NABBE.png
[X-CLOVER Game]
Code=CLV-P-NABBE
diff --git a/DesktopEntries/CLV-P-NABCE.desktop b/DesktopEntries/CLV-P-NABCE.desktop
index d9bab2ab..76c768cd 100644
--- a/DesktopEntries/CLV-P-NABCE.desktop
+++ b/DesktopEntries/CLV-P-NABCE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NABCE/CLV-P-NABCE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 67 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NABCE/CLV-P-NABCE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 67 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-NABCE
Name=GHOSTS'N GOBLINS™
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NABCE/CLV-P-NABCE.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NABCE/CLV-P-NABCE.png
[X-CLOVER Game]
Code=CLV-P-NABCE
diff --git a/DesktopEntries/CLV-P-NABJE.desktop b/DesktopEntries/CLV-P-NABJE.desktop
index fc7fa090..ee631c61 100644
--- a/DesktopEntries/CLV-P-NABJE.desktop
+++ b/DesktopEntries/CLV-P-NABJE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NABJE/CLV-P-NABJE.nes --armet-threshold 11 --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 75 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NABJE/CLV-P-NABJE.nes --armet-threshold 11 --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 75 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-NABJE
Name=FINAL FANTASY®
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NABJE/CLV-P-NABJE.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NABJE/CLV-P-NABJE.png
[X-CLOVER Game]
Code=CLV-P-NABJE
diff --git a/DesktopEntries/CLV-P-NABKE.desktop b/DesktopEntries/CLV-P-NABKE.desktop
index 3a9f01a9..bc6c1966 100644
--- a/DesktopEntries/CLV-P-NABKE.desktop
+++ b/DesktopEntries/CLV-P-NABKE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NABKE/CLV-P-NABKE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 72 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NABKE/CLV-P-NABKE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 72 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-NABKE
Name=BUBBLE BOBBLE
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NABKE/CLV-P-NABKE.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NABKE/CLV-P-NABKE.png
[X-CLOVER Game]
Code=CLV-P-NABKE
diff --git a/DesktopEntries/CLV-P-NABME.desktop b/DesktopEntries/CLV-P-NABME.desktop
index 33810261..976091e3 100644
--- a/DesktopEntries/CLV-P-NABME.desktop
+++ b/DesktopEntries/CLV-P-NABME.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NABME/CLV-P-NABME.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 75 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NABME/CLV-P-NABME.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 75 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-NABME
Name=PAC-MAN
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NABME/CLV-P-NABME.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NABME/CLV-P-NABME.png
[X-CLOVER Game]
Code=CLV-P-NABME
diff --git a/DesktopEntries/CLV-P-NABNE.desktop b/DesktopEntries/CLV-P-NABNE.desktop
index ae5d26f8..d868d73f 100644
--- a/DesktopEntries/CLV-P-NABNE.desktop
+++ b/DesktopEntries/CLV-P-NABNE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NABNE/CLV-P-NABNE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 63 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NABNE/CLV-P-NABNE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 63 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-NABNE
Name=Galaga
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NABNE/CLV-P-NABNE.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NABNE/CLV-P-NABNE.png
[X-CLOVER Game]
Code=CLV-P-NABNE
diff --git a/DesktopEntries/CLV-P-NABQE.desktop b/DesktopEntries/CLV-P-NABQE.desktop
index 495cd4a0..11b62de7 100644
--- a/DesktopEntries/CLV-P-NABQE.desktop
+++ b/DesktopEntries/CLV-P-NABQE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NABQE/CLV-P-NABQE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 83 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NABQE/CLV-P-NABQE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 83 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-NABQE
Name=Castlevania
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NABQE/CLV-P-NABQE.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NABQE/CLV-P-NABQE.png
[X-CLOVER Game]
Code=CLV-P-NABQE
diff --git a/DesktopEntries/CLV-P-NABRE.desktop b/DesktopEntries/CLV-P-NABRE.desktop
index 9949388f..e2983626 100644
--- a/DesktopEntries/CLV-P-NABRE.desktop
+++ b/DesktopEntries/CLV-P-NABRE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NABRE/CLV-P-NABRE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 70 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NABRE/CLV-P-NABRE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 70 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-NABRE
Name=GRADIUS
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NABRE/CLV-P-NABRE.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NABRE/CLV-P-NABRE.png
[X-CLOVER Game]
Code=CLV-P-NABRE
diff --git a/DesktopEntries/CLV-P-NABVE.desktop b/DesktopEntries/CLV-P-NABVE.desktop
index c014718c..0df0e894 100644
--- a/DesktopEntries/CLV-P-NABVE.desktop
+++ b/DesktopEntries/CLV-P-NABVE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NABVE/CLV-P-NABVE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 77 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NABVE/CLV-P-NABVE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 77 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-NABVE
Name=Super C
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NABVE/CLV-P-NABVE.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NABVE/CLV-P-NABVE.png
[X-CLOVER Game]
Code=CLV-P-NABVE
diff --git a/DesktopEntries/CLV-P-NABXE.desktop b/DesktopEntries/CLV-P-NABXE.desktop
index 86b60c4b..7fc2ed2d 100644
--- a/DesktopEntries/CLV-P-NABXE.desktop
+++ b/DesktopEntries/CLV-P-NABXE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NABXE/CLV-P-NABXE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 80 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NABXE/CLV-P-NABXE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 80 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-NABXE
Name=Castlevania II Simon's Quest
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NABXE/CLV-P-NABXE.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NABXE/CLV-P-NABXE.png
[X-CLOVER Game]
Code=CLV-P-NABXE
diff --git a/DesktopEntries/CLV-P-NACBE.desktop b/DesktopEntries/CLV-P-NACBE.desktop
index 4210a852..18d9b432 100644
--- a/DesktopEntries/CLV-P-NACBE.desktop
+++ b/DesktopEntries/CLV-P-NACBE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NACBE/CLV-P-NACBE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 82 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NACBE/CLV-P-NACBE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 82 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-NACBE
Name=NINJA GAIDEN
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NACBE/CLV-P-NACBE.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NACBE/CLV-P-NACBE.png
[X-CLOVER Game]
Code=CLV-P-NACBE
diff --git a/DesktopEntries/CLV-P-NACDE.desktop b/DesktopEntries/CLV-P-NACDE.desktop
index fca73eae..43356c50 100644
--- a/DesktopEntries/CLV-P-NACDE.desktop
+++ b/DesktopEntries/CLV-P-NACDE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NACDE/CLV-P-NACDE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 85 --enable-armet
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NACDE/CLV-P-NACDE.nes --guest-overscan-dimensions 0,0,9,3 --initial-fadein-durations 3,2 --volume 85 --enable-armet
Path=/var/lib/clover/profiles/0//CLV-P-NACDE
Name=TECMO BOWL
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NACDE/CLV-P-NACDE.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NACDE/CLV-P-NACDE.png
[X-CLOVER Game]
Code=CLV-P-NACDE
diff --git a/DesktopEntries/CLV-P-NACHE.desktop b/DesktopEntries/CLV-P-NACHE.desktop
index 05ad1f6f..9d4de326 100644
--- a/DesktopEntries/CLV-P-NACHE.desktop
+++ b/DesktopEntries/CLV-P-NACHE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-kachikachi-wr /var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NACHE/CLV-P-NACHE.nes --guest-overscan-dimensions 12,8,9,11 --initial-fadein-durations 3,2 --volume 80
+Exec=/bin/clover-kachikachi-wr /var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NACHE/CLV-P-NACHE.nes --guest-overscan-dimensions 12,8,9,11 --initial-fadein-durations 3,2 --volume 80
Path=/var/lib/clover/profiles/0//CLV-P-NACHE
Name=DOUBLE DRAGON II: The Revenge
-Icon=/var/lib/hakchi/squashfs/usr/share/games/nes/kachikachi/CLV-P-NACHE/CLV-P-NACHE.png
+Icon=/var/squashfs/usr/share/games/nes/kachikachi/CLV-P-NACHE/CLV-P-NACHE.png
[X-CLOVER Game]
Code=CLV-P-NACHE
diff --git a/DesktopEntries/CLV-P-SAAAE.desktop b/DesktopEntries/CLV-P-SAAAE.desktop
index 10e421a3..b33b37d9 100644
--- a/DesktopEntries/CLV-P-SAAAE.desktop
+++ b/DesktopEntries/CLV-P-SAAAE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-canoe-shvc-wr -rom /var/lib/hakchi/squashfs/usr/share/games/CLV-P-SAAAE/CLV-P-SAAAE.sfrom --volume 100 -rollback-snapshot-period 600
+Exec=/bin/clover-canoe-shvc-wr -rom /var/squashfs/usr/share/games/CLV-P-SAAAE/CLV-P-SAAAE.sfrom --volume 100 -rollback-snapshot-period 600
Path=/var/lib/clover/profiles/0//CLV-P-SAAAE
Name=Super Mario World
-Icon=/var/lib/hakchi/squashfs/usr/share/games/CLV-P-SAAAE/CLV-P-SAAAE.png
+Icon=/var/squashfs/usr/share/games/CLV-P-SAAAE/CLV-P-SAAAE.png
[X-CLOVER Game]
Code=CLV-P-SAAAE
diff --git a/DesktopEntries/CLV-P-SAABE.desktop b/DesktopEntries/CLV-P-SAABE.desktop
index 81ed0d60..2b369d06 100644
--- a/DesktopEntries/CLV-P-SAABE.desktop
+++ b/DesktopEntries/CLV-P-SAABE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-canoe-shvc-wr -rom /var/lib/hakchi/squashfs/usr/share/games/CLV-P-SAABE/CLV-P-SAABE.sfrom --volume 80 -rollback-snapshot-period 600
+Exec=/bin/clover-canoe-shvc-wr -rom /var/squashfs/usr/share/games/CLV-P-SAABE/CLV-P-SAABE.sfrom --volume 80 -rollback-snapshot-period 600
Path=/var/lib/clover/profiles/0//CLV-P-SAABE
Name=F-ZERO
-Icon=/var/lib/hakchi/squashfs/usr/share/games/CLV-P-SAABE/CLV-P-SAABE.png
+Icon=/var/squashfs/usr/share/games/CLV-P-SAABE/CLV-P-SAABE.png
[X-CLOVER Game]
Code=CLV-P-SAABE
diff --git a/DesktopEntries/CLV-P-SAAEE.desktop b/DesktopEntries/CLV-P-SAAEE.desktop
index 6409d9fd..ace19b75 100644
--- a/DesktopEntries/CLV-P-SAAEE.desktop
+++ b/DesktopEntries/CLV-P-SAAEE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-canoe-shvc-wr -rom /var/lib/hakchi/squashfs/usr/share/games/CLV-P-SAAEE/CLV-P-SAAEE.sfrom --volume 85 -rollback-snapshot-period 600
+Exec=/bin/clover-canoe-shvc-wr -rom /var/squashfs/usr/share/games/CLV-P-SAAEE/CLV-P-SAAEE.sfrom --volume 85 -rollback-snapshot-period 600
Path=/var/lib/clover/profiles/0//CLV-P-SAAEE
Name=The Legend of Zelda: A Link to the Past
-Icon=/var/lib/hakchi/squashfs/usr/share/games/CLV-P-SAAEE/CLV-P-SAAEE.png
+Icon=/var/squashfs/usr/share/games/CLV-P-SAAEE/CLV-P-SAAEE.png
[X-CLOVER Game]
Code=CLV-P-SAAEE
diff --git a/DesktopEntries/CLV-P-SAAFE.desktop b/DesktopEntries/CLV-P-SAAFE.desktop
index 53ebc661..971d7c27 100644
--- a/DesktopEntries/CLV-P-SAAFE.desktop
+++ b/DesktopEntries/CLV-P-SAAFE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-canoe-shvc-wr -rom /var/lib/hakchi/squashfs/usr/share/games/CLV-P-SAAFE/CLV-P-SAAFE.sfrom --volume 70 -rollback-snapshot-period 600
+Exec=/bin/clover-canoe-shvc-wr -rom /var/squashfs/usr/share/games/CLV-P-SAAFE/CLV-P-SAAFE.sfrom --volume 70 -rollback-snapshot-period 600
Path=/var/lib/clover/profiles/0//CLV-P-SAAFE
Name=Super Mario Kart
-Icon=/var/lib/hakchi/squashfs/usr/share/games/CLV-P-SAAFE/CLV-P-SAAFE.png
+Icon=/var/squashfs/usr/share/games/CLV-P-SAAFE/CLV-P-SAAFE.png
[X-CLOVER Game]
Code=CLV-P-SAAFE
diff --git a/DesktopEntries/CLV-P-SAAHE.desktop b/DesktopEntries/CLV-P-SAAHE.desktop
index d0392a24..85cf5d09 100644
--- a/DesktopEntries/CLV-P-SAAHE.desktop
+++ b/DesktopEntries/CLV-P-SAAHE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-canoe-shvc-wr -rom /var/lib/hakchi/squashfs/usr/share/games/CLV-P-SAAHE/CLV-P-SAAHE.sfrom --volume 100 -rollback-snapshot-period 600
+Exec=/bin/clover-canoe-shvc-wr -rom /var/squashfs/usr/share/games/CLV-P-SAAHE/CLV-P-SAAHE.sfrom --volume 100 -rollback-snapshot-period 600
Path=/var/lib/clover/profiles/0//CLV-P-SAAHE
Name=Super Metroid
-Icon=/var/lib/hakchi/squashfs/usr/share/games/CLV-P-SAAHE/CLV-P-SAAHE.png
+Icon=/var/squashfs/usr/share/games/CLV-P-SAAHE/CLV-P-SAAHE.png
[X-CLOVER Game]
Code=CLV-P-SAAHE
diff --git a/DesktopEntries/CLV-P-SAAJE.desktop b/DesktopEntries/CLV-P-SAAJE.desktop
index daa8ef74..08260182 100644
--- a/DesktopEntries/CLV-P-SAAJE.desktop
+++ b/DesktopEntries/CLV-P-SAAJE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-canoe-shvc-wr -rom /var/lib/hakchi/squashfs/usr/share/games/CLV-P-SAAJE/CLV-P-SAAJE.sfrom --volume 85 -rollback-snapshot-period 3600
+Exec=/bin/clover-canoe-shvc-wr -rom /var/squashfs/usr/share/games/CLV-P-SAAJE/CLV-P-SAAJE.sfrom --volume 85 -rollback-snapshot-period 3600
Path=/var/lib/clover/profiles/0//CLV-P-SAAJE
Name=EarthBound
-Icon=/var/lib/hakchi/squashfs/usr/share/games/CLV-P-SAAJE/CLV-P-SAAJE.png
+Icon=/var/squashfs/usr/share/games/CLV-P-SAAJE/CLV-P-SAAJE.png
[X-CLOVER Game]
Code=CLV-P-SAAJE
diff --git a/DesktopEntries/CLV-P-SAAKE.desktop b/DesktopEntries/CLV-P-SAAKE.desktop
index 07079783..45034120 100644
--- a/DesktopEntries/CLV-P-SAAKE.desktop
+++ b/DesktopEntries/CLV-P-SAAKE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-canoe-shvc-wr -rom /var/lib/hakchi/squashfs/usr/share/games/CLV-P-SAAKE/CLV-P-SAAKE.sfrom --volume 85 -rollback-snapshot-period 600
+Exec=/bin/clover-canoe-shvc-wr -rom /var/squashfs/usr/share/games/CLV-P-SAAKE/CLV-P-SAAKE.sfrom --volume 85 -rollback-snapshot-period 600
Path=/var/lib/clover/profiles/0//CLV-P-SAAKE
Name=Kirby's Dream Course
-Icon=/var/lib/hakchi/squashfs/usr/share/games/CLV-P-SAAKE/CLV-P-SAAKE.png
+Icon=/var/squashfs/usr/share/games/CLV-P-SAAKE/CLV-P-SAAKE.png
[X-CLOVER Game]
Code=CLV-P-SAAKE
diff --git a/DesktopEntries/CLV-P-SAALE.desktop b/DesktopEntries/CLV-P-SAALE.desktop
index 39fad6c2..06ae1b90 100644
--- a/DesktopEntries/CLV-P-SAALE.desktop
+++ b/DesktopEntries/CLV-P-SAALE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-canoe-shvc-wr -rom /var/lib/hakchi/squashfs/usr/share/games/CLV-P-SAALE/CLV-P-SAALE.sfrom --volume 100 -rollback-snapshot-period 600
+Exec=/bin/clover-canoe-shvc-wr -rom /var/squashfs/usr/share/games/CLV-P-SAALE/CLV-P-SAALE.sfrom --volume 100 -rollback-snapshot-period 600
Path=/var/lib/clover/profiles/0//CLV-P-SAALE
Name=Donkey Kong Country
-Icon=/var/lib/hakchi/squashfs/usr/share/games/CLV-P-SAALE/CLV-P-SAALE.png
+Icon=/var/squashfs/usr/share/games/CLV-P-SAALE/CLV-P-SAALE.png
[X-CLOVER Game]
Code=CLV-P-SAALE
diff --git a/DesktopEntries/CLV-P-SAAQE.desktop b/DesktopEntries/CLV-P-SAAQE.desktop
index 043a2531..792f86aa 100644
--- a/DesktopEntries/CLV-P-SAAQE.desktop
+++ b/DesktopEntries/CLV-P-SAAQE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-canoe-shvc-wr -rom /var/lib/hakchi/squashfs/usr/share/games/CLV-P-SAAQE/CLV-P-SAAQE.sfrom --volume 80 -rollback-snapshot-period 600
+Exec=/bin/clover-canoe-shvc-wr -rom /var/squashfs/usr/share/games/CLV-P-SAAQE/CLV-P-SAAQE.sfrom --volume 80 -rollback-snapshot-period 600
Path=/var/lib/clover/profiles/0//CLV-P-SAAQE
Name=Kirby Super Star
-Icon=/var/lib/hakchi/squashfs/usr/share/games/CLV-P-SAAQE/CLV-P-SAAQE.png
+Icon=/var/squashfs/usr/share/games/CLV-P-SAAQE/CLV-P-SAAQE.png
[X-CLOVER Game]
Code=CLV-P-SAAQE
diff --git a/DesktopEntries/CLV-P-SAAXE.desktop b/DesktopEntries/CLV-P-SAAXE.desktop
index e107dce1..0b0f050d 100644
--- a/DesktopEntries/CLV-P-SAAXE.desktop
+++ b/DesktopEntries/CLV-P-SAAXE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-canoe-shvc-wr -rom /var/lib/hakchi/squashfs/usr/share/games/CLV-P-SAAXE/CLV-P-SAAXE.sfrom --volume 100 -rollback-snapshot-period 600
+Exec=/bin/clover-canoe-shvc-wr -rom /var/squashfs/usr/share/games/CLV-P-SAAXE/CLV-P-SAAXE.sfrom --volume 100 -rollback-snapshot-period 600
Path=/var/lib/clover/profiles/0//CLV-P-SAAXE
Name=Super Punch-Out!!
-Icon=/var/lib/hakchi/squashfs/usr/share/games/CLV-P-SAAXE/CLV-P-SAAXE.png
+Icon=/var/squashfs/usr/share/games/CLV-P-SAAXE/CLV-P-SAAXE.png
[X-CLOVER Game]
Code=CLV-P-SAAXE
diff --git a/DesktopEntries/CLV-P-SABCE.desktop b/DesktopEntries/CLV-P-SABCE.desktop
index 07a8191d..dc377010 100644
--- a/DesktopEntries/CLV-P-SABCE.desktop
+++ b/DesktopEntries/CLV-P-SABCE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-canoe-shvc-wr -rom /var/lib/hakchi/squashfs/usr/share/games/CLV-P-SABCE/CLV-P-SABCE.sfrom --volume 85 -rollback-snapshot-period 600
+Exec=/bin/clover-canoe-shvc-wr -rom /var/squashfs/usr/share/games/CLV-P-SABCE/CLV-P-SABCE.sfrom --volume 85 -rollback-snapshot-period 600
Path=/var/lib/clover/profiles/0//CLV-P-SABCE
Name=Mega Man X
-Icon=/var/lib/hakchi/squashfs/usr/share/games/CLV-P-SABCE/CLV-P-SABCE.png
+Icon=/var/squashfs/usr/share/games/CLV-P-SABCE/CLV-P-SABCE.png
[X-CLOVER Game]
Code=CLV-P-SABCE
diff --git a/DesktopEntries/CLV-P-SABDE.desktop b/DesktopEntries/CLV-P-SABDE.desktop
index ef1366a6..f97aefb9 100644
--- a/DesktopEntries/CLV-P-SABDE.desktop
+++ b/DesktopEntries/CLV-P-SABDE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-canoe-shvc-wr -rom /var/lib/hakchi/squashfs/usr/share/games/CLV-P-SABDE/CLV-P-SABDE.sfrom --volume 37 -rollback-snapshot-period 600
+Exec=/bin/clover-canoe-shvc-wr -rom /var/squashfs/usr/share/games/CLV-P-SABDE/CLV-P-SABDE.sfrom --volume 37 -rollback-snapshot-period 600
Path=/var/lib/clover/profiles/0//CLV-P-SABDE
Name=Super Ghouls'n Ghosts
-Icon=/var/lib/hakchi/squashfs/usr/share/games/CLV-P-SABDE/CLV-P-SABDE.png
+Icon=/var/squashfs/usr/share/games/CLV-P-SABDE/CLV-P-SABDE.png
[X-CLOVER Game]
Code=CLV-P-SABDE
diff --git a/DesktopEntries/CLV-P-SABHE.desktop b/DesktopEntries/CLV-P-SABHE.desktop
index dc0113cc..50ec7f6a 100644
--- a/DesktopEntries/CLV-P-SABHE.desktop
+++ b/DesktopEntries/CLV-P-SABHE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-canoe-shvc-wr -rom /var/lib/hakchi/squashfs/usr/share/games/CLV-P-SABHE/CLV-P-SABHE.sfrom --volume 100 -rollback-snapshot-period 600
+Exec=/bin/clover-canoe-shvc-wr -rom /var/squashfs/usr/share/games/CLV-P-SABHE/CLV-P-SABHE.sfrom --volume 100 -rollback-snapshot-period 600
Path=/var/lib/clover/profiles/0//CLV-P-SABHE
Name=Street Fighter II Turbo: Hyper Fighting
-Icon=/var/lib/hakchi/squashfs/usr/share/games/CLV-P-SABHE/CLV-P-SABHE.png
+Icon=/var/squashfs/usr/share/games/CLV-P-SABHE/CLV-P-SABHE.png
[X-CLOVER Game]
Code=CLV-P-SABHE
diff --git a/DesktopEntries/CLV-P-SABQE.desktop b/DesktopEntries/CLV-P-SABQE.desktop
index 38e60925..7b4194a8 100644
--- a/DesktopEntries/CLV-P-SABQE.desktop
+++ b/DesktopEntries/CLV-P-SABQE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-canoe-shvc-wr -rom /var/lib/hakchi/squashfs/usr/share/games/CLV-P-SABQE/CLV-P-SABQE.sfrom --volume 60 -rollback-snapshot-period 3600
+Exec=/bin/clover-canoe-shvc-wr -rom /var/squashfs/usr/share/games/CLV-P-SABQE/CLV-P-SABQE.sfrom --volume 60 -rollback-snapshot-period 3600
Path=/var/lib/clover/profiles/0//CLV-P-SABQE
Name=Super Mario RPG: Legend of the Seven Stars
-Icon=/var/lib/hakchi/squashfs/usr/share/games/CLV-P-SABQE/CLV-P-SABQE.png
+Icon=/var/squashfs/usr/share/games/CLV-P-SABQE/CLV-P-SABQE.png
[X-CLOVER Game]
Code=CLV-P-SABQE
diff --git a/DesktopEntries/CLV-P-SABRE.desktop b/DesktopEntries/CLV-P-SABRE.desktop
index b72fb613..5cf33ed2 100644
--- a/DesktopEntries/CLV-P-SABRE.desktop
+++ b/DesktopEntries/CLV-P-SABRE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-canoe-shvc-wr -rom /var/lib/hakchi/squashfs/usr/share/games/CLV-P-SABRE/CLV-P-SABRE.sfrom --volume 75 -rollback-snapshot-period 3600
+Exec=/bin/clover-canoe-shvc-wr -rom /var/squashfs/usr/share/games/CLV-P-SABRE/CLV-P-SABRE.sfrom --volume 75 -rollback-snapshot-period 3600
Path=/var/lib/clover/profiles/0//CLV-P-SABRE
Name=Secret of Mana
-Icon=/var/lib/hakchi/squashfs/usr/share/games/CLV-P-SABRE/CLV-P-SABRE.png
+Icon=/var/squashfs/usr/share/games/CLV-P-SABRE/CLV-P-SABRE.png
[X-CLOVER Game]
Code=CLV-P-SABRE
diff --git a/DesktopEntries/CLV-P-SABTE.desktop b/DesktopEntries/CLV-P-SABTE.desktop
index 2e1d92df..bd65f1ee 100644
--- a/DesktopEntries/CLV-P-SABTE.desktop
+++ b/DesktopEntries/CLV-P-SABTE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-canoe-shvc-wr -rom /var/lib/hakchi/squashfs/usr/share/games/CLV-P-SABTE/CLV-P-SABTE.sfrom --volume 85 -rollback-snapshot-period 3600
+Exec=/bin/clover-canoe-shvc-wr -rom /var/squashfs/usr/share/games/CLV-P-SABTE/CLV-P-SABTE.sfrom --volume 85 -rollback-snapshot-period 3600
Path=/var/lib/clover/profiles/0//CLV-P-SABTE
Name=Final Fantasy III
-Icon=/var/lib/hakchi/squashfs/usr/share/games/CLV-P-SABTE/CLV-P-SABTE.png
+Icon=/var/squashfs/usr/share/games/CLV-P-SABTE/CLV-P-SABTE.png
[X-CLOVER Game]
Code=CLV-P-SABTE
diff --git a/DesktopEntries/CLV-P-SACBE.desktop b/DesktopEntries/CLV-P-SACBE.desktop
index 1a9ed691..1dfd9789 100644
--- a/DesktopEntries/CLV-P-SACBE.desktop
+++ b/DesktopEntries/CLV-P-SACBE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-canoe-shvc-wr -rom /var/lib/hakchi/squashfs/usr/share/games/CLV-P-SACBE/CLV-P-SACBE.sfrom --volume 85 -rollback-snapshot-period 600
+Exec=/bin/clover-canoe-shvc-wr -rom /var/squashfs/usr/share/games/CLV-P-SACBE/CLV-P-SACBE.sfrom --volume 85 -rollback-snapshot-period 600
Path=/var/lib/clover/profiles/0//CLV-P-SACBE
Name=Super Castlevania IV
-Icon=/var/lib/hakchi/squashfs/usr/share/games/CLV-P-SACBE/CLV-P-SACBE.png
+Icon=/var/squashfs/usr/share/games/CLV-P-SACBE/CLV-P-SACBE.png
[X-CLOVER Game]
Code=CLV-P-SACBE
diff --git a/DesktopEntries/CLV-P-SACCE.desktop b/DesktopEntries/CLV-P-SACCE.desktop
index f7e2a193..9b835ddf 100644
--- a/DesktopEntries/CLV-P-SACCE.desktop
+++ b/DesktopEntries/CLV-P-SACCE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-canoe-shvc-wr -rom /var/lib/hakchi/squashfs/usr/share/games/CLV-P-SACCE/CLV-P-SACCE.sfrom --volume 70 -rollback-snapshot-period 600
+Exec=/bin/clover-canoe-shvc-wr -rom /var/squashfs/usr/share/games/CLV-P-SACCE/CLV-P-SACCE.sfrom --volume 70 -rollback-snapshot-period 600
Path=/var/lib/clover/profiles/0//CLV-P-SACCE
Name=CONTRA III THE ALIEN WARS
-Icon=/var/lib/hakchi/squashfs/usr/share/games/CLV-P-SACCE/CLV-P-SACCE.png
+Icon=/var/squashfs/usr/share/games/CLV-P-SACCE/CLV-P-SACCE.png
[X-CLOVER Game]
Code=CLV-P-SACCE
diff --git a/DesktopEntries/CLV-P-SADGE.desktop b/DesktopEntries/CLV-P-SADGE.desktop
index 7553de85..eb98a622 100644
--- a/DesktopEntries/CLV-P-SADGE.desktop
+++ b/DesktopEntries/CLV-P-SADGE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-canoe-shvc-wr -rom /var/lib/hakchi/squashfs/usr/share/games/CLV-P-SADGE/CLV-P-SADGE.sfrom --volume 65 -rollback-snapshot-period 600 -output-dir /var/lib/clover/profiles/0/
+Exec=/bin/clover-canoe-shvc-wr -rom /var/squashfs/usr/share/games/CLV-P-SADGE/CLV-P-SADGE.sfrom --volume 65 -rollback-snapshot-period 600 -output-dir /var/lib/clover/profiles/0/
Path=/var/lib/clover/profiles/0//CLV-P-SADGE
Name=Star Fox
-Icon=/var/lib/hakchi/squashfs/usr/share/games/CLV-P-SADGE/CLV-P-SADGE.png
+Icon=/var/squashfs/usr/share/games/CLV-P-SADGE/CLV-P-SADGE.png
[X-CLOVER Game]
Code=CLV-P-SADGE
diff --git a/DesktopEntries/CLV-P-SADJE.desktop b/DesktopEntries/CLV-P-SADJE.desktop
index e0bd7901..386bd8a5 100644
--- a/DesktopEntries/CLV-P-SADJE.desktop
+++ b/DesktopEntries/CLV-P-SADJE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-canoe-shvc-wr -rom /var/lib/hakchi/squashfs/usr/share/games/CLV-P-SADJE/CLV-P-SADJE.sfrom --volume 70 -rollback-snapshot-period 600
+Exec=/bin/clover-canoe-shvc-wr -rom /var/squashfs/usr/share/games/CLV-P-SADJE/CLV-P-SADJE.sfrom --volume 70 -rollback-snapshot-period 600
Path=/var/lib/clover/profiles/0//CLV-P-SADJE
Name=Yoshi's Island
-Icon=/var/lib/hakchi/squashfs/usr/share/games/CLV-P-SADJE/CLV-P-SADJE.png
+Icon=/var/squashfs/usr/share/games/CLV-P-SADJE/CLV-P-SADJE.png
[X-CLOVER Game]
Code=CLV-P-SADJE
diff --git a/DesktopEntries/CLV-P-SADKE.desktop b/DesktopEntries/CLV-P-SADKE.desktop
index 15d9b73e..5a33a1b6 100644
--- a/DesktopEntries/CLV-P-SADKE.desktop
+++ b/DesktopEntries/CLV-P-SADKE.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-canoe-shvc-wr -rom /var/lib/hakchi/squashfs/usr/share/games/CLV-P-SADKE/CLV-P-SADKE.sfrom --volume 65 -rollback-snapshot-period 600
+Exec=/bin/clover-canoe-shvc-wr -rom /var/squashfs/usr/share/games/CLV-P-SADKE/CLV-P-SADKE.sfrom --volume 65 -rollback-snapshot-period 600
Path=/var/lib/clover/profiles/0//CLV-P-SADKE
Name=Star Fox 2
-Icon=/var/lib/hakchi/squashfs/usr/share/games/CLV-P-SADKE/CLV-P-SADKE.png
+Icon=/var/squashfs/usr/share/games/CLV-P-SADKE/CLV-P-SADKE.png
[X-CLOVER Game]
Code=CLV-P-SADKE
diff --git a/DesktopEntries/CLV-P-VAAAJ.desktop b/DesktopEntries/CLV-P-VAAAJ.desktop
index 847853ba..281a1650 100644
--- a/DesktopEntries/CLV-P-VAAAJ.desktop
+++ b/DesktopEntries/CLV-P-VAAAJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-canoe-shvc-wr -rom /var/lib/hakchi/squashfs/usr/share/games/CLV-P-VAAAJ/CLV-P-VAAAJ.sfrom --volume 100 -rollback-snapshot-period 600
+Exec=/bin/clover-canoe-shvc-wr -rom /var/squashfs/usr/share/games/CLV-P-VAAAJ/CLV-P-VAAAJ.sfrom --volume 100 -rollback-snapshot-period 600
Path=/var/lib/clover/profiles/0//CLV-P-VAAAJ
Name=スーパーマリオワールド
-Icon=/var/lib/hakchi/squashfs/usr/share/games/CLV-P-VAAAJ/CLV-P-VAAAJ.png
+Icon=/var/squashfs/usr/share/games/CLV-P-VAAAJ/CLV-P-VAAAJ.png
[X-CLOVER Game]
Code=CLV-P-VAAAJ
diff --git a/DesktopEntries/CLV-P-VAABJ.desktop b/DesktopEntries/CLV-P-VAABJ.desktop
index 642a9b7a..9c5ad7af 100644
--- a/DesktopEntries/CLV-P-VAABJ.desktop
+++ b/DesktopEntries/CLV-P-VAABJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-canoe-shvc-wr -rom /var/lib/hakchi/squashfs/usr/share/games/CLV-P-VAABJ/CLV-P-VAABJ.sfrom --volume 80 -rollback-snapshot-period 600
+Exec=/bin/clover-canoe-shvc-wr -rom /var/squashfs/usr/share/games/CLV-P-VAABJ/CLV-P-VAABJ.sfrom --volume 80 -rollback-snapshot-period 600
Path=/var/lib/clover/profiles/0//CLV-P-VAABJ
Name=F-ZERO
-Icon=/var/lib/hakchi/squashfs/usr/share/games/CLV-P-VAABJ/CLV-P-VAABJ.png
+Icon=/var/squashfs/usr/share/games/CLV-P-VAABJ/CLV-P-VAABJ.png
[X-CLOVER Game]
Code=CLV-P-VAABJ
diff --git a/DesktopEntries/CLV-P-VAAEJ.desktop b/DesktopEntries/CLV-P-VAAEJ.desktop
index e891b800..78151b01 100644
--- a/DesktopEntries/CLV-P-VAAEJ.desktop
+++ b/DesktopEntries/CLV-P-VAAEJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-canoe-shvc-wr -rom /var/lib/hakchi/squashfs/usr/share/games/CLV-P-VAAEJ/CLV-P-VAAEJ.sfrom --volume 85 -rollback-snapshot-period 600
+Exec=/bin/clover-canoe-shvc-wr -rom /var/squashfs/usr/share/games/CLV-P-VAAEJ/CLV-P-VAAEJ.sfrom --volume 85 -rollback-snapshot-period 600
Path=/var/lib/clover/profiles/0//CLV-P-VAAEJ
Name=ゼルダの伝説 神々のトライフォース
-Icon=/var/lib/hakchi/squashfs/usr/share/games/CLV-P-VAAEJ/CLV-P-VAAEJ.png
+Icon=/var/squashfs/usr/share/games/CLV-P-VAAEJ/CLV-P-VAAEJ.png
[X-CLOVER Game]
Code=CLV-P-VAAEJ
diff --git a/DesktopEntries/CLV-P-VAAFJ.desktop b/DesktopEntries/CLV-P-VAAFJ.desktop
index b150e249..a38a6eef 100644
--- a/DesktopEntries/CLV-P-VAAFJ.desktop
+++ b/DesktopEntries/CLV-P-VAAFJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-canoe-shvc-wr -rom /var/lib/hakchi/squashfs/usr/share/games/CLV-P-VAAFJ/CLV-P-VAAFJ.sfrom --volume 70 -rollback-snapshot-period 600
+Exec=/bin/clover-canoe-shvc-wr -rom /var/squashfs/usr/share/games/CLV-P-VAAFJ/CLV-P-VAAFJ.sfrom --volume 70 -rollback-snapshot-period 600
Path=/var/lib/clover/profiles/0//CLV-P-VAAFJ
Name=スーパーマリオカート
-Icon=/var/lib/hakchi/squashfs/usr/share/games/CLV-P-VAAFJ/CLV-P-VAAFJ.png
+Icon=/var/squashfs/usr/share/games/CLV-P-VAAFJ/CLV-P-VAAFJ.png
[X-CLOVER Game]
Code=CLV-P-VAAFJ
diff --git a/DesktopEntries/CLV-P-VAAGJ.desktop b/DesktopEntries/CLV-P-VAAGJ.desktop
index a532dfb2..9e620030 100644
--- a/DesktopEntries/CLV-P-VAAGJ.desktop
+++ b/DesktopEntries/CLV-P-VAAGJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-canoe-shvc-wr -rom /var/lib/hakchi/squashfs/usr/share/games/CLV-P-VAAGJ/CLV-P-VAAGJ.sfrom --volume 75 -rollback-snapshot-period 3600
+Exec=/bin/clover-canoe-shvc-wr -rom /var/squashfs/usr/share/games/CLV-P-VAAGJ/CLV-P-VAAGJ.sfrom --volume 75 -rollback-snapshot-period 3600
Path=/var/lib/clover/profiles/0//CLV-P-VAAGJ
Name=ファイアーエムブレム 紋章の謎
-Icon=/var/lib/hakchi/squashfs/usr/share/games/CLV-P-VAAGJ/CLV-P-VAAGJ.png
+Icon=/var/squashfs/usr/share/games/CLV-P-VAAGJ/CLV-P-VAAGJ.png
[X-CLOVER Game]
Code=CLV-P-VAAGJ
diff --git a/DesktopEntries/CLV-P-VAAHJ.desktop b/DesktopEntries/CLV-P-VAAHJ.desktop
index 2a3707bd..42e60d6c 100644
--- a/DesktopEntries/CLV-P-VAAHJ.desktop
+++ b/DesktopEntries/CLV-P-VAAHJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-canoe-shvc-wr -rom /var/lib/hakchi/squashfs/usr/share/games/CLV-P-VAAHJ/CLV-P-VAAHJ.sfrom --volume 100 -rollback-snapshot-period 600
+Exec=/bin/clover-canoe-shvc-wr -rom /var/squashfs/usr/share/games/CLV-P-VAAHJ/CLV-P-VAAHJ.sfrom --volume 100 -rollback-snapshot-period 600
Path=/var/lib/clover/profiles/0//CLV-P-VAAHJ
Name=スーパーメトロイド
-Icon=/var/lib/hakchi/squashfs/usr/share/games/CLV-P-VAAHJ/CLV-P-VAAHJ.png
+Icon=/var/squashfs/usr/share/games/CLV-P-VAAHJ/CLV-P-VAAHJ.png
[X-CLOVER Game]
Code=CLV-P-VAAHJ
diff --git a/DesktopEntries/CLV-P-VAALJ.desktop b/DesktopEntries/CLV-P-VAALJ.desktop
index 0863b59b..8152cad0 100644
--- a/DesktopEntries/CLV-P-VAALJ.desktop
+++ b/DesktopEntries/CLV-P-VAALJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-canoe-shvc-wr -rom /var/lib/hakchi/squashfs/usr/share/games/CLV-P-VAALJ/CLV-P-VAALJ.sfrom --volume 100 -rollback-snapshot-period 600
+Exec=/bin/clover-canoe-shvc-wr -rom /var/squashfs/usr/share/games/CLV-P-VAALJ/CLV-P-VAALJ.sfrom --volume 100 -rollback-snapshot-period 600
Path=/var/lib/clover/profiles/0//CLV-P-VAALJ
Name=スーパードンキーコング
-Icon=/var/lib/hakchi/squashfs/usr/share/games/CLV-P-VAALJ/CLV-P-VAALJ.png
+Icon=/var/squashfs/usr/share/games/CLV-P-VAALJ/CLV-P-VAALJ.png
[X-CLOVER Game]
Code=CLV-P-VAALJ
diff --git a/DesktopEntries/CLV-P-VAAQJ.desktop b/DesktopEntries/CLV-P-VAAQJ.desktop
index b4b1b88f..1978602a 100644
--- a/DesktopEntries/CLV-P-VAAQJ.desktop
+++ b/DesktopEntries/CLV-P-VAAQJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-canoe-shvc-wr -rom /var/lib/hakchi/squashfs/usr/share/games/CLV-P-VAAQJ/CLV-P-VAAQJ.sfrom --volume 80 -rollback-snapshot-period 600
+Exec=/bin/clover-canoe-shvc-wr -rom /var/squashfs/usr/share/games/CLV-P-VAAQJ/CLV-P-VAAQJ.sfrom --volume 80 -rollback-snapshot-period 600
Path=/var/lib/clover/profiles/0//CLV-P-VAAQJ
Name=星のカービィ スーパーデラックス
-Icon=/var/lib/hakchi/squashfs/usr/share/games/CLV-P-VAAQJ/CLV-P-VAAQJ.png
+Icon=/var/squashfs/usr/share/games/CLV-P-VAAQJ/CLV-P-VAAQJ.png
[X-CLOVER Game]
Code=CLV-P-VAAQJ
diff --git a/DesktopEntries/CLV-P-VABBJ.desktop b/DesktopEntries/CLV-P-VABBJ.desktop
index 76dece88..cd1dc3ef 100644
--- a/DesktopEntries/CLV-P-VABBJ.desktop
+++ b/DesktopEntries/CLV-P-VABBJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-canoe-shvc-wr -rom /var/lib/hakchi/squashfs/usr/share/games/CLV-P-VABBJ/CLV-P-VABBJ.sfrom --volume 90 -rollback-snapshot-period 600
+Exec=/bin/clover-canoe-shvc-wr -rom /var/squashfs/usr/share/games/CLV-P-VABBJ/CLV-P-VABBJ.sfrom --volume 90 -rollback-snapshot-period 600
Path=/var/lib/clover/profiles/0//CLV-P-VABBJ
Name=スーパーストリートファイターⅡ ザ ニューチャレンジャーズ
-Icon=/var/lib/hakchi/squashfs/usr/share/games/CLV-P-VABBJ/CLV-P-VABBJ.png
+Icon=/var/squashfs/usr/share/games/CLV-P-VABBJ/CLV-P-VABBJ.png
[X-CLOVER Game]
Code=CLV-P-VABBJ
diff --git a/DesktopEntries/CLV-P-VABCJ.desktop b/DesktopEntries/CLV-P-VABCJ.desktop
index b4df335c..ed611fdb 100644
--- a/DesktopEntries/CLV-P-VABCJ.desktop
+++ b/DesktopEntries/CLV-P-VABCJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-canoe-shvc-wr -rom /var/lib/hakchi/squashfs/usr/share/games/CLV-P-VABCJ/CLV-P-VABCJ.sfrom --volume 85 -rollback-snapshot-period 600
+Exec=/bin/clover-canoe-shvc-wr -rom /var/squashfs/usr/share/games/CLV-P-VABCJ/CLV-P-VABCJ.sfrom --volume 85 -rollback-snapshot-period 600
Path=/var/lib/clover/profiles/0//CLV-P-VABCJ
Name=ロックマンX
-Icon=/var/lib/hakchi/squashfs/usr/share/games/CLV-P-VABCJ/CLV-P-VABCJ.png
+Icon=/var/squashfs/usr/share/games/CLV-P-VABCJ/CLV-P-VABCJ.png
[X-CLOVER Game]
Code=CLV-P-VABCJ
diff --git a/DesktopEntries/CLV-P-VABDJ.desktop b/DesktopEntries/CLV-P-VABDJ.desktop
index 72dc8b74..43d0a92c 100644
--- a/DesktopEntries/CLV-P-VABDJ.desktop
+++ b/DesktopEntries/CLV-P-VABDJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-canoe-shvc-wr -rom /var/lib/hakchi/squashfs/usr/share/games/CLV-P-VABDJ/CLV-P-VABDJ.sfrom --volume 37 -rollback-snapshot-period 600
+Exec=/bin/clover-canoe-shvc-wr -rom /var/squashfs/usr/share/games/CLV-P-VABDJ/CLV-P-VABDJ.sfrom --volume 37 -rollback-snapshot-period 600
Path=/var/lib/clover/profiles/0//CLV-P-VABDJ
Name=超魔界村
-Icon=/var/lib/hakchi/squashfs/usr/share/games/CLV-P-VABDJ/CLV-P-VABDJ.png
+Icon=/var/squashfs/usr/share/games/CLV-P-VABDJ/CLV-P-VABDJ.png
[X-CLOVER Game]
Code=CLV-P-VABDJ
diff --git a/DesktopEntries/CLV-P-VABQJ.desktop b/DesktopEntries/CLV-P-VABQJ.desktop
index 776fb671..b13abb2c 100644
--- a/DesktopEntries/CLV-P-VABQJ.desktop
+++ b/DesktopEntries/CLV-P-VABQJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-canoe-shvc-wr -rom /var/lib/hakchi/squashfs/usr/share/games/CLV-P-VABQJ/CLV-P-VABQJ.sfrom --volume 60 -rollback-snapshot-period 3600
+Exec=/bin/clover-canoe-shvc-wr -rom /var/squashfs/usr/share/games/CLV-P-VABQJ/CLV-P-VABQJ.sfrom --volume 60 -rollback-snapshot-period 3600
Path=/var/lib/clover/profiles/0//CLV-P-VABQJ
Name=スーパーマリオRPG
-Icon=/var/lib/hakchi/squashfs/usr/share/games/CLV-P-VABQJ/CLV-P-VABQJ.png
+Icon=/var/squashfs/usr/share/games/CLV-P-VABQJ/CLV-P-VABQJ.png
[X-CLOVER Game]
Code=CLV-P-VABQJ
diff --git a/DesktopEntries/CLV-P-VABRJ.desktop b/DesktopEntries/CLV-P-VABRJ.desktop
index 7f6b16d9..e5d3a0ee 100644
--- a/DesktopEntries/CLV-P-VABRJ.desktop
+++ b/DesktopEntries/CLV-P-VABRJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-canoe-shvc-wr -rom /var/lib/hakchi/squashfs/usr/share/games/CLV-P-VABRJ/CLV-P-VABRJ.sfrom --volume 75 -rollback-snapshot-period 3600
+Exec=/bin/clover-canoe-shvc-wr -rom /var/squashfs/usr/share/games/CLV-P-VABRJ/CLV-P-VABRJ.sfrom --volume 75 -rollback-snapshot-period 3600
Path=/var/lib/clover/profiles/0//CLV-P-VABRJ
Name=聖剣伝説2
-Icon=/var/lib/hakchi/squashfs/usr/share/games/CLV-P-VABRJ/CLV-P-VABRJ.png
+Icon=/var/squashfs/usr/share/games/CLV-P-VABRJ/CLV-P-VABRJ.png
[X-CLOVER Game]
Code=CLV-P-VABRJ
diff --git a/DesktopEntries/CLV-P-VABTJ.desktop b/DesktopEntries/CLV-P-VABTJ.desktop
index ad71da3e..f6746da6 100644
--- a/DesktopEntries/CLV-P-VABTJ.desktop
+++ b/DesktopEntries/CLV-P-VABTJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-canoe-shvc-wr -rom /var/lib/hakchi/squashfs/usr/share/games/CLV-P-VABTJ/CLV-P-VABTJ.sfrom --volume 85 -rollback-snapshot-period 3600
+Exec=/bin/clover-canoe-shvc-wr -rom /var/squashfs/usr/share/games/CLV-P-VABTJ/CLV-P-VABTJ.sfrom --volume 85 -rollback-snapshot-period 3600
Path=/var/lib/clover/profiles/0//CLV-P-VABTJ
Name=ファイナルファンタジーVI
-Icon=/var/lib/hakchi/squashfs/usr/share/games/CLV-P-VABTJ/CLV-P-VABTJ.png
+Icon=/var/squashfs/usr/share/games/CLV-P-VABTJ/CLV-P-VABTJ.png
[X-CLOVER Game]
Code=CLV-P-VABTJ
diff --git a/DesktopEntries/CLV-P-VACCJ.desktop b/DesktopEntries/CLV-P-VACCJ.desktop
index 9f02d205..57e32eae 100644
--- a/DesktopEntries/CLV-P-VACCJ.desktop
+++ b/DesktopEntries/CLV-P-VACCJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-canoe-shvc-wr -rom /var/lib/hakchi/squashfs/usr/share/games/CLV-P-VACCJ/CLV-P-VACCJ.sfrom --volume 70 -rollback-snapshot-period 600
+Exec=/bin/clover-canoe-shvc-wr -rom /var/squashfs/usr/share/games/CLV-P-VACCJ/CLV-P-VACCJ.sfrom --volume 70 -rollback-snapshot-period 600
Path=/var/lib/clover/profiles/0//CLV-P-VACCJ
Name=魂斗羅スピリッツ
-Icon=/var/lib/hakchi/squashfs/usr/share/games/CLV-P-VACCJ/CLV-P-VACCJ.png
+Icon=/var/squashfs/usr/share/games/CLV-P-VACCJ/CLV-P-VACCJ.png
[X-CLOVER Game]
Code=CLV-P-VACCJ
diff --git a/DesktopEntries/CLV-P-VACDJ.desktop b/DesktopEntries/CLV-P-VACDJ.desktop
index 433ee603..6d4a4fff 100644
--- a/DesktopEntries/CLV-P-VACDJ.desktop
+++ b/DesktopEntries/CLV-P-VACDJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-canoe-shvc-wr -rom /var/lib/hakchi/squashfs/usr/share/games/CLV-P-VACDJ/CLV-P-VACDJ.sfrom --volume 65 -rollback-snapshot-period 600
+Exec=/bin/clover-canoe-shvc-wr -rom /var/squashfs/usr/share/games/CLV-P-VACDJ/CLV-P-VACDJ.sfrom --volume 65 -rollback-snapshot-period 600
Path=/var/lib/clover/profiles/0//CLV-P-VACDJ
Name=がんばれゴエモン ゆき姫救出絵巻
-Icon=/var/lib/hakchi/squashfs/usr/share/games/CLV-P-VACDJ/CLV-P-VACDJ.png
+Icon=/var/squashfs/usr/share/games/CLV-P-VACDJ/CLV-P-VACDJ.png
[X-CLOVER Game]
Code=CLV-P-VACDJ
diff --git a/DesktopEntries/CLV-P-VADFJ.desktop b/DesktopEntries/CLV-P-VADFJ.desktop
index b616e445..dfb08701 100644
--- a/DesktopEntries/CLV-P-VADFJ.desktop
+++ b/DesktopEntries/CLV-P-VADFJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-canoe-shvc-wr -rom /var/lib/hakchi/squashfs/usr/share/games/CLV-P-VADFJ/CLV-P-VADFJ.sfrom --volume 70 -rollback-snapshot-period 600
+Exec=/bin/clover-canoe-shvc-wr -rom /var/squashfs/usr/share/games/CLV-P-VADFJ/CLV-P-VADFJ.sfrom --volume 70 -rollback-snapshot-period 600
Path=/var/lib/clover/profiles/0//CLV-P-VADFJ
Name=スーパーフォーメーションサッカー
-Icon=/var/lib/hakchi/squashfs/usr/share/games/CLV-P-VADFJ/CLV-P-VADFJ.png
+Icon=/var/squashfs/usr/share/games/CLV-P-VADFJ/CLV-P-VADFJ.png
[X-CLOVER Game]
Code=CLV-P-VADFJ
diff --git a/DesktopEntries/CLV-P-VADGJ.desktop b/DesktopEntries/CLV-P-VADGJ.desktop
index 9faf1614..4db3baf6 100644
--- a/DesktopEntries/CLV-P-VADGJ.desktop
+++ b/DesktopEntries/CLV-P-VADGJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-canoe-shvc-wr -rom /var/lib/hakchi/squashfs/usr/share/games/CLV-P-VADGJ/CLV-P-VADGJ.sfrom --volume 65 -rollback-snapshot-period 600 -output-dir /var/lib/clover/profiles/0/
+Exec=/bin/clover-canoe-shvc-wr -rom /var/squashfs/usr/share/games/CLV-P-VADGJ/CLV-P-VADGJ.sfrom --volume 65 -rollback-snapshot-period 600 -output-dir /var/lib/clover/profiles/0/
Path=/var/lib/clover/profiles/0//CLV-P-VADGJ
Name=スターフォックス
-Icon=/var/lib/hakchi/squashfs/usr/share/games/CLV-P-VADGJ/CLV-P-VADGJ.png
+Icon=/var/squashfs/usr/share/games/CLV-P-VADGJ/CLV-P-VADGJ.png
[X-CLOVER Game]
Code=CLV-P-VADGJ
diff --git a/DesktopEntries/CLV-P-VADJJ.desktop b/DesktopEntries/CLV-P-VADJJ.desktop
index 3bd1e40c..668fe681 100644
--- a/DesktopEntries/CLV-P-VADJJ.desktop
+++ b/DesktopEntries/CLV-P-VADJJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-canoe-shvc-wr -rom /var/lib/hakchi/squashfs/usr/share/games/CLV-P-VADJJ/CLV-P-VADJJ.sfrom --volume 70 -rollback-snapshot-period 600
+Exec=/bin/clover-canoe-shvc-wr -rom /var/squashfs/usr/share/games/CLV-P-VADJJ/CLV-P-VADJJ.sfrom --volume 70 -rollback-snapshot-period 600
Path=/var/lib/clover/profiles/0//CLV-P-VADJJ
Name=スーパーマリオ ヨッシーアイランド
-Icon=/var/lib/hakchi/squashfs/usr/share/games/CLV-P-VADJJ/CLV-P-VADJJ.png
+Icon=/var/squashfs/usr/share/games/CLV-P-VADJJ/CLV-P-VADJJ.png
[X-CLOVER Game]
Code=CLV-P-VADJJ
diff --git a/DesktopEntries/CLV-P-VADKJ.desktop b/DesktopEntries/CLV-P-VADKJ.desktop
index c1f69928..4903819e 100644
--- a/DesktopEntries/CLV-P-VADKJ.desktop
+++ b/DesktopEntries/CLV-P-VADKJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-canoe-shvc-wr -rom /var/lib/hakchi/squashfs/usr/share/games/CLV-P-VADKJ/CLV-P-VADKJ.sfrom --volume 65 -rollback-snapshot-period 600
+Exec=/bin/clover-canoe-shvc-wr -rom /var/squashfs/usr/share/games/CLV-P-VADKJ/CLV-P-VADKJ.sfrom --volume 65 -rollback-snapshot-period 600
Path=/var/lib/clover/profiles/0//CLV-P-VADKJ
Name=スターフォックス2
-Icon=/var/lib/hakchi/squashfs/usr/share/games/CLV-P-VADKJ/CLV-P-VADKJ.png
+Icon=/var/squashfs/usr/share/games/CLV-P-VADKJ/CLV-P-VADKJ.png
[X-CLOVER Game]
Code=CLV-P-VADKJ
diff --git a/DesktopEntries/CLV-P-VADZJ.desktop b/DesktopEntries/CLV-P-VADZJ.desktop
index 05ad20b1..0eeecf97 100644
--- a/DesktopEntries/CLV-P-VADZJ.desktop
+++ b/DesktopEntries/CLV-P-VADZJ.desktop
@@ -1,9 +1,9 @@
[Desktop Entry]
Type=Application
-Exec=/bin/clover-canoe-shvc-wr -rom /var/lib/hakchi/squashfs/usr/share/games/CLV-P-VADZJ/CLV-P-VADZJ.sfrom --volume 90 -rollback-snapshot-period 600
+Exec=/bin/clover-canoe-shvc-wr -rom /var/squashfs/usr/share/games/CLV-P-VADZJ/CLV-P-VADZJ.sfrom --volume 90 -rollback-snapshot-period 600
Path=/var/lib/clover/profiles/0//CLV-P-VADZJ
Name=パネルでポン
-Icon=/var/lib/hakchi/squashfs/usr/share/games/CLV-P-VADZJ/CLV-P-VADZJ.png
+Icon=/var/squashfs/usr/share/games/CLV-P-VADZJ/CLV-P-VADZJ.png
[X-CLOVER Game]
Code=CLV-P-VADZJ
diff --git a/FtpServer/NesMiniFileSystemHandler.cs b/FtpServer/NesMiniFileSystemHandler.cs
index 5fb8b0ab..c505cb38 100644
--- a/FtpServer/NesMiniFileSystemHandler.cs
+++ b/FtpServer/NesMiniFileSystemHandler.cs
@@ -192,19 +192,26 @@ namespace mooftpserv
List<FileSystemEntry> result = new List<FileSystemEntry>();
try
{
- var lines = clovershell.ExecuteSimple("ls -lApe \"" + newPath + "\"", 1000, true)
+ var lines = clovershell.ExecuteSimple("ls -lAp \"" + newPath + "\"", 1000, true)
.Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries);
foreach (var line in lines)
{
if (line.StartsWith("total")) continue;
FileSystemEntry entry = new FileSystemEntry();
entry.Mode = line.Substring(0, 13).Trim();
- entry.Name = line.Substring(69).Trim();
+ entry.Name = line.Substring(57).Trim();
entry.IsDirectory = entry.Name.EndsWith("/");
if (entry.IsDirectory) entry.Name = entry.Name.Substring(0, entry.Name.Length - 1);
- entry.Size = long.Parse(line.Substring(29, 15).Trim());
- var dt = line.Substring(44, 25).Trim();
- entry.LastModifiedTimeUtc = DateTime.ParseExact(dt, "ddd MMM d HH:mm:ss yyyy", CultureInfo.InvariantCulture, DateTimeStyles.AllowInnerWhite);
+ entry.Size = long.Parse(line.Substring(34, 9).Trim());
+ var dt = line.Substring(44, 12).Trim();
+ try
+ {
+ entry.LastModifiedTimeUtc = DateTime.ParseExact(dt, "MMM d HH:mm", CultureInfo.InvariantCulture, DateTimeStyles.AllowInnerWhite);
+ }
+ catch (FormatException)
+ {
+ entry.LastModifiedTimeUtc = DateTime.ParseExact(dt, "MMM d yyyy", CultureInfo.InvariantCulture, DateTimeStyles.AllowInnerWhite);
+ }
result.Add(entry);
}
}
@@ -217,6 +224,8 @@ namespace mooftpserv
public ResultOrError<string> ListEntriesRaw(string path)
{
+ if (path == null)
+ path = "/";
if (path.StartsWith("-"))
path = ". " + path;
string newPath = ResolvePath(path);
diff --git a/MainForm.Designer.cs b/MainForm.Designer.cs
index 118c5a7f..7401aa38 100644
--- a/MainForm.Designer.cs
+++ b/MainForm.Designer.cs
@@ -80,6 +80,7 @@
this.maximumGamesPerFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripMenuItem4 = new System.Windows.Forms.ToolStripSeparator();
this.customToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolStripMenuItem13 = new System.Windows.Forms.ToolStripSeparator();
this.cloverconHackToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.resetUsingCombinationOfButtonsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.selectButtonCombinationToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
@@ -89,9 +90,11 @@
this.compressGamesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.useExtendedFontToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.epilepsyProtectionToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.enableUSBHostToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.globalCommandLineArgumentsexpertsOnluToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
- this.toolStripMenuItem5 = new System.Windows.Forms.ToolStripSeparator();
this.saveSettingsToNESMiniNowToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolStripMenuItem5 = new System.Windows.Forms.ToolStripSeparator();
+ this.alwaysWriteGamesToUSBDriveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.saveStateManagerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripMenuItem6 = new System.Windows.Forms.ToolStripSeparator();
@@ -142,7 +145,10 @@
this.downloadBoxArtForSelectedGamesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.compressSelectedGamesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.decompressSelectedGamesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.openSelectedGamesFolderInExplorerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.deleteSelectedGamesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolStripMenuItem12 = new System.Windows.Forms.ToolStripSeparator();
+ this.createCustomCommandToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.openFileDialogImage = new System.Windows.Forms.OpenFileDialog();
this.buttonStart = new System.Windows.Forms.Button();
this.groupBoxDefaultGames = new System.Windows.Forms.GroupBox();
@@ -367,13 +373,16 @@
this.languageToolStripMenuItem,
this.consoleTypeToolStripMenuItem,
this.pagesfoldersTypeToolStripMenuItem,
+ this.toolStripMenuItem13,
this.cloverconHackToolStripMenuItem,
this.compressGamesToolStripMenuItem,
this.useExtendedFontToolStripMenuItem,
this.epilepsyProtectionToolStripMenuItem,
+ this.enableUSBHostToolStripMenuItem,
this.globalCommandLineArgumentsexpertsOnluToolStripMenuItem,
+ this.saveSettingsToNESMiniNowToolStripMenuItem,
this.toolStripMenuItem5,
- this.saveSettingsToNESMiniNowToolStripMenuItem});
+ this.alwaysWriteGamesToUSBDriveToolStripMenuItem});
this.settingsToolStripMenuItem.Name = "settingsToolStripMenuItem";
resources.ApplyResources(this.settingsToolStripMenuItem, "settingsToolStripMenuItem");
//
@@ -524,6 +533,11 @@
this.customToolStripMenuItem.Tag = "99";
this.customToolStripMenuItem.Click += new System.EventHandler(this.pagesModefoldersToolStripMenuItem_Click);
//
+ // toolStripMenuItem13
+ //
+ this.toolStripMenuItem13.Name = "toolStripMenuItem13";
+ resources.ApplyResources(this.toolStripMenuItem13, "toolStripMenuItem13");
+ //
// cloverconHackToolStripMenuItem
//
this.cloverconHackToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
@@ -596,22 +610,36 @@
resources.ApplyResources(this.epilepsyProtectionToolStripMenuItem, "epilepsyProtectionToolStripMenuItem");
this.epilepsyProtectionToolStripMenuItem.Click += new System.EventHandler(this.ToolStripMenuItemArmet_Click);
//
+ // enableUSBHostToolStripMenuItem
+ //
+ this.enableUSBHostToolStripMenuItem.CheckOnClick = true;
+ this.enableUSBHostToolStripMenuItem.Name = "enableUSBHostToolStripMenuItem";
+ resources.ApplyResources(this.enableUSBHostToolStripMenuItem, "enableUSBHostToolStripMenuItem");
+ this.enableUSBHostToolStripMenuItem.Click += new System.EventHandler(this.enableUSBHostToolStripMenuItem_Click);
+ //
// globalCommandLineArgumentsexpertsOnluToolStripMenuItem
//
this.globalCommandLineArgumentsexpertsOnluToolStripMenuItem.Name = "globalCommandLineArgumentsexpertsOnluToolStripMenuItem";
resources.ApplyResources(this.globalCommandLineArgumentsexpertsOnluToolStripMenuItem, "globalCommandLineArgumentsexpertsOnluToolStripMenuItem");
this.globalCommandLineArgumentsexpertsOnluToolStripMenuItem.Click += new System.EventHandler(this.globalCommandLineArgumentsexpertsOnluToolStripMenuItem_Click);
//
+ // saveSettingsToNESMiniNowToolStripMenuItem
+ //
+ resources.ApplyResources(this.saveSettingsToNESMiniNowToolStripMenuItem, "saveSettingsToNESMiniNowToolStripMenuItem");
+ this.saveSettingsToNESMiniNowToolStripMenuItem.Name = "saveSettingsToNESMiniNowToolStripMenuItem";
+ this.saveSettingsToNESMiniNowToolStripMenuItem.Click += new System.EventHandler(this.saveSettingsToNESMiniNowToolStripMenuItem_Click);
+ //
// toolStripMenuItem5
//
this.toolStripMenuItem5.Name = "toolStripMenuItem5";
resources.ApplyResources(this.toolStripMenuItem5, "toolStripMenuItem5");
//
- // saveSettingsToNESMiniNowToolStripMenuItem
+ // alwaysWriteGamesToUSBDriveToolStripMenuItem
//
- resources.ApplyResources(this.saveSettingsToNESMiniNowToolStripMenuItem, "saveSettingsToNESMiniNowToolStripMenuItem");
- this.saveSettingsToNESMiniNowToolStripMenuItem.Name = "saveSettingsToNESMiniNowToolStripMenuItem";
- this.saveSettingsToNESMiniNowToolStripMenuItem.Click += new System.EventHandler(this.saveSettingsToNESMiniNowToolStripMenuItem_Click);
+ this.alwaysWriteGamesToUSBDriveToolStripMenuItem.CheckOnClick = true;
+ this.alwaysWriteGamesToUSBDriveToolStripMenuItem.Name = "alwaysWriteGamesToUSBDriveToolStripMenuItem";
+ resources.ApplyResources(this.alwaysWriteGamesToUSBDriveToolStripMenuItem, "alwaysWriteGamesToUSBDriveToolStripMenuItem");
+ this.alwaysWriteGamesToUSBDriveToolStripMenuItem.Click += new System.EventHandler(this.alwaysWriteGamesToUSBDriveToolStripMenuItem_Click);
//
// toolsToolStripMenuItem
//
@@ -815,7 +843,6 @@
resources.ApplyResources(this.pictureBoxArt, "pictureBoxArt");
this.pictureBoxArt.Name = "pictureBoxArt";
this.pictureBoxArt.TabStop = false;
- this.pictureBoxArt.Click += new System.EventHandler(this.pictureBoxArt_Click);
//
// label4
//
@@ -874,7 +901,9 @@
// labelID
//
resources.ApplyResources(this.labelID, "labelID");
+ this.labelID.Cursor = System.Windows.Forms.Cursors.Hand;
this.labelID.Name = "labelID";
+ this.labelID.Click += new System.EventHandler(this.openSelectedGamesFolderInExplorerToolStripMenuItem_Click);
//
// label5
//
@@ -941,7 +970,10 @@
this.downloadBoxArtForSelectedGamesToolStripMenuItem,
this.compressSelectedGamesToolStripMenuItem,
this.decompressSelectedGamesToolStripMenuItem,
- this.deleteSelectedGamesToolStripMenuItem});
+ this.openSelectedGamesFolderInExplorerToolStripMenuItem,
+ this.deleteSelectedGamesToolStripMenuItem,
+ this.toolStripMenuItem12,
+ this.createCustomCommandToolStripMenuItem});
this.contextMenuStrip.Name = "contextMenuStrip";
resources.ApplyResources(this.contextMenuStrip, "contextMenuStrip");
//
@@ -963,12 +995,29 @@
resources.ApplyResources(this.decompressSelectedGamesToolStripMenuItem, "decompressSelectedGamesToolStripMenuItem");
this.decompressSelectedGamesToolStripMenuItem.Click += new System.EventHandler(this.decompressSelectedGamesToolStripMenuItem_Click);
//
+ // openSelectedGamesFolderInExplorerToolStripMenuItem
+ //
+ this.openSelectedGamesFolderInExplorerToolStripMenuItem.Name = "openSelectedGamesFolderInExplorerToolStripMenuItem";
+ resources.ApplyResources(this.openSelectedGamesFolderInExplorerToolStripMenuItem, "openSelectedGamesFolderInExplorerToolStripMenuItem");
+ this.openSelectedGamesFolderInExplorerToolStripMenuItem.Click += new System.EventHandler(this.openSelectedGamesFolderInExplorerToolStripMenuItem_Click);
+ //
// deleteSelectedGamesToolStripMenuItem
//
this.deleteSelectedGamesToolStripMenuItem.Name = "deleteSelectedGamesToolStripMenuItem";
resources.ApplyResources(this.deleteSelectedGamesToolStripMenuItem, "deleteSelectedGamesToolStripMenuItem");
this.deleteSelectedGamesToolStripMenuItem.Click += new System.EventHandler(this.deleteSelectedGamesToolStripMenuItem_Click);
//
+ // toolStripMenuItem12
+ //
+ this.toolStripMenuItem12.Name = "toolStripMenuItem12";
+ resources.ApplyResources(this.toolStripMenuItem12, "toolStripMenuItem12");
+ //
+ // createCustomCommandToolStripMenuItem
+ //
+ this.createCustomCommandToolStripMenuItem.Name = "createCustomCommandToolStripMenuItem";
+ resources.ApplyResources(this.createCustomCommandToolStripMenuItem, "createCustomCommandToolStripMenuItem");
+ this.createCustomCommandToolStripMenuItem.Click += new System.EventHandler(this.createCustomCommandToolStripMenuItem_Click);
+ //
// openFileDialogImage
//
resources.ApplyResources(this.openFileDialogImage, "openFileDialogImage");
@@ -1037,6 +1086,12 @@
//
resources.ApplyResources(this.gameName, "gameName");
//
+ // exportFolderDialog
+ //
+ resources.ApplyResources(this.exportFolderDialog, "exportFolderDialog");
+ this.exportFolderDialog.RootFolder = System.Environment.SpecialFolder.MyComputer;
+ this.exportFolderDialog.ShowNewFolderButton = false;
+ //
// MainForm
//
this.AllowDrop = true;
@@ -1055,12 +1110,14 @@
this.KeyPreview = true;
this.MaximizeBox = false;
this.Name = "MainForm";
+ this.Activated += new System.EventHandler(this.MainForm_Activated);
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainForm_FormClosing);
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.MainForm_FormClosed);
this.Shown += new System.EventHandler(this.MainForm_Shown);
this.DragDrop += new System.Windows.Forms.DragEventHandler(this.dragDrop);
this.DragEnter += new System.Windows.Forms.DragEventHandler(this.dragEnter);
this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.MainForm_KeyDown);
+ this.KeyUp += new System.Windows.Forms.KeyEventHandler(this.MainForm_KeyUp);
this.menuStrip.ResumeLayout(false);
this.menuStrip.PerformLayout();
this.groupBoxOptions.ResumeLayout(false);
@@ -1072,7 +1129,6 @@
this.groupBoxDefaultGames.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
-
}
#endregion
@@ -1201,6 +1257,12 @@
private System.Windows.Forms.ToolStripMenuItem dumpNANDCPartitionToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem flashNANDCPartitionToolStripMenuItem;
private System.Windows.Forms.FolderBrowserDialog exportFolderDialog;
+ private System.Windows.Forms.ToolStripSeparator toolStripMenuItem12;
+ private System.Windows.Forms.ToolStripMenuItem createCustomCommandToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem openSelectedGamesFolderInExplorerToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem enableUSBHostToolStripMenuItem;
+ private System.Windows.Forms.ToolStripSeparator toolStripMenuItem13;
+ private System.Windows.Forms.ToolStripMenuItem alwaysWriteGamesToUSBDriveToolStripMenuItem;
}
}
diff --git a/MainForm.cs b/MainForm.cs
index 6f79db79..3c72f0a3 100644
--- a/MainForm.cs
+++ b/MainForm.cs
@@ -1,5 +1,4 @@
using com.clusterrr.clovershell;
-using com.clusterrr.Famicom;
using com.clusterrr.hakchi_gui.Properties;
using SevenZip;
using System;
@@ -160,6 +159,7 @@ namespace com.clusterrr.hakchi_gui
{
InitializeComponent();
FormInitialize();
+
Clovershell = new ClovershellConnection() { AutoReconnect = true, Enabled = true };
Clovershell.OnConnected += Clovershell_OnConnected;
@@ -173,6 +173,8 @@ namespace com.clusterrr.hakchi_gui
FTPToolStripMenuItem_Click(null, null);
if (ConfigIni.TelnetServer)
Clovershell.ShellEnabled = shellToolStripMenuItem.Checked = true;
+ alwaysWriteGamesToUSBDriveToolStripMenuItem.Checked = ConfigIni.AlwaysWriteToUSB;
+ buttonStart.Text = (Control.ModifierKeys == Keys.Shift) ^ ConfigIni.AlwaysWriteToUSB ? Resources.SyncronizeUSB : Resources.Syncronize;
}
void FormInitialize()
@@ -183,18 +185,6 @@ namespace com.clusterrr.hakchi_gui
InternalMods = from m in Directory.GetFiles(Path.Combine(Program.BaseDirectoryInternal, "mods/hmods")) select Path.GetFileNameWithoutExtension(m);
LoadPresets();
LoadLanguages();
- var version = Assembly.GetExecutingAssembly().GetName().Version;
- Text = string.Format("hakchi2 - v{0}.{1:D2}{2}", version.Major, version.Build, (version.Revision < 10) ?
- ("rc" + version.Revision.ToString()) : (version.Revision > 20 ? ((char)('a' + (version.Revision - 20) / 10)).ToString() : ""))
-#if DEBUG
- + " (debug version"
-#if VERY_DEBUG
- + ", very verbose mode"
-#endif
- + ")"
-#endif
-;
-
listViewGames.ListViewItemSorter = new GamesSorter();
// Little tweak for easy translation
@@ -235,71 +225,48 @@ namespace com.clusterrr.hakchi_gui
}
}
+ void SetWindowTitle()
+ {
+ var version = Assembly.GetExecutingAssembly().GetName().Version;
+ Text = string.Format("hakchi2 - v{0}.{1:D2}{2}", version.Major, version.Build, (version.Revision < 10) ?
+ ("rc" + version.Revision.ToString()) : (version.Revision > 20 ? ((char)('a' + (version.Revision - 20) / 10)).ToString() : ""))
+#if DEBUG
+ + " (debug version"
+#if VERY_DEBUG
+ + ", very verbose mode"
+#endif
+ + ")"
+#endif
+ + " - " + GetConsoleName();
+ }
+
+ public string GetConsoleName(ConsoleType? consoleType = null)
+ {
+ if (consoleType == null || consoleType == ConsoleType.Unknown)
+ consoleType = ConfigIni.ConsoleType;
+ switch (consoleType ?? ConsoleType.Unknown)
+ {
+ case ConsoleType.NES:
+ return nESMiniToolStripMenuItem.Text;
+ case ConsoleType.Famicom:
+ return famicomMiniToolStripMenuItem.Text;
+ case ConsoleType.SNES:
+ return sNESMiniToolStripMenuItem.Text;
+ case ConsoleType.SuperFamicom:
+ return superFamicomMiniToolStripMenuItem.Text;
+ default:
+ return "unknown console";
+ }
+ }
+
void Clovershell_OnConnected()
{
try
{
- // Trying to autodetect console type
- var customFirmware = Clovershell.ExecuteSimple("[ -d /var/lib/hakchi/firmware/ ] && [ -f /var/lib/hakchi/firmware/*.hsqs ] && echo YES || echo NO");
- if (customFirmware == "NO")
- {
- var board = Clovershell.ExecuteSimple("cat /etc/clover/boardtype", 500, true);
- var region = Clovershell.ExecuteSimple("cat /etc/clover/REGION", 500, true);
- Debug.WriteLine(string.Format("Detected board: {0}", board));
- Debug.WriteLine(string.Format("Detected region: {0}", region));
- switch (board)
- {
- default:
- case "dp-nes":
- case "dp-hvc":
- switch (region)
- {
- case "EUR_USA":
- ConfigIni.ConsoleType = ConsoleType.NES;
- break;
- case "JPN":
- ConfigIni.ConsoleType = ConsoleType.Famicom;
- break;
- }
- break;
- case "dp-shvc":
- switch (region)
- {
- case "USA":
- case "EUR":
- ConfigIni.ConsoleType = ConsoleType.SNES;
- break;
- case "JPN":
- ConfigIni.ConsoleType = ConsoleType.SuperFamicom;
- break;
- }
- break;
- }
- Invoke(new Action(SyncConsoleType));
- }
-
- ConfigIni.CustomFlashed = true; // Just in case of new installation
-
WorkerForm.GetMemoryStats();
new Thread(RecalculateSelectedGamesThread).Start();
-
- /*
- // It's good idea to sync time... or not?
- // Requesting autoshutdown state
- var autoshutdown = Clovershell.ExecuteSimple("cat /var/lib/clover/profiles/0/shutdown.txt");
- // Disable automatic shutdown
- if (autoshutdown != "0")
- {
- Clovershell.ExecuteSimple("echo -n 0 > /var/lib/clover/profiles/0/shutdown.txt");
- Thread.Sleep(1500);
- }
- // Setting actual time for file transfer operations
- Clovershell.ExecuteSimple(string.Format("date -s \"{0:yyyy-MM-dd HH:mm:ss}\"", DateTime.UtcNow));
- // Restoring automatic shutdown
- if (autoshutdown != "0")
- Clovershell.ExecuteSimple(string.Format("echo -n {0} > /var/lib/clover/profiles/0/shutdown.txt", autoshutdown));
- */
- // It was bad idea
+ if (WorkerForm.GetRealConsoleType() == ConfigIni.ConsoleType)
+ ConfigIni.CustomFlashed = true; // Just in case of new installation
}
catch (Exception ex)
{
@@ -403,10 +370,17 @@ namespace com.clusterrr.hakchi_gui
maskedTextBoxReleaseDate.Text = app.ReleaseDate;
textBoxPublisher.Text = app.Publisher;
textBoxArguments.Text = app.Command;
- if (File.Exists(app.IconPath))
- pictureBoxArt.Image = NesMiniApplication.LoadBitmap(app.IconPath);
- else
- pictureBoxArt.Image = null;
+ try
+ {
+ if (File.Exists(app.IconPath))
+ pictureBoxArt.Image = NesMiniApplication.LoadBitmap(app.IconPath);
+ else
+ pictureBoxArt.Image = null;
+ }
+ catch (Exception ex)
+ {
+ Debug.WriteLine("Image loading error: " + ex.Message + ex.StackTrace);
+ }
buttonShowGameGenieDatabase.Enabled = app is NesGame; //ISupportsGameGenie;
textBoxGameGenie.Enabled = app is ISupportsGameGenie;
textBoxGameGenie.Text = (app is ISupportsGameGenie) ? (app as NesMiniApplication).GameGenie : "";
@@ -833,7 +807,7 @@ namespace com.clusterrr.hakchi_gui
private void buttonStart_Click(object sender, EventArgs e)
{
- bool exportGames = (Control.ModifierKeys == Keys.Shift);
+ bool exportGames = (Control.ModifierKeys == Keys.Shift) ^ ConfigIni.AlwaysWriteToUSB;
SaveConfig();
var stats = RecalculateSelectedGames();
@@ -989,9 +963,9 @@ namespace com.clusterrr.hakchi_gui
workerForm.Config = ConfigIni.GetConfigDictionary();
workerForm.Games = new NesMenuCollection();
workerForm.exportGames = exportGames;
-
+
if (exportGames)
- workerForm.exportDirectory = exportFolderDialog.SelectedPath;
+ workerForm.exportDirectory = Path.Combine(Path.Combine(exportFolderDialog.SelectedPath, "hakchi"), "games");
bool needOriginal = false;
foreach (ListViewItem game in listViewGames.CheckedItems)
@@ -1267,6 +1241,17 @@ namespace com.clusterrr.hakchi_gui
{
ConfigIni.FcStart = upABStartOnSecondControllerToolStripMenuItem.Checked;
}
+
+ private void enableUSBHostToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ ConfigIni.UsbHost = enableUSBHostToolStripMenuItem.Checked;
+ }
+
+ private void alwaysWriteGamesToUSBDriveToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ ConfigIni.AlwaysWriteToUSB = alwaysWriteGamesToUSBDriveToolStripMenuItem.Checked;
+ buttonStart.Text = (Control.ModifierKeys == Keys.Shift) ^ ConfigIni.AlwaysWriteToUSB ? Resources.SyncronizeUSB : Resources.Syncronize;
+ }
private void selectButtonCombinationToolStripMenuItem_Click(object sender, EventArgs e)
{
@@ -1300,8 +1285,8 @@ namespace com.clusterrr.hakchi_gui
famicomMiniToolStripMenuItem.Checked = ConfigIni.ConsoleType == ConsoleType.Famicom;
sNESMiniToolStripMenuItem.Checked = ConfigIni.ConsoleType == ConsoleType.SNES;
superFamicomMiniToolStripMenuItem.Checked = ConfigIni.ConsoleType == ConsoleType.SuperFamicom;
- epilepsyProtectionToolStripMenuItem.Enabled = ConfigIni.ConsoleType == ConsoleType.NES || ConfigIni.ConsoleType == ConsoleType.Famicom;
- useXYOnClassicControllerAsAutofireABToolStripMenuItem.Enabled = ConfigIni.ConsoleType == ConsoleType.NES || ConfigIni.ConsoleType == ConsoleType.Famicom;
+ //epilepsyProtectionToolStripMenuItem.Enabled = ConfigIni.ConsoleType == ConsoleType.NES || ConfigIni.ConsoleType == ConsoleType.Famicom;
+ //useXYOnClassicControllerAsAutofireABToolStripMenuItem.Enabled = ConfigIni.ConsoleType == ConsoleType.NES || ConfigIni.ConsoleType == ConsoleType.Famicom;
upABStartOnSecondControllerToolStripMenuItem.Enabled = ConfigIni.ConsoleType == ConsoleType.Famicom;
// Some settnigs
@@ -1312,6 +1297,7 @@ namespace com.clusterrr.hakchi_gui
useXYOnClassicControllerAsAutofireABToolStripMenuItem.Checked = ConfigIni.AutofireXYHack && useXYOnClassicControllerAsAutofireABToolStripMenuItem.Enabled;
upABStartOnSecondControllerToolStripMenuItem.Checked = ConfigIni.FcStart && upABStartOnSecondControllerToolStripMenuItem.Enabled;
compressGamesToolStripMenuItem.Checked = ConfigIni.Compress;
+ enableUSBHostToolStripMenuItem.Checked = ConfigIni.UsbHost;
// Folders mods
disablePagefoldersToolStripMenuItem.Checked = (byte)ConfigIni.FoldersMode == 0;
@@ -1356,6 +1342,7 @@ namespace com.clusterrr.hakchi_gui
LoadHidden();
LoadGames();
+ SetWindowTitle();
lastConsoleType = ConfigIni.ConsoleType;
}
@@ -1601,8 +1588,15 @@ namespace com.clusterrr.hakchi_gui
{
if (WaitingClovershellForm.WaitForDevice(this))
{
- WorkerForm.SyncConfig(ConfigIni.GetConfigDictionary(), true);
- MessageBox.Show(Resources.Done, Resources.Wow, MessageBoxButtons.OK, MessageBoxIcon.Information);
+ bool customFirmware;
+ ConsoleType realConsoleType;
+ WorkerForm.SyncConfig(out customFirmware, out realConsoleType, true);
+ if (!customFirmware)
+ MessageBox.Show(Resources.Done, Resources.Wow, MessageBoxButtons.OK, MessageBoxIcon.Information);
+ else
+ MessageBox.Show(string.Format(Resources.ConfigSavedNote,
+ GetConsoleName(realConsoleType), GetConsoleName(ConfigIni.ConsoleType)),
+ Resources.Done, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
catch (Exception ex)
@@ -1873,7 +1867,6 @@ namespace com.clusterrr.hakchi_gui
foreach (ListViewItem item in listViewGames.SelectedItems)
if (item.Tag is NesMiniApplication)
listViewGames.Items.Remove(item);
- //MessageBox.Show(this, Resources.Done, Resources.Wow, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else LoadGames();
timerCalculateGames.Enabled = true;
@@ -1894,6 +1887,8 @@ namespace com.clusterrr.hakchi_gui
decompressSelectedGamesToolStripMenuItem.Enabled =
deleteSelectedGamesToolStripMenuItem.Enabled =
(listViewGames.SelectedItems.Count > 1) || (listViewGames.SelectedItems.Count == 1 && listViewGames.SelectedItems[0].Tag is NesMiniApplication);
+ openSelectedGamesFolderInExplorerToolStripMenuItem.Enabled =
+ (listViewGames.SelectedItems.Count == 1 && listViewGames.SelectedItems[0].Tag is NesMiniApplication);
contextMenuStrip.Show(sender as Control, e.X, e.Y);
}
}
@@ -1906,6 +1901,8 @@ namespace com.clusterrr.hakchi_gui
private void MainForm_KeyDown(object sender, KeyEventArgs e)
{
+ if (e.KeyCode == Keys.ShiftKey)
+ buttonStart.Text = !ConfigIni.AlwaysWriteToUSB ? Resources.SyncronizeUSB : Resources.Syncronize;
if (listViewGames.SelectedItems.Count != 1) return;
var selected = listViewGames.SelectedItems[0].Tag;
if ((e.KeyCode == Keys.E) && (e.Modifiers == (Keys.Alt | Keys.Control)) && (selected is SnesGame))
@@ -1915,9 +1912,70 @@ namespace com.clusterrr.hakchi_gui
}
}
- private void pictureBoxArt_Click(object sender, EventArgs e)
+ private void MainForm_KeyUp(object sender, KeyEventArgs e)
{
+ if (e.KeyCode == Keys.ShiftKey)
+ buttonStart.Text = ConfigIni.AlwaysWriteToUSB ? Resources.SyncronizeUSB : Resources.Syncronize;
+ }
+ private void MainForm_Activated(object sender, EventArgs e)
+ {
+ buttonStart.Text = (Control.ModifierKeys == Keys.Shift) ^ ConfigIni.AlwaysWriteToUSB ? Resources.SyncronizeUSB : Resources.Syncronize;
+ }
+
+ private void createCustomCommandToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ try
+ {
+ var newApp = NesMiniApplication.CreateEmptyApp();
+ var item = new ListViewItem(newApp.Name);
+ item.Tag = newApp;
+ item.Selected = true;
+ item.Checked = true;
+ listViewGames.Items.Add(item);
+ // Schedule recalculation
+ timerCalculateGames.Enabled = false;
+ timerCalculateGames.Enabled = true;
+ }
+ catch (Exception ex)
+ {
+ Debug.WriteLine(ex.Message + ex.StackTrace);
+ MessageBox.Show(this, ex.Message, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+
+ private void openSelectedInExplorer()
+ {
+ try
+ {
+ object selected = null;
+ var selectedAll = listViewGames.SelectedItems;
+ if (selectedAll.Count == 1)
+ selected = selectedAll[0].Tag;
+ else
+ return;
+ if (selected is NesMiniApplication)
+ {
+ var app = selected as NesMiniApplication;
+ new Process()
+ {
+ StartInfo = new ProcessStartInfo()
+ {
+ FileName = app.GamePath
+ }
+ }.Start();
+ }
+ }
+ catch (Exception ex)
+ {
+ Debug.WriteLine(ex.Message + ex.StackTrace);
+ MessageBox.Show(this, ex.Message, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+
+ private void openSelectedGamesFolderInExplorerToolStripMenuItem_Click(object sender, EventArgs e)
+ {
+ openSelectedInExplorer();
}
}
}
diff --git a/MainForm.resx b/MainForm.resx
index 4a115dc5..7bce0460 100644
--- a/MainForm.resx
+++ b/MainForm.resx
@@ -120,51 +120,17 @@
<metadata name="menuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>315, 17</value>
</metadata>
- <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
- <data name="menuStrip.Location" type="System.Drawing.Point, System.Drawing">
- <value>0, 0</value>
- </data>
- <data name="menuStrip.Size" type="System.Drawing.Size, System.Drawing">
- <value>609, 24</value>
- </data>
- <assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
- <data name="menuStrip.TabIndex" type="System.Int32, mscorlib">
- <value>1</value>
- </data>
- <data name="&gt;&gt;menuStrip.Name" xml:space="preserve">
- <value>menuStrip</value>
- </data>
- <data name="&gt;&gt;menuStrip.Type" xml:space="preserve">
- <value>System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
- </data>
- <data name="&gt;&gt;menuStrip.Parent" xml:space="preserve">
- <value>$this</value>
- </data>
- <data name="&gt;&gt;menuStrip.ZOrder" xml:space="preserve">
- <value>5</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>
</data>
+ <assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="addMoreGamesToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>208, 22</value>
</data>
<data name="addMoreGamesToolStripMenuItem.Text" xml:space="preserve">
<value>Add more &amp;games</value>
</data>
- <data name="presetsToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
- <value>208, 22</value>
- </data>
- <data name="presetsToolStripMenuItem.Text" xml:space="preserve">
- <value>Selection presets</value>
- </data>
<data name="toolStripMenuItem2.Size" type="System.Drawing.Size, System.Drawing">
<value>139, 6</value>
</data>
@@ -180,6 +146,12 @@
<data name="deletePresetToolStripMenuItem.Text" xml:space="preserve">
<value>Delete preset</value>
</data>
+ <data name="presetsToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
+ <value>208, 22</value>
+ </data>
+ <data name="presetsToolStripMenuItem.Text" xml:space="preserve">
+ <value>Selection presets</value>
+ </data>
<data name="synchronizeToolStripMenuItem.ShortcutKeys" type="System.Windows.Forms.Keys, System.Windows.Forms">
<value>F5</value>
</data>
@@ -207,11 +179,11 @@
<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 name="fileToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
+ <value>37, 20</value>
</data>
- <data name="kernelToolStripMenuItem.Text" xml:space="preserve">
- <value>&amp;Kernel</value>
+ <data name="fileToolStripMenuItem.Text" xml:space="preserve">
+ <value>&amp;File</value>
</data>
<data name="dumpKernelToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>276, 22</value>
@@ -261,6 +233,7 @@
<data name="toolFlashTheWholeNANDStripMenuItem.Text" xml:space="preserve">
<value>Flash the whole NAND (experts only!)</value>
</data>
+ <assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="toolFlashTheWholeNANDStripMenuItem.Visible" type="System.Boolean, mscorlib">
<value>False</value>
</data>
@@ -291,11 +264,11 @@
<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 name="kernelToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
+ <value>52, 20</value>
</data>
- <data name="modulesToolStripMenuItem.Text" xml:space="preserve">
- <value>&amp;Modules</value>
+ <data name="kernelToolStripMenuItem.Text" xml:space="preserve">
+ <value>&amp;Kernel</value>
</data>
<data name="installModulesToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>197, 22</value>
@@ -309,11 +282,11 @@
<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 name="modulesToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
+ <value>65, 20</value>
</data>
- <data name="settingsToolStripMenuItem.Text" xml:space="preserve">
- <value>&amp;Settings</value>
+ <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>
@@ -341,12 +314,6 @@
<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="nESMiniToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>198, 22</value>
</data>
@@ -371,11 +338,11 @@
<data name="superFamicomMiniToolStripMenuItem.Text" xml:space="preserve">
<value>Super Famicom (Japan)</value>
</data>
- <data name="pagesfoldersTypeToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
+ <data name="consoleTypeToolStripMenuItem.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 name="consoleTypeToolStripMenuItem.Text" xml:space="preserve">
+ <value>Console type</value>
</data>
<data name="disablePagefoldersToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>356, 22</value>
@@ -455,11 +422,14 @@
<data name="customToolStripMenuItem.Text" xml:space="preserve">
<value>Custom - show Folders Manager every time</value>
</data>
- <data name="cloverconHackToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
+ <data name="pagesfoldersTypeToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>327, 22</value>
</data>
- <data name="cloverconHackToolStripMenuItem.Text" xml:space="preserve">
- <value>Controller hacks</value>
+ <data name="pagesfoldersTypeToolStripMenuItem.Text" xml:space="preserve">
+ <value>Pages/folders structure</value>
+ </data>
+ <data name="toolStripMenuItem13.Size" type="System.Drawing.Size, System.Drawing">
+ <value>324, 6</value>
</data>
<data name="resetUsingCombinationOfButtonsToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>308, 22</value>
@@ -491,6 +461,12 @@
<data name="upABStartOnSecondControllerToolStripMenuItem.Text" xml:space="preserve">
<value>"Up+A+B = Start" on 2nd controller</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="compressGamesToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>327, 22</value>
</data>
@@ -509,15 +485,18 @@
<data name="epilepsyProtectionToolStripMenuItem.Text" xml:space="preserve">
<value>Disable epilepsy protection</value>
</data>
+ <data name="enableUSBHostToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
+ <value>327, 22</value>
+ </data>
+ <data name="enableUSBHostToolStripMenuItem.Text" xml:space="preserve">
+ <value>Enable USB host</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>
@@ -527,11 +506,20 @@
<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 name="toolStripMenuItem5.Size" type="System.Drawing.Size, System.Drawing">
+ <value>324, 6</value>
</data>
- <data name="toolsToolStripMenuItem.Text" xml:space="preserve">
- <value>&amp;Tools</value>
+ <data name="alwaysWriteGamesToUSBDriveToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
+ <value>327, 22</value>
+ </data>
+ <data name="alwaysWriteGamesToUSBDriveToolStripMenuItem.Text" xml:space="preserve">
+ <value>Always write games to USB drive</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="saveStateManagerToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>331, 22</value>
@@ -584,11 +572,11 @@
<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 name="toolsToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
+ <value>47, 20</value>
</data>
- <data name="helpToolStripMenuItem.Text" xml:space="preserve">
- <value>&amp;Help</value>
+ <data name="toolsToolStripMenuItem.Text" xml:space="preserve">
+ <value>&amp;Tools</value>
</data>
<data name="gitHubPageWithActualReleasesToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
<value>246, 22</value>
@@ -614,6 +602,33 @@
<data name="aboutToolStripMenuItem.Text" xml:space="preserve">
<value>About...</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>
+ <data name="menuStrip.Size" type="System.Drawing.Size, System.Drawing">
+ <value>609, 24</value>
+ </data>
+ <data name="menuStrip.TabIndex" type="System.Int32, mscorlib">
+ <value>1</value>
+ </data>
+ <data name="&gt;&gt;menuStrip.Name" xml:space="preserve">
+ <value>menuStrip</value>
+ </data>
+ <data name="&gt;&gt;menuStrip.Type" xml:space="preserve">
+ <value>System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </data>
+ <data name="&gt;&gt;menuStrip.Parent" xml:space="preserve">
+ <value>$this</value>
+ </data>
+ <data name="&gt;&gt;menuStrip.ZOrder" xml:space="preserve">
+ <value>5</value>
+ </data>
<data name="groupBoxOptions.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>None</value>
</data>
@@ -1265,27 +1280,6 @@
<metadata name="statusStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>407, 17</value>
</metadata>
- <data name="statusStrip.Location" type="System.Drawing.Point, System.Drawing">
- <value>0, 614</value>
- </data>
- <data name="statusStrip.Size" type="System.Drawing.Size, System.Drawing">
- <value>609, 22</value>
- </data>
- <data name="statusStrip.TabIndex" type="System.Int32, mscorlib">
- <value>6</value>
- </data>
- <data name="&gt;&gt;statusStrip.Name" xml:space="preserve">
- <value>statusStrip</value>
- </data>
- <data name="&gt;&gt;statusStrip.Type" xml:space="preserve">
- <value>System.Windows.Forms.StatusStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
- </data>
- <data name="&gt;&gt;statusStrip.Parent" xml:space="preserve">
- <value>$this</value>
- </data>
- <data name="&gt;&gt;statusStrip.ZOrder" xml:space="preserve">
- <value>2</value>
- </data>
<data name="toolStripStatusConnectionIcon.AutoSize" type="System.Boolean, mscorlib">
<value>False</value>
</data>
@@ -1307,6 +1301,27 @@
<data name="toolStripProgressBar.Size" type="System.Drawing.Size, System.Drawing">
<value>195, 16</value>
</data>
+ <data name="statusStrip.Location" type="System.Drawing.Point, System.Drawing">
+ <value>0, 614</value>
+ </data>
+ <data name="statusStrip.Size" type="System.Drawing.Size, System.Drawing">
+ <value>609, 22</value>
+ </data>
+ <data name="statusStrip.TabIndex" type="System.Int32, mscorlib">
+ <value>6</value>
+ </data>
+ <data name="&gt;&gt;statusStrip.Name" xml:space="preserve">
+ <value>statusStrip</value>
+ </data>
+ <data name="&gt;&gt;statusStrip.Type" xml:space="preserve">
+ <value>System.Windows.Forms.StatusStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </data>
+ <data name="&gt;&gt;statusStrip.Parent" xml:space="preserve">
+ <value>$this</value>
+ </data>
+ <data name="&gt;&gt;statusStrip.ZOrder" xml:space="preserve">
+ <value>2</value>
+ </data>
<metadata name="openFileDialogNes.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>500, 17</value>
</metadata>
@@ -1316,42 +1331,57 @@
<metadata name="contextMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>638, 17</value>
</metadata>
- <data name="contextMenuStrip.Size" type="System.Drawing.Size, System.Drawing">
- <value>270, 92</value>
- </data>
- <data name="&gt;&gt;contextMenuStrip.Name" xml:space="preserve">
- <value>contextMenuStrip</value>
- </data>
- <data name="&gt;&gt;contextMenuStrip.Type" xml:space="preserve">
- <value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
- </data>
<data name="downloadBoxArtForSelectedGamesToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
- <value>269, 22</value>
+ <value>282, 22</value>
</data>
<data name="downloadBoxArtForSelectedGamesToolStripMenuItem.Text" xml:space="preserve">
<value>Download box art for selected games</value>
</data>
<data name="compressSelectedGamesToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
- <value>269, 22</value>
+ <value>282, 22</value>
</data>
<data name="compressSelectedGamesToolStripMenuItem.Text" xml:space="preserve">
<value>Compress selected games</value>
</data>
<data name="decompressSelectedGamesToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
- <value>269, 22</value>
+ <value>282, 22</value>
</data>
<data name="decompressSelectedGamesToolStripMenuItem.Text" xml:space="preserve">
<value>Decompress selected games</value>
</data>
+ <data name="openSelectedGamesFolderInExplorerToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
+ <value>282, 22</value>
+ </data>
+ <data name="openSelectedGamesFolderInExplorerToolStripMenuItem.Text" xml:space="preserve">
+ <value>Open selected game's folder in explorer</value>
+ </data>
<data name="deleteSelectedGamesToolStripMenuItem.ShortcutKeyDisplayString" xml:space="preserve">
<value>Del</value>
</data>
<data name="deleteSelectedGamesToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
- <value>269, 22</value>
+ <value>282, 22</value>
</data>
<data name="deleteSelectedGamesToolStripMenuItem.Text" xml:space="preserve">
<value>Delete selected games</value>
</data>
+ <data name="toolStripMenuItem12.Size" type="System.Drawing.Size, System.Drawing">
+ <value>279, 6</value>
+ </data>
+ <data name="createCustomCommandToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
+ <value>282, 22</value>
+ </data>
+ <data name="createCustomCommandToolStripMenuItem.Text" xml:space="preserve">
+ <value>Create custom command</value>
+ </data>
+ <data name="contextMenuStrip.Size" type="System.Drawing.Size, System.Drawing">
+ <value>283, 142</value>
+ </data>
+ <data name="&gt;&gt;contextMenuStrip.Name" xml:space="preserve">
+ <value>contextMenuStrip</value>
+ </data>
+ <data name="&gt;&gt;contextMenuStrip.Type" xml:space="preserve">
+ <value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </data>
<metadata name="openFileDialogImage.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 98</value>
</metadata>
@@ -1391,6 +1421,18 @@
<data name="groupBoxDefaultGames.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>None</value>
</data>
+ <data name="checkedListBoxDefaultGames.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
+ <value>Top, Bottom, Left, Right</value>
+ </data>
+ <data name="checkedListBoxDefaultGames.Location" type="System.Drawing.Point, System.Drawing">
+ <value>5, 49</value>
+ </data>
+ <data name="checkedListBoxDefaultGames.Size" type="System.Drawing.Size, System.Drawing">
+ <value>282, 454</value>
+ </data>
+ <data name="checkedListBoxDefaultGames.TabIndex" type="System.Int32, mscorlib">
+ <value>3</value>
+ </data>
<data name="&gt;&gt;checkedListBoxDefaultGames.Name" xml:space="preserve">
<value>checkedListBoxDefaultGames</value>
</data>
@@ -1430,30 +1472,6 @@
<data name="&gt;&gt;groupBoxDefaultGames.ZOrder" xml:space="preserve">
<value>7</value>
</data>
- <data name="checkedListBoxDefaultGames.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
- <value>Top, Bottom, Left, Right</value>
- </data>
- <data name="checkedListBoxDefaultGames.Location" type="System.Drawing.Point, System.Drawing">
- <value>5, 49</value>
- </data>
- <data name="checkedListBoxDefaultGames.Size" type="System.Drawing.Size, System.Drawing">
- <value>282, 454</value>
- </data>
- <data name="checkedListBoxDefaultGames.TabIndex" type="System.Int32, mscorlib">
- <value>3</value>
- </data>
- <data name="&gt;&gt;checkedListBoxDefaultGames.Name" xml:space="preserve">
- <value>checkedListBoxDefaultGames</value>
- </data>
- <data name="&gt;&gt;checkedListBoxDefaultGames.Type" xml:space="preserve">
- <value>System.Windows.Forms.CheckedListBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
- </data>
- <data name="&gt;&gt;checkedListBoxDefaultGames.Parent" xml:space="preserve">
- <value>groupBoxDefaultGames</value>
- </data>
- <data name="&gt;&gt;checkedListBoxDefaultGames.ZOrder" xml:space="preserve">
- <value>0</value>
- </data>
<metadata name="timerCalculateGames.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>771, 17</value>
</metadata>
@@ -1475,6 +1493,12 @@
<data name="listViewGames.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>None</value>
</data>
+ <data name="gameName.Text" xml:space="preserve">
+ <value>Game name</value>
+ </data>
+ <data name="gameName.Width" type="System.Int32, mscorlib">
+ <value>253</value>
+ </data>
<data name="listViewGames.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 57</value>
</data>
@@ -1499,11 +1523,8 @@
<metadata name="exportFolderDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>922, 17</value>
</metadata>
- <data name="gameName.Text" xml:space="preserve">
- <value>Game name</value>
- </data>
- <data name="gameName.Width" type="System.Int32, mscorlib">
- <value>253</value>
+ <data name="exportFolderDialog.Description" xml:space="preserve">
+ <value>Select your USB drive</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
@@ -2958,6 +2979,12 @@
<data name="&gt;&gt;customToolStripMenuItem.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;toolStripMenuItem13.Name" xml:space="preserve">
+ <value>toolStripMenuItem13</value>
+ </data>
+ <data name="&gt;&gt;toolStripMenuItem13.Type" xml:space="preserve">
+ <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </data>
<data name="&gt;&gt;cloverconHackToolStripMenuItem.Name" xml:space="preserve">
<value>cloverconHackToolStripMenuItem</value>
</data>
@@ -3012,22 +3039,34 @@
<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;enableUSBHostToolStripMenuItem.Name" xml:space="preserve">
+ <value>enableUSBHostToolStripMenuItem</value>
+ </data>
+ <data name="&gt;&gt;enableUSBHostToolStripMenuItem.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;globalCommandLineArgumentsexpertsOnluToolStripMenuItem.Name" xml:space="preserve">
<value>globalCommandLineArgumentsexpertsOnluToolStripMenuItem</value>
</data>
<data name="&gt;&gt;globalCommandLineArgumentsexpertsOnluToolStripMenuItem.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;saveSettingsToNESMiniNowToolStripMenuItem.Name" xml:space="preserve">
+ <value>saveSettingsToNESMiniNowToolStripMenuItem</value>
+ </data>
+ <data name="&gt;&gt;saveSettingsToNESMiniNowToolStripMenuItem.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;toolStripMenuItem5.Name" xml:space="preserve">
<value>toolStripMenuItem5</value>
</data>
<data name="&gt;&gt;toolStripMenuItem5.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
- <data name="&gt;&gt;saveSettingsToNESMiniNowToolStripMenuItem.Name" xml:space="preserve">
- <value>saveSettingsToNESMiniNowToolStripMenuItem</value>
+ <data name="&gt;&gt;alwaysWriteGamesToUSBDriveToolStripMenuItem.Name" xml:space="preserve">
+ <value>alwaysWriteGamesToUSBDriveToolStripMenuItem</value>
</data>
- <data name="&gt;&gt;saveSettingsToNESMiniNowToolStripMenuItem.Type" xml:space="preserve">
+ <data name="&gt;&gt;alwaysWriteGamesToUSBDriveToolStripMenuItem.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;toolsToolStripMenuItem.Name" xml:space="preserve">
@@ -3168,12 +3207,30 @@
<data name="&gt;&gt;decompressSelectedGamesToolStripMenuItem.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;openSelectedGamesFolderInExplorerToolStripMenuItem.Name" xml:space="preserve">
+ <value>openSelectedGamesFolderInExplorerToolStripMenuItem</value>
+ </data>
+ <data name="&gt;&gt;openSelectedGamesFolderInExplorerToolStripMenuItem.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;deleteSelectedGamesToolStripMenuItem.Name" xml:space="preserve">
<value>deleteSelectedGamesToolStripMenuItem</value>
</data>
<data name="&gt;&gt;deleteSelectedGamesToolStripMenuItem.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;toolStripMenuItem12.Name" xml:space="preserve">
+ <value>toolStripMenuItem12</value>
+ </data>
+ <data name="&gt;&gt;toolStripMenuItem12.Type" xml:space="preserve">
+ <value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </data>
+ <data name="&gt;&gt;createCustomCommandToolStripMenuItem.Name" xml:space="preserve">
+ <value>createCustomCommandToolStripMenuItem</value>
+ </data>
+ <data name="&gt;&gt;createCustomCommandToolStripMenuItem.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;openFileDialogImage.Name" xml:space="preserve">
<value>openFileDialogImage</value>
</data>
diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs
index 1b2b155a..21c263b9 100644
--- a/Properties/AssemblyInfo.cs
+++ b/Properties/AssemblyInfo.cs
@@ -7,7 +7,7 @@ using System.Resources;
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("hakchi2")]
-[assembly: AssemblyDescription("Based on hakchi by madmonkey.\r\n\r\nTranslators:\r\nBritish English: Jhynjhiruu Rekrap\r\nFrench: Ac_K, Xavier M-M, JumpmanFR\r\nSpanish of Spain: Naiki (https://twitter.com/___naiki___)\r\nSpanish of Argentina: KNTRO\r\nGerman: Peamur\r\nItalian: student\r\nCatalan: Truchen\r\nDutch: Mark Dekker - Mad Mega\r\nSlovak: Patrik Žec aka PATWIST\r\nGerman: Peamur\r\nGreek: Miltos Arpazopoulos\r\nFinnish: Luoti-Lasse\r\nBulgarian: Jelmer de Groot\r\nChinese: 九五二七\r\nUkrainian: Пестренко Олекса\r\n\r\nSpecial thanks:\r\nmadmonkey and pcm720 for great help with everything.\r\nxsnake for Japanese font.\r\nPete Batard/Akeo for Zadig.\r\npbatard for libwdi.\r\nThomas Bleeker for WinUSBNet lib.\r\nbootgod for cartridge database.\r\nMarkovtsev Vadim for SevenZipSharp lib.\r\nNeoRame for Graphics.\r\nNhakin for Game Genie database.\r\nmooware for mooftpserv.\r\nNintendo for my childhood.\r\n\r\nMy site: http://clusterrr.com\r\nEmail: clusterrr@clusterrr.com\r\nPayPal for donations: clusterrr@clusterrr.com")]
+[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Alexey 'Cluster' Avdyukhin")]
[assembly: AssemblyProduct("hakchi2")]
@@ -33,6 +33,6 @@ using System.Resources;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("2.0.21.72")]
-[assembly: AssemblyFileVersion("2.0.21.72")]
+[assembly: AssemblyVersion("2.0.30.1")]
+[assembly: AssemblyFileVersion("2.0.30.1")]
[assembly: NeutralResourcesLanguageAttribute("en-US")]
diff --git a/Properties/Resources.resx b/Properties/Resources.resx
index 8c30bd49..d0affad5 100644
--- a/Properties/Resources.resx
+++ b/Properties/Resources.resx
@@ -721,10 +721,19 @@
<data name="TooManyPerFolder" xml:space="preserve">
<value>Warning! It's not recommended to store so many games per folder.</value>
</data>
- <data name="FolderNotEmpty" xml:space="preserve">
- <value>The selected folder isn't empty</value>
- </data>
<data name="gitCommit" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\commit.txt;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
</data>
+ <data name="ConfigSavedNote" xml:space="preserve">
+ <value>Config saved. Please note that configuration for the real console ({0}) was used, not for selected console ({1}).</value>
+ </data>
+ <data name="Syncronize" xml:space="preserve">
+ <value>Synchronize selected games with NES/SNES Mini</value>
+ </data>
+ <data name="SyncronizeUSB" xml:space="preserve">
+ <value>Synchronize selected games with USB drive</value>
+ </data>
+ <data name="WritingUSB" xml:space="preserve">
+ <value>Writing games to the USB drive...</value>
+ </data>
</root> \ No newline at end of file
diff --git a/SaveStateManager.cs b/SaveStateManager.cs
index 92077f75..061eab99 100644
--- a/SaveStateManager.cs
+++ b/SaveStateManager.cs
@@ -60,8 +60,9 @@ namespace com.clusterrr.hakchi_gui
WorkerForm.ShowSplashScreen();
var listSavesScript =
"#!/bin/sh\n" +
- "savespath=/var/lib/clover/profiles/0\n" +
- "find $savespath -mindepth 1 -maxdepth 1 -type d -name \"CLV-*\" | sed 's#.*/##' | while read code ; do\n" +
+ "savespath=/var/saves\n" +
+ "gamestorage=$(hakchi findGameSyncStorage)\n" +
+ "find -L $savespath -mindepth 1 -maxdepth 1 -type d -name \"CLV-*\" | sed 's#.*/##' | while read code ; do\n" +
" flags=F\n" +
" [ -f $savespath/$code/save.sram ] && flags=${flags}-S\n" +
" [ -f $savespath/$code/cartridge.sram ] && [ $(wc -c <$savespath/$code/cartridge.sram) -gt 20 ] && flags=${flags}-S\n" +
@@ -75,7 +76,7 @@ namespace com.clusterrr.hakchi_gui
" [ -d $savespath/$code/suspendpoint4 ] && flags=${flags}-4\n" +
" if [ \"$flags\" != \"F\" ]; then\n" +
" size=$(du -d 0 $savespath/$code | awk '{ print $1 }')\n" +
- " name=$(find /var/lib -type f -name \"$code.desktop\" -exec cat {} + | sed -n 's/Name=\\(.*\\)/\\1/p' | head -n 1)\n" +
+ " name=$(find -L \"$gamestorage\" -type f -name \"$code.desktop\" -exec cat {} + | sed -n 's/Name=\\(.*\\)/\\1/p' | head -n 1)\n" +
" [ -z \"$name\" ] && name=UNKNOWN\n" +
" echo $code $size $flags $name\n" +
" unset flags\n" +
diff --git a/WorkerForm.cs b/WorkerForm.cs
index b5ac3c94..6a4adeeb 100644
--- a/WorkerForm.cs
+++ b/WorkerForm.cs
@@ -1,5 +1,4 @@
-using com.clusterrr.Famicom;
-using com.clusterrr.FelLib;
+using com.clusterrr.FelLib;
using com.clusterrr.hakchi_gui.Properties;
using com.clusterrr.util;
using SevenZip;
@@ -11,7 +10,6 @@ using System.Drawing.Imaging;
using System.Globalization;
using System.IO;
using System.Linq;
-using System.Reflection;
using System.Text;
using System.Threading;
using System.Windows.Forms;
@@ -86,27 +84,31 @@ namespace com.clusterrr.hakchi_gui
const long maxCompressedsRamfsSize = 30 * 1024 * 1024;
string selectedFile = null;
public NesMiniApplication[] addedApplications;
- public static int NandCTotal, NandCUsed, NandCFree, WritedGamesSize, SaveStatesSize;
+ public static long NandCTotal, NandCUsed, NandCFree, WritedGamesSize, SaveStatesSize;
public static bool ExternalSaves = false;
- public static long ReservedMemory
+ public const long ReservedMemory = 30;
+
+ public static string SubConsoleDirectory
{
get
{
- if (ExternalSaves)
- return 5;
switch (ConfigIni.ConsoleType)
{
- default:
case MainForm.ConsoleType.NES:
+ return "nes";
case MainForm.ConsoleType.Famicom:
- return 10;
+ return "nes-jpn";
case MainForm.ConsoleType.SNES:
+ return "snes";
case MainForm.ConsoleType.SuperFamicom:
- return 30;
+ return "snes-jpn";
+ default:
+ return ".";
}
}
}
+
public WorkerForm(MainForm parentForm)
{
InitializeComponent();
@@ -542,9 +544,12 @@ namespace com.clusterrr.hakchi_gui
byte[] kernel;
if (!string.IsNullOrEmpty(Mod))
{
+ // TODO: check version
+ //#if !DEBUG
// Just to verify that correct console is selected
if (!DoKernelDump(null, maxProgress, progress))
return;
+ //#endif
progress += 80;
kernel = CreatePatchedKernel();
progress += 5;
@@ -784,26 +789,42 @@ namespace com.clusterrr.hakchi_gui
}
}
- private void File_OnProgress(long Position, long Length)
+ public static void GetMemoryStats(string gameSyncStorage = null)
{
- throw new NotImplementedException();
- }
-
- public static void GetMemoryStats()
- {
- var clovershell = MainForm.Clovershell;
- var nandc = clovershell.ExecuteSimple("df /dev/nandc | tail -n 1 | awk '{ print $2 \" | \" $3 \" | \" $4 }'", 500, true).Split('|');
- ExternalSaves = clovershell.ExecuteSimple("mount | grep /var/lib/clover").Trim().Length > 0;
- WritedGamesSize = int.Parse(clovershell.ExecuteSimple("mkdir -p /var/lib/hakchi/rootfs/usr/share/games/ && du -s /var/lib/hakchi/rootfs/usr/share/games/ | awk '{ print $1 }'", 1000, true)) * 1024;
- SaveStatesSize = int.Parse(clovershell.ExecuteSimple("mkdir -p /var/lib/clover/profiles/0/ && du -s /var/lib/clover/profiles/0/ | awk '{ print $1 }'", 1000, true)) * 1024;
- NandCTotal = int.Parse(nandc[0]) * 1024;
- NandCUsed = int.Parse(nandc[1]) * 1024;
- NandCFree = int.Parse(nandc[2]) * 1024;
- Debug.WriteLine(string.Format("NANDC size: {0:F1}MB, used: {1:F1}MB, free: {2:F1}MB", NandCTotal / 1024.0 / 1024.0, NandCUsed / 1024.0 / 1024.0, NandCFree / 1024.0 / 1024.0));
- Debug.WriteLine(string.Format("Used by games: {0:F1}MB", WritedGamesSize / 1024.0 / 1024.0));
- Debug.WriteLine(string.Format("Used by save-states: {0:F1}MB", SaveStatesSize / 1024.0 / 1024.0));
- Debug.WriteLine(string.Format("Used by other files (mods, configs, etc.): {0:F1}MB", (NandCUsed - WritedGamesSize - SaveStatesSize) / 1024.0 / 1024.0));
- Debug.WriteLine(string.Format("Available for games: {0:F1}MB", (NandCFree + WritedGamesSize) / 1024.0 / 1024.0));
+ try
+ {
+ string originalGamesPath = NesMiniApplication.GamesCloverPath;
+ const string rootFsPath = "/var/lib/hakchi/rootfs";
+
+ var clovershell = MainForm.Clovershell;
+ if (gameSyncStorage == null) gameSyncStorage = clovershell.ExecuteSimple($"hakchi findGameSyncStorage", 3000, true);
+ var storageDevice = clovershell.ExecuteSimple($"df {gameSyncStorage} | sed -n '2p' | awk '{{print $1}}'", 3000, true);
+ var storageStats = clovershell.ExecuteSimple($"df {storageDevice} | tail -n 1 | awk '{{ print $2 \" | \" $3 \" | \" $4 }}'", 3000, true).Split('|');
+
+ ExternalSaves = clovershell.ExecuteSimple("mount | grep /var/lib/clover").Trim().Length > 0;
+ var writedGamesSizeAll = long.Parse(clovershell.ExecuteSimple($"mkdir -p {rootFsPath}{originalGamesPath} && du -s {rootFsPath}{originalGamesPath} | awk '{{ print $1 }}'", 3000, true)) * 1024;
+ if (gameSyncStorage != $"{rootFsPath}{originalGamesPath}")
+ writedGamesSizeAll += long.Parse(clovershell.ExecuteSimple($"mkdir -p {gameSyncStorage}/{SubConsoleDirectory}/ && du -s {gameSyncStorage}/{SubConsoleDirectory}/ | awk '{{ print $1 }}'", 3000, true)) * 1024;
+ WritedGamesSize = writedGamesSizeAll;
+ SaveStatesSize = long.Parse(clovershell.ExecuteSimple("mkdir -p /var/lib/clover/profiles/0/ && du -s /var/lib/clover/profiles/0/ | awk '{ print $1 }'", 3000, true)) * 1024;
+ NandCTotal = long.Parse(storageStats[0]) * 1024;
+ NandCUsed = long.Parse(storageStats[1]) * 1024;
+ NandCFree = long.Parse(storageStats[2]) * 1024;
+ Debug.WriteLine(string.Format("Storage device size: {0:F1}MB, used: {1:F1}MB, free: {2:F1}MB", NandCTotal / 1024.0 / 1024.0, NandCUsed / 1024.0 / 1024.0, NandCFree / 1024.0 / 1024.0));
+ Debug.WriteLine(string.Format("Used by games: {0:F1}MB", WritedGamesSize / 1024.0 / 1024.0));
+ Debug.WriteLine(string.Format("Used by save-states: {0:F1}MB", SaveStatesSize / 1024.0 / 1024.0));
+ Debug.WriteLine(string.Format("Used by other files (mods, configs, etc.): {0:F1}MB", (NandCUsed - WritedGamesSize - SaveStatesSize) / 1024.0 / 1024.0));
+ Debug.WriteLine(string.Format("Available for games: {0:F1}MB", (NandCFree + WritedGamesSize) / 1024.0 / 1024.0));
+ }
+ catch (Exception ex)
+ {
+ Debug.WriteLine("Error: " + ex.Message + ex.StackTrace);
+ NandCTotal = -1;
+ NandCUsed = -1;
+ NandCFree = -1;
+ WritedGamesSize = -1;
+ SaveStatesSize = -1;
+ }
}
public static void ShowSplashScreen()
@@ -825,10 +846,9 @@ namespace com.clusterrr.hakchi_gui
public void UploadGames()
{
- string gamesPath = NesMiniApplication.GamesCloverPath;
+ string originalGamesPath = NesMiniApplication.GamesCloverPath;
const string rootFsPath = "/var/lib/hakchi/rootfs";
const string installPath = "/var/lib/hakchi";
- const string squashFsPath = "/var/lib/hakchi/squashfs";
int progress = 0;
int maxProgress = 400;
if (Games == null || Games.Count == 0)
@@ -836,7 +856,7 @@ namespace com.clusterrr.hakchi_gui
SetStatus(Resources.BuildingFolders);
if (FoldersMode == NesMenuCollection.SplitStyle.Custom)
{
- if (FoldersManagerFromThread(Games) != System.Windows.Forms.DialogResult.OK)
+ if (FoldersManagerFromThread(Games) != DialogResult.OK)
{
DialogResult = DialogResult.Abort;
return;
@@ -857,33 +877,22 @@ namespace com.clusterrr.hakchi_gui
DialogResult = DialogResult.Abort;
return;
}
- }
- progress += 5;
- SetProgress(progress, maxProgress);
- if (!exportGames)
- {
ShowSplashScreen();
UpdateRootfs();
- var squashFsMount = clovershell.ExecuteSimple($"mount | grep {squashFsPath}", 3000, false);
- if (string.IsNullOrEmpty(squashFsMount))
- clovershell.ExecuteSimple($"mkdir -p {squashFsPath} && mount /dev/mapper/root-crypt {squashFsPath}", 3000, true);
}
+ progress += 5;
+ SetProgress(progress, maxProgress);
SetStatus(Resources.BuildingFolders);
if (Directory.Exists(tempDirectory))
Directory.Delete(tempDirectory, true);
Directory.CreateDirectory(tempDirectory);
// Games!
tempGamesDirectory = Path.Combine(tempDirectory, "games");
- if (exportDirectory != null)
- {
- tempGamesDirectory = exportDirectory;
- }
+ if (exportGames)
+ tempGamesDirectory = Path.Combine(tempGamesDirectory, SubConsoleDirectory);
Directory.CreateDirectory(tempDirectory);
Directory.CreateDirectory(tempGamesDirectory);
- if (Directory.GetDirectories(tempGamesDirectory).Length > 0)
- {
- throw new Exception(Resources.FolderNotEmpty);
- }
+ File.WriteAllBytes(Path.Combine(tempGamesDirectory, ".repair.flag"), new byte[0]);
Dictionary<string, string> originalGames = new Dictionary<string, string>();
var stats = new GamesTreeStats();
AddMenu(Games, originalGames, stats);
@@ -893,31 +902,29 @@ namespace com.clusterrr.hakchi_gui
int startProgress = progress;
if (!exportGames)
{
- GetMemoryStats();
- var maxGamesSize = (NandCFree + WritedGamesSize) - ReservedMemory * 1024 * 1024;
- if (stats.TotalSize > maxGamesSize)
+ var gameSyncStorage = clovershell.ExecuteSimple($"hakchi findGameSyncStorage", 3000, false);
+ GetMemoryStats(gameSyncStorage);
+ if (NandCFree >= 0)
{
- throw new Exception(string.Format(Resources.MemoryFull, stats.TotalSize / 1024 / 1024) + "\r\n\r\n" +
- string.Format(Resources.MemoryStats.Replace("|", "\r\n"),
- NandCTotal / 1024.0 / 1024.0,
- (NandCFree + WritedGamesSize - ReservedMemory * 1024 * 1024) / 1024 / 1024,
- SaveStatesSize / 1024.0 / 1024.0,
- (NandCUsed - WritedGamesSize - SaveStatesSize) / 1024.0 / 1024.0));
+ var maxGamesSize = (NandCFree + WritedGamesSize) - ReservedMemory * 1024 * 1024;
+ if (stats.TotalSize > maxGamesSize)
+ {
+ throw new Exception(string.Format(Resources.MemoryFull, stats.TotalSize / 1024 / 1024) + "\r\n\r\n" +
+ string.Format(Resources.MemoryStats.Replace("|", "\r\n"),
+ NandCTotal / 1024.0 / 1024.0,
+ (NandCFree + WritedGamesSize - ReservedMemory * 1024 * 1024) / 1024 / 1024,
+ SaveStatesSize / 1024.0 / 1024.0,
+ (NandCUsed - WritedGamesSize - SaveStatesSize) / 1024.0 / 1024.0));
+ }
}
using (var gamesTar = new TarStream(tempGamesDirectory))
{
- maxProgress = (int)(gamesTar.Length / 1024 / 1024 + 20 + originalGames.Count() * 2);
+ SetStatus(Resources.UploadingGames);
+ maxProgress = (int)(gamesTar.Length / 1024 / 1024 + 20);
SetProgress(progress, maxProgress);
-
- clovershell.ExecuteSimple(string.Format("umount {0}", gamesPath));
- clovershell.ExecuteSimple($"mkdir -p \"{rootFsPath}{gamesPath}\"", 3000, true);
- if (ConfigIni.ConsoleType == MainForm.ConsoleType.NES || ConfigIni.ConsoleType == MainForm.ConsoleType.Famicom)
- {
- clovershell.ExecuteSimple($"[ -f \"{squashFsPath}{gamesPath}/title.fnt\" ] && [ ! -f \"{rootFsPath}{gamesPath}/title.fnt\" ] && cp -f \"{squashFsPath}{gamesPath}/title.fnt\" \"{rootFsPath}{gamesPath}\"/", 3000, false);
- clovershell.ExecuteSimple($"[ -f \"{squashFsPath}{gamesPath}/copyright.fnt\" ] && [ ! -f \"{rootFsPath}{gamesPath}/copyright.fnt\" ] && cp -f \"{squashFsPath}{gamesPath}/copyright.fnt\" \"{rootFsPath}{gamesPath}\"/", 3000, false);
- }
- clovershell.ExecuteSimple(string.Format("rm -rf {0}{1}/CLV-* {0}{1}/??? {2}/menu", rootFsPath, gamesPath, installPath), 5000, true);
+ clovershell.ExecuteSimple($"rm -rf {gameSyncStorage}/{SubConsoleDirectory} {installPath}/menu {rootFsPath}{originalGamesPath}", 5000, true);
+ clovershell.ExecuteSimple($"mkdir -p \"{gameSyncStorage}/{SubConsoleDirectory}\"", 3000, true);
if (gamesTar.Length > 0)
{
@@ -926,89 +933,53 @@ namespace com.clusterrr.hakchi_gui
progress = (int)(startProgress + pos / 1024 / 1024);
SetProgress(progress, maxProgress);
};
-
- SetStatus(Resources.UploadingGames);
- clovershell.Execute(string.Format("tar -xvC {0}{1}", rootFsPath, gamesPath), gamesTar, null, null, 30000, true);
+ clovershell.Execute($"tar -xvC \"{gameSyncStorage}/{SubConsoleDirectory}\"", gamesTar, null, null, 30000, true);
}
}
- }
- SetStatus(Resources.UploadingOriginalGames);
- // Need to make sure that squashfs if mounted
- startProgress = progress;
- string executablePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
- string desktopEntriesPath = Path.Combine(executablePath, "DesktopEntries");
- foreach (var originalCode in originalGames.Keys)
+ SetStatus(Resources.UploadingConfig);
+ SyncConfig();
+ }
+ else // exportGames = true
{
- if (exportGames)
- {
- string desktopFilePath = Path.Combine(desktopEntriesPath, $"{originalCode}.desktop");
- string tempGamePath = Path.Combine(tempGamesDirectory, $"{originalGames[originalCode]}/{originalCode}");
- Directory.CreateDirectory(Path.Combine(tempGamePath, "autoplay"));
- if (ConfigIni.ConsoleType == MainForm.ConsoleType.NES || ConfigIni.ConsoleType == MainForm.ConsoleType.Famicom)
- {
- Directory.CreateDirectory(Path.Combine(tempGamePath, "pixelart"));
- }
- File.Copy(desktopFilePath, Path.Combine(tempGamePath, $"{originalCode}.desktop"));
- }
- else
- {
- string originalSyncCode = "";
- switch (ConfigIni.ConsoleType)
- {
- case MainForm.ConsoleType.NES:
- case MainForm.ConsoleType.Famicom:
- originalSyncCode =
- $"src=\"{squashFsPath}{gamesPath}/{originalCode}\" && " +
- $"dst=\"{rootFsPath}{gamesPath}/{originalGames[originalCode]}/{originalCode}/\" && " +
- $"mkdir -p \"$dst\" && " +
- $"ln -s \"$src/{originalCode}.png\" \"$dst\" && " +
- $"ln -s \"$src/{originalCode}_small.png\" \"$dst\" && " +
- $"ln -s \"$src/{originalCode}.nes\" \"$dst\" && " +
- $"ln -s \"$src/autoplay/\" \"$dst/autoplay\" && " +
- $"ln -s \"$src/pixelart/\" \"$dst/pixelart\" && " +
- $"cp \"$src/{originalCode}.desktop\" \"$dst/{originalCode}.desktop\" && " +
- $"sed -i -e 's/\\/usr\\/bin\\/clover-kachikachi/\\/bin\\/clover-kachikachi-wr/g' \"$dst/{originalCode}.desktop\"";
- break;
- case MainForm.ConsoleType.SNES:
- case MainForm.ConsoleType.SuperFamicom:
- originalSyncCode =
- $"src=\"{squashFsPath}{gamesPath}/{originalCode}\" && " +
- $"dst=\"{rootFsPath}{gamesPath}/{originalGames[originalCode]}/{originalCode}/\" && " +
- $"mkdir -p \"$dst\" && " +
- $"ln -s \"$src/{originalCode}.png\" \"$dst\" && " +
- $"ln -s \"$src/{originalCode}_small.png\" \"$dst\" && " +
- $"ln -s \"$src/{originalCode}.sfrom\" \"$dst\" && " +
- $"ln -s \"$src/autoplay/\" \"$dst/autoplay\" && " +
- $"cp \"$src/{originalCode}.desktop\" \"$dst/{originalCode}.desktop\" && " +
- $"sed -i -e 's/\\/usr\\/bin\\/clover-canoe-shvc/\\/bin\\/clover-canoe-shvc-wr/g' \"$dst/{originalCode}.desktop\"";
- break;
- }
- clovershell.ExecuteSimple(originalSyncCode, 30000, true);
- }
- progress += 2;
+ SetStatus(Resources.WritingUSB);
+ maxProgress = (int)(stats.TotalSize / 1024 / 1024 + 20);
SetProgress(progress, maxProgress);
- };
-
- SetStatus(Resources.UploadingConfig);
- if (!exportGames)
- {
- SyncConfig(Config);
+ Directory.CreateDirectory(exportDirectory);
+ string lastDirectory = null;
+ long pos = 0;
+ if (!ExecuteTool("rsync.exe", $"-ac --delete --progress --exclude=title.fnt --exclude=copyright.fnt \"{cygwinPath(tempGamesDirectory)}\" \"{cygwinPath(exportDirectory)}\"",
+ null, false, delegate (string line)
+ {
+ if (line.EndsWith("/"))
+ {
+ SetStatus(Resources.WritingUSB + " " + line.Replace("/", "\\"));
+ if (!line.StartsWith("deleting"))
+ {
+ if (lastDirectory != null && !line.StartsWith(lastDirectory)) // Previous directory transfered
+ {
+ try
+ {
+ pos += NesMiniApplication.DirectorySize(Path.Combine(Path.Combine(tempGamesDirectory, ".."), line.Replace("/", "\\")));
+ progress = (int)(startProgress + pos / 1024 / 1024);
+ SetProgress(progress, maxProgress);
+ }
+ catch (Exception ex)
+ {
+ Debug.WriteLine("Error: " + ex.Message + ex.StackTrace);
+ }
+ }
+ lastDirectory = line;
+ }
+ }
+ Debug.WriteLine("rsync output: " + line);
+ })
+ ) throw new Exception("Can't rsync to USB drive");
}
#if !DEBUG
- if (!exportGames && Directory.Exists(tempDirectory))
+ if (Directory.Exists(tempDirectory))
Directory.Delete(tempDirectory, true);
#endif
- if (exportGames)
- {
- new Process()
- {
- StartInfo = new ProcessStartInfo()
- {
- FileName = tempGamesDirectory,
- }
- }.Start();
- }
SetStatus(Resources.Done);
SetProgress(maxProgress, maxProgress);
}
@@ -1038,30 +1009,43 @@ namespace com.clusterrr.hakchi_gui
if (updateTar.Length > 0)
{
var clovershell = MainForm.Clovershell;
- clovershell.Execute("tar -xvC /", updateTar, null, null, 30000, true);
- clovershell.ExecuteSimple("chmod +x /bin/*", 3000, true);
- clovershell.ExecuteSimple("chmod +x /etc/init.d/*", 3000, true);
+ clovershell.ExecuteSimple("mkdir -p /tmp/root", 3000, true);
+ clovershell.Execute("tar -xvC /tmp/root", updateTar, null, null, 30000, true);
+ clovershell.ExecuteSimple("chmod +x /tmp/root/bin/*", 3000, true);
+ clovershell.ExecuteSimple("chmod +x /tmp/root/etc/init.d/*", 3000, true);
+ clovershell.ExecuteSimple("rsync -ac /tmp/root/* /", 3000, true);
}
}
}
- public static void SyncConfig(Dictionary<string, string> Config, bool reboot = false)
+ public static void SyncConfig(bool reboot = false)
+ {
+ bool dumb;
+ MainForm.ConsoleType realConsoleType;
+ SyncConfig(out dumb, out realConsoleType, reboot);
+ }
+
+ public static void SyncConfig(out bool customFirmware, out MainForm.ConsoleType realConsoleType, bool reboot = false)
{
var clovershell = MainForm.Clovershell;
const string configPath = "/etc/preinit.d/p0000_config";
+ realConsoleType = GetRealConsoleType();
+ customFirmware = realConsoleType != ConfigIni.ConsoleType;
+ var config = ConfigIni.GetConfigDictionary(realConsoleType);
// Writing config
- var config = new MemoryStream();
- if (Config != null && Config.Count > 0)
+ var configStream = new MemoryStream();
+ if (config != null && config.Count > 0)
{
- foreach (var key in Config.Keys)
+ foreach (var key in config.Keys)
{
- var data = Encoding.UTF8.GetBytes(string.Format("cfg_{0}='{1}'\n", key, Config[key].Replace(@"'", @"\'")));
- config.Write(data, 0, data.Length);
+ var data = Encoding.UTF8.GetBytes(string.Format("cfg_{0}='{1}'\n", key, config[key].Replace(@"'", @"\'")));
+ configStream.Write(data, 0, data.Length);
}
}
- clovershell.Execute($"cat >> {configPath}", config, null, null, 3000, true);
- config.Dispose();
+ clovershell.Execute($"cat >> {configPath}", configStream, null, null, 3000, true);
+ configStream.Dispose();
+
if (reboot)
{
try
@@ -1072,6 +1056,56 @@ namespace com.clusterrr.hakchi_gui
}
}
+ public static MainForm.ConsoleType GetRealConsoleType() // Retreives real console type
+ {
+ var clovershell = MainForm.Clovershell;
+ var customFirmwareLoaded = clovershell.ExecuteSimple("hakchi currentFirmware") != "_nand_";
+ string board, region;
+ if (!customFirmwareLoaded)
+ {
+ board = clovershell.ExecuteSimple("cat /etc/clover/boardtype", 3000, true);
+ region = clovershell.ExecuteSimple("cat /etc/clover/REGION", 3000, true);
+ }
+ else
+ {
+ clovershell.ExecuteSimple("cryptsetup open /dev/nandb root-crypt --readonly --type plain --cipher aes-xts-plain --key-file /etc/key-file", 3000);
+ clovershell.ExecuteSimple("mkdir -p /var/squashfs-original", 3000, true);
+ clovershell.ExecuteSimple("mount /dev/mapper/root-crypt /var/squashfs-original", 3000, true);
+ board = clovershell.ExecuteSimple("cat /var/squashfs-original/etc/clover/boardtype", 3000, true);
+ region = clovershell.ExecuteSimple("cat /var/squashfs-original/etc/clover/REGION", 3000, true);
+ clovershell.ExecuteSimple("umount /var/squashfs-original", 3000, true);
+ clovershell.ExecuteSimple("rm -rf /var/squashfs-original", 3000, true);
+ clovershell.ExecuteSimple("cryptsetup close root-crypt", 3000, true);
+ }
+ Debug.WriteLine(string.Format("Detected board: {0}", board));
+ Debug.WriteLine(string.Format("Detected region: {0}", region));
+ switch (board)
+ {
+ default:
+ case "dp-nes":
+ case "dp-hvc":
+ switch (region)
+ {
+ case "EUR_USA":
+ return MainForm.ConsoleType.NES;
+ case "JPN":
+ return MainForm.ConsoleType.Famicom;
+ }
+ break;
+ case "dp-shvc":
+ switch (region)
+ {
+ case "USA":
+ case "EUR":
+ return MainForm.ConsoleType.SNES;
+ case "JPN":
+ return MainForm.ConsoleType.SuperFamicom;
+ }
+ break;
+ }
+ return MainForm.ConsoleType.Unknown;
+ }
+
public static Image TakeScreenshot()
{
var clovershell = MainForm.Clovershell;
@@ -1126,7 +1160,7 @@ namespace com.clusterrr.hakchi_gui
byte[] kernel;
if (!string.IsNullOrEmpty(Mod))
- kernel = CreatePatchedKernel();
+ kernel = CreatePatchedKernel(null, true);
else
kernel = File.ReadAllBytes(KernelDumpPath);
var size = CalcKernelSize(kernel);
@@ -1197,8 +1231,13 @@ namespace com.clusterrr.hakchi_gui
File.Copy(kernelPath ?? KernelDumpPath, tempKernelDump, true);
if (!ExecuteTool("unpackbootimg.exe", string.Format("-i \"{0}\" -o \"{1}\"", tempKernelDump, kernelDirectory)))
throw new Exception("Can't unpack kernel image");
- if (!ExecuteTool("lzop.exe", string.Format("-d \"{0}\" -o \"{1}\"",
- Path.Combine(kernelDirectory, "kernel.img-ramdisk.gz"), initramfs_cpio)))
+ string ramdiskGz = Path.Combine(kernelDirectory, "kernel.img-ramdisk.gz");
+ byte[] output;
+ if (ExecuteTool("xz.exe", string.Format("-dc \"{0}\"",
+ ramdiskGz), out output))
+ File.WriteAllBytes(initramfs_cpio, output);
+ else if (!ExecuteTool("lzop.exe", string.Format("-d \"{0}\" -o \"{1}\"",
+ ramdiskGz, initramfs_cpio)))
throw new Exception("Can't unpack ramdisk");
ExecuteTool("cpio.exe", string.Format("-imd --no-preserve-owner --quiet -I \"{0}\"",
@"..\initramfs.cpio"), ramfsDirectory);
@@ -1206,14 +1245,15 @@ namespace com.clusterrr.hakchi_gui
throw new Exception("Can't unpack ramdisk 2");
}
- private byte[] CreatePatchedKernel(string kernelPath = null)
+ private byte[] CreatePatchedKernel(string kernelPath = null, bool includeExtraBinaries = false)
{
SetStatus(Resources.BuildingCustom);
if (!File.Exists(Path.Combine(ramfsDirectory, "init")))
UnpackRamfs(kernelPath);
if (Directory.Exists(hakchiDirectory))
Directory.Delete(hakchiDirectory, true);
- NesMiniApplication.DirectoryCopy(Path.Combine(modsDirectory, Mod), ramfsDirectory, true);
+ NesMiniApplication.DirectoryCopy(Path.Combine(modsDirectory, Mod), ramfsDirectory, true,
+ includeExtraBinaries ? null : new string[] { "rsync", "usleep" }); // Remove huge files
var ramfsFiles = Directory.GetFiles(ramfsDirectory, "*.*", SearchOption.AllDirectories);
foreach (var file in ramfsFiles)
{
@@ -1269,9 +1309,18 @@ namespace com.clusterrr.hakchi_gui
var argKerneloff = File.ReadAllText(Path.Combine(kernelDirectory, "kernel.img-kerneloff")).Trim();
var argRamdiscoff = File.ReadAllText(Path.Combine(kernelDirectory, "kernel.img-ramdiskoff")).Trim();
var argTagsoff = File.ReadAllText(Path.Combine(kernelDirectory, "kernel.img-tagsoff")).Trim();
- if (!ExecuteTool("lzop.exe", string.Format("--best -f -o \"{0}\" \"{1}\"",
- ramdiskPatched, initramfs_cpioPatched)))
- throw new Exception("Can't repack ramdisk 2");
+ byte[] output;
+ if (ExecuteTool("xz.exe", string.Format("--check=crc32 --lzma2=dict=1MiB -c \"{0}\"",
+ initramfs_cpioPatched), out output))
+ {
+ File.WriteAllBytes(ramdiskPatched, output);
+ }
+ else
+ {
+ if (!ExecuteTool("lzop.exe", string.Format("--best -f -o \"{0}\" \"{1}\"",
+ ramdiskPatched, initramfs_cpioPatched)))
+ throw new Exception("Can't repack ramdisk 2");
+ }
if (!ExecuteTool("mkbootimg.exe", string.Format("--kernel \"{0}\" --ramdisk \"{1}\" --cmdline \"{2}\" --board \"{3}\" --base \"{4}\" --pagesize \"{5}\" --kernel_offset \"{6}\" --ramdisk_offset \"{7}\" --tags_offset \"{8}\" -o \"{9}\"",
Path.Combine(kernelDirectory, "kernel.img-zImage"), ramdiskPatched, argCmdline, argBoard, argBase, argPagesize, argKerneloff, argRamdiscoff, argTagsoff, kernelPatched)))
throw new Exception("Can't rebuild kernel");
@@ -1289,10 +1338,9 @@ namespace com.clusterrr.hakchi_gui
public List<NesMenuCollection> allMenus = new List<NesMenuCollection>();
public int TotalGames = 0;
public long TotalSize = 0;
- public long TransferSize = 0;
}
- private void AddMenu(NesMenuCollection menuCollection, Dictionary<string, string> originalGames, GamesTreeStats stats = null)
+ private void AddMenu(NesMenuCollection menuCollection, Dictionary<string, string> originalGames, GamesTreeStats stats = null, string syncPath = null)
{
if (stats == null)
stats = new GamesTreeStats();
@@ -1300,13 +1348,38 @@ namespace com.clusterrr.hakchi_gui
stats.allMenus.Add(menuCollection);
int menuIndex = stats.allMenus.IndexOf(menuCollection);
string targetDirectory;
- if (menuIndex == 0)
- targetDirectory = tempGamesDirectory;
- else
- targetDirectory = Path.Combine(tempGamesDirectory, string.Format("{0:D3}", menuIndex));
+ targetDirectory = Path.Combine(tempGamesDirectory, string.Format("{0:D3}", menuIndex));
foreach (var element in menuCollection)
{
- if (element is NesMiniApplication)
+ if (element is NesDefaultGame)
+ {
+ stats.TotalGames++;
+ var game = element as NesDefaultGame;
+ string desktopEntriesPath = Path.Combine(baseDirectoryInternal, "DesktopEntries");
+ var originalCode = game.Code;
+ var desktopFilePath = Path.Combine(desktopEntriesPath, $"{originalCode}.desktop");
+ var targetGamePath = Path.Combine(targetDirectory, originalCode);
+ Directory.CreateDirectory(targetGamePath);
+ if (exportGames) // Copy back to reduce repeative original games repair
+ {
+ var realTargetGamePath = Path.Combine(Path.Combine(Path.Combine(exportDirectory, SubConsoleDirectory), string.Format("{0:D3}", menuIndex)), originalCode);
+ if (Directory.Exists(realTargetGamePath))
+ {
+ if (!ExecuteTool("rsync.exe", $"-ac --delete \"{cygwinPath(realTargetGamePath)}\" \"{cygwinPath(targetDirectory)}\""))
+ throw new Exception("Can't rsync to USB drive");
+ }
+ }
+ Directory.CreateDirectory(Path.Combine(targetGamePath, "autoplay"));
+ if (ConfigIni.ConsoleType == MainForm.ConsoleType.NES || ConfigIni.ConsoleType == MainForm.ConsoleType.Famicom)
+ {
+ Directory.CreateDirectory(Path.Combine(targetGamePath, "pixelart"));
+ }
+ File.Copy(desktopFilePath, Path.Combine(targetGamePath, $"{originalCode}.desktop"), true);
+ var gameSize = NesMiniApplication.DirectorySize(targetGamePath);
+ stats.TotalSize += gameSize;
+ stats.TotalGames++;
+ }
+ else if (element is NesMiniApplication)
{
stats.TotalGames++;
var game = element as NesMiniApplication;
@@ -1314,7 +1387,6 @@ namespace com.clusterrr.hakchi_gui
Debug.WriteLine(string.Format("Processing {0} ('{1}'), size: {2}KB", game.Code, game.Name, gameSize / 1024));
var gameCopy = game.CopyTo(targetDirectory);
stats.TotalSize += gameSize;
- stats.TransferSize += gameSize;
stats.TotalGames++;
try
{
@@ -1353,25 +1425,24 @@ namespace com.clusterrr.hakchi_gui
var folderDir = Path.Combine(targetDirectory, folder.Code);
var folderSize = folder.Save(folderDir);
stats.TotalSize += folderSize;
- stats.TransferSize += folderSize;
}
if (element is NesDefaultGame)
{
var game = element as NesDefaultGame;
stats.TotalSize += game.Size;
- originalGames[game.Code] = menuIndex == 0 ? "." : string.Format("{0:D3}", menuIndex);
+ originalGames[game.Code] = string.Format("{0:D3}", menuIndex);
}
}
}
- private bool ExecuteTool(string tool, string args, string directory = null, bool external = false)
+ private bool ExecuteTool(string tool, string args, string directory = null, bool external = false, Action<string> onLineOutput = null)
{
byte[] output;
- return ExecuteTool(tool, args, out output, directory, external);
+ return ExecuteTool(tool, args, out output, directory, external, onLineOutput);
}
- private bool ExecuteTool(string tool, string args, out byte[] output, string directory = null, bool external = false)
+ private bool ExecuteTool(string tool, string args, out byte[] output, string directory = null, bool external = false, Action<string> onLineOutput = null)
{
var process = new Process();
var appDirectory = baseDirectoryInternal;
@@ -1391,11 +1462,38 @@ namespace com.clusterrr.hakchi_gui
Debug.WriteLine("Executing: " + fileName);
Debug.WriteLine("Arguments: " + args);
Debug.WriteLine("Directory: " + directory);
+ var outputStr = new StringBuilder();
+ var errorStr = new StringBuilder();
process.Start();
- string outputStr = process.StandardOutput.ReadToEnd();
- string errorStr = process.StandardError.ReadToEnd();
- process.WaitForExit();
- output = Encoding.GetEncoding(866).GetBytes(outputStr);
+ var line = new StringBuilder();
+ while (!process.HasExited || !process.StandardOutput.EndOfStream || !process.StandardError.EndOfStream)
+ {
+ while (!process.StandardOutput.EndOfStream)
+ {
+ var b = process.StandardOutput.Read();
+ if (b >= 0)
+ {
+ if ((char)b != '\n' && (char)b != '\r')
+ {
+ line.Append((char)b);
+ }
+ else
+ {
+ if (onLineOutput != null && line.Length > 0)
+ onLineOutput(line.ToString());
+ line.Length = 0;
+ }
+ outputStr.Append((char)b);
+ }
+ }
+ if (!process.StandardError.EndOfStream)
+ errorStr.Append(process.StandardError.ReadToEnd());
+ Thread.Sleep(100);
+ }
+ if (onLineOutput != null && line.Length > 0)
+ onLineOutput(line.ToString());
+
+ output = Encoding.GetEncoding(866).GetBytes(outputStr.ToString());
Debug.WriteLineIf(outputStr.Length > 0 && outputStr.Length < 300, "Output:\r\n" + outputStr);
Debug.WriteLineIf(errorStr.Length > 0, "Errors:\r\n" + errorStr);
Debug.WriteLine("Exit code: " + process.ExitCode);
@@ -1424,7 +1522,7 @@ namespace com.clusterrr.hakchi_gui
bool YesForAllPatches = false;
- public ICollection<NesMiniApplication> AddGames(IEnumerable<string> files, Form parentForm = null)
+ public ICollection<NesMiniApplication> AddGames(IEnumerable<string> files)
{
var apps = new List<NesMiniApplication>();
addedApplications = null;
@@ -1643,5 +1741,10 @@ namespace com.clusterrr.hakchi_gui
TaskbarProgress.SetValue(this, 0, 1);
}
}
+
+ string cygwinPath(string path)
+ {
+ return ("/cygdrive/" + path.Replace("\\", "/").Replace(":/", "/"));
+ }
}
}
diff --git a/data/zImage b/data/zImage
index b273922d..e38db7d5 100644
--- a/data/zImage
+++ b/data/zImage
Binary files differ
diff --git a/hakchi_gui.csproj b/hakchi_gui.csproj
index 3b801600..044396be 100644
--- a/hakchi_gui.csproj
+++ b/hakchi_gui.csproj
@@ -31,8 +31,8 @@
<PublisherName>Alexey %27Cluster%27 Avdyukhin</PublisherName>
<CreateWebPageOnPublish>true</CreateWebPageOnPublish>
<WebPage>index.html</WebPage>
- <ApplicationRevision>72</ApplicationRevision>
- <ApplicationVersion>2.0.21.72</ApplicationVersion>
+ <ApplicationRevision>1</ApplicationRevision>
+ <ApplicationVersion>2.0.30.1</ApplicationVersion>
<UseApplicationTrust>false</UseApplicationTrust>
<CreateDesktopShortcut>true</CreateDesktopShortcut>
<PublishWizardCompleted>true</PublishWizardCompleted>
@@ -520,6 +520,15 @@
<Content Include="folder_images\cps.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
+ <Content Include="tools\cygpopt-0.dll">
+ <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+ </Content>
+ <Content Include="tools\rsync.exe">
+ <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+ </Content>
+ <Content Include="tools\xz.exe">
+ <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+ </Content>
<Content Include="user_mods\extra_space.hmod\readme.txt">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
@@ -1712,9 +1721,6 @@
<Content Include="LICENSE">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
- <Content Include="mods\hmods\clovershell.hmod">
- <CopyToOutputDirectory>Always</CopyToOutputDirectory>
- </Content>
<Content Include="mods\hmods\copyleft.hmod">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
@@ -2361,6 +2367,24 @@
<Content Include="data\zImage">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
+ <Content Include="mods\hmods\ntfs-3g.hmod">
+ <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+ </Content>
+ <Content Include="mods\hmods\clovershell.hmod">
+ <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+ </Content>
+ <Content Include="mods\hmods\modules-3.4.112.madmonkey.hmod">
+ <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+ </Content>
+ <Content Include="mods\mod_hakchi\etc\filesystems">
+ <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+ </Content>
+ <Content Include="mods\mod_hakchi\hakchi\rootfs\etc\pleasewait.fb">
+ <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+ </Content>
+ <Content Include="mods\mod_hakchi\hakchi\rootfs\etc\preinit.d\p0000_version">
+ <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+ </Content>
<None Include="Properties\app.manifest" />
<Content Include="user_mods\snes_custom_filters.hmod\canoe-custom-filters">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
diff --git a/mods/hmods/core-modules.hmod b/mods/hmods/core-modules.hmod
deleted file mode 100644
index ca8247a1..00000000
--- a/mods/hmods/core-modules.hmod
+++ /dev/null
Binary files differ
diff --git a/mods/hmods/modules-3.4.112.madmonkey.hmod b/mods/hmods/modules-3.4.112.madmonkey.hmod
new file mode 100644
index 00000000..8a023886
--- /dev/null
+++ b/mods/hmods/modules-3.4.112.madmonkey.hmod
Binary files differ
diff --git a/mods/hmods/ntfs-3g.hmod b/mods/hmods/ntfs-3g.hmod
new file mode 100644
index 00000000..558d5b58
--- /dev/null
+++ b/mods/hmods/ntfs-3g.hmod
Binary files differ
diff --git a/mods/mod_hakchi/bin/busybox b/mods/mod_hakchi/bin/busybox
index 0cf516b5..f2a314ff 100755
--- a/mods/mod_hakchi/bin/busybox
+++ b/mods/mod_hakchi/bin/busybox
Binary files differ
diff --git a/mods/mod_hakchi/etc/filesystems b/mods/mod_hakchi/etc/filesystems
new file mode 100644
index 00000000..2b8cb984
--- /dev/null
+++ b/mods/mod_hakchi/etc/filesystems
@@ -0,0 +1,37 @@
+nodev sysfs
+nodev rootfs
+nodev bdev
+nodev proc
+nodev tmpfs
+nodev devtmpfs
+nodev binfmt_misc
+nodev sockfs
+nodev usbfs
+nodev pipefs
+nodev anon_inodefs
+nodev rpc_pipefs
+nodev configfs
+nodev devpts
+ ext3
+ ext2
+ ext4
+ cramfs
+ squashfs
+nodev ramfs
+ vfat
+ msdos
+ iso9660
+nodev nfs
+nodev nfs4
+nodev cifs
+nodev autofs
+ fuseblk
+nodev fuse
+nodev fusectl
+nodev overlayfs
+ udf
+nodev mqueue
+nodev functionfs
+nodev oprofilefs
+ ntfs
+ exfat
diff --git a/mods/mod_hakchi/hakchi/config b/mods/mod_hakchi/hakchi/config
index 6e90132e..6cefdfe6 100644
--- a/mods/mod_hakchi/hakchi/config
+++ b/mods/mod_hakchi/hakchi/config
@@ -1,5 +1,4 @@
-local cf_backup_dummy='n'
-local cf_backup='n'
-local cf_backup_nandc='n'
-local cf_shutdown='n'
-local cf_usb='y'
+export cf_backup_dummy='n'
+export cf_backup='n'
+export cf_backup_nandc='n'
+export cf_shutdown='r'
diff --git a/mods/mod_hakchi/hakchi/init b/mods/mod_hakchi/hakchi/init
index 50fc66a4..0e9a5db0 100644
--- a/mods/mod_hakchi/hakchi/init
+++ b/mods/mod_hakchi/hakchi/init
@@ -6,6 +6,8 @@ init(){
export modpath="/$modname"
export mountpoint="/newroot"
export temppath="/tmp"
+ export bootVersion="1.0.1"
+ echo "$modname init script version: $bootVersion"
/bin/busybox --install -s /bin/
mkdir -p "$temppath"
@@ -18,15 +20,15 @@ init(){
source "$modpath/script/base"
if [ -d "$modpath/transfer" ]; then
- export cf_usb='n'
source "$modpath/script/transfer"
else
mount_base
fi
if [ -f "$preinit" ]; then
+ export preinit
PATH="$rootfs/sbin:$rootfs/usr/sbin:$rootfs/bin:$rootfs/usr/bin:$PATH"
- "$rootfs/bin/busybox" sh -c "source "$preinit.d/b0000_defines" && source "$preinit" && preinit"
+ "$rootfs/bin/busybox" sh -c "source "$preinit" && preinit"
else
umount_base
fi
diff --git a/mods/mod_hakchi/hakchi/rootfs/bin/chmenu b/mods/mod_hakchi/hakchi/rootfs/bin/chmenu
index 3ad32b84..921709ca 100755
--- a/mods/mod_hakchi/hakchi/rootfs/bin/chmenu
+++ b/mods/mod_hakchi/hakchi/rootfs/bin/chmenu
@@ -2,34 +2,27 @@
source /etc/preinit
script_init
-state_file="$installpath/menu"
+state_path="/var/saves/$modname"
+state_file="$state_path/menu"
[ -z "$1" ] && exit 1
[ -f "$state_file" ] && prev_code="$(cat "$state_file")" || prev_code="000"
[ "$1" == "$prev_code" ] && exit 1
echo "Switching to menu $1"
-if [ "$1" == "000" ]; then
- targetpath="$rootfs$gamepath"
-else
- targetpath="$rootfs$gamepath/$1"
+gameStorage="$(findGameStorage)"
+targetpath="$gameStorage/$1"
+if ! containsGames "$targetpath"; then
+ [ "$1" == "000" ] || exit 1
+ targetpath="$gameStorage"
+ containsGames "$targetpath" || exit 1
fi
-[ -d "$targetpath" ] || exit 1
+mkdir -p "$state_path"
echo "$1" > "$state_file"
echo "New directory: $targetpath"
-
-if [ "$1" != "000" ]; then
- if [ -f "$rootfs$gamepath/title.fnt" ] && [ ! -f "$targetpath/title.fnt" ]; then
- ln -s "$rootfs$gamepath/title.fnt" "$targetpath/title.fnt"
- fi
- if [ -f "$rootfs$gamepath/copyright.fnt" ] && [ ! -f "$targetpath/copyright.fnt" ]; then
- ln -s "$rootfs$gamepath/copyright.fnt" "$targetpath/copyright.fnt"
- fi
-fi
-
uistop
-overmount_games
+overmount_games "$1"
sleep 1
touch "/var/startmcp.flag"
diff --git a/mods/mod_hakchi/hakchi/rootfs/bin/hakchi b/mods/mod_hakchi/hakchi/rootfs/bin/hakchi
index e3493b82..29caa50c 100755
--- a/mods/mod_hakchi/hakchi/rootfs/bin/hakchi
+++ b/mods/mod_hakchi/hakchi/rootfs/bin/hakchi
@@ -4,12 +4,44 @@ script_init
hakchi(){
[ "$1" == "hakchi" ] && shift
- if type "$1" | grep -q '^.* is a shell function$' 2>/dev/null; then
- ${1+"$@"}
- else
- echo "no such function: $@"
- return 1
- fi
+ case "$1" in
+ set|unset)
+ if echo "$2" | grep -qEe '^cfg_'; then
+ [ "$1" == "set" ] && eval "$2="\${3}"" || unset "$2"
+ return 0
+ else
+ echo "only cfg_ variables are supported with hakchi $1"
+ fi
+ return 1
+ ;;
+ get)
+ eval "echo "\$$2""
+ return 0
+ ;;
+ eval)
+ if [ -z "$2" ]; then
+ source /dev/stdin
+ else
+ eval "$2"
+ fi
+ return $?
+ ;;
+ source)
+ source "$2"
+ return $?
+ ;;
+ *)
+ if type "$1" | grep -q '^.* is a shell function$' 2>/dev/null; then
+ ${1+"$@"}
+ else
+ echo "no such function: $@"
+ return 1
+ fi
+ ;;
+ esac
}
hakchi "$(basename "$0")" ${1+"$@"}
+exit_code=$?
+save_config
+exit $exit_code
diff --git a/mods/mod_hakchi/hakchi/rootfs/bin/hsqs b/mods/mod_hakchi/hakchi/rootfs/bin/hsqs
index 800c4567..041654fc 100755
--- a/mods/mod_hakchi/hakchi/rootfs/bin/hsqs
+++ b/mods/mod_hakchi/hakchi/rootfs/bin/hsqs
@@ -6,7 +6,7 @@ echo "current firmware: $(currentFirmware)"
printSoftwareInfo
firmware="$1"
-if [ "$firmware" != "_nand_" ]; then
+if [ "$firmware" != "auto" ] && [ "$firmware" != "_nand_" ]; then
firmware="$(echo "$firmware" | sed -re 's/^\/usr\/share\/games\/(nes\/kachikachi\/)?/\/var\/games\//')"
firmware="$(readlink -f "$firmware")"
checkFirmware "$firmware" || exit 1
@@ -17,6 +17,7 @@ cfg_firmware="$firmware"
save_config
[ "$(currentFirmware)" == "$firmware" ] && exit 0
+[ "$(currentFirmware)" == "auto" ] && exit 0 #?
echo "changing firmware to: $firmware"
reboot
diff --git a/mods/mod_hakchi/hakchi/rootfs/bin/remote-exec b/mods/mod_hakchi/hakchi/rootfs/bin/remote-exec
index a7e62442..2e015937 100755
--- a/mods/mod_hakchi/hakchi/rootfs/bin/remote-exec
+++ b/mods/mod_hakchi/hakchi/rootfs/bin/remote-exec
@@ -13,7 +13,7 @@ while true; do
fi
if [ -f "$exec_flag" ]; then
usleep 100000
- source "$exec_flag"
+ sh "$exec_flag"
rm -f "$exec_flag"
fi
usleep 200000
diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/hakchi.png b/mods/mod_hakchi/hakchi/rootfs/etc/hakchi.png
new file mode 100644
index 00000000..f18bc87f
--- /dev/null
+++ b/mods/mod_hakchi/hakchi/rootfs/etc/hakchi.png
Binary files differ
diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/inittab b/mods/mod_hakchi/hakchi/rootfs/etc/inittab
index 1de7da21..216aabcc 100644
--- a/mods/mod_hakchi/hakchi/rootfs/etc/inittab
+++ b/mods/mod_hakchi/hakchi/rootfs/etc/inittab
@@ -1,5 +1,4 @@
-null::sysinit:/bin/mount -t proc proc /proc
-null::sysinit:/bin/mount -t usbfs none /proc/bus/usb
+null::sysinit:/bin/mount -t usbfs usbfs /proc/bus/usb
null::sysinit:/bin/mkdir -p /dev/pts /dev/shm
null::sysinit:/bin/mount -a
null::sysinit:/bin/mkdir -p /var/cache /var/lock /var/log /var/spool
diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/pleasewait.fb b/mods/mod_hakchi/hakchi/rootfs/etc/pleasewait.fb
new file mode 100644
index 00000000..2826ef40
--- /dev/null
+++ b/mods/mod_hakchi/hakchi/rootfs/etc/pleasewait.fb
Binary files differ
diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/pleasewait.png b/mods/mod_hakchi/hakchi/rootfs/etc/pleasewait.png
new file mode 100644
index 00000000..229e0fd3
--- /dev/null
+++ b/mods/mod_hakchi/hakchi/rootfs/etc/pleasewait.png
Binary files differ
diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0000_defines b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0000_defines
index 684054df..c774d8c6 100644
--- a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0000_defines
+++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0000_defines
@@ -3,11 +3,13 @@ modpath="/$modname"
#mountpoint="/newroot"
installpath="$mountpoint/var/lib/$modname"
firmwarepath="$installpath/firmware"
+extfirmwarepath="$mountpoint/media/$modname/firmware"
rootfs="$installpath/rootfs"
-squashfs="$installpath/squashfs"
+squashfs="$mountpoint/var/squashfs"
preinit="$rootfs/etc/preinit"
preinitpath="$preinit.d"
sftype=""
sfregion=""
gamepath=""
+profilepath="/var/lib/clover/profiles/0"
temppath="/tmp"
diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0010_functions b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0010_functions
index 7ec99650..ec568dc8 100644
--- a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0010_functions
+++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0010_functions
@@ -75,7 +75,10 @@ remount_root(){
mount_move l media
mount_move l var
- umount "$mountpoint"
+ stopTask decodepng
+ stopTask aplay
+ umount "$mountpoint" || (mkdir -p "/var/fuckup" && mount --move "$mountpoint" "/var/fuckup")
+
local loopfile="/var${1##$mountpoint/var}"
[ -f "$loopfile" ] || loopfile="/media${1##$mountpoint/media}"
if ! mount -o loop,ro,noatime "$loopfile" "$mountpoint"; then
@@ -97,7 +100,7 @@ checkFirmware(){
}
currentFirmware(){
- local firmware="$(losetup | awk '{print $3'})"
+ local firmware="$(losetup -a | awk '{print $3'})"
if ! [ -z "$firmware" ]; then
echo "$firmware"
return 0
@@ -109,14 +112,28 @@ currentFirmware(){
return 1
}
+overmountModules(){
+ if [ ! -d "$mountpoint/lib/modules/$(uname -r)" ]; then
+ if [ -d "$rootfs/lib/modules/$(uname -r)" ]; then
+ overmount "/lib/modules"
+ else
+ echo "no modules for loaded kernel $(uname -r)"
+ fi
+ fi
+}
+
loadFirmware(){
[ -z "$(mount | grep -F loop0)" ] || return 1
local firmware="$mountpoint$cfg_firmware"
if ! checkFirmware "$firmware"; then
[ "$cfg_firmware" == "auto" ] || return 0
- [ -d "$firmwarepath" ] || return 0
- firmware="$(find "$firmwarepath" -type f -name "*.hsqs" | sort | head -n 1)"
+ [ -d "$extfirmwarepath" ] && \
+ firmware="$(find "$extfirmwarepath" -type f -name "*.hsqs" | sort | head -n1)"
+ if ! checkFirmware "$firmware"; then
+ [ -d "$firmwarepath" ] && \
+ firmware="$(find "$firmwarepath" -type f -name "*.hsqs" | sort | head -n1)"
+ fi
fi
checkFirmware "$firmware" || return 0
@@ -125,13 +142,7 @@ loadFirmware(){
remount_root "$firmware"
cryptsetup close root-crypt
mountSquash
- if [ ! -d "$mountpoint/lib/modules/$(uname -r)" ]; then
- if [ -d "$rootfs/lib/modules/$(uname -r)" ]; then
- overmount "/lib/modules"
- else
- echo "no modules for loaded kernel $(uname -r)"
- fi
- fi
+ overmountModules
}
shutdown(){
@@ -181,6 +192,8 @@ restore(){
mount_bind(){
if mountpoint -q "$2"; then
umount "$2" || umount -f "$2"
+ else
+ umount "$2" 2>/dev/null
fi
mount -o bind "$1" "$2"
}
@@ -205,7 +218,7 @@ containsGames(){
}
linkGames(){
- local games="$mountpoint/media/$modname/games${1##$rootfs$gamepath}"
+ local games="$mountpoint/media/$modname/games${1##$installpath/games}"
[ -d "$games" ] || games="$installpath/games${1##$rootfs$gamepath}"
[ -d "$games" ] || games="$1"
games="${games##$mountpoint}"
@@ -221,7 +234,7 @@ softwareCheck(){
[ "$(cat "$mountpoint/etc/clover/REGION")" == "JPN" ] && sfregion="jpn"
[ "$(cat "$mountpoint/etc/clover/REGION")" == "EUR" ] && sfregion="eur"
- local feck="$mountpoint/var/lib/clover/profiles/0/home-menu/save/system-save.json"
+ local feck="$mountpoint$profilepath/home-menu/save/system-save.json"
if [ "$sftype" == "snes" ]; then
gamepath="/usr/share/games"
[ -f "$feck" ] && mv -f "$feck" "$feck.nes"
@@ -231,31 +244,35 @@ softwareCheck(){
[ -d "$feck" ] && rm -rf "$feck.snes" && mv "$feck" "$feck.snes"
[ -f "$feck.nes" ] && mv -f "$feck.nes" "$feck"
fi
-
+
+ mkdir -p "$mountpoint$profilepath/$modname"
+
rm -f "$mountpoint/var/saves"
- ln -s "/var/lib/clover/profiles/0" "$mountpoint/var/saves"
+ ln -s "$profilepath" "$mountpoint/var/saves"
}
repair_fonts(){
if [ "$sftype" == "nes" ]; then
mkdir -p "$1" || return 1
- [ ! -f "$1/title.fnt" ] && (cp $rootfs$gamepath/title.fnt "$1" || cp $squashfs$gamepath/title.fnt "$1")
- [ ! -f "$1/copyright.fnt" ] && (cp $rootfs$gamepath/copyright.fnt "$1" || cp $squashfs$gamepath/copyright.fnt "$1")
+ [ ! -f "$1/title.fnt" ] && (copy "$rootfs$gamepath/title.fnt" "$1/" || copy "$squashfs$gamepath/title.fnt" "$1/")
+ [ ! -f "$1/copyright.fnt" ] && (copy "$rootfs$gamepath/copyright.fnt" "$1/" || copy "$squashfs$gamepath/copyright.fnt" "$1/")
fi
}
repair_games(){
[ -w "$1" ] || return 0
+ [ -f "$1/.repair.flag" ] || return 0
+ cat "$rootfs/etc/pleasewait.fb" | gunzip -c - > "/dev/fb0"
local usesymlink=''
- ln -s / "$1/symlinktest" && rm "$1/symlinktest" && usesymlink='y'
-
+ ln -s / "$1/symlinktest" 2>/dev/null && rm -f "$1/symlinktest" && usesymlink='y'
+
ls -1 "$squashfs$gamepath" | grep CLV- | while read code
do
- local gamedir="$1/$code"
+ local gamedir=$(find "$1" -name $code -type d)
local squashgamedir="$squashfs$gamepath/$code"
-
+
[ -d "$gamedir" ] || continue
-
+
if [ ! -f "$gamedir/$code.desktop" ]; then
cp "$squashgamedir/$code.desktop" "$gamedir/"
[ "$sftype" == "nes" ] && \
@@ -263,10 +280,10 @@ repair_games(){
[ "$sftype" == "snes" ] && \
sed -i -e 's#/usr/bin/clover-canoe-shvc#/bin/clover-canoe-shvc-wr#g' "$gamedir/$code.desktop"
fi
-
- [ -d "$gamedir/autoplay/" ] && ([ "$(ls -A "$gamedir/autoplay/")" ] || rm -r "$gamedir/autoplay/")
- [ -d "$gamedir/pixelart/" ] && ([ "$(ls -A "$gamedir/pixelart/")" ] || rm -r "$gamedir/pixelart/")
-
+
+ [ -d "$gamedir/autoplay/" ] && ([ "$(ls -A "$gamedir/autoplay/")" ] || rm -rf "$gamedir/autoplay/")
+ [ -d "$gamedir/pixelart/" ] && ([ "$(ls -A "$gamedir/pixelart/")" ] || rm -rf "$gamedir/pixelart/")
+
find "$squashgamedir" -maxdepth 1 | sed -n '1!p' | while read squashfile
do
if [ "$usesymlink" == "y" ]; then
@@ -276,19 +293,61 @@ repair_games(){
fi
done
done
- sync
- return 0
+
+ ls -1 "$1" | while read f; do repair_fonts "$1/$f"; done
+
+ rm -f "$1/.repair.flag" && sync && reboot
+}
+
+checkGamepath(){
+ containsGames "$1" && echo "$1" && return 0
+ containsGames "$1/000" && echo "$1" && return 0
+ return 1
+}
+
+checkPath(){
+ [ -d "$1" ] && echo "$1" && return 0
+ return 1
+}
+
+findGameSyncStorage(){
+ checkPath "$mountpoint/media/hakchi/games" && return 0
+ mkdir -p "$installpath/games"
+ checkPath "$installpath/games" && return 0
+ return 1
+}
+
+findGameStorage(){
+ checkGamepath "$mountpoint/media/hakchi/games/$sftype-$sfregion" && return 0
+ checkGamepath "$mountpoint/media/hakchi/games/$sftype" && return 0
+ checkGamepath "$mountpoint/media/hakchi/games" && return 0
+
+ checkGamepath "$installpath/games/$sftype-$sfregion" && return 0
+ checkGamepath "$installpath/games/$sftype" && return 0
+ checkGamepath "$installpath/games" && return 0
+ return 1
}
overmount_games(){
- local menu_code="000"
- [ -f "$installpath/menu" ] && menu_code="$(cat "$installpath/menu")"
- containsGames "$rootfs$gamepath/$menu_code" || menu_code=""
+ local gameStorage="$(findGameStorage)" || return 0
+ local state_path="$mountpoint$profilepath/$modname"
+ local state_file="$state_path/menu"
+ local menu_code="$1"
+ [ -z "$1" ] && menu_code="000"
+ [ -z "$1" ] && [ -f "$state_file" ] && menu_code="$(cat "$state_file")"
+ if ! containsGames "$gameStorage/$menu_code"; then
+ menu_code="000"
+ containsGames "$gameStorage/$menu_code" || menu_code=""
+ fi
echo "menu code: $menu_code"
- if containsGames "$rootfs$gamepath/$menu_code"; then
- overmount "$gamepath/$menu_code" "$gamepath" && repair_games "$rootfs$gamepath/$menu_code" && linkGames "$rootfs$gamepath/$menu_code" && return 0
+ if containsGames "$gameStorage/$menu_code"; then
+ mount_bind "$gameStorage/$menu_code" "$mountpoint/$gamepath" && \
+ repair_games "$gameStorage"
+ repair_fonts "$gameStorage/$menu_code" && \
+ linkGames "$gameStorage/$menu_code" && \
+ return 0
else
- echo "no romz found at: $rootfs$gamepath/$menu_code"
+ echo "no romz found at: $gameStorage/$menu_code"
fi
linkGames "$gamepath"
return 1
@@ -330,15 +389,86 @@ printSoftwareInfo(){
echo "region=$sfregion"
}
+stopTask(){
+ local tokill="false"
+ if [ "$1" = "-f" ]; then
+ tokill="true"
+ shift
+ fi
+ local pid="$(pidof "$1")"
+ [ -z "$pid" ] && return 0
+ "$tokill" && kill "$pid"
+ wait "$pid"
+}
+
+waitTask(){
+ local A="stopTask ${1+"$@"}"
+ trap "$A" EXIT
+}
+
showImage(){
- image="$(eval echo "$1")"
+ local image="$(eval echo "$1")"
[ -f "$image" ] || image="$rootfs$1"
[ -f "$image" ] || image="$squashfs$1"
[ -f "$image" ] || return 1
decodepng "$image" > "/dev/fb0" &
+ waitTask decodepng
+ return 0
+}
+
+playSound(){
+ local wavfile="$(eval echo "$1")"
+ [ -f "$wavfile" ] || wavfile="$rootfs$1"
+ [ -f "$wavfile" ] || wavfile="$squashfs$1"
+ [ -f "$wavfile" ] || return 1
+ aplay -q "$wavfile" &
+ waitTask aplay
return 0
}
hwmon(){
cat "/sys/devices/virtual/hwmon/hwmon1/temp1_input"
}
+
+usedBlockSpace(){
+ local path="$1"
+ [ -e "$path" ] || path="$rootfs"
+ local line="$(df -k "$path" | tail -n1)"
+ local used="$(echo "$line" | awk '{print $3}')"
+ local available="$(echo "$line" | awk '{print $4}')"
+ local total="$(($used+$available))"
+ echo "$used $total"
+}
+
+freeBlockSpace(){
+ local path="$1"
+ [ -e "$path" ] || path="$rootfs"
+ df -k "$path" | tail -n1 | awk '{print $4}'
+}
+
+usedSpace(){
+# Warning: SLOW
+ local path="$1"
+ [ -e "$path" ] || path="$rootfs"
+ du -ksx "$path" | awk '{print $1}'
+}
+
+usedBy(){
+ case "$1" in
+ games)
+ usedSpace "$(findGameSyncStorage)"
+ ;;
+ saves)
+ usedSpace "$profilepath"
+ ;;
+ mods)
+ usedSpace "$rootfs"
+ ;;
+ firmware)
+ usedSpace "$firmwarepath"
+ ;;
+ *)
+ echo "Usage: usedBy {games|saves|mods|firmware}"
+ return 1
+ esac
+}
diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0020_backup b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0020_backup
index 8377e1d7..6819ccdd 100644
--- a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0020_backup
+++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0020_backup
@@ -14,7 +14,7 @@ backup_nandb(){
if [ ! -f "$nandb_filename" ]; then
echo "backup $nandb_filename"
dd if=/dev/mapper/root-crypt bs=4k \
- count=$((($(hexdump -e '1/4 "%u"' -s $((0x28)) -n 4 /dev/mapper/root-crypt)+0xfff)/0x1000)) \
+ count="$((($(hexdump -e '1/4 "%u"' -s $((0x28)) -n 4 /dev/mapper/root-crypt)+0xfff)/0x1000))" \
> "$nandb_filename" && \
md5sum "$nandb_filename" > "$nandb_filename.md5"
fi
diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0030_package b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0030_package
index 3c3894f3..7697c6c7 100644
--- a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0030_package
+++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0030_package
@@ -37,17 +37,23 @@ pack_upath(){
}
pack_install(){
- echo "installing $(basename "$1" .hmod)..."
- if [ -f "$1" ]; then
+ local packFile="$(readlink -f "$1")"
+ local packName="$(basename "$1" .hmod)"
+ echo "installing $packName..."
+ if [ -f "$packFile" ]; then
local transferpath="$temppath/pack"
rm -rf "$transferpath"
mkdir -p "$transferpath"
- cd "$transferpath" && tar -xzf "$1"
+ cd "$transferpath" && tar -xzf "$packFile"
else
- local transferpath="$1"
+ local transferpath="$packFile"
fi
transfer_path "$transferpath"
- echo "creating uninstall for $(basename "$1" .hmod)..."
+ if grep -xqF "no-uninstall" "$transferpath/uninstall"; then
+ echo "package $packName installed"
+ return 0
+ fi
+ echo "creating uninstall for $packName..."
echo >> "$transferpath/uninstall"
echo "# auto-generated" >> "$transferpath/uninstall"
cd "$transferpath"
@@ -56,7 +62,7 @@ pack_install(){
find . -depth -mindepth 1 -type d -exec echo rmdir \"\$rootfs/{}\" + >> "$transferpath/uninstall"
[ $(stat -c%s "$transferpath/uninstall") -gt 8 ] || rm -f "$transferpath/uninstall"
cd /
- local unfile="$(pack_upath "$1")"
+ local unfile="$(pack_upath "$packFile")"
if [ -f "$transferpath/uninstall" ]; then
dos2unix -u "$transferpath/uninstall"
sed -i "s#rmdir #rmdir --ignore-fail-on-non-empty #" "$transferpath/uninstall"
@@ -65,7 +71,7 @@ pack_install(){
else
rm -f "$unfile"
fi
- echo "package $(basename "$1" .hmod) installed"
+ echo "package $packName installed"
}
pack_list(){
@@ -84,10 +90,11 @@ pack_uninstall(){
else
local unfile="$(pack_upath "$1")"
if [ -f "$unfile" ]; then
- echo "uninstalling $(basename "$1" .hmod)..."
+ local packName="$(basename "$1" .hmod)"
+ echo "uninstalling $packName..."
cd "$rootfs"
transfer_file "$unfile"
- echo "package $(basename "$1" .hmod) uninstalled"
+ echo "package $packName uninstalled"
fi
fi
cd /
diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0040_usb b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0040_usb
index 1c05a523..3abecd6f 100644
--- a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0040_usb
+++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0040_usb
@@ -1,79 +1,125 @@
-disableUsbDevice(){
- #disable usb
- echo 0 > "/sys/devices/sunxi_usb/usb_role"
-}
-
-switchToUsbDevice(){
- disableUsbDevice
-
- # enable device mode
- echo 2 > "/sys/devices/sunxi_usb/usb_role"
-
- # make sure the usb gadgets are disabled
- echo 0 > "/sys/devices/virtual/android_usb/android0/enable"
-}
-
-switchToUsbHost(){
- # make sure the usb gadgets are disabled
- echo 0 > "/sys/devices/virtual/android_usb/android0/enable"
-
- disableUsbDevice
-
- # enable host mode
- echo 1 > "/sys/devices/sunxi_usb/usb_role"
-}
-
-checkUsbStorage(){
- local disk="/dev/sda1"
-
- local timeout=5
- while [ $timeout -gt 0 ] && ! [ -b "$disk" ]; do
- echo "waiting for media $timeout"
- let timeout=timeout-1
- sleep 1
- done
-
- [ -b "$disk" ] || return 1
-
- local ro="defaults,nosuid,nodev,noatime,ro"
- local rw="defaults,nosuid,nodev,noatime,rw"
- mount -o $ro "$disk" "$mountpoint/media" || return 1
-
- local saves="$modname/saves"
-
- if [ -d "$mountpoint/media/$saves" ] || [ -d "$mountpoint/media/$modname/transfer" ] || [ "$cfg_usb_rw" == "y" ]; then
- mount -o remount,$rw "$disk"
- fi
- [ -d "$mountpoint/media/$saves" ] && mount_bind "$mountpoint/media/$saves" "$mountpoint/var/lib/clover/profiles/0"
-
- local bootlogo0="boot.png"
- local bootlogo1="$mountpoint/media/$modname/$bootlogo0"
- local bootlogo2="$rootfs/etc/$bootlogo0"
- if [ -f "$bootlogo1" ]; then
- rsync -ac "$bootlogo1" "$bootlogo2"
- showImage "$bootlogo2"
- cfg_boot_logo=''
- else
- [ -f "$bootlogo2" ] && rm "$bootlogo2" && source "$preinit.d/p7010_bootlogo"
- fi
-
- return 0
-}
-
-checkUsbGamepath(){
- local disk="/dev/sda1"
- [ -b "$disk" ] || return 1
-
- local games="$modname/games"
- if containsGames "$mountpoint/media/$games"; then
- if ! mkdir -p "$rootfs$gamepath"; then
- rm -rf "$rootfs$gamepath"
- mkdir -p "$rootfs$gamepath" || return 1
- fi
- mount_bind "$mountpoint/media/$games" "$rootfs$gamepath"
- return 0
- else
- echo "no romz found at: $disk:/$games"
- return 1
- fi
-}
+disableUsbDevice(){
+ #disable usb
+ [ -f "/sys/devices/sunxi_usb/usb_role" ] || return 1
+ echo 0 > "/sys/devices/sunxi_usb/usb_role"
+}
+
+switchToUsbDevice(){
+ [ -f "/sys/devices/sunxi_usb/usb_role" ] || return 1
+ disableUsbDevice
+ # enable device mode
+ echo 2 > "/sys/devices/sunxi_usb/usb_role"
+ # make sure the usb gadgets are disabled
+ echo 0 > "/sys/devices/virtual/android_usb/android0/enable"
+}
+
+switchToUsbHost(){
+ [ -f "/sys/devices/sunxi_usb/usb_role" ] || return 1
+ # make sure the usb gadgets are disabled
+ [ -f "/sys/devices/virtual/android_usb/android0/enable" ] && \
+ echo 0 > "/sys/devices/virtual/android_usb/android0/enable"
+ disableUsbDevice
+ # enable host mode
+ echo 1 > "/sys/devices/sunxi_usb/usb_role"
+}
+
+getUsbStorageIds(){
+ find "/dev/bus/usb" -type c | while read device
+ do
+ hexdump -n 1 -s 32 "$device" -C | grep -e '^00000020 08' && echo "$device"
+ done
+}
+
+waitForStorageDevice(){
+ local blockDevice="$1"
+ [ -z "$timeout" ] && local timeout=5
+ while [ $timeout -gt 0 ] && ! [ -b "$blockDevice" ]; do
+ echo "waiting for $blockDevice $timeout"
+ let timeout=timeout-1
+ sleep 1
+ done
+ [ -b "$blockDevice" ]
+}
+
+waitForUsbDevice(){
+ [ -z "$(getUsbStorageIds)" ] && return 1
+ waitForStorageDevice ${1+"$@"}
+}
+
+waitForMmcDevice(){
+ [ -f "/key-file" ] && return 1
+ waitForStorageDevice ${1+"$@"}
+}
+
+checkStorageDevice(){
+ local blockDevice="$1"
+ [ -b "$blockDevice" ] || return 1
+
+ local ro="defaults,nosuid,nodev,noatime,ro"
+ local rw="defaults,nosuid,nodev,noatime,rw"
+ local saves="$modname/saves"
+
+ if ! [ "$cfg_usb_rw" == "y" ]; then
+ mount -o $ro "$blockDevice" "$mountpoint/media" || return 1
+ fi
+
+ local need_repair=""
+ [ -d "$mountpoint/media/$games" ] && ! [ -z "$(find $mountpoint/media/$games -name .repair.flag -maxdepth 2)" ] && need_repair=y
+
+ if [ -d "$mountpoint/media/$saves" ] || [ -d "$mountpoint/media/$modname/transfer" ] || [ "$cfg_usb_rw" == "y" ] || [ "$need_repair" == "y" ]; then
+ umount "$mountpoint/media" 2>/dev/null
+ mount -o $rw "$blockDevice" "$mountpoint/media" || return 1
+ fi
+
+ if ! [ -d "$mountpoint/media/$modname" ]; then
+ umount "$mountpoint/media"
+ return 1
+ fi
+
+ [ -d "$mountpoint/media/$saves" ] && mount_bind "$mountpoint/media/$saves" "$mountpoint$profilepath"
+
+ local bootlogo0="boot.png"
+ local bootlogo1="$mountpoint/media/$modname/$bootlogo0"
+ local bootlogo2="$rootfs/etc/$bootlogo0"
+ if [ -f "$bootlogo1" ]; then
+ rsync -ac "$bootlogo1" "$bootlogo2"
+ showImage "$bootlogo2"
+ cfg_boot_logo=''
+ else
+ [ -f "$bootlogo2" ] && rm -f "$bootlogo2" && source "$preinit.d/p7010_bootlogo"
+ fi
+
+ local bootsound0="boot.wav"
+ local bootsound1="$mountpoint/media/$modname/$bootsound0"
+ local bootsound2="$rootfs/etc/$bootsound0"
+ if [ -f "$bootsound1" ]; then
+ [ -f "$bootsound2" ] || playSound "$bootsound1"
+ rsync -ac "$bootsound1" "$bootsound2"
+ else
+ rm -f "$bootsound2"
+ fi
+
+ return 0
+}
+
+checkExtStorage(){
+ local di
+ local d
+ local p
+ local timeout=5
+ local blockDevice="/dev/sd"
+ waitForUsbDevice "${blockDevice}a1"
+ for di in $(seq 97 99); do
+ d="$(printf "\\$(printf %o $di)\n")"
+ for p in $(seq 1 9); do
+ checkStorageDevice "$blockDevice$d$p" && return 0
+ done
+ done
+ [ $timeout -gt 2 ] && timeout=2
+ blockDevice="/dev/mmcblk0p"
+ waitForMmcDevice "${blockDevice}1"
+ for p in $(seq 1 9); do
+ checkStorageDevice "$blockDevice$p" && return 0
+ done
+ return 1
+}
diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p0000_config b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p0000_config
index 2130e4ea..decf1877 100644
--- a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p0000_config
+++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p0000_config
@@ -1,4 +1,6 @@
cfg_boot_stock='n'
-cfg_disable_armet='y'
+cfg_disable_armet='n'
cfg_firmware='auto'
-cfg_nes_extra_args='--ppu-palette 2'
+cfg_nes_extra_args=''
+cfg_snes_extra_args=''
+cfg_usb_host='n'
diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p0000_version b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p0000_version
new file mode 100644
index 00000000..bc2e34a6
--- /dev/null
+++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p0000_version
@@ -0,0 +1,18 @@
+createVersionFile(){
+ [ -d "$mountpoint/var" ] || return 1
+ local vfile="$mountpoint/var/version"
+ local hakchiVersion="[master]v1.0.3-110(7f31082)"
+ local kernelVersion="$(uname -r)"
+ [ -z "$bootVersion" ] && local bootVersion="v1.0.0"
+ echo "# $(uname -a)" > "$vfile"
+ set | grep -F Version | sort >> "$vfile"
+}
+
+loadVersionFile(){
+ [ -d "$mountpoint/var" ] || return 1
+ local vfile="$mountpoint/var/version"
+ [ -f "$vfile" ] || return 1
+ source "$vfile"
+}
+
+createVersionFile
diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7010_bootlogo b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7010_bootlogo
index 9675ad27..4a5e3f18 100644
--- a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7010_bootlogo
+++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7010_bootlogo
@@ -1 +1,2 @@
showImage "$cfg_boot_logo" || showImage "$rootfs/etc/boot.png" || showImage "$rootfs/etc/$modname.png"
+playSound "$rootfs/etc/boot.wav"
diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7020_usb b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7020_usb
index d8c3d82b..8c38f151 100644
--- a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7020_usb
+++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7020_usb
@@ -1,15 +1,12 @@
-if [ "$cfg_usb_host" != "y" ]; then
- switchToUsbDevice
-else
- switchToUsbHost
-
- # the usb driver needs about 3 seconds to initialize
- sleep 3
-
- if [ -z "$(lsusb | grep -v "1d6b:0001")" ]; then
- switchToUsbDevice
- else
- checkUsbStorage
- fi
-
-fi
+if [ "$cfg_usb_host" != "y" ]; then
+ switchToUsbDevice
+else
+ switchToUsbHost
+ # the usb driver needs some time to initialize
+ sleep 1
+ if [ -z "$(lsusb | grep -v "1d6b:")" ]; then
+ switchToUsbDevice
+ fi
+fi
+
+checkExtStorage
diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7070_firmware b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7070_firmware
index e14653c0..ba531140 100644
--- a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7070_firmware
+++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7070_firmware
@@ -2,12 +2,5 @@
mod_repair_etc
softwareCheck
-checkUsbGamepath
-if [ ! -d "$mountpoint/lib/modules/$(uname -r)" ]; then
- if [ -d "$rootfs/lib/modules/$(uname -r)" ]; then
- overmount "/lib/modules"
- else
- echo "no modules for loaded kernel $(uname -r)"
- fi
-fi
+overmountModules
diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7100_preinit b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7100_preinit
index 7110dfb9..9fa94f93 100644
--- a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7100_preinit
+++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7100_preinit
@@ -1,2 +1,3 @@
+createVersionFile
overmount "/bin"
overmount "/etc"
diff --git a/mods/mod_hakchi/hakchi/script/transfer b/mods/mod_hakchi/hakchi/script/transfer
index 6a27c7bf..82110c8f 100644
--- a/mods/mod_hakchi/hakchi/script/transfer
+++ b/mods/mod_hakchi/hakchi/script/transfer
@@ -68,5 +68,6 @@ transfer_path "$transferpath"
echo
save_config
-[ "$cf_shutdown" != "y" ] || shutdown
+[ "$cf_shutdown" == "y" ] && shutdown
+[ "$cf_shutdown" == "r" ] && reboot
echo
diff --git a/mods/mod_hakchi/sbin/init b/mods/mod_hakchi/sbin/init
index 156c02ae..1bb0b47a 100755
--- a/mods/mod_hakchi/sbin/init
+++ b/mods/mod_hakchi/sbin/init
@@ -34,6 +34,6 @@ fi
[ -f "/hakchi/init" ] && sh "/hakchi/init"
/bin/mount --move /dev /newroot/dev
-/bin/umount /proc
-/bin/umount /sys
+/bin/mount --move /proc /newroot/proc
+/bin/mount --move /sys /newroot/sys
exec /sbin/switch_root /newroot /sbin/init
diff --git a/tools/cygpopt-0.dll b/tools/cygpopt-0.dll
new file mode 100644
index 00000000..27fe24c2
--- /dev/null
+++ b/tools/cygpopt-0.dll
Binary files differ
diff --git a/tools/rsync.exe b/tools/rsync.exe
new file mode 100644
index 00000000..329e9e81
--- /dev/null
+++ b/tools/rsync.exe
Binary files differ
diff --git a/tools/xz.exe b/tools/xz.exe
new file mode 100644
index 00000000..73ab3bfa
--- /dev/null
+++ b/tools/xz.exe
Binary files differ