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.
 
 
 
 
 
 

658 lines
16 KiB

// ref: 0x1000D769
void __cdecl SelList_cpp_init()
{
SelList_cpp_float = SelList_cpp_float_value;
}
// 1001F468: using guessed type int SelList_cpp_float_value;
// 1002A4C0: using guessed type int SelList_cpp_float;
// ref: 0x1000D774
LRESULT __stdcall SelList_WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
HWND v4; // eax
char *v5; // eax
int v6; // edx
HWND v8; // eax
HWND v9; // eax
if (Msg > 0x111) {
if (Msg == 275) {
v9 = GetFocus();
Focus_DoBlitSpinIncFrame(hWnd, v9);
return 0;
}
if (Msg != 513) {
if (Msg == 514) {
v8 = GetDlgItem(hWnd, 1105);
if (!Sbar_CheckIfNextHero(v8))
return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam);
goto LABEL_23;
}
if (Msg != 515)
return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam);
}
SelList_ChooseDlgFromSize(hWnd, (unsigned short)lParam, (unsigned int)lParam >> 16);
return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam);
}
switch (Msg) {
case 0x111u:
if (HIWORD(wParam) == 7) {
Focus_GetAndBlitSpin(hWnd, lParam);
return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam);
}
if (HIWORD(wParam) != 6) {
v6 = 1;
if (HIWORD(wParam) != 5 && (WORD)wParam != 1) {
v6 = 2;
if ((WORD)wParam != 2)
return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam);
}
LABEL_25:
OkCancel_PlaySndEndDlg(hWnd, v6);
return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam);
}
Focus_CheckPlayMove(lParam);
Focus_DoBlitSpinIncFrame(hWnd, (HWND)lParam);
SelList_GetHeroStats(hWnd, (unsigned short)wParam);
LABEL_23:
SelList_CountHeroList(hWnd);
return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam);
case 2u:
SelList_DeleteFreeProcs(hWnd);
return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam);
case 6u:
if ((WORD)wParam == 1 || (WORD)wParam == 2)
SelList_LoadFocus16(hWnd);
else
SelList_KillFocus16(hWnd);
return 0;
case 0x100u:
if (wParam != 46)
return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam);
v5 = SelHero_GetHeroNameStr();
if (!strlen(v5))
return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam);
v6 = 1006;
goto LABEL_25;
}
if (Msg <= 0x103)
return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam);
if (Msg <= 0x105) {
v4 = (HWND)SDrawGetFrameWindow(NULL);
SendMessageA(v4, Msg, wParam, lParam);
return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam);
}
if (Msg != 272)
return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam);
SelList_ShowListWindow(hWnd);
return 0;
}
// 10010382: using guessed type DWORD __stdcall SDrawGetFrameWindow();
// ref: 0x1000D916
void __fastcall SelList_DeleteFreeProcs(HWND hWnd)
{
HWND v2; // eax
Sbar_FreeScrollBar(hWnd, 1105);
Doom_DeleteFreeProcs(hWnd, sellist_msgtbl4);
Doom_DeleteFreeProcs(hWnd, sellist_msgtbl3);
Doom_DeleteFreeProcs(hWnd, sellist_msgtbl2);
Doom_DeleteFreeProcs(hWnd, sellist_msgtbl1);
v2 = GetParent(hWnd);
SelHero_SetStringWithMsg(v2, 0);
}
// ref: 0x1000D964
void __fastcall SelList_GetHeroStats(HWND hWnd, int nIDDlgItem)
{
HWND v2; // ebp
HWND v3; // eax
int v4; // eax
HWND v5; // eax
int v6; // eax
HWND v7; // eax
int v8; // eax
HWND v9; // eax
int v10; // eax
HWND v11; // eax
int v12; // eax
HWND v14; // eax
LONG v15; // eax
_uiheroinfo *v16; // edi
HWND v17; // eax
HWND v18; // eax
v14 = GetDlgItem(hWnd, nIDDlgItem);
if (v14) {
v15 = GetWindowLongA(v14, -21);
if (v15) {
v16 = *(_uiheroinfo **)(v15 + 12);
if (v16) {
if (v16->level)
Doom_ParseWndProc2(hWnd, sellist_msgtbl3, AF_BIG, 0);
else
Doom_ParseWndProc2(hWnd, sellist_msgtbl3, AF_BIGGRAY, 0);
v17 = GetParent(hWnd);
SelHero_PrintHeroInfo(v17, v16);
} else {
Doom_ParseWndProc2(hWnd, sellist_msgtbl3, AF_BIGGRAY, 0);
v18 = GetParent(hWnd);
selhero_hero_hassaved = 0;
selhero_heronamestr[0] = 0;
v2 = v18;
v3 = GetDlgItem(v18, 1014);
v4 = GetWindowLongA(v3, -21);
local_SetWndLongStr(v4, "--");
v5 = GetDlgItem(v2, 1018);
v6 = GetWindowLongA(v5, -21);
local_SetWndLongStr(v6, "--");
v7 = GetDlgItem(v2, 1017);
v8 = GetWindowLongA(v7, -21);
local_SetWndLongStr(v8, "--");
v9 = GetDlgItem(v2, 1016);
v10 = GetWindowLongA(v9, -21);
local_SetWndLongStr(v10, "--");
v11 = GetDlgItem(v2, 1015);
v12 = GetWindowLongA(v11, -21);
local_SetWndLongStr(v12, "--");
SelHero_SetStaticBMP(v2, 3);
Doom_ParseWndProc4(v2, selhero_msgtbl_info, AF_SMALLGRAY);
}
}
}
}
// 1002A424: using guessed type int selhero_hero_hassaved;
// ref: 0x1000D9CF
void __fastcall SelList_CountHeroList(HWND hWnd)
{
HWND v2; // eax
int v3; // ST04_4
int v4; // eax
v2 = GetFocus();
v3 = SelList_GetNextHeroLong(v2);
v4 = SelHero_GetNumHeroesLeft();
Sbar_DrawScrollBar(hWnd, 1105, v4, v3);
}
// ref: 0x1000D9F4
int __fastcall SelList_GetNextHeroLong(HWND hWnd)
{
LONG v1; // esi
_uiheroinfo *v2; // eax
_uiheroinfo *v3; // esi
int v5; // ecx
if (!hWnd)
return 0;
v1 = GetWindowLongA(hWnd, -21);
if (!v1)
return 0;
v2 = SelHero_GetCurrentHeroInfo();
if (!v2)
return 0;
v3 = *(_uiheroinfo **)(v1 + 12);
if (!v3)
return 0;
v5 = 0;
do {
if (v2 == v3)
break;
v2 = v2->next;
++v5;
} while (v2);
return v5;
}
// ref: 0x1000DA2D
void __fastcall SelList_LoadFocus16(HWND hWnd)
{
Focus_LoadSpinner("ui_art\\focus16.pcx");
SDlgSetTimer((int)hWnd, 1, 55, 0);
}
// ref: 0x1000DA48
void __fastcall SelList_KillFocus16(HWND hWnd)
{
SDlgKillTimer((int)hWnd, 1);
Focus_DeleteSpinners();
}
// ref: 0x1000DA55
void __fastcall SelList_ShowListWindow(HWND hWnd)
{
HWND v2; // edi
LONG v3; // eax
HWND v4; // eax
char Buffer[32]; // [esp+8h] [ebp-20h]
v2 = GetParent(hWnd);
SelList_DoListOldProc(hWnd);
if (SelHero_GetHeroIsGood() == 1)
LoadStringA(ghUiInst, 0x1Cu, Buffer, 31);
else
LoadStringA(ghUiInst, 0x1Du, Buffer, 31);
SelHero_SetStringWithMsg(v2, Buffer);
v3 = GetWindowLongA(v2, -21);
SetWindowLongA(hWnd, -21, v3);
Doom_ParseWndProc3(hWnd, sellist_msgtbl1, AF_BIGGRAY);
Doom_ParseWndProcs(hWnd, sellist_msgtbl2, AF_BIG, 0);
Doom_ParseWndProcs(hWnd, sellist_msgtbl3, AF_BIG, 0);
Doom_ParseWndProcs(hWnd, sellist_msgtbl4, AF_MED, 1);
sellist_pheroinfo = SelHero_GetCurrentHeroInfo();
SelList_SetHeroDlgLong(hWnd, sellist_pheroinfo);
Sbar_LoadScrBarGFX(hWnd, 1105);
if (SelHero_GetNumHeroesLeft() <= 6) {
v4 = GetDlgItem(hWnd, 1105);
ShowWindow(v4, 0);
}
}
// ref: 0x1000DB2C
void __fastcall SelList_SetHeroDlgLong(HWND hWnd, _uiheroinfo *pInfo)
{
int *i; // ebp
HWND v4; // eax MAPDST
int v6; // esi
for (i = sellist_msgtbl4; *i; ++i) {
v4 = GetDlgItem(hWnd, *i);
if (v4) {
if (pInfo) {
EnableWindow(v4, 1);
v6 = GetWindowLongA(v4, -21);
local_SetWndLongStr(v6, pInfo->name);
if (v6)
*(DWORD *)(v6 + 12) = (unsigned int)pInfo;
pInfo = pInfo->next;
} else {
EnableWindow(v4, 0);
}
}
}
Doom_ParseWndProc2(hWnd, sellist_msgtbl4, AF_MED, 1);
}
// ref: 0x1000DBAC
void __fastcall SelList_DoListOldProc(HWND hWnd)
{
int *i; // edi
HWND v3; // eax MAPDST
void *v5; // eax
for (i = sellist_msgtbl4; *i; ++i) {
v3 = GetDlgItem(hWnd, *i);
if (v3) {
v5 = (void *)GetWindowLongA(v3, -4);
SetPropA(v3, "UIOLDPROC", v5);
SetWindowLongA(v3, -4, (LONG)SelList_OldListWndProc);
}
}
}
// ref: 0x1000DBFE
LRESULT __stdcall SelList_OldListWndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
LRESULT(__stdcall * v4)
(HWND, UINT, WPARAM, LPARAM); // edi
HWND v5; // eax
UINT v7; // [esp-Ch] [ebp-18h]
WPARAM v8; // [esp-8h] [ebp-14h]
LPARAM v9; // [esp-4h] [ebp-10h]
v4 = (LRESULT(__stdcall *)(HWND, UINT, WPARAM, LPARAM))GetPropA(hWnd, "UIOLDPROC");
switch (Msg) {
case 2u:
RemovePropA(hWnd, "UIOLDPROC");
if (!v4)
return DefWindowProcA(hWnd, Msg, wParam, lParam);
SetWindowLongA(hWnd, -4, (LONG)v4);
break;
case 0xFu:
local_DlgDoPaint(hWnd);
return 0;
case 0x87u:
return 4;
case 0x100u:
if (wParam > 0x21) {
if (wParam == 34) {
SelList_HeroesWithBigDialogs(hWnd);
return 0;
}
if (wParam > 0x24) {
if (wParam <= 0x26) {
SelList_HeroDlgWithSnd2(hWnd);
return 0;
}
if (wParam <= 0x28) {
SelList_HeroDlgWithSound(hWnd);
return 0;
}
if (wParam == 46) {
v9 = lParam;
v8 = 46;
v7 = 256;
goto LABEL_24;
}
}
} else {
switch (wParam) {
case 0x21u:
SelList_HeroesWithHugeDlg(hWnd);
break;
case 9u:
if (GetKeyState(16) >= 0)
SelList_ShiftHeroDlgItems(hWnd);
else
SelList_ShiftHeroDlgItm2(hWnd);
return 0;
case 0xDu:
goto LABEL_38;
case 0x1Bu:
v9 = 0;
v8 = 2;
goto LABEL_12;
case 0x20u:
LABEL_38:
v9 = 0;
v8 = 1;
LABEL_12:
v7 = 273;
LABEL_24:
v5 = GetParent(hWnd);
SendMessageA(v5, v7, v8, v9);
return 0;
}
}
return 0;
}
if (v4)
return CallWindowProcA(v4, hWnd, Msg, wParam, lParam);
return DefWindowProcA(hWnd, Msg, wParam, lParam);
}
// ref: 0x1000DD36
void __fastcall SelList_ShiftHeroDlgItems(HWND hWnd)
{
HWND v2; // ebx
int nIDDlgItem[1053]; // [esp+0h] [ebp-1074h]
nIDDlgItem[1047] = 1048;
nIDDlgItem[1048] = 1049;
nIDDlgItem[1049] = 1050;
nIDDlgItem[1050] = 1051;
nIDDlgItem[1051] = 1052;
nIDDlgItem[1052] = 1047;
v2 = GetParent(hWnd);
do {
nIDDlgItem[1044] = nIDDlgItem[GetWindowLongA(hWnd, -12)];
hWnd = GetDlgItem(v2, nIDDlgItem[1044]);
} while (!IsWindowEnabled(hWnd));
SetFocus(hWnd);
}
// ref: 0x1000DDA7
void __fastcall SelList_ShiftHeroDlgItm2(HWND hWnd)
{
HWND v2; // ebx
int nIDDlgItem[1053]; // [esp+0h] [ebp-1074h]
nIDDlgItem[1047] = 1052;
nIDDlgItem[1048] = 1047;
nIDDlgItem[1049] = 1048;
nIDDlgItem[1050] = 1049;
nIDDlgItem[1051] = 1050;
nIDDlgItem[1052] = 1051;
v2 = GetParent(hWnd);
do {
nIDDlgItem[1044] = nIDDlgItem[GetWindowLongA(hWnd, -12)];
hWnd = GetDlgItem(v2, nIDDlgItem[1044]);
} while (!IsWindowEnabled(hWnd));
SetFocus(hWnd);
}
// ref: 0x1000DE18
void __fastcall SelList_HeroesWithBigDialogs(HWND hWnd)
{
HWND v1; // eax MAPDST
HWND v3; // ebp
HWND v4; // eax
LONG v5; // eax
_uiheroinfo *v6; // eax
int v7; // esi
_uiheroinfo *v8; // esi
int v9; // eax
v1 = GetParent(hWnd);
if (v1) {
v3 = GetDlgItem(v1, 1047);
if (v3) {
v4 = GetDlgItem(v1, 1052);
v5 = GetWindowLongA(v4, -21);
if (v5) {
v6 = *(_uiheroinfo **)(v5 + 12);
if (v6 && v6->next) {
v7 = SelList_GetNextHeroLong(v3) + 6;
if (v7 > SelHero_GetNumHeroesLeft() - 6)
v7 = SelHero_GetNumHeroesLeft() - 6;
v8 = SelList_GetHeroFromNum(v7);
if (v8) {
TitleSnd_PlayMoveSound();
SelList_SetHeroDlgLong(v1, v8);
v9 = GetWindowLongA(hWnd, -12);
SelList_GetHeroStats(v1, v9);
SelList_CountHeroList(v1);
}
} else {
SelList_ShiftHeroDlgItm2(v3);
}
}
}
}
}
// ref: 0x1000DEDD
_uiheroinfo *__fastcall SelList_GetHeroFromNum(int heronum)
{
_uiheroinfo *result; // eax
result = SelHero_GetCurrentHeroInfo();
while (result && heronum) {
result = result->next;
--heronum;
}
return result;
}
// ref: 0x1000DEF4
void __fastcall SelList_HeroesWithHugeDlg(HWND hWnd)
{
HWND v1; // eax MAPDST
HWND v3; // eax MAPDST
LONG v5; // eax
_uiheroinfo *v6; // ebp
HWND v7; // eax
int v8; // eax
_uiheroinfo *v9; // edi
int v10; // eax
v1 = GetParent(hWnd);
if (v1) {
v3 = GetDlgItem(v1, 1047);
if (v3) {
v5 = GetWindowLongA(v3, -21);
if (v5) {
v6 = *(_uiheroinfo **)(v5 + 12);
if (v6) {
if (v6 == SelHero_GetCurrentHeroInfo()) {
v7 = GetDlgItem(v1, 1052);
SelList_ShiftHeroDlgItems(v7);
} else {
v8 = SelList_GetNextHeroLong(v3) - 6;
if (v8 < 0)
v8 = 0;
v9 = SelList_GetHeroFromNum(v8);
if (v9) {
TitleSnd_PlayMoveSound();
SelList_SetHeroDlgLong(v1, v9);
v10 = GetWindowLongA(hWnd, -12);
SelList_GetHeroStats(v1, v10);
SelList_CountHeroList(v1);
}
}
}
}
}
}
}
// ref: 0x1000DFAB
void __fastcall SelList_HeroDlgWithSound(HWND hWnd)
{
LONG v2; // eax
_uiheroinfo *v3; // eax
HWND v4; // eax
HWND v5; // eax
LONG v6; // eax
_uiheroinfo *v7; // ebp
HWND v8; // eax
int v9; // ebx
HWND v10; // eax
HWND v11; // eax
v2 = GetWindowLongA(hWnd, -21);
if (v2) {
v3 = *(_uiheroinfo **)(v2 + 12);
if (v3) {
if (v3->next) {
if (GetWindowLongA(hWnd, -12) >= 1052) {
v4 = GetParent(hWnd);
v5 = GetDlgItem(v4, 1048);
if (v5) {
v6 = GetWindowLongA(v5, -21);
if (v6) {
v7 = *(_uiheroinfo **)(v6 + 12);
if (v7) {
TitleSnd_PlayMoveSound();
v8 = GetParent(hWnd);
SelList_SetHeroDlgLong(v8, v7);
v9 = GetWindowLongA(hWnd, -12);
v10 = GetParent(hWnd);
SelList_GetHeroStats(v10, v9);
v11 = GetParent(hWnd);
SelList_CountHeroList(v11);
}
}
}
} else {
SelList_ShiftHeroDlgItems(hWnd);
}
}
}
}
}
// ref: 0x1000E043
void __fastcall SelList_HeroDlgWithSnd2(HWND hWnd)
{
LONG v2; // eax
_uiheroinfo *v3; // esi
_uiheroinfo *v4; // ebx
HWND v5; // eax
int v6; // ebx
HWND v7; // eax
HWND v8; // eax
if (GetWindowLongA(hWnd, -12) <= 1047) {
v2 = GetWindowLongA(hWnd, -21);
if (v2) {
v3 = *(_uiheroinfo **)(v2 + 12);
if (v3) {
v4 = SelHero_GetCurrentHeroInfo();
if (v3 != v4) {
while (v4 && v4->next != v3)
v4 = v4->next;
TitleSnd_PlayMoveSound();
v5 = GetParent(hWnd);
SelList_SetHeroDlgLong(v5, v4);
v6 = GetWindowLongA(hWnd, -12);
v7 = GetParent(hWnd);
SelList_GetHeroStats(v7, v6);
v8 = GetParent(hWnd);
SelList_CountHeroList(v8);
}
}
}
} else {
SelList_ShiftHeroDlgItm2(hWnd);
}
}
// ref: 0x1000E0CA
void __fastcall SelList_ChooseDlgFromSize(HWND hWnd, int width, int height)
{
HWND v6; // eax
int v7; // edx
HWND v8; // eax
HWND v9; // eax
char *v10; // eax
HWND v11; // eax
HWND v12; // eax
int v13; // eax
int v14; // eax
int v15; // eax
HWND v16; // eax
HWND v17; // eax
HWND v18; // eax
HWND v19; // eax
v6 = GetDlgItem(hWnd, 1056);
if (local_GetBottomRect(hWnd, v6, width, height)) {
v7 = 1;
LABEL_3:
OkCancel_PlaySndEndDlg(hWnd, v7);
return;
}
v8 = GetDlgItem(hWnd, 1054);
if (local_GetBottomRect(hWnd, v8, width, height)) {
v7 = 2;
goto LABEL_3;
}
v9 = GetDlgItem(hWnd, 1006);
if (local_GetBottomRect(hWnd, v9, width, height)) {
v10 = SelHero_GetHeroNameStr();
if (strlen(v10)) {
v7 = 1006;
goto LABEL_3;
}
} else {
v11 = GetDlgItem(hWnd, 1105);
if (local_GetBottomRect(hWnd, v11, width, height)) {
v12 = GetDlgItem(hWnd, 1105);
v13 = Sbar_NumScrollLines(v12, width, height) - 1;
if (v13) {
v14 = v13 - 1;
if (v14) {
v15 = v14 - 1;
if (v15) {
if (v15 == 1) {
v16 = GetFocus();
SelList_HeroesWithBigDialogs(v16);
}
} else {
v17 = GetFocus();
SelList_HeroesWithHugeDlg(v17);
}
} else {
v18 = GetFocus();
SelList_HeroDlgWithSound(v18);
}
} else {
v19 = GetFocus();
SelList_HeroDlgWithSnd2(v19);
}
}
}
}