From a6face7240aaa2a95656143069c6c1de96a1ea98 Mon Sep 17 00:00:00 2001 From: petrie911 <69443847+petrie911@users.noreply.github.com> Date: Thu, 14 Mar 2024 15:50:01 -0500 Subject: [PATCH] ObjInit can now make header entries (#42) * 3D * and env * so much to fix * Everything can be solved with triangles * fixes * initfix --- src/factories/sf64/ObjInitFactory.cpp | 11 +++++++++++ src/factories/sf64/ObjInitFactory.h | 5 +++++ 2 files changed, 16 insertions(+) diff --git a/src/factories/sf64/ObjInitFactory.cpp b/src/factories/sf64/ObjInitFactory.cpp index 8894036..a2e42eb 100644 --- a/src/factories/sf64/ObjInitFactory.cpp +++ b/src/factories/sf64/ObjInitFactory.cpp @@ -5,6 +5,17 @@ #define NUM(x, w) std::dec << std::setfill(' ') << std::setw(w) << x #define FLOAT(x, w) std::dec << std::setfill(' ') << std::setw(w) << std::fixed << std::setprecision(1) << x << "f" +void SF64::ObjInitHeaderExporter::Export(std::ostream &write, std::shared_ptr raw, std::string& entryName, YAML::Node &node, std::string* replacement) { + const auto symbol = GetSafeNode(node, "symbol", entryName); + + if(Companion::Instance->IsOTRMode()){ + write << "static const char " << symbol << "[] = \"__OTR__" << (*replacement) << "\";\n\n"; + return; + } + + write << "extern ObjectInit " << symbol << "[];\n"; +} + void SF64::ObjInitCodeExporter::Export(std::ostream &write, std::shared_ptr raw, std::string& entryName, YAML::Node &node, std::string* replacement ) { auto symbol = GetSafeNode(node, "symbol", entryName); auto offset = GetSafeNode(node, "offset"); diff --git a/src/factories/sf64/ObjInitFactory.h b/src/factories/sf64/ObjInitFactory.h index fcaff69..2abfab5 100644 --- a/src/factories/sf64/ObjInitFactory.h +++ b/src/factories/sf64/ObjInitFactory.h @@ -21,6 +21,10 @@ public: explicit ObjInitData(std::vector objInit) : mObjInit(objInit) {} }; +class ObjInitHeaderExporter : public BaseExporter { + void Export(std::ostream& write, std::shared_ptr data, std::string& entryName, YAML::Node& node, std::string* replacement) override; +}; + class ObjInitBinaryExporter : public BaseExporter { void Export(std::ostream& write, std::shared_ptr data, std::string& entryName, YAML::Node& node, std::string* replacement) override; }; @@ -37,6 +41,7 @@ public: } inline std::unordered_map> GetExporters() override { return { + REGISTER(Header, ObjInitHeaderExporter) REGISTER(Binary, ObjInitBinaryExporter) REGISTER(Code, ObjInitCodeExporter) };