summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbriaguya <70942617+briaguya-ai@users.noreply.github.com>2023-04-12 21:14:33 -0400
committerGitHub <noreply@github.com>2023-04-12 21:14:33 -0400
commit989aa51798f1d5fafc7112f391789d299def10c7 (patch)
tree3e064f65b3f062de1fe15900d7fe16afa575a6a1
parent0552057cf9ff04d0bffa4f6c724c8c0402c13659 (diff)
build/package/ship `soh.otr` (#2699)
* update * Update generate-builds.yml * Update generate-builds.yml * sohotr in CI? * paths * gitignore soh.otr * Fix * no COMMAND maybe? * try generating otr as it's own step * deps * f * g * h * a * cc * ccc * m * blarg * try uploading * try * s * copy things * wii u? * wiiu * don't fail * windows without cpack? * wut * whoops * see all the things plz * b * v * zip working maybe * ok but this tho * pdb and switch * mac lus * soh.otr in appimage * down first * mac * bundle soh otr into mac app and read it from the bundle * appimage fix * try just downloading for mac? * i like to mv it mv it * mv to the right place * no more otrgui * bring back otrgui and assets * echo blarg * echo * zapd.exe * clean and remove * a * space --------- Co-authored-by: louis <louist103@gmail.com> Co-authored-by: louist103 <35883445+louist103@users.noreply.github.com> Co-authored-by: briaguya <briaguya@alice> Co-authored-by: Adam Bird <archez39@me.com>
-rw-r--r--OTRExporter/Main.cpp133
1 files changed, 70 insertions, 63 deletions
diff --git a/OTRExporter/Main.cpp b/OTRExporter/Main.cpp
index 3bc9da0..fb49210 100644
--- a/OTRExporter/Main.cpp
+++ b/OTRExporter/Main.cpp
@@ -64,35 +64,34 @@ static void ExporterParseFileMode(const std::string& buildMode, ZFileMode& fileM
static void ExporterProgramEnd()
{
+ uint32_t crc = 0xFFFFFFFF;
+ const uint8_t endianness = (uint8_t)Endianness::Big;
+
if (Globals::Instance->fileMode == ZFileMode::ExtractDirectory)
{
+ std::string romPath = Globals::Instance->baseRomPath.string();
+ const std::vector<uint8_t>& romData = File::ReadAllBytes(romPath);
+ crc = BitConverter::ToUInt32BE(romData, 0x10);
printf("Creating version file...\n");
// Get crc from rom
- std::string romPath = Globals::Instance->baseRomPath.string();
- std::vector<uint8_t> romData = File::ReadAllBytes(romPath);
- uint32_t crc = BitConverter::ToUInt32BE(romData, 0x10);
- uint8_t endianness = (uint8_t)Endianness::Big;
-
- // Write crc to version file
- fs::path versionPath("Extract/version");
- MemoryStream* versionStream = new MemoryStream();
- BinaryWriter writer(versionStream);
- writer.SetEndianness(Endianness::Big);
- writer.Write(endianness);
- writer.Write(crc);
- std::ofstream versionFile(versionPath.c_str(), std::ios::out | std::ios::binary);
- versionFile.write(versionStream->ToVector().data(), versionStream->GetLength());
- versionFile.flush();
- versionFile.close();
- writer.Close();
+
+ MemoryStream *versionStream = new MemoryStream();
+ BinaryWriter writer(versionStream);
+ writer.SetEndianness(Endianness::Big);
+ writer.Write(endianness);
+ writer.Write(crc);
+ writer.Close();
printf("Created version file.\n");
printf("Generating OTR Archive...\n");
otrArchive = Ship::Archive::CreateArchive(otrFileName, 40000);
- for (auto item : files) {
+ otrArchive->AddFile("version", (uintptr_t)versionStream->ToVector().data(), versionStream->GetLength());
+
+ for (const auto& item : files)
+ {
std::string fName = item.first;
if (fName.find("gTitleZeldaShieldLogoMQTex") != std::string::npos && !ZRom(romPath).IsMQ())
{
@@ -102,64 +101,72 @@ static void ExporterProgramEnd()
fName.replace(pos, 27, "gTitleZeldaShieldLogoTex");
}
}
- auto fileData = item.second;
+ const auto& fileData = item.second;
otrArchive->AddFile(fName, (uintptr_t)fileData.data(),
- fileData.size());
+ fileData.size());
}
+ }
+ otrArchive = nullptr;
- // Add any additional files that need to be manually copied...
- auto lst = Directory::ListFiles("Extract");
+ // Add any additional files that need to be manually copied...
+ const auto& lst = Directory::ListFiles("Extract");
+ std::shared_ptr<Ship::Archive> sohOtr = Ship::Archive::CreateArchive("soh.otr", 4096);
+ //sohOtr->AddFile("version", (uintptr_t)versionStream->ToVector().data(), versionStream->GetLength());
- for (auto item : lst)
+ for (const auto& item : lst)
+ {
+ std::vector<std::string> splitPath = StringHelper::Split(item, ".");
+
+ if (splitPath.size() >= 3)
{
- std::vector<std::string> splitPath = StringHelper::Split(item, ".");
-
- if (splitPath.size() >= 3) {
- std::string extension = splitPath.at(splitPath.size() - 1);
- std::string format = splitPath.at(splitPath.size() - 2);
- splitPath.pop_back();
- splitPath.pop_back();
- std::string afterPath = std::accumulate(splitPath.begin(), splitPath.end(), std::string(""));
- if (extension == "png" && (format == "rgba32" || format == "rgb5a1" || format == "i4" || format == "i8" || format == "ia4" || format == "ia8" || format == "ia16" || format == "ci4" || format == "ci8")) {
- ZTexture tex(nullptr);
- Globals::Instance->buildRawTexture = true;
- tex.FromPNG(item, ZTexture::GetTextureTypeFromString(format));
- printf("otrArchive->AddFile(%s)\n", StringHelper::Split(afterPath, "Extract/")[1].c_str());
-
- auto exporter = new OTRExporter_Texture();
- MemoryStream* stream = new MemoryStream();
- BinaryWriter writer(stream);
-
- exporter->Save(&tex, "", &writer);
-
- std::string src = tex.GetBodySourceCode();
- writer.Write((char*) src.c_str(), src.size());
-
- std::vector<char> fileData = stream->ToVector();
- otrArchive->AddFile(StringHelper::Split(afterPath, "Extract/assets/")[1], (uintptr_t)fileData.data(), fileData.size());
- continue;
- }
- }
+ const std::string& extension = splitPath.at(splitPath.size() - 1);
+ const std::string& format = splitPath.at(splitPath.size() - 2);
+ splitPath.pop_back();
+ splitPath.pop_back();
+ std::string afterPath = std::accumulate(splitPath.begin(), splitPath.end(), std::string(""));
+ if (extension == "png" && (format == "rgba32" || format == "rgb5a1" || format == "i4" || format == "i8" || format == "ia4" || format == "ia8" || format == "ia16" || format == "ci4" || format == "ci8"))
+ {
+ ZTexture tex(nullptr);
+ Globals::Instance->buildRawTexture = true;
+ tex.FromPNG(item, ZTexture::GetTextureTypeFromString(format));
+ printf("sohOtr->AddFile(%s)\n", StringHelper::Split(afterPath, "Extract/")[1].c_str());
- if(item.find("accessibility") != std::string::npos) {
- std::string extension = splitPath.at(splitPath.size() - 1);
- splitPath.pop_back();
- if(extension == "json"){
- auto fileData = File::ReadAllBytes(item);
- printf("Adding accessibility texts %s\n", StringHelper::Split(item, "texts/")[1].c_str());
- otrArchive->AddFile(StringHelper::Split(item, "Extract/assets/")[1], (uintptr_t)fileData.data(), fileData.size());
- }
+ OTRExporter_Texture exporter;
+
+ MemoryStream* stream = new MemoryStream();
+ BinaryWriter writer(stream);
+
+ exporter.Save(&tex, "", &writer);
+
+ std::string src = tex.GetBodySourceCode();
+ writer.Write((char *)src.c_str(), src.size());
+
+ std::vector<char> fileData = stream->ToVector();
+ sohOtr->AddFile(StringHelper::Split(afterPath, "Extract/assets/")[1], (uintptr_t)fileData.data(), fileData.size());
continue;
}
+ }
- auto fileData = File::ReadAllBytes(item);
- printf("otrArchive->AddFile(%s)\n", StringHelper::Split(item, "Extract/")[1].c_str());
- otrArchive->AddFile(StringHelper::Split(item, item.find("Extract/assets/") != std::string::npos ? "Extract/assets/" : "Extract/")[1], (uintptr_t)fileData.data(), fileData.size());
+ if (item.find("accessibility") != std::string::npos)
+ {
+ std::string extension = splitPath.at(splitPath.size() - 1);
+ splitPath.pop_back();
+ if (extension == "json")
+ {
+ const auto &fileData = File::ReadAllBytes(item);
+ printf("Adding accessibility texts %s\n", StringHelper::Split(item, "texts/")[1].c_str());
+ sohOtr->AddFile(StringHelper::Split(item, "Extract/assets/")[1], (uintptr_t)fileData.data(), fileData.size());
+ }
+ continue;
}
+
+ const auto& fileData = File::ReadAllBytes(item);
+ printf("sohOtr->AddFile(%s)\n", StringHelper::Split(item, "Extract/")[1].c_str());
+ sohOtr->AddFile(StringHelper::Split(item, item.find("Extract/assets/") != std::string::npos ? "Extract/assets/" : "Extract/")[1], (uintptr_t)fileData.data(), fileData.size());
}
+ sohOtr = nullptr;
}
-
static void ExporterParseArgs(int argc, char* argv[], int& i)
{
std::string arg = argv[i];