REDIVIVUS

Proposals / #661

Restore the Mac arrow-modifier lookup's signed numeric return

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

Ghidra vmac 105 · 3bccb89

Mac 0018984c returns a signed 32-bit numeric selection ID, currently undefined4. Its complete 209-byte body explicitly defines full EAX as -1, 0, 27, 31 or 41 on every returning path; conservative CFG propagation yields no unknown value at its sole plain RET. All four callers pass a unit pointer and an integer output address. Two callers preserve the result unchanged through TEST EAX,EAX and JS before signed table bounds, independently proving signed interpretation; another checks the full -1 sentinel. Restore int, retaining the existing two stack arguments, names and cdecl ABI. The complete 164-byte Windows counterpart independently has the same stat selectors, output stores and return values under its existing int contract. All four Mac caller bodies and target bytes are independently decoded; original Windows bytes match the user-owned 1.14d executable. No enum identity, original typedef spelling or runtime behavior claim.

Changes 1, applied together

  1. Set prototype mac 0x0018984c

    signatureundefined4 SKILL_GetArrowModifierSkill(D2UnitStrc * pUnit, int * pnParam)→int SKILL_GetArrowModifierSkill(D2UnitStrc * pUnit, int * pnParam)
    convention__cdecl