REDIVIVUS

Proposals / #765

Recover Mac roster getter pointer and scalar return contracts

applied · by Commit-Will · submitted 2026-11-01, applied 2026-11-02

Ghidra vmac 109 · 39698f0

Three Mac roster getters have complete19/20/19-byte bodies but undefined returns and int pRoster inputs. Each already has one cdecl Stack4 pRoster formal; preserve that name, slot, arity and convention while typing D2RosterStrc*. Class reads DWORD+0x1c or returns0; GUID reads DWORD+0x10 or returns-1; level reads DWORD+0x24 or returns0. Every path defines full EAX, and all8 direct caller sites consume its32-bit value. Returns match existing Mac field types: int32_t class/GUID and eD2LevelId level. Complete raw Mac database bytes were independently decoded and matched to separate assembly for all targets, four callers and three producers; all41 PIC switch entries and all caller input/output dataflows were verified. Inputs resolve only to the typed roster head/next or GUID lookup. Additional xrefs are nonexecuting LINKEDIT ULEB metadata. No selected name, unused formal, shared layout or Windows ABI change; static proof only, no Mac runtime/build claim.

Changes 3, applied together

  1. Set prototype mac 0x0007556c

    signatureundefined ROSTER_GetClassId(int pRoster)→int32_t ROSTER_GetClassId(D2RosterStrc * pRoster)
    convention__cdecl
  2. Set prototype mac 0x00075bdf

    signatureundefined ROSTER_GetUnitId(int pRoster)→int32_t ROSTER_GetUnitId(D2RosterStrc * pRoster)
    convention__cdecl
  3. Set prototype mac 0x00075cbf

    signatureundefined ROSTER_GetLevelId(int pRoster)→eD2LevelId ROSTER_GetLevelId(D2RosterStrc * pRoster)
    convention__cdecl