diff options
Diffstat (limited to 'nixpkgs/pkgs/games/shipwright/soh-misc-otr-patches.patch')
-rw-r--r-- | nixpkgs/pkgs/games/shipwright/soh-misc-otr-patches.patch | 119 |
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 ++} |