summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKiritoDv <kiritodev01@gmail.com>2026-01-26 18:44:58 -0600
committerKiritoDv <kiritodev01@gmail.com>2026-01-26 18:44:58 -0600
commitf6f6959374c005bf26bf702179e2b69a6eb295c8 (patch)
tree5ae4a90f03d3ce18f1749f0396f5c8e8df359e86 /src
parentea7f3807e4650d634881b680e1257a80314759ac (diff)
Added support for writing file versioning use for ports
Diffstat (limited to 'src')
-rw-r--r--src/Companion.cpp31
-rw-r--r--src/Companion.h5
-rw-r--r--src/main.cpp7
3 files changed, 38 insertions, 5 deletions
diff --git a/src/Companion.cpp b/src/Companion.cpp
index 2ef7cf2..be80ee5 100644
--- a/src/Companion.cpp
+++ b/src/Companion.cpp
@@ -1335,6 +1335,11 @@ void Companion::Process() {
}
}
+ if(!this->gVersion.empty()) {
+ auto data = this->ParseVersionString(this->gVersion);
+ wrapper->AddFile("assetVersion", data);
+ }
+
SPDLOG_CRITICAL("Writing version file");
wrapper->AddFile("version", vWriter.ToVector());
vWriter.Close();
@@ -1359,8 +1364,7 @@ void Companion::Process() {
Instance = nullptr;
}
-void Companion::Pack(const std::string& folder, const std::string& output, const ArchiveType otrMode) {
-
+void Companion::Pack(const std::string& folder, const std::string& output, const ArchiveType otrMode, const std::string& version) {
spdlog::set_level(spdlog::level::debug);
spdlog::set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%l] %v");
@@ -1405,6 +1409,12 @@ void Companion::Pack(const std::string& folder, const std::string& output, const
SPDLOG_CRITICAL("> Added {}", normalized);
}
+ if(!version.empty()) {
+ SPDLOG_CRITICAL("Adding version file");
+ auto data = this->ParseVersionString(version);
+ wrapper->AddFile("assetVersion", data);
+ }
+
auto end = duration_cast<milliseconds>(system_clock::now().time_since_epoch());
SPDLOG_CRITICAL("Done! Took {}ms", end.count() - start.count());
SPDLOG_CRITICAL("Exported to {}", output);
@@ -1766,3 +1776,20 @@ std::optional<YAML::Node> Companion::AddAsset(YAML::Node asset) {
return std::nullopt;
}
+
+std::vector<char> Companion::ParseVersionString(const std::string& version) {
+ uint16_t major = 0;
+ uint16_t minor = 0;
+ uint16_t patch = 0;
+
+ std::sscanf(version.c_str(), "%hu.%hu.%hu", &major, &minor, &patch);
+
+ auto wv = LUS::BinaryWriter();
+ wv.SetEndianness(Torch::Endianness::Big);
+ wv.Write(major);
+ wv.Write(minor);
+ wv.Write(patch);
+ wv.Close();
+
+ return wv.ToVector();
+} \ No newline at end of file
diff --git a/src/Companion.h b/src/Companion.h
index 40a664e..bc65852 100644
--- a/src/Companion.h
+++ b/src/Companion.h
@@ -179,13 +179,14 @@ public:
std::optional<Table> SearchTable(uint32_t addr);
static std::string CalculateHash(const std::vector<uint8_t>& data);
- static void Pack(const std::string& folder, const std::string& output, const ArchiveType otrMode);
+ static void Pack(const std::string& folder, const std::string& output, const ArchiveType otrMode, const std::string& version = "");
std::string NormalizeAsset(const std::string& name) const;
std::string RelativePath(const std::string& path) const;
std::string RelativePathToSrcDir(const std::string& path) const;
std::string RelativePathToDestDir(const std::string& path) const;
void RegisterCompanionFile(const std::string path, std::vector<char> data);
void SetAdditionalFiles(const std::vector<std::string>& files) { this->gAdditionalFiles = files; }
+ void SetVersion(const std::string& version) { this->gVersion = version; }
TorchConfig& GetConfig() { return this->gConfig; }
BinaryWrapper* GetCurrentWrapper() { return this->gCurrentWrapper; }
@@ -200,6 +201,7 @@ private:
fs::path gCurrentDirectory;
std::string gCurrentHash;
std::string gAssetPath;
+ std::string gVersion;
std::vector<uint8_t> gRomData;
std::optional<std::filesystem::path> gRomPath;
bool gNodeForceProcessing = false;
@@ -246,4 +248,5 @@ private:
void ProcessTables(YAML::Node& rom);
void LoadYAMLRecursively(const std::string &dirPath, std::vector<YAML::Node> &result, bool skipRoot);
std::optional<ParseResultData> ParseNode(YAML::Node& node, std::string& name);
+ std::vector<char> ParseVersionString(const std::string& version);
};
diff --git a/src/main.cpp b/src/main.cpp
index 4dba674..7edc3b8 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -14,6 +14,7 @@ int main(int argc, char *argv[]) {
std::string target;
std::string folder;
std::string archive;
+ std::string version;
ArchiveType otrMode = ArchiveType::None;
bool otrModeSelected = false;
bool xmlMode = false;
@@ -45,10 +46,12 @@ int main(int argc, char *argv[]) {
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->add_option("-vf,--version", version, "Version to set in the o2r archive");
o2r->parse_complete_callback([&] {
const auto instance = Companion::Instance = new Companion(filename, ArchiveType::O2R, debug, srcdir, destdir);
instance->SetAdditionalFiles(additionalFiles);
+ instance->SetVersion(version);
instance->Init(ExportType::Binary);
});
@@ -102,8 +105,8 @@ int main(int argc, char *argv[]) {
pack->add_option("<folder>", folder, "Generate OTR from a directory of assets")->required()->check(CLI::ExistingDirectory);
pack->add_option("<target>", target, "Archive output destination")->required();
pack->add_option("<archive-type>", archive, "Archive type: otr or o2r")->required();
+ pack->add_option("-vf,--version", version, "Version to set in the o2r archive");
-
pack->parse_complete_callback([&] {
if (archive == "otr") {
otrMode = ArchiveType::OTR;
@@ -114,7 +117,7 @@ int main(int argc, char *argv[]) {
}
if (!folder.empty()) {
- Companion::Pack(folder, target, otrMode);
+ Companion::Pack(folder, target, otrMode, version);
} else {
std::cout << "The folder is empty" << std::endl;
}