REDIVIVUS

Proposals / #1244

TEXT_GetMessageByIndex and OVERHEAD_GetMessageType0/1 return ushort, not uint32_t

checked · by Nugwa628 · submitted 2026-11-05

Every return path writes only AX, the upper half of EAX still holds the entry pointer: 006613e6 MOV AX,0xe8c / 006613ee MOV AX,word ptr [EAX] (RET 8); 00661426 OR AX,0xffff / 0066142e MOV AX,word ptr [EAX] (RET 8); 00661466 OR AX,0xffff / 0066146e MOV AX,word ptr [EAX] (RET 8). All 6 call sites read AX only: TEXT_GetMessageByIndex 004b1b0b -> 004b1b17 MOVZX ESI,AX, 004b59a8 -> 004b59ba MOVZX ECX,AX; GetMessageType0 004b185e -> 004b1863 MOVZX EAX,AX / CMP AX,0xffff, 004b18a6 -> 004b18ab MOVZX EAX,AX, 004b6ee6 -> 004b6ef5 MOVZX EDI,AX; GetMessageType1 004b6fe7 -> 004b6ff3 MOVZX EDI,AX. Resubmitted after the #27 validator fix (dd259de).

Changes 3, applied together

  1. Set prototype win 0x006613c0

    signatureuint32_t TEXT_GetMessageByIndex(D2GSPacketSrv0x27_TextStrc * pMsgList, int32_t nTargetIndex)→ushort TEXT_GetMessageByIndex(D2GSPacketSrv0x27_TextStrc * pMsgList, int32_t nTargetIndex)
    convention__stdcall
  2. Set prototype win 0x00661400

    signatureuint32_t OVERHEAD_GetMessageType0(D2GSPacketSrv0x27_TextStrc * pGSPacketSrv0x27_Text, int32_t nIndex)→ushort OVERHEAD_GetMessageType0(D2GSPacketSrv0x27_TextStrc * pGSPacketSrv0x27_Text, int32_t nIndex)
    convention__stdcall
  3. Set prototype win 0x00661440

    signatureuint32_t OVERHEAD_GetMessageType1(D2GSPacketSrv0x27_TextStrc * pGSPacketSrv0x27_Text, int32_t nTargetIndex)→ushort OVERHEAD_GetMessageType1(D2GSPacketSrv0x27_TextStrc * pGSPacketSrv0x27_Text, int32_t nTargetIndex)
    convention__stdcall