REDIVIVUS

Proposals / #683

Recover the Mac chest-flag getter's unit input and byte result

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

Ghidra vmac 105 · 3bccb89

Complete63-byte GetSparklyChestFlag reads one stack input at EBP+8, then MOVZX EAX,BYTE[input+0x78] before bare RET. This is unit.uSideData.pServerSide.bSparkChest (0x64+0x14), an existing byte field. Both direct callers put the unit pointer in their first stack argument; the typed object-operation caller obtains it from sArg.pVictim+4. They consume only AL, testing masks1 and2, so this is a byte mask, not a Boolean-only claim. Restore the missing D2UnitStrc* pUnit formal, cdecl stack ABI and uint8_t return, retaining the chosen function name and unchanged error path. Full getter and both complete callers independently decoded from original Mac database bytes. Windows counterpart already has the unit/uint8_t contract. LINKEDIT DATA ref is nonexecutable. No layout, runtime or matching claim.

Changes 1, applied together

  1. Set prototype mac 0x0027adb3

    signatureundefined GetSparklyChestFlag(void)→uint8_t GetSparklyChestFlag(D2UnitStrc * pUnit)
    conventionunknown→__cdecl