summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorinspectredc <78732756+inspectredc@users.noreply.github.com>2025-09-29 18:32:20 +0100
committerGitHub <noreply@github.com>2025-09-29 11:32:20 -0600
commit0d6ee079991605b41056cece077bcc051872edb0 (patch)
treeba34d4cb1da369a3dabe60c0492e5f4a2557f187
parentf3febeb691b7a55c190f8fcfc4d8b4dc71574d51 (diff)
Fix Course Extraction and Support BGM field (#198)
* fix courses * unk_1F -> bgm
-rw-r--r--src/factories/fzerox/CourseFactory.cpp35
-rw-r--r--src/factories/fzerox/CourseFactory.h12
2 files changed, 13 insertions, 34 deletions
diff --git a/src/factories/fzerox/CourseFactory.cpp b/src/factories/fzerox/CourseFactory.cpp
index ca7abee..5d22814 100644
--- a/src/factories/fzerox/CourseFactory.cpp
+++ b/src/factories/fzerox/CourseFactory.cpp
@@ -78,7 +78,7 @@ ExportResult FZX::CourseCodeExporter::Export(std::ostream &write, std::shared_pt
write << fourSpaceTab << "{ ";
- for (size_t i = 0; i < 13; i++) {
+ for (size_t i = 0; i < 22; i++) {
if (i != 0) {
write << ", ";
}
@@ -92,7 +92,7 @@ ExportResult FZX::CourseCodeExporter::Export(std::ostream &write, std::shared_pt
write << std::dec << " }, /* File Name */\n";
- write << fourSpaceTab << (int32_t)course->unk_16 << ", " << (int32_t)course->unk_17 << ", " << course->unk_18 << ", " << course->unk_1C << ",\n";
+ write << fourSpaceTab << (int32_t)course->mBgm << ",\n";
write << fourSpaceTab << "{ /* Control Points */\n";
@@ -449,7 +449,7 @@ ExportResult FZX::CourseBinaryExporter::Export(std::ostream &write, std::shared_
writer.Write(nameChar);
}
- writer.Write(course->unk_16);
+ writer.Write(course->mBgm);
for (const auto& controlPointInfo : course->mControlPointInfos) {
writer.Write(controlPointInfo.controlPoint.pos.x);
writer.Write(controlPointInfo.controlPoint.pos.y);
@@ -507,17 +507,8 @@ ExportResult FZX::CourseModdingExporter::Export(std::ostream &write, std::shared
}
out << YAML::EndSeq << YAML::Block << YAML::Dec;
- out << YAML::Key << "unk_16";
- out << YAML::Value << course->unk_16;
-
- out << YAML::Key << "unk_17";
- out << YAML::Value << course->unk_17;
-
- out << YAML::Key << "unk_18";
- out << YAML::Value << course->unk_18;
-
- out << YAML::Key << "unk_1C";
- out << YAML::Value << course->unk_1C;
+ out << YAML::Key << "BGM";
+ out << YAML::Value << course->mBgm;
out << YAML::Key << "ControlPoints";
out << YAML::Value << YAML::BeginSeq;
@@ -613,14 +604,11 @@ std::optional<std::shared_ptr<IParsedData>> FZX::CourseFactory::parse(std::vecto
int8_t flag = reader.ReadInt8();
std::vector<char> fileName;
- for (int32_t i = 0; i < 13; i++) {
+ for (int32_t i = 0; i < 22; i++) {
fileName.push_back(reader.ReadInt8());
}
- int8_t unk_16 = reader.ReadInt8();
- int8_t unk_17 = reader.ReadInt8();
- int32_t unk_18 = reader.ReadInt32();
- int32_t unk_1C = reader.ReadInt32();
+ int8_t bgm = reader.ReadInt8();
std::vector<ControlPointInfo> controlPointInfos;
@@ -657,7 +645,7 @@ std::optional<std::shared_ptr<IParsedData>> FZX::CourseFactory::parse(std::vecto
controlPointInfos.push_back(controlPointInfo);
}
- return std::make_shared<CourseData>(creatorId, venue, skybox, flag, fileName, unk_16, unk_17, unk_18, unk_1C, controlPointInfos);
+ return std::make_shared<CourseData>(creatorId, venue, skybox, flag, fileName, bgm, controlPointInfos);
}
std::optional<std::shared_ptr<IParsedData>> FZX::CourseFactory::parse_modding(std::vector<uint8_t>& buffer, YAML::Node& node) {
@@ -689,10 +677,7 @@ std::optional<std::shared_ptr<IParsedData>> FZX::CourseFactory::parse_modding(st
}
}
- int8_t unk_16 = info["unk_16"].as<int8_t>();
- int8_t unk_17 = info["unk_17"].as<int8_t>();
- int32_t unk_18 = info["unk_18"].as<int32_t>();
- int32_t unk_1C = info["unk_1C"].as<int32_t>();
+ int8_t bgm = info["BGM"].as<int8_t>();
std::vector<ControlPointInfo> controlPointInfos;
@@ -767,5 +752,5 @@ std::optional<std::shared_ptr<IParsedData>> FZX::CourseFactory::parse_modding(st
controlPointInfos.push_back(controlPointInfo);
}
- return std::make_shared<CourseData>(creatorId, venue, skybox, flag, fileName, unk_16, unk_17, unk_18, unk_1C, controlPointInfos);
+ return std::make_shared<CourseData>(creatorId, venue, skybox, flag, fileName, bgm, controlPointInfos);
}
diff --git a/src/factories/fzerox/CourseFactory.h b/src/factories/fzerox/CourseFactory.h
index 90ae89e..28b0ab4 100644
--- a/src/factories/fzerox/CourseFactory.h
+++ b/src/factories/fzerox/CourseFactory.h
@@ -59,22 +59,16 @@ public:
int8_t mSkybox;
int8_t mFlag;
std::vector<char> mFileName;
- int8_t unk_16;
- int8_t unk_17;
- int32_t unk_18;
- int32_t unk_1C;
+ int8_t mBgm;
std::vector<ControlPointInfo> mControlPointInfos;
- CourseData(int8_t creatorId, int8_t venue, int8_t skybox, int8_t flag, std::vector<char> fileName, int8_t unk_16, int8_t unk_17, int32_t unk_18, int32_t unk_1C, std::vector<ControlPointInfo> controlPointInfos) :
+ CourseData(int8_t creatorId, int8_t venue, int8_t skybox, int8_t flag, std::vector<char> fileName, int8_t bgm, std::vector<ControlPointInfo> controlPointInfos) :
mCreatorId(creatorId),
mVenue(venue),
mSkybox(skybox),
mFlag(flag),
mFileName(std::move(fileName)),
- unk_16(unk_16),
- unk_17(unk_17),
- unk_18(unk_18),
- unk_1C(unk_1C),
+ mBgm(bgm),
mControlPointInfos(std::move(controlPointInfos)) {}
uint32_t CalculateChecksum(void);