summaryrefslogtreecommitdiff
path: root/src/Companion.cpp
diff options
context:
space:
mode:
authorKiritoDv <kiritodev01@gmail.com>2023-11-22 10:49:30 -0600
committerLywx <kiritodev01@gmail.com>2024-01-31 12:05:40 -0600
commitc54ef39005eabc17921436f3cc2482ef8efb0bcd (patch)
tree0cbd1d211b121f7c9ffbe37596a40f895d57e399 /src/Companion.cpp
parent57f61f8e659196586c0bf33bb00765ece006ef9d (diff)
Removed GBI, added GeoLayout and Lights extraction
Diffstat (limited to 'src/Companion.cpp')
-rw-r--r--src/Companion.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/Companion.cpp b/src/Companion.cpp
index 992445a..8c838fa 100644
--- a/src/Companion.cpp
+++ b/src/Companion.cpp
@@ -77,6 +77,14 @@ void Companion::ExtractNode(YAML::Node& node, std::string& name, SWrapper* binar
return;
}
+ if(node["segments"]) {
+ for(auto segment = node["segments"].begin(); segment != node["segments"].end(); ++segment) {
+ auto id = std::stoi(segment->first.as<std::string>().substr(3));
+ auto replacement = segment->second.as<uint32_t>();
+ this->gTemporalSegments[id] = replacement;
+ }
+ }
+
auto result = factory->get()->parse(this->gRomData, node);
if(!result.has_value()){
SPDLOG_ERROR("Failed to process {}", name);
@@ -265,6 +273,7 @@ void Companion::Process() {
std::string output = (this->gCurrentDirectory / entryName).string();
std::replace(output.begin(), output.end(), '\\', '/');
+ this->gTemporalSegments.clear();
this->ExtractNode(asset->second, output, wrapper);
}
@@ -439,6 +448,11 @@ std::optional<std::shared_ptr<BaseFactory>> Companion::GetFactory(const std::str
}
std::optional<std::uint32_t> Companion::GetSegmentedAddr(const uint8_t segment) {
+
+ if(this->gTemporalSegments.contains(segment)) {
+ return this->gTemporalSegments[segment];
+ }
+
if(segment >= this->gSegments.size()) {
return std::nullopt;
}