From 9279629de32735693782a1fb2b951b65ac5b96fb Mon Sep 17 00:00:00 2001 From: coco875 Date: Mon, 1 Dec 2025 22:42:36 +0100 Subject: [PATCH 1/2] basic work to add additional file --- .gitignore | 1 + src/Companion.cpp | 14 ++++++++++++++ src/Companion.h | 2 ++ src/main.cpp | 3 +++ 4 files changed, 20 insertions(+) diff --git a/.gitignore b/.gitignore index 06d46731..8242768d 100644 --- a/.gitignore +++ b/.gitignore @@ -15,6 +15,7 @@ code/ .vscode/ tools/ modding/* +.cache # Doxygen output docs/html diff --git a/src/Companion.cpp b/src/Companion.cpp index c4d29797..471d6b84 100644 --- a/src/Companion.cpp +++ b/src/Companion.cpp @@ -1313,6 +1313,20 @@ void Companion::Process() { } if(wrapper != nullptr) { + // Add additional files specified by the user + for (const auto& filePath : this->gAdditionalFiles) { + std::ifstream input(filePath, std::ios::binary); + if (input.is_open()) { + std::vector data((std::istreambuf_iterator(input)), std::istreambuf_iterator()); + input.close(); + std::string filename = fs::path(filePath).filename().string(); + wrapper->AddFile(filename, data); + SPDLOG_INFO("Added additional file: {}", filename); + } else { + SPDLOG_WARN("Could not open additional file: {}", filePath); + } + } + SPDLOG_CRITICAL("Writing version file"); wrapper->AddFile("version", vWriter.ToVector()); vWriter.Close(); diff --git a/src/Companion.h b/src/Companion.h index 2b6fc09b..40a664e4 100644 --- a/src/Companion.h +++ b/src/Companion.h @@ -185,6 +185,7 @@ class Companion { std::string RelativePathToSrcDir(const std::string& path) const; std::string RelativePathToDestDir(const std::string& path) const; void RegisterCompanionFile(const std::string path, std::vector data); + void SetAdditionalFiles(const std::vector& files) { this->gAdditionalFiles = files; } TorchConfig& GetConfig() { return this->gConfig; } BinaryWrapper* GetCurrentWrapper() { return this->gCurrentWrapper; } @@ -226,6 +227,7 @@ class Companion { std::unordered_map> gCompanionFiles; std::unordered_map> gParseResults; + std::vector gAdditionalFiles; std::unordered_map gModdedAssetPaths; std::variant, std::string> gWriteOrder; diff --git a/src/main.cpp b/src/main.cpp index c5de09b7..4dba674e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -20,6 +20,7 @@ int main(int argc, char *argv[]) { bool debug = false; std::string srcdir; std::string destdir; + std::vector additionalFiles; app.require_subcommand(); @@ -43,9 +44,11 @@ int main(int argc, char *argv[]) { o2r->add_flag("-v,--verbose", debug, "Verbose Debug Mode"); o2r->add_option("-s,--srcdir", srcdir, "Set source directory to locate config.yml and asset metadata for processing")->check(CLI::ExistingDirectory); o2r->add_option("-d,--destdir", destdir, "Set destination directory for export"); + o2r->add_option("-a,--additional-files", additionalFiles, "Additional files to include in the o2r archive (e.g., mods.toml)")->check(CLI::ExistingFile); o2r->parse_complete_callback([&] { const auto instance = Companion::Instance = new Companion(filename, ArchiveType::O2R, debug, srcdir, destdir); + instance->SetAdditionalFiles(additionalFiles); instance->Init(ExportType::Binary); }); From c3fdb5d5e3f172bdce468a6ff63fa9e496e0ce66 Mon Sep 17 00:00:00 2001 From: coco875 <59367621+coco875@users.noreply.github.com> Date: Tue, 2 Dec 2025 08:26:52 +0100 Subject: [PATCH 2/2] Update Companion.cpp --- src/Companion.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Companion.cpp b/src/Companion.cpp index 471d6b84..a8815339 100644 --- a/src/Companion.cpp +++ b/src/Companion.cpp @@ -1315,7 +1315,7 @@ void Companion::Process() { if(wrapper != nullptr) { // Add additional files specified by the user for (const auto& filePath : this->gAdditionalFiles) { - std::ifstream input(filePath, std::ios::binary); + std::ifstream input(this->gSourceDirectory / filePath, std::ios::binary); if (input.is_open()) { std::vector data((std::istreambuf_iterator(input)), std::istreambuf_iterator()); input.close();