You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
203 lines
5.6 KiB
203 lines
5.6 KiB
// ref: 0x1000FA49 |
|
int __fastcall SelYesNo_YesNoDialog(HWND hWnd, char *dialogstr, char *hero, int nofocus) |
|
{ |
|
yesno_dialog_string = dialogstr; |
|
yesno_hero_name = hero; |
|
yesno_remove_focus = nofocus; |
|
yesno_is_popup = 0; |
|
YesNoFunc = 0; |
|
return SDlgDialogBoxParam(ghUiInst, "SELYESNO_DIALOG", (int)hWnd, SelYesNo_WndProc, 0); |
|
} |
|
// 1002A500: using guessed type int yesno_remove_focus; |
|
// 1002A508: using guessed type int (*YesNoFunc)(void); |
|
// 1002A50C: using guessed type int yesno_is_popup; |
|
|
|
// ref: 0x1000FA87 |
|
LRESULT __stdcall SelYesNo_WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) |
|
{ |
|
HWND v4; // eax |
|
HWND v5; // eax |
|
int v7; // edx |
|
HWND v8; // eax |
|
LONG v9; // eax |
|
HWND v10; // ecx |
|
HWND v11; // eax |
|
|
|
if (Msg == 2) { |
|
SelYesNo_RemoveYNDialog(hWnd); |
|
return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); |
|
} |
|
if (Msg > 0x103) { |
|
if (Msg <= 0x105) { |
|
v11 = (HWND)SDrawGetFrameWindow(NULL); |
|
SendMessageA(v11, Msg, wParam, lParam); |
|
return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); |
|
} |
|
switch (Msg) { |
|
case 0x110u: |
|
SelYesNo_LoadSelYN_GFX(hWnd); |
|
return 0; |
|
case 0x111u: |
|
if (HIWORD(wParam) == 7) { |
|
Focus_GetAndBlitSpin(hWnd, lParam); |
|
} else if (HIWORD(wParam) == 6) { |
|
Focus_CheckPlayMove(lParam); |
|
Focus_DoBlitSpinIncFrame(hWnd, (HWND)lParam); |
|
} else { |
|
v7 = 1; |
|
if ((WORD)wParam == 1) { |
|
v8 = GetFocus(); |
|
v9 = GetWindowLongA(v8, -12); |
|
v10 = hWnd; |
|
if (v9 == 1109) |
|
v7 = 1; |
|
else |
|
v7 = 2; |
|
} else { |
|
if ((WORD)wParam == 2) { |
|
v7 = 2; |
|
} else if ((WORD)wParam != 1109) { |
|
return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); |
|
} |
|
v10 = hWnd; |
|
} |
|
SelYesNo_DoSelectYesNo(v10, v7); |
|
} |
|
break; |
|
case 0x113u: |
|
v4 = GetFocus(); |
|
if (!Focus_DoBlitSpinIncFrame(hWnd, v4)) { |
|
v5 = GetDlgItem(hWnd, 1109); |
|
if (!v5) |
|
v5 = GetDlgItem(hWnd, 2); |
|
SetFocus(v5); |
|
} |
|
return 0; |
|
} |
|
} |
|
return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); |
|
} |
|
// 10010382: using guessed type DWORD __stdcall SDrawGetFrameWindow(); |
|
|
|
// ref: 0x1000FBC7 |
|
void __fastcall SelYesNo_RemoveYNDialog(HWND hWnd) |
|
{ |
|
HWND v1; // esi |
|
void **v2; // eax |
|
HWND v3; // eax |
|
|
|
v1 = hWnd; |
|
v2 = (void **)GetWindowLongA(hWnd, -21); |
|
local_FreeMemPtr(v2); |
|
if (yesno_remove_focus) |
|
Focus_DeleteSpinners(); |
|
Doom_DeleteFreeProcs(v1, yesno_msgtbl1); |
|
Doom_DeleteFreeProcs(v1, yesno_msgtbl2); |
|
if (yesno_hero_name) { |
|
v3 = GetParent(v1); |
|
SelHero_SetStringWithMsg(v3, 0); |
|
} |
|
} |
|
// 1002A500: using guessed type int yesno_remove_focus; |
|
|
|
// ref: 0x1000FC1C |
|
void __fastcall SelYesNo_LoadSelYN_GFX(HWND hWnd) |
|
{ |
|
HWND v2; // eax |
|
DWORD *v3; // eax |
|
DWORD *v4; // edi |
|
const char *v5; // eax |
|
char *v6; // ST18_4 |
|
HWND v7; // eax |
|
|
|
v2 = GetParent(hWnd); |
|
if (yesno_hero_name) |
|
SelHero_SetStringWithMsg(v2, yesno_hero_name); |
|
v3 = local_AllocWndLongData(); |
|
v4 = v3; |
|
if (v3) { |
|
SetWindowLongA(hWnd, -21, (LONG)v3); |
|
if (yesno_is_popup) { |
|
if (DiabloUI_GetSpawned()) |
|
v5 = "ui_art\\swmmpop.pcx"; |
|
else |
|
v5 = "ui_art\\mmpopup.pcx"; |
|
} else { |
|
v5 = "ui_art\\black.pcx"; |
|
} |
|
local_LoadArtWithPal(hWnd, 0, "Popup", -1, 1, v5, (BYTE **)v4, v4 + 1, 1); |
|
} |
|
v6 = yesno_dialog_string; |
|
v7 = GetDlgItem(hWnd, 1026); |
|
SetWindowTextA(v7, v6); |
|
Doom_ParseWndProc3(hWnd, yesno_msgtbl2, AF_MEDGRAY); |
|
Doom_ParseWndProcs(hWnd, yesno_msgtbl1, AF_BIG, 1); |
|
if (yesno_remove_focus) |
|
Focus_LoadSpinner("ui_art\\focus.pcx"); |
|
else |
|
Focus_ResetSpinToZero(); |
|
SDlgSetTimer((int)hWnd, 1, 55, 0); |
|
local_DoUiWndProc2(hWnd, (DWORD *)yesno_msgtbl1); |
|
} |
|
// 1002A500: using guessed type int yesno_remove_focus; |
|
// 1002A50C: using guessed type int yesno_is_popup; |
|
|
|
// ref: 0x1000FCF6 |
|
void __fastcall SelYesNo_DoSelectYesNo(HWND hWnd, int option) |
|
{ |
|
HWND v4; // eax |
|
|
|
TitleSnd_PlaySelectSound(); |
|
SDlgKillTimer((int)hWnd, 1); |
|
if (option == 2) { |
|
if (!YesNoFunc) |
|
goto LABEL_6; |
|
YesNoFunc(); |
|
} |
|
if (option == 1) { |
|
v4 = GetFocus(); |
|
option = GetWindowLongA(v4, -12); |
|
} |
|
LABEL_6: |
|
SDlgEndDialog(hWnd, (HANDLE)option); |
|
} |
|
// 1002A508: using guessed type int (*YesNoFunc)(void); |
|
|
|
// ref: 0x1000FD39 |
|
int __fastcall SelYesNo_SelOkDialog(HWND hWnd, char *dialogstr, char *hero, int nofocus) |
|
{ |
|
yesno_dialog_string = dialogstr; |
|
yesno_hero_name = hero; |
|
yesno_remove_focus = nofocus; |
|
yesno_is_popup = 0; |
|
YesNoFunc = 0; |
|
return SDlgDialogBoxParam(ghUiInst, "SELOK_DIALOG", (int)hWnd, SelYesNo_WndProc, 0); |
|
} |
|
// 1002A500: using guessed type int yesno_remove_focus; |
|
// 1002A508: using guessed type int (*YesNoFunc)(void); |
|
// 1002A50C: using guessed type int yesno_is_popup; |
|
|
|
// ref: 0x1000FD77 |
|
int __fastcall SelYesNo_SpawnErrDialog(HWND hWnd, int string_rsrc, int is_popup) |
|
{ |
|
char Buffer[256]; // [esp+4h] [ebp-100h] |
|
|
|
LoadStringA(ghUiInst, string_rsrc, Buffer, 255); |
|
yesno_is_popup = is_popup; |
|
yesno_remove_focus = 0; |
|
yesno_hero_name = 0; |
|
yesno_dialog_string = Buffer; |
|
YesNoFunc = 0; |
|
return SDlgDialogBoxParam(ghUiInst, "SPAWNERR_DIALOG", (int)hWnd, SelYesNo_WndProc, 0); |
|
} |
|
// 1002A500: using guessed type int yesno_remove_focus; |
|
// 1002A508: using guessed type int (*YesNoFunc)(void); |
|
// 1002A50C: using guessed type int yesno_is_popup; |
|
|
|
// ref: 0x1000FDE3 |
|
void __cdecl SelYesNo_cpp_init() |
|
{ |
|
SelYesNo_cpp_float = SelYesNo_cpp_float_value; |
|
} |
|
// 1001F478: using guessed type int SelYesNo_cpp_float_value; |
|
// 1002A4FC: using guessed type int SelYesNo_cpp_float;
|
|
|