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 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 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 +}