From 80866c08ead6946932b1fde0bff4c83a25f40ea1 Mon Sep 17 00:00:00 2001 From: Edoardo Lolletti Date: Fri, 26 Apr 2024 16:02:05 +0200 Subject: [PATCH] Allow applying splas and sound binary patch --- arm9/src/main.c | 20 +++++++++++++---- arm9/src/unlaunch.cpp | 40 +++++++++++++++++++++++++++++----- arm9/src/unlaunch.h | 2 +- nitrofiles/unlaunch-patch.bin | Bin 0 -> 26547 bytes 4 files changed, 52 insertions(+), 10 deletions(-) create mode 100644 nitrofiles/unlaunch-patch.bin diff --git a/arm9/src/main.c b/arm9/src/main.c index 19a764d..65db340 100644 --- a/arm9/src/main.c +++ b/arm9/src/main.c @@ -16,6 +16,7 @@ static bool retailConsole = true; static UNLAUNCH_VERSION foundUnlaunchInstallerVersion = INVALID; static bool disableAllPatches = false; static bool enableSoundAndSplash = false; +static const char* splashSoundBinaryPatchPath = NULL; bool charging = false; u8 batteryLevel = 0; @@ -74,7 +75,7 @@ static int mainMenu(int cursor) (foundUnlaunchInstallerVersion == v1_9 || foundUnlaunchInstallerVersion == v2_0) ? 047 : 037, disableAllPatches ? "On" : "Off"); sprintf(soundPatchesStr, "\x1B[%02omEnable sound and splash: %s", - (foundUnlaunchInstallerVersion == v2_0 && !disableAllPatches) ? 047 : 037, + (foundUnlaunchInstallerVersion == v2_0 && !disableAllPatches && splashSoundBinaryPatchPath != NULL) ? 047 : 037, enableSoundAndSplash ? "On" : "Off"); sprintf(installStr, "\x1B[%02omInstall unlaunch", (foundUnlaunchInstallerVersion != INVALID && !unlaunchFound) ? 047 : 037); addMenuItem(m, uninstallStr, NULL, 0); @@ -177,6 +178,13 @@ int main(int argc, char **argv) "Installing unlaunch won't be possible."); } } + + if(fileExists("nitro:/unlaunch-patch.bin")) + { + splashSoundBinaryPatchPath = "nitro:/unlaunch-patch.bin"; + } else if (fileExists("sd:/unlaunch-patch.bin")) { + splashSoundBinaryPatchPath = "sd:/unlaunch-patch.bin"; + } //check for unlaunch and region u8 region = 0xff; @@ -257,17 +265,21 @@ int main(int argc, char **argv) break; case MAIN_MENU_SOUND_SPLASH_PATCHES: - if(foundUnlaunchInstallerVersion == v2_0 && !disableAllPatches) { + if(foundUnlaunchInstallerVersion == v2_0 && !disableAllPatches && splashSoundBinaryPatchPath != NULL) { enableSoundAndSplash = !enableSoundAndSplash; } break; case MAIN_MENU_SAFE_UNLAUNCH_INSTALL: - if (foundUnlaunchInstallerVersion != INVALID && (choiceBox("Install unlaunch?") == YES) + if (!unlaunchFound && foundUnlaunchInstallerVersion != INVALID && (choiceBox("Install unlaunch?") == YES) && (retailLauncherTmdPresentAndToBePatched || (choiceBox("There doesn't seem to be a launcher.tmd\nfile matcing the hwinfo file\nKeep installing?") == YES)) && nandio_unlock_writing()) { - if(installUnlaunch(retailConsole, retailLauncherTmdPresentAndToBePatched ? retailLauncherTmdPath : NULL, disableAllPatches, enableSoundAndSplash)) + printf("Installing\n"); + if(installUnlaunch(retailConsole, + retailLauncherTmdPresentAndToBePatched ? retailLauncherTmdPath : NULL, + disableAllPatches, + enableSoundAndSplash ? splashSoundBinaryPatchPath : NULL)) { messageBox("Install successful!\n"); unlaunchFound = true; diff --git a/arm9/src/unlaunch.cpp b/arm9/src/unlaunch.cpp index bb61cb1..8d99d7f 100644 --- a/arm9/src/unlaunch.cpp +++ b/arm9/src/unlaunch.cpp @@ -402,7 +402,7 @@ static bool verifyUnlaunchInstaller(void) return true; } -static bool patchUnlaunchInstaller(bool disableAllPatches, bool enableSoundAndSplash) +static bool patchUnlaunchInstaller(bool disableAllPatches, const char* splashSoundBinaryPatchPath) { if(disableAllPatches) { @@ -416,9 +416,39 @@ static bool patchUnlaunchInstaller(bool disableAllPatches, bool enableSoundAndSp const char newID[]{'S','A','N'}; memcpy((unlaunchInstallerBuffer + 520) + patchOffset, newID, 3); } - else if (enableSoundAndSplash) + else if (splashSoundBinaryPatchPath) { - + if(installerVersion != v2_0) + { + messageBox("\x1B[31mError:\x1B[33m The splash and sound patch is\n" + "only for unlaunch 2.0\n"); + return false; + } + static constexpr auto patchOffset = 0x8580; + static constexpr auto patchSectionSize = 0x67FD; + auto* patch = fopen(splashSoundBinaryPatchPath, "rb"); + if(!patch) + { + messageBox("\x1B[31mError:\x1B[33m Failed to open the splash and\n" + "sound patch is.\n"); + return false; + } + auto patchSize = getFileSize(patch); + if(patchSize > patchSectionSize) + { + messageBox("\x1B[31mError:\x1B[33m Splash and sound patch is too\n" + "big.\n"); + fclose(patch); + return false; + } + if (fread((unlaunchInstallerBuffer + 520) + patchOffset, 1, patchSize, patch) != patchSize) + { + messageBox("\x1B[31mError:\x1B[33m Failed to read splash and sound\n" + "patch.\n"); + fclose(patch); + return false; + } + fclose(patch); } return true; } @@ -432,9 +462,9 @@ UNLAUNCH_VERSION loadUnlaunchInstaller(const char* path) return INVALID; } -bool installUnlaunch(bool retailConsole, const char* retailLauncherTmdPath, bool disableAllPatches, bool enableSoundAndSplash) +bool installUnlaunch(bool retailConsole, const char* retailLauncherTmdPath, bool disableAllPatches, const char* splashSoundBinaryPatchPath) { - if (installerVersion == INVALID || !patchUnlaunchInstaller(disableAllPatches, enableSoundAndSplash)) + if (installerVersion == INVALID || !patchUnlaunchInstaller(disableAllPatches, splashSoundBinaryPatchPath)) return false; // Treat protos differently diff --git a/arm9/src/unlaunch.h b/arm9/src/unlaunch.h index 1c7d53c..3910874 100644 --- a/arm9/src/unlaunch.h +++ b/arm9/src/unlaunch.h @@ -14,7 +14,7 @@ typedef enum UNLAUNCH_VERSION { } UNLAUNCH_VERSION; bool uninstallUnlaunch(bool notProto, bool hasHNAABackup, const char* retailLauncherTmdPath); -bool installUnlaunch(bool retailConsole, const char* retailLauncherTmdPath, bool disableAllPatches, bool enableSoundAndSplash); +bool installUnlaunch(bool retailConsole, const char* retailLauncherTmdPath, bool disableAllPatches, const char* splashSoundBinaryPatchPath); bool isLauncherTmdPatched(const char* path); diff --git a/nitrofiles/unlaunch-patch.bin b/nitrofiles/unlaunch-patch.bin new file mode 100644 index 0000000000000000000000000000000000000000..14841e9d99da174c76df89118d44432b0e7fedd0 GIT binary patch literal 26547 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