diff options
| author | MegaMech <MegaMech@users.noreply.github.com> | 2024-10-13 17:07:50 -0600 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-10-13 17:07:50 -0600 |
| commit | 90ab0eaaaba99d26961280efb4ea0d3a259ac87a (patch) | |
| tree | 2466e3469f72a89d77cda6b06d6f9c8e155199fe /src | |
| parent | 03809a6e8c2931f4f9f3eee24e0efa527b42b88a (diff) | |
Binary Exporter for Course Metadata (#151)
* Update CourseMetadata.cpp
* Update CourseMetadata.h
* Update ResourceType.h
Diffstat (limited to 'src')
| -rw-r--r-- | src/factories/ResourceType.h | 1 | ||||
| -rw-r--r-- | src/factories/mk64/CourseMetadata.cpp | 71 | ||||
| -rw-r--r-- | src/factories/mk64/CourseMetadata.h | 1 |
3 files changed, 73 insertions, 0 deletions
diff --git a/src/factories/ResourceType.h b/src/factories/ResourceType.h index e3eae80..46f8de6 100644 --- a/src/factories/ResourceType.h +++ b/src/factories/ResourceType.h @@ -41,6 +41,7 @@ enum class ResourceType { WaterDroplet = 0x57545244, // WTRD // MK64 + CourseProperties = 0x43505459, // CPTY CourseVertex = 0x43565458, // CVTX TrackSection = 0x5343544E, // SCTN Waypoints = 0x57505453, // WPTS diff --git a/src/factories/mk64/CourseMetadata.cpp b/src/factories/mk64/CourseMetadata.cpp index 6ee7d9b..971ec18 100644 --- a/src/factories/mk64/CourseMetadata.cpp +++ b/src/factories/mk64/CourseMetadata.cpp @@ -296,6 +296,77 @@ ExportResult MK64::CourseMetadataCodeExporter::Export(std::ostream &write, std:: return std::nullopt; } +ExportResult MK64::CourseMetadataBinaryExporter::Export(std::ostream &write, std::shared_ptr<IParsedData> raw, std::string& entryName, YAML::Node &node, std::string* replacement) { + auto properties = std::static_pointer_cast<MetadataData>(raw); + auto writer = LUS::BinaryWriter(); + + WriteHeader(writer, Torch::ResourceType::CourseProperties, 0); + writer.Write((uint32_t) properties->mMetadata.size()); + + for (auto m : properties->mMetadata) { + writer.Write(m.id); + writer.Write(m.name); + writer.Write(m.debugName); + writer.Write(m.cup); + writer.Write(m.cupIndex); + writer.Write(m.courseLength); + writer.Write(m.kartAIBehaviourLUT); + writer.Write(m.kartAIMaximumSeparation); + writer.Write(m.kartAIMinimumSeparation); + writer.Write(m.D_800DCBB4); + writer.Write(m.steeringSensitivity); + + for (auto b : m.bombKartSpawns) { + writer.Write(b.waypointIndex); + writer.Write(b.startingState); + writer.Write(b.unk_04); + writer.Write(b.x); + writer.Write(b.z); + writer.Write(b.unk10); + writer.Write(b.unk14); + } + + for (auto p : m.pathSizes) { + writer.Write(p); + } + + for (auto s : m.D_0D009418) { + writer.Write(s); + } + + for (auto s : m.D_0D009568) { + writer.Write(s); + } + + for (auto s : m.D_0D0096B8) { + writer.Write(s); + } + + for (auto s : m.D_0D009808) { + writer.Write(s); + } + + for (auto s : m.pathTable) { + writer.Write(s); + } + + for (auto s : m.pathTableUnknown) { + writer.Write(s); + } + + for (auto s : m.skyColors) { + writer.Write(s); + } + + for (auto s : m.skyColors2) { + writer.Write(s); + } + } + + writer.Finish(write); + return std::nullopt; +} + std::optional<std::shared_ptr<IParsedData>> MK64::CourseMetadataFactory::parse(std::vector<uint8_t>& buffer, YAML::Node& node) { auto dir = GetSafeNode<std::string>(node, "input_directory"); diff --git a/src/factories/mk64/CourseMetadata.h b/src/factories/mk64/CourseMetadata.h index 33a7b06..1c4bbb8 100644 --- a/src/factories/mk64/CourseMetadata.h +++ b/src/factories/mk64/CourseMetadata.h @@ -62,6 +62,7 @@ namespace MK64 { inline std::unordered_map<ExportType, std::shared_ptr<BaseExporter>> GetExporters() override { return { REGISTER(Code, CourseMetadataCodeExporter) + REGISTER(Binary, CourseMetadataBinaryExporter) }; } bool SupportModdedAssets() override { return false; } |
