Add option to process DLs with indexes instead of offsets (#131)

* Update DisplayListFactory.cpp

* Update gbi-otr.h

* Update gbi-otr.h

* Update DisplayListFactory.cpp

* Update gbi-otr.h

* Update DisplayListFactory.cpp

* Update gbi-otr.h

* Update gbi-otr.h

* Update DisplayListFactory.cpp

* Update gbi-otr.h

* Update DisplayListFactory.cpp
This commit is contained in:
MegaMech
2024-06-10 22:03:09 -06:00
committed by GitHub
parent 2929503ee3
commit fe1ce26c02
2 changed files with 25 additions and 3 deletions
+17 -3
View File
@@ -296,9 +296,23 @@ ExportResult DListBinaryExporter::Export(std::ostream &write, std::shared_ptr<IP
auto dec = Companion::Instance->GetNodeByAddr(ptr);
auto branch = (w0 >> 16) & G_DL_NO_PUSH;
value = gsSPDisplayListOTRHash(ptr);
w0 = value.words.w0;
w1 = value.words.w1;
Gfx value;
if (node["otr_mode"]) {
auto str = node["otr_mode"].as<std::string>();
// Too lower case
std::transform(str.begin(), str.end(), str.begin(), [](unsigned char c){ return std::tolower(c); });
if (str == "index") {
value = gsSPDisplayListOTRIndex(w1);
} else {
value = gsSPDisplayListOTRHash(ptr);
}
w0 = value.words.w0;
w1 = value.words.w1;
} else {
value = gsSPDisplayListOTRHash(ptr);
w0 = value.words.w0;
w1 = value.words.w1;
}
writer.Write(w0);
writer.Write(w1);
+8
View File
@@ -19,6 +19,7 @@
#define G_MTX_OTR 0x36
#define G_TEXRECT_WIDE 0x37
#define G_FILLWIDERECT 0x38
#define G_DL_OTR_INDEX 0x3D
#define G_MOVEMEM_OTR_HASH 0x42
// DL FLAGS
@@ -162,6 +163,13 @@ _DW({
(uintptr_t)(dl) \
}}
#define gsSPDisplayListOTRIndex(dl) \
{{ \
(_SHIFTL((G_DL_OTR_INDEX), 24, 8) | _SHIFTL((0x00), 16, 8) | \
_SHIFTL((0), 0, 16)), \
(uintptr_t)((SEGMENT_NUMBER(dl) << 24) | ((SEGMENT_OFFSET(dl) / 8) & 0x00FFFFFF)) \
}}
#define gsSPDisplayListOTRFilePath(dl) \
{{ \
(_SHIFTL((G_DL_OTR_FILEPATH), 24, 8) | _SHIFTL((0x00), 16, 8) | \