diff options
| author | KiritoDv <kiritodev01@gmail.com> | 2025-03-01 23:34:48 -0600 |
|---|---|---|
| committer | KiritoDv <kiritodev01@gmail.com> | 2025-03-01 23:34:48 -0600 |
| commit | 9d508fc94cd52ab90a64706906bc5307458dc7c0 (patch) | |
| tree | f491fa47ecf88b73cc9ed7dc730fc1493f819e02 /src | |
| parent | 7598e2932c3b8e0c08cddd2ac52ab735dbeefdf0 (diff) | |
Fixed GBI Floats
Diffstat (limited to 'src')
| -rw-r--r-- | src/Companion.cpp | 5 | ||||
| -rw-r--r-- | src/Companion.h | 1 | ||||
| -rw-r--r-- | src/factories/MtxFactory.cpp | 2 | ||||
| -rw-r--r-- | 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<std::string>(); auto opath = cfg["output"]; auto gbi = cfg["gbi"]; + auto gbi_floats = cfg["gbi_floats"]; auto modding_path = opath && opath["modding"] ? opath["modding"].as<std::string>() : "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<bool>(); + } } 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<IParse ExportResult MtxBinaryExporter::Export(std::ostream &write, std::shared_ptr<IParsedData> raw, std::string& entryName, YAML::Node &node, std::string* replacement ) { auto mtx = std::static_pointer_cast<MtxData>(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_ptr<IPar WriteHeader(writer, Torch::ResourceType::Vertex, 0); writer.Write((uint32_t) vtx->mVtxs.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]); |
