"""Q24: FUN_180119bd0 -- the cardtype-7 name resolver. This should BE the mapping. The manager vtable was read out of the live process (read-only): DAT_1802e6398 -> object -> vtable static 0x18021c2a0, with +0x490 = FUN_18011a860 (cardtype switch 1,2,3,4,5,10 -- no club arm) +0x498 = FUN_180119bd0 (called ONLY when +0x490 returned empty AND cardtype==7, with args (cardsubtypeid, teamid, assetId)) +0xa08 = FUN_18011cca0 (file a parsed item) +0xa38 = FUN_180113e40 (register trophy: (tournamentId, subtype, name)) +0xa40 = FUN_18011bf40 (lookup by resourceId) Decompile 0x498, 0xa38, 0xa40 and 0xa08. CONTROL: FUN_18011a860 must be the same function Q11 dumped (12905 chars) with the cardtype switch; that is what makes the 0x498 fallback meaningful. """ import traceback try: for a, tag in [(0x180119BD0, "+0x498 club-item name resolver"), (0x180113E40, "+0xa38 trophy register"), (0x18011BF40, "+0xa40 lookup by resourceId"), (0x18011CCA0, "+0xa08 file parsed item")]: src = dec(a) print("=" * 78) print("%s FUN_%x len=%d" % (tag, a, len(src))) print(src if len(src) < 14000 else src[:14000] + "\n...[cut, len above]") print("=" * 78) print("control: FUN_18011a860 len=%d" % len(dec(0x18011A860))) except Exception: traceback.print_exc()