about summary refs log tree commit diff
path: root/nixpkgs/pkgs/games/shipwright/soh-misc-otr-patches.patch
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/games/shipwright/soh-misc-otr-patches.patch')
-rw-r--r--nixpkgs/pkgs/games/shipwright/soh-misc-otr-patches.patch119
1 files changed, 119 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/games/shipwright/soh-misc-otr-patches.patch b/nixpkgs/pkgs/games/shipwright/soh-misc-otr-patches.patch
new file mode 100644
index 000000000000..2be31092e285
--- /dev/null
+++ b/nixpkgs/pkgs/games/shipwright/soh-misc-otr-patches.patch
@@ -0,0 +1,119 @@
+diff --git a/soh/soh/Extractor/Extract.cpp b/soh/soh/Extractor/Extract.cpp
+index a9ddc4f4..f6d45fe2 100644
+--- a/soh/soh/Extractor/Extract.cpp
++++ b/soh/soh/Extractor/Extract.cpp
+@@ -490,28 +490,27 @@ const char* Extractor::GetZapdVerStr() const {
+ 
+ extern "C" int zapd_main(int argc, char** argv);
+ 
+-bool Extractor::CallZapd() {
++bool Extractor::CallZapd(std::string &assetPath) {
+     constexpr int argc = 16;
+-    char xmlPath[100];
+-    char confPath[100];
+     std::array<const char*, argc> argv;
+     const char* version = GetZapdVerStr();
+ 
+-    snprintf(xmlPath, 100, "assets/extractor/xmls/%s", version);
+-    snprintf(confPath, 100, "assets/extractor/Config_%s.xml", version);
++    std::string xmlPath = assetPath + "/assets/extractor/xmls/" + version;
++    std::string confPath = assetPath + "/assets/extractor/Config_" + version + ".xml";
++    std::string fileListsPath = assetPath + "/assets/extractor/filelists";
+ 
+     argv[0] = "ZAPD";
+     argv[1] = "ed";
+     argv[2] = "-i";
+-    argv[3] = xmlPath;
++    argv[3] = xmlPath.c_str();
+     argv[4] = "-b";
+     argv[5] = mCurrentRomPath.c_str();
+     argv[6] = "-fl";
+-    argv[7] = "assets/extractor/filelists";
++    argv[7] = fileListsPath.c_str();
+     argv[8] = "-gsf";
+-    argv[9] = "1";
++    argv[9] = "0";
+     argv[10] = "-rconf";
+-    argv[11] = confPath;
++    argv[11] = confPath.c_str();
+     argv[12] = "-se";
+     argv[13] = "OTR";
+     argv[14] = "--otrfile";
+diff --git a/soh/soh/Extractor/Extract.h b/soh/soh/Extractor/Extract.h
+index e4eb2e5b..3c95b025 100644
+--- a/soh/soh/Extractor/Extract.h
++++ b/soh/soh/Extractor/Extract.h
+@@ -57,7 +57,7 @@ class Extractor {
+     bool IsMasterQuest() const;
+ 
+     bool Run(RomSearchMode searchMode = RomSearchMode::Both);
+-    bool CallZapd();
++    bool CallZapd(std::string& assetPath);
+     const char* GetZapdStr();
+ };
+ #endif
+diff --git a/soh/soh/OTRGlobals.cpp b/soh/soh/OTRGlobals.cpp
+index d192de6a..cc516085 100644
+--- a/soh/soh/OTRGlobals.cpp
++++ b/soh/soh/OTRGlobals.cpp
+@@ -201,11 +201,11 @@ const char* constCameraStrings[] = {
+ 
+ OTRGlobals::OTRGlobals() {
+     std::vector<std::string> OTRFiles;
+-    std::string mqPath = LUS::Context::GetPathRelativeToAppDirectory("oot-mq.otr");
++    std::string mqPath = LUS::Context::FindFileFromAllAppDirectories("oot-mq.otr");
+     if (std::filesystem::exists(mqPath)) { 
+         OTRFiles.push_back(mqPath);
+     } 
+-    std::string ootPath = LUS::Context::GetPathRelativeToAppDirectory("oot.otr");
++    std::string ootPath = LUS::Context::FindFileFromAllAppDirectories("oot.otr");
+     if (std::filesystem::exists(ootPath)) {
+         OTRFiles.push_back(ootPath);
+     }
+@@ -213,7 +213,7 @@ OTRGlobals::OTRGlobals() {
+     if (std::filesystem::exists(sohOtrPath)) {
+         OTRFiles.push_back(sohOtrPath);
+     }
+-    std::string patchesPath = LUS::Context::GetPathRelativeToAppDirectory("mods");
++    std::string patchesPath = LUS::Context::FindFileFromAllAppDirectories("mods");
+     if (patchesPath.length() > 0 && std::filesystem::exists(patchesPath)) {
+         if (std::filesystem::is_directory(patchesPath)) {
+             for (const auto& p : std::filesystem::recursive_directory_iterator(patchesPath)) {
+@@ -709,8 +709,10 @@ extern "C" void OTRExtScanner() {
+ 
+ extern "C" void InitOTR() {
+ #if not defined (__SWITCH__) && not defined(__WIIU__)
+-    if (!std::filesystem::exists(LUS::Context::GetPathRelativeToAppDirectory("oot-mq.otr")) &&
+-        !std::filesystem::exists(LUS::Context::GetPathRelativeToAppDirectory("oot.otr"))){
++    if (!std::filesystem::exists(LUS::Context::FindFileFromAllAppDirectories("oot-mq.otr")) &&
++        !std::filesystem::exists(LUS::Context::FindFileFromAllAppDirectories("oot.otr"))){
++        std::string exporterAssetPath = LUS::Context::GetAppBundlePath();
++
+         bool generatedOtrIsMQ = false;
+         if (Extractor::ShowYesNoBox("No OTR Files", "No OTR files found. Generate one now?") == IDYES) {
+             Extractor extract;
+@@ -718,7 +720,7 @@ extern "C" void InitOTR() {
+                 Extractor::ShowErrorBox("Error", "An error occured, no OTR file was generated. Exiting...");
+                 exit(1);
+             }
+-            extract.CallZapd();
++            extract.CallZapd(exporterAssetPath);
+             generatedOtrIsMQ = extract.IsMasterQuest();
+         } else {
+             exit(1);
+@@ -728,7 +730,7 @@ extern "C" void InitOTR() {
+             if (!extract.Run(generatedOtrIsMQ ? RomSearchMode::Vanilla : RomSearchMode::MQ)) {
+                 Extractor::ShowErrorBox("Error", "An error occured, an OTR file may have been generated by a different step. Continuing...");
+             } else {
+-                extract.CallZapd();
++                extract.CallZapd(exporterAssetPath);
+             }
+         }
+     }
+@@ -2018,4 +2020,4 @@ extern "C" void Gfx_RegisterBlendedTexture(const char* name, u8* mask, u8* repla
+ 
+ extern "C" void SaveManager_ThreadPoolWait() {
+     SaveManager::Instance->ThreadPoolWait();
+-}
+\ No newline at end of file
++}