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.
1258 lines
28 KiB
1258 lines
28 KiB
// ref: 0x1000C610 |
|
void *SelIPX_1000C610() { return 0; } |
|
/* { |
|
return SMemAlloc(268, "C:\\Src\\Diablo\\DiabloUI\\SelIPX.cpp", 105, 0); |
|
} */ |
|
// 10010364: using guessed type int __stdcall SMemAlloc(_DWORD, _DWORD, _DWORD, _DWORD); |
|
|
|
// ref: 0x1000C629 |
|
signed int SelIPX_1000C629() { return 0; } |
|
/* { |
|
signed int result; // eax |
|
|
|
result = 2139095040; |
|
dword_1002A4A4 = 2139095040; |
|
return result; |
|
} */ |
|
// 1002A4A4: using guessed type int dword_1002A4A4; |
|
|
|
// ref: 0x1000C634 |
|
BOOL __fastcall SelIPX_1000C634(int a1, int a2, int a3, _DWORD *a4, int a5, int playerid) { return 0; } |
|
/* { |
|
int v6; // esi |
|
|
|
dword_1002A49C = a3; |
|
dword_1002A4AC = a2; |
|
dword_1002A4BC = a5; |
|
dword_1002A4A0 = a4; |
|
gnIpxPlayerid = playerid; |
|
artfont_10001159(); |
|
v6 = SDlgDialogBoxParam(hInstance, "SELIPXGAME_DIALOG", a4[2], SelIPX_1000C692, 0); |
|
artfont_100010C8(); |
|
return v6 == 1; |
|
} */ |
|
// 10010370: using guessed type int __stdcall SDlgDialogBoxParam(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); |
|
// 1002A49C: using guessed type int dword_1002A49C; |
|
// 1002A4A8: using guessed type int gnIpxPlayerid; |
|
// 1002A4AC: using guessed type int dword_1002A4AC; |
|
// 1002A4BC: using guessed type int dword_1002A4BC; |
|
|
|
// ref: 0x1000C692 |
|
int __stdcall SelIPX_1000C692(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { return 0; } |
|
/* { |
|
HWND v4; // eax |
|
HWND v6; // eax |
|
int v7; // [esp+0h] [ebp-Ch] |
|
int savedregs; // [esp+Ch] [ebp+0h] |
|
|
|
if ( Msg > 0x113 ) |
|
{ |
|
switch ( Msg ) |
|
{ |
|
case 0x201u: |
|
goto LABEL_35; |
|
case 0x202u: |
|
v6 = GetDlgItem(hWnd, 1105); |
|
if ( !Sbar_100099C0(v6) ) |
|
return SDlgDefDialogProc(hWnd, Msg, wParam, lParam); |
|
goto LABEL_12; |
|
case 0x203u: |
|
LABEL_35: |
|
SelIPX_1000D696(hWnd, (unsigned short)lParam, (unsigned int)lParam >> 16); |
|
return SDlgDefDialogProc(hWnd, Msg, wParam, lParam); |
|
} |
|
if ( Msg != 2024 ) |
|
return SDlgDefDialogProc(hWnd, Msg, wParam, lParam); |
|
if ( !Fade_1000739F() ) |
|
Fade_100073FD(hWnd, v7); |
|
return 0; |
|
} |
|
if ( Msg == 275 ) |
|
{ |
|
if ( wParam == 3 ) |
|
SelIPX_1000C9DA(hWnd); |
|
return 0; |
|
} |
|
if ( Msg == 2 ) |
|
{ |
|
SelIPX_1000CC41(hWnd); |
|
return SDlgDefDialogProc(hWnd, Msg, wParam, lParam); |
|
} |
|
if ( Msg <= 0x103 ) |
|
return SDlgDefDialogProc(hWnd, Msg, wParam, lParam); |
|
if ( Msg <= 0x105 ) |
|
{ |
|
v4 = (HWND)SDrawGetFrameWindow(NULL); |
|
SendMessageA(v4, Msg, wParam, lParam); |
|
return SDlgDefDialogProc(hWnd, Msg, wParam, lParam); |
|
} |
|
if ( Msg == 272 ) |
|
{ |
|
SelIPX_1000CD4A(hWnd); |
|
PostMessageA(hWnd, 0x7E8u, 0, 0); |
|
return 0; |
|
} |
|
if ( Msg == 273 ) |
|
{ |
|
if ( HIWORD(wParam) == 7 ) |
|
{ |
|
Focus_100075B7(hWnd, (HWND)lParam); |
|
return SDlgDefDialogProc(hWnd, Msg, wParam, lParam); |
|
} |
|
if ( HIWORD(wParam) != 6 ) |
|
{ |
|
if ( wParam == 327681 ) |
|
{ |
|
SelIPX_1000D3C5(hWnd, (int)&savedregs); |
|
} |
|
else if ( (_WORD)wParam == 2 ) |
|
{ |
|
SelIPX_1000D3A0((int)hWnd, 2); |
|
} |
|
return SDlgDefDialogProc(hWnd, Msg, wParam, lParam); |
|
} |
|
Focus_10007458((void *)lParam); |
|
Focus_100075DC(hWnd, (HWND)lParam); |
|
SelIPX_1000C818(hWnd, (unsigned short)wParam); |
|
LABEL_12: |
|
SelIPX_1000C982(hWnd); |
|
} |
|
return SDlgDefDialogProc(hWnd, Msg, wParam, lParam); |
|
} */ |
|
// 1001037C: using guessed type int __stdcall SDlgDefDialogProc(_DWORD, _DWORD, _DWORD, _DWORD); |
|
// 10010382: using guessed type _DWORD __stdcall SDrawGetFrameWindow(); |
|
|
|
// ref: 0x1000C818 |
|
LONG __fastcall SelIPX_1000C818(HWND hDlg, int nIDDlgItem) { return 0; } |
|
/* { |
|
HWND v2; // ebx |
|
HWND v3; // edi |
|
LONG result; // eax |
|
const char *v5; // edi |
|
int v6; // eax |
|
CHAR *v7; // edx |
|
CHAR v8; // [esp+Ch] [ebp-280h] |
|
CHAR v9; // [esp+10Ch] [ebp-180h] |
|
char v10; // [esp+18Ch] [ebp-100h] |
|
CHAR Buffer; // [esp+20Ch] [ebp-80h] |
|
CHAR v12; // [esp+22Ch] [ebp-60h] |
|
char v13; // [esp+24Ch] [ebp-40h] |
|
unsigned short v14; // [esp+260h] [ebp-2Ch] |
|
unsigned char v15; // [esp+262h] [ebp-2Ah] |
|
char v16; // [esp+278h] [ebp-14h] |
|
unsigned char v17; // [esp+27Ch] [ebp-10h] |
|
int v18; // [esp+280h] [ebp-Ch] |
|
int v19; // [esp+284h] [ebp-8h] |
|
HWND hWnd; // [esp+288h] [ebp-4h] |
|
|
|
v2 = hDlg; |
|
v3 = GetDlgItem(hDlg, nIDDlgItem); |
|
hWnd = GetDlgItem(v2, 1098); |
|
result = GetWindowLongA(v3, -21); |
|
if ( result ) |
|
{ |
|
result = *(_DWORD *)(result + 12); |
|
if ( result ) |
|
{ |
|
v5 = (const char *)(result + 140); |
|
if ( *(_DWORD *)(result + 4) ) |
|
{ |
|
if ( result == -140 || strlen((const char *)(result + 140)) < 0x10 ) |
|
{ |
|
v6 = GetWindowLongA(hWnd, -21); |
|
v7 = (CHAR *)&byte_10029448; |
|
} |
|
else |
|
{ |
|
v19 = (int)&byte_10029448; |
|
v18 = (int)&byte_10029448; |
|
strcpy(&v10, v5); |
|
if ( Connect_10003DAF(&v10, (int)&v16, (int)&v19, (int)&v18) |
|
&& Connect_10003E61((const char *)v18, &v13) ) |
|
{ |
|
LoadStringA(hInstance, v17 + 1003, &Buffer, 31);//"Normal Difficulty","Nightmare Difficulty", "Hell Difficulty" |
|
LoadStringA(hInstance, v15 + 4, &v12, 31);//"Warrior","Rogue","Sorcerer" |
|
LoadStringA(hInstance, 0x31u, &v9, 127);//"%s.\nCreated by %s, a level %d %s." |
|
wsprintfA(&v8, &v9, &Buffer, v19, v14, &v12); |
|
v6 = GetWindowLongA(hWnd, -21); |
|
v7 = &v8; |
|
} |
|
else |
|
{ |
|
v6 = GetWindowLongA(hWnd, -21); |
|
v7 = 0; |
|
} |
|
} |
|
} |
|
else |
|
{ |
|
v6 = GetWindowLongA(hWnd, -21); |
|
v7 = (CHAR *)v5; |
|
} |
|
local_10007FA4(v6, v7); |
|
result = Doom_10006A13(v2, (int *)&unk_10023104, 1); |
|
} |
|
} |
|
return result; |
|
} */ |
|
|
|
// ref: 0x1000C982 |
|
HWND UNKCALL SelIPX_1000C982(HWND hDlg) { return 0; } |
|
/* { |
|
HWND v1; // esi |
|
int v2; // eax |
|
|
|
v1 = hDlg; |
|
v2 = SelIPX_1000C99F(); |
|
return Sbar_10009A99(v1, 1105, dword_1002A4B8, v2); |
|
} */ |
|
|
|
// ref: 0x1000C99F |
|
int SelIPX_1000C99F() { return 0; } |
|
/* { |
|
HWND v0; // eax |
|
LONG v1; // eax |
|
_DWORD *v2; // ecx |
|
_DWORD *v3; // eax |
|
int v5; // edx |
|
|
|
v0 = GetFocus(); |
|
if ( !v0 ) |
|
return 0; |
|
v1 = GetWindowLongA(v0, -21); |
|
if ( !v1 ) |
|
return 0; |
|
v2 = (_DWORD *)dword_1002A4B4; |
|
if ( !dword_1002A4B4 ) |
|
return 0; |
|
v3 = *(_DWORD **)(v1 + 12); |
|
if ( !v3 ) |
|
return 0; |
|
v5 = 0; |
|
do |
|
{ |
|
if ( v2 == v3 ) |
|
break; |
|
v2 = (_DWORD *)*v2; |
|
++v5; |
|
} |
|
while ( v2 ); |
|
return v5; |
|
} */ |
|
// 1002A4B4: using guessed type int dword_1002A4B4; |
|
|
|
// ref: 0x1000C9DA |
|
const char *UNKCALL SelIPX_1000C9DA(HWND hDlg) { return 0; } |
|
/* { |
|
HWND v1; // esi |
|
const char *result; // eax |
|
int v3; // ST0C_4 |
|
HWND v4; // eax |
|
HWND v5; // eax |
|
int v6; // eax |
|
|
|
v1 = hDlg; |
|
dword_1002A4B0 = 0; |
|
SelIPX_1000CA64((_DWORD *)dword_1002A4B4); |
|
SNetEnumGames(0, 0, SelIPX_1000CAD5, 0); |
|
result = (const char *)SelIPX_1000CA71((_DWORD *)dword_1002A4B4); |
|
dword_1002A4B4 = (int)result; |
|
if ( dword_1002A4B0 ) |
|
{ |
|
SelIPX_1000CB83(v1, result); |
|
v3 = dword_1002A4B8 > 6; |
|
v4 = GetDlgItem(v1, 1105); |
|
ShowWindow(v4, v3); |
|
v5 = GetFocus(); |
|
v6 = GetWindowLongA(v5, -12); |
|
SelIPX_1000C818(v1, v6); |
|
result = (const char *)SelIPX_1000C982(v1); |
|
} |
|
return result; |
|
} */ |
|
// 10010436: using guessed type int __stdcall SNetEnumGames(_DWORD, _DWORD, _DWORD, _DWORD); |
|
// 1002A4B0: using guessed type int dword_1002A4B0; |
|
// 1002A4B4: using guessed type int dword_1002A4B4; |
|
|
|
// ref: 0x1000CA64 |
|
void __fastcall SelIPX_1000CA64(_DWORD *a1) { return; } |
|
/* { |
|
while ( a1 ) |
|
{ |
|
a1[2] = 0; |
|
a1 = (_DWORD *)*a1; |
|
} |
|
} */ |
|
|
|
// ref: 0x1000CA71 |
|
_DWORD **__fastcall SelIPX_1000CA71(_DWORD *a1) { return 0; } |
|
/* { |
|
_DWORD **v1; // edi |
|
_DWORD *v2; // esi |
|
|
|
v1 = (_DWORD **)a1; |
|
v2 = 0; |
|
while ( a1 ) |
|
{ |
|
if ( a1[2] || !a1[1] ) |
|
{ |
|
v2 = a1; |
|
a1 = (_DWORD *)*a1; |
|
} |
|
else |
|
{ |
|
if ( v2 ) |
|
*v2 = *a1; |
|
else |
|
v1 = (_DWORD **)*a1; |
|
SelIPX_1000CAC1(a1); |
|
--dword_1002A4B8; |
|
dword_1002A4B0 = 1; |
|
if ( v2 ) |
|
a1 = (_DWORD *)*v2; |
|
else |
|
a1 = *v1; |
|
} |
|
} |
|
return v1; |
|
} */ |
|
// 1002A4B0: using guessed type int dword_1002A4B0; |
|
|
|
// ref: 0x1000CAC1 |
|
int UNKCALL SelIPX_1000CAC1(void *arg) { return 0; } |
|
/* { |
|
int result; // eax |
|
|
|
if ( arg ) |
|
result = SMemFree(arg, "C:\\Src\\Diablo\\DiabloUI\\SelIPX.cpp", 110, 0); |
|
return result; |
|
} */ |
|
// 10010340: using guessed type int __stdcall SMemFree(_DWORD, _DWORD, _DWORD, _DWORD); |
|
|
|
// ref: 0x1000CAD5 |
|
void *__stdcall SelIPX_1000CAD5(int a1, char *a2, char *a3) { return 0; } |
|
/* { |
|
_DWORD *v3; // eax |
|
int result; // eax |
|
int v5; // esi |
|
_DWORD *v6; // eax |
|
|
|
v3 = SelIPX_1000CB73((_DWORD *)dword_1002A4B4, a1); |
|
if ( v3 ) |
|
{ |
|
v3[2] = 1; |
|
} |
|
else |
|
{ |
|
result = SelIPX_1000C610(); |
|
v5 = result; |
|
if ( !result ) |
|
return result; |
|
*(_DWORD *)result = 0; |
|
*(_DWORD *)(result + 4) = a1; |
|
*(_DWORD *)(result + 8) = 1; |
|
strcpy((char *)(result + 12), a2); |
|
strcpy((char *)(v5 + 140), a3); |
|
v6 = SelIPX_1000CB50((_DWORD *)dword_1002A4B4, (_DWORD *)v5); |
|
++dword_1002A4B8; |
|
dword_1002A4B4 = (int)v6; |
|
dword_1002A4B0 = 1; |
|
} |
|
return 1; |
|
} */ |
|
// 1002A4B0: using guessed type int dword_1002A4B0; |
|
// 1002A4B4: using guessed type int dword_1002A4B4; |
|
|
|
// ref: 0x1000CB50 |
|
_DWORD *__fastcall SelIPX_1000CB50(_DWORD *a1, _DWORD *a2) { return 0; } |
|
/* { |
|
_DWORD *result; // eax |
|
_DWORD *v3; // edi |
|
_DWORD *i; // esi |
|
|
|
result = a1; |
|
v3 = 0; |
|
for ( i = a1; i; i = (_DWORD *)*i ) |
|
v3 = i; |
|
*a2 = i; |
|
if ( !v3 ) |
|
return a2; |
|
*v3 = a2; |
|
return result; |
|
} */ |
|
|
|
// ref: 0x1000CB73 |
|
_DWORD *__fastcall SelIPX_1000CB73(_DWORD *a1, int a2) { return 0; } |
|
/* { |
|
_DWORD *result; // eax |
|
|
|
for ( result = a1; result && result[1] != a2; result = (_DWORD *)*result ) |
|
; |
|
return result; |
|
} */ |
|
|
|
// ref: 0x1000CB83 |
|
int __fastcall SelIPX_1000CB83(HWND a1, const char *a2) { return 0; } |
|
/* { |
|
int *v2; // ebp |
|
HWND v3; // eax |
|
HWND v4; // esi |
|
int v5; // eax |
|
int v6; // eax |
|
const char *v8; // [esp+4h] [ebp-8h] |
|
HWND hDlg; // [esp+8h] [ebp-4h] |
|
|
|
v8 = a2; |
|
hDlg = a1; |
|
v2 = &dword_10023118; |
|
if ( dword_10023118 ) |
|
{ |
|
do |
|
{ |
|
v3 = GetDlgItem(hDlg, *v2); |
|
v4 = v3; |
|
if ( v3 ) |
|
{ |
|
if ( v8 ) |
|
{ |
|
EnableWindow(v3, 1); |
|
v6 = GetWindowLongA(v4, -21); |
|
if ( v6 ) |
|
{ |
|
*(_DWORD *)(v6 + 12) = v8; |
|
local_10007FA4(v6, v8 + 12); |
|
} |
|
v8 = *(const char **)v8; |
|
} |
|
else |
|
{ |
|
if ( v3 == GetFocus() ) |
|
SelIPX_1000CCD9(v4); |
|
EnableWindow(v4, 0); |
|
v5 = GetWindowLongA(v4, -21); |
|
if ( v5 ) |
|
{ |
|
*(_DWORD *)(v5 + 12) = 0; |
|
local_10007FA4(v5, &byte_10029448); |
|
} |
|
} |
|
} |
|
++v2; |
|
} |
|
while ( *v2 ); |
|
} |
|
return Doom_1000680A(hDlg, &dword_10023118, 2, 1); |
|
} */ |
|
// 10023118: using guessed type int dword_10023118; |
|
|
|
// ref: 0x1000CC41 |
|
int UNKCALL SelIPX_1000CC41(HWND hDlg) { return 0; } |
|
/* { |
|
HWND v1; // esi |
|
_DWORD *v2; // eax |
|
|
|
v1 = hDlg; |
|
SelIPX_1000CCC5((_DWORD *)dword_1002A4B4); |
|
dword_1002A4B4 = 0; |
|
Sbar_10009CD2(v1, 1105); |
|
Doom_10006C53(v1, &dword_10023118); |
|
Doom_10006C53(v1, (int *)&unk_1002310C); |
|
Doom_10006C53(v1, (int *)&unk_10023104); |
|
Doom_10006C53(v1, (int *)&unk_100230FC); |
|
Doom_10006C53(v1, (int *)&unk_100230F0); |
|
v2 = (_DWORD *)GetWindowLongA(v1, -21); |
|
local_10007F72(v2); |
|
Title_100100E7(v1); |
|
Focus_10007818(v1); |
|
return SDrawClearSurface(); |
|
} */ |
|
// 1001043C: using guessed type _DWORD __stdcall SDrawClearSurface(); |
|
// 10023118: using guessed type int dword_10023118; |
|
// 1002A4B4: using guessed type int dword_1002A4B4; |
|
|
|
// ref: 0x1000CCC5 |
|
int __fastcall SelIPX_1000CCC5(_DWORD *a1) { return 0; } |
|
/* { |
|
_DWORD *v1; // esi |
|
int result; // eax |
|
|
|
if ( a1 ) |
|
{ |
|
do |
|
{ |
|
v1 = (_DWORD *)*a1; |
|
result = SelIPX_1000CAC1(a1); |
|
a1 = v1; |
|
} |
|
while ( v1 ); |
|
} |
|
return result; |
|
} */ |
|
|
|
// ref: 0x1000CCD9 |
|
HWND UNKCALL SelIPX_1000CCD9(HWND hWnd) { return 0; } |
|
/* { |
|
HWND v1; // edi |
|
HWND v2; // ebx |
|
int nIDDlgItem[1085]; // [esp+0h] [ebp-1118h] |
|
int v5; // [esp+10F4h] [ebp-24h] |
|
int v6; // [esp+1100h] [ebp-18h] |
|
int v7; // [esp+1104h] [ebp-14h] |
|
int v8; // [esp+1108h] [ebp-10h] |
|
int v9; // [esp+110Ch] [ebp-Ch] |
|
int v10; // [esp+1110h] [ebp-8h] |
|
int v11; // [esp+1114h] [ebp-4h] |
|
|
|
v1 = hWnd; |
|
v6 = 1093; |
|
v7 = 1088; |
|
v8 = 1089; |
|
v9 = 1090; |
|
v10 = 1091; |
|
v11 = 1092; |
|
v2 = GetParent(hWnd); |
|
do |
|
{ |
|
v5 = nIDDlgItem[GetWindowLongA(v1, -12)]; |
|
v1 = GetDlgItem(v2, v5); |
|
} |
|
while ( !IsWindowEnabled(v1) ); |
|
return SetFocus(v1); |
|
} */ |
|
// 1000CCD9: using guessed type int nIDDlgItem[1085]; |
|
|
|
// ref: 0x1000CD4A |
|
HWND UNKCALL SelIPX_1000CD4A(HWND hWnd) { return 0; } |
|
/* { |
|
HWND v1; // esi |
|
HWND v2; // ST1C_4 |
|
int v3; // eax |
|
int *v4; // edi |
|
HWND v5; // ebp |
|
int v6; // eax |
|
HWND result; // eax |
|
HWND v8; // eax |
|
HWND v9; // [esp+0h] [ebp-4Ch] |
|
CHAR Buffer; // [esp+Ch] [ebp-40h] |
|
|
|
v1 = hWnd; |
|
SelIPX_1000CEE6(hWnd); |
|
Focus_100077E9((int)v1, "ui_art\\focus16.pcx", v9); |
|
Title_1001009E(v1, (int)"ui_art\\smlogo.pcx", v2); |
|
v3 = local_10007F46(); |
|
v4 = (int *)v3; |
|
if ( v3 ) |
|
{ |
|
SetWindowLongA(v1, -21, v3); |
|
local_10007944((int)v1, 0, &byte_10029448, -1, 1, (int)"ui_art\\selgame.pcx", v4, v4 + 1, 0); |
|
Fade_100073C5(v1, 1); |
|
} |
|
if ( SelGame_1000B67E() != 1230002254 ) |
|
{ |
|
v5 = GetDlgItem(v1, 1038); |
|
LoadStringA(hInstance, 0x4Du, &Buffer, 63);//"Join Games" |
|
SetWindowTextA(v5, &Buffer); |
|
} |
|
Doom_100068AB(v1, (int *)&unk_100230F0, 5); |
|
Doom_100068AB(v1, (int *)&unk_100230FC, 3); |
|
Doom_100068AB(v1, (int *)&unk_10023104, 1); |
|
Doom_1000658C(v1, (int *)&unk_1002310C, 4, 0); |
|
Doom_1000658C(v1, &dword_10023118, 2, 1); |
|
dword_1002A4B8 = 0; |
|
v6 = SelIPX_1000C610(); |
|
dword_1002A4B4 = v6; |
|
if ( v6 ) |
|
{ |
|
++dword_1002A4B8; |
|
*(_DWORD *)(v6 + 4) = 0; |
|
*(_BYTE *)(dword_1002A4B4 + 140) = 0; |
|
*(_DWORD *)dword_1002A4B4 = 0; |
|
LoadStringA(hInstance, 0x24u, (LPSTR)(dword_1002A4B4 + 12), 127);//"Create Game" |
|
LoadStringA(hInstance, 0x2Au, (LPSTR)(dword_1002A4B4 + 140), 127);//"Create a new game with a difficulty setting of your choice." |
|
} |
|
SNetEnumGames(0, 0, SelIPX_1000CAD5, 0); |
|
SelIPX_1000CB83(v1, (const char *)dword_1002A4B4); |
|
SDlgSetTimer(v1, 3, 1000, 0); |
|
result = Sbar_10009BF1(v1, 1105); |
|
if ( dword_1002A4B8 <= 6 ) |
|
{ |
|
v8 = GetDlgItem(v1, 1105); |
|
result = (HWND)ShowWindow(v8, 0); |
|
} |
|
return result; |
|
} */ |
|
// 10010412: using guessed type int __stdcall SDlgSetTimer(_DWORD, _DWORD, _DWORD, _DWORD); |
|
// 10010436: using guessed type int __stdcall SNetEnumGames(_DWORD, _DWORD, _DWORD, _DWORD); |
|
// 10023118: using guessed type int dword_10023118; |
|
// 1002A4B4: using guessed type int dword_1002A4B4; |
|
|
|
// ref: 0x1000CEE6 |
|
void UNKCALL SelIPX_1000CEE6(HWND hDlg) { return; } |
|
/* { |
|
HWND v1; // ebx |
|
int *v2; // edi |
|
HWND v3; // eax |
|
HWND v4; // esi |
|
void *v5; // eax |
|
|
|
v1 = hDlg; |
|
v2 = &dword_10023118; |
|
if ( dword_10023118 ) |
|
{ |
|
do |
|
{ |
|
v3 = GetDlgItem(v1, *v2); |
|
v4 = v3; |
|
if ( v3 ) |
|
{ |
|
v5 = (void *)GetWindowLongA(v3, -4); |
|
SetPropA(v4, "UIOLDPROC", v5); |
|
SetWindowLongA(v4, -4, (LONG)SelIPX_1000CF38); |
|
} |
|
++v2; |
|
} |
|
while ( *v2 ); |
|
} |
|
} */ |
|
// 10023118: using guessed type int dword_10023118; |
|
|
|
// ref: 0x1000CF38 |
|
LRESULT __stdcall SelIPX_1000CF38(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { return 0; } |
|
/* { |
|
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_10007C95(hWnd); |
|
return 0; |
|
case 0x87u: |
|
return 4; |
|
case 0x100u: |
|
if ( wParam > 0x21 ) |
|
{ |
|
if ( wParam == 34 ) |
|
{ |
|
SelIPX_1000D0E1(hWnd); |
|
return 0; |
|
} |
|
if ( wParam > 0x24 ) |
|
{ |
|
if ( wParam <= 0x26 ) |
|
{ |
|
SelIPX_1000D31C(hWnd); |
|
return 0; |
|
} |
|
if ( wParam <= 0x28 ) |
|
{ |
|
SelIPX_1000D284(hWnd); |
|
return 0; |
|
} |
|
if ( wParam == 46 ) |
|
{ |
|
v9 = lParam; |
|
v8 = 46; |
|
v7 = 256; |
|
goto LABEL_24; |
|
} |
|
} |
|
} |
|
else |
|
{ |
|
switch ( wParam ) |
|
{ |
|
case 0x21u: |
|
SelIPX_1000D1D4(hWnd); |
|
break; |
|
case 9u: |
|
if ( GetKeyState(16) >= 0 ) |
|
SelIPX_1000D070(hWnd); |
|
else |
|
SelIPX_1000CCD9(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: 0x1000D070 |
|
HWND UNKCALL SelIPX_1000D070(HWND hWnd) { return 0; } |
|
/* { |
|
HWND v1; // edi |
|
HWND v2; // ebx |
|
int nIDDlgItem[1085]; // [esp+0h] [ebp-1118h] |
|
int v5; // [esp+10F4h] [ebp-24h] |
|
int v6; // [esp+1100h] [ebp-18h] |
|
int v7; // [esp+1104h] [ebp-14h] |
|
int v8; // [esp+1108h] [ebp-10h] |
|
int v9; // [esp+110Ch] [ebp-Ch] |
|
int v10; // [esp+1110h] [ebp-8h] |
|
int v11; // [esp+1114h] [ebp-4h] |
|
|
|
v1 = hWnd; |
|
v6 = 1089; |
|
v7 = 1090; |
|
v8 = 1091; |
|
v9 = 1092; |
|
v10 = 1093; |
|
v11 = 1088; |
|
v2 = GetParent(hWnd); |
|
do |
|
{ |
|
v5 = nIDDlgItem[GetWindowLongA(v1, -12)]; |
|
v1 = GetDlgItem(v2, v5); |
|
} |
|
while ( !IsWindowEnabled(v1) ); |
|
return SetFocus(v1); |
|
} */ |
|
// 1000D070: using guessed type int nIDDlgItem[1085]; |
|
|
|
// ref: 0x1000D0E1 |
|
HWND UNKCALL SelIPX_1000D0E1(HWND hWnd) { return 0; } |
|
/* { |
|
HWND v1; // ebp |
|
HWND result; // eax |
|
HWND v3; // esi |
|
HWND v4; // ebx |
|
HWND v5; // eax |
|
_DWORD *v6; // eax |
|
int v7; // eax |
|
const char *v8; // ebx |
|
int v9; // eax |
|
|
|
v1 = hWnd; |
|
result = GetParent(hWnd); |
|
v3 = result; |
|
if ( result ) |
|
{ |
|
result = GetDlgItem(result, 1088); |
|
v4 = result; |
|
if ( result ) |
|
{ |
|
v5 = GetDlgItem(v3, 1093); |
|
result = (HWND)GetWindowLongA(v5, -21); |
|
if ( result ) |
|
{ |
|
v6 = (_DWORD *)*((_DWORD *)result + 3); |
|
if ( v6 && *v6 ) |
|
{ |
|
v7 = SelIPX_1000D18C(v4) + 6; |
|
if ( v7 > dword_1002A4B8 - 6 ) |
|
v7 = dword_1002A4B8 - 6; |
|
result = (HWND)SelIPX_1000D1C1(v7); |
|
v8 = (const char *)result; |
|
if ( result ) |
|
{ |
|
TitleSnd_10010315(); |
|
SelIPX_1000CB83(v3, v8); |
|
v9 = GetWindowLongA(v1, -12); |
|
SelIPX_1000C818(v3, v9); |
|
result = SelIPX_1000C982(v3); |
|
} |
|
} |
|
else |
|
{ |
|
result = SelIPX_1000CCD9(v4); |
|
} |
|
} |
|
} |
|
} |
|
return result; |
|
} */ |
|
|
|
// ref: 0x1000D18C |
|
int UNKCALL SelIPX_1000D18C(HWND hWnd) { return 0; } |
|
/* { |
|
LONG v1; // eax |
|
_DWORD *v2; // ecx |
|
_DWORD *v3; // eax |
|
int v5; // edx |
|
|
|
if ( !hWnd ) |
|
return 0; |
|
v1 = GetWindowLongA(hWnd, -21); |
|
if ( !v1 ) |
|
return 0; |
|
v2 = (_DWORD *)dword_1002A4B4; |
|
if ( !dword_1002A4B4 ) |
|
return 0; |
|
v3 = *(_DWORD **)(v1 + 12); |
|
if ( !v3 ) |
|
return 0; |
|
v5 = 0; |
|
do |
|
{ |
|
if ( v2 == v3 ) |
|
break; |
|
v2 = (_DWORD *)*v2; |
|
++v5; |
|
} |
|
while ( v2 ); |
|
return v5; |
|
} */ |
|
// 1002A4B4: using guessed type int dword_1002A4B4; |
|
|
|
// ref: 0x1000D1C1 |
|
_DWORD *__fastcall SelIPX_1000D1C1(int a1) { return 0; } |
|
/* { |
|
_DWORD *result; // eax |
|
|
|
result = (_DWORD *)dword_1002A4B4; |
|
while ( result && a1 ) |
|
{ |
|
result = (_DWORD *)*result; |
|
--a1; |
|
} |
|
return result; |
|
} */ |
|
// 1002A4B4: using guessed type int dword_1002A4B4; |
|
|
|
// ref: 0x1000D1D4 |
|
HWND UNKCALL SelIPX_1000D1D4(HWND hWnd) { return 0; } |
|
/* { |
|
HWND result; // eax |
|
HWND v2; // esi |
|
HWND v3; // edi |
|
HWND v4; // eax |
|
int v5; // eax |
|
const char *v6; // edi |
|
int v7; // eax |
|
HWND hWnda; // [esp+10h] [ebp-4h] |
|
|
|
hWnda = hWnd; |
|
result = GetParent(hWnd); |
|
v2 = result; |
|
if ( result ) |
|
{ |
|
result = GetDlgItem(result, 1088); |
|
v3 = result; |
|
if ( result ) |
|
{ |
|
result = (HWND)GetWindowLongA(result, -21); |
|
if ( result ) |
|
{ |
|
result = (HWND)*((_DWORD *)result + 3); |
|
if ( result ) |
|
{ |
|
if ( result == (HWND)dword_1002A4B4 ) |
|
{ |
|
v4 = GetDlgItem(v2, 1093); |
|
result = SelIPX_1000D070(v4); |
|
} |
|
else |
|
{ |
|
v5 = SelIPX_1000D18C(v3) - 6; |
|
if ( v5 < 0 ) |
|
v5 = 0; |
|
result = (HWND)SelIPX_1000D1C1(v5); |
|
v6 = (const char *)result; |
|
if ( result ) |
|
{ |
|
TitleSnd_10010315(); |
|
SelIPX_1000CB83(v2, v6); |
|
v7 = GetWindowLongA(hWnda, -12); |
|
SelIPX_1000C818(v2, v7); |
|
result = SelIPX_1000C982(v2); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
return result; |
|
} */ |
|
// 1002A4B4: using guessed type int dword_1002A4B4; |
|
|
|
// ref: 0x1000D284 |
|
HWND UNKCALL SelIPX_1000D284(HWND hWnd) { return 0; } |
|
/* { |
|
HWND v1; // edi |
|
HWND result; // eax |
|
HWND v3; // eax |
|
const char *v4; // ebp |
|
HWND v5; // eax |
|
int v6; // ebx |
|
HWND v7; // eax |
|
HWND v8; // eax |
|
|
|
v1 = hWnd; |
|
result = (HWND)GetWindowLongA(hWnd, -21); |
|
if ( result ) |
|
{ |
|
result = (HWND)*((_DWORD *)result + 3); |
|
if ( result ) |
|
{ |
|
if ( *(_DWORD *)result ) |
|
{ |
|
if ( GetWindowLongA(v1, -12) >= 1093 ) |
|
{ |
|
v3 = GetParent(v1); |
|
result = GetDlgItem(v3, 1089); |
|
if ( result ) |
|
{ |
|
result = (HWND)GetWindowLongA(result, -21); |
|
if ( result ) |
|
{ |
|
v4 = (const char *)*((_DWORD *)result + 3); |
|
if ( v4 ) |
|
{ |
|
TitleSnd_10010315(); |
|
v5 = GetParent(v1); |
|
SelIPX_1000CB83(v5, v4); |
|
v6 = GetWindowLongA(v1, -12); |
|
v7 = GetParent(v1); |
|
SelIPX_1000C818(v7, v6); |
|
v8 = GetParent(v1); |
|
result = SelIPX_1000C982(v8); |
|
} |
|
} |
|
} |
|
} |
|
else |
|
{ |
|
result = SelIPX_1000D070(v1); |
|
} |
|
} |
|
} |
|
} |
|
return result; |
|
} */ |
|
|
|
// ref: 0x1000D31C |
|
HWND UNKCALL SelIPX_1000D31C(HWND hWnd) { return 0; } |
|
/* { |
|
HWND v1; // edi |
|
HWND result; // eax |
|
const char *v3; // ebx |
|
HWND v4; // eax |
|
int v5; // ebx |
|
HWND v6; // eax |
|
HWND v7; // eax |
|
|
|
v1 = hWnd; |
|
if ( GetWindowLongA(hWnd, -12) > 1088 ) |
|
return SelIPX_1000CCD9(v1); |
|
result = (HWND)GetWindowLongA(v1, -21); |
|
if ( result ) |
|
{ |
|
result = (HWND)*((_DWORD *)result + 3); |
|
if ( result ) |
|
{ |
|
v3 = (const char *)dword_1002A4B4; |
|
if ( result != (HWND)dword_1002A4B4 ) |
|
{ |
|
while ( v3 && *(HWND *)v3 != result ) |
|
v3 = *(const char **)v3; |
|
TitleSnd_10010315(); |
|
v4 = GetParent(v1); |
|
SelIPX_1000CB83(v4, v3); |
|
v5 = GetWindowLongA(v1, -12); |
|
v6 = GetParent(v1); |
|
SelIPX_1000C818(v6, v5); |
|
v7 = GetParent(v1); |
|
result = SelIPX_1000C982(v7); |
|
} |
|
} |
|
} |
|
return result; |
|
} */ |
|
// 1002A4B4: using guessed type int dword_1002A4B4; |
|
|
|
// ref: 0x1000D3A0 |
|
int __fastcall SelIPX_1000D3A0(int a1, int a2) { return 0; } |
|
/* { |
|
int v2; // edi |
|
int v3; // esi |
|
|
|
v2 = a2; |
|
v3 = a1; |
|
Fade_100073B4(); |
|
SDlgKillTimer(v3, 3); |
|
Fade_100072BE(10); |
|
return SDlgEndDialog(v3, v2); |
|
} */ |
|
// 10010376: using guessed type int __stdcall SDlgEndDialog(_DWORD, _DWORD); |
|
// 10010418: using guessed type int __stdcall SDlgKillTimer(_DWORD, _DWORD); |
|
|
|
// ref: 0x1000D3C5 |
|
HWND USERCALL SelIPX_1000D3C5(HWND hDlg, int a2) { return 0; } |
|
/* { |
|
HWND v2; // edi |
|
HWND v3; // eax |
|
HWND v4; // esi |
|
HWND result; // eax |
|
int v6; // esi |
|
HWND v7; // esi |
|
int v8; // eax |
|
HWND v9; // edi |
|
int v10; // [esp-DCh] [ebp-E4h] |
|
signed int v11; // [esp-5Ch] [ebp-64h] |
|
HWND v12; // [esp-54h] [ebp-5Ch] |
|
signed int v13; // [esp-Ch] [ebp-14h] |
|
signed int v14; // [esp-8h] [ebp-10h] |
|
int v15; // [esp-4h] [ebp-Ch] |
|
int v16; // [esp+0h] [ebp-8h] |
|
int v17; // [esp+4h] [ebp-4h] |
|
|
|
v2 = hDlg; |
|
v3 = GetFocus(); |
|
v4 = v3; |
|
result = GetParent(v3); |
|
if ( v2 == result ) |
|
{ |
|
result = (HWND)GetWindowLongA(v4, -21); |
|
if ( result ) |
|
{ |
|
v6 = *((_DWORD *)result + 3); |
|
TitleSnd_1001031F(); |
|
if ( *(_DWORD *)(v6 + 4) ) |
|
{ |
|
result = (HWND)SelIPX_1000D5B0((int)v2, v6); |
|
} |
|
else |
|
{ |
|
v17 = a2; |
|
v7 = v2; |
|
SelIPX_1000C9DA(v2); |
|
memcpy(&v11, dword_1002A4A0, 0x50u); |
|
v11 = 80; |
|
v12 = v2; |
|
memset(&v13, 0, 0x10u); |
|
v13 = 16; |
|
v14 = 1230002254; |
|
v8 = *(_DWORD *)(dword_1002A4AC + 24); |
|
v16 = 0; |
|
v15 = v8; |
|
v9 = GetFocus(); |
|
SelIPX_1000D4CA(v7, 0); |
|
SelIPX_1000D520((char *)&v10); |
|
if ( CreaDung_100051D8( |
|
(int)&v13, |
|
dword_1002A4AC, |
|
dword_1002A49C, |
|
(int)&v11, |
|
dword_1002A4BC, |
|
gnIpxPlayerid, |
|
0, |
|
(int)&v10) ) |
|
{ |
|
result = (HWND)SelIPX_1000D3A0((int)v7, 1); |
|
} |
|
else |
|
{ |
|
SelIPX_1000D4CA(v7, 1); |
|
result = SetFocus(v9); |
|
} |
|
} |
|
} |
|
} |
|
return result; |
|
} */ |
|
// 1000D3C5: could not find valid save-restore pair for ebp |
|
// 1002A49C: using guessed type int dword_1002A49C; |
|
// 1002A4A8: using guessed type int gnIpxPlayerid; |
|
// 1002A4AC: using guessed type int dword_1002A4AC; |
|
// 1002A4BC: using guessed type int dword_1002A4BC; |
|
|
|
// ref: 0x1000D4CA |
|
BOOL __fastcall SelIPX_1000D4CA(HWND hDlg, int a2) { return 0; } |
|
/* { |
|
HWND v2; // ebx |
|
int v3; // ebp |
|
HWND v4; // eax |
|
HWND v5; // eax |
|
BOOL result; // eax |
|
int nCmdShow; // [esp+10h] [ebp-4h] |
|
|
|
nCmdShow = a2; |
|
v2 = hDlg; |
|
v3 = 1088; |
|
do |
|
{ |
|
v4 = GetDlgItem(v2, v3); |
|
if ( v4 ) |
|
ShowWindow(v4, nCmdShow); |
|
++v3; |
|
} |
|
while ( v3 <= 1093 ); |
|
v5 = GetDlgItem(v2, 1105); |
|
if ( dword_1002A4B8 > 6 ) |
|
result = ShowWindow(v5, nCmdShow); |
|
else |
|
result = ShowWindow(v5, 0); |
|
return result; |
|
} */ |
|
|
|
// ref: 0x1000D520 |
|
char *UNKCALL SelIPX_1000D520(char *arg) { return 0; } |
|
/* { |
|
char *v1; // esi |
|
char *result; // eax |
|
signed int v3; // edi |
|
signed int v4; // eax |
|
char v5; // [esp+4h] [ebp-80h] |
|
|
|
v1 = arg; |
|
Connect_10004028((int)&v5, 128, 0, 0); |
|
if ( !SelIPX_1000D58D((const char *)dword_1002A4B4, &v5) ) |
|
return strcpy(v1, &v5); |
|
v3 = 2; |
|
do |
|
{ |
|
v4 = v3++; |
|
wsprintfA(v1, "%s %d", &v5, v4); |
|
result = (char *)SelIPX_1000D58D((const char *)dword_1002A4B4, v1); |
|
} |
|
while ( result ); |
|
return result; |
|
} */ |
|
// 1002A4B4: using guessed type int dword_1002A4B4; |
|
|
|
// ref: 0x1000D58D |
|
const char *__fastcall SelIPX_1000D58D(const char *a1, const char *a2) { return 0; } |
|
/* { |
|
const char *v2; // edi |
|
const char *i; // esi |
|
|
|
v2 = a2; |
|
for ( i = a1; i && _strcmpi(i + 12, v2); i = *(const char **)i ) |
|
; |
|
return i; |
|
} */ |
|
|
|
// ref: 0x1000D5B0 |
|
int __fastcall SelIPX_1000D5B0(int a1, int a2) { return 0; } |
|
/* { |
|
int v2; // esi |
|
CHAR *v3; // edx |
|
CHAR v5; // [esp+Ch] [ebp-384h] |
|
CHAR v6; // [esp+10Ch] [ebp-284h] |
|
char v7; // [esp+20Ch] [ebp-184h] |
|
CHAR Buffer; // [esp+28Ch] [ebp-104h] |
|
int v9; // [esp+30Ch] [ebp-84h] |
|
int v10; // [esp+38Ch] [ebp-4h] |
|
|
|
v2 = a2; |
|
v10 = a1; |
|
Connect_10004028((int)&v9, 128, (int)&v7, 128); |
|
if ( UiAuthCallback(2, (int)&v9, &v7, 0, (char *)(v2 + 140), &v6, 256) ) |
|
{ |
|
if ( SNetJoinGame(*(_DWORD *)(v2 + 4), v2 + 12, 0, &v9, &v7, gnIpxPlayerid) ) |
|
return SelIPX_1000D3A0(v10, 1); |
|
if ( SErrGetLastError() == -2062548871 ) |
|
LoadStringA(hInstance, 0x32u, &Buffer, 127);//"\nUnable to join the detected game. Your version of Diablo is incompatible with the game creator's version." |
|
else |
|
LoadStringA(hInstance, 0x25u, &Buffer, 127);//"\n\nUnable to join game \"%s.\"" |
|
wsprintfA(&v5, &Buffer, v2 + 12); |
|
v3 = &v5; |
|
} |
|
else |
|
{ |
|
v3 = &v6; |
|
} |
|
return SelYesNo_1000FD39(v10, v3, 0, 0); |
|
} */ |
|
// 10010406: using guessed type _DWORD __stdcall SErrGetLastError(); |
|
// 10010430: using guessed type int __stdcall SNetJoinGame(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); |
|
// 1002A4A8: using guessed type int gnIpxPlayerid; |
|
|
|
// ref: 0x1000D696 |
|
HWND __fastcall SelIPX_1000D696(HWND hDlg, int a2, int a3) { return 0; } |
|
/* { |
|
int v3; // ebx |
|
HWND v4; // esi |
|
int v5; // ST08_4 |
|
HWND v6; // eax |
|
HWND result; // eax |
|
HWND v8; // eax |
|
HWND v9; // eax |
|
HWND v10; // eax |
|
int v11; // eax |
|
int v12; // eax |
|
int v13; // eax |
|
HWND v14; // eax |
|
HWND v15; // eax |
|
HWND v16; // eax |
|
HWND v17; // eax |
|
|
|
v3 = a2; |
|
v4 = hDlg; |
|
v5 = a2; |
|
v6 = GetDlgItem(hDlg, 1056); |
|
if ( local_10007C3B(v4, v6, v5, a3) ) |
|
return SelIPX_1000D3C5(v4, a3); |
|
v8 = GetDlgItem(v4, 1054); |
|
if ( local_10007C3B(v4, v8, v3, a3) ) |
|
return (HWND)SelIPX_1000D3A0((int)v4, 2); |
|
v9 = GetDlgItem(v4, 1105); |
|
result = (HWND)local_10007C3B(v4, v9, v3, a3); |
|
if ( result ) |
|
{ |
|
v10 = GetDlgItem(v4, 1105); |
|
v11 = Sbar_100099DC(v10, v3, a3) - 1; |
|
if ( v11 ) |
|
{ |
|
v12 = v11 - 1; |
|
if ( v12 ) |
|
{ |
|
v13 = v12 - 1; |
|
if ( v13 ) |
|
{ |
|
result = (HWND)(v13 - 1); |
|
if ( !result ) |
|
{ |
|
v14 = GetFocus(); |
|
result = SelIPX_1000D0E1(v14); |
|
} |
|
} |
|
else |
|
{ |
|
v15 = GetFocus(); |
|
result = SelIPX_1000D1D4(v15); |
|
} |
|
} |
|
else |
|
{ |
|
v16 = GetFocus(); |
|
result = SelIPX_1000D284(v16); |
|
} |
|
} |
|
else |
|
{ |
|
v17 = GetFocus(); |
|
result = SelIPX_1000D31C(v17); |
|
} |
|
} |
|
return result; |
|
} */
|
|
|