diff options
| author | KiritoDv <kiritodev01@gmail.com> | 2025-01-26 20:11:36 -0600 |
|---|---|---|
| committer | KiritoDv <kiritodev01@gmail.com> | 2025-01-26 20:11:36 -0600 |
| commit | ec017e07800cfd7c411b9725ef1d898ca74e0741 (patch) | |
| tree | 7cb8af14707778c7b72cb595cb9dce3906609740 /src | |
| parent | 7bb9feddd8275fd5417d0ff0d2300ba688fa89b7 (diff) | |
Fixed macro and painting sm64 factories
Diffstat (limited to 'src')
| -rw-r--r-- | src/factories/sm64/MacroFactory.cpp | 56 | ||||
| -rw-r--r-- | src/factories/sm64/MacroFactory.h | 9 | ||||
| -rw-r--r-- | src/factories/sm64/PaintingMapFactory.cpp | 2 | ||||
| -rw-r--r-- | src/factories/sm64/macro/MacroPresets.h | 3 |
4 files changed, 50 insertions, 20 deletions
diff --git a/src/factories/sm64/MacroFactory.cpp b/src/factories/sm64/MacroFactory.cpp index fd9bcfe..a35d9e7 100644 --- a/src/factories/sm64/MacroFactory.cpp +++ b/src/factories/sm64/MacroFactory.cpp @@ -36,7 +36,7 @@ ExportResult SM64::MacroCodeExporter::Export(std::ostream &write, std::shared_pt } write << object.preset << ", "; - write << "CONVERT_YAW(" << object.yaw << "), "; + write << (object.yaw / 1.41) << ", "; write << object.posX << ", "; write << object.posY << ", "; write << object.posZ; @@ -58,46 +58,68 @@ ExportResult SM64::MacroCodeExporter::Export(std::ostream &write, std::shared_pt ExportResult SM64::MacroBinaryExporter::Export(std::ostream &write, std::shared_ptr<IParsedData> raw, std::string& entryName, YAML::Node &node, std::string* replacement ) { auto writer = LUS::BinaryWriter(); - auto macro = std::static_pointer_cast<SM64::MacroData>(raw); + auto macro = std::static_pointer_cast<SM64::MacroDataAlt>(raw); WriteHeader(writer, Torch::ResourceType::MacroObject, 0); writer.Write((uint32_t) macro->mMacroData.size()); + for(auto &entry : macro->mMacroData){ + writer.Write(entry); + } + /* for (auto &object : macro->mMacroData) { writer.Write(static_cast<int16_t>(object.preset)); - writer.Write((int16_t) std::round(object.yaw * 1.41)); + writer.Write(object.yaw); writer.Write(object.posX); writer.Write(object.posY); writer.Write(object.posZ); writer.Write(object.behParam); } - + */ + writer.Finish(write); return std::nullopt; } std::optional<std::shared_ptr<IParsedData>> SM64::MacroFactory::parse(std::vector<uint8_t>& buffer, YAML::Node& node) { - std::vector<MacroObject> macroData; auto [_, segment] = Decompressor::AutoDecode(node, buffer); LUS::BinaryReader reader(segment.data, segment.size); reader.SetEndianness(Torch::Endianness::Big); - while (true) { - auto presetYaw = reader.ReadInt16(); - if (presetYaw == 0x1E) { + std::vector<int16_t> entries; + + while(true) { + int16_t raw = reader.ReadInt16(); + if(raw == 0x1E){ break; } - int16_t yaw = ((presetYaw >> 9) & 0x7F) << 1; - int16_t preset = (presetYaw & 0x1FF) - 0x1F; - - auto posX = reader.ReadInt16(); - auto posY = reader.ReadInt16(); - auto posZ = reader.ReadInt16(); - auto behParam = reader.ReadInt16(); - macroData.emplace_back(static_cast<MacroPresets>(preset), yaw, posX, posY, posZ, behParam); + entries.push_back(raw); } - return std::make_shared<SM64::MacroData>(macroData); + /* + std::vector<MacroObject> macroData; + while (true) { + int16_t presetID = reader.ReadInt16(); + + if(presetID < 0) { + break; + } + + int16_t yRot = reader.ReadInt16(); + int16_t xObj = reader.ReadInt16(); + int16_t yObj = reader.ReadInt16(); + int16_t zObj = reader.ReadInt16(); + int16_t params = reader.ReadInt16(); + + macroData.emplace_back(static_cast<MacroPresets>(presetID), yRot, xObj, yObj, zObj, params); + } + + macroData.emplace_back(MacroPresets::macro_invalid, -1, -1, -1, -1, -1); + + return std::make_shared<SM64::MacroData>(macroData); + */ + + return std::make_shared<SM64::MacroDataAlt>(entries); } diff --git a/src/factories/sm64/MacroFactory.h b/src/factories/sm64/MacroFactory.h index 4881e98..cab9a80 100644 --- a/src/factories/sm64/MacroFactory.h +++ b/src/factories/sm64/MacroFactory.h @@ -23,6 +23,13 @@ public: MacroData(std::vector<MacroObject> macroData) : mMacroData(std::move(macroData)) {} }; +class MacroDataAlt : public IParsedData { +public: + std::vector<int16_t> mMacroData; + + MacroDataAlt(std::vector<int16_t> macroData) : mMacroData(std::move(macroData)) {} +}; + class MacroHeaderExporter : public BaseExporter { ExportResult Export(std::ostream& write, std::shared_ptr<IParsedData> data, std::string& entryName, YAML::Node& node, std::string* replacement) override; }; @@ -40,7 +47,7 @@ public: std::optional<std::shared_ptr<IParsedData>> parse(std::vector<uint8_t>& buffer, YAML::Node& data) override; inline std::unordered_map<ExportType, std::shared_ptr<BaseExporter>> GetExporters() override { return { - REGISTER(Code, MacroCodeExporter) +// REGISTER(Code, MacroCodeExporter) REGISTER(Header, MacroHeaderExporter) REGISTER(Binary, MacroBinaryExporter) }; diff --git a/src/factories/sm64/PaintingMapFactory.cpp b/src/factories/sm64/PaintingMapFactory.cpp index 677906d..407cc9a 100644 --- a/src/factories/sm64/PaintingMapFactory.cpp +++ b/src/factories/sm64/PaintingMapFactory.cpp @@ -39,7 +39,7 @@ ExportResult SM64::PaintingMapCodeExporter::Export(std::ostream &write, std::sha for (auto &group : paintingData->mPaintingGroups) { write << fourSpaceTab; - write << group.x << ", " << group.y << ", " << group.z << ", " << ",\n"; + write << group.x << ", " << group.y << ", " << group.z << ",\n"; } write << "};\n"; diff --git a/src/factories/sm64/macro/MacroPresets.h b/src/factories/sm64/macro/MacroPresets.h index 964e0cc..32166a0 100644 --- a/src/factories/sm64/macro/MacroPresets.h +++ b/src/factories/sm64/macro/MacroPresets.h @@ -370,7 +370,8 @@ enum class MacroPresets { macro_empty_362, macro_empty_363, macro_empty_364, - macro_empty_365 + macro_empty_365, + macro_invalid = -1 }; inline std::ostream& operator<<(std::ostream& out, const MacroPresets& preset) { |
