mirror of
https://github.com/diasurgical/devilution.git
synced 2025-07-23 12:33:00 +02:00
152 lines
4.3 KiB
C++
152 lines
4.3 KiB
C++
// ref: 0x10009D66
|
|
LRESULT __stdcall SelClass_WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
HWND v4; // eax
|
|
int v5; // edx
|
|
HWND v6; // eax
|
|
HWND v7; // eax
|
|
HWND v9; // eax
|
|
|
|
if (Msg == 2) {
|
|
SelClass_FreeClassMsgTbl(hWnd);
|
|
return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam);
|
|
}
|
|
if (Msg <= 0x103)
|
|
return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam);
|
|
if (Msg <= 0x105) {
|
|
v9 = (HWND)SDrawGetFrameWindow(NULL);
|
|
SendMessageA(v9, Msg, wParam, lParam);
|
|
return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam);
|
|
}
|
|
if (Msg == 272) {
|
|
SelClass_LoadClassFocus(hWnd);
|
|
return 0;
|
|
}
|
|
if (Msg != 273) {
|
|
if (Msg != 275) {
|
|
if (Msg == 513) {
|
|
v4 = GetDlgItem(hWnd, 1056);
|
|
if (local_GetBottomRect(hWnd, v4, (unsigned short)lParam, (unsigned int)lParam >> 16)) {
|
|
v5 = 1;
|
|
LABEL_19:
|
|
SelClass_CheckClassSpawn(hWnd, v5);
|
|
return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam);
|
|
}
|
|
v6 = GetDlgItem(hWnd, 1054);
|
|
if (local_GetBottomRect(hWnd, v6, (unsigned short)lParam, (unsigned int)lParam >> 16)) {
|
|
LABEL_21:
|
|
v5 = 2;
|
|
goto LABEL_19;
|
|
}
|
|
}
|
|
return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam);
|
|
}
|
|
v7 = GetFocus();
|
|
Focus_DoBlitSpinIncFrame(hWnd, v7);
|
|
return 0;
|
|
}
|
|
if (HIWORD(wParam) == 7) {
|
|
Focus_GetAndBlitSpin(hWnd, lParam);
|
|
} else {
|
|
if (HIWORD(wParam) != 6) {
|
|
v5 = 1;
|
|
if (HIWORD(wParam) == 5 || (WORD)wParam == 1)
|
|
goto LABEL_19;
|
|
if ((WORD)wParam != 2)
|
|
return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam);
|
|
goto LABEL_21;
|
|
}
|
|
Focus_CheckPlayMove(lParam);
|
|
Focus_DoBlitSpinIncFrame(hWnd, (HWND)lParam);
|
|
SelClass_SetDefaultStats(hWnd, (unsigned short)wParam);
|
|
}
|
|
return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam);
|
|
}
|
|
// 10010382: using guessed type DWORD __stdcall SDrawGetFrameWindow();
|
|
|
|
// ref: 0x10009EC0
|
|
void __fastcall SelClass_FreeClassMsgTbl(HWND hWnd)
|
|
{
|
|
HWND v2; // eax
|
|
|
|
Focus_DeleteSpinners();
|
|
Doom_DeleteFreeProcs(hWnd, selclass_msgtbl3);
|
|
Doom_DeleteFreeProcs(hWnd, selclass_msgtbl2);
|
|
Doom_DeleteFreeProcs(hWnd, selclass_msgtbl1);
|
|
v2 = GetParent(hWnd);
|
|
SelHero_SetStringWithMsg(v2, 0);
|
|
}
|
|
|
|
// ref: 0x10009EFD
|
|
void __fastcall SelClass_LoadClassFocus(HWND hWnd)
|
|
{
|
|
HWND v1; // edi
|
|
HWND v2; // esi
|
|
LONG v3; // eax
|
|
char Buffer[32]; // [esp+8h] [ebp-20h]
|
|
|
|
v1 = hWnd;
|
|
v2 = GetParent(hWnd);
|
|
if (SelHero_GetHeroIsGood() == 1)
|
|
LoadStringA(ghUiInst, 0x20u, Buffer, 31);
|
|
else
|
|
LoadStringA(ghUiInst, 0x1Fu, Buffer, 31);
|
|
SelHero_SetStringWithMsg(v2, Buffer);
|
|
v3 = GetWindowLongA(v2, -21);
|
|
SetWindowLongA(v1, -21, v3);
|
|
local_DoUiWndProc(v1, (DWORD *)selclass_msgtbl3);
|
|
Doom_ParseWndProc3(v1, selclass_msgtbl1, AF_BIGGRAY);
|
|
Doom_ParseWndProcs(v1, selclass_msgtbl2, AF_BIG, 0);
|
|
Doom_ParseWndProcs(v1, selclass_msgtbl3, AF_MED, 1);
|
|
Focus_LoadSpinner("ui_art\\focus.pcx");
|
|
SDlgSetTimer((int)v1, 1, 55, 0);
|
|
}
|
|
|
|
// ref: 0x10009FA2
|
|
void __fastcall SelClass_SetDefaultStats(HWND hWnd, int a2)
|
|
{
|
|
char v2; // bl
|
|
HWND v4; // eax
|
|
_uiheroinfo pInfo; // [esp+8h] [ebp-34h]
|
|
_uidefaultstats a2a; // [esp+34h] [ebp-8h]
|
|
|
|
v2 = a2;
|
|
SelHero_SetClassStats(a2 - 1062, &a2a);
|
|
memset(&pInfo, 0, 0x2Cu);
|
|
pInfo.strength = a2a.strength;
|
|
pInfo.magic = a2a.magic;
|
|
pInfo.dexterity = a2a.dexterity;
|
|
pInfo.vitality = a2a.vitality;
|
|
pInfo.level = 1;
|
|
pInfo.heroclass = v2 - 38;
|
|
v4 = GetParent(hWnd);
|
|
SelHero_PrintHeroInfo(v4, &pInfo);
|
|
}
|
|
|
|
// ref: 0x1000A00D
|
|
void __fastcall SelClass_CheckClassSpawn(HWND hWnd, int a2)
|
|
{
|
|
HWND v4; // eax
|
|
HWND v5; // eax
|
|
|
|
if (DiabloUI_GetSpawned() && a2 == 1 && (v4 = GetFocus(), GetWindowLongA(v4, -12) != 1062)) {
|
|
SelYesNo_SpawnErrDialog(hWnd, 69, 0);
|
|
} else {
|
|
TitleSnd_PlaySelectSound();
|
|
SDlgKillTimer((int)hWnd, 1);
|
|
if (a2 == 1) {
|
|
v5 = GetFocus();
|
|
a2 = GetWindowLongA(v5, -12);
|
|
}
|
|
SDlgEndDialog(hWnd, (HANDLE)a2);
|
|
}
|
|
}
|
|
|
|
// ref: 0x1000A077
|
|
void __cdecl SelClass_cpp_init()
|
|
{
|
|
SelClass_cpp_float = SelClass_cpp_float_value;
|
|
}
|
|
// 1001F450: using guessed type int SelClass_cpp_float_value;
|
|
// 1002A348: using guessed type int SelClass_cpp_float;
|