From 9d508fc94cd52ab90a64706906bc5307458dc7c0 Mon Sep 17 00:00:00 2001 From: KiritoDv Date: Sat, 1 Mar 2025 23:34:48 -0600 Subject: [PATCH] Fixed GBI Floats --- src/Companion.cpp | 5 +++++ src/Companion.h | 1 + src/factories/MtxFactory.cpp | 2 +- src/factories/VtxFactory.cpp | 12 +++++++++--- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/Companion.cpp b/src/Companion.cpp index 8b0def9..885ca2f 100644 --- a/src/Companion.cpp +++ b/src/Companion.cpp @@ -1032,6 +1032,7 @@ void Companion::Process() { this->gAssetPath = rom["path"].as(); auto opath = cfg["output"]; auto gbi = cfg["gbi"]; + auto gbi_floats = cfg["gbi_floats"]; auto modding_path = opath && opath["modding"] ? opath["modding"].as() : "modding"; this->gConfig.moddingPath = modding_path; @@ -1086,6 +1087,10 @@ void Companion::Process() { SPDLOG_ERROR("Invalid GBI version"); return; } + + if(gbi_floats) { + this->gConfig.gbi.useFloats = gbi_floats.as(); + } } if(auto sort = cfg["sort"]) { diff --git a/src/Companion.h b/src/Companion.h index 3d7f0f5..de1c6dc 100644 --- a/src/Companion.h +++ b/src/Companion.h @@ -76,6 +76,7 @@ struct WriteEntry { struct GBIConfig { GBIVersion version = GBIVersion::f3d; GBIMinorVersion subversion = GBIMinorVersion::None; + bool useFloats = false; }; struct TorchConfig { diff --git a/src/factories/MtxFactory.cpp b/src/factories/MtxFactory.cpp index 9d84c56..1ad30dc 100644 --- a/src/factories/MtxFactory.cpp +++ b/src/factories/MtxFactory.cpp @@ -105,7 +105,7 @@ ExportResult MtxCodeExporter::Export(std::ostream &write, std::shared_ptr raw, std::string& entryName, YAML::Node &node, std::string* replacement ) { auto mtx = std::static_pointer_cast(raw); auto writer = LUS::BinaryWriter(); - auto floats = GetSafeNode(node, "floats", false); + auto floats = Companion::Instance->GetConfig().gbi.useFloats; WriteHeader(writer, Torch::ResourceType::Matrix, 0); diff --git a/src/factories/VtxFactory.cpp b/src/factories/VtxFactory.cpp index 7be50f9..1b5f9f1 100644 --- a/src/factories/VtxFactory.cpp +++ b/src/factories/VtxFactory.cpp @@ -128,9 +128,15 @@ ExportResult VtxBinaryExporter::Export(std::ostream &write, std::shared_ptrmVtxs.size()); for(auto v : vtx->mVtxs) { - writer.Write(v.ob[0]); - writer.Write(v.ob[1]); - writer.Write(v.ob[2]); + if(Companion::Instance->GetConfig().gbi.useFloats){ + writer.Write((float) v.ob[0]); + writer.Write((float) v.ob[1]); + writer.Write((float) v.ob[2]); + } else { + writer.Write((int16_t) v.ob[0]); + writer.Write((int16_t) v.ob[1]); + writer.Write((int16_t) v.ob[2]); + } writer.Write(v.flag); writer.Write(v.tc[0]); writer.Write(v.tc[1]);