summaryrefslogtreecommitdiff
path: root/src/factories/DisplayListOverrides.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/factories/DisplayListOverrides.cpp')
-rw-r--r--src/factories/DisplayListOverrides.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/factories/DisplayListOverrides.cpp b/src/factories/DisplayListOverrides.cpp
index 45bd1a9..2c82481 100644
--- a/src/factories/DisplayListOverrides.cpp
+++ b/src/factories/DisplayListOverrides.cpp
@@ -73,6 +73,26 @@ int Vtx(uint32_t ptr, int32_t num) {
return 1;
}
+ if (IS_SEGMENTED(ptr) && Companion::Instance->GetCompressedSegmentOffset(&ptr)) {
+ vtx = GetVtxOverlap(ptr);
+ if (vtx.has_value()) {
+ auto symbol = std::get<0>(vtx.value());
+ auto node = std::get<1>(vtx.value());
+
+ auto offset = GetSafeNode<uint32_t>(node, "offset");
+ auto count = GetSafeNode<uint32_t>(node, "count");
+ auto idx = (ptr - offset) / sizeof(N64Vtx_t);
+
+ SPDLOG_INFO("Replaced Vtx Overlapped: 0x{:X} Symbol: {}", ptr, symbol);
+ gfxd_puts("&");
+ gfxd_puts(symbol.c_str());
+ gfxd_puts("[");
+ gfxd_puts(std::to_string(idx).c_str());
+ gfxd_puts("]");
+ return 1;
+ }
+ }
+
auto dec = Companion::Instance->GetSafeNodeByAddr(ptr, "VTX");
if (dec.has_value()) {