REDIVIVUS

Proposals / #774

Recover Mac roster level and flag getter contracts

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

Ghidra vmac 109 · 39698f0

Three Mac roster getters have undefined returns and int pRoster inputs. Preserve each selected pRoster name, existing single Stack4 formal and cdecl convention; type the input D2RosterStrc*. Level00075558 zero-extends WORD+0x20 into full EAX or returns0. Loot00075602/listen00075642 return0 fornull, otherwise GetFlag’s full EAX masked with1/2. The complete native helper ANDs its32-bit mask with DWORD flags; loot yields0/1 and listen0/2. All return uint32_t, and all11 caller sites consume full EAX. Complete raw Mac memory matches separate assembly for targets, four callers and relevant producer/callee paths; all19 PIC switch entries and every input/return route were verified. Inputs resolve only to existing typed roster traversal ornull. Current roster GUID+0x10 and level+0x20 fields agree. No selected-name, unused-formal, shared-layout or implicit-register helper change; no Windows ABI, Mac runtime or build claim.

Changes 3, applied together

  1. Set prototype mac 0x00075558

    signatureundefined ROSTER_GetLevel(int pRoster)→uint32_t ROSTER_GetLevel(D2RosterStrc * pRoster)
    convention__cdecl
  2. Set prototype mac 0x00075602

    signatureundefined ROSTER_GetLootFlag(int pRoster)→uint32_t ROSTER_GetLootFlag(D2RosterStrc * pRoster)
    convention__cdecl
  3. Set prototype mac 0x00075642

    signatureundefined ROSTER_GetListenFlag(int pRoster)→uint32_t ROSTER_GetListenFlag(D2RosterStrc * pRoster)
    convention__cdecl