summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKiritoDv <kiritodev01@gmail.com>2025-03-01 23:34:48 -0600
committerKiritoDv <kiritodev01@gmail.com>2025-03-01 23:34:48 -0600
commit9d508fc94cd52ab90a64706906bc5307458dc7c0 (patch)
treef491fa47ecf88b73cc9ed7dc730fc1493f819e02 /src
parent7598e2932c3b8e0c08cddd2ac52ab735dbeefdf0 (diff)
Fixed GBI Floats
Diffstat (limited to 'src')
-rw-r--r--src/Companion.cpp5
-rw-r--r--src/Companion.h1
-rw-r--r--src/factories/MtxFactory.cpp2
-rw-r--r--src/factories/VtxFactory.cpp12
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]);