summaryrefslogtreecommitdiff
path: root/src/factories/sf64/ScriptFactory.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/factories/sf64/ScriptFactory.h')
-rw-r--r--src/factories/sf64/ScriptFactory.h45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/factories/sf64/ScriptFactory.h b/src/factories/sf64/ScriptFactory.h
new file mode 100644
index 0000000..24eaf71
--- /dev/null
+++ b/src/factories/sf64/ScriptFactory.h
@@ -0,0 +1,45 @@
+#pragma once
+
+#include "../BaseFactory.h"
+
+namespace SF64 {
+
+class ScriptData : public IParsedData {
+public:
+ std::vector<uint32_t> mPtrs;
+ std::vector<uint16_t> mCmds;
+ std::map<uint32_t, int> mSizeMap;
+ uint32_t mCmdsStart;
+ uint32_t mPtrsStart;
+
+ ScriptData(std::vector<uint32_t> ptrs, std::vector<uint16_t> cmds, std::map<uint32_t, int> sizeMap, uint32_t ptrsStart, uint32_t cmdsStart);
+};
+
+class ScriptHeaderExporter : public BaseExporter {
+ void Export(std::ostream& write, std::shared_ptr<IParsedData> data, std::string& entryName, YAML::Node& node, std::string* replacement) override;
+};
+
+class ScriptBinaryExporter : public BaseExporter {
+ void Export(std::ostream& write, std::shared_ptr<IParsedData> data, std::string& entryName, YAML::Node& node, std::string* replacement) override;
+};
+
+class ScriptCodeExporter : public BaseExporter {
+ void Export(std::ostream& write, std::shared_ptr<IParsedData> data, std::string& entryName, YAML::Node& node, std::string* replacement) override;
+};
+
+class ScriptFactory : public BaseFactory {
+public:
+ std::optional<std::shared_ptr<IParsedData>> parse(std::vector<uint8_t>& buffer, YAML::Node& data) override;
+ std::optional<std::shared_ptr<IParsedData>> parse_modding(std::vector<uint8_t>& buffer, YAML::Node& data) override {
+ return std::nullopt;
+ }
+ inline std::unordered_map<ExportType, std::shared_ptr<BaseExporter>> GetExporters() override {
+ return {
+ REGISTER(Code, ScriptCodeExporter)
+ REGISTER(Header, ScriptHeaderExporter)
+ REGISTER(Binary, ScriptBinaryExporter)
+ };
+ }
+ bool SupportModdedAssets() override { return false; }
+};
+}