// 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, 4, 0); else Doom_ParseWndProc2(hWnd, sellist_msgtbl3, 5, 0); v17 = GetParent(hWnd); SelHero_PrintHeroInfo(v17, v16); } else { Doom_ParseWndProc2(hWnd, sellist_msgtbl3, 5, 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, 1); } } } } // 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, 5); Doom_ParseWndProcs(hWnd, sellist_msgtbl2, 4, 0); Doom_ParseWndProcs(hWnd, sellist_msgtbl3, 4, 0); Doom_ParseWndProcs(hWnd, sellist_msgtbl4, 2, 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, 2, 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); } } } }