summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMegaMech <MegaMech@users.noreply.github.com>2024-10-13 17:07:50 -0600
committerGitHub <noreply@github.com>2024-10-13 17:07:50 -0600
commit90ab0eaaaba99d26961280efb4ea0d3a259ac87a (patch)
tree2466e3469f72a89d77cda6b06d6f9c8e155199fe /src
parent03809a6e8c2931f4f9f3eee24e0efa527b42b88a (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.h1
-rw-r--r--src/factories/mk64/CourseMetadata.cpp71
-rw-r--r--src/factories/mk64/CourseMetadata.h1
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; }