REDIVIVUS

Proposals / #1016

QUESTLOG_HitTestCloseButton returns bool, not int32_t

stale · by Nugwa628 · submitted 2026-11-02

The return change is right (both exits set only AL and the one caller tests AL), but the parameters have since been renamed to nPanelY/nPanelX, so the expected signature no longer matches and applying this one would revert those names. Please resubmit as bool QUESTLOG_HitTestCloseButton(int32_t nPanelY, int32_t nPanelX), keeping the ECX/EAX storage.

Both exits set AL only: 004a2625 MOV AL,1 / 004a2627 RET and 004a2628 XOR AL,AL / 004a262a RET (the upper bytes of EAX keep nParam2 - 0xe6 from 004a2610 ADD EAX,0xffffff1a). The one caller tests the byte: 004a3f98 CALL 0x004a2610 / 004a3f9d TEST AL,AL / 004a3f9f JE. The int32 return is Ghidra's CONCAT31 of the stale upper bytes. Return type only; parameter storage (EAX/ECX) unchanged. Recompiled with VC8, 004a2610 then matches byte for byte.

Changes 1, applied together

  1. Set prototype win 0x004a2610

    signatureint32_t QUESTLOG_HitTestCloseButton(int32_t nParam1, int32_t nParam2)→bool QUESTLOG_HitTestCloseButton(int32_t nParam1, int32_t nParam2)
    convention__cdecl