diff options
| author | KiritoDv <kiritodev01@gmail.com> | 2024-06-09 10:25:48 -0600 |
|---|---|---|
| committer | KiritoDv <kiritodev01@gmail.com> | 2024-06-09 10:25:48 -0600 |
| commit | 97b2fb2291bc25e79fa92e9242ae2e6be52a50bf (patch) | |
| tree | fc8ac276cf5da0d2a455e7cf1e9f761c44ed03a5 /src/factories | |
| parent | 966e5b38d2132bc6057633d7794d817bd0517efe (diff) | |
Translated branch to dlist + end_dl
Diffstat (limited to 'src/factories')
| -rw-r--r-- | src/factories/DisplayListFactory.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/factories/DisplayListFactory.cpp b/src/factories/DisplayListFactory.cpp index 088ff1d..dfc3fb8 100644 --- a/src/factories/DisplayListFactory.cpp +++ b/src/factories/DisplayListFactory.cpp @@ -291,10 +291,12 @@ ExportResult DListBinaryExporter::Export(std::ostream &write, std::shared_ptr<IP } if(opcode == GBI(G_DL)) { + Gfx value; auto ptr = w1; auto dec = Companion::Instance->GetNodeByAddr(ptr); + auto branch = (w0 >> 16) & G_DL_NO_PUSH; - Gfx value = gsSPDisplayListOTRHash(ptr); + value = gsSPDisplayListOTRHash(ptr); w0 = value.words.w0; w1 = value.words.w1; @@ -309,6 +311,15 @@ ExportResult DListBinaryExporter::Export(std::ostream &write, std::shared_ptr<IP } else { SPDLOG_WARN("Could not find display list at 0x{:X}", ptr); } + + if(branch){ + writer.Write(w0); + writer.Write(w1); + + value = gsSPRawOpcode(GBI(G_ENDDL)); + w0 = value.words.w0; + w1 = value.words.w1; + } } if(opcode == GBI(G_MOVEMEM)) { |
