39 lines
1.7 KiB
Python
39 lines
1.7 KiB
Python
"""DIMENSION 4 q6: are the GOTO_* tile destinations consumed by native gate code or
|
|
only handed to the front-end script layer? And what do the draft/tournament mode-node
|
|
factories register?
|
|
|
|
Hypothesis: GOTO_DRAFT_ONLINE/OFFLINE/DISABLED and GOTO_*TOURNAMENT appear ONLY as
|
|
string VALUES passed to the UI property setter in FUN_1800b2680 (no native consumer),
|
|
i.e. the destination is dispatched by the packed front-end -> script layer.
|
|
|
|
Control: GOTO_DRAFT_DISABLED must appear in FUN_1800b2680 (we just read it there).
|
|
"""
|
|
import traceback
|
|
try:
|
|
def whereis(lit):
|
|
hits = find_all(lit.encode() + b"\x00", (".rdata",))
|
|
print("\n--- %r : %d literal hit(s) ---" % (lit, len(hits)))
|
|
for h in hits:
|
|
xs = xrefs_to(h)
|
|
if not xs:
|
|
print(" @%#x NO xref (string only referenced by offset math / not a lea target)" % h)
|
|
for frm, typ, fn, ent in xs:
|
|
print(" @%#x xref from %#x %s in %s (%#x)" % (h, frm, typ, fn, ent))
|
|
|
|
for s in ("GOTO_DRAFT_ONLINE", "GOTO_DRAFT_OFFLINE", "GOTO_DRAFT_DISABLED",
|
|
"GOTO_OFFLINE_TOURNAMENT", "GOTO_ONLINE_CHAMPIONS", "GOTO_OFFLINE_SEASON",
|
|
"GOTO_ONLINE_SEASON"):
|
|
whereis(s)
|
|
|
|
# the draft mode-node factories (reference fefifa::FUTOnlineDraftMode / OfflineMode)
|
|
for a, lbl in [(0x18006b820, "FUN_18006b820 (FUTOnlineDraftMode node)"),
|
|
(0x18006b960, "FUN_18006b960 (FUTDraftOfflineMode node)"),
|
|
(0x18006baa0, "FUN_18006baa0 (FUTOfflineTournament node)"),
|
|
(0x18006bd20, "FUN_18006bd20 (FUTOnlineTournament node)")]:
|
|
d = dec(a)
|
|
print("\n=== %s len=%d ===" % (lbl, len(d)))
|
|
print(d)
|
|
except Exception:
|
|
traceback.print_exc()
|
|
print("QUERY_DONE")
|