nixpkgs/pkgs/games/shipwright/soh-misc-otr-patches.patch
2023-06-08 22:52:57 +01:00

119 lines
4.9 KiB
Diff

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