diff --git a/.editorconfig b/.editorconfig index 4fd3d544f..c90d5fd95 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,8 +1,11 @@ -root = true - -[*] -indent_style = tab -end_of_line = crlf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true +root = true + +[*] +indent_style = tab +end_of_line = crlf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.sh] +end_of_line = lf diff --git a/.travis/are-we-d1-yet.sh b/.travis/are-we-d1-yet.sh index dcdab1883..7ab4a4a2b 100755 --- a/.travis/are-we-d1-yet.sh +++ b/.travis/are-we-d1-yet.sh @@ -3,7 +3,7 @@ # based on https://github.com/k3rn31p4nic/travis-ci-discord-webhook # Only run for commits/builds on master, not for PRs for now -if [[ "$TRAVIS_BRANCH" != "master" || $TRAVIS_PULL_REQUEST != "false" ]]; then +if [[ "$TRAVIS_BRANCH" != "nightly" || $TRAVIS_PULL_REQUEST != "false" ]]; then exit fi diff --git a/3rdParty/Storm/Source/storm.cpp b/3rdParty/Storm/Source/storm.cpp index cfb7c17e5..eb0caba1b 100644 --- a/3rdParty/Storm/Source/storm.cpp +++ b/3rdParty/Storm/Source/storm.cpp @@ -7,9 +7,7 @@ BOOL STORMAPI SNetCreateGame(const char *pszGameName, const char *pszGamePassword, const char *pszGameStatString, DWORD dwGameType, char *GameTemplateData, int GameTemplateSize, int playerCount, char *creatorName, char *a11, int *playerID) rBool; BOOL STORMAPI SNetDestroy() rBool; -BOOL STORMAPI SNetEnumProviders(int (STORMAPI *callback)(DWORD, DWORD, DWORD, DWORD), int mincaps) rBool; -BOOL STORMAPI SNetEnumGames(int (STORMAPI *callback)(DWORD, DWORD, DWORD), int *hintnextcall) rBool; BOOL STORMAPI SNetDropPlayer(int playerid, DWORD flags) rBool; BOOL STORMAPI SNetGetGameInfo(int type, void *dst, size_t length, size_t *byteswritten) rBool; @@ -57,6 +55,7 @@ BOOL STORMAPI SDlgEndDialog(HWND hDlg, HANDLE nResult) rBool; BOOL STORMAPI SDlgSetControlBitmaps(HWND parentwindow, int *id, int a3, char *buffer2, char *buffer, int flags, int mask) rBool; +BOOL STORMAPI SDlgBltToWindowI(HWND hWnd, HRGN a2, char *a3, int a4, void *buffer, RECT *rct, SIZE *size, int a8, int a9, DWORD rop) rBool; BOOL STORMAPI SDlgBltToWindowE(HWND hWnd, HRGN a2, char *a3, int a4, void *buffer, RECT *rct, SIZE *size, int a8, int a9, DWORD rop) rBool; BOOL STORMAPI SDlgSetBitmapE(HWND hWnd, int a2, char *src, int mask1, int flags, int a6, int a7, int width, int a9, int mask2) rBool; @@ -93,6 +92,7 @@ BOOL STORMAPI SFileLoadFileEx(void *hArchive, char *filename, int a3, int a4, in BOOL STORMAPI SBltROP3(void *lpDstBuffer, void *lpSrcBuffer, int width, int height, int a5, int a6, int a7, DWORD rop) rBool; BOOL STORMAPI SBltROP3Clipped(void *lpDstBuffer, RECT *lpDstRect, POINT *lpDstPt, int a4, void *lpSrcBuffer, RECT *lpSrcRect, POINT *lpSrcPt, int a8, int a9, DWORD rop) rBool; +BOOL STORMAPI SBltROP3Tiled(void *lpDstBuffer, RECT *lpDstRect, POINT *lpDstPt, int a4, void *lpSrcBuffer, RECT *lpSrcRect, POINT *lpSrcPt, int a8, int a9, DWORD rop) rBool; BOOL STORMAPI SBmpDecodeImage(DWORD dwImgType, void *pSrcBuffer, DWORD dwSrcBuffersize, PALETTEENTRY *pPalette, void *pDstBuffer, DWORD dwDstBuffersize, DWORD *pdwWidth, DWORD *pdwHeight, DWORD *pdwBpp) rBool; @@ -190,7 +190,7 @@ int STORMAPI SMemCmp(void *location1, void *location2, DWORD size) rInt; int STORMAPI SStrCopy(char *dest, const char *src, int max_length) rInt; DWORD STORMAPI SStrHash(const char *string, DWORD flags, DWORD Seed) rInt; -int STORMAPI SStrNCat(char *dest, const char *src, DWORD max_length) rInt; +int STORMAPI SStrPack(char *dest, const char *src, DWORD max_length) rInt; int STORMAPI SStrLen(const char* string) rInt; @@ -247,3 +247,4 @@ BOOL __stdcall SDlgSetTimer(int a1, int a2, int a3, void (__stdcall *a4)(int, in BOOL __stdcall SDlgKillTimer(int a1, int a2) rBool; BOOL __stdcall SDlgDrawBitmap(HWND hWnd, int a2, int a3, int a4, int a5, int a6, int a7) rBool; BOOL __stdcall SDlgDialogBoxParam(HINSTANCE hInst, char *szDialog, int a3, WNDPROC func, int a5) rBool; +BOOL __stdcall SGdiTextOut(void *pBuffer, int x, int y, int mask, char *str, int len) rBool; diff --git a/3rdParty/Storm/Source/storm.def b/3rdParty/Storm/Source/storm.def index da801e1e6..180910df6 100644 --- a/3rdParty/Storm/Source/storm.def +++ b/3rdParty/Storm/Source/storm.def @@ -3,9 +3,9 @@ LIBRARY "Storm" EXPORTS SNetCreateGame @101 NONAME SNetDestroy @102 NONAME - SNetEnumProviders @103 NONAME - ;SNetEnumDevices @104 NONAME - SNetEnumGames @105 NONAME + ;SNetEnumDevices @103 NONAME + ;SNetEnumGames @104 NONAME + ;SNetEnumProviders @105 NONAME SNetDropPlayer @106 NONAME SNetGetGameInfo @107 NONAME ;SNetGetNetworkLatency @108 NONAME @@ -52,7 +52,7 @@ EXPORTS ;Ordinal151 @151 NONAME SDlgBeginPaint @201 NONAME - ;SDlgBltToWindowI @202 NONAME + SDlgBltToWindowI @202 NONAME ;SDlgCheckTimers @203 NONAME ;SDlgCreateDialogIndirectParam @204 NONAME ;SDlgCreateDialogParam @205 NONAME @@ -134,7 +134,7 @@ EXPORTS ;SBltGetSCode @312 NONAME SBltROP3 @313 NONAME SBltROP3Clipped @314 NONAME - ;SBltROP3Tiled @315 NONAME + SBltROP3Tiled @315 NONAME SBmpDecodeImage @321 NONAME @@ -187,7 +187,7 @@ EXPORTS ;SGdiRectangle @388 NONAME SGdiSelectObject @389 NONAME SGdiSetPitch @390 NONAME - ;SGdiTextOut @391 NONAME + SGdiTextOut @391 NONAME ;SGdi392 @392 NONAME Ordinal393 @393 NONAME @@ -288,7 +288,7 @@ EXPORTS SStrCopy @501 NONAME SStrHash @502 NONAME - SStrNCat @503 NONAME + SStrPack @503 NONAME ;SStrTokenize @504 NONAME ;SStrPack @505 NONAME SStrLen @506 NONAME diff --git a/3rdParty/Storm/Source/storm.h b/3rdParty/Storm/Source/storm.h index b2fc9a868..3e3b173a9 100644 --- a/3rdParty/Storm/Source/storm.h +++ b/3rdParty/Storm/Source/storm.h @@ -66,9 +66,6 @@ extern "C" { BOOL STORMAPI SNetCreateGame(const char *pszGameName, const char *pszGamePassword, const char *pszGameStatString, DWORD dwGameType, char *GameTemplateData, int GameTemplateSize, int playerCount, char *creatorName, char *a11, int *playerID); BOOL STORMAPI SNetDestroy(); -BOOL STORMAPI SNetEnumProviders(int (STORMAPI *callback)(DWORD, DWORD, DWORD, DWORD), int mincaps); - -BOOL STORMAPI SNetEnumGames(int (STORMAPI *callback)(DWORD, DWORD, DWORD), int *hintnextcall); /* SNetDropPlayer @ 106 * @@ -464,6 +461,7 @@ BOOL STORMAPI SDlgSetControlBitmaps(HWND parentwindow, int *id, int a3, char *bu BOOL STORMAPI SDlgSetSystemCursor(void *lpSrcBuffer, void *p_a2, LPSIZE lpSize, LPCSTR lpCursorName); */ +BOOL STORMAPI SDlgBltToWindowI(HWND hWnd, HRGN a2, char *a3, int a4, void *buffer, RECT *rct, SIZE *size, int a8, int a9, DWORD rop); BOOL STORMAPI SDlgBltToWindowE(HWND hWnd, HRGN a2, char *a3, int a4, void *buffer, RECT *rct, SIZE *size, int a8, int a9, DWORD rop); BOOL STORMAPI SDlgSetBitmapE(HWND hWnd, int a2, char *src, int mask1, int flags, int a6, int a7, int width, int a9, int mask2); @@ -538,6 +536,7 @@ BOOL STORMAPI SFileLoadFileEx(void *hArchive, char *filename, int a3, int a4, in BOOL STORMAPI SBltROP3(void *lpDstBuffer, void *lpSrcBuffer, int srcDrawWidth, int srcDrawHeight, int dstWidth, int srcWidth, int a7, DWORD rop); BOOL STORMAPI SBltROP3Clipped(void *lpDstBuffer, RECT *lpDstRect, POINT *lpDstPt, int a4, void *lpSrcBuffer, RECT *lpSrcRect, POINT *lpSrcPt, int a8, int a9, DWORD rop); +BOOL STORMAPI SBltROP3Tiled(void *lpDstBuffer, RECT *lpDstRect, POINT *lpDstPt, int a4, void *lpSrcBuffer, RECT *lpSrcRect, POINT *lpSrcPt, int a8, int a9, DWORD rop); #define SBMP_DEFAULT 0 #define SBMP_BMP 1 @@ -1127,7 +1126,7 @@ SStrHash( DWORD flags = 0, DWORD Seed = 0); -int STORMAPI SStrNCat(char *dest, const char *src, DWORD max_length); +int STORMAPI SStrPack(char *dest, const char *src, DWORD max_length); /* SStrLen @ 506 * @@ -1310,6 +1309,7 @@ BOOL __stdcall SDlgSetTimer(int a1, int a2, int a3, void (__stdcall *a4)(int, in BOOL __stdcall SDlgKillTimer(int a1, int a2); BOOL __stdcall SDlgDrawBitmap(HWND hWnd, int a2, int a3, int a4, int a5, int a6, int a7); BOOL __stdcall SDlgDialogBoxParam(HINSTANCE hInst, char *szDialog, int a3, WNDPROC func, int a5); +BOOL __stdcall SGdiTextOut(void *pBuffer, int x, int y, int mask, char *str, int len); #ifdef __GNUC__ } diff --git a/3rdParty/Storm/Source/storm_gcc.def b/3rdParty/Storm/Source/storm_gcc.def index 2df6ba6e4..7e7676574 100644 --- a/3rdParty/Storm/Source/storm_gcc.def +++ b/3rdParty/Storm/Source/storm_gcc.def @@ -5,9 +5,9 @@ EXPORTS SNetCreateGame@40 @101 NONAME SNetDestroy @102 NONAME SNetDestroy@0 @102 NONAME - SNetEnumProviders @103 NONAME - ;SNetEnumDevices @104 NONAME - SNetEnumGames @105 NONAME + ;SNetEnumDevices @103 NONAME + ;SNetEnumGames @104 NONAME + ;SNetEnumProviders @105 NONAME SNetDropPlayer @106 NONAME SNetDropPlayer@8 @106 NONAME SNetGetGameInfo @107 NONAME @@ -71,7 +71,8 @@ EXPORTS SDlgBeginPaint @201 NONAME SDlgBeginPaint@8 @201 NONAME - ;SDlgBltToWindowI @202 NONAME + SDlgBltToWindowI @202 NONAME + SDlgBltToWindowI@28 @202 NONAME ;SDlgCheckTimers @203 NONAME ;SDlgCreateDialogIndirectParam @204 NONAME ;SDlgCreateDialogParam @205 NONAME @@ -177,7 +178,8 @@ EXPORTS ;SBltGetSCode @312 NONAME SBltROP3 @313 NONAME SBltROP3Clipped @314 NONAME - ;SBltROP3Tiled @315 NONAME + SBltROP3Tiled @315 NONAME + SBltROP3Tiled@40 @315 NONAME SBmpDecodeImage @321 NONAME @@ -235,7 +237,8 @@ EXPORTS ;SGdiRectangle @388 NONAME SGdiSelectObject @389 NONAME SGdiSetPitch @390 NONAME - ;SGdiTextOut @391 NONAME + SGdiTextOut @391 NONAME + SGdiTextOut@24 @391 NONAME ;SGdi392 @392 NONAME Ordinal393 @393 NONAME @@ -353,7 +356,7 @@ EXPORTS SStrCopy @501 NONAME SStrCopy@12 @501 NONAME SStrHash @502 NONAME - SStrNCat @503 NONAME + SStrPack @503 NONAME ;SStrTokenize @504 NONAME ;SStrPack @505 NONAME SStrLen @506 NONAME diff --git a/DiabloUI/_temp_data.cpp b/DiabloUI/_temp_data.cpp index 01f521eb0..2b18f339a 100644 --- a/DiabloUI/_temp_data.cpp +++ b/DiabloUI/_temp_data.cpp @@ -8,12 +8,28 @@ ProfileStruct bnprofiles[4] = }; int profilemsg1[6] = { 1125, 1127, 1129, 1131, 1133, 0 }; int profilemsg2[6] = { 1126, 1128, 1130, 1132, 1134, 0 }; +int Connect_cpp_float_value = 2139095040; // weak +int CopyProt_cpp_float_value = 2139095040; // weak +int cr8game_cpp_float_value = 2139095040; // weak +int CreaDung_cpp_float_value = 2139095040; // weak +int CreaStat_cpp_float_value = 2139095040; // weak +int credits_cpp_float_value = 2139095040; // weak int DiabEdit_cpp_float_value = 2139095040; // weak int DiabloUI_cpp_float_value = 2139095040; // weak int doom_cpp_float_value = 2139095040; // weak +int EntName_cpp_float_value = 2139095040; // weak int fade_cpp_float_value = 2139095040; // weak int focus_cpp_float_value = 2139095040; // weak int local_cpp_float_value = 2139095040; // weak +int mainmenu_cpp_float_value = 2139095040; // weak +int OkCancel_cpp_float_value = 2139095040; // weak +int Sbar_cpp_float_value = 2139095040; // weak +int Sbar_cpp_float_value2 = 2139095040; // weak +int SelClass_cpp_float_value = 2139095040; // weak +int SelHero_cpp_float_value = 2139095040; // weak +int SelList_cpp_float_value = 2139095040; // weak +int SelLoad_cpp_float_value = 2139095040; // weak +int SelYesNo_cpp_float_value = 2139095040; // weak int Title_cpp_float_value = 2139095040; // weak int titlesnd_cpp_float_value = 2139095040; // weak int dword_10022258 = 4; // weak @@ -24,11 +40,18 @@ ProfFntStruct proffnts[4] = { 10, "Arial", 700 }, { 13, "Time New Roman", 400 } }; -int dword_100228DC[3] = { 1038, 1080, 0 }; -int dword_100228E8[2] = { 1097, 0 }; -int dword_100228F0[2] = { 1099, 0 }; -int dword_100228F8[3] = { 1056, 1054, 0 }; -int dword_10022904[4] = { 1094, 1095, 1096, 0 }; +unsigned char connect_subnet_ip[4][4] = +{ + { 13, 0, 0, 0 }, // 13.0.0.0 + { 128, 128, 128, 0 }, // 128.128.128.0 + { 14, 0, 0, 0 }, // 14.0.0.0 + { 255, 255, 255, 0 } // 255.255.255.0 +}; +int creadung_msgtbl1[3] = { 1038, 1080, 0 }; +int creadung_msgtbl2[2] = { 1097, 0 }; +int creadung_msgtbl3[2] = { 1099, 0 }; +int creadung_msgtbl4[3] = { 1056, 1054, 0 }; +int creadung_msgtbl5[4] = { 1094, 1095, 1096, 0 }; short defstats[3][4] = { { 30, 15, 20, 30 }, { 25, 20, 30, 20 }, { 15, 35, 25, 20 } }; int dword_10022A2C[3] = { 1038, 1080, 0 }; int dword_10022A38[2] = { 1097, 0 }; @@ -40,19 +63,19 @@ int dword_10022AA4[4] = { 1084, 1085, 1086, 0 }; int dword_10022AFC[2] = { 1038, 0 }; int dword_10022B04[3] = { 1056, 1054, 0 }; int dword_10022B10[2] = { 1116, 0 }; -int dword_10022B34[2] = { 1038, 0 }; -int dword_10022B3C[3] = { 1056, 1054, 0 }; -int dword_10022B48[2] = { 1065, 0 }; -int dword_10022BE0[2] = { 1042, 0 }; -int dword_10022BE8[6] = { 1044, 1001, 1002, 1003, 2, 0 }; +int entname_msgtbl1[2] = { 1038, 0 }; +int entname_msgtbl2[3] = { 1056, 1054, 0 }; +int entname_msgtbl3[2] = { 1065, 0 }; +int menumsgs_1option[2] = { 1042, 0 }; +int menumsgs_5options[6] = { 1044, 1001, 1002, 1003, 2, 0 }; int dword_10022C4C[2] = { 1038, 0 }; int dword_10022C54[2] = { 1080, 0 }; int dword_10022C5C[2] = { 1108, 0 }; int dword_10022CAC[2] = { 1026, 0 }; int dword_10022CB4[2] = { 2, 0 }; -int dword_10022EB4[2] = { 1038, 0 }; -int dword_10022EBC[3] = { 1056, 1054, 0 }; -int dword_10022EC8[4] = { 1062, 1063, 1064, 0 }; +int selclass_msgtbl1[2] = { 1038, 0 }; +int selclass_msgtbl2[3] = { 1056, 1054, 0 }; +int selclass_msgtbl3[4] = { 1062, 1063, 1064, 0 }; int dword_10022ED8[3] = { 1038, 1080, 0 }; int dword_10022EE4[3] = { 1143, 1147, 0 }; int dword_10022EF0[4] = { 1081, 1076, 1144, 0 }; @@ -63,21 +86,21 @@ char *off_10022F8C[4] = { "Entry1", "Entry2", "Entry3", "Entry4" }; int dword_10022F9C[2] = { 1038, 0 }; int dword_10022FA4[3] = { 1056, 1054, 0 }; int dword_10022FB0[7] = { 1117, 1118, 1119, 1120, 1121, 1122, 0 }; -int dword_10023000[2] = { 1038, 0 }; -int dword_10023008[6] = { 1057, 1058, 1059, 1060, 1061, 0 }; -int dword_10023020[6] = { 1014, 1018, 1017, 1016, 1015, 0 }; +int selhero_msgtbl_string[2] = { 1038, 0 }; +int selhero_msgtbl_3[6] = { 1057, 1058, 1059, 1060, 1061, 0 }; +int selhero_msgtbl_info[6] = { 1014, 1018, 1017, 1016, 1015, 0 }; int dword_100230F0[3] = { 1038, 1080, 0 }; int dword_100230FC[2] = { 1097, 0 }; int dword_10023104[2] = { 1098, 0 }; int dword_1002310C[3] = { 1056, 1054, 0 }; int dword_10023118[7] = { 1088, 1089, 1090, 1091, 1092, 1093, 0 }; -int dword_10023174[2] = { 1038, 0 }; -int dword_1002317C[3] = { 1056, 1054, 0 }; -int dword_10023188[2] = { 1006, 0 }; -int dword_10023190[7] = { 1047, 1048, 1049, 1050, 1051, 1052, 0 }; -int dword_100231AC[2] = { 1038, 0 }; -int dword_100231B4[3] = { 1056, 1054, 0 }; -int dword_100231C0[3] = { 1106, 1107, 0 }; +int sellist_msgtbl1[2] = { 1038, 0 }; +int sellist_msgtbl2[3] = { 1056, 1054, 0 }; +int sellist_msgtbl3[2] = { 1006, 0 }; +int sellist_msgtbl4[7] = { 1047, 1048, 1049, 1050, 1051, 1052, 0 }; +int selload_msgtbl1[2] = { 1038, 0 }; +int selload_msgtbl2[3] = { 1056, 1054, 0 }; +int selload_msgtbl3[3] = { 1106, 1107, 0 }; int dword_100231CC[2] = { 1038, 0 }; int dword_100231D4[3] = { 1080, 1097, 0 }; int dword_100231E0[2] = { 1123, 0 }; @@ -88,8 +111,8 @@ int dword_10023250[2] = { 1142, 0 }; int dword_10023258[2] = { 1146, 0 }; int dword_10023260[3] = { 1056, 1054, 0 }; int dword_1002326C[7] = { 1135, 1136, 1137, 1138, 1139, 1140, 0 }; -int dword_100232D4[2] = { 1026, 0 }; -int dword_100232DC[3] = { 1109, 2, 0 }; +int yesno_msgtbl2[2] = { 1026, 0 }; +int yesno_msgtbl1[3] = { 1109, 2, 0 }; int titlemsgtbl[2] = { 1067, 0 }; //data+bss @@ -129,73 +152,70 @@ int dword_10029478; // weak int dword_10029480; // weak int dword_10029488; // weak int dword_1002948C; // weak -int dword_100294A0; // weak -int dword_100294A4; // weak -DWORD dword_100294A8; // idb -char byte_100294B0[128]; // idb -char byte_10029530[128]; // weak -int dword_100295B0; // weak -DWORD dword_100295B8; // idb -int dword_100295BC; // weak -int dword_100295C0; // weak -DWORD dword_100295C8; // idb -int dword_100295CC; // weak -int dword_100295D0; // weak -int dword_100295D4; // weak -BYTE *dword_100295D8; // idb -BYTE *dword_100295DC; // idb -BYTE *dword_100295E0; // idb -void *dword_100295E4; // idb -int dword_100295E8[10]; // idb -int dword_10029610; // weak -int dword_10029614; // weak -HGLOBAL dword_10029618; // idb -HGLOBAL dword_1002961C; // idb -int dword_10029620; // weak -HGLOBAL dword_10029624; // idb -HGDIOBJ dword_10029628; // idb -int dword_1002962C; // weak -int dword_10029630; // weak -int dword_10029634; // weak -int dword_10029638; // weak -int dword_1002963C; // weak -int dword_10029640; // weak -int dword_10029644; // weak -char byte_10029648; // weak -char byte_1002964C; // weak -HWND dword_10029650; // idb -HWND dword_10029654; // idb -int dword_10029658; // weak -DWORD dword_10029660; // idb -int dword_10029668; // weak -int dword_1002966C; // weak -char byte_10029670; // idb -char byte_10029690[32]; // weak -BYTE *dword_100296B0; -BYTE *dword_100296B4; // idb -BYTE *dword_100296B8; // idb -int dword_100296BC; // weak -int dword_100296C0; // weak -int dword_100296C4; // weak -int dword_100296C8; // weak -int dword_100296CC; // weak -int dword_100296D0; // weak -int dword_100296D4; // weak -int dword_100296D8; // weak -int dword_100296DC; // weak -int dword_100296E0; // weak -int dword_100296E8; // weak -int dword_100296EC; // weak -HGLOBAL dword_100296F0; // idb -int dword_100296F4; // weak -int dword_100296F8; // weak -int dword_100296FC; // weak -int dword_10029700; // weak -void *dword_10029704; // idb -int dword_10029708; // weak +int Connect_cpp_float; // weak +int special_frames; // weak +DWORD heroport_data[2]; +char connect_categorystr[128]; +char connect_plrinfostr[128]; +int heronum_frames2; // weak +DWORD special_data[2]; +int heroport_frames; // weak +DWORD heronum_data[2]; +int heronum_frames; // idb +int connect_draw_height; // idb +BYTE *connect_data1; // idb +BYTE *connect_data2; // idb +BYTE *connect_data3; // idb +void *connect_data4; // idb +HANDLE connect_trans[10]; +char *connect_charname; +int connect_color_text; // weak +HGLOBAL copyprot_popupart; // idb +HGLOBAL copyprot_artpal; // idb +int CopyProt_cpp_float; // weak +HGLOBAL copyprot_btnart; // idb +HGDIOBJ cr8game_hobject; // idb +int cr8game_cpp_float; // weak +int cr8_playercount; // weak +DWORD *cr8_somegamestruct; +int cr8_dword_10029638; // weak +int cr8_dword_1002963C; // weak +int cr8_dword_10029640; // weak +int *cr8game_playerID; // idb +_gamedata cr8_gamedata; +HWND cr8_sendmsg1; // idb +HWND cr8_sendmsg2; // idb +int cr8_dword_10029658; // weak +DWORD cr8diffbtns_size[2]; +int cr8_dword_10029668; // weak +int cr8_dword_1002966C; // idb +char cr8_gamename[32]; +char cr8_gamepassword[32]; +BYTE *cr8_creat_bg_ptr; +BYTE *cr8_but_xsm_ptr; // idb +BYTE *cr8_diffbtns_ptr; // idb +int creadung_playername; // weak +int *creadung_playerID; // idb +int CreaDung_cpp_float; // weak +int creadung_dword_100296C8; // weak +int creadung_delspinners; // weak +DWORD *crea_somegamestruct; +int creadung_lasterror; // weak +int creadung_dword_100296D8; // weak +char *creadung_gamename; +int CreaStat_cpp_float; // weak +int credittext_size; // weak +int credits_cpp_float; // weak +HGLOBAL credittext_rsrc; // idb +int credit_vertical_pos2; // idb +int credit_horz_pos; // idb +int credit_vertical_pos1; // weak +int credit_line_count; // weak +void *credit_back_img; // idb +HANDLE creditsobj; // idb int DiabEdit_cpp_float; // weak int DiabloUI_cpp_float; // weak -int dword_10029714; // weak +int sgbUiIsInitialized; // weak HINSTANCE ghUiInst; // idb int backbmp_flag1; // weak int backbmp_flag2; // weak @@ -215,8 +235,8 @@ int dword_10029850; // weak int doom_cpp_float; // weak LPSTR dword_10029858; // idb int dword_1002985C; // weak -int dword_10029860; // weak -LPSTR dword_10029864; // idb +int EntName_cpp_float; // weak +char *entname_charname; int fade_cpp_float; // weak int sgbFadeRange; // idb tagPALETTEENTRY fadepal[256]; @@ -230,15 +250,14 @@ int dword_10029CA8; // weak int dword_10029CAC; // weak int sgnSpinnerFrame; // weak int local_cpp_float; // weak -int gdwCursWidth; // weak -int gdwCursHeight; // weak +DWORD gdwCursData[2]; // weak tagPALETTEENTRY artpal[256]; HGDIOBJ objPalette; // idb BYTE *gpCursorArt; BYTE *gpCursorArt2; -int dword_1002A0D4; // weak -char byte_1002A0D8; // idb -int dword_1002A118; // weak +int mainmenu_cpp_float; // weak +char menu_version_str[64]; +int menu_item_timer; // weak int dword_1002A120; // weak int dword_1002A124; // weak int dword_1002A128; // weak @@ -259,7 +278,7 @@ int dword_1002A258; // weak int dword_1002A25C; // weak int (*dword_1002A260)(void); // weak char byte_1002A264; // idb -int dword_1002A2E4; // weak +int OkCancel_cpp_float; // weak int dword_1002A2E8; // weak int dword_1002A2EC; // weak int dword_1002A2F0; // weak @@ -275,9 +294,9 @@ BYTE *dword_1002A31C; // idb BYTE *dword_1002A320; // idb BYTE *dword_1002A324; // idb void *dword_1002A328; // idb -int dword_1002A338; // weak -int dword_1002A344; // weak -int dword_1002A348; // weak +int Sbar_cpp_float; // weak +int Sbar_cpp_float2; // weak +int SelClass_cpp_float; // weak int dword_1002A34C; // idb int dword_1002A350; // weak int dword_1002A354; // weak @@ -295,30 +314,26 @@ char byte_1002A380[128]; // weak int dword_1002A400; // weak int dword_1002A404; // weak int dword_1002A408; // weak -int (__stdcall *dword_1002A410)(_DWORD, _DWORD); // weak -int dword_1002A414; // weak -DWORD dword_1002A418; // idb -int dword_1002A41C; // idb -int dword_1002A420; // weak -int dword_1002A424; // weak -int dword_1002A428; // weak -CHAR byte_1002A42C[8]; // idb -int (__stdcall *dword_1002A434)(_DWORD); // weak -int (__stdcall *dword_1002A438)(_DWORD); // weak -CHAR byte_1002A43C[4]; // idb -char byte_1002A440; // idb -int (UNKCALL *dword_1002A450)(_DWORD, _DWORD); // weak -CHAR byte_1002A454[4]; // idb -int dword_1002A458; // weak -int dword_1002A45C; // weak -char byte_1002A460; // weak -char byte_1002A464[18]; // idb -char byte_1002A476; // weak -int dword_1002A484; // weak -int dword_1002A48C; // weak -CHAR byte_1002A490[4]; // idb -CHAR byte_1002A494[4]; // idb -BYTE *dword_1002A498; // idb +BOOL (__stdcall *selhero_fnstats)(int, _uidefaultstats *); +int SelHero_cpp_float; // weak +DWORD selhero_sizedata[2]; // idb +int selhero_difficulty; // weak +int selhero_hero_hassaved; // weak +int selhero_numheroesleft; // weak +char selhero_herolevel[4]; +BOOL (__stdcall *selhero_fnremove)(_uiheroinfo *); +BOOL (__stdcall *selhero_fninfo)(BOOL (__stdcall *fninfo)(_uiheroinfo *)); +char selhero_heromag[4]; +char selhero_heronamestr[16]; +BOOL (__stdcall *selhero_fncreate)(_uiheroinfo *); +char selhero_herodex[4]; +_uiheroinfo *sgpHeroInfo; +int selhero_is_created; // weak +_uiheroinfo heroinfo_create; +int selhero_is_good; // idb +char selhero_herostr[4]; +char selhero_herovit[4]; +BYTE *selhero_buffer; int dword_1002A49C; // weak void *dword_1002A4A0; // idb int dword_1002A4A4; // weak @@ -328,9 +343,9 @@ int dword_1002A4B0; // weak int dword_1002A4B4; // weak int dword_1002A4B8; // idb int dword_1002A4BC; // weak -int dword_1002A4C0; // weak -int dword_1002A4C4; // weak -int dword_1002A4C8; // weak +int SelList_cpp_float; // weak +_uiheroinfo *sellist_pheroinfo; +int SelLoad_cpp_float; // weak int dword_1002A4CC; // weak int dword_1002A4D0; // weak void *dword_1002A4D4; // idb @@ -339,15 +354,15 @@ int dword_1002A4DC; // weak int dword_1002A4E0; // weak int dword_1002A4E4; // weak int dword_1002A4E8; // weak -int dword_1002A4EC; // weak +_uiheroinfo *dword_1002A4EC; // idb int dword_1002A4F0; // weak int dword_1002A4F4; // idb -LPCSTR dword_1002A4F8; // idb -int dword_1002A4FC; // weak -int dword_1002A500; // weak -int dword_1002A504; // weak -int (*dword_1002A508)(void); // weak -int dword_1002A50C; // weak +char *yesno_dialog_string; +int SelYesNo_cpp_float; // weak +int yesno_remove_focus; // weak +char *yesno_hero_name; +int (*YesNoFunc)(void); // weak +int yesno_is_popup; // weak HANDLE titlePHTrans[30]; int Title_cpp_float; // weak int titleTransIdx; // weak diff --git a/DiabloUI/_temp_funcs.h b/DiabloUI/_temp_funcs.h index 7c124c3ab..aa388a554 100644 --- a/DiabloUI/_temp_funcs.h +++ b/DiabloUI/_temp_funcs.h @@ -71,76 +71,82 @@ char *__stdcall BNetGW_10002DEB(char *a1, unsigned int a2); char *__stdcall BNetGW_10002E0B(char *a1, unsigned int a2); -void *Connect_10002E2B(); -signed int Connect_10002EC4(); -//BOOL __stdcall UiArtCallback(int a1, unsigned int a2, PALETTEENTRY *pPalette, void *pBuffer, DWORD dwBuffersize, DWORD *pdwWidth, DWORD *dwHeight, DWORD *pdwBpp); -signed int Connect_100033D1(); -//BOOL __stdcall UiGetDataCallback(int a1, int a2, void *a3, int a4, int a5); -//int __stdcall UiSoundCallback(int a1, int a2, int a3); -//int __stdcall UiAuthCallback(int, int, char *, char, char *, LPSTR lpBuffer, int cchBufferMax); // idb -//int __stdcall UiDrawDescCallback(int, COLORREF color, LPCSTR lpString, char *, int, UINT align, time_t, int); // idb -//signed int __stdcall UiCategoryCallback(int a1, int a2, int a3, int a4, int a5, _DWORD *a6, _DWORD *a7); -int UNKCALL Connect_10003D04(char *); // idb -int __fastcall Connect_10003DAF(char *a1, int a2, int a3, int a4); -char *__fastcall Connect_10003E0C(int a1, const char *a2, char *a3, char *a4, int a5); -signed int __fastcall Connect_10003E61(const char *a1, _BYTE *a2); -int __fastcall Connect_10003F6F(int a1, int a2, size_t a3); -//int __stdcall UiCreateGameCriteria(int, char *); // idb -//signed int __stdcall UiCreatePlayerDescription(int a1, int a2, int a3); -//int __stdcall UiSetupPlayerInfo(int a1, int a2, int a3); -int __fastcall Connect_10004028(int a1, int a2, int a3, int a4); - - -//signed int __stdcall UiCopyProtError(int *a1); -int __stdcall CopyProt_100040AF(int, UINT Msg, WPARAM wParam, LPARAM lParam); // idb -HGLOBAL CopyProt_10004173(); -signed int __fastcall CopyProt_100041B5(HWND a1, const CHAR *edx0); -int __fastcall CopyProt_1000430C(int a1, int a2); -signed int CopyProt_10004329(); - - -signed int cr8game_10004339(); -int UNKCALL cr8game_10004344(HWND arg); -//int __stdcall UiCreateGameCallback(int a1, int a2, int a3, int a4, int a5, int a6); -HGDIOBJ __stdcall cr8game_10004506(HWND hDlg, UINT Msg, WPARAM wParam, HWND hWnd); -BYTE *cr8game_10004828(); -BOOL __fastcall cr8game_1000487F(HWND hWnd); -void **UNKCALL cr8game_10004914(HWND hDlg); -_DWORD *UNKCALL cr8game_1000497F(HWND arg); -_DWORD *__fastcall cr8game_10004A34(HWND hWnd, int a2, int a3); -LRESULT UNKCALL cr8game_10004A93(HWND hDlg); -_DWORD *__fastcall cr8game_10004ABA(HWND hDlg, int a2); -BOOL __fastcall cr8game_10004B02(HWND hWnd, int a2, int a3); -int UNKCALL cr8game_10004B3F(char *); // idb -HFONT UNKCALL cr8game_10004BA8(HWND hWnd); - - -void UNKCALL CreaDung_10004C33(void *arg); -signed int CreaDung_10004C3F(); -int __stdcall CreaDung_10004C4A(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); // idb -int __fastcall CreaDung_10004D75(HWND a1, int a2); -void UNKCALL CreaDung_10004E2E(HWND hDlg); -int UNKCALL CreaDung_10004E8B(HWND hWnd); // idb -int __fastcall CreaDung_10004F40(int a1, int a2); -HWND USERCALL CreaDung_10004F5D(HWND a1, int a2); -HWND UNKCALL CreaDung_10005037(HWND arg); -HWND USERPURGE CreaDung_1000517E(HWND hWnd, int a2, int a3, int height); -int __fastcall CreaDung_100051D8(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8); - - -//signed int __stdcall UiGetDefaultStats(int a1, _WORD *a2); -signed int CreaStat_10005287(); - - -signed int credits_10005297(); -//signed int __stdcall UiCreditsDialog(int a1); -int __fastcall credits_100052C7(int a1, int a2, HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); -HGLOBAL __fastcall credits_100053D9(HWND hWnd, int a2); -int __fastcall credits_1000543A(HWND a1, int a2); -BOOL UNKCALL credits_100055C0(HWND hWnd); -signed int UNKCALL credits_10005660(void *arg); -signed int __fastcall credits_10005736(_BYTE *a1); -int __fastcall credits_10005755(int a1, int a2); +void __cdecl Connect_FreeConnectData(); +BOOL __cdecl Connect_LoadGFXAndStuff(); +BOOL __stdcall UiArtCallback(int game_type, unsigned int art_code, PALETTEENTRY *pPalette, void *pBuffer, DWORD dwBuffersize, DWORD *pdwWidth, DWORD *pdwHeight, DWORD *pdwBpp); +void __cdecl j_Connect_cpp_init(); +void __cdecl Connect_cpp_init(); +BOOL __stdcall UiGetDataCallback(int game_type, int data_code, void *a3, int a4, int a5); +BOOL __stdcall UiSoundCallback(int a1, int type, int a3); +BOOL __stdcall UiAuthCallback(int a1, char *a2, char *a3, char a4, char *a5, LPSTR lpBuffer, int cchBufferMax); +BOOL __stdcall UiDrawDescCallback(int arg0, COLORREF color, LPCSTR lpString, char *a4, int a5, UINT align, time_t a7, HDC *a8); +BOOL __stdcall UiCategoryCallback(int a1, int a2, int a3, int a4, int a5, _DWORD *a6, _DWORD *a7); +int __fastcall Connect_GetRankFromLevel(char *str); +BOOL __fastcall Connect_DiffFromString(char *str, _gamedata *gamedata, int a3, int a4); +void __fastcall Connect_SetDiffString(_gamedata *gamedata, const char *str1, char *str2, char *str3, int size); +BOOL __fastcall Connect_GetHeroInfoConc(const char *a1, _uiheroinfo *pInfo); +void __fastcall Connect_MakeDescString(_uiheroinfo *a1, char *name, size_t size); +void __stdcall UiCreateGameCriteria(_uiheroinfo *pInfo, char *str); +BOOL __stdcall UiCreatePlayerDescription(_uiheroinfo *info, int mode, char *desc); +void __stdcall UiSetupPlayerInfo(char *infostr, _uiheroinfo *pInfo, int type); +void __fastcall Connect_CopyPlrDescStrings(char *str1, int size1, char *str2, int size2); + + +BOOL __stdcall UiCopyProtError(int *pdwResult); +LRESULT __stdcall CopyProt_WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); +void __cdecl CopyProt_FreeCopyResrcs(); +BOOL __fastcall CopyProt_LoadCopyStuff(HWND hWnd, int a2); +void __fastcall CopyProt_EndCopyDlg(HWND hWnd, int a2); +void __cdecl j_CopyProt_cpp_init(); +void __cdecl CopyProt_cpp_init(); + + +void __cdecl j_cr8game_cpp_init(); +void __cdecl cr8game_cpp_init(); +BOOL __fastcall cr8game_GetSnetCreaGame(HWND hWnd); +BOOL __stdcall UiCreateGameCallback(int a1, int a2, int a3, int a4, int a5, int a6); +LRESULT __stdcall cr8game_WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); +void __cdecl cr8game_FreeCreaStuff(); +BOOL __fastcall cr8game_LoadCreaGFX(HWND hWnd); +void __fastcall cr8game_FreeMainMem(HWND hWnd); +void __fastcall cr8game_AllocMainMem(HWND hWnd); +void __fastcall cr8game_DoAROP3Blit(HWND hWnd, int frame, int size); +void __fastcall cr8game_SendMessageF5(HWND hWnd); +void __fastcall cr8game_BlitCr8Dialog(HWND hWnd, int a2); +void __fastcall cr8game_SetWindowStr(HWND hWnd, int dlgitem, int a3); +int __fastcall cr8game_CheckValidGameName(char *name); +HFONT __fastcall cr8game_GetCr8Object(HWND hWnd); + + +void __fastcall CreaDung_SetDelSpin(int a1); +void __cdecl j_CreaDung_cpp_init(); +void __cdecl CreaDung_cpp_init(); +LRESULT __stdcall CreaDung_WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); +void __fastcall CreaDung_ParseDungProcs(HWND hWnd, int dlg); +void __fastcall CreaDung_FreeDungProcs(HWND hWnd); +void __fastcall CreaDung_LoadDungGFX(HWND hWnd); +void __fastcall CreaDung_PlaySndAndKill(HWND hWnd, int a2); +void __fastcall CreaDung_DoAllPlaySnd(HWND hWnd); +void __fastcall CreaDung_DoSnetCreaGame(HWND hWnd); +void __fastcall CreaDung_CheckDlgForSnd(HWND hWnd, int a2, int a3); +BOOL __fastcall CreaDung_SelDungDiff(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8); + + +BOOL __stdcall UiGetDefaultStats(int pclass, _uidefaultstats *pStats); +void __cdecl j_CreaStat_cpp_init(); +void __cdecl CreaStat_cpp_init(); + + +void __cdecl j_credits_cpp_init(); +void __cdecl credits_cpp_init(); +BOOL __stdcall UiCreditsDialog(int a1); +LRESULT __stdcall credits_WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); +void __fastcall credits_FreeCreditResrc(HWND hWnd); +void __fastcall credits_LoadImgCreditTxt(HWND hWnd, LPARAM lParam); +void __fastcall credits_CalcPosROP3(HWND hWnd); +void __fastcall credits_PrintCredLines(HWND hWnd); +int __fastcall credits_GetCredLineBreak(char *str); +char *__fastcall credits_GetAdjustText(char *str, int len); void __fastcall DiabEdit_DoPaintBMP(HWND hWnd); @@ -198,7 +204,7 @@ void __cdecl Doom_cpp_init(); void __fastcall Doom_ParseWndProcs(HWND hWnd, int *msgtbl, int a3, int a4); void __fastcall Doom_GetSetWndText(HWND hWnd, int msg, int nFont, int a4); void __fastcall Doom_PrintStrWithSpin(HWND hWnd, BOOL a2); -void __fastcall Doom_AllocAndSetBMP(HWND hWnd, int bmp_flags); +void __fastcall Doom_AllocAndSetBMP(HWND hWnd, int a2, int bmp_flags); /* check args, __stdcall? */ void __fastcall Doom_GetWindowROP3(HWND hWnd1, HWND hWnd2); void __fastcall Doom_ParseWndProc2(HWND hWnd, int *msgtbl, int a3, int a4); void __fastcall Doom_GetSetWndTxt2(HWND hWnd, int msg, int nFont, int a4); @@ -224,12 +230,13 @@ int __fastcall EntDial_10006F16(HWND hDlg, int, int); // idb signed int EntDial_10006F71(); -int __stdcall EntName_10006F7C(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam); // idb -HWND UNKCALL EntName_1000709E(HWND hDlg); -int UNKCALL EntName_100070DB(HWND hWnd); // idb -int __fastcall EntName_100071AC(HWND hDlg, int a2); -void __fastcall EntName_100071ED(HWND hWnd, unsigned int a2, int a3); -signed int EntName_10007220(); +LRESULT __stdcall EntName_WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); +void __fastcall EntName_DelEntNameMsgs(HWND hWnd); +void __fastcall EntName_LoadFocusChkName(HWND hWnd); +void __fastcall EntName_SetCharName(HWND hWnd, int a2); +void __fastcall EntName_GetMessageName(HWND hWnd, unsigned int a2, int a3); +void __cdecl j_EntName_cpp_init(); +void __cdecl EntName_cpp_init(); void __fastcall Fade_ApplyPaletteRange(int range1, int range2); @@ -292,15 +299,16 @@ void __cdecl local_SetCursorDefault(); void __fastcall local_SetDiabloCursor(HWND hWnd); -signed int MainMenu_10008164(); -//int __stdcall UiMainMenuDialog(char *, int, int, int); // idb -int __fastcall MainMenu_100081E3(int a1, int a2, HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); -void UNKCALL MainMenu_10008354(HWND hDlg); -int __fastcall MainMenu_10008391(int a1, int a2); -void UNKCALL MainMenu_100083A8(HWND hWnd); -int __fastcall MainMenu_1000845A(int a1, int a2, int a3); -BOOL MainMenu_100084D5(); -LRESULT __fastcall MainMenu_100084FA(HWND hWnd, int a2); +void __cdecl j_MainMenu_cpp_init(); +void __cdecl MainMenu_cpp_init(); +BOOL __stdcall UiMainMenuDialog(char *name, int *pdwResult, void (__stdcall *fnSound)(char *file), int a4); +LRESULT __stdcall MainMenu_WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); +void __fastcall MainMenu_KillAndFreeMenu(HWND hWnd); +void __fastcall MainMenu_SetMenuTimer(HWND hWnd); +void __fastcall MainMenu_LoadMenuGFX(HWND hWnd); +void __fastcall MainMenu_DoOptions(HWND hWnd, int option, int PlaySelect); +BOOL __cdecl MainMenu_CheckEnoughMemory(); +void __fastcall MainMenu_CheckWParamFocus(HWND hWnd, WPARAM wParam); int Modem_1000855D(); @@ -335,14 +343,15 @@ void UNKCALL ModmStat_10008EBF(HWND hDlg); signed int ModmStat_10008F26(); -int __fastcall OkCancel_10008F31(HWND hWnd, const CHAR *a2); -signed int OkCancel_10008FEC(); -HGDIOBJ __stdcall OkCancel_10008FF7(HWND a1, UINT Msg, WPARAM wParam, HWND hWnd); -void **UNKCALL OkCancel_10009117(HWND hWnd); -signed int __fastcall OkCancel_10009161(HWND a1, int a2); -int __fastcall OkCancel_100092F5(int a1, int a2); -int __fastcall OkCancel_1000930A(int a1, int a2, int a3); -//LPCSTR __stdcall UiMessageBoxCallback(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType); +BOOL __fastcall OkCancel_DrawString(HWND hWnd, char *str); +void __cdecl j_OkCancel_cpp_init(); +void __cdecl OkCancel_cpp_init(); +LRESULT __stdcall OkCancel_WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); +void __fastcall OkCancel_FreeDlgBmp(HWND hWnd); +BOOL __fastcall OkCancel_LoadOkCancGFX(HWND hWnd, DWORD *lParam); +void __fastcall OkCancel_PlaySndEndDlg(HWND hWnd, int a2); +void __fastcall OkCancel_DoOkDialog(HWND hWnd, char *str, int a3); +void __stdcall UiMessageBoxCallback(HWND hWnd, char *lpText, LPCSTR lpCaption, UINT uType); signed int Progress_10009480(); @@ -356,21 +365,24 @@ void UNKCALL Progress_100098C5(HWND hWnd); BOOL UNKCALL Progress_1000991C(HWND hWnd); -signed int Sbar_100099B5(); -int UNKCALL Sbar_100099C0(HWND hWnd); // idb -int __fastcall Sbar_100099DC(HWND hWnd, LONG a2, int a3); -HWND __fastcall Sbar_10009A99(HWND hDlg, int nIDDlgItem, int a3, int a4); -HWND __fastcall Sbar_10009BF1(HWND hDlg, int nIDDlgItem); -signed int Sbar_10009CC7(); -HWND __fastcall Sbar_10009CD2(HWND hDlg, int nIDDlgItem); +void __cdecl j_Sbar_cpp_init(); +void __cdecl Sbar_cpp_init(); +BOOL __fastcall Sbar_CheckIfNextHero(HWND hWnd); +int __fastcall Sbar_NumScrollLines(HWND hWnd, int width, int height); +void __fastcall Sbar_DrawScrollBar(HWND hWnd, int nIDDlgItem, int width, int height); +void __fastcall Sbar_LoadScrBarGFX(HWND hWnd, int nIDDlgItem); +void __cdecl j_Sbar_cpp_init2(); +void __cdecl Sbar_cpp_init2(); +void __fastcall Sbar_FreeScrollBar(HWND hWnd, int nIDDlgItem); -int __stdcall SelClass_10009D66(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam); // idb -HWND UNKCALL SelClass_10009EC0(HWND hDlg); -int UNKCALL SelClass_10009EFD(HWND hWnd); // idb -int __fastcall SelClass_10009FA2(HWND hWnd, int a2); -int __fastcall SelClass_1000A00D(int a1, LONG a2); -signed int SelClass_1000A077(); +LRESULT __stdcall SelClass_WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); +void __fastcall SelClass_FreeClassMsgTbl(HWND hWnd); +void __fastcall SelClass_LoadClassFocus(HWND hWnd); +void __fastcall SelClass_SetDefaultStats(HWND hWnd, int a2); +void __fastcall SelClass_CheckClassSpawn(HWND hWnd, int a2); +void __cdecl j_SelClass_cpp_init(); +void __cdecl SelClass_cpp_init(); void *SelConn_1000A082(); @@ -427,40 +439,41 @@ int SelGame_1000B67E(); signed int SelGame_1000B795(); -int SelHero_1000B7A0(); -int SelHero_1000B7A6(); -void UNKCALL SelHero_1000B7AC(void *arg); -char *SelHero_1000B7B3(); -void *SelHero_1000B7B9(); -int SelHero_1000B7CA(); -int __fastcall SelHero_1000B7D0(int a1, int a2); -signed int SelHero_1000B7DE(); -BOOL __fastcall SelHero_1000B899(HWND hDlg, int a2); -int __fastcall SelHero_1000B905(HWND hDlg, int a2); -HWND __fastcall SelHero_1000BA7B(HWND hDlg, const char *a2); -char *UNKCALL SelHero_1000BAB4(char *arg); -char __fastcall SelHero_1000BB26(char *a1); -int __fastcall SelHero_1000BB34(char *, char *); // idb -//int UNKCALL UiValidPlayerName(char *); // idb -//int __stdcall UiSelHeroMultDialog(int, int, int, int, int, int, char *); // idb -int __stdcall SelHero_1000BC46(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); // idb -BOOL UNKCALL SelHero_1000BDAD(HWND arg); -int *__fastcall SelHero_1000BEDB(int *a1, char *a2); -BOOL UNKCALL SelHero_1000BF33(void *location); -const char *__fastcall SelHero_1000BF4A(const char *a1, const char *a2); -int UNKCALL SelHero_1000BF6D(HWND hWnd); // idb -int UNKCALL SelHero_1000BFF9(HWND hWnd); // idb -int UNKCALL SelHero_1000C09B(HWND hWnd); // idb -signed int __fastcall SelHero_1000C0F9(int a1, char *a2); -BOOL UNKCALL SelHero_1000C21A(HWND hWnd); -int UNKCALL SelHero_1000C269(HWND hWnd); // idb -void UNKCALL SelHero_1000C364(HWND hDlg); -BOOL __fastcall SelHero_1000C3CE(_DWORD *a1); -int __fastcall SelHero_1000C3E2(int a1, int a2); -int UNKCALL SelHero_1000C3FF(HWND hWnd); // idb -BOOL UNKCALL SelHero_1000C49F(HWND hWnd, void *a2); -signed int __stdcall SelHero_1000C541(void *a1); -//int __stdcall UiSelHeroSingDialog(int, int, int, int, int, char *, int); // idb +_uiheroinfo *__cdecl SelHero_GetCurrentHeroInfo(); +int __cdecl SelHero_GetNumHeroesLeft(); +void __fastcall SelHero_SetHeroDifficulty(int diff); +char *__cdecl SelHero_GetHeroNameStr(); +_uiheroinfo *__cdecl SelHero_AllocHeroInfo(); +int __cdecl SelHero_GetHeroIsGood(); +int __fastcall SelHero_SetClassStats(int heroclass, _uidefaultstats *pStats); +void __cdecl j_SelHero_cpp_init(); +void __cdecl SelHero_cpp_init(); +void __fastcall SelHero_SetStaticBMP(HWND hWnd, int adjust_size); +void __fastcall SelHero_PrintHeroInfo(HWND hWnd, _uiheroinfo *pInfo); +void __fastcall SelHero_SetStringWithMsg(HWND hWnd, const char *str); +BOOL __fastcall SelHero_IsNameReserved(char *name); +void __fastcall SelHero_SetLastNamePos(char *name); +BOOL __fastcall SelHero_NameHasChar(char *name, char *illegalchrs); +BOOL __fastcall UiValidPlayerName(char *name); +BOOL __stdcall UiSelHeroMultDialog(BOOL (__stdcall *fninfo)(BOOL (__stdcall *fninfofunc)(_uiheroinfo *)), BOOL (__stdcall *fncreate)(_uiheroinfo *), BOOL (__stdcall *fnremove)(_uiheroinfo *), BOOL (__stdcall *fnstats)(int, _uidefaultstats *), int *dlgresult, int *a6, char *name); +LRESULT __stdcall SelHero_WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); +void __fastcall SelHero_DoStuffWithStrings(HWND hWnd); +_uiheroinfo *__fastcall SelHero_GetNextHeroFromStr(_uiheroinfo *pInfo, char *name); +void __fastcall SelHero_FreeSomeMemory(void *ptr); +_uiheroinfo *__fastcall SelHero_GetHeroSlotFromName(_uiheroinfo *pInfo, const char *name); +void __fastcall SelHero_DoHeroSelList(HWND hWnd); +void __fastcall SelHero_DoHeroSelClass(HWND hWnd); +void __fastcall SelHero_DoEnterName(HWND hWnd); +BOOL __fastcall SelHero_CreateHero(HWND hWnd, char *name); +void __fastcall SelHero_DoSelLoad(HWND hWnd); +void __fastcall SelHero_DoSelDiff(HWND hWnd); +void __fastcall SelHero_DeleteAndFree(HWND hWnd); +void __fastcall SelHero_FreeAllHeroes(_uiheroinfo *pInfo); +void __fastcall SelHero_DoHeroEndFade(HWND hWnd, int a2); +void __fastcall SelHero_LoadHeroGFX(HWND hWnd); +void __fastcall SelHero_SelectHeroRegion(HWND hWnd); +BOOL __stdcall SelHero_GetHeroInfo(_uiheroinfo *pInfo); +BOOL __stdcall UiSelHeroSingDialog(BOOL (__stdcall *fninfo)(BOOL (__stdcall *fninfofunc)(_uiheroinfo *)), BOOL (__stdcall *fncreate)(_uiheroinfo *), BOOL (__stdcall *fnremove)(_uiheroinfo *), BOOL (__stdcall *fnstats)(int, _uidefaultstats *), int *dlgresult, char *name, int *difficulty); void *SelIPX_1000C610(); @@ -500,33 +513,35 @@ int __fastcall SelIPX_1000D5B0(int a1, int a2); HWND __fastcall SelIPX_1000D696(HWND hDlg, int a2, int height); -signed int SelList_1000D769(); -int __stdcall SelList_1000D774(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam); // idb -HWND UNKCALL SelList_1000D916(HWND hDlg); -HWND __fastcall SelList_1000D964(HWND hDlg, int nIDDlgItem); -HWND UNKCALL SelList_1000D9CF(HWND hDlg); -int UNKCALL SelList_1000D9F4(HWND hWnd); // idb -int UNKCALL SelList_1000DA2D(void *arg); -int UNKCALL SelList_1000DA48(void *arg); -int UNKCALL SelList_1000DA55(HWND hWnd); // idb -int __fastcall SelList_1000DB2C(HWND a1, const char *a2); -void UNKCALL SelList_1000DBAC(HWND hDlg); -LRESULT __stdcall SelList_1000DBFE(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); -HWND UNKCALL SelList_1000DD36(HWND hWnd); -HWND UNKCALL SelList_1000DDA7(HWND hWnd); -HWND UNKCALL SelList_1000DE18(HWND hWnd); -_DWORD *UNKCALL SelList_1000DEDD(char *arg); -HWND UNKCALL SelList_1000DEF4(HWND hWnd); -HWND UNKCALL SelList_1000DFAB(HWND hWnd); -HWND UNKCALL SelList_1000E043(HWND hWnd); -int __fastcall SelList_1000E0CA(HWND hWnd, int, int); // idb - - -int __stdcall SelLoad_1000E1C2(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam); // idb -HWND UNKCALL SelLoad_1000E30E(HWND hDlg); -int UNKCALL SelLoad_1000E34B(HWND hWnd); // idb -int __fastcall SelLoad_1000E3E2(int a1, LONG a2); -signed int SelLoad_1000E41A(); +void __cdecl j_SelList_cpp_init(); +void __cdecl SelList_cpp_init(); +LRESULT __stdcall SelList_WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); +void __fastcall SelList_DeleteFreeProcs(HWND hWnd); +void __fastcall SelList_GetHeroStats(HWND hWnd, int nIDDlgItem); +void __fastcall SelList_CountHeroList(HWND hWnd); +int __fastcall SelList_GetNextHeroLong(HWND hWnd); +void __fastcall SelList_LoadFocus16(HWND hWnd); +void __fastcall SelList_KillFocus16(HWND hWnd); +void __fastcall SelList_ShowListWindow(HWND hWnd); +void __fastcall SelList_SetHeroDlgLong(HWND hWnd, _uiheroinfo *pInfo); +void __fastcall SelList_DoListOldProc(HWND hWnd); +LRESULT __stdcall SelList_OldListWndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); +void __fastcall SelList_ShiftHeroDlgItems(HWND hWnd); +void __fastcall SelList_ShiftHeroDlgItm2(HWND hWnd); +void __fastcall SelList_HeroesWithBigDialogs(HWND hWnd); +_uiheroinfo *__fastcall SelList_GetHeroFromNum(int heronum); +void __fastcall SelList_HeroesWithHugeDlg(HWND hWnd); +void __fastcall SelList_HeroDlgWithSound(HWND hWnd); +void __fastcall SelList_HeroDlgWithSnd2(HWND hWnd); +void __fastcall SelList_ChooseDlgFromSize(HWND hWnd, int width, int height); + + +LRESULT __stdcall SelLoad_WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); +void __fastcall SelLoad_DeleteProcsAndSpin(HWND hWnd); +void __fastcall SelLoad_LoadFocusAndMsg(HWND hWnd); +void __fastcall SelLoad_SelectSndLoad(HWND hWnd, int a2); +void __cdecl j_SelLoad_cpp_init(); +void __cdecl SelLoad_cpp_init(); signed int SelModem_1000E42A(); @@ -560,7 +575,7 @@ HWND __fastcall SelModem_1000EE78(HWND hWnd, int a2, int height); void *SelRegn_1000EF42(); -_DWORD *__fastcall SelRegn_1000EF56(int a1, _DWORD *a2); +_uiheroinfo *__fastcall SelRegn_SetNextHero(_uiheroinfo *pNext, _uiheroinfo *pCurrent); signed int SelRegn_1000EF60(); int __stdcall SelRegn_1000EF6B(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); // idb HWND __fastcall SelRegn_1000F0D7(HWND hDlg, int nIDDlgItem); @@ -588,14 +603,15 @@ HWND __fastcall SelRegn_1000F929(HWND hWnd, int a2, int height); //signed int __stdcall UiSelectRegion(_DWORD *a1); -int __fastcall SelYesNo_1000FA49(int a1, const CHAR *a2, int a3, int a4); -int __stdcall SelYesNo_1000FA87(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam); // idb -HWND UNKCALL SelYesNo_1000FBC7(HWND hDlg); -void UNKCALL SelYesNo_1000FC1C(HWND hWnd); -int __fastcall SelYesNo_1000FCF6(int a1, LONG a2); -int __fastcall SelYesNo_1000FD39(int a1, const CHAR *a2, int a3, int a4); -int __fastcall SelYesNo_1000FD77(int a1, UINT a2, int a3); -signed int SelYesNo_1000FDE3(); +int __fastcall SelYesNo_YesNoDialog(HWND hWnd, char *dialogstr, char *hero, int nofocus); /* void */ +LRESULT __stdcall SelYesNo_WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); +void __fastcall SelYesNo_RemoveYNDialog(HWND hWnd); +void __fastcall SelYesNo_LoadSelYN_GFX(HWND hWnd); +void __fastcall SelYesNo_DoSelectYesNo(HWND hWnd, int option); +int __fastcall SelYesNo_SelOkDialog(HWND hWnd, char *dialogstr, char *hero, int nofocus); /* void */ +int __fastcall SelYesNo_SpawnErrDialog(HWND hWnd, int string_rsrc, int is_popup); /* void */ +void __cdecl j_SelYesNo_cpp_init(); +void __cdecl SelYesNo_cpp_init(); void __fastcall Title_BlitTitleBuffer(HWND hWnd); diff --git a/DiabloUI/artfont.cpp b/DiabloUI/artfont.cpp index c44fa7c9f..3c431af98 100644 --- a/DiabloUI/artfont.cpp +++ b/DiabloUI/artfont.cpp @@ -1,62 +1,32 @@ // ref: 0x10001058 void __fastcall artfont_SetArtFont(int nFont) { - int v1; // ecx - int v2; // ecx - int v3; // ecx - int v4; // ecx - int v5; // ecx - - if ( nFont ) + switch ( nFont ) { - v1 = nFont - 2; - if ( v1 ) - { - v2 = v1 - 1; - if ( v2 ) - { - v3 = v2 - 1; - if ( v3 ) - { - v4 = v3 - 1; - if ( v4 ) - { - v5 = v4 - 1; - if ( v5 ) - { - if ( v5 == 1 ) - sgpCurrFont = &font42y; - else - sgpCurrFont = &font16s; - } - else - { - sgpCurrFont = &font42g; - } - } - else - { - sgpCurrFont = &font30s; - } - } - else - { - sgpCurrFont = &font30g; - } - } - else - { - sgpCurrFont = &font24s; - } - } - else - { + case 0: + sgpCurrFont = &font16g; + break; + case 2: sgpCurrFont = &font24g; - } - } - else - { - sgpCurrFont = &font16g; + break; + case 3: + sgpCurrFont = &font24s; + break; + case 4: + sgpCurrFont = &font30g; + break; + case 5: + sgpCurrFont = &font30s; + break; + case 6: + sgpCurrFont = &font42g; + break; + case 7: + sgpCurrFont = &font42y; + break; + default: + sgpCurrFont = &font16s; + break; } } @@ -96,7 +66,7 @@ void __fastcall artfont_FreeArtFont(FontStruct *pFont) if ( pFont->active ) { - v2 = (HANDLE *)pFont->fontpal; + v2 = pFont->fonttrans; v3 = 256; do { @@ -147,11 +117,11 @@ void __fastcall artfont_LoadArtFont(FontStruct *pFont, const char *pszBinFile, c { SFileCloseFile(phFile); local_LoadArtImage(pszFileName, &pBuffer, size); - memset(pFont->fontpal, 0, 0x400u); + memset(pFont->fonttrans, 0, 0x400u); if ( pBuffer ) { v5 = 0; - a1a = (HANDLE *)pFont->fontpal; + a1a = pFont->fonttrans; do { v6 = pFont->fontbin[v5 + 2]; @@ -320,8 +290,8 @@ void __fastcall artfont_PrintFontStr(char *str, DWORD **pSurface, int sx, int sy } goto LABEL_23; } - hTransa = (HANDLE)&v5->fontpal[v6]; - if ( hTransa ) /* check */ + hTransa = v5->fonttrans[v6]; + if ( v5->fonttrans[v6] ) { v10 = pSurface[1]; if ( sx + v8 <= (signed int)v10 ) diff --git a/DiabloUI/connect.cpp b/DiabloUI/connect.cpp index afa6126f2..45f627dce 100644 --- a/DiabloUI/connect.cpp +++ b/DiabloUI/connect.cpp @@ -1,20 +1,19 @@ // ref: 0x10002E2B -void *Connect_10002E2B() { return 0; } -/* { - int *v0; // edi - int result; // eax +void __cdecl Connect_FreeConnectData() +{ + HANDLE *v0; // edi - if ( dword_100295D8 ) + if ( connect_data1 ) { - SMemFree(dword_100295D8, "C:\\Src\\Diablo\\DiabloUI\\Connect.cpp", 124, 0); - dword_100295D8 = 0; + SMemFree(connect_data1, "C:\\Src\\Diablo\\DiabloUI\\Connect.cpp", 124, 0); + connect_data1 = 0; } - if ( dword_100295DC ) + if ( connect_data2 ) { - SMemFree(dword_100295DC, "C:\\Src\\Diablo\\DiabloUI\\Connect.cpp", 129, 0); - dword_100295DC = 0; + SMemFree(connect_data2, "C:\\Src\\Diablo\\DiabloUI\\Connect.cpp", 129, 0); + connect_data2 = 0; } - v0 = dword_100295E8; + v0 = connect_trans; do { if ( *v0 ) @@ -24,231 +23,200 @@ void *Connect_10002E2B() { return 0; } } ++v0; } - while ( (signed int)v0 < (signed int)&dword_10029610 ); - if ( dword_100295E0 ) + while ( (signed int)v0 < (signed int)&connect_trans[10] ); + if ( connect_data3 ) { - SMemFree(dword_100295E0, "C:\\Src\\Diablo\\DiabloUI\\Connect.cpp", 141, 0); - dword_100295E0 = 0; + SMemFree(connect_data3, "C:\\Src\\Diablo\\DiabloUI\\Connect.cpp", 141, 0); + connect_data3 = 0; } - result = dword_100295E4; - if ( dword_100295E4 ) + if ( connect_data4 ) { - result = SMemFree(dword_100295E4, "C:\\Src\\Diablo\\DiabloUI\\Connect.cpp", 146, 0); - dword_100295E4 = 0; + SMemFree(connect_data4, "C:\\Src\\Diablo\\DiabloUI\\Connect.cpp", 146, 0); + connect_data4 = 0; } - return result; -} */ -// 1001033A: using guessed type int __stdcall STransDelete(_DWORD); -// 10010340: using guessed type int __stdcall SMemFree(_DWORD, _DWORD, _DWORD, _DWORD); -// 100295D8: using guessed type int dword_100295D8; -// 100295DC: using guessed type int dword_100295DC; -// 100295E0: using guessed type int dword_100295E0; -// 100295E4: using guessed type int dword_100295E4; -// 10029610: using guessed type int dword_10029610; +} // ref: 0x10002EC4 -signed int Connect_10002EC4() { return 0; } -/* { - int *v0; // esi +BOOL __cdecl Connect_LoadGFXAndStuff() +{ + HANDLE *v0; // esi int v1; // ebx - int v3; // [esp+4h] [ebp-14h] - int v4; // [esp+8h] [ebp-10h] - int v5; // [esp+Ch] [ebp-Ch] - int v6; // [esp+10h] [ebp-8h] - int v7; // [esp+14h] [ebp-4h] + int a5[4]; // [esp+4h] [ebp-14h] + BYTE *a2; // [esp+14h] [ebp-4h] - v7 = 0; - if ( !dword_100295D8 && !dword_100295E8[0] ) + a2 = 0; + if ( !connect_data1 && !connect_trans[0] ) { - local_100078BE((int)"ui_art\\heroport.pcx", &dword_100295D8, &dword_100294A8); - local_100078BE((int)"ui_art\\spwnport.pcx", &dword_100295DC, 0); - local_100078BE((int)"ui_art\\heronum.pcx", &v7, &dword_100295C8); - local_100078BE((int)"ui_art\\special.pcx", &dword_100295E0, &dword_100295B8); - dword_100295D4 = 14; - dword_100295D0 = dword_100295CC / 10; - dword_100294A4 = dword_100295BC / 8; - dword_100295B0 = dword_100295CC / 10 * dword_100295C8; - dword_100295C0 = 14 * dword_100294A8; - v0 = dword_100295E8; - dword_100295E4 = SMemAlloc(14 * dword_100294A8, "C:\\Src\\Diablo\\DiabloUI\\Connect.cpp", 194, 0); - memset(dword_100295E8, 0, 0x28u); - if ( v7 ) + local_LoadArtImage("ui_art\\heroport.pcx", &connect_data1, heroport_data); + local_LoadArtImage("ui_art\\spwnport.pcx", &connect_data2, 0); + local_LoadArtImage("ui_art\\heronum.pcx", &a2, heronum_data); + local_LoadArtImage("ui_art\\special.pcx", &connect_data3, special_data); + connect_draw_height = 14; + heronum_frames = (signed int)heronum_data[1] / 10; + special_frames = (signed int)special_data[1] / 8; + heronum_frames2 = (signed int)heronum_data[1] / 10 * heronum_data[0]; + heroport_frames = 14 * heroport_data[0]; + v0 = connect_trans; + connect_data4 = SMemAlloc(14 * heroport_data[0], "C:\\Src\\Diablo\\DiabloUI\\Connect.cpp", 194, 0); + memset(connect_trans, 0, 0x28u); + if ( a2 ) { v1 = 0; do { - v3 = 0; - v5 = dword_100295C8 - 1; - v4 = v1 * dword_100295D0; - v6 = dword_100295D0 + v1 * dword_100295D0 - 1; - STransCreateI(v7, dword_100295C8, dword_100295D0, 8, &v3, 16777455, v0); + a5[0] = 0; + a5[2] = heronum_data[0] - 1; + a5[1] = v1 * heronum_frames; + a5[3] = heronum_frames + v1 * heronum_frames - 1; + STransCreateI(a2, heronum_data[0], heronum_frames, 8, (int)a5, 16777455, v0); ++v0; ++v1; } - while ( (signed int)v0 < (signed int)&dword_10029610 ); - SMemFree(v7, "C:\\Src\\Diablo\\DiabloUI\\Connect.cpp", 218, 0); + while ( (signed int)v0 < (signed int)&connect_trans[10] ); + SMemFree(a2, "C:\\Src\\Diablo\\DiabloUI\\Connect.cpp", 218, 0); } } return 1; -} */ -// 10010340: using guessed type int __stdcall SMemFree(_DWORD, _DWORD, _DWORD, _DWORD); -// 10010346: using guessed type int __stdcall STransCreateI(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); -// 10010364: using guessed type int __stdcall SMemAlloc(_DWORD, _DWORD, _DWORD, _DWORD); -// 100294A4: using guessed type int dword_100294A4; -// 100294A8: using guessed type int dword_100294A8; -// 100295B0: using guessed type int dword_100295B0; -// 100295B8: using guessed type int dword_100295B8; -// 100295BC: using guessed type int dword_100295BC; -// 100295C0: using guessed type int dword_100295C0; -// 100295C8: using guessed type int dword_100295C8; -// 100295CC: using guessed type int dword_100295CC; -// 100295D0: using guessed type int dword_100295D0; -// 100295D4: using guessed type int dword_100295D4; -// 100295D8: using guessed type int dword_100295D8; -// 100295DC: using guessed type int dword_100295DC; -// 100295E0: using guessed type int dword_100295E0; -// 100295E4: using guessed type int dword_100295E4; -// 10029610: using guessed type int dword_10029610; +} +// 100294A4: using guessed type int special_frames; +// 100295B0: using guessed type int heronum_frames2; +// 100295C0: using guessed type int heroport_frames; // ref: 0x10003009 -void __cdecl UiArtCallback() { return; } -//int __stdcall UiArtCallback(int a1, unsigned int a2, int a3, int a4, int a5, int a6, int a7, int a8) { return 0; } -/* { - int result; // eax - CHAR v9; // [esp+8h] [ebp-104h] - char v10; // [esp+9h] [ebp-103h] - short v11; // [esp+109h] [ebp-3h] - char v12; // [esp+10Bh] [ebp-1h] +BOOL __stdcall UiArtCallback(int game_type, unsigned int art_code, PALETTEENTRY *pPalette, void *pBuffer, DWORD dwBuffersize, DWORD *pdwWidth, DWORD *pdwHeight, DWORD *pdwBpp) +{ + BOOL result; // eax + char pszFileName[260]; // [esp+8h] [ebp-104h] - v9 = byte_10029448; - memset(&v10, 0, 0x100u); - v11 = 0; - v12 = 0; - SStrCopy(&v9, "ui_art\\", 260); - if ( a1 == 1112425812 ) + pszFileName[0] = nullcharacter; + memset(&pszFileName[1], 0, 0x100u); + *(_WORD *)&pszFileName[257] = 0; + pszFileName[259] = 0; + SStrCopy(pszFileName, "ui_art\\", 260); + if ( game_type == 'BNET' ) { - if ( a2 > 0x80000004 ) + if ( art_code > 0x80000004 ) { - switch ( a2 ) + switch ( art_code ) { case 0x80000005: - SStrPack(&v9, "bnconnbg.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "bnconnbg.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); case 0x80000006: - SStrPack(&v9, "bnselchn.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "bnselchn.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); case 0x80000007: - SStrPack(&v9, "bnlogin.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "bnlogin.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); case 0x80000008: - SStrPack(&v9, "newaccount.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "newaccount.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); case 0x80000009: - SStrPack(&v9, "changepassword.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "changepassword.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); case 0x8000000A: - SStrPack(&v9, "bnladder.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "bnladder.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); case 0x8000000B: - SStrPack(&v9, "badconn.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "badconn.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); case 0x8000000C: - SStrPack(&v9, "welcome.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "welcome.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); case 0x8000000D: - SStrPack(&v9, "lepopup.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "lepopup.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); case 0x8000000E: - SStrPack(&v9, "tos.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "tos.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); default: break; } } else { - if ( a2 == -2147483644 ) + if ( art_code == 0x80000004 ) { - SStrPack(&v9, "redlag.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "redlag.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); } - if ( a2 > 7 ) + if ( art_code > 7 ) { - switch ( a2 ) + switch ( art_code ) { case 8u: LABEL_48: - SStrPack(&v9, "but_lrg.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "but_lrg.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); case 0x80000000: - SStrPack(&v9, "bnbuttns.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "bnbuttns.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); case 0x80000001: - SStrPack(&v9, "chat_bkg.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "chat_bkg.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); case 0x80000002: - SStrPack(&v9, "greenlag.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "greenlag.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); case 0x80000003: - SStrPack(&v9, "yellolag.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "yellolag.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); } } else { - switch ( a2 ) + switch ( art_code ) { case 7u: LABEL_47: - SStrPack(&v9, "but_med.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "but_med.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); case 0u: - SStrPack(&v9, "bn_bkg.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "bn_bkg.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); case 2u: - SStrPack(&v9, "bnjoinbg.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "bnjoinbg.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); case 3u: - SStrPack(&v9, "hpopup.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "hpopup.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); case 5u: LABEL_46: - SStrPack(&v9, "but_xsm.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "but_xsm.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); case 6u: LABEL_11: - SStrPack(&v9, "but_sml.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "but_sml.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); } } } } - else if ( a1 == 1230002254 ) + else if ( game_type == 'IPXN' ) { - if ( !a2 ) + if ( !art_code ) { - SStrPack(&v9, "ipx_bkg.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "ipx_bkg.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); } } - else if ( !a1 && !a2 ) + else if ( !game_type && !art_code ) { - SStrPack(&v9, "connect.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "connect.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); } - switch ( a2 ) + switch ( art_code ) { case 0u: case 2u: - SStrPack(&v9, "menu.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "menu.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); case 1u: case 8u: goto LABEL_48; case 3u: case 4u: - SStrPack(&v9, "lpopup.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "lpopup.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); case 5u: goto LABEL_46; case 6u: @@ -256,110 +224,104 @@ LABEL_11: case 7u: goto LABEL_47; case 9u: - SStrPack(&v9, "xsmlogo.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "xsmlogo.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); case 0xAu: - SStrPack(&v9, "prog_bg.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "prog_bg.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); case 0xBu: - SStrPack(&v9, "prog_fil.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "prog_fil.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); case 0xCu: - SStrPack(&v9, "spopup.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "spopup.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); case 0xDu: - SStrPack(&v9, "scrlarrw.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "scrlarrw.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); case 0xEu: - SStrPack(&v9, "scrlthmb.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "scrlthmb.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); case 0xFu: - SStrPack(&v9, "scrlbar.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "scrlbar.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); case 0x10u: - SStrPack(&v9, "cmel.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "cmel.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); case 0x11u: - SStrPack(&v9, "cmml.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "cmml.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); case 0x12u: - SStrPack(&v9, "cmbl.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "cmbl.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); case 0x13u: - SStrPack(&v9, "cmec.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "cmec.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); case 0x14u: - SStrPack(&v9, "cmmc.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "cmmc.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); case 0x15u: - SStrPack(&v9, "cmbc.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "cmbc.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); case 0x16u: - SStrPack(&v9, "cmer.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "cmer.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); case 0x17u: - SStrPack(&v9, "cmmr.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "cmmr.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); case 0x18u: - SStrPack(&v9, "cmbr.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "cmbr.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); case 0x19u: - SStrPack(&v9, "slgray.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "slgray.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); case 0x1Au: - SStrPack(&v9, "slthumb.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "slthumb.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); case 0x1Bu: - SStrPack(&v9, "slfocus.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "slfocus.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); case 0x1Cu: - SStrPack(&v9, "slleft.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "slleft.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); case 0x1Du: - SStrPack(&v9, "slmiddle.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "slmiddle.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); case 0x1Eu: - SStrPack(&v9, "slright.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "slright.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); case 0x20u: - SStrPack(&v9, "but_checkoff.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "but_checkoff.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); case 0x21u: - SStrPack(&v9, "but_checkon.pcx", 0x104u); - return SBmpLoadImage(&v9, a3, a4, a5, a6, a7, a8); + SStrPack(pszFileName, "but_checkon.pcx", 0x104u); + return SBmpLoadImage(pszFileName, pPalette, pBuffer, dwBuffersize, pdwWidth, pdwHeight, pdwBpp); default: result = 0; break; } return result; -} */ -// 100103BE: using guessed type int __stdcall SBmpLoadImage(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); +} // 100103E2: using guessed type unsigned int __stdcall SStrPack(char *, const char *, unsigned int); -// 100103E8: using guessed type int __stdcall SStrCopy(_DWORD, _DWORD, _DWORD); // ref: 0x100033D1 -signed int Connect_100033D1() { return 0; } -/* { - signed int result; // eax - - result = 2139095040; - dword_100294A0 = 2139095040; - return result; -} */ -// 100294A0: using guessed type int dword_100294A0; +void __cdecl Connect_cpp_init() +{ + Connect_cpp_float = Connect_cpp_float_value; +} +// 1001F3F4: using guessed type int Connect_cpp_float_value; +// 100294A0: using guessed type int Connect_cpp_float; // ref: 0x100033DC -void __cdecl UiGetDataCallback() { return; } -//BOOL __stdcall UiGetDataCallback(int a1, int a2, void *a3, int a4, int a5) { return 0; } -/* { +BOOL __stdcall UiGetDataCallback(int game_type, int data_code, void *a3, int a4, int a5) +{ signed int v5; // edi _DWORD *v6; // esi HCURSOR v7; // eax v5 = 0; - if ( a1 != 1112425812 || a2 != 0x80000000 ) + if ( game_type != 'BNET' || data_code != 0x80000000 ) { - switch ( a2 ) + switch ( data_code ) { case 1: v5 = 16; @@ -367,41 +329,41 @@ void __cdecl UiGetDataCallback() { return; } goto LABEL_24; if ( (unsigned int)a4 >= 0x10 ) { - memcpy(a3, "\r", 0x10u); + memcpy(a3, connect_subnet_ip, 0x10u); goto LABEL_24; } return 0; case 2: - v6 = a3; + v6 = (unsigned int *)a3; v5 = 4; if ( !a3 ) goto LABEL_24; if ( (unsigned int)a4 < 4 ) return 0; - v7 = LoadCursorA(hInstance, "DIABLO_LINKCURSOR"); + v7 = LoadCursorA(ghUiInst, "DIABLO_LINKCURSOR"); break; case 3: - v6 = a3; + v6 = (unsigned int *)a3; v5 = 4; if ( !a3 ) goto LABEL_24; if ( (unsigned int)a4 < 4 ) return 0; - v7 = LoadCursorA(hInstance, "DIABLO_ARROWCURSOR"); + v7 = LoadCursorA(ghUiInst, "DIABLO_ARROWCURSOR"); break; case 4: - v6 = a3; + v6 = (unsigned int *)a3; v5 = 4; if ( !a3 ) goto LABEL_24; if ( (unsigned int)a4 < 4 ) return 0; - v7 = LoadCursorA(hInstance, "DIABLOIBEAM"); + v7 = LoadCursorA(ghUiInst, "DIABLOIBEAM"); break; default: goto LABEL_24; } - *v6 = v7; + *v6 = (unsigned int)v7; if ( v7 ) goto LABEL_24; return 0; @@ -420,28 +382,26 @@ LABEL_24: if ( a5 ) *(_DWORD *)a5 = v5; return v5 != 0; -} */ +} // ref: 0x100034AB -void __cdecl UiSoundCallback() { return; } -//int __stdcall UiSoundCallback(int a1, int a2, int a3) { return 0; } -/* { - if ( a2 ) +BOOL __stdcall UiSoundCallback(int a1, int type, int a3) +{ + if ( type ) { - if ( a2 == 1 ) - TitleSnd_1001031F(); + if ( type == 1 ) + TitleSnd_PlaySelectSound(); } else { - TitleSnd_10010315(); + TitleSnd_PlayMoveSound(); } return 0; -} */ +} // ref: 0x100034C8 -void __cdecl UiAuthCallback() { return; } -//int __stdcall UiAuthCallback(int a1, int a2, char *a3, char a4, char *a5, LPSTR lpBuffer, int cchBufferMax) { return 0; } -/* { +BOOL __stdcall UiAuthCallback(int a1, char *a2, char *a3, char a4, char *a5, LPSTR lpBuffer, int cchBufferMax) +{ size_t v7; // edi size_t v8; // ebx int v9; // ebx @@ -449,17 +409,14 @@ void __cdecl UiAuthCallback() { return; } size_t v11; // eax int v12; // eax int v14; // eax - CHAR v15; // [esp+0h] [ebp-434h] - char v16; // [esp+100h] [ebp-334h] - char v17; // [esp+200h] [ebp-234h] - CHAR Buffer; // [esp+300h] [ebp-134h] - char v19; // [esp+400h] [ebp-34h] - unsigned short v20; // [esp+414h] [ebp-20h] - unsigned char v21; // [esp+416h] [ebp-1Eh] - char v22; // [esp+42Ch] [ebp-8h] - int v23; // [esp+430h] [ebp-4h] + char v15[256]; // [esp+0h] [ebp-434h] + char a1a[256]; // [esp+100h] [ebp-334h] + char v17[256]; // [esp+200h] [ebp-234h] + char Buffer[256]; // [esp+300h] [ebp-134h] + _uiheroinfo heroinfo; // [esp+400h] [ebp-34h] + _gamedata GameData; // [esp+42Ch] [ebp-8h] - v23 = 0; + *(_DWORD *)&GameData.bDiff = 0; if ( cchBufferMax ) *lpBuffer = 0; v7 = strlen(a3) + 1; @@ -467,12 +424,12 @@ void __cdecl UiAuthCallback() { return; } if ( v7 > 0x100 || v8 > 0x100 ) { if ( lpBuffer ) - LoadStringA(hInstance, 0x413u, lpBuffer, cchBufferMax); + LoadStringA(ghUiInst, 0x413u, lpBuffer, cchBufferMax); return 0; } - memcpy(&v16, a3, v7); - memcpy(&v17, a5, v8); - if ( Connect_10003E61(&v16, &v19) ) + memcpy(a1a, a3, v7); + memcpy(v17, a5, v8); + if ( Connect_GetHeroInfoConc(a1a, &heroinfo) ) { if ( a1 == 1 ) { @@ -481,39 +438,39 @@ void __cdecl UiAuthCallback() { return; } v9 = 0; while ( 1 ) { - LoadStringA(hInstance, v9 + 4, &Buffer, 256); - if ( strstr(&v17, &Buffer) ) + LoadStringA(ghUiInst, v9 + 4, Buffer, 256); + if ( strstr(v17, Buffer) ) break; if ( ++v9 >= 3 ) goto LABEL_16; } - if ( v21 != v9 ) + if ( heroinfo.heroclass != v9 ) goto LABEL_20; - v23 = 1; + *(_DWORD *)&GameData.bDiff = 1; LABEL_16: - LoadStringA(hInstance, 0x408u, &Buffer, 256); - v10 = strstr(&v17, &Buffer); + LoadStringA(ghUiInst, 0x408u, Buffer, 256); + v10 = strstr(v17, Buffer); if ( v10 ) { - v11 = strlen(&Buffer); + v11 = strlen(Buffer); v12 = atoi(&v10[v11]); - if ( v20 >= v12 ) + if ( heroinfo.level >= v12 ) return 1; } - if ( v23 ) + if ( *(_DWORD *)&GameData.bDiff ) return 1; LABEL_20: if ( lpBuffer ) { - LoadStringA(hInstance, 0x415u, &v15, 256); - v14 = sprintf(&Buffer, &v15, &v17) + 1; + LoadStringA(ghUiInst, 0x415u, v15, 256); + v14 = sprintf(Buffer, v15, v17) + 1; if ( cchBufferMax >= v14 ) { - memcpy(lpBuffer, &Buffer, v14); + memcpy(lpBuffer, Buffer, v14); } else { - memcpy(lpBuffer, &Buffer, cchBufferMax); + memcpy(lpBuffer, Buffer, cchBufferMax); lpBuffer[cchBufferMax - 1] = 0; } } @@ -522,36 +479,35 @@ LABEL_20: } else if ( !(a4 & 8) ) { - Connect_10003DAF(&v17, (int)&v22, 0, 0); - if ( (_BYTE)v23 == 1 ) + Connect_DiffFromString(v17, &GameData, 0, 0); + if ( GameData.bDiff == 1 ) { - if ( v20 < 0x14u ) + if ( heroinfo.level < 20u ) { if ( lpBuffer ) - LoadStringA(hInstance, 0x411u, lpBuffer, cchBufferMax); + LoadStringA(ghUiInst, 0x411u, lpBuffer, cchBufferMax); return 0; } } - else if ( (_BYTE)v23 == 2 && v20 < 0x1Eu ) + else if ( GameData.bDiff == 2 && heroinfo.level < 30u ) { if ( lpBuffer ) - LoadStringA(hInstance, 0x412u, lpBuffer, cchBufferMax); + LoadStringA(ghUiInst, 0x412u, lpBuffer, cchBufferMax); return 0; } } return 1; } if ( lpBuffer ) - LoadStringA(hInstance, 0x414u, lpBuffer, cchBufferMax); + LoadStringA(ghUiInst, 0x414u, lpBuffer, cchBufferMax); return 0; -} */ +} // ref: 0x10003710 -void __cdecl UiDrawDescCallback() { return; } -//int __stdcall UiDrawDescCallback(int a1, COLORREF color, LPCSTR lpString, char *a4, int a5, UINT align, time_t a7, int a8) { return 0; } -/* { - int v8; // ebx - int v9; // esi +BOOL __stdcall UiDrawDescCallback(int arg0, COLORREF color, LPCSTR lpString, char *a4, int a5, UINT align, time_t a7, HDC *a8) +{ + HDC *v8; // ebx + HDC v9; // esi int v10; // esi size_t v11; // eax UINT v13; // eax @@ -569,140 +525,110 @@ void __cdecl UiDrawDescCallback() { return; } int v25; // eax int v26; // eax signed int v27; // [esp-4h] [ebp-2E8h] - char v28[4]; // [esp+Ch] [ebp-2D8h] - CHAR String; // [esp+10Ch] [ebp-1D8h] - CHAR Buffer; // [esp+18Ch] [ebp-158h] - char v31; // [esp+18Dh] [ebp-157h] - short v32; // [esp+209h] [ebp-DBh] - char v33; // [esp+20Bh] [ebp-D9h] - CHAR v34; // [esp+20Ch] [ebp-D8h] - int v35; // [esp+22Ch] [ebp-B8h] - struct tagPOINT v36; // [esp+248h] [ebp-9Ch] + char a1[256]; // [esp+Ch] [ebp-2D8h] + char String[128]; // [esp+10Ch] [ebp-1D8h] + char Buffer[128]; // [esp+18Ch] [ebp-158h] + CHAR v31[32]; // [esp+20Ch] [ebp-D8h] + HDC a8a[12]; // [esp+22Ch] [ebp-B8h] struct tagTEXTMETRICA tm; // [esp+25Ch] [ebp-88h] - char v38; // [esp+294h] [ebp-50h] - CHAR v39; // [esp+2A0h] [ebp-44h] - unsigned short v40; // [esp+2A8h] [ebp-3Ch] - unsigned char v41; // [esp+2AAh] [ebp-3Ah] - unsigned char v42; // [esp+2ABh] [ebp-39h] - int v43; // [esp+2BCh] [ebp-28h] + _uiheroinfo heroinfo; // [esp+294h] [ebp-50h] struct tagPOINT pt; // [esp+2C0h] [ebp-24h] - char v45; // [esp+2C8h] [ebp-1Ch] - unsigned char v46; // [esp+2CCh] [ebp-18h] + _gamedata gamedata; // [esp+2C8h] [ebp-1Ch] struct tagRECT rc; // [esp+2D0h] [ebp-14h] - COLORREF v48; // [esp+2E0h] [ebp-4h] + COLORREF v38; // [esp+2E0h] [ebp-4h] LPCSTR lpStringa; // [esp+2F4h] [ebp+10h] - Buffer = byte_10029448; + Buffer[0] = nullcharacter; v8 = a8; - memset(&v31, 0, 0x7Cu); - v9 = *(_DWORD *)(a8 + 16); - v32 = 0; - v33 = 0; - v10 = v9 & 1; + memset(&Buffer[1], 0, 0x7Cu); + v9 = a8[4]; + *(_WORD *)&Buffer[125] = 0; + Buffer[127] = 0; + v10 = (unsigned char)v9 & 1; v11 = strlen(a4) + 1; if ( v11 > 0x100 ) return 0; - memcpy(v28, a4, v11); + memcpy(a1, a4, v11); if ( color == 1 ) { a8 = 0; a4 = 0; - if ( !Connect_10003DAF(v28, (int)&v45, (int)&a8, (int)&a4) ) + if ( !Connect_DiffFromString(a1, &gamedata, (int)&a8, (int)&a4) ) return 0; - color = SetTextColor(*(HDC *)(v8 + 24), 0xFFFFFFu); - v48 = SetBkColor(*(HDC *)(v8 + 24), v10 != 0 ? 0x808080 : 0); + color = SetTextColor(v8[6], 0xFFFFFFu); + v38 = SetBkColor(v8[6], v10 != 0 ? 0x808080 : 0); if ( align & 1 ) { v13 = strlen(lpString); - ExtTextOutA( - *(HDC *)(v8 + 24), - *(_DWORD *)(v8 + 28), - *(_DWORD *)(v8 + 32), - 6u, - (const RECT *)(v8 + 28), - lpString, - v13, - 0); + ExtTextOutA(v8[6], (int)v8[7], (int)v8[8], 6u, (const RECT *)(v8 + 7), lpString, v13, 0); } else { v14 = a8 && a4; - if ( v46 < 3u ) - LoadStringA(hInstance, v46 + 1003, &Buffer, 128); + if ( gamedata.bDiff < 3u ) + LoadStringA(ghUiInst, gamedata.bDiff + 1003, Buffer, 128); if ( align & 2 && v14 ) { - GetTextMetricsA(*(HDC *)(v8 + 24), &tm); + GetTextMetricsA(v8[6], &tm); lpStringa = (LPCSTR)(tm.tmHeight + tm.tmExternalLeading); - MoveToEx(*(HDC *)(v8 + 24), *(_DWORD *)(v8 + 28), *(_DWORD *)(v8 + 32), &pt); - align = SetTextAlign(*(HDC *)(v8 + 24), 1u); - v15 = strlen(&Buffer); - TextOutA(*(HDC *)(v8 + 24), 0, 0, &Buffer, v15); - LoadStringA(hInstance, 0x409u, &String, 128); - MoveToEx(*(HDC *)(v8 + 24), *(_DWORD *)(v8 + 28), (int)&lpStringa[*(_DWORD *)(v8 + 32)], 0); - v16 = strlen(&String); - TextOutA(*(HDC *)(v8 + 24), 0, 0, &String, v16); - v17 = *(HDC *)(v8 + 24); - qmemcpy(&v35, (const void *)v8, 0x30u); - GetCurrentPositionEx(v17, &v36); - SetTextAlign(*(HDC *)(v8 + 24), 0); - dword_10029614 = 1; - UiDrawDescCallback(a1, 2u, (LPCSTR)a8, a4, 0, 1u, 0, (int)&v35); - dword_10029614 = 0; + MoveToEx(v8[6], (int)v8[7], (int)v8[8], &pt); + align = SetTextAlign(v8[6], 1u); + v15 = strlen(Buffer); + TextOutA(v8[6], 0, 0, Buffer, v15); + LoadStringA(ghUiInst, 0x409u, String, 128); + MoveToEx(v8[6], (int)v8[7], (int)v8[8] + (_DWORD)lpStringa, 0); + v16 = strlen(String); + TextOutA(v8[6], 0, 0, String, v16); + v17 = v8[6]; + qmemcpy(a8a, v8, sizeof(a8a)); + GetCurrentPositionEx(v17, (LPPOINT)&a8a[7]); + SetTextAlign(v8[6], 0); + connect_color_text = 1; + UiDrawDescCallback(arg0, 2u, (LPCSTR)a8, a4, 0, 1u, 0, a8a); + connect_color_text = 0; if ( a7 ) { - SetTextAlign(*(HDC *)(v8 + 24), 1u); - LoadStringA(hInstance, 0x40Cu, &v39, 32); - LoadStringA(hInstance, 0x40Du, &v34, 32); + SetTextAlign(v8[6], 1u); + LoadStringA(ghUiInst, 0x40Cu, &heroinfo.name[8], 32); + LoadStringA(ghUiInst, 0x40Du, v31, 32); v18 = localtime(&a7); v19 = v18; if ( v18 ) { - LoadStringA(hInstance, (v18->tm_hour > 12) + 1034, (LPSTR)&rc.top, 10); + LoadStringA(ghUiInst, (v18->tm_hour > 12) + 1034, (LPSTR)&rc.top, 10); v20 = v19->tm_hour; if ( v20 > 12 ) v19->tm_hour = v20 - 12; if ( !v19->tm_hour ) v19->tm_hour = 12; - sprintf(&String, &v39, &v34, v19->tm_hour, v19->tm_min, &rc.top); - MoveToEx( - *(HDC *)(v8 + 24), - *(_DWORD *)(v8 + 28), - *(_DWORD *)(v8 + 32) + 2 * (_DWORD)lpStringa, - 0); - v21 = strlen(&String); - TextOutA(*(HDC *)(v8 + 24), 0, 0, &String, v21); + sprintf(String, &heroinfo.name[8], v31, v19->tm_hour, v19->tm_min, &rc.top); + MoveToEx(v8[6], (int)v8[7], (int)v8[8] + 2 * (_DWORD)lpStringa, 0); + v21 = strlen(String); + TextOutA(v8[6], 0, 0, String, v21); } } - MoveToEx(*(HDC *)(v8 + 24), pt.x, pt.y, 0); - SetTextAlign(*(HDC *)(v8 + 24), align); + MoveToEx(v8[6], pt.x, pt.y, 0); + SetTextAlign(v8[6], align); } else { - v22 = strlen(&Buffer); - TextOutA(*(HDC *)(v8 + 24), *(_DWORD *)(v8 + 28), *(_DWORD *)(v8 + 32), &Buffer, v22); + v22 = strlen(Buffer); + TextOutA(v8[6], (int)v8[7], (int)v8[8], Buffer, v22); } } goto LABEL_56; } - GetTextMetricsA(*(HDC *)(v8 + 24), &tm); - a4 = (char *)((tm.tmHeight - dword_100295D4) / 2 + 1); - if ( !dword_10029614 ) + GetTextMetricsA(v8[6], &tm); + a4 = (char *)((tm.tmHeight - connect_draw_height) / 2 + 1); + if ( !connect_color_text ) { - color = SetTextColor(*(HDC *)(v8 + 24), 0xFFFFu); - v48 = SetBkColor(*(HDC *)(v8 + 24), v10 != 0 ? 0x808080 : 0); + color = SetTextColor(v8[6], 0xFFFFu); + v38 = SetBkColor(v8[6], v10 != 0 ? 0x808080 : 0); } if ( align & 1 ) { v23 = strlen(lpString); - ExtTextOutA( - *(HDC *)(v8 + 24), - *(_DWORD *)(v8 + 28) + dword_100294A8 + 2, - *(_DWORD *)(v8 + 32), - 6u, - (const RECT *)(v8 + 28), - lpString, - v23, - 0); + ExtTextOutA(v8[6], (int)v8[7] + heroport_data[0] + 2, (int)v8[8], 6u, (const RECT *)(v8 + 7), lpString, v23, 0); } if ( a5 ) { @@ -717,19 +643,19 @@ LABEL_45: { v24 = 0; LABEL_46: - SetRect(&rc, 0, 0, dword_100295B8 - 1, dword_100294A4 - 1); - OffsetRect(&rc, 0, dword_100294A4 * v24); + SetRect(&rc, 0, 0, special_data[0] - 1, special_frames - 1); + OffsetRect(&rc, 0, special_frames * v24); SDlgBltToWindowI( - *(_DWORD *)(v8 + 20), + (HWND)v8[5], 0, - *(_DWORD *)(v8 + 28), - &a4[*(_DWORD *)(v8 + 32)], - dword_100295E0, + (char *)v8[7], + (int)v8[8] + (_DWORD)a4, + connect_data3, &rc, - &dword_100295B8, + (SIZE *)special_data, -1, 0, - 13369376); + 0xCC0020u); goto LABEL_55; } if ( a5 & 2 ) @@ -744,217 +670,193 @@ LABEL_46: } if ( a5 & 8 ) { - v25 = (a1 != 1112425812) - 1; - LOBYTE(v25) = v25 & 0xFD; + v25 = (arg0 != 'BNET') - 1; + _LOBYTE(v25) = v25 & 0xFD; v24 = v25 + 4; goto LABEL_46; } } - if ( *(_DWORD *)v28 == 1128808788 ) + if ( *(_DWORD *)a1 == 'CHAT' ) { v27 = 6; goto LABEL_45; } - if ( *(_DWORD *)v28 == 1397053520 || *(_DWORD *)v28 == 1397966930 || *(_DWORD *)v28 == 1398030674 ) + if ( *(_DWORD *)a1 == 'SEXP' || *(_DWORD *)a1 == 'SSHR' || *(_DWORD *)a1 == 'STAR' ) { v27 = 7; goto LABEL_45; } - if ( Connect_10003E61(v28, &v38) ) + if ( Connect_GetHeroInfoConc(a1, &heroinfo) ) { - if ( v43 ) + if ( heroinfo.spawned ) { - if ( dword_100295DC ) + if ( connect_data2 ) SBltROP3( - dword_100295E4, - dword_100295DC, - dword_100294A8, - dword_100295D4, - dword_100294A8, - dword_100294A8, + connect_data4, + connect_data2, + heroport_data[0], + connect_draw_height, + heroport_data[0], + heroport_data[0], 0, - 13369376); + 0xCC0020u); } else { SBltROP3( - dword_100295E4, - dword_100295D8 + dword_100295C0 * (v41 + 3 * v42), - dword_100294A8, - dword_100295D4, - dword_100294A8, - dword_100294A8, + connect_data4, + &connect_data1[heroport_frames * (heroinfo.heroclass + 3 * heroinfo.herorank)], + heroport_data[0], + connect_draw_height, + heroport_data[0], + heroport_data[0], 0, - 13369376); + 0xCC0020u); } - v26 = v40 / 10; + v26 = heroinfo.level / 10; if ( v26 ) STransBlt( - dword_100294A8 + dword_100295E4 + 4 * dword_100294A8 + 14, + (char *)connect_data4 + 4 * heroport_data[0] + heroport_data[0] + 14, 0, 0, - dword_100294A8, - dword_100295E8[v26]); + heroport_data[0], + connect_trans[v26]); STransBlt( - dword_100295E4 + 4 * (dword_100294A8 + 4) + dword_100294A8 + 4, + (char *)connect_data4 + 4 * (heroport_data[0] + 4) + heroport_data[0] + 4, 0, 0, - dword_100294A8, - dword_100295E8[v40 % 10]); - SetRect(&rc, 0, 0, dword_100294A8 - 1, dword_100295D4 - 1); + heroport_data[0], + connect_trans[heroinfo.level % 10]); + SetRect(&rc, 0, 0, heroport_data[0] - 1, connect_draw_height - 1); SDlgBltToWindowI( - *(_DWORD *)(v8 + 20), + (HWND)v8[5], 0, - *(_DWORD *)(v8 + 28), - &a4[*(_DWORD *)(v8 + 32)], - dword_100295E4, + (char *)v8[7], + (int)v8[8] + (_DWORD)a4, + connect_data4, &rc, - &dword_100294A8, + (SIZE *)heroport_data, -1, 0, - 13369376); + 0xCC0020u); } LABEL_55: - if ( !dword_10029614 ) + if ( !connect_color_text ) { LABEL_56: - SetTextColor(*(HDC *)(v8 + 24), color); - SetBkColor(*(HDC *)(v8 + 24), v48); + SetTextColor(v8[6], color); + SetBkColor(v8[6], v38); } return 1; -} */ -// 1001036A: using guessed type int __stdcall STransBlt(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); -// 100103EE: using guessed type int __stdcall SDlgBltToWindowI(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); -// 100103F4: using guessed type int __stdcall SBltROP3(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); -// 100294A4: using guessed type int dword_100294A4; -// 100294A8: using guessed type int dword_100294A8; -// 100295B8: using guessed type int dword_100295B8; -// 100295C0: using guessed type int dword_100295C0; -// 100295D4: using guessed type int dword_100295D4; -// 100295D8: using guessed type int dword_100295D8; -// 100295DC: using guessed type int dword_100295DC; -// 100295E0: using guessed type int dword_100295E0; -// 100295E4: using guessed type int dword_100295E4; -// 10029614: using guessed type int dword_10029614; +} +// 100294A4: using guessed type int special_frames; +// 100295C0: using guessed type int heroport_frames; +// 10029614: using guessed type int connect_color_text; // ref: 0x10003CE4 -void __cdecl UiCategoryCallback() { return; } -//signed int __stdcall UiCategoryCallback(int a1, int a2, int a3, int a4, int a5, _DWORD *a6, _DWORD *a7) { return 0; } -/* { +BOOL __stdcall UiCategoryCallback(int a1, int a2, int a3, int a4, int a5, _DWORD *a6, _DWORD *a7) +{ *a7 = 0xFFFF; - *a6 = Connect_10003D04(byte_100294B0); + *a6 = Connect_GetRankFromLevel(connect_categorystr); return 1; -} */ +} // ref: 0x10003D04 -int UNKCALL Connect_10003D04(char *arg) { return 0; } -/* { - char v3; // [esp+0h] [ebp-22Ch] - char v4; // [esp+200h] [ebp-2Ch] - unsigned short v5; // [esp+214h] [ebp-18h] +int __fastcall Connect_GetRankFromLevel(char *str) +{ + char a1[512]; // [esp+0h] [ebp-22Ch] + _uiheroinfo a2; // [esp+200h] [ebp-2Ch] - strcpy(&v3, arg); - if ( !Connect_10003E61(&v3, &v4) || v5 == 1 ) + strcpy(a1, str); + if ( !Connect_GetHeroInfoConc(a1, &a2) || a2.level == 1 ) return 0; - if ( (signed int)v5 < 4 ) + if ( (signed int)a2.level < 4 ) return 1; - if ( (signed int)v5 < 6 ) + if ( (signed int)a2.level < 6 ) return 2; - if ( (signed int)v5 < 8 ) + if ( (signed int)a2.level < 8 ) return 3; - if ( (signed int)v5 < 10 ) + if ( (signed int)a2.level < 10 ) return 4; - if ( (signed int)v5 < 13 ) + if ( (signed int)a2.level < 13 ) return 5; - if ( (signed int)v5 < 17 ) + if ( (signed int)a2.level < 17 ) return 6; - if ( (signed int)v5 < 20 ) + if ( (signed int)a2.level < 20 ) return 7; - if ( (signed int)v5 < 25 ) + if ( (signed int)a2.level < 25 ) return 8; - if ( (signed int)v5 < 30 ) + if ( (signed int)a2.level < 30 ) return 9; - if ( (signed int)v5 < 35 ) + if ( (signed int)a2.level < 35 ) return 10; - if ( (signed int)v5 < 40 ) + if ( (signed int)a2.level < 40 ) return 11; - return ((signed int)v5 >= 48) + 12; -} */ + return ((signed int)a2.level >= 48) + 12; +} // ref: 0x10003DAF -int __fastcall Connect_10003DAF(char *a1, int a2, int a3, int a4) { return 0; } -/* { - char *v4; // esi - int v5; // edi +BOOL __fastcall Connect_DiffFromString(char *str, _gamedata *gamedata, int a3, int a4) +{ unsigned char v6; // al char *v8; // eax const char *v9; // eax char *v10; // eax - v4 = a1; - v5 = a2; - if ( !*a1 ) + if ( !*str ) return 0; - v6 = atoi(a1); - *(_BYTE *)(v5 + 4) = v6; + v6 = atoi(str); + gamedata->bDiff = v6; if ( v6 >= 3u ) return 0; - v8 = strchr(v4, 13); + v8 = strchr(str, 13); if ( v8 ) { *v8 = 0; v9 = v8 + 1; if ( a3 ) - *(_DWORD *)a3 = v9; - v10 = strchr(v9, 13); + *(_DWORD *)a3 = (unsigned int)v9; + v10 = (char *)strchr(v9, 13); if ( v10 ) { *v10 = 0; if ( a4 ) - *(_DWORD *)a4 = v10 + 1; + *(_DWORD *)a4 = (unsigned int)v10 + 1; } } return 1; -} */ +} // ref: 0x10003E0C -char *__fastcall Connect_10003E0C(int a1, const char *a2, char *a3, char *a4, int a5) { return 0; } -/* { - const char *v5; // edi - int v6; // esi +void __fastcall Connect_SetDiffString(_gamedata *gamedata, const char *str1, char *str2, char *str3, int size) +{ size_t v7; // ebx size_t v8; // eax - bool v9; // zf - bool v10; // sf + unsigned char v9; // zf + unsigned char v10; // sf unsigned char v11; // of int v12; // eax - char *result; // eax - v5 = a2; - v6 = a1; - v7 = strlen(a2); - v8 = v7 + strlen(a3) + 5; - v11 = __OFSUB__(a5, v8); - v9 = a5 == v8; - v10 = (signed int)(a5 - v8) < 0; - v12 = *(unsigned char *)(v6 + 4); + v7 = strlen(str1); + v8 = v7 + strlen(str2) + 5; + v11 = __OFSUB__(size, v8); + v9 = size == v8; + v10 = (signed int)(size - v8) < 0; + v12 = gamedata->bDiff; if ( (unsigned char)(v10 ^ v11) | v9 ) - result = _itoa(v12, a4, 10); + _itoa(v12, str3, 10); else - result = (char *)sprintf(a4, "%d\r%s\r%s", v12, v5, a3); - return result; -} */ + sprintf(str3, "%d\r%s\r%s", v12, str1, str2); +} // ref: 0x10003E61 -signed int __fastcall Connect_10003E61(const char *a1, _BYTE *a2) { return 0; } -/* { - _BYTE *v2; // esi - const char *v3; // edi +BOOL __fastcall Connect_GetHeroInfoConc(const char *a1, _uiheroinfo *pInfo) +{ int v4; // eax int v5; // edi int v6; // edx - short v7; // di - char v8; // cl + unsigned short v7; // di + unsigned char v8; // cl int v10; // [esp+Ch] [ebp-24h] unsigned int v11; // [esp+10h] [ebp-20h] unsigned int v12; // [esp+14h] [ebp-1Ch] @@ -965,24 +867,22 @@ signed int __fastcall Connect_10003E61(const char *a1, _BYTE *a2) { return 0; } int v17; // [esp+28h] [ebp-8h] int v18; // [esp+2Ch] [ebp-4h] - v2 = a2; - v3 = a1; - memset(a2, 0, 0x2Cu); - if ( !*v3 ) + memset(pInfo, 0, 0x2Cu); + if ( !*a1 ) return 0; - v4 = *(_DWORD *)v3; - if ( *(_DWORD *)v3 != 1146246220 && v4 != 1146308690 && v4 != 1146377044 ) + v4 = *(_DWORD *)a1; + if ( *(_DWORD *)a1 != 'DRTL' && v4 != 'DSHR' && v4 != 'DTST' ) return 0; - if ( sscanf(v3 + 4, "%d %d %d %d %d %d %d %d %d", &v13, &v12, &v11, &v18, &v17, &v16, &v15, &v10, &v14) != 9 ) + if ( sscanf(a1 + 4, "%d %d %d %d %d %d %d %d %d", &v13, &v12, &v11, &v18, &v17, &v16, &v15, &v10, &v14) != 9 ) return 0; - v5 = *(_DWORD *)v3; + v5 = *(_DWORD *)a1; v6 = v14; - if ( v5 == 1146246220 ) + if ( v5 == 'DRTL' ) { if ( v14 ) return 0; } - if ( v5 == 1146308690 && !v14 ) + if ( v5 == 'DSHR' && !v14 ) return 0; v7 = v13; if ( !v13 ) @@ -992,72 +892,64 @@ signed int __fastcall Connect_10003E61(const char *a1, _BYTE *a2) { return 0; } v8 = v12; if ( v12 >= 3 || v11 > 3 || v18 < 0 || v17 < 0 || v16 < 0 || v15 < 0 ) return 0; - v2[23] = v11; - *((_WORD *)v2 + 10) = v7; - *((_WORD *)v2 + 12) = (unsigned char)v18; - v2[22] = v8; - *((_WORD *)v2 + 13) = (unsigned char)v17; - *((_DWORD *)v2 + 10) = v6; - *((_WORD *)v2 + 14) = (unsigned char)v16; - *((_WORD *)v2 + 15) = (unsigned char)v15; - *((_DWORD *)v2 + 8) = v10; + pInfo->herorank = v11; + pInfo->level = v7; + pInfo->strength = (unsigned char)v18; + pInfo->heroclass = v8; + pInfo->magic = (unsigned char)v17; + pInfo->spawned = v6; + pInfo->dexterity = (unsigned char)v16; + pInfo->vitality = (unsigned char)v15; + pInfo->gold = v10; return 1; -} */ +} // ref: 0x10003F6F -int __fastcall Connect_10003F6F(int a1, int a2, size_t a3) { return 0; } -/* { - *(_DWORD *)a2 = dword_10029610; - return _snprintf( - (char *)(a2 + 4), - a3, - " %d %d %d %d %d %d %d %d %d", - *(unsigned short *)(a1 + 20), - *(unsigned char *)(a1 + 22), - *(unsigned char *)(a1 + 23), - *(unsigned short *)(a1 + 24), - *(unsigned short *)(a1 + 26), - *(unsigned short *)(a1 + 28), - *(unsigned short *)(a1 + 30), - *(_DWORD *)(a1 + 32), - *(_DWORD *)(a1 + 40)); -} */ -// 10029610: using guessed type int dword_10029610; +void __fastcall Connect_MakeDescString(_uiheroinfo *a1, char *name, size_t size) +{ + *(_DWORD *)name = (unsigned int)connect_charname; + _snprintf( + name + 4, + size, + " %d %d %d %d %d %d %d %d %d", + a1->level, + a1->heroclass, + a1->herorank, + a1->strength, + a1->magic, + a1->dexterity, + a1->vitality, + a1->gold, + a1->spawned); +} // ref: 0x10003FB7 -int __stdcall UiCreateGameCriteria(int a1, char *a2) { return 0; } -/* { - return sprintf(a2, "#%d?%d", 3, *(unsigned short *)(a1 + 20)); -} */ +void __stdcall UiCreateGameCriteria(_uiheroinfo *pInfo, char *str) +{ + sprintf(str, "#%d?%d", 3, pInfo->level); +} // ref: 0x10003FD6 -int __stdcall UiCreatePlayerDescription(_uiheroinfo *info, int mode, char *desc) { return 0; } -/* { - dword_10029610 = a2; - Connect_10003F6F(a1, a3, 0x80u); +BOOL __stdcall UiCreatePlayerDescription(_uiheroinfo *info, int mode, char *desc) +{ + connect_charname = (char *)mode; + Connect_MakeDescString(info, desc, 0x80u); return 1; -} */ -// 10029610: using guessed type int dword_10029610; +} // ref: 0x10003FF7 -int __stdcall UiSetupPlayerInfo(char *str, _uiheroinfo *info, int mode) { return 0; } -/* { - dword_10029610 = a3; - SStrCopy(&unk_10029530, a1, 128); - return Connect_10003F6F(a2, (int)byte_100294B0, 0x80u); -} */ -// 100103E8: using guessed type int __stdcall SStrCopy(_DWORD, _DWORD, _DWORD); -// 10029610: using guessed type int dword_10029610; +void __stdcall UiSetupPlayerInfo(char *infostr, _uiheroinfo *pInfo, int type) +{ + connect_charname = (char *)type; + SStrCopy(connect_plrinfostr, infostr, 128); + Connect_MakeDescString(pInfo, connect_categorystr, 0x80u); +} // ref: 0x10004028 -int __fastcall Connect_10004028(int a1, int a2, int a3, int a4) { return 0; } -/* { - int result; // eax - - if ( a1 ) - result = SStrCopy(a1, &unk_10029530, a2); - if ( a3 ) - result = SStrCopy(a3, byte_100294B0, a4); - return result; -} */ -// 100103E8: using guessed type int __stdcall SStrCopy(_DWORD, _DWORD, _DWORD); +void __fastcall Connect_CopyPlrDescStrings(char *str1, int size1, char *str2, int size2) +{ + if ( str1 ) + SStrCopy(str1, connect_plrinfostr, size1); + if ( str2 ) + SStrCopy(str2, connect_categorystr, size2); +} diff --git a/DiabloUI/copyprot.cpp b/DiabloUI/copyprot.cpp index 4a6a71aa2..4b0d503da 100644 --- a/DiabloUI/copyprot.cpp +++ b/DiabloUI/copyprot.cpp @@ -1,28 +1,26 @@ // ref: 0x10004054 -void __stdcall UiCopyProtError(int a1) { return; } -//signed int __stdcall UiCopyProtError(int *a1) { return 0; } -/* { +BOOL __stdcall UiCopyProtError(int *pdwResult) +{ int v1; // eax int v2; // eax - CHAR Buffer; // [esp+0h] [ebp-80h] + char Buffer[128]; // [esp+0h] [ebp-80h] - if ( DiabloUI_10005C2A() ) - LoadStringA(hInstance, 0x3Fu, &Buffer, 127); + if ( DiabloUI_GetSpawned() ) + LoadStringA(ghUiInst, 0x3Fu, Buffer, 127); else - LoadStringA(hInstance, 0x1Bu, &Buffer, 127); - v1 = SDrawGetFrameWindow(); - v2 = SDlgDialogBoxParam(hInstance, "OKCANCEL_DIALOG", v1, CopyProt_100040AF, &Buffer); - if ( a1 ) - *a1 = v2; + LoadStringA(ghUiInst, 0x1Bu, Buffer, 127); + v1 = (int)SDrawGetFrameWindow(); + v2 = SDlgDialogBoxParam(ghUiInst, "OKCANCEL_DIALOG", v1, CopyProt_WndProc, (int)Buffer); + if ( pdwResult ) + *pdwResult = v2; return 1; -} */ -// 10010370: using guessed type int __stdcall SDlgDialogBoxParam(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); +} // 10010382: using guessed type _DWORD __stdcall SDrawGetFrameWindow(); // ref: 0x100040AF -int __stdcall CopyProt_100040AF(int a1, UINT Msg, WPARAM wParam, LPARAM lParam) { return 0; } -/* { - int v4; // ecx +LRESULT __stdcall CopyProt_WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) +{ + HWND v4; // ecx int v5; // edx HWND v6; // eax LONG v7; // eax @@ -30,31 +28,31 @@ int __stdcall CopyProt_100040AF(int a1, UINT Msg, WPARAM wParam, LPARAM lParam) if ( Msg == 2 ) { - CopyProt_10004173(); - Fade_100072BE(10); - return SDlgDefDialogProc(a1, Msg, wParam, lParam); + CopyProt_FreeCopyResrcs(); + Fade_UpdatePaletteRange(10); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); } if ( Msg <= 0x103 ) - return SDlgDefDialogProc(a1, Msg, wParam, lParam); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); if ( Msg <= 0x105 ) { v9 = (HWND)SDrawGetFrameWindow(); SendMessageA(v9, Msg, wParam, lParam); - return SDlgDefDialogProc(a1, Msg, wParam, lParam); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); } if ( Msg == 272 ) { - CopyProt_100041B5((HWND)a1, (const CHAR *)lParam); + CopyProt_LoadCopyStuff(hWnd, lParam); return 1; } if ( Msg != 273 ) - return SDlgDefDialogProc(a1, Msg, wParam, lParam); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); switch ( (unsigned short)wParam ) { case 1u: v6 = GetFocus(); v7 = GetWindowLongA(v6, -12); - v4 = a1; + v4 = hWnd; if ( v7 == 1109 ) { v5 = 1; @@ -62,119 +60,98 @@ int __stdcall CopyProt_100040AF(int a1, UINT Msg, WPARAM wParam, LPARAM lParam) } goto LABEL_12; case 2u: - v4 = a1; + v4 = hWnd; LABEL_12: v5 = 2; goto LABEL_13; case 0x455u: - v4 = a1; + v4 = hWnd; v5 = 1; LABEL_13: - CopyProt_1000430C(v4, v5); + CopyProt_EndCopyDlg(v4, v5); break; } - return SDlgDefDialogProc(a1, Msg, wParam, lParam); -} */ -// 1001037C: using guessed type int __stdcall SDlgDefDialogProc(_DWORD, _DWORD, _DWORD, _DWORD); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); +} // 10010382: using guessed type _DWORD __stdcall SDrawGetFrameWindow(); // ref: 0x10004173 -HGLOBAL CopyProt_10004173() { return 0; } -/* { - HGLOBAL result; // eax - - if ( hResData ) +void __cdecl CopyProt_FreeCopyResrcs() +{ + if ( copyprot_artpal ) { - FreeResource(hResData); - hResData = 0; + FreeResource(copyprot_artpal); + copyprot_artpal = 0; } - if ( dword_10029624 ) + if ( copyprot_btnart ) { - FreeResource(dword_10029624); - dword_10029624 = 0; + FreeResource(copyprot_btnart); + copyprot_btnart = 0; } - result = dword_10029618; - if ( dword_10029618 ) + if ( copyprot_popupart ) { - result = (HGLOBAL)FreeResource(dword_10029618); - dword_10029618 = 0; + FreeResource(copyprot_popupart); + copyprot_popupart = 0; } - return result; -} */ +} // ref: 0x100041B5 -signed int __fastcall CopyProt_100041B5(HWND a1, const CHAR *a2) { return 0; } -/* { +BOOL __fastcall CopyProt_LoadCopyStuff(HWND hWnd, int a2) +{ HRSRC v2; // eax HRSRC v3; // eax HRSRC v4; // eax - LPVOID v5; // edi - LPVOID v6; // ebx + void *v5; // edi + void *v6; // ebx HWND v7; // eax - char v9; // [esp+Ch] [ebp-420h] - int v10; // [esp+40Ch] [ebp-20h] - int v11; // [esp+410h] [ebp-1Ch] - int v12; // [esp+414h] [ebp-18h] - int v13; // [esp+418h] [ebp-14h] - int v14; // [esp+41Ch] [ebp-10h] + PALETTEENTRY pPalEntries[256]; // [esp+Ch] [ebp-420h] + int msgs[3]; // [esp+40Ch] [ebp-20h] + DWORD data[2]; // [esp+418h] [ebp-14h] LPCSTR lpString; // [esp+420h] [ebp-Ch] - void *v16; // [esp+424h] [ebp-8h] - HWND hDlg; // [esp+428h] [ebp-4h] + void *v13; // [esp+424h] [ebp-8h] - v12 = 0; - lpString = a2; - hDlg = a1; - v13 = 112; - v14 = 140; - v10 = 1109; - v11 = 2; - v2 = FindResourceA(hInstance, "IDR_POPUPART", "ART_FILES"); - dword_10029618 = LoadResource(hInstance, v2); - v3 = FindResourceA(hInstance, "IDR_BTNART", "ART_FILES"); - dword_10029624 = LoadResource(hInstance, v3); - v4 = FindResourceA(hInstance, "IDR_ARTPAL", "ART_FILES"); - hResData = LoadResource(hInstance, v4); - v5 = LockResource(dword_10029618); - v6 = LockResource(dword_10029624); - v16 = LockResource(hResData); + msgs[2] = 0; + lpString = (LPCSTR)a2; + data[0] = 112; + data[1] = 140; + msgs[0] = 1109; + msgs[1] = 2; + v2 = FindResourceA(ghUiInst, "IDR_POPUPART", "ART_FILES"); + copyprot_popupart = LoadResource(ghUiInst, v2); + v3 = FindResourceA(ghUiInst, "IDR_BTNART", "ART_FILES"); + copyprot_btnart = LoadResource(ghUiInst, v3); + v4 = FindResourceA(ghUiInst, "IDR_ARTPAL", "ART_FILES"); + copyprot_artpal = LoadResource(ghUiInst, v4); + v5 = LockResource(copyprot_popupart); + v6 = LockResource(copyprot_btnart); + v13 = LockResource(copyprot_artpal); if ( v5 ) - SDlgSetBitmapI(hDlg, 0, &byte_10029448, -1, 1, v5, 0, 284, 148, -1); + SDlgSetBitmapI(hWnd, 0, &nullcharacter, -1, 1, v5, 0, 284, 148, -1); ShowCursor(1); - Fade_100073EF(hDlg); + Fade_SetInputWindow(hWnd); if ( v6 ) - local_10007B1B(hDlg, &v10, (int)v6, &v13); - if ( v16 ) + local_FitButtonDlg(hWnd, msgs, v6, data); + if ( v13 ) { - memcpy(&v9, v16, 0x400u); - SDrawUpdatePalette(0, 256, &v9, 1); + memcpy(pPalEntries, v13, 0x400u); + SDrawUpdatePalette(0, 0x100u, pPalEntries, 1); } - v7 = GetDlgItem(hDlg, 1026); + v7 = GetDlgItem(hWnd, 1026); SetWindowTextA(v7, lpString); return 1; -} */ -// 100103FA: using guessed type int __stdcall SDrawUpdatePalette(_DWORD, _DWORD, _DWORD, _DWORD); -// 10010400: using guessed type int __stdcall SDlgSetBitmapI(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); +} // ref: 0x1000430C -int __fastcall CopyProt_1000430C(int a1, int a2) { return 0; } -/* { - int v2; // esi - int v3; // edi - - v2 = a2; - v3 = a1; +void __fastcall CopyProt_EndCopyDlg(HWND hWnd, int a2) +{ ShowCursor(0); - return SDlgEndDialog(v3, v2); -} */ -// 10010376: using guessed type int __stdcall SDlgEndDialog(_DWORD, _DWORD); + SDlgEndDialog(hWnd, (HANDLE)a2); +} // ref: 0x10004329 -signed int CopyProt_10004329() { return 0; } -/* { - signed int result; // eax - - result = 2139095040; - dword_10029620 = 2139095040; - return result; -} */ -// 10029620: using guessed type int dword_10029620; +void __cdecl CopyProt_cpp_init() +{ + CopyProt_cpp_float = CopyProt_cpp_float_value; +} +// 1001F3F8: using guessed type int CopyProt_cpp_float_value; +// 10029620: using guessed type int CopyProt_cpp_float; diff --git a/DiabloUI/cr8game.cpp b/DiabloUI/cr8game.cpp index ec9142f3e..dd5850ce0 100644 --- a/DiabloUI/cr8game.cpp +++ b/DiabloUI/cr8game.cpp @@ -1,122 +1,108 @@ // ref: 0x10004339 -signed int cr8game_10004339() { return 0; } -/* { - signed int result; // eax - - result = 2139095040; - dword_1002962C = 2139095040; - return result; -} */ -// 1002962C: using guessed type int dword_1002962C; +void __cdecl cr8game_cpp_init() +{ + cr8game_cpp_float = cr8game_cpp_float_value; +} +// 1001F3FC: using guessed type int cr8game_cpp_float_value; +// 1002962C: using guessed type int cr8game_cpp_float; // ref: 0x10004344 -int UNKCALL cr8game_10004344(HWND arg) { return 0; } -/* { - int result; // eax - int v2; // eax - int v3; // ST24_4 +BOOL __fastcall cr8game_GetSnetCreaGame(HWND hWnd) +{ + BOOL result; // eax + DWORD *v2; // eax + int *v3; // ST24_4 int v4; // ST18_4 int v5; // ST14_4 - int v6; // ST10_4 + char *v6; // ST10_4 int v7; // eax - CHAR Buffer; // [esp+Ch] [ebp-308h] - CHAR Text; // [esp+8Ch] [ebp-288h] - char v10; // [esp+18Ch] [ebp-188h] - int v11; // [esp+20Ch] [ebp-108h] - char v12; // [esp+28Ch] [ebp-88h] - int v13; // [esp+30Ch] [ebp-8h] - HWND hWnd; // [esp+310h] [ebp-4h] + char Buffer[128]; // [esp+Ch] [ebp-308h] + char Text[256]; // [esp+8Ch] [ebp-288h] + char a4[128]; // [esp+18Ch] [ebp-188h] + char a2[128]; // [esp+20Ch] [ebp-108h] + char str[128]; // [esp+28Ch] [ebp-88h] + BOOL v13; // [esp+30Ch] [ebp-8h] - hWnd = arg; - Connect_10004028((int)&v11, 128, (int)&v12, 128); - Connect_10003E0C((int)&unk_10029648, (const char *)&v11, &v12, &v10, 128); - if ( UiAuthCallback(2, (int)&v11, &v12, 0, &v10, &Text, 256) ) + Connect_CopyPlrDescStrings(a2, 128, str, 128); + Connect_SetDiffString(&cr8_gamedata, a2, str, a4, 128); + if ( UiAuthCallback(2, a2, str, 0, a4, Text, 256) ) { - v2 = dword_10029634; - if ( *(_DWORD *)(dword_10029634 + 32) >= 8u ) + v2 = cr8_somegamestruct; + if ( cr8_somegamestruct[8] >= 8 ) { - *(_BYTE *)(*(_DWORD *)(dword_10029634 + 28) + 4) = byte_1002964C; - v2 = dword_10029634; + *(_BYTE *)(cr8_somegamestruct[7] + 4) = cr8_gamedata.bDiff; + v2 = cr8_somegamestruct; } - v3 = dword_10029644; - v4 = *(_DWORD *)(dword_10029630 + 8); - v5 = *(_DWORD *)(v2 + 32); - v6 = *(_DWORD *)(v2 + 28); - v7 = Connect_10003D04(&v12); - v13 = SNetCreateGame(&byte_10029670, &byte_10029690, &v10, v7, v6, v5, v4, &v11, 0, v3); + v3 = cr8game_playerID; + v4 = *(_DWORD *)(cr8_playercount + 8); + v5 = v2[8]; + v6 = (char *)v2[7]; + v7 = Connect_GetRankFromLevel(str); + v13 = SNetCreateGame(cr8_gamename, cr8_gamepassword, a4, v7, v6, v5, v4, a2, 0, v3); if ( !v13 ) { if ( SErrGetLastError() == 183 ) { - LoadStringA(hInstance, 0x40Fu, &Buffer, 128); - sprintf(&Text, &Buffer, &byte_10029670); + LoadStringA(ghUiInst, 0x40Fu, Buffer, 128); + sprintf(Text, Buffer, cr8_gamename); } else { - LoadStringA(hInstance, 0x410u, &Text, 256); + LoadStringA(ghUiInst, 0x410u, Text, 256); } - UiMessageBoxCallback(hWnd, &Text, 0, 0x30u); + UiMessageBoxCallback(hWnd, Text, 0, 0x30u); } result = v13; } else { - UiMessageBoxCallback(hWnd, &Text, 0, 0x30u); + UiMessageBoxCallback(hWnd, Text, 0, 0x30u); result = 0; } return result; -} */ +} // 10010406: using guessed type _DWORD __stdcall SErrGetLastError(); -// 1001040C: using guessed type int __stdcall SNetCreateGame(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); -// 10029630: using guessed type int dword_10029630; -// 10029634: using guessed type int dword_10029634; -// 10029644: using guessed type int dword_10029644; -// 1002964C: using guessed type char byte_1002964C; -// 10029690: using guessed type char byte_10029690; +// 10029630: using guessed type int cr8_playercount; // ref: 0x100044AA -void __cdecl UiCreateGameCallback() { return; } -//int __stdcall UiCreateGameCallback(int a1, int a2, int a3, int a4, int a5, int a6) { return 0; } -/* { - int v6; // eax +BOOL __stdcall UiCreateGameCallback(int a1, int a2, int a3, int a4, int a5, int a6) +{ + BOOL v6; // eax - dword_10029630 = a1; - dword_10029634 = a2; - dword_10029638 = a3; - dword_10029640 = a5; - dword_1002963C = a4; - dword_10029644 = a6; - v6 = SDlgDialogBoxParam(hInstance, "DIALOG_CREATE_GAME", *(_DWORD *)(a4 + 8), cr8game_10004506, 0); + cr8_playercount = a1; + cr8_somegamestruct = (DWORD *)a2; + cr8_dword_10029638 = a3; + cr8_dword_10029640 = a5; + cr8_dword_1002963C = a4; + cr8game_playerID = (int *)a6; + v6 = SDlgDialogBoxParam(ghUiInst, "DIALOG_CREATE_GAME", *(_DWORD *)(a4 + 8), cr8game_WndProc, 0); return v6 != -1 ? v6 : 0; -} */ -// 10010370: using guessed type int __stdcall SDlgDialogBoxParam(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); -// 10029630: using guessed type int dword_10029630; -// 10029634: using guessed type int dword_10029634; -// 10029638: using guessed type int dword_10029638; -// 1002963C: using guessed type int dword_1002963C; -// 10029640: using guessed type int dword_10029640; -// 10029644: using guessed type int dword_10029644; +} +// 10029630: using guessed type int cr8_playercount; +// 10029638: using guessed type int cr8_dword_10029638; +// 1002963C: using guessed type int cr8_dword_1002963C; +// 10029640: using guessed type int cr8_dword_10029640; // ref: 0x10004506 -HGDIOBJ __stdcall cr8game_10004506(HWND hDlg, UINT Msg, WPARAM wParam, HWND hWnd) { return 0; } -/* { - UINT v4; // ebx +LRESULT __stdcall cr8game_WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) +{ + signed int v4; // ebx HWND v6; // eax HWND v7; // eax HWND v8; // eax - CHAR Buffer; // [esp+Ch] [ebp-104h] - int v10; // [esp+10Ch] [ebp-4h] + char Buffer[256]; // [esp+Ch] [ebp-104h] + int a2; // [esp+10Ch] [ebp-4h] v4 = Msg; if ( Msg == 2 ) { - cr8game_10004828(); - cr8game_10004914(hDlg); - if ( dword_10029628 ) - DeleteObject(dword_10029628); - dword_10029650 = 0; - ::hWnd = 0; - return (HGDIOBJ)SDlgDefDialogProc(hDlg, v4, wParam, hWnd); + cr8game_FreeCreaStuff(); + cr8game_FreeMainMem(hWnd); + if ( cr8game_hobject ) + DeleteObject(cr8game_hobject); + cr8_sendmsg1 = 0; + cr8_sendmsg2 = 0; + return (LRESULT)SDlgDefDialogProc(hWnd, v4, (HDC)wParam, (HWND)lParam); } if ( Msg > 0x103 ) { @@ -124,53 +110,53 @@ HGDIOBJ __stdcall cr8game_10004506(HWND hDlg, UINT Msg, WPARAM wParam, HWND hWnd { if ( Msg == 272 ) { - ::hWnd = GetDlgItem(hDlg, 1010); - dword_10029650 = GetDlgItem(hDlg, 1011); - cr8game_1000487F(hDlg); - cr8game_1000497F(hDlg); - cr8game_10004A93(hDlg); - dword_10029628 = cr8game_10004BA8(hDlg); - SendMessageA(::hWnd, 0xC5u, 0x1Fu, 0); - SendMessageA(dword_10029650, 0xC5u, 0x1Fu, 0); - return (HGDIOBJ)1; + cr8_sendmsg2 = GetDlgItem(hWnd, 1010); + cr8_sendmsg1 = GetDlgItem(hWnd, 1011); + cr8game_LoadCreaGFX(hWnd); + cr8game_AllocMainMem(hWnd); + cr8game_SendMessageF5(hWnd); + cr8game_hobject = cr8game_GetCr8Object(hWnd); + SendMessageA(cr8_sendmsg2, 0xC5u, 0x1Fu, 0); + SendMessageA(cr8_sendmsg1, 0xC5u, 0x1Fu, 0); + return 1; } if ( Msg != 273 ) { - if ( Msg == 312 && GetWindowLongA(hWnd, -12) == 1030 ) + if ( Msg == 312 && GetWindowLongA((HWND)lParam, -12) == 1030 ) { - local_10007C2E((HDC)wParam); - return GetStockObject(5); + local_SetWhiteText((HDC)wParam); + return (LRESULT)GetStockObject(5); } - return (HGDIOBJ)SDlgDefDialogProc(hDlg, v4, wParam, hWnd); + return (LRESULT)SDlgDefDialogProc(hWnd, v4, (HDC)wParam, (HWND)lParam); } if ( (unsigned short)wParam == 1 ) { - if ( SendMessageA(::hWnd, 0xEu, 0, 0) ) + if ( SendMessageA(cr8_sendmsg2, 0xEu, 0, 0) ) { - SendMessageA(::hWnd, 0xDu, 0x20u, (LPARAM)&byte_10029670); - if ( SelHero_1000BAB4(&byte_10029670) - || SelHero_1000BB34(&byte_10029670, (char *)&byte_10029448) - || !cr8game_10004B3F(&byte_10029670) ) + SendMessageA(cr8_sendmsg2, 0xDu, 0x20u, (LPARAM)cr8_gamename); + if ( SelHero_IsNameReserved(cr8_gamename) + || SelHero_NameHasChar(cr8_gamename, &nullcharacter) + || !cr8game_CheckValidGameName(cr8_gamename) ) { - LoadStringA(hInstance, 0x404u, &Buffer, 256); - OkCancel_1000930A((int)hDlg, (int)&Buffer, 1); - byte_10029670 = 0; + LoadStringA(ghUiInst, 0x404u, Buffer, 256); + OkCancel_DoOkDialog(hWnd, Buffer, 1); + cr8_gamename[0] = 0; } else { - byte_10029690 = 0; - if ( SendMessageA(dword_10029650, 0xEu, 0, 0) ) - SendMessageA(dword_10029650, 0xDu, 0x20u, (LPARAM)&byte_10029690); - byte_1002964C = dword_1002966C; - TitleSnd_1001031F(); - if ( cr8game_10004344(hDlg) ) - SDlgEndDialog(hDlg, 1); + cr8_gamepassword[0] = 0; + if ( SendMessageA(cr8_sendmsg1, 0xEu, 0, 0) ) + SendMessageA(cr8_sendmsg1, 0xDu, 0x20u, (LPARAM)cr8_gamepassword); + cr8_gamedata.bDiff = cr8_dword_1002966C; + TitleSnd_PlaySelectSound(); + if ( cr8game_GetSnetCreaGame(hWnd) ) + SDlgEndDialog(hWnd, (void *)HANDLE_FLAG_INHERIT); } } else { - LoadStringA(hInstance, 0x3F0u, &Buffer, 256); - OkCancel_1000930A((int)hDlg, (int)&Buffer, 1); + LoadStringA(ghUiInst, 0x3F0u, Buffer, 256); + OkCancel_DoOkDialog(hWnd, Buffer, 1); } } else @@ -179,260 +165,209 @@ HGDIOBJ __stdcall cr8game_10004506(HWND hDlg, UINT Msg, WPARAM wParam, HWND hWnd { if ( (signed int)(unsigned short)wParam > 1031 && (signed int)(unsigned short)wParam <= 1034 ) { - v10 = (unsigned short)wParam - 1032; + a2 = (unsigned short)wParam - 1032; if ( HIWORD(wParam) == 6 ) - SetFocus(::hWnd); - if ( dword_1002966C != (unsigned short)wParam - 1032 ) + SetFocus(cr8_sendmsg2); + if ( cr8_dword_1002966C != (unsigned short)wParam - 1032 ) { - if ( dword_1002966C != -1 ) + if ( cr8_dword_1002966C != -1 ) { - v6 = GetDlgItem(hDlg, dword_1002966C + 1032); + v6 = GetDlgItem(hWnd, cr8_dword_1002966C + 1032); SendMessageA(v6, 0xF3u, 0, 0); - TitleSnd_10010315(); + TitleSnd_PlayMoveSound(); } - cr8game_10004ABA(hDlg, v10); - v7 = GetDlgItem(hDlg, 1040); - cr8game_10004B02(v7, 1029, v10); + cr8game_BlitCr8Dialog(hWnd, a2); + v7 = GetDlgItem(hWnd, 1040); + cr8game_SetWindowStr(v7, 1029, a2); v4 = 273; - dword_1002966C = v10; + cr8_dword_1002966C = a2; } - SendMessageA(hWnd, 0xF3u, 1u, 0); + SendMessageA((HWND)lParam, 0xF3u, 1u, 0); } - return (HGDIOBJ)SDlgDefDialogProc(hDlg, v4, wParam, hWnd); + return (LRESULT)SDlgDefDialogProc(hWnd, v4, (HDC)wParam, (HWND)lParam); } - TitleSnd_1001031F(); - SDlgEndDialog(hDlg, 0); + TitleSnd_PlaySelectSound(); + SDlgEndDialog(hWnd, 0); } return 0; } v8 = (HWND)SDrawGetFrameWindow(); - SendMessageA(v8, Msg, wParam, (LPARAM)hWnd); + SendMessageA(v8, Msg, wParam, lParam); } - return (HGDIOBJ)SDlgDefDialogProc(hDlg, v4, wParam, hWnd); -} */ -// 10010376: using guessed type int __stdcall SDlgEndDialog(_DWORD, _DWORD); -// 1001037C: using guessed type int __stdcall SDlgDefDialogProc(_DWORD, _DWORD, _DWORD, _DWORD); + return (LRESULT)SDlgDefDialogProc(hWnd, v4, (HDC)wParam, (HWND)lParam); +} // 10010382: using guessed type _DWORD __stdcall SDrawGetFrameWindow(); -// 1002964C: using guessed type char byte_1002964C; -// 1002966C: using guessed type int dword_1002966C; -// 10029690: using guessed type char byte_10029690; // ref: 0x10004828 -BYTE *cr8game_10004828() { return 0; } -/* { - int result; // eax - - if ( dword_100296B0 ) +void __cdecl cr8game_FreeCreaStuff() +{ + if ( cr8_creat_bg_ptr ) { - SMemFree(dword_100296B0, "C:\\Src\\Diablo\\DiabloUI\\cr8game.cpp", 55, 0); - dword_100296B0 = 0; + SMemFree(cr8_creat_bg_ptr, "C:\\Src\\Diablo\\DiabloUI\\cr8game.cpp", 55, 0); + cr8_creat_bg_ptr = 0; } - if ( dword_100296B4 ) + if ( cr8_but_xsm_ptr ) { - SMemFree(dword_100296B4, "C:\\Src\\Diablo\\DiabloUI\\cr8game.cpp", 60, 0); - dword_100296B4 = 0; + SMemFree(cr8_but_xsm_ptr, "C:\\Src\\Diablo\\DiabloUI\\cr8game.cpp", 60, 0); + cr8_but_xsm_ptr = 0; } - result = dword_100296B8; - if ( dword_100296B8 ) + if ( cr8_diffbtns_ptr ) { - result = SMemFree(dword_100296B8, "C:\\Src\\Diablo\\DiabloUI\\cr8game.cpp", 65, 0); - dword_100296B8 = 0; + SMemFree(cr8_diffbtns_ptr, "C:\\Src\\Diablo\\DiabloUI\\cr8game.cpp", 65, 0); + cr8_diffbtns_ptr = 0; } - return result; -} */ -// 10010340: using guessed type int __stdcall SMemFree(_DWORD, _DWORD, _DWORD, _DWORD); -// 100296B4: using guessed type int dword_100296B4; -// 100296B8: using guessed type int dword_100296B8; +} // ref: 0x1000487F -int UNKCALL cr8game_1000487F(HWND hWnd) { return 0; } -/* { - HWND v1; // edi - int v3; // [esp+8h] [ebp-1Ch] - int v4; // [esp+Ch] [ebp-18h] - int v5; // [esp+10h] [ebp-14h] - int v6; // [esp+14h] [ebp-10h] - char v7; // [esp+1Ch] [ebp-8h] +BOOL __fastcall cr8game_LoadCreaGFX(HWND hWnd) +{ + int id[3]; // [esp+8h] [ebp-1Ch] + DWORD a8[2]; // [esp+14h] [ebp-10h] + DWORD a3[2]; // [esp+1Ch] [ebp-8h] - v5 = 0; - v1 = hWnd; - v3 = 1; - v4 = 2; - local_10007944((int)hWnd, 0, "Dialog", -1, 1, (int)"ui_art\\creat_bg.pcx", &dword_100296B0, &v6, 1); - local_100078BE((int)"ui_art\\but_xsm.pcx", &dword_100296B4, &v7); - SDlgSetControlBitmaps(v1, &v3, 0, dword_100296B4, &v7, 1, -1); - local_100078BE((int)"ui_art\\diffbtns.pcx", &dword_100296B8, &dword_10029660); - local_10007A85(v1, 1040, dword_100296B0, (int)&v6); + id[0] = 0; + id[0] = 1; + id[1] = 2; + local_LoadArtWithPal(hWnd, 0, "Dialog", -1, 1, "ui_art\\creat_bg.pcx", &cr8_creat_bg_ptr, a8, 1); + local_LoadArtImage("ui_art\\but_xsm.pcx", &cr8_but_xsm_ptr, a3); + SDlgSetControlBitmaps(hWnd, id, 0, (char *)cr8_but_xsm_ptr, (char *)a3, 1, -1); + local_LoadArtImage("ui_art\\diffbtns.pcx", &cr8_diffbtns_ptr, cr8diffbtns_size); + local_SetStaticBmp(hWnd, 1040, cr8_creat_bg_ptr, a8); return 1; -} */ -// 10010388: using guessed type int __stdcall SDlgSetControlBitmaps(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); -// 10029660: using guessed type int dword_10029660; -// 100296B4: using guessed type int dword_100296B4; -// 100296B8: using guessed type int dword_100296B8; +} // ref: 0x10004914 -void **UNKCALL cr8game_10004914(HWND hDlg) { return 0; } -/* { - HWND v1; // ebp +void __fastcall cr8game_FreeMainMem(HWND hWnd) +{ signed int v2; // edi HWND v3; // esi - _DWORD *result; // eax - _DWORD *v5; // esi - int v6; // eax + void **v4; // eax MAPDST + void *v6; // eax struct tagRECT Rect; // [esp+10h] [ebp-10h] - v1 = hDlg; v2 = 0; do { - v3 = GetDlgItem(v1, v2 + 1032); + v3 = GetDlgItem(hWnd, v2 + 1032); GetClientRect(v3, &Rect); - result = (_DWORD *)GetWindowLongA(v3, -21); - v5 = result; - if ( result ) + v4 = (void **)GetWindowLongA(v3, -21); + if ( v4 ) { - v6 = *result; - if ( *v5 ) + v6 = *v4; + if ( *v4 ) SMemFree(v6, "C:\\Src\\Diablo\\DiabloUI\\cr8game.cpp", 160, 0); - result = (_DWORD *)SMemFree(v5, "C:\\Src\\Diablo\\DiabloUI\\cr8game.cpp", 162, 0); + SMemFree(v4, "C:\\Src\\Diablo\\DiabloUI\\cr8game.cpp", 162, 0); } ++v2; } while ( v2 < 3 ); - return result; -} */ -// 10010340: using guessed type int __stdcall SMemFree(_DWORD, _DWORD, _DWORD, _DWORD); +} // ref: 0x1000497F -_DWORD *UNKCALL cr8game_1000497F(HWND arg) { return 0; } -/* { +void __fastcall cr8game_AllocMainMem(HWND hWnd) +{ int v1; // ebx - _DWORD *v2; // esi + void **v2; // esi HWND v3; // ST1C_4 LONG v4; // eax - _DWORD *result; // eax struct tagRECT Rect; // [esp+Ch] [ebp-18h] - HWND hDlg; // [esp+1Ch] [ebp-8h] - HWND hWnd; // [esp+20h] [ebp-4h] + HWND hWnda; // [esp+20h] [ebp-4h] - hDlg = arg; v1 = 0; do { - hWnd = GetDlgItem(hDlg, v1 + 1032); - GetClientRect(hWnd, &Rect); - v2 = (_DWORD *)SMemAlloc(272, "C:\\Src\\Diablo\\DiabloUI\\cr8game.cpp", 177, 0); + hWnda = GetDlgItem(hWnd, v1 + 1032); + GetClientRect(hWnda, &Rect); + v2 = (void **)SMemAlloc(0x110u, "C:\\Src\\Diablo\\DiabloUI\\cr8game.cpp", 177, 0); *v2 = SMemAlloc(Rect.right * Rect.bottom, "C:\\Src\\Diablo\\DiabloUI\\cr8game.cpp", 178, 0); - v3 = hWnd; - v2[1] = Rect.right; + v3 = hWnda; + v2[1] = (void *)Rect.right; v4 = Rect.bottom; v2[3] = 0; - v2[2] = v4; + v2[2] = (void *)v4; SetWindowLongA(v3, -21, (LONG)v2); - SDlgSetBitmapI(hWnd, 0, &byte_10029448, -1, 241, *v2, 0, v2[1], v2[2], -1); - result = cr8game_10004A34(hWnd, v1++, 0); + SDlgSetBitmapI(hWnda, 0, &nullcharacter, -1, 241, *v2, 0, (int)v2[1], (int)v2[2], -1); + cr8game_DoAROP3Blit(hWnda, v1++, 0); } while ( v1 < 3 ); - return result; -} */ -// 10010364: using guessed type int __stdcall SMemAlloc(_DWORD, _DWORD, _DWORD, _DWORD); -// 10010400: using guessed type int __stdcall SDlgSetBitmapI(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); +} // ref: 0x10004A34 -_DWORD *__fastcall cr8game_10004A34(HWND hWnd, int a2, int a3) { return 0; } -/* { - HWND v3; // ebp - int v4; // ebx - _DWORD *result; // eax +void __fastcall cr8game_DoAROP3Blit(HWND hWnd, int frame, int size) +{ + DWORD *v5; // eax - v3 = hWnd; - v4 = a2; - result = (_DWORD *)GetWindowLongA(hWnd, -21); - if ( result ) + v5 = (DWORD *)GetWindowLongA(hWnd, -21); + if ( v5 ) { - if ( dword_100296B8 ) + if ( cr8_diffbtns_ptr ) { SBltROP3( - *result, - dword_100296B8 + dword_10029660 * result[2] * (a3 + 2 * v4), - result[1], - result[2], - result[1], - dword_10029660, + (void *)*v5, + &cr8_diffbtns_ptr[cr8diffbtns_size[0] * v5[2] * (size + 2 * frame)], + v5[1], + v5[2], + v5[1], + cr8diffbtns_size[0], 0, - 13369376); - result = (_DWORD *)InvalidateRect(v3, 0, 0); + 0xCC0020u); + InvalidateRect(hWnd, 0, 0); } } - return result; -} */ -// 100103F4: using guessed type int __stdcall SBltROP3(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); -// 10029660: using guessed type int dword_10029660; -// 100296B8: using guessed type int dword_100296B8; +} // ref: 0x10004A93 -LRESULT UNKCALL cr8game_10004A93(HWND hDlg) { return 0; } -/* { - dword_1002966C = -1; - dword_10029658 = 0; - dword_10029668 = 0; - return SendDlgItemMessageA(hDlg, 1032, 0xF5u, 0, 0); -} */ -// 10029658: using guessed type int dword_10029658; -// 10029668: using guessed type int dword_10029668; -// 1002966C: using guessed type int dword_1002966C; +void __fastcall cr8game_SendMessageF5(HWND hWnd) +{ + cr8_dword_1002966C = -1; + cr8_dword_10029658 = 0; + cr8_dword_10029668 = 0; + SendDlgItemMessageA(hWnd, 1032, 0xF5u, 0, 0); +} +// 10029658: using guessed type int cr8_dword_10029658; +// 10029668: using guessed type int cr8_dword_10029668; // ref: 0x10004ABA -_DWORD *__fastcall cr8game_10004ABA(HWND hDlg, int a2) { return 0; } -/* { - int v2; // edi - HWND v3; // ebx +void __fastcall cr8game_BlitCr8Dialog(HWND hWnd, int a2) +{ HWND v4; // eax HWND v5; // eax - v2 = a2; - v3 = hDlg; - if ( dword_1002966C != -1 ) + if ( cr8_dword_1002966C != -1 ) { - v4 = GetDlgItem(hDlg, dword_1002966C + 1032); - cr8game_10004A34(v4, dword_1002966C, 0); + v4 = GetDlgItem(hWnd, cr8_dword_1002966C + 1032); + cr8game_DoAROP3Blit(v4, cr8_dword_1002966C, 0); } - v5 = GetDlgItem(v3, v2 + 1032); - return cr8game_10004A34(v5, v2, 1); -} */ -// 1002966C: using guessed type int dword_1002966C; + v5 = GetDlgItem(hWnd, a2 + 1032); + cr8game_DoAROP3Blit(v5, a2, 1); +} // ref: 0x10004B02 -BOOL __fastcall cr8game_10004B02(HWND hWnd, int a2, int a3) { return 0; } -/* { - HWND v3; // esi - CHAR Buffer; // [esp+4h] [ebp-100h] +void __fastcall cr8game_SetWindowStr(HWND hWnd, int dlgitem, int a3) +{ + char Buffer[256]; // [esp+4h] [ebp-100h] - v3 = hWnd; - LoadStringA(hInstance, a3 + a2, &Buffer, 256); - return SetWindowTextA(v3, &Buffer); -} */ + LoadStringA(ghUiInst, a3 + dlgitem, Buffer, 256); + SetWindowTextA(hWnd, Buffer); +} // ref: 0x10004B3F -int UNKCALL cr8game_10004B3F(char *arg) { return 0; } -/* { +int __fastcall cr8game_CheckValidGameName(char *name) +{ signed int v1; // edi char v2; // al signed int v3; // esi int result; // eax - char v5; // [esp+8h] [ebp-24h] - char v6[31]; // [esp+9h] [ebp-23h] - char *v7; // [esp+28h] [ebp-4h] + char v5[32]; // [esp+8h] [ebp-24h] - v7 = arg; - strcpy(&v5, arg); + strcpy(v5, name); v1 = 0; - if ( v5 == 32 ) + if ( v5[0] == 32 ) { v2 = 32; while ( v2 ) { - v2 = v6[v1++]; + v2 = v5[v1++ + 1]; if ( v2 != 32 ) goto LABEL_5; } @@ -442,46 +377,40 @@ LABEL_9: else { LABEL_5: - v3 = strlen(&v5); - while ( *(&v5 + --v3) == 32 ) + v3 = strlen(v5); + while ( v5[--v3] == 32 ) { if ( v3 <= v1 ) goto LABEL_9; } - v6[v3] = 0; - strcpy(v7, &v5 + v1); + v5[v3 + 1] = 0; + strcpy(name, &v5[v1]); result = v3 + 1 - v1; } return result; -} */ -// 10004B3F: using guessed type char var_23[31]; +} // ref: 0x10004BA8 -HFONT UNKCALL cr8game_10004BA8(HWND hWnd) { return 0; } -/* { - HFONT v1; // edi - HFONT v2; // eax - int pv; // [esp+8h] [ebp-40h] - int v5; // [esp+Ch] [ebp-3Ch] - HWND hDlg; // [esp+44h] [ebp-4h] +HFONT __fastcall cr8game_GetCr8Object(HWND hWnd) +{ + HFONT v2; // eax MAPDST + int pv[15]; // [esp+8h] [ebp-40h] - hDlg = hWnd; - v1 = (HFONT)SendMessageA(hWnd, 0x31u, 0, 0); - if ( v1 ) + v2 = (HFONT)SendMessageA(hWnd, 0x31u, 0, 0); + if ( v2 ) { - if ( GetObjectA(v1, 60, &pv) ) + if ( GetObjectA(v2, 60, pv) ) { - pv = -MulDiv(12, 96, 72); - v5 = 0; - v2 = CreateFontIndirectA((const LOGFONTA *)&pv); - v1 = v2; + pv[0] = -MulDiv(12, 96, 72); + pv[1] = 0; + v2 = CreateFontIndirectA((const LOGFONTA *)pv); if ( v2 ) { - SendDlgItemMessageA(hDlg, 1032, 0x30u, (WPARAM)v2, 0); - SendDlgItemMessageA(hDlg, 1033, 0x30u, (WPARAM)v1, 0); - SendDlgItemMessageA(hDlg, 1034, 0x30u, (WPARAM)v1, 0); + SendDlgItemMessageA(hWnd, 1032, 0x30u, (WPARAM)v2, 0); + SendDlgItemMessageA(hWnd, 1033, 0x30u, (WPARAM)v2, 0); + SendDlgItemMessageA(hWnd, 1034, 0x30u, (WPARAM)v2, 0); } } } - return v1; -} */ + return v2; +} diff --git a/DiabloUI/creadung.cpp b/DiabloUI/creadung.cpp index 3ad58091d..83a8ff86c 100644 --- a/DiabloUI/creadung.cpp +++ b/DiabloUI/creadung.cpp @@ -1,31 +1,27 @@ // ref: 0x10004C33 -void UNKCALL CreaDung_10004C33(void *arg) { return; } -/* { - dword_100296CC = (int)arg; -} */ -// 100296CC: using guessed type int dword_100296CC; +void __fastcall CreaDung_SetDelSpin(int a1) +{ + creadung_delspinners = a1; +} +// 100296CC: using guessed type int creadung_delspinners; // ref: 0x10004C3F -signed int CreaDung_10004C3F() { return 0; } -/* { - signed int result; // eax - - result = 2139095040; - dword_100296C4 = 2139095040; - return result; -} */ -// 100296C4: using guessed type int dword_100296C4; +void __cdecl CreaDung_cpp_init() +{ + CreaDung_cpp_float = CreaDung_cpp_float_value; +} +// 1001F400: using guessed type int CreaDung_cpp_float_value; +// 100296C4: using guessed type int CreaDung_cpp_float; // ref: 0x10004C4A -int __stdcall CreaDung_10004C4A(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { return 0; } -/* { +LRESULT __stdcall CreaDung_WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) +{ HWND v4; // eax HWND v6; // eax - int savedregs; // [esp+Ch] [ebp+0h] if ( Msg == 2 ) { - CreaDung_10004E2E(hWnd); + CreaDung_FreeDungProcs(hWnd); } else if ( Msg > 0x103 ) { @@ -33,8 +29,8 @@ int __stdcall CreaDung_10004C4A(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lPara { if ( Msg == 272 ) { - dword_100296D8 = lParam; - CreaDung_10004E8B(hWnd); + creadung_dword_100296D8 = lParam; + CreaDung_LoadDungGFX(hWnd); } else { @@ -42,34 +38,34 @@ int __stdcall CreaDung_10004C4A(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lPara { if ( HIWORD(wParam) == 7 ) { - Focus_100075B7(hWnd, (HWND)lParam); + Focus_GetAndBlitSpin(hWnd, lParam); } else if ( HIWORD(wParam) == 6 ) { - Focus_10007458((void *)lParam); - Focus_100075DC(hWnd, (HWND)lParam); - CreaDung_10004D75(hWnd, (unsigned short)wParam); + Focus_CheckPlayMove(lParam); + Focus_DoBlitSpinIncFrame(hWnd, (HWND)lParam); + CreaDung_ParseDungProcs(hWnd, (unsigned short)wParam); } - else if ( wParam == 327681 ) + else if ( HIWORD(wParam) == 5 || (_WORD)wParam == 1 ) { - CreaDung_10004F5D(hWnd, (int)&savedregs); + CreaDung_DoAllPlaySnd(hWnd); } else if ( (_WORD)wParam == 2 ) { - CreaDung_10004F40((int)hWnd, 2); + CreaDung_PlaySndAndKill(hWnd, 2); } - return SDlgDefDialogProc(hWnd, Msg, wParam, lParam); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); } if ( Msg != 275 ) { if ( Msg == 513 ) - CreaDung_1000517E(hWnd, (unsigned short)lParam, (int)&savedregs, (unsigned int)lParam >> 16); - return SDlgDefDialogProc(hWnd, Msg, wParam, lParam); + CreaDung_CheckDlgForSnd(hWnd, (unsigned short)lParam, (unsigned int)lParam >> 16); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); } if ( wParam == 1 ) { v4 = GetFocus(); - Focus_100075DC(hWnd, v4); + Focus_DoBlitSpinIncFrame(hWnd, v4); } } return 0; @@ -77,272 +73,233 @@ int __stdcall CreaDung_10004C4A(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lPara v6 = (HWND)SDrawGetFrameWindow(); SendMessageA(v6, Msg, wParam, lParam); } - return SDlgDefDialogProc(hWnd, Msg, wParam, lParam); -} */ -// 1001037C: using guessed type int __stdcall SDlgDefDialogProc(_DWORD, _DWORD, _DWORD, _DWORD); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); +} // 10010382: using guessed type _DWORD __stdcall SDrawGetFrameWindow(); -// 100296D8: using guessed type int dword_100296D8; +// 100296D8: using guessed type int creadung_dword_100296D8; // ref: 0x10004D75 -int __fastcall CreaDung_10004D75(HWND a1, int a2) { return 0; } -/* { - int v2; // esi +void __fastcall CreaDung_ParseDungProcs(HWND hWnd, int dlg) +{ HWND v3; // eax int v4; // eax HWND v5; // eax int v6; // eax - HWND hDlg; // [esp+0h] [ebp-104h] - CHAR Buffer; // [esp+4h] [ebp-100h] + char Buffer[256]; // [esp+4h] [ebp-100h] - v2 = a2; - hDlg = a1; - LoadStringA(hInstance, a2 - 1055, &Buffer, 255); - v3 = GetDlgItem(hDlg, 1097); + LoadStringA(ghUiInst, dlg - 1055, Buffer, 255); + v3 = GetDlgItem(hWnd, 1097); if ( v3 ) { v4 = GetWindowLongA(v3, -21); - local_10007FA4(v4, &Buffer); + local_SetWndLongStr(v4, Buffer); } - Doom_10006A13(hDlg, (int *)&unk_100228E8, 5); - LoadStringA(hInstance, v2 - 65, &Buffer, 255); - v5 = GetDlgItem(hDlg, 1099); + Doom_ParseWndProc4(hWnd, creadung_msgtbl2, 5); + LoadStringA(ghUiInst, dlg - 65, Buffer, 255); + v5 = GetDlgItem(hWnd, 1099); if ( v5 ) { v6 = GetWindowLongA(v5, -21); - local_10007FA4(v6, &Buffer); + local_SetWndLongStr(v6, Buffer); } - return Doom_10006A13(hDlg, (int *)&unk_100228F0, 1); -} */ + Doom_ParseWndProc4(hWnd, creadung_msgtbl3, 1); +} // ref: 0x10004E2E -void UNKCALL CreaDung_10004E2E(HWND hDlg) { return; } -/* { - HWND v1; // esi - _DWORD *v2; // eax +void __fastcall CreaDung_FreeDungProcs(HWND hWnd) +{ + void **v2; // eax - v1 = hDlg; - Doom_10006C53(hDlg, (int *)&unk_10022904); - Doom_10006C53(v1, (int *)&unk_100228F8); - Doom_10006C53(v1, (int *)&unk_100228F0); - Doom_10006C53(v1, (int *)&unk_100228E8); - Doom_10006C53(v1, (int *)&unk_100228DC); - v2 = (_DWORD *)GetWindowLongA(v1, -21); - local_10007F72(v2); - if ( dword_100296CC ) - Focus_100076C3(); -} */ -// 100296CC: using guessed type int dword_100296CC; + Doom_DeleteFreeProcs(hWnd, creadung_msgtbl5); + Doom_DeleteFreeProcs(hWnd, creadung_msgtbl4); + Doom_DeleteFreeProcs(hWnd, creadung_msgtbl3); + Doom_DeleteFreeProcs(hWnd, creadung_msgtbl2); + Doom_DeleteFreeProcs(hWnd, creadung_msgtbl1); + v2 = (void **)GetWindowLongA(hWnd, -21); + local_FreeMemPtr(v2); + if ( creadung_delspinners ) + Focus_DeleteSpinners(); +} +// 100296CC: using guessed type int creadung_delspinners; // ref: 0x10004E8B -int UNKCALL CreaDung_10004E8B(HWND hWnd) { return 0; } -/* { - HWND v1; // esi - int v2; // eax - int *v3; // edi +void __fastcall CreaDung_LoadDungGFX(HWND hWnd) +{ + DWORD *v2; // eax MAPDST - v1 = hWnd; - if ( dword_100296CC ) - Focus_10007719("ui_art\\focus16.pcx"); + if ( creadung_delspinners ) + Focus_LoadSpinner("ui_art\\focus16.pcx"); else - Focus_100076FA(); - SDlgSetTimer(v1, 1, 55, 0); - v2 = local_10007F46(); - v3 = (int *)v2; + Focus_ResetSpinToZero(); + SDlgSetTimer((int)hWnd, 1, 55, 0); + v2 = local_AllocWndLongData(); if ( v2 ) { - SetWindowLongA(v1, -21, v2); - local_10007944((int)v1, 0, "popup", -1, 1, (int)"ui_art\\seldiff.pcx", v3, v3 + 1, 0); + SetWindowLongA(hWnd, -21, (LONG)v2); + local_LoadArtWithPal(hWnd, 0, "popup", -1, 1, "ui_art\\seldiff.pcx", (BYTE **)v2, v2 + 1, 0); } - local_10007CB5(v1, (int *)&unk_10022904); - Doom_100068AB(v1, (int *)&unk_100228DC, 5); - Doom_100068AB(v1, (int *)&unk_100228E8, 5); - Doom_100068AB(v1, (int *)&unk_100228F0, 1); - Doom_1000658C(v1, (int *)&unk_100228F8, 4, 0); - return Doom_1000658C(v1, (int *)&unk_10022904, 2, 1); -} */ -// 10010412: using guessed type int __stdcall SDlgSetTimer(_DWORD, _DWORD, _DWORD, _DWORD); -// 100296CC: using guessed type int dword_100296CC; + local_DoUiWndProc(hWnd, (DWORD *)creadung_msgtbl5); + Doom_ParseWndProc3(hWnd, creadung_msgtbl1, 5); + Doom_ParseWndProc3(hWnd, creadung_msgtbl2, 5); + Doom_ParseWndProc3(hWnd, creadung_msgtbl3, 1); + Doom_ParseWndProcs(hWnd, creadung_msgtbl4, 4, 0); + Doom_ParseWndProcs(hWnd, creadung_msgtbl5, 2, 1); +} +// 100296CC: using guessed type int creadung_delspinners; // ref: 0x10004F40 -int __fastcall CreaDung_10004F40(int a1, int a2) { return 0; } -/* { - int v2; // edi - int v3; // esi - - v2 = a2; - v3 = a1; - TitleSnd_1001031F(); - SDlgKillTimer(v3, 1); - return SDlgEndDialog(v3, v2); -} */ -// 10010376: using guessed type int __stdcall SDlgEndDialog(_DWORD, _DWORD); -// 10010418: using guessed type int __stdcall SDlgKillTimer(_DWORD, _DWORD); +void __fastcall CreaDung_PlaySndAndKill(HWND hWnd, int a2) +{ + TitleSnd_PlaySelectSound(); + SDlgKillTimer((int)hWnd, 1); + SDlgEndDialog(hWnd, (HANDLE)a2); +} // ref: 0x10004F5D -HWND USERCALL CreaDung_10004F5D(HWND a1, int a2) { return 0; } -/* { - int v2; // esi +void __fastcall CreaDung_DoAllPlaySnd(HWND hWnd) +{ + //int v1; // ebp + HWND v2; // esi HWND v3; // eax LONG v4; // eax - HWND result; // eax - HWND v6; // edi - HWND v7; // eax - int v8; // [esp-288h] [ebp-28Ch] - int v9; // [esp-188h] [ebp-18Ch] - int v10; // [esp-108h] [ebp-10Ch] - int v11; // [esp-88h] [ebp-8Ch] - int v12; // [esp-8h] [ebp-Ch] - char v13; // [esp-4h] [ebp-8h] - int v14; // [esp+0h] [ebp-4h] + HWND v5; // edi + HWND v6; // eax + int v7; // [esp-288h] [ebp-28Ch] + int v8; // [esp-188h] [ebp-18Ch] + char *v9; // [esp-108h] [ebp-10Ch] + char *v10; // [esp-88h] [ebp-8Ch] + int v11; // [esp-8h] [ebp-Ch] + char v12; // [esp-4h] [ebp-8h] + //int v13; // [esp+0h] [ebp-4h] - v2 = (int)a1; - if ( dword_100296D8 == 1 ) + /* note: stack is hosed, fix me */ + v2 = hWnd; + if ( creadung_dword_100296D8 == 1 ) { - v14 = a2; - v6 = a1; - Connect_10004028((int)&v11, 128, (int)&v10, 128); - v7 = GetFocus(); - v13 = GetWindowLongA(v7, -12) - 70; - Connect_10003E0C((int)&v12, (const char *)&v11, (char *)&v10, (char *)&v9, 128); - if ( UiAuthCallback(2, (int)&v11, (char *)&v10, 0, (char *)&v9, (LPSTR)&v8, 256) ) - result = CreaDung_10005037(v6); + //v13 = v1; + v5 = hWnd; + Connect_CopyPlrDescStrings((char *)&v10, 128, (char *)&v9, 128); + v6 = GetFocus(); + v12 = GetWindowLongA(v6, -12) - 70; + Connect_SetDiffString((_gamedata *)&v11, (const char *)&v10, (char *)&v9, (char *)&v8, 128); + if ( UiAuthCallback(2, (char *)&v10, (char *)&v9, 0, (char *)&v8, (LPSTR)&v7, 256) ) + CreaDung_DoSnetCreaGame(v5); else - result = (HWND)SelYesNo_1000FD39((int)v6, (const CHAR *)&v8, 0, 0); + SelYesNo_SelOkDialog(v5, (char *)&v7, 0, 0); } else { v3 = GetFocus(); v4 = GetWindowLongA(v3, -12); - SelHero_1000B7AC((void *)(v4 - 1094)); - result = (HWND)CreaDung_10004F40(v2, 1); + SelHero_SetHeroDifficulty(v4 - 1094); + CreaDung_PlaySndAndKill(v2, 1); } - return result; -} */ +} // 10004F5D: could not find valid save-restore pair for ebp -// 100296D8: using guessed type int dword_100296D8; +// 100296D8: using guessed type int creadung_dword_100296D8; // ref: 0x10005037 -HWND UNKCALL CreaDung_10005037(HWND arg) { return 0; } -/* { - HWND v1; // eax - HWND v2; // ebx - HWND result; // eax - int v4; // eax - int v5; // edi - char v6; // [esp+8h] [ebp-34Ch] - CHAR v7; // [esp+108h] [ebp-24Ch] - CHAR Buffer; // [esp+188h] [ebp-1CCh] - char v9; // [esp+248h] [ebp-10Ch] - char v10; // [esp+2C8h] [ebp-8Ch] - char v11; // [esp+348h] [ebp-Ch] - char v12; // [esp+34Ch] [ebp-8h] - HWND v13; // [esp+350h] [ebp-4h] +void __fastcall CreaDung_DoSnetCreaGame(HWND hWnd) +{ + HWND v1; // ebx + DWORD *v2; // eax + DWORD v3; // edi + char a4[256]; // [esp+8h] [ebp-34Ch] + char v5[128]; // [esp+108h] [ebp-24Ch] + char Buffer[192]; // [esp+188h] [ebp-1CCh] + char a3[128]; // [esp+248h] [ebp-10Ch] + char a2[128]; // [esp+2C8h] [ebp-8Ch] + _gamedata a1; // [esp+348h] [ebp-Ch] - v13 = arg; v1 = GetFocus(); - v2 = v1; - result = GetParent(v1); - if ( v13 == result ) + if ( hWnd == GetParent(v1) ) { - Connect_10004028((int)&v10, 128, (int)&v9, 128); - v12 = GetWindowLongA(v2, -12) - 70; - Connect_10003E0C((int)&v11, &v10, &v9, &v6, 256); - v4 = dword_100296D0; - if ( *(_DWORD *)(dword_100296D0 + 32) >= 8u ) + Connect_CopyPlrDescStrings(a2, 128, a3, 128); + a1.bDiff = GetWindowLongA(v1, -12) - 70; + Connect_SetDiffString(&a1, a2, a3, a4, 256); + v2 = crea_somegamestruct; + if ( crea_somegamestruct[8] >= 8 ) { - v5 = *(_DWORD *)(dword_100296D0 + 28); - *(_BYTE *)(v5 + 4) = GetWindowLongA(v2, -12) - 70; - v4 = dword_100296D0; + v3 = crea_somegamestruct[7]; + *(_BYTE *)(v3 + 4) = GetWindowLongA(v1, -12) - 70; + v2 = crea_somegamestruct; } if ( SNetCreateGame( - dword_100296DC, + creadung_gamename, 0, - &v6, + a4, 0, - *(_DWORD *)(v4 + 28), - *(_DWORD *)(v4 + 32), - *(_DWORD *)(dword_100296BC + 8), - &v10, + (char *)v2[7], + v2[8], + *(_DWORD *)(creadung_playername + 8), + a2, 0, - dword_100296C0) ) + creadung_playerID) ) { - result = (HWND)CreaDung_10004F40((int)v13, 1); + CreaDung_PlaySndAndKill(hWnd, 1); } else { - dword_100296D4 = SErrGetLastError(); - if ( dword_100296D4 == 183 ) + creadung_lasterror = SErrGetLastError(); + if ( creadung_lasterror == 183 ) { - LoadStringA(hInstance, 0x49u, &v7, 127); - wsprintfA(&Buffer, &v7, dword_100296DC); + LoadStringA(ghUiInst, 0x49u, v5, 127); + wsprintfA(Buffer, v5, creadung_gamename); } else { - LoadStringA(hInstance, 0x26u, &Buffer, 191); + LoadStringA(ghUiInst, 0x26u, Buffer, 191); } - result = (HWND)SelYesNo_1000FD39((int)v13, &Buffer, 0, 0); + SelYesNo_SelOkDialog(hWnd, Buffer, 0, 0); } } - return result; -} */ +} // 10010406: using guessed type _DWORD __stdcall SErrGetLastError(); -// 1001040C: using guessed type int __stdcall SNetCreateGame(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); -// 100296BC: using guessed type int dword_100296BC; -// 100296C0: using guessed type int dword_100296C0; -// 100296D0: using guessed type int dword_100296D0; -// 100296D4: using guessed type int dword_100296D4; -// 100296DC: using guessed type int dword_100296DC; +// 100296BC: using guessed type int creadung_playername; +// 100296D4: using guessed type int creadung_lasterror; // ref: 0x1000517E -HWND USERPURGE CreaDung_1000517E(HWND hWnd, int a2, int a3, int a4) { return 0; } -/* { - int v4; // ebx - HWND v5; // esi - int v6; // ST08_4 +void __fastcall CreaDung_CheckDlgForSnd(HWND hWnd, int a2, int a3) +{ + HWND v6; // eax HWND v7; // eax - HWND result; // eax - HWND v9; // eax - v4 = a2; - v5 = hWnd; - v6 = a2; - v7 = GetDlgItem(hWnd, 1056); - if ( local_10007C3B(v5, v7, v6, a4) ) - return CreaDung_10004F5D(v5, a3); - v9 = GetDlgItem(v5, 1054); - result = (HWND)local_10007C3B(v5, v9, v4, a4); - if ( result ) - result = (HWND)CreaDung_10004F40((int)v5, 2); - return result; -} */ + v6 = GetDlgItem(hWnd, 1056); + if ( local_GetBottomRect(hWnd, v6, a2, a3) ) + { + CreaDung_DoAllPlaySnd(hWnd); + } + else + { + v7 = GetDlgItem(hWnd, 1054); + if ( local_GetBottomRect(hWnd, v7, a2, a3) ) + CreaDung_PlaySndAndKill(hWnd, 2); + } +} // ref: 0x100051D8 -int __fastcall CreaDung_100051D8(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8) { return 0; } -/* { - int v8; // eax - int result; // eax +BOOL __fastcall CreaDung_SelDungDiff(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8) +{ + int v8; // ST10_4 + BOOL result; // eax - dword_100296BC = a1; - dword_100296C8 = a3; - dword_100296C0 = a6; - dword_100296CC = a7; - dword_100296D0 = a2; - dword_100296DC = a8; - v8 = SelHero_1000B7CA(); - result = SDlgDialogBoxParam(hInstance, "SELDIFF_DIALOG", *(_DWORD *)(a4 + 8), CreaDung_10004C4A, v8); + creadung_playername = a1; + creadung_dword_100296C8 = a3; + creadung_playerID = (int *)a6; + creadung_delspinners = a7; + crea_somegamestruct = (DWORD *)a2; + creadung_gamename = (char *)a8; + v8 = SelHero_GetHeroIsGood(); + result = SDlgDialogBoxParam(ghUiInst, "SELDIFF_DIALOG", *(_DWORD *)(a4 + 8), CreaDung_WndProc, v8); if ( result != 1 ) { - SErrSetLastError(dword_100296D4); + SErrSetLastError(creadung_lasterror); result = 0; } return result; -} */ -// 10010370: using guessed type int __stdcall SDlgDialogBoxParam(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); +} // 1001041E: using guessed type int __stdcall SErrSetLastError(_DWORD); -// 100296BC: using guessed type int dword_100296BC; -// 100296C0: using guessed type int dword_100296C0; -// 100296C8: using guessed type int dword_100296C8; -// 100296CC: using guessed type int dword_100296CC; -// 100296D0: using guessed type int dword_100296D0; -// 100296D4: using guessed type int dword_100296D4; -// 100296DC: using guessed type int dword_100296DC; +// 100296BC: using guessed type int creadung_playername; +// 100296C8: using guessed type int creadung_dword_100296C8; +// 100296CC: using guessed type int creadung_delspinners; +// 100296D4: using guessed type int creadung_lasterror; diff --git a/DiabloUI/creastat.cpp b/DiabloUI/creastat.cpp index 02db8e95f..8c08d1a41 100644 --- a/DiabloUI/creastat.cpp +++ b/DiabloUI/creastat.cpp @@ -1,25 +1,19 @@ // ref: 0x1000523E -signed int __stdcall UiGetDefaultStats(int a1, _WORD *a2) { return 0; } -/* { - if ( !a2 ) +BOOL __stdcall UiGetDefaultStats(int pclass, _uidefaultstats *pStats) +{ + if ( !pStats ) return 0; - *a2 = word_10022958[4 * a1]; - a2[1] = word_1002295A[4 * a1]; - a2[2] = word_1002295C[4 * a1]; - a2[3] = word_1002295E[4 * a1]; + pStats->strength = defstats[pclass][0]; + pStats->magic = defstats[pclass][1]; + pStats->dexterity = defstats[pclass][2]; + pStats->vitality = defstats[pclass][3]; return 1; -} */ -// 10022958: using guessed type short word_10022958[]; -// 1002295A: using guessed type short word_1002295A[]; -// 1002295C: using guessed type short word_1002295C[]; +} // ref: 0x10005287 -signed int CreaStat_10005287() { return 0; } -/* { - signed int result; // eax - - result = 2139095040; - dword_100296E0 = 2139095040; - return result; -} */ -// 100296E0: using guessed type int dword_100296E0; +void __cdecl CreaStat_cpp_init() +{ + CreaStat_cpp_float = CreaStat_cpp_float_value; +} +// 1001F404: using guessed type int CreaStat_cpp_float_value; +// 100296E0: using guessed type int CreaStat_cpp_float; diff --git a/DiabloUI/credits.cpp b/DiabloUI/credits.cpp index ba4b55501..5ffdabcba 100644 --- a/DiabloUI/credits.cpp +++ b/DiabloUI/credits.cpp @@ -1,38 +1,33 @@ // ref: 0x10005297 -signed int credits_10005297() { return 0; } -/* { - signed int result; // eax - - result = 2139095040; - dword_100296EC = 2139095040; - return result; -} */ -// 100296EC: using guessed type int dword_100296EC; +void __cdecl credits_cpp_init() +{ + credits_cpp_float = credits_cpp_float_value; +} +// 1001F408: using guessed type int credits_cpp_float_value; +// 100296EC: using guessed type int credits_cpp_float; // ref: 0x100052A2 -void __stdcall UiCreditsDialog(int a1) { return; } -/* { +BOOL __stdcall UiCreditsDialog(int a1) +{ int v1; // eax - v1 = SDrawGetFrameWindow(); - SDlgDialogBoxParam(hInstance, "CREDITS_DIALOG", v1, credits_100052C7, 25); + v1 = (int)SDrawGetFrameWindow(); + SDlgDialogBoxParam(ghUiInst, "CREDITS_DIALOG", v1, credits_WndProc, 25); return 1; -} */ -// 10010370: using guessed type int __stdcall SDlgDialogBoxParam(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); +} // 10010382: using guessed type _DWORD __stdcall SDrawGetFrameWindow(); // ref: 0x100052C7 -int __fastcall credits_100052C7(int a1, int a2, HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { return 0; } -/* { - HWND v7; // eax - int v8; // [esp+0h] [ebp-Ch] +LRESULT __stdcall credits_WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) +{ + HWND v5; // eax if ( Msg > 0x111 ) { if ( Msg == 275 ) { - credits_100055C0(hWnd); - return SDlgDefDialogProc(hWnd, Msg, wParam, lParam); + credits_CalcPosROP3(hWnd); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); } if ( Msg == 513 || Msg == 516 ) goto LABEL_12; @@ -40,17 +35,17 @@ int __fastcall credits_100052C7(int a1, int a2, HWND hWnd, UINT Msg, WPARAM wPar { if ( Msg == 2024 ) { - if ( !Fade_1000739F() ) - Fade_100073FD(hWnd, v8); + if ( !Fade_CheckRange5() ) + Fade_SetFadeTimer((int)hWnd); return 0; } - return SDlgDefDialogProc(hWnd, Msg, wParam, lParam); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); } if ( (_WORD)wParam != 513 && (_WORD)wParam != 516 ) - return SDlgDefDialogProc(hWnd, Msg, wParam, lParam); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); LABEL_25: - Title_100102D7(hWnd); - return SDlgDefDialogProc(hWnd, Msg, wParam, lParam); + Title_KillAndFadeDlg(hWnd); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); } if ( Msg == 273 ) goto LABEL_25; @@ -64,238 +59,196 @@ LABEL_25: { if ( Msg <= 0x105 ) { - v7 = (HWND)SDrawGetFrameWindow(); - SendMessageA(v7, Msg, wParam, lParam); + v5 = (HWND)SDrawGetFrameWindow(); + SendMessageA(v5, Msg, wParam, lParam); } else if ( Msg == 272 ) { - credits_1000543A(hWnd, lParam); + credits_LoadImgCreditTxt(hWnd, lParam); PostMessageA(hWnd, 0x7E8u, 0, 0); return 1; } } - return SDlgDefDialogProc(hWnd, Msg, wParam, lParam); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); } if ( wParam != 32 ) return 0; LABEL_12: - Title_100102D7(hWnd); + Title_KillAndFadeDlg(hWnd); return 0; } - credits_100053D9(hWnd, a2); - return SDlgDefDialogProc(hWnd, Msg, wParam, lParam); -} */ -// 1001037C: using guessed type int __stdcall SDlgDefDialogProc(_DWORD, _DWORD, _DWORD, _DWORD); + credits_FreeCreditResrc(hWnd); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); +} // 10010382: using guessed type _DWORD __stdcall SDrawGetFrameWindow(); // ref: 0x100053D9 -HGLOBAL __fastcall credits_100053D9(HWND hWnd, int a2) { return 0; } -/* { - HWND v2; // edi - _DWORD *v3; // eax - HGLOBAL result; // eax +void __fastcall credits_FreeCreditResrc(HWND hWnd) +{ + void **v2; // eax - v2 = hWnd; - if ( dword_10029708 ) + if ( creditsobj ) { - SGdiDeleteObject(hWnd, a2, dword_10029708); - dword_10029708 = 0; + SGdiDeleteObject(creditsobj); + creditsobj = 0; } - if ( dword_10029704 ) + if ( credit_back_img ) { - SMemFree(dword_10029704, "C:\\Src\\Diablo\\DiabloUI\\credits.cpp", 46, 0); - dword_10029704 = 0; + SMemFree(credit_back_img, "C:\\Src\\Diablo\\DiabloUI\\credits.cpp", 46, 0); + credit_back_img = 0; } - v3 = (_DWORD *)GetWindowLongA(v2, -21); - local_10007F72(v3); - result = dword_100296F0; - if ( dword_100296F0 ) + v2 = (void **)GetWindowLongA(hWnd, -21); + local_FreeMemPtr(v2); + if ( credittext_rsrc ) { - result = (HGLOBAL)FreeResource(dword_100296F0); - dword_100296F0 = 0; + FreeResource(credittext_rsrc); + credittext_rsrc = 0; } - return result; -} */ -// 10010340: using guessed type int __stdcall SMemFree(_DWORD, _DWORD, _DWORD, _DWORD); -// 1001038E: using guessed type int __fastcall SGdiDeleteObject(_DWORD, _DWORD, _DWORD); -// 10029704: using guessed type int dword_10029704; -// 10029708: using guessed type int dword_10029708; +} // ref: 0x1000543A -int __fastcall credits_1000543A(HWND a1, int a2) { return 0; } -/* { - int v2; // eax +void __fastcall credits_LoadImgCreditTxt(HWND hWnd, LPARAM lParam) +{ + signed int v2; // eax HRSRC v3; // eax HRSRC v4; // eax - int v5; // eax - int *v6; // esi + DWORD *v5; // eax + DWORD *v6; // esi int v7; // ebx int v8; // esi - HFONT v9; // eax - HFONT v10; // esi - int v11; // ebx - int result; // eax + HFONT v9; // eax MAPDST + BOOL v11; // ebx struct tagRECT Rect; // [esp+Ch] [ebp-18h] - HWND v14; // [esp+1Ch] [ebp-8h] - HWND hWnd; // [esp+20h] [ebp-4h] + HWND v13; // [esp+1Ch] [ebp-8h] - hWnd = a1; - if ( a2 ) - v2 = 1000 / a2; + if ( lParam ) + v2 = 1000 / lParam; else v2 = 50; - SDlgSetTimer(a1, 1, v2, 0); - v3 = FindResourceA(hInstance, "IDR_CREDITS", "TEXT_FILES"); - dword_100296F0 = LoadResource(hInstance, v3); - v4 = FindResourceA(hInstance, "IDR_CREDITS", "TEXT_FILES"); - dword_100296E8 = SizeofResource(hInstance, v4); - v5 = local_10007F46(); - v6 = (int *)v5; + SDlgSetTimer((int)hWnd, 1, v2, 0); + v3 = FindResourceA(ghUiInst, "IDR_CREDITS", "TEXT_FILES"); + credittext_rsrc = LoadResource(ghUiInst, v3); + v4 = FindResourceA(ghUiInst, "IDR_CREDITS", "TEXT_FILES"); + credittext_size = SizeofResource(ghUiInst, v4); + v5 = local_AllocWndLongData(); + v6 = v5; if ( v5 ) { - SetWindowLongA(hWnd, -21, v5); - local_10007944((int)hWnd, 0, &byte_10029448, -1, 1, (int)"ui_art\\credits.pcx", v6, v6 + 1, 0); - Fade_100073C5(hWnd, 0); + SetWindowLongA(hWnd, -21, (LONG)v5); + local_LoadArtWithPal(hWnd, 0, &nullcharacter, -1, 1, "ui_art\\credits.pcx", (BYTE **)v6, v6 + 1, 0); + Fade_NoInputAndArt(hWnd, 0); } - v14 = GetDlgItem(hWnd, 1000); - GetWindowRect(v14, &Rect); + v13 = GetDlgItem(hWnd, 1000); + GetWindowRect(v13, &Rect); v7 = Rect.right - Rect.left; v8 = Rect.bottom - Rect.top + 60; - dword_10029704 = SMemAlloc((Rect.right - Rect.left) * v8, "C:\\Src\\Diablo\\DiabloUI\\credits.cpp", 122, 0); - dword_100296F8 = v7; - dword_100296FC = v8; - local_10007A68(&Rect, 0, 30); - SDlgSetBitmapI(v14, 0, 0, -1, 1, dword_10029704, &Rect, v7, v8, -1); - dword_100296F4 = v8 - 30; - credits_100055C0(hWnd); + credit_back_img = SMemAlloc((Rect.right - Rect.left) * v8, "C:\\Src\\Diablo\\DiabloUI\\credits.cpp", 122, 0); + credit_horz_pos = v7; + credit_vertical_pos1 = v8; + local_AdjustRectSize(&Rect, 0, 30); + SDlgSetBitmapI(v13, 0, 0, -1, 1, credit_back_img, (int)&Rect, v7, v8, -1); + credit_vertical_pos2 = v8 - 30; + credits_CalcPosROP3(hWnd); v9 = CreateFontA(-17, 0, 0, 0, 700, 0, 0, 0, 0, 0, 0, 0, 0x12u, "Times New Roman"); - v10 = v9; - if ( !v9 || (v11 = SGdiImportFont(v9, &dword_10029708), result = DeleteObject(v10), !v11) ) - result = Title_100102D7(hWnd); - return result; -} */ -// 10010364: using guessed type int __stdcall SMemAlloc(_DWORD, _DWORD, _DWORD, _DWORD); -// 100103B2: using guessed type int __stdcall SGdiImportFont(_DWORD, _DWORD); -// 10010400: using guessed type int __stdcall SDlgSetBitmapI(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); -// 10010412: using guessed type int __stdcall SDlgSetTimer(_DWORD, _DWORD, _DWORD, _DWORD); -// 100296E8: using guessed type int dword_100296E8; -// 100296F4: using guessed type int dword_100296F4; -// 100296F8: using guessed type int dword_100296F8; -// 100296FC: using guessed type int dword_100296FC; -// 10029704: using guessed type int dword_10029704; -// 10029708: using guessed type int dword_10029708; + if ( !v9 || (v11 = SGdiImportFont(v9, (int)&creditsobj), DeleteObject(v9), !v11) ) + Title_KillAndFadeDlg(hWnd); +} +// 100296E8: using guessed type int credittext_size; +// 100296FC: using guessed type int credit_vertical_pos1; // ref: 0x100055C0 -BOOL UNKCALL credits_100055C0(HWND hWnd) { return 0; } -/* { - HWND v1; // ebx +void __fastcall credits_CalcPosROP3(HWND hWnd) +{ _DWORD *v2; // edi struct tagRECT Rect; // [esp+Ch] [ebp-14h] HWND hWnda; // [esp+1Ch] [ebp-4h] - v1 = hWnd; hWnda = GetDlgItem(hWnd, 1000); - v2 = (_DWORD *)GetWindowLongA(v1, -21); + v2 = (_DWORD *)GetWindowLongA(hWnd, -21); GetWindowRect(hWnda, &Rect); - ScreenToClient(v1, (LPPOINT)&Rect); - ScreenToClient(v1, (LPPOINT)&Rect.right); + ScreenToClient(hWnd, (LPPOINT)&Rect); + ScreenToClient(hWnd, (LPPOINT)&Rect.right); SBltROP3( - dword_10029704 + 30 * dword_100296F8, - Rect.left + *v2 + Rect.top * v2[1], - dword_100296F8, + (char *)credit_back_img + 30 * credit_horz_pos, + (void *)(Rect.left + *v2 + Rect.top * v2[1]), + credit_horz_pos, Rect.bottom - Rect.top, - dword_100296F8, + credit_horz_pos, v2[1], 0, - 13369376); - --dword_100296F4; - credits_10005660(v1); + 0xCC0020u); + --credit_vertical_pos2; + credits_PrintCredLines(hWnd); InvalidateRect(hWnda, 0, 0); - return UpdateWindow(hWnda); -} */ -// 100103F4: using guessed type int __stdcall SBltROP3(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); -// 100296F4: using guessed type int dword_100296F4; -// 100296F8: using guessed type int dword_100296F8; -// 10029704: using guessed type int dword_10029704; + UpdateWindow(hWnda); +} // ref: 0x10005660 -signed int UNKCALL credits_10005660(void *arg) { return 0; } -/* { - _BYTE *v1; // esi - signed int result; // eax +void __fastcall credits_PrintCredLines(HWND hWnd) +{ + char *v1; // esi int i; // edi - int v4; // ebp - int v5; // ebx - void *v6; // [esp+38h] [ebp-4h] - - v6 = arg; - v1 = LockResource(dword_100296F0); - dword_10029700 = dword_100296E8; - SGdiSelectObject(dword_10029708); - result = SGdiSetPitch(dword_100296F8); - for ( i = dword_100296F4; dword_10029700 > 0; v1 = (_BYTE *)result ) + int v3; // ebp + int v4; // ebx + + v1 = (char *)LockResource(credittext_rsrc); + credit_line_count = credittext_size; + SGdiSelectObject((int)creditsobj); + SGdiSetPitch(credit_horz_pos); + for ( i = credit_vertical_pos2; credit_line_count > 0; v1 = credits_GetAdjustText(v1, v4) ) { - v4 = 0; + v3 = 0; while ( *v1 == 9 ) { - v4 += 40; + v3 += 40; ++v1; - --dword_10029700; + --credit_line_count; } - result = credits_10005736(v1); - v5 = result; - if ( result == -1 ) + v4 = credits_GetCredLineBreak(v1); + if ( v4 == -1 ) break; if ( i >= 0 ) { - result = dword_100296FC - 30; - if ( i > dword_100296FC - 30 ) + if ( i > credit_vertical_pos1 - 30 ) break; - if ( v5 ) + if ( v4 ) { - SGdiTextOut(dword_10029704, v4 + 2, i + 2, 0x1000000, v1, v5); - SGdiTextOut(dword_10029704, v4, i, 16777440, v1, v5); + SGdiTextOut(credit_back_img, v3 + 2, i + 2, 0x1000000, v1, v4); + SGdiTextOut(credit_back_img, v3, i, 16777440, v1, v4); } } i += 22; - result = credits_10005755((int)v1, v5); } if ( i < 0 ) - result = Title_100102D7(v6); - return result; -} */ + Title_KillAndFadeDlg(hWnd); +} // 100103A6: using guessed type int __stdcall SGdiSetPitch(_DWORD); // 100103AC: using guessed type int __stdcall SGdiSelectObject(_DWORD); -// 10010424: using guessed type int __stdcall SGdiTextOut(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); -// 100296E8: using guessed type int dword_100296E8; -// 100296F4: using guessed type int dword_100296F4; -// 100296F8: using guessed type int dword_100296F8; -// 100296FC: using guessed type int dword_100296FC; -// 10029700: using guessed type int dword_10029700; -// 10029704: using guessed type int dword_10029704; -// 10029708: using guessed type int dword_10029708; +// 100296E8: using guessed type int credittext_size; +// 100296FC: using guessed type int credit_vertical_pos1; +// 10029700: using guessed type int credit_line_count; // ref: 0x10005736 -signed int __fastcall credits_10005736(_BYTE *a1) { return 0; } -/* { - signed int result; // eax +int __fastcall credits_GetCredLineBreak(char *str) +{ + int result; // eax result = 0; - while ( *a1 != 13 && *a1 != 10 ) + while ( *str != 13 && *str != 10 ) { ++result; - ++a1; - if ( result > dword_10029700 ) + ++str; + if ( result > credit_line_count ) return -1; } return result; -} */ -// 10029700: using guessed type int dword_10029700; +} +// 10029700: using guessed type int credit_line_count; // ref: 0x10005755 -int __fastcall credits_10005755(int a1, int a2) { return 0; } -/* { - dword_10029700 += -2 - a2; - return a1 + a2 + 2; -} */ -// 10029700: using guessed type int dword_10029700; +char *__fastcall credits_GetAdjustText(char *str, int len) +{ + credit_line_count += -2 - len; + return &str[len + 2]; +} +// 10029700: using guessed type int credit_line_count; diff --git a/DiabloUI/diabloui.cpp b/DiabloUI/diabloui.cpp index 7b8ebd6dc..f066f6d78 100644 --- a/DiabloUI/diabloui.cpp +++ b/DiabloUI/diabloui.cpp @@ -100,24 +100,24 @@ void __stdcall UiSetSpawned(BOOL bSpawned) // ref: 0x10005C73 void __cdecl UiInitialize() { - dword_10029714 = 1; + sgbUiIsInitialized = 1; TitleSnd_InitSoundFunc(); artfont_InitAllFonts(); - Connect_10002EC4(); + Connect_LoadGFXAndStuff(); local_LoadArtCursor(); bn_prof_100021C4(); } -// 10029714: using guessed type int dword_10029714; +// 10029714: using guessed type int sgbUiIsInitialized; // ref: 0x10005C96 void __cdecl UiDestroy() { bn_prof_10002247(); local_FreeArtCursor(); - Connect_10002E2B(); - dword_10029714 = 0; + Connect_FreeConnectData(); + sgbUiIsInitialized = 0; } -// 10029714: using guessed type int dword_10029714; +// 10029714: using guessed type int sgbUiIsInitialized; // ref: 0x10005CAD void __stdcall UiAppActivate(BOOL bActive) diff --git a/DiabloUI/diabloui.h b/DiabloUI/diabloui.h index 8566bd8ef..e54086203 100644 --- a/DiabloUI/diabloui.h +++ b/DiabloUI/diabloui.h @@ -9,7 +9,7 @@ extern "C" { struct FontStruct { unsigned char fontbin[258]; - PALETTEENTRY fontpal[256]; + HANDLE fonttrans[256]; BOOL active; }; @@ -31,29 +31,31 @@ struct ProfFntStruct void __cdecl UiDestroy(); BOOL __stdcall UiTitleDialog(int a1); void __cdecl UiInitialize(); -void __stdcall UiCopyProtError(int a1); +BOOL __stdcall UiCopyProtError(int *pdwResult); void __stdcall UiAppActivate(BOOL bActive); -int __stdcall UiValidPlayerName(char *a1); -int __stdcall UiSelHeroMultDialog(void *fninfo, void *fncreate, void *fnremove, void *fnstats, int *a5, int *a6, char *name); -int __stdcall UiSelHeroSingDialog(void *fninfo, void *fncreate, void *fnremove, void *fnstats, int *a5, char *name, int *difficulty); -void __stdcall UiCreditsDialog(int a1); -int __stdcall UiMainMenuDialog(char *name, int *a2, void *fnSound, int a4); +BOOL __fastcall UiValidPlayerName(char *name); /* check __stdcall */ +BOOL __stdcall UiSelHeroMultDialog(BOOL (__stdcall *fninfo)(BOOL (__stdcall *fninfofunc)(_uiheroinfo *)), BOOL (__stdcall *fncreate)(_uiheroinfo *), BOOL (__stdcall *fnremove)(_uiheroinfo *), BOOL (__stdcall *fnstats)(int, _uidefaultstats *), int *dlgresult, int *a6, char *name); +BOOL __stdcall UiSelHeroSingDialog(BOOL (__stdcall *fninfo)(BOOL (__stdcall *fninfofunc)(_uiheroinfo *)), BOOL (__stdcall *fncreate)(_uiheroinfo *), BOOL (__stdcall *fnremove)(_uiheroinfo *), BOOL (__stdcall *fnstats)(int, _uidefaultstats *), int *dlgresult, char *name, int *difficulty); +BOOL __stdcall UiCreditsDialog(int a1); +BOOL __stdcall UiMainMenuDialog(char *name, int *pdwResult, void (__stdcall *fnSound)(char *file), int a4); int __stdcall UiProgressDialog(HWND window, char *msg, int a3, void *fnfunc, int a5); int __cdecl UiProfileGetString(); void __cdecl UiProfileCallback(); void __cdecl UiProfileDraw(); -void __cdecl UiCategoryCallback(); -void __cdecl UiGetDataCallback(); -void __cdecl UiAuthCallback(); -void __cdecl UiSoundCallback(); -void __cdecl UiMessageBoxCallback(); -void __cdecl UiDrawDescCallback(); -void __cdecl UiCreateGameCallback(); -void __cdecl UiArtCallback(); +BOOL __stdcall UiCategoryCallback(int a1, int a2, int a3, int a4, int a5, _DWORD *a6, _DWORD *a7); +BOOL __stdcall UiGetDataCallback(int game_type, int data_code, void *a3, int a4, int a5); +BOOL __stdcall UiAuthCallback(int a1, char *a2, char *a3, char a4, char *a5, LPSTR lpBuffer, int cchBufferMax); +BOOL __stdcall UiSoundCallback(int a1, int type, int a3); +void __stdcall UiMessageBoxCallback(HWND hWnd, char *lpText, LPCSTR lpCaption, UINT uType); +BOOL __stdcall UiDrawDescCallback(int arg0, COLORREF color, LPCSTR lpString, char *a4, int a5, UINT align, time_t a7, HDC *a8); +BOOL __stdcall UiCreateGameCallback(int a1, int a2, int a3, int a4, int a5, int a6); +BOOL __stdcall UiArtCallback(int game_type, unsigned int art_code, PALETTEENTRY *pPalette, void *pBuffer, DWORD dwBuffersize, DWORD *pdwWidth, DWORD *pdwHeight, DWORD *pdwBpp); int __stdcall UiSelectGame(int a1, _SNETPROGRAMDATA *client_info, _SNETPLAYERDATA *user_info, _SNETUIDATA *ui_info, _SNETVERSIONDATA *file_info, int *a6); int __stdcall UiSelectProvider(int a1, _SNETPROGRAMDATA *client_info, _SNETPLAYERDATA *user_info, _SNETUIDATA *ui_info, _SNETVERSIONDATA *file_info, int *type); -int __stdcall UiCreatePlayerDescription(_uiheroinfo *info, int mode, char *desc); -int __stdcall UiSetupPlayerInfo(char *str, _uiheroinfo *info, int mode); +BOOL __stdcall UiCreatePlayerDescription(_uiheroinfo *info, int mode, char *desc); +void __stdcall UiSetupPlayerInfo(char *infostr, _uiheroinfo *pInfo, int type); +void __stdcall UiCreateGameCriteria(_uiheroinfo *pInfo, char *str); +BOOL __stdcall UiGetDefaultStats(int pclass, _uidefaultstats *pStats); #ifdef __GNUC__ } diff --git a/DiabloUI/diabloui_gcc.def b/DiabloUI/diabloui_gcc.def index e0fb2e293..3e933c1ac 100644 --- a/DiabloUI/diabloui_gcc.def +++ b/DiabloUI/diabloui_gcc.def @@ -2,15 +2,19 @@ LIBRARY "DiabloUI" EXPORTS UiValidPlayerName @1 - UiValidPlayerName@4 @1 + @UiValidPlayerName@4 @1 UiAppActivate @2 UiAppActivate@4 @2 UiArtCallback @3 + UiArtCallback@32 @3 UiAuthCallback @4 + UiAuthCallback@28 @4 UiBetaDisclaimer @5 UiCategoryCallback @6 + UiCategoryCallback@28 @6 UiCopyProtError @7 UiCreateGameCallback @8 + UiCreateGameCallback@24 @8 UiCreateGameCriteria @9 UiCreatePlayerDescription @10 UiCreatePlayerDescription@12 @10 @@ -18,12 +22,15 @@ EXPORTS UiCreditsDialog@4 @11 UiDestroy @12 UiDrawDescCallback @13 + UiDrawDescCallback@32 @13 UiGetDataCallback @14 + UiGetDataCallback@20 @14 UiGetDefaultStats @15 UiInitialize @16 UiMainMenuDialog @17 UiMainMenuDialog@16 @17 UiMessageBoxCallback @18 + UiMessageBoxCallback@16 @18 UiOnPaint @19 UiProfileCallback @20 UiProfileDraw @21 @@ -44,5 +51,6 @@ EXPORTS UiSetupPlayerInfo @31 UiSetupPlayerInfo@12 @31 UiSoundCallback @32 + UiSoundCallback@12 @32 UiTitleDialog @33 UiTitleDialog@4 @33 diff --git a/DiabloUI/doom.cpp b/DiabloUI/doom.cpp index 7ab14bb09..a86d85863 100644 --- a/DiabloUI/doom.cpp +++ b/DiabloUI/doom.cpp @@ -31,7 +31,7 @@ void __fastcall Doom_GetSetWndText(HWND hWnd, int msg, int nFont, int a4) v5 = hWnd; if ( msg ) { - Doom_AllocAndSetBMP(hWnd, 1521); + Doom_AllocAndSetBMP(hWnd, msg, 1521); Doom_GetWindowROP3(v5, v4); artfont_SetArtFont(nFont); Doom_PrintStrWithSpin(v4, a4); @@ -93,18 +93,18 @@ void __fastcall Doom_PrintStrWithSpin(HWND hWnd, BOOL a2) } // ref: 0x10006719 -void __fastcall Doom_AllocAndSetBMP(HWND hWnd, int bmp_flags) +void __fastcall Doom_AllocAndSetBMP(HWND hWnd, int a2, int bmp_flags) { - DWORD *v3; // esi + DWORD *v4; // esi struct tagRECT Rect; // [esp+8h] [ebp-10h] - GetClientRect(hWnd, &Rect); - v3 = local_AllocWndLongData(); - v3[1] = Rect.right; - v3[2] = Rect.bottom; - *v3 = (DWORD)SMemAlloc(Rect.right * Rect.bottom, "C:\\Src\\Diablo\\DiabloUI\\Doom.cpp", 139, 0); - SetWindowLongA(hWnd, -21, (LONG)v3); - SDlgSetBitmapI(hWnd, 0, &nullcharacter, -1, bmp_flags, (void *)*v3, 0, v3[1], v3[2], -1); + GetClientRect((HWND)a2, &Rect); + v4 = local_AllocWndLongData(); + v4[1] = Rect.right; + v4[2] = Rect.bottom; + *v4 = (DWORD)SMemAlloc(Rect.right * Rect.bottom, "C:\\Src\\Diablo\\DiabloUI\\Doom.cpp", 139, 0); + SetWindowLongA((HWND)a2, -21, (LONG)v4); + SDlgSetBitmapI((HWND)a2, 0, &nullcharacter, -1, bmp_flags, (void *)*v4, 0, v4[1], v4[2], -1); } // ref: 0x1000678A @@ -198,7 +198,7 @@ void __fastcall Doom_GetSetWndTxt3(HWND hWnd, int msg, int nFont) v4 = hWnd; if ( msg ) { - Doom_AllocAndSetBMP(hWnd, 1); + Doom_AllocAndSetBMP(hWnd, msg, 1); Doom_GetWindowROP3(v4, v3); artfont_SetArtFont(nFont); v5 = GetWindowLongA(v3, -16); @@ -306,7 +306,7 @@ void __fastcall Doom_GetSetWndTxt5(HWND hWnd, int msg, int nFont) v3 = (HWND)msg; if ( msg ) { - Doom_AllocAndSetBMP(hWnd, 1); + Doom_AllocAndSetBMP(hWnd, msg, 1); Doom_GetWindowROP3(hWnd, v3); artfont_SetArtFont(nFont); Doom_PrintTextMsg403(v3); diff --git a/DiabloUI/entname.cpp b/DiabloUI/entname.cpp index 40671b119..64ce32348 100644 --- a/DiabloUI/entname.cpp +++ b/DiabloUI/entname.cpp @@ -1,6 +1,6 @@ // ref: 0x10006F7C -int __stdcall EntName_10006F7C(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam) { return 0; } -/* { +LRESULT __stdcall EntName_WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) +{ int v4; // edx HWND v5; // eax HWND v6; // eax @@ -10,22 +10,22 @@ int __stdcall EntName_10006F7C(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam v4 = 2; if ( Msg == 2 ) { - EntName_1000709E(hDlg); - return SDlgDefDialogProc(hDlg, Msg, wParam, lParam); + EntName_DelEntNameMsgs(hWnd); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); } if ( Msg <= 0x103 ) - return SDlgDefDialogProc(hDlg, Msg, wParam, lParam); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); if ( Msg <= 0x105 ) { v9 = (HWND)SDrawGetFrameWindow(); SendMessageA(v9, Msg, wParam, lParam); - return SDlgDefDialogProc(hDlg, Msg, wParam, lParam); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); } switch ( Msg ) { case 0x110u: - dword_10029864 = (LPSTR)lParam; - EntName_100070DB(hDlg); + entname_charname = (char *)lParam; + EntName_LoadFocusChkName(hWnd); return 0; case 0x111u: if ( (unsigned short)wParam != 1 ) @@ -33,135 +33,115 @@ int __stdcall EntName_10006F7C(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam if ( (unsigned short)wParam != 2 ) { if ( (unsigned short)wParam == 1065 ) - EntName_100071ED(hDlg, wParam, lParam); - return SDlgDefDialogProc(hDlg, Msg, wParam, lParam); + EntName_GetMessageName(hWnd, wParam, lParam); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); } goto LABEL_11; } goto LABEL_18; case 0x113u: v7 = GetFocus(); - Focus_100075DC(hDlg, v7); + Focus_DoBlitSpinIncFrame(hWnd, v7); return 0; } if ( Msg != 513 ) - return SDlgDefDialogProc(hDlg, Msg, wParam, lParam); - v5 = GetDlgItem(hDlg, 1056); - if ( local_10007C3B(hDlg, v5, (unsigned short)lParam, (unsigned int)lParam >> 16) ) + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); + v5 = GetDlgItem(hWnd, 1056); + if ( local_GetBottomRect(hWnd, v5, (unsigned short)lParam, (unsigned int)lParam >> 16) ) { LABEL_18: v4 = 1; goto LABEL_11; } - v6 = GetDlgItem(hDlg, 1054); - if ( local_10007C3B(hDlg, v6, (unsigned short)lParam, (unsigned int)lParam >> 16) ) + v6 = GetDlgItem(hWnd, 1054); + if ( local_GetBottomRect(hWnd, v6, (unsigned short)lParam, (unsigned int)lParam >> 16) ) { v4 = 2; LABEL_11: - EntName_100071AC(hDlg, v4); + EntName_SetCharName(hWnd, v4); } - return SDlgDefDialogProc(hDlg, Msg, wParam, lParam); -} */ -// 1001037C: using guessed type int __stdcall SDlgDefDialogProc(_DWORD, _DWORD, _DWORD, _DWORD); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); +} // 10010382: using guessed type _DWORD __stdcall SDrawGetFrameWindow(); // ref: 0x1000709E -HWND UNKCALL EntName_1000709E(HWND hDlg) { return 0; } -/* { - HWND v1; // esi +void __fastcall EntName_DelEntNameMsgs(HWND hWnd) +{ HWND v2; // eax - v1 = hDlg; - Focus_100076C3(); - Doom_10006C53(v1, (int *)&unk_10022B48); - Doom_10006C53(v1, (int *)&unk_10022B3C); - Doom_10006C53(v1, (int *)&unk_10022B34); - v2 = GetParent(v1); - return SelHero_1000BA7B(v2, 0); -} */ + Focus_DeleteSpinners(); + Doom_DeleteFreeProcs(hWnd, entname_msgtbl3); + Doom_DeleteFreeProcs(hWnd, entname_msgtbl2); + Doom_DeleteFreeProcs(hWnd, entname_msgtbl1); + v2 = GetParent(hWnd); + SelHero_SetStringWithMsg(v2, 0); +} // ref: 0x100070DB -int UNKCALL EntName_100070DB(HWND hWnd) { return 0; } -/* { - HWND v1; // esi +void __fastcall EntName_LoadFocusChkName(HWND hWnd) +{ HWND v2; // edi LONG v3; // eax HWND v4; // ebx - int result; // eax - CHAR Buffer; // [esp+Ch] [ebp-20h] + char Buffer[32]; // [esp+Ch] [ebp-20h] - v1 = hWnd; v2 = GetParent(hWnd); - if ( SelHero_1000B7CA() == 1 ) - LoadStringA(hInstance, 0x20u, &Buffer, 31); + if ( SelHero_GetHeroIsGood() == 1 ) + LoadStringA(ghUiInst, 0x20u, Buffer, 31); else - LoadStringA(hInstance, 0x1Fu, &Buffer, 31); - SelHero_1000BA7B(v2, &Buffer); + LoadStringA(ghUiInst, 0x1Fu, Buffer, 31); + SelHero_SetStringWithMsg(v2, Buffer); v3 = GetWindowLongA(v2, -21); - SetWindowLongA(v1, -21, v3); - Doom_100068AB(v1, (int *)&unk_10022B34, 5); - Doom_1000658C(v1, (int *)&unk_10022B3C, 4, 0); - Doom_10006AB8(v1, (int *)&unk_10022B48, 2); - Focus_10007719("ui_art\\focus.pcx"); - SDlgSetTimer(v1, 1, 55, 0); - v4 = GetDlgItem(v1, 1065); + SetWindowLongA(hWnd, -21, v3); + Doom_ParseWndProc3(hWnd, entname_msgtbl1, 5); + Doom_ParseWndProcs(hWnd, entname_msgtbl2, 4, 0); + Doom_ParseWndProc5(hWnd, entname_msgtbl3, 2); + Focus_LoadSpinner("ui_art\\focus.pcx"); + SDlgSetTimer((int)hWnd, 1, 55, 0); + v4 = GetDlgItem(hWnd, 1065); SendMessageA(v4, 0x401u, 0xFu, 0); - result = SelHero_1000B7CA(); - if ( result == 1 ) - result = SendMessageA(v4, 0x404u, 0, (LPARAM)" ,<>%&\\\"?*#/"); - return result; -} */ -// 10010412: using guessed type int __stdcall SDlgSetTimer(_DWORD, _DWORD, _DWORD, _DWORD); + if ( SelHero_GetHeroIsGood() == 1 ) + SendMessageA(v4, 0x404u, 0, (LPARAM)" ,<>%&\\\"?*#/"); +} // ref: 0x100071AC -int __fastcall EntName_100071AC(HWND hDlg, int a2) { return 0; } -/* { - int v2; // edi - HWND v3; // esi - CHAR *v4; // ST08_4 +void __fastcall EntName_SetCharName(HWND hWnd, int a2) +{ + char *v4; // ST08_4 HWND v5; // eax - v2 = a2; - v3 = hDlg; - TitleSnd_1001031F(); - SDlgKillTimer(v3, 1); - v4 = dword_10029864; - v5 = GetDlgItem(v3, 1065); + TitleSnd_PlaySelectSound(); + SDlgKillTimer((int)hWnd, 1); + v4 = entname_charname; + v5 = GetDlgItem(hWnd, 1065); GetWindowTextA(v5, v4, 16); - dword_10029864[15] = 0; - return SDlgEndDialog(v3, v2); -} */ -// 10010376: using guessed type int __stdcall SDlgEndDialog(_DWORD, _DWORD); -// 10010418: using guessed type int __stdcall SDlgKillTimer(_DWORD, _DWORD); + entname_charname[15] = 0; + SDlgEndDialog(hWnd, (HANDLE)a2); +} // ref: 0x100071ED -void __fastcall EntName_100071ED(HWND hWnd, unsigned int a2, int a3) { return; } -/* { - int v3; // edx - HWND v4; // esi +void __fastcall EntName_GetMessageName(HWND hWnd, unsigned int a2, int a3) +{ + unsigned int v3; // edx HWND v5; // eax v3 = (a2 >> 16) - 1; - v4 = hWnd; if ( v3 ) { if ( v3 == 2 ) - Doom_10006C08(hWnd, (int *)&unk_10022B48, 2); + Doom_ParseWndProc6(hWnd, entname_msgtbl3, 2); } else { v5 = GetFocus(); - Focus_100075DC(v4, v5); + Focus_DoBlitSpinIncFrame(hWnd, v5); } -} */ +} // ref: 0x10007220 -signed int EntName_10007220() { return 0; } -/* { - signed int result; // eax - - result = 2139095040; - dword_10029860 = 2139095040; - return result; -} */ -// 10029860: using guessed type int dword_10029860; +void __cdecl EntName_cpp_init() +{ + EntName_cpp_float = EntName_cpp_float_value; +} +// 1001F424: using guessed type int EntName_cpp_float_value; +// 10029860: using guessed type int EntName_cpp_float; diff --git a/DiabloUI/local.cpp b/DiabloUI/local.cpp index 38f746e43..f7cf21262 100644 --- a/DiabloUI/local.cpp +++ b/DiabloUI/local.cpp @@ -492,14 +492,12 @@ void __cdecl local_LoadArtCursor() gpCursorArt2 = (BYTE *)SMemAlloc(dwHeight * dwWidth, "C:\\Src\\Diablo\\DiabloUI\\local.cpp", 554, 0); if ( SBmpLoadImage("ui_art\\cursor.pcx", 0, gpCursorArt, dwHeight * dwWidth, 0, 0, 0) ) { - gdwCursWidth = dwWidth; - gdwCursHeight = dwHeight; + gdwCursData[0] = dwWidth; + gdwCursData[1] = dwHeight; local_InitArtCursor(); } } } -// 10029CC0: using guessed type int gdwCursWidth; -// 10029CC4: using guessed type int gdwCursHeight; // ref: 0x10008062 void __cdecl local_InitArtCursor() @@ -515,7 +513,7 @@ void __cdecl local_InitArtCursor() { if ( gpCursorArt ) { - for ( i = 0; i < gdwCursWidth * gdwCursHeight; ++i ) + for ( i = 0; i < gdwCursData[0] * gdwCursData[1]; ++i ) { v3 = *v1++; if ( v3 ) @@ -527,8 +525,6 @@ void __cdecl local_InitArtCursor() } } } -// 10029CC0: using guessed type int gdwCursWidth; -// 10029CC4: using guessed type int gdwCursHeight; // ref: 0x100080AD void __cdecl local_FreeArtCursor() @@ -550,10 +546,9 @@ void __cdecl local_SetCursorArt() { if ( !gpCursorArt ) local_LoadArtCursor(); - SDlgSetSystemCursor(gpCursorArt2, gpCursorArt, &gdwCursWidth, 32512); + SDlgSetSystemCursor(gpCursorArt2, gpCursorArt, (int *)gdwCursData, 32512); } // 1001044E: using guessed type int __stdcall SDlgSetSystemCursor(_DWORD, _DWORD, _DWORD, _DWORD); -// 10029CC0: using guessed type int gdwCursWidth; // ref: 0x1000811B void __cdecl local_SetCursorDefault() diff --git a/DiabloUI/mainmenu.cpp b/DiabloUI/mainmenu.cpp index ab042291d..1fb42bf31 100644 --- a/DiabloUI/mainmenu.cpp +++ b/DiabloUI/mainmenu.cpp @@ -1,43 +1,38 @@ // ref: 0x10008164 -signed int MainMenu_10008164() { return 0; } -/* { - signed int result; // eax - - result = 2139095040; - dword_1002A0D4 = 2139095040; - return result; -} */ -// 1002A0D4: using guessed type int dword_1002A0D4; +void __cdecl MainMenu_cpp_init() +{ + mainmenu_cpp_float = mainmenu_cpp_float_value; +} +// 1001F434: using guessed type int mainmenu_cpp_float_value; +// 1002A0D4: using guessed type int mainmenu_cpp_float; // ref: 0x1000816F -int __stdcall UiMainMenuDialog(char *name, int *a2, void *fnSound, int a4) { return 0; } -/* { +BOOL __stdcall UiMainMenuDialog(char *name, int *pdwResult, void (__stdcall *fnSound)(char *file), int a4) +{ int v4; // eax int v5; // esi - dword_1002A118 = a4; - TitleSnd_10010306((void *)a3); - artfont_10001159(); - byte_1002A0D8 = 0; - if ( a1 ) - strncpy((char *)&byte_1002A0D8, a1, 0x40u); - v4 = SDrawGetFrameWindow(); - v5 = SDlgDialogBoxParam(hInstance, "MAINMENU_DIALOG", v4, MainMenu_100081E3, 0); + menu_item_timer = a4; + TitleSnd_SetSoundFunction(fnSound); + artfont_LoadAllFonts(); + menu_version_str[0] = 0; + if ( name ) + strncpy(menu_version_str, name, 0x40u); + v4 = (int)SDrawGetFrameWindow(); + v5 = SDlgDialogBoxParam(ghUiInst, "MAINMENU_DIALOG", v4, MainMenu_WndProc, 0); if ( v5 == 5 ) - artfont_100010C8(); - if ( a2 ) - *(_DWORD *)a2 = v5; + artfont_FreeAllFonts(); + if ( pdwResult ) + *pdwResult = v5; return 1; -} */ -// 10010370: using guessed type int __stdcall SDlgDialogBoxParam(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); +} // 10010382: using guessed type _DWORD __stdcall SDrawGetFrameWindow(); -// 1002A118: using guessed type int dword_1002A118; +// 1002A118: using guessed type int menu_item_timer; // ref: 0x100081E3 -int __stdcall MainMenu_100081E3(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { return 0; } -/* { +LRESULT __stdcall MainMenu_WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) +{ HWND v5; // eax - int v6; // [esp+0h] [ebp-Ch] if ( Msg <= 0x113 ) { @@ -45,7 +40,7 @@ int __stdcall MainMenu_100081E3(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lPara { if ( Msg == 2 ) { - MainMenu_10008354(hWnd); + MainMenu_KillAndFreeMenu(hWnd); } else if ( Msg > 0x103 ) { @@ -58,37 +53,37 @@ int __stdcall MainMenu_100081E3(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lPara { if ( Msg == 272 ) { - MainMenu_100083A8(hWnd); + MainMenu_LoadMenuGFX(hWnd); PostMessageA(hWnd, 0x7E8u, 0, 0); return 1; } if ( Msg == 273 ) { - MainMenu_10008391(hWnd); + MainMenu_SetMenuTimer(hWnd); switch ( HIWORD(wParam) ) { case 7: - Focus_100075B7(hWnd, (HWND)lParam); + Focus_GetAndBlitSpin(hWnd, lParam); break; case 6: - Focus_10007458((void *)lParam); - Focus_100075DC(hWnd, (HWND)lParam); + Focus_CheckPlayMove(lParam); + Focus_DoBlitSpinIncFrame(hWnd, (HWND)lParam); break; case 0: - MainMenu_100084FA(hWnd, (unsigned short)wParam); + MainMenu_CheckWParamFocus(hWnd, (unsigned short)wParam); break; } } } } - return SDlgDefDialogProc(hWnd, Msg, wParam, lParam); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); } - if ( wParam == 3 && !DiabloUI_10005C2A() ) + if ( wParam == 3 && !DiabloUI_GetSpawned() ) { - if ( dword_10029728 ) - MainMenu_1000845A((int)hWnd, 6, 0); + if ( app_is_active ) + MainMenu_DoOptions(hWnd, 6, 0); else - MainMenu_10008391(hWnd); + MainMenu_SetMenuTimer(hWnd); } return 0; } @@ -97,156 +92,139 @@ int __stdcall MainMenu_100081E3(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lPara if ( Msg <= 0x202 ) goto LABEL_34; if ( Msg <= 0x203 ) - return SDlgDefDialogProc(hWnd, Msg, wParam, lParam); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); if ( Msg <= 0x205 ) { LABEL_34: - MainMenu_10008391(hWnd); - return SDlgDefDialogProc(hWnd, Msg, wParam, lParam); + MainMenu_SetMenuTimer(hWnd); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); } if ( Msg == 2024 ) { - if ( !Fade_1000739F() ) - Fade_100073FD(hWnd, v6); + if ( !Fade_CheckRange5() ) + Fade_SetFadeTimer((int)hWnd); return 0; } } - return SDlgDefDialogProc(hWnd, Msg, wParam, lParam); -} */ -// 1001037C: using guessed type int __stdcall SDlgDefDialogProc(_DWORD, _DWORD, _DWORD, _DWORD); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); +} // 10010382: using guessed type _DWORD __stdcall SDrawGetFrameWindow(); -// 10029728: using guessed type int dword_10029728; +// 10029728: using guessed type int app_is_active; // ref: 0x10008354 -void UNKCALL MainMenu_10008354(HWND hDlg) { return; } -/* { - HWND v1; // esi - _DWORD *v2; // eax - - v1 = hDlg; - Title_100100E7(hDlg); - Focus_10007818(v1); - Doom_10006C53(v1, (int *)&unk_10022BE8); - Doom_10006C53(v1, (int *)&unk_10022BE0); - v2 = (_DWORD *)GetWindowLongA(v1, -21); - local_10007F72(v2); - return local_1000811B(); -} */ +void __fastcall MainMenu_KillAndFreeMenu(HWND hWnd) +{ + void **v2; // eax + + Title_KillTitleTimer(hWnd); + Focus_KillFocusTimer(hWnd); + Doom_DeleteFreeProcs(hWnd, menumsgs_5options); + Doom_DeleteFreeProcs(hWnd, menumsgs_1option); + v2 = (void **)GetWindowLongA(hWnd, -21); + local_FreeMemPtr(v2); + local_SetCursorDefault(); +} // ref: 0x10008391 -int UNKCALL MainMenu_10008391(void *arg) { return 0; } -/* { - return SDlgSetTimer(arg, 3, 1000 * dword_1002A118, 0); -} */ -// 10010412: using guessed type int __stdcall SDlgSetTimer(_DWORD, _DWORD, _DWORD, _DWORD); -// 1002A118: using guessed type int dword_1002A118; +void __fastcall MainMenu_SetMenuTimer(HWND hWnd) +{ + SDlgSetTimer((int)hWnd, 3, 1000 * menu_item_timer, 0); +} +// 1002A118: using guessed type int menu_item_timer; // ref: 0x100083A8 -void UNKCALL MainMenu_100083A8(HWND hWnd) { return; } -/* { - HWND v1; // esi - int v2; // eax - int *v3; // edi +void __fastcall MainMenu_LoadMenuGFX(HWND hWnd) +{ + DWORD *v2; // eax MAPDST bool v4; // zf const char *v5; // eax HWND v6; // eax - HWND v7; // ST1C_4 - HWND v9; // [esp+0h] [ebp-8h] - v1 = hWnd; - v2 = local_10007F46(); - v3 = (int *)v2; + v2 = local_AllocWndLongData(); if ( v2 ) { - SetWindowLongA(v1, -21, v2); - v4 = DiabloUI_10005C2A() == 0; + SetWindowLongA(hWnd, -21, (LONG)v2); + v4 = DiabloUI_GetSpawned() == 0; v5 = "ui_art\\swmmenu.pcx"; if ( v4 ) v5 = "ui_art\\mainmenu.pcx"; - local_10007944((int)v1, 0, &byte_10029448, -1, 1, (int)v5, v3, v3 + 1, 0); - Fade_100073C5(v1, 1); + local_LoadArtWithPal(hWnd, 0, &nullcharacter, -1, 1, v5, (BYTE **)v2, v2 + 1, 0); + Fade_NoInputAndArt(hWnd, 1); } - v6 = GetDlgItem(v1, 1042); - SetWindowTextA(v6, &byte_1002A0D8); - Doom_100068AB(v1, (int *)&unk_10022BE0, 1); - Doom_1000658C(v1, (int *)&unk_10022BE8, 6, 1); - Focus_100077E9((int)v1, "ui_art\\focus42.pcx", v9); - Title_1001009E(v1, (int)"ui_art\\smlogo.pcx", v7); - MainMenu_10008391(v1); - return local_10007DE9(v1, (int *)&unk_10022BE8); -} */ + v6 = GetDlgItem(hWnd, 1042); + SetWindowTextA(v6, menu_version_str); + Doom_ParseWndProc3(hWnd, menumsgs_1option, 1); + Doom_ParseWndProcs(hWnd, menumsgs_5options, 6, 1); + Focus_SetFocusTimer(hWnd, "ui_art\\focus42.pcx"); + Title_LoadImgSetTimer(hWnd, "ui_art\\smlogo.pcx"); + MainMenu_SetMenuTimer(hWnd); + local_DoUiWndProc2(hWnd, (DWORD *)menumsgs_5options); +} // ref: 0x1000845A -int __fastcall MainMenu_1000845A(int a1, int a2, int a3) { return 0; } -/* { - int v3; // esi - int v4; // edi - - v3 = a1; - v4 = a2; - SDlgKillTimer(a1, 3); - if ( DiabloUI_10005C2A() && v4 == 3 ) +void __fastcall MainMenu_DoOptions(HWND hWnd, int option, int PlaySelect) +{ + SDlgKillTimer((int)hWnd, 3); + if ( DiabloUI_GetSpawned() && option == 3 ) { - SelYesNo_1000FD77(v3, 0x46u, 1); - return SDlgSetTimer(v3, 3, 1000 * dword_1002A118, 0); + SelYesNo_SpawnErrDialog(hWnd, 70, 1); +LABEL_7: + SDlgSetTimer((int)hWnd, 3, 1000 * menu_item_timer, 0); + return; } - if ( v4 == 2 && !MainMenu_100084D5() ) + if ( option == 2 && !MainMenu_CheckEnoughMemory() ) { - SelYesNo_1000FD77(v3, 0x4Eu, 1); - return SDlgSetTimer(v3, 3, 1000 * dword_1002A118, 0); + SelYesNo_SpawnErrDialog(hWnd, 78, 1); + goto LABEL_7; } - Fade_100073B4(); - if ( a3 ) - TitleSnd_1001031F(); - Fade_100072BE(10); - return SDlgEndDialog(v3, v4); -} */ -// 10010376: using guessed type int __stdcall SDlgEndDialog(_DWORD, _DWORD); -// 10010412: using guessed type int __stdcall SDlgSetTimer(_DWORD, _DWORD, _DWORD, _DWORD); -// 10010418: using guessed type int __stdcall SDlgKillTimer(_DWORD, _DWORD); -// 1002A118: using guessed type int dword_1002A118; + Fade_Range5SetZero(); + if ( PlaySelect ) + TitleSnd_PlaySelectSound(); + Fade_UpdatePaletteRange(10); + SDlgEndDialog(hWnd, (HANDLE)option); +} +// 1002A118: using guessed type int menu_item_timer; // ref: 0x100084D5 -BOOL MainMenu_100084D5() { return 0; } -/* { +BOOL __cdecl MainMenu_CheckEnoughMemory() +{ struct _MEMORYSTATUS Buffer; // [esp+0h] [ebp-20h] Buffer.dwLength = 32; GlobalMemoryStatus(&Buffer); return Buffer.dwTotalPhys > 0xDAC000; -} */ +} // ref: 0x100084FA -LRESULT __fastcall MainMenu_100084FA(HWND hWnd, int a2) { return 0; } -/* { - HWND v2; // esi - LRESULT result; // eax - HWND v4; // eax - LONG v5; // eax - int v6; // [esp-8h] [ebp-Ch] +void __fastcall MainMenu_CheckWParamFocus(HWND hWnd, WPARAM wParam) +{ + HWND v3; // eax + LONG v4; // eax + int v5; // [esp-8h] [ebp-Ch] - v2 = hWnd; - switch ( a2 ) + switch ( wParam ) { - case 1: - v4 = GetFocus(); - v5 = GetWindowLongA(v4, -12); - return SendMessageA(v2, 0x111u, v5, 0); - case 2: - v6 = 5; - return MainMenu_1000845A((int)hWnd, v6, 1); - case 1001: - v6 = 2; - return MainMenu_1000845A((int)hWnd, v6, 1); - case 1002: - v6 = 3; - return MainMenu_1000845A((int)hWnd, v6, 1); - case 1003: - v6 = 4; - return MainMenu_1000845A((int)hWnd, v6, 1); + case 1u: + v3 = GetFocus(); + v4 = GetWindowLongA(v3, -12); + SendMessageA(hWnd, 0x111u, v4, 0); + return; + case 2u: + v5 = 5; + goto LABEL_12; + case 0x3E9u: + v5 = 2; + goto LABEL_12; + case 0x3EAu: + v5 = 3; + goto LABEL_12; + case 0x3EBu: + v5 = 4; +LABEL_12: + MainMenu_DoOptions(hWnd, v5, 1); + return; + case 0x414u: + MainMenu_DoOptions(hWnd, 1, 1); + break; } - result = a2 - 1044; - if ( a2 == 1044 ) - result = MainMenu_1000845A((int)hWnd, 1, 1); - return result; -} */ +} diff --git a/DiabloUI/okcancel.cpp b/DiabloUI/okcancel.cpp index 7c7f92cba..473313bb0 100644 --- a/DiabloUI/okcancel.cpp +++ b/DiabloUI/okcancel.cpp @@ -1,20 +1,16 @@ // ref: 0x10008F31 -int __fastcall OkCancel_10008F31(HWND hWnd, const CHAR *a2) { return 0; } -/* { - HWND v2; // ebx +BOOL __fastcall OkCancel_DrawString(HWND hWnd, char *str) +{ HDC v3; // edi void *v4; // eax int v5; // eax - int result; // eax + BOOL result; // eax LONG v7; // [esp+14h] [ebp-20h] LONG v8; // [esp+18h] [ebp-1Ch] struct tagRECT Rect; // [esp+1Ch] [ebp-18h] HGDIOBJ h; // [esp+2Ch] [ebp-8h] - LPCSTR lpchText; // [esp+30h] [ebp-4h] - lpchText = a2; - v2 = hWnd; - if ( !a2 || !*a2 ) + if ( !str || !*str ) goto LABEL_13; if ( !hWnd ) goto LABEL_14; @@ -23,16 +19,16 @@ int __fastcall OkCancel_10008F31(HWND hWnd, const CHAR *a2) { return 0; } --Rect.bottom; v7 = Rect.right; v8 = Rect.bottom; - v3 = GetDC(v2); - v4 = (void *)SendMessageA(v2, 0x31u, 0, 0); + v3 = GetDC(hWnd); + v4 = (void *)SendMessageA(hWnd, 0x31u, 0, 0); h = SelectObject(v3, v4); if ( !v3 ) goto LABEL_13; - v5 = strlen(lpchText); - DrawTextA(v3, lpchText, v5, &Rect, 0x410u); + v5 = strlen(str); + DrawTextA(v3, str, v5, &Rect, 0x410u); if ( h ) SelectObject(v3, h); - ReleaseDC(v2, v3); + ReleaseDC(hWnd, v3); if ( Rect.bottom > v8 || Rect.right > v7 ) LABEL_14: result = 1; @@ -40,22 +36,19 @@ LABEL_14: LABEL_13: result = 0; return result; -} */ +} // ref: 0x10008FEC -signed int OkCancel_10008FEC() { return 0; } -/* { - signed int result; // eax - - result = 2139095040; - dword_1002A2E4 = 2139095040; - return result; -} */ -// 1002A2E4: using guessed type int dword_1002A2E4; +void __cdecl OkCancel_cpp_init() +{ + OkCancel_cpp_float = OkCancel_cpp_float_value; +} +// 1001F440: using guessed type int OkCancel_cpp_float_value; +// 1002A2E4: using guessed type int OkCancel_cpp_float; // ref: 0x10008FF7 -HGDIOBJ __stdcall OkCancel_10008FF7(HWND a1, UINT Msg, WPARAM wParam, HWND hWnd) { return 0; } -/* { +LRESULT __stdcall OkCancel_WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) +{ HWND v5; // ecx int v6; // edx HWND v7; // eax @@ -65,33 +58,33 @@ HGDIOBJ __stdcall OkCancel_10008FF7(HWND a1, UINT Msg, WPARAM wParam, HWND hWnd) if ( Msg == 2 ) { ShowCursor(0); - OkCancel_10009117(a1); - return (HGDIOBJ)SDlgDefDialogProc(a1, Msg, wParam, hWnd); + OkCancel_FreeDlgBmp(hWnd); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); } if ( Msg <= 0x103 ) - return (HGDIOBJ)SDlgDefDialogProc(a1, Msg, wParam, hWnd); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); if ( Msg <= 0x105 ) { v9 = (HWND)SDrawGetFrameWindow(); - SendMessageA(v9, Msg, wParam, (LPARAM)hWnd); - return (HGDIOBJ)SDlgDefDialogProc(a1, Msg, wParam, hWnd); + SendMessageA(v9, Msg, wParam, lParam); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); } if ( Msg != 272 ) { if ( Msg != 273 ) { - if ( Msg == 312 && GetWindowLongA(hWnd, -12) == 1038 ) + if ( Msg == 312 && GetWindowLongA((HWND)lParam, -12) == 1038 ) { - local_10007C2E((HDC)wParam); - return GetStockObject(5); + local_SetWhiteText((HDC)wParam); + return (LRESULT)GetStockObject(5); } - return (HGDIOBJ)SDlgDefDialogProc(a1, Msg, wParam, hWnd); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); } if ( (unsigned short)wParam == 1 ) { v7 = GetFocus(); v8 = GetWindowLongA(v7, -12); - v5 = a1; + v5 = hWnd; if ( v8 == 1109 ) { v6 = 1; @@ -104,238 +97,206 @@ HGDIOBJ __stdcall OkCancel_10008FF7(HWND a1, UINT Msg, WPARAM wParam, HWND hWnd) { if ( (unsigned short)wParam == 1109 ) { - v5 = a1; + v5 = hWnd; v6 = 1; LABEL_16: - OkCancel_100092F5((int)v5, v6); + OkCancel_PlaySndEndDlg(v5, v6); } - return (HGDIOBJ)SDlgDefDialogProc(a1, Msg, wParam, hWnd); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); } - v5 = a1; + v5 = hWnd; } v6 = 2; goto LABEL_16; } ShowCursor(1); - if ( !OkCancel_10009161(a1, (int)hWnd) ) - SDlgEndDialog(a1, -16777216); - return (HGDIOBJ)1; -} */ -// 10010376: using guessed type int __stdcall SDlgEndDialog(_DWORD, _DWORD); -// 1001037C: using guessed type int __stdcall SDlgDefDialogProc(_DWORD, _DWORD, _DWORD, _DWORD); + if ( !OkCancel_LoadOkCancGFX(hWnd, (DWORD *)lParam) ) + SDlgEndDialog(hWnd, (HANDLE)0xFF000000); + return 1; +} // 10010382: using guessed type _DWORD __stdcall SDrawGetFrameWindow(); // ref: 0x10009117 -void **UNKCALL OkCancel_10009117(HWND hWnd) { return 0; } -/* { - _DWORD *result; // eax - _DWORD *v2; // esi - int v3; // eax - int v4; // eax +void __fastcall OkCancel_FreeDlgBmp(HWND hWnd) +{ + void **v1; // eax MAPDST + void *v3; // eax + void *v4; // eax - result = RemovePropA(hWnd, "DLGBMP"); - v2 = result; - if ( result ) + v1 = (void **)RemovePropA(hWnd, "DLGBMP"); + if ( v1 ) { - v3 = *result; + v3 = *v1; if ( v3 ) SMemFree(v3, "C:\\Src\\Diablo\\DiabloUI\\OkCancel.cpp", 48, 0); - v4 = v2[1]; + v4 = v1[1]; if ( v4 ) SMemFree(v4, "C:\\Src\\Diablo\\DiabloUI\\OkCancel.cpp", 50, 0); - result = (_DWORD *)SMemFree(v2, "C:\\Src\\Diablo\\DiabloUI\\OkCancel.cpp", 51, 0); + SMemFree(v1, "C:\\Src\\Diablo\\DiabloUI\\OkCancel.cpp", 51, 0); } - return result; -} */ -// 10010340: using guessed type int __stdcall SMemFree(_DWORD, _DWORD, _DWORD, _DWORD); +} // ref: 0x10009161 -signed int __fastcall OkCancel_10009161(HWND a1, int a2) { return 0; } -/* { - int v2; // esi +BOOL __fastcall OkCancel_LoadOkCancGFX(HWND hWnd, DWORD *lParam) +{ bool v3; // zf HWND v4; // edi - char *v5; // edi + tagPALETTEENTRY *v5; // edi HWND v6; // eax HWND v7; // edi - HWND v8; // edi + BYTE **v8; // edi HWND v9; // eax const CHAR *v10; // ST1C_4 HWND v11; // eax HWND v12; // edi - int v14; // [esp+Ch] [ebp-20h] + int a2a; // [esp+Ch] [ebp-20h] int v15; // [esp+10h] [ebp-1Ch] int v16; // [esp+14h] [ebp-18h] - char v17; // [esp+18h] [ebp-14h] - HWND v18; // [esp+20h] [ebp-Ch] - const char *v19; // [esp+24h] [ebp-8h] - HWND hWnd; // [esp+28h] [ebp-4h] + DWORD data[2]; // [esp+18h] [ebp-14h] + BYTE **pBuffer; // [esp+20h] [ebp-Ch] + char *pszFileName; // [esp+24h] [ebp-8h] - v2 = a2; - hWnd = a1; - v14 = 1109; + a2a = 1109; v15 = 2; v16 = 0; - v18 = (HWND)SMemAlloc(8, "C:\\Src\\Diablo\\DiabloUI\\OkCancel.cpp", 110, 0); - SetPropA(hWnd, "DLGBMP", v18); - if ( *(_DWORD *)(v2 + 8) ) + pBuffer = (BYTE **)SMemAlloc(8u, "C:\\Src\\Diablo\\DiabloUI\\OkCancel.cpp", 110, 0); + SetPropA(hWnd, "DLGBMP", pBuffer); + if ( lParam[2] ) { - v3 = *(_DWORD *)(v2 + 12) == 0; - v19 = "ui_art\\lrpopup.pcx"; + v3 = lParam[3] == 0; + pszFileName = "ui_art\\lrpopup.pcx"; if ( v3 ) - v19 = "ui_art\\lpopup.pcx"; + pszFileName = "ui_art\\lpopup.pcx"; } - else if ( *(_DWORD *)(v2 + 12) ) + else if ( lParam[3] ) { - v19 = "ui_art\\srpopup.pcx"; + pszFileName = "ui_art\\srpopup.pcx"; } else { - v19 = "ui_art\\spopup.pcx"; + pszFileName = "ui_art\\spopup.pcx"; } v4 = GetParent(hWnd); if ( (HWND)SDrawGetFrameWindow() == v4 ) { - local_10007944((int)hWnd, 0, &byte_10029448, -1, 1, (int)v19, (int *)v18, 0, 1); - v5 = local_10007895(0); - SDrawUpdatePalette(0, 10, v5, 0); - SDrawUpdatePalette(112, 144, v5 + 448, 1); + local_LoadArtWithPal(hWnd, 0, &nullcharacter, -1, 1, pszFileName, pBuffer, 0, 1); + v5 = local_GetArtPalEntry(0); + SDrawUpdatePalette(0, 0xAu, v5, 0); + SDrawUpdatePalette(0x70u, 0x90u, v5 + 112, 1); } else { v6 = GetParent(hWnd); - local_10007944((int)hWnd, (int)v6, "Popup", -1, 1, (int)v19, (int *)v18, 0, 1); + local_LoadArtWithPal(hWnd, (int)v6, "Popup", -1, 1, pszFileName, pBuffer, 0, 1); } v7 = GetParent(hWnd); if ( (HWND)SDrawGetFrameWindow() == v7 ) - Fade_100073EF(hWnd); - v8 = v18 + 1; - local_100078BE((int)"ui_art\\but_sml.pcx", (int *)v18 + 1, &v17); - local_10007B1B(hWnd, &v14, *(_DWORD *)v8, &v17); + Fade_SetInputWindow(hWnd); + v8 = pBuffer + 1; + local_LoadArtImage("ui_art\\but_sml.pcx", pBuffer + 1, data); + local_FitButtonDlg(hWnd, &a2a, *v8, data); v9 = GetDlgItem(hWnd, 1026); - v10 = *(const CHAR **)(v2 + 4); - v18 = v9; + v10 = (const CHAR *)lParam[1]; + pBuffer = (BYTE **)v9; SetWindowTextA(v9, v10); - if ( *(_DWORD *)(v2 + 16) && OkCancel_10008F31(v18, *(const CHAR **)(v2 + 4)) ) + if ( lParam[4] && OkCancel_DrawString((HWND)pBuffer, (char *)lParam[1]) ) return 0; - if ( *(_DWORD *)v2 ) + if ( *lParam ) { v11 = GetDlgItem(hWnd, 1038); v12 = v11; - if ( *(_DWORD *)(v2 + 16) && OkCancel_10008F31(v11, *(const CHAR **)v2) ) + if ( lParam[4] && OkCancel_DrawString(v11, (char *)*lParam) ) return 0; if ( v12 ) - SetWindowTextA(v12, *(LPCSTR *)v2); + SetWindowTextA(v12, (LPCSTR)*lParam); } return 1; -} */ -// 10010364: using guessed type int __stdcall SMemAlloc(_DWORD, _DWORD, _DWORD, _DWORD); +} // 10010382: using guessed type _DWORD __stdcall SDrawGetFrameWindow(); -// 100103FA: using guessed type int __stdcall SDrawUpdatePalette(_DWORD, _DWORD, _DWORD, _DWORD); // ref: 0x100092F5 -int __fastcall OkCancel_100092F5(int a1, int a2) { return 0; } -/* { - int v2; // esi - int v3; // edi - - v2 = a2; - v3 = a1; - TitleSnd_1001031F(); - return SDlgEndDialog(v3, v2); -} */ -// 10010376: using guessed type int __stdcall SDlgEndDialog(_DWORD, _DWORD); +void __fastcall OkCancel_PlaySndEndDlg(HWND hWnd, int a2) +{ + TitleSnd_PlaySelectSound(); + SDlgEndDialog(hWnd, (HANDLE)a2); +} // ref: 0x1000930A -int __fastcall OkCancel_1000930A(int a1, int a2, int a3) { return 0; } -/* { - int v4; // [esp+0h] [ebp-14h] - int v5; // [esp+4h] [ebp-10h] - int v6; // [esp+8h] [ebp-Ch] - int v7; // [esp+Ch] [ebp-8h] - int v8; // [esp+10h] [ebp-4h] +void __fastcall OkCancel_DoOkDialog(HWND hWnd, char *str, int a3) +{ + int a5[5]; // [esp+0h] [ebp-14h] - v5 = a2; - v6 = 0; - v4 = 0; - v8 = 0; - v7 = a3; - return SDlgDialogBoxParam(hInstance, "OK_DIALOG", a1, OkCancel_10008FF7, &v4); -} */ -// 10010370: using guessed type int __stdcall SDlgDialogBoxParam(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); + a5[1] = (int)str; + a5[2] = 0; + a5[0] = 0; + a5[4] = 0; + a5[3] = a3; + SDlgDialogBoxParam(ghUiInst, "OK_DIALOG", (int)hWnd, OkCancel_WndProc, (int)a5); +} // ref: 0x10009342 -void __cdecl UiMessageBoxCallback() { return; } -//LPCSTR __stdcall UiMessageBoxCallback(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType) { return 0; } -/* { +void __stdcall UiMessageBoxCallback(HWND hWnd, char *lpText, LPCSTR lpCaption, UINT uType) +{ int v4; // eax - bool v5; // sf + unsigned char v5; // sf unsigned char v6; // of size_t v7; // eax - CHAR *v8; // eax + char *v8; // eax int v9; // ecx - LPCSTR v11; // [esp+0h] [ebp-24h] - LPCSTR v12; // [esp+4h] [ebp-20h] - int v13; // [esp+8h] [ebp-1Ch] - BOOL v14; // [esp+Ch] [ebp-18h] - int v15; // [esp+10h] [ebp-14h] - int v16; // [esp+14h] [ebp-10h] - LPCSTR v17; // [esp+18h] [ebp-Ch] - const char *v18; // [esp+1Ch] [ebp-8h] - LPCSTR v19; // [esp+20h] [ebp-4h] + int a5[5]; // [esp+0h] [ebp-24h] + int v11; // [esp+14h] [ebp-10h] + void *location; // [esp+18h] [ebp-Ch] + char *szDialog; // [esp+1Ch] [ebp-8h] + char *v14; // [esp+20h] [ebp-4h] - v11 = lpCaption; - v12 = lpText; - v18 = "OK_DIALOG"; - v15 = 1; + a5[0] = (int)lpCaption; + a5[1] = (int)lpText; + szDialog = "OK_DIALOG"; + a5[4] = 1; if ( uType & 0xF ) - v18 = "OKCANCEL_DIALOG"; - v14 = (uType & 0xF0) == 16 || (uType & 0xF0) == 48; + szDialog = "OKCANCEL_DIALOG"; + a5[3] = (uType & 0xF0) == 16 || (uType & 0xF0) == 48; v4 = 0; - v13 = 0; + a5[2] = 0; while ( 1 ) { - v19 = (LPCSTR)SDlgDialogBoxParam(hInstance, &v18[32 * v4], hWnd, OkCancel_10008FF7, &v11); - if ( v19 != (LPCSTR)-16777216 ) + v14 = (char *)SDlgDialogBoxParam(ghUiInst, &szDialog[32 * v4], (int)hWnd, OkCancel_WndProc, (int)a5); + if ( v14 != (char *)0xFF000000 ) break; - v4 = v13 + 1; - v6 = __OFSUB__(v13 + 1, 2); - v5 = v13++ - 1 < 0; + v4 = a5[2] + 1; + v6 = __OFSUB__(a5[2] + 1, 2); + v5 = a5[2]++ - 1 < 0; if ( !(v5 ^ v6) ) { v7 = strlen(lpText); - v8 = (CHAR *)SMemAlloc(v7 + 256, "C:\\Src\\Diablo\\DiabloUI\\OkCancel.cpp", 392, 0); - v16 = 0; - v17 = v8; - v19 = lpText; + v8 = (char *)SMemAlloc(v7 + 256, "C:\\Src\\Diablo\\DiabloUI\\OkCancel.cpp", 392, 0); + v11 = 0; /* check */ + location = v8; + v14 = lpText; if ( *lpText ) { - v9 = v16; + v9 = v11; do { - if ( *v19 <= 32 ) + if ( *v14 <= 32 ) v9 = 0; - *v8++ = *v19; + *v8++ = *v14; if ( ++v9 > 18 ) { *v8++ = 10; v9 = 0; } - ++v19; + ++v14; } - while ( *v19 ); + while ( *v14 ); } *v8 = 0; - v12 = v17; - v19 = (LPCSTR)SDlgDialogBoxParam(hInstance, v18, hWnd, OkCancel_10008FF7, &v11); - SMemFree(v17, "C:\\Src\\Diablo\\DiabloUI\\OkCancel.cpp", 416, 0); - if ( v19 == (LPCSTR)-16777216 ) - return (LPCSTR)MessageBoxA(hWnd, lpText, lpCaption, uType); - return v19; + a5[1] = (int)location; + v14 = (char *)SDlgDialogBoxParam(ghUiInst, szDialog, (int)hWnd, OkCancel_WndProc, (int)a5); + SMemFree(location, "C:\\Src\\Diablo\\DiabloUI\\OkCancel.cpp", 416, 0); + if ( v14 == (char *)0xFF000000 ) + MessageBoxA(hWnd, lpText, lpCaption, uType); + return; } } - return v19; -} */ -// 10010340: using guessed type int __stdcall SMemFree(_DWORD, _DWORD, _DWORD, _DWORD); -// 10010364: using guessed type int __stdcall SMemAlloc(_DWORD, _DWORD, _DWORD, _DWORD); -// 10010370: using guessed type int __stdcall SDlgDialogBoxParam(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); +} diff --git a/DiabloUI/sbar.cpp b/DiabloUI/sbar.cpp index 9af62631d..d3d9a5ccf 100644 --- a/DiabloUI/sbar.cpp +++ b/DiabloUI/sbar.cpp @@ -1,49 +1,42 @@ // ref: 0x100099B5 -signed int Sbar_100099B5() { return 0; } -/* { - signed int result; // eax - - result = 2139095040; - dword_1002A338 = 2139095040; - return result; -} */ -// 1002A338: using guessed type int dword_1002A338; +void __cdecl Sbar_cpp_init() +{ + Sbar_cpp_float = Sbar_cpp_float_value; +} +// 1001F448: using guessed type int Sbar_cpp_float_value; +// 1002A338: using guessed type int Sbar_cpp_float; // ref: 0x100099C0 -int UNKCALL Sbar_100099C0(HWND hWnd) { return 0; } -/* { - _DWORD *v1; // eax +BOOL __fastcall Sbar_CheckIfNextHero(HWND hWnd) +{ + _uiheroinfo *v1; // eax - v1 = (_DWORD *)GetWindowLongA(hWnd, -21); - if ( !v1 || !*v1 ) + v1 = (_uiheroinfo *)GetWindowLongA(hWnd, -21); + if ( !v1 || !v1->next ) return 0; - *v1 = 0; + v1->next = 0; return 1; -} */ +} // ref: 0x100099DC -int __fastcall Sbar_100099DC(HWND hWnd, LONG a2, int a3) { return 0; } -/* { - HWND v3; // esi +int __fastcall Sbar_NumScrollLines(HWND hWnd, int width, int height) +{ _DWORD *v4; // eax _DWORD *v5; // esi int result; // eax signed int v7; // ecx LONG v8; // ebx LONG v9; // edi - signed int v10; // [esp-4h] [ebp-1Ch] + int v10; // [esp-4h] [ebp-1Ch] struct tagPOINT Point; // [esp+Ch] [ebp-Ch] - HWND hWnda; // [esp+14h] [ebp-4h] - v3 = hWnd; - hWnda = hWnd; - Point.x = a2; - Point.y = a3; + Point.x = width; + Point.y = height; if ( !hWnd ) return 0; if ( !IsWindowVisible(hWnd) ) return 0; - v4 = (_DWORD *)GetWindowLongA(v3, -21); + v4 = (_DWORD *)GetWindowLongA(hWnd, -21); v5 = v4; if ( !v4 ) return 0; @@ -53,7 +46,7 @@ int __fastcall Sbar_100099DC(HWND hWnd, LONG a2, int a3) { return 0; } else v8 = v4[14] * (v4[3] - v4[9] - 44) / (v7 - 1) + 22; v9 = v8 + v4[9]; - ScreenToClient(hWnda, &Point); + ScreenToClient(hWnd, &Point); if ( Point.y >= 22 ) { if ( Point.y >= v8 ) @@ -90,187 +83,163 @@ int __fastcall Sbar_100099DC(HWND hWnd, LONG a2, int a3) { return 0; } *v5 = 1; } return result; -} */ +} // ref: 0x10009A99 -HWND __fastcall Sbar_10009A99(HWND hDlg, int nIDDlgItem, int a3, int a4) { return 0; } -/* { - HWND result; // eax - HWND v5; // esi - bool v6; // zf - int v7; // eax - int v8; // [esp+Ch] [ebp-24h] - int v9; // [esp+10h] [ebp-20h] - int v10; // [esp+14h] [ebp-1Ch] - int v11; // [esp+18h] [ebp-18h] - int v12; // [esp+1Ch] [ebp-14h] - int v13; // [esp+20h] [ebp-10h] - int v14; // [esp+24h] [ebp-Ch] - int v15; // [esp+28h] [ebp-8h] - HWND hWnd; // [esp+2Ch] [ebp-4h] +void __fastcall Sbar_DrawScrollBar(HWND hWnd, int nIDDlgItem, int width, int height) +{ + HWND v4; // eax + LONG v5; // eax MAPDST + bool v7; // zf + int v8; // eax + tagRECT DstRect; // [esp+Ch] [ebp-24h] + tagRECT SrcBuffer; // [esp+1Ch] [ebp-14h] + HWND hWnda; // [esp+2Ch] [ebp-4h] - result = GetDlgItem(hDlg, nIDDlgItem); - hWnd = result; - if ( result ) + v4 = GetDlgItem(hWnd, nIDDlgItem); + hWnda = v4; + if ( v4 ) { - result = (HWND)GetWindowLongA(result, -21); - v5 = result; - if ( result ) + v5 = GetWindowLongA(v4, -21); + if ( v5 ) { - if ( *((_DWORD *)result + 1) ) + if ( *(_DWORD *)(v5 + 4) ) { - v6 = *((_DWORD *)result + 4) == 0; - *((_DWORD *)result + 13) = a3; - result = (HWND)a4; - *((_DWORD *)v5 + 14) = a4; - if ( !v6 ) + v7 = *(_DWORD *)(v5 + 16) == 0; + *(_DWORD *)(v5 + 52) = width; + *(_DWORD *)(v5 + 56) = height; + if ( !v7 ) { - v12 = 0; - v8 = 0; - v13 = 0; - v9 = 0; - v10 = *((_DWORD *)v5 + 2) - 1; - v11 = *((_DWORD *)v5 + 3) - 1; - v14 = *((_DWORD *)v5 + 2) - 1; - v15 = *((_DWORD *)v5 + 6) - 1; - result = (HWND)SBltROP3Tiled( - *((_DWORD *)v5 + 1), - &v8, - *((_DWORD *)v5 + 2), - *((_DWORD *)v5 + 4), - &v12, - *((_DWORD *)v5 + 5), - 0, - 0, - 0, - 13369376); - if ( *((_DWORD *)v5 + 7) ) + SrcBuffer.left = 0; + DstRect.left = 0; + SrcBuffer.top = 0; + DstRect.top = 0; + DstRect.right = *(_DWORD *)(v5 + 8) - 1; + DstRect.bottom = *(_DWORD *)(v5 + 12) - 1; + SrcBuffer.right = *(_DWORD *)(v5 + 8) - 1; + SrcBuffer.bottom = *(_DWORD *)(v5 + 24) - 1; + SBltROP3Tiled( + *(void **)(v5 + 4), + &DstRect, + *(POINT **)(v5 + 8), + *(_DWORD *)(v5 + 16), + &SrcBuffer, + *(RECT **)(v5 + 20), + 0, + 0, + 0, + 0xCC0020u); + if ( *(_DWORD *)(v5 + 28) ) { - if ( a3 <= 1 ) - v7 = 22; + if ( width <= 1 ) + v8 = 22; else - v7 = a4 * (*((_DWORD *)v5 + 3) - *((_DWORD *)v5 + 9) - 44) / (a3 - 1) + 22; + v8 = height * (*(_DWORD *)(v5 + 12) - *(_DWORD *)(v5 + 36) - 44) / (width - 1) + 22; SBltROP3( - v7 * *((_DWORD *)v5 + 2) + *((_DWORD *)v5 + 1) + 3, - *((_DWORD *)v5 + 7), + (void *)(v8 * *(_DWORD *)(v5 + 8) + *(_DWORD *)(v5 + 4) + 3), + *(void **)(v5 + 28), 18, - *((_DWORD *)v5 + 9), - *((_DWORD *)v5 + 2), - *((_DWORD *)v5 + 8), + *(_DWORD *)(v5 + 36), + *(_DWORD *)(v5 + 8), + *(_DWORD *)(v5 + 32), 0, - 13369376); + 0xCC0020u); SBltROP3( - *((_DWORD *)v5 + 1), - *((_DWORD *)v5 + 10) + 22 * (~*(_BYTE *)v5 & 1) * *((_DWORD *)v5 + 11), - *((_DWORD *)v5 + 2), + *(void **)(v5 + 4), + (void *)(*(_DWORD *)(v5 + 40) + 22 * (~*(_BYTE *)v5 & 1) * *(_DWORD *)(v5 + 44)), + *(_DWORD *)(v5 + 8), 22, - *((_DWORD *)v5 + 2), - *((_DWORD *)v5 + 11), + *(_DWORD *)(v5 + 8), + *(_DWORD *)(v5 + 44), 0, - 13369376); + 0xCC0020u); SBltROP3( - *((_DWORD *)v5 + 1) + *((_DWORD *)v5 + 2) * (*((_DWORD *)v5 + 3) - 22), - *((_DWORD *)v5 + 10) + 22 * ((~*(_BYTE *)v5 & 4 | 8u) >> 2) * *((_DWORD *)v5 + 11), - *((_DWORD *)v5 + 2), + (void *)(*(_DWORD *)(v5 + 4) + *(_DWORD *)(v5 + 8) * (*(_DWORD *)(v5 + 12) - 22)), + (void *)(*(_DWORD *)(v5 + 40) + 22 * ((~*(_BYTE *)v5 & 4 | 8u) >> 2) * *(_DWORD *)(v5 + 44)), + *(_DWORD *)(v5 + 8), 22, - *((_DWORD *)v5 + 2), - *((_DWORD *)v5 + 11), + *(_DWORD *)(v5 + 8), + *(_DWORD *)(v5 + 44), 0, - 13369376); - result = (HWND)InvalidateRect(hWnd, 0, 0); + 0xCC0020u); + InvalidateRect(hWnda, 0, 0); } } } } } - return result; -} */ -// 100103F4: using guessed type int __stdcall SBltROP3(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); -// 1001046C: using guessed type int __stdcall SBltROP3Tiled(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); +} // ref: 0x10009BF1 -HWND __fastcall Sbar_10009BF1(HWND hDlg, int nIDDlgItem) { return 0; } -/* { - HWND result; // eax - HWND v3; // esi +void __fastcall Sbar_LoadScrBarGFX(HWND hWnd, int nIDDlgItem) +{ + DWORD *v2; // eax MAPDST + void *v4; // eax struct tagRECT Rect; // [esp+Ch] [ebp-14h] - HWND hWnd; // [esp+1Ch] [ebp-4h] + HWND hWnda; // [esp+1Ch] [ebp-4h] - result = GetDlgItem(hDlg, nIDDlgItem); - hWnd = result; - if ( result ) + hWnda = GetDlgItem(hWnd, nIDDlgItem); + if ( hWnda ) { - result = (HWND)SMemAlloc(60, "C:\\Src\\Diablo\\DiabloUI\\Sbar.cpp", 221, 0); - v3 = result; - if ( result ) + v2 = (DWORD *)SMemAlloc(0x3Cu, "C:\\Src\\Diablo\\DiabloUI\\Sbar.cpp", 221, 0); + if ( v2 ) { - SetWindowLongA(hWnd, -21, (LONG)result); - *(_DWORD *)v3 = 0; - GetClientRect(hWnd, &Rect); - *(_DWORD *)(v3 + 2) = Rect.right; - *(_DWORD *)(v3 + 3) = Rect.bottom; - result = (HWND)SMemAlloc(Rect.right * Rect.bottom, "C:\\Src\\Diablo\\DiabloUI\\Sbar.cpp", 230, 0); - *((_DWORD *)v3 + 1) = result; - if ( result ) + SetWindowLongA(hWnda, -21, (LONG)v2); + *v2 = 0; + GetClientRect(hWnda, &Rect); + v2[2] = Rect.right; + v2[3] = Rect.bottom; + v4 = SMemAlloc(Rect.right * Rect.bottom, "C:\\Src\\Diablo\\DiabloUI\\Sbar.cpp", 230, 0); + v2[1] = (DWORD)v4; + if ( v4 ) { - SDlgSetBitmapI(hWnd, 0, &byte_10029448, -1, 1, result, 0, *((_DWORD *)v3 + 2), *((_DWORD *)v3 + 3), -1); - local_100078BE((int)"ui_art\\sb_bg.pcx", (int *)v3 + 4, (_DWORD *)v3 + 5); - local_100078BE((int)"ui_art\\sb_thumb.pcx", (int *)v3 + 7, (_DWORD *)v3 + 8); - result = (HWND)local_100078BE((int)"ui_art\\sb_arrow.pcx", (int *)v3 + 10, (_DWORD *)v3 + 11); + SDlgSetBitmapI(hWnda, 0, &nullcharacter, -1, 1, v4, 0, v2[2], v2[3], -1); + local_LoadArtImage("ui_art\\sb_bg.pcx", (BYTE **)v2 + 4, v2 + 5); + local_LoadArtImage("ui_art\\sb_thumb.pcx", (BYTE **)v2 + 7, v2 + 8); + local_LoadArtImage("ui_art\\sb_arrow.pcx", (BYTE **)v2 + 10, v2 + 11); } } } - return result; -} */ -// 10010364: using guessed type int __stdcall SMemAlloc(_DWORD, _DWORD, _DWORD, _DWORD); -// 10010400: using guessed type int __stdcall SDlgSetBitmapI(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); +} // ref: 0x10009CC7 -signed int Sbar_10009CC7() { return 0; } -/* { - signed int result; // eax - - result = 2139095040; - dword_1002A344 = 2139095040; - return result; -} */ -// 1002A344: using guessed type int dword_1002A344; +void __cdecl Sbar_cpp_init2() +{ + Sbar_cpp_float2 = Sbar_cpp_float_value2; +} +// 1001F44C: using guessed type int Sbar_cpp_float_value2; +// 1002A344: using guessed type int Sbar_cpp_float2; // ref: 0x10009CD2 -HWND __fastcall Sbar_10009CD2(HWND hDlg, int nIDDlgItem) { return 0; } -/* { - HWND result; // eax - HWND v3; // ebp - HWND v4; // esi - int v5; // eax - int v6; // eax - int v7; // eax - int v8; // eax +void __fastcall Sbar_FreeScrollBar(HWND hWnd, int nIDDlgItem) +{ + HWND v2; // eax MAPDST + _DWORD *v4; // eax MAPDST + void *v6; // eax + void *v7; // eax + void *v8; // eax + void *v9; // eax - result = GetDlgItem(hDlg, nIDDlgItem); - v3 = result; - if ( result ) + v2 = GetDlgItem(hWnd, nIDDlgItem); + if ( v2 ) { - result = (HWND)GetWindowLongA(result, -21); - v4 = result; - if ( result ) + v4 = (_DWORD *)GetWindowLongA(v2, -21); + if ( v4 ) { - v5 = *((_DWORD *)result + 1); - if ( v5 ) - SMemFree(v5, "C:\\Src\\Diablo\\DiabloUI\\Sbar.cpp", 267, 0); - v6 = *((_DWORD *)v4 + 4); + v6 = (void *)v4[1]; if ( v6 ) - SMemFree(v6, "C:\\Src\\Diablo\\DiabloUI\\Sbar.cpp", 269, 0); - v7 = *((_DWORD *)v4 + 7); + SMemFree(v6, "C:\\Src\\Diablo\\DiabloUI\\Sbar.cpp", 267, 0); + v7 = (void *)v4[4]; if ( v7 ) - SMemFree(v7, "C:\\Src\\Diablo\\DiabloUI\\Sbar.cpp", 271, 0); - v8 = *((_DWORD *)v4 + 10); + SMemFree(v7, "C:\\Src\\Diablo\\DiabloUI\\Sbar.cpp", 269, 0); + v8 = (void *)v4[7]; if ( v8 ) - SMemFree(v8, "C:\\Src\\Diablo\\DiabloUI\\Sbar.cpp", 273, 0); + SMemFree(v8, "C:\\Src\\Diablo\\DiabloUI\\Sbar.cpp", 271, 0); + v9 = (void *)v4[10]; + if ( v9 ) + SMemFree(v9, "C:\\Src\\Diablo\\DiabloUI\\Sbar.cpp", 273, 0); SMemFree(v4, "C:\\Src\\Diablo\\DiabloUI\\Sbar.cpp", 275, 0); - result = (HWND)SetWindowLongA(v3, -21, 0); + SetWindowLongA(v2, -21, 0); } } - return result; -} */ -// 10010340: using guessed type int __stdcall SMemFree(_DWORD, _DWORD, _DWORD, _DWORD); +} diff --git a/DiabloUI/selclass.cpp b/DiabloUI/selclass.cpp index c8c96ea75..da3d2ced9 100644 --- a/DiabloUI/selclass.cpp +++ b/DiabloUI/selclass.cpp @@ -1,28 +1,28 @@ // ref: 0x10009D66 -int __stdcall SelClass_10009D66(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam) { return 0; } -/* { +LRESULT __stdcall SelClass_WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) +{ HWND v4; // eax - LONG v5; // edx + int v5; // edx HWND v6; // eax HWND v7; // eax HWND v9; // eax if ( Msg == 2 ) { - SelClass_10009EC0(hDlg); - return SDlgDefDialogProc(hDlg, Msg, wParam, lParam); + SelClass_FreeClassMsgTbl(hWnd); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); } if ( Msg <= 0x103 ) - return SDlgDefDialogProc(hDlg, Msg, wParam, lParam); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); if ( Msg <= 0x105 ) { v9 = (HWND)SDrawGetFrameWindow(); SendMessageA(v9, Msg, wParam, lParam); - return SDlgDefDialogProc(hDlg, Msg, wParam, lParam); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); } if ( Msg == 272 ) { - SelClass_10009EFD(hDlg); + SelClass_LoadClassFocus(hWnd); return 0; } if ( Msg != 273 ) @@ -31,163 +31,137 @@ int __stdcall SelClass_10009D66(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lPara { if ( Msg == 513 ) { - v4 = GetDlgItem(hDlg, 1056); - if ( local_10007C3B(hDlg, v4, (unsigned short)lParam, (unsigned int)lParam >> 16) ) + v4 = GetDlgItem(hWnd, 1056); + if ( local_GetBottomRect(hWnd, v4, (unsigned short)lParam, (unsigned int)lParam >> 16) ) { v5 = 1; LABEL_19: - SelClass_1000A00D((int)hDlg, v5); - return SDlgDefDialogProc(hDlg, Msg, wParam, lParam); + SelClass_CheckClassSpawn(hWnd, v5); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); } - v6 = GetDlgItem(hDlg, 1054); - if ( local_10007C3B(hDlg, v6, (unsigned short)lParam, (unsigned int)lParam >> 16) ) + v6 = GetDlgItem(hWnd, 1054); + if ( local_GetBottomRect(hWnd, v6, (unsigned short)lParam, (unsigned int)lParam >> 16) ) { LABEL_21: v5 = 2; goto LABEL_19; } } - return SDlgDefDialogProc(hDlg, Msg, wParam, lParam); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); } v7 = GetFocus(); - Focus_100075DC(hDlg, v7); + Focus_DoBlitSpinIncFrame(hWnd, v7); return 0; } if ( HIWORD(wParam) == 7 ) { - Focus_100075B7(hDlg, (HWND)lParam); + Focus_GetAndBlitSpin(hWnd, lParam); } else { if ( HIWORD(wParam) != 6 ) { v5 = 1; - if ( wParam == 327681 ) + if ( HIWORD(wParam) == 5 || (_WORD)wParam == 1 ) goto LABEL_19; if ( (_WORD)wParam != 2 ) - return SDlgDefDialogProc(hDlg, Msg, wParam, lParam); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); goto LABEL_21; } - Focus_10007458((void *)lParam); - Focus_100075DC(hDlg, (HWND)lParam); - SelClass_10009FA2(hDlg, (unsigned short)wParam); + Focus_CheckPlayMove(lParam); + Focus_DoBlitSpinIncFrame(hWnd, (HWND)lParam); + SelClass_SetDefaultStats(hWnd, (unsigned short)wParam); } - return SDlgDefDialogProc(hDlg, Msg, wParam, lParam); -} */ -// 1001037C: using guessed type int __stdcall SDlgDefDialogProc(_DWORD, _DWORD, _DWORD, _DWORD); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); +} // 10010382: using guessed type _DWORD __stdcall SDrawGetFrameWindow(); // ref: 0x10009EC0 -HWND UNKCALL SelClass_10009EC0(HWND hDlg) { return 0; } -/* { - HWND v1; // esi +void __fastcall SelClass_FreeClassMsgTbl(HWND hWnd) +{ HWND v2; // eax - v1 = hDlg; - Focus_100076C3(); - Doom_10006C53(v1, (int *)&unk_10022EC8); - Doom_10006C53(v1, (int *)&unk_10022EBC); - Doom_10006C53(v1, (int *)&unk_10022EB4); - v2 = GetParent(v1); - return SelHero_1000BA7B(v2, 0); -} */ + 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 -int UNKCALL SelClass_10009EFD(HWND hWnd) { return 0; } -/* { +void __fastcall SelClass_LoadClassFocus(HWND hWnd) +{ HWND v1; // edi HWND v2; // esi LONG v3; // eax - CHAR Buffer; // [esp+8h] [ebp-20h] + char Buffer[32]; // [esp+8h] [ebp-20h] v1 = hWnd; v2 = GetParent(hWnd); - if ( SelHero_1000B7CA() == 1 ) - LoadStringA(hInstance, 0x20u, &Buffer, 31); + if ( SelHero_GetHeroIsGood() == 1 ) + LoadStringA(ghUiInst, 0x20u, Buffer, 31); else - LoadStringA(hInstance, 0x1Fu, &Buffer, 31); - SelHero_1000BA7B(v2, &Buffer); + LoadStringA(ghUiInst, 0x1Fu, Buffer, 31); + SelHero_SetStringWithMsg(v2, Buffer); v3 = GetWindowLongA(v2, -21); SetWindowLongA(v1, -21, v3); - local_10007CB5(v1, (int *)&unk_10022EC8); - Doom_100068AB(v1, (int *)&unk_10022EB4, 5); - Doom_1000658C(v1, (int *)&unk_10022EBC, 4, 0); - Doom_1000658C(v1, (int *)&unk_10022EC8, 2, 1); - Focus_10007719("ui_art\\focus.pcx"); - return SDlgSetTimer(v1, 1, 55, 0); -} */ -// 10010412: using guessed type int __stdcall SDlgSetTimer(_DWORD, _DWORD, _DWORD, _DWORD); + local_DoUiWndProc(v1, (DWORD *)selclass_msgtbl3); + Doom_ParseWndProc3(v1, selclass_msgtbl1, 5); + Doom_ParseWndProcs(v1, selclass_msgtbl2, 4, 0); + Doom_ParseWndProcs(v1, selclass_msgtbl3, 2, 1); + Focus_LoadSpinner("ui_art\\focus.pcx"); + SDlgSetTimer((int)v1, 1, 55, 0); +} // ref: 0x10009FA2 -int __fastcall SelClass_10009FA2(HWND hWnd, int a2) { return 0; } -/* { +void __fastcall SelClass_SetDefaultStats(HWND hWnd, int a2) +{ char v2; // bl - HWND v3; // esi HWND v4; // eax - char v6; // [esp+8h] [ebp-34h] - short v7; // [esp+1Ch] [ebp-20h] - char v8; // [esp+1Eh] [ebp-1Eh] - short v9; // [esp+20h] [ebp-1Ch] - short v10; // [esp+22h] [ebp-1Ah] - short v11; // [esp+24h] [ebp-18h] - short v12; // [esp+26h] [ebp-16h] - short v13; // [esp+34h] [ebp-8h] - short v14; // [esp+36h] [ebp-6h] - short v15; // [esp+38h] [ebp-4h] - short v16; // [esp+3Ah] [ebp-2h] + _uiheroinfo pInfo; // [esp+8h] [ebp-34h] + _uidefaultstats a2a; // [esp+34h] [ebp-8h] v2 = a2; - v3 = hWnd; - SelHero_1000B7D0(a2 - 1062, (int)&v13); - memset(&v6, 0, 0x2Cu); - v9 = v13; - v10 = v14; - v11 = v15; - v7 = 1; - v8 = v2 - 38; - v12 = v16; - v4 = GetParent(v3); - return SelHero_1000B905(v4, (int)&v6); -} */ + 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 -int __fastcall SelClass_1000A00D(int a1, LONG a2) { return 0; } -/* { - LONG v2; // esi - int v3; // ebp +void __fastcall SelClass_CheckClassSpawn(HWND hWnd, int a2) +{ HWND v4; // eax - HWND v6; // eax + HWND v5; // eax - v2 = a2; - v3 = a1; - if ( DiabloUI_10005C2A() ) + if ( DiabloUI_GetSpawned() && a2 == 1 && (v4 = GetFocus(), GetWindowLongA(v4, -12) != 1062) ) { - if ( v2 == 1 ) - { - v4 = GetFocus(); - if ( GetWindowLongA(v4, -12) != 1062 ) - return SelYesNo_1000FD77(v3, 0x45u, 0); - } + SelYesNo_SpawnErrDialog(hWnd, 69, 0); } - TitleSnd_1001031F(); - SDlgKillTimer(v3, 1); - if ( v2 == 1 ) + else { - v6 = GetFocus(); - v2 = GetWindowLongA(v6, -12); + TitleSnd_PlaySelectSound(); + SDlgKillTimer((int)hWnd, 1); + if ( a2 == 1 ) + { + v5 = GetFocus(); + a2 = GetWindowLongA(v5, -12); + } + SDlgEndDialog(hWnd, (HANDLE)a2); } - return SDlgEndDialog(v3, v2); -} */ -// 10010376: using guessed type int __stdcall SDlgEndDialog(_DWORD, _DWORD); -// 10010418: using guessed type int __stdcall SDlgKillTimer(_DWORD, _DWORD); +} // ref: 0x1000A077 -signed int SelClass_1000A077() { return 0; } -/* { - signed int result; // eax - - result = 2139095040; - dword_1002A348 = 2139095040; - return result; -} */ -// 1002A348: using guessed type int dword_1002A348; +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; diff --git a/DiabloUI/selhero.cpp b/DiabloUI/selhero.cpp index 2250407a1..a9cb92dc6 100644 --- a/DiabloUI/selhero.cpp +++ b/DiabloUI/selhero.cpp @@ -1,85 +1,71 @@ // ref: 0x1000B7A0 -int SelHero_1000B7A0() { return 0; } -/* { - return dword_1002A458; -} */ -// 1002A458: using guessed type int dword_1002A458; +_uiheroinfo *__cdecl SelHero_GetCurrentHeroInfo() +{ + return sgpHeroInfo; +} // ref: 0x1000B7A6 -int SelHero_1000B7A6() { return 0; } -/* { - return dword_1002A428; -} */ -// 1002A428: using guessed type int dword_1002A428; +int __cdecl SelHero_GetNumHeroesLeft() +{ + return selhero_numheroesleft; +} +// 1002A428: using guessed type int selhero_numheroesleft; // ref: 0x1000B7AC -void UNKCALL SelHero_1000B7AC(void *arg) { return; } -/* { - dword_1002A420 = (int)arg; -} */ -// 1002A420: using guessed type int dword_1002A420; +void __fastcall SelHero_SetHeroDifficulty(int diff) +{ + selhero_difficulty = diff; +} +// 1002A420: using guessed type int selhero_difficulty; // ref: 0x1000B7B3 -char *SelHero_1000B7B3() { return 0; } -/* { - return &byte_1002A440; -} */ +char *__cdecl SelHero_GetHeroNameStr() +{ + return selhero_heronamestr; +} // ref: 0x1000B7B9 -void *SelHero_1000B7B9() { return 0; } -/* { - return SMemAlloc(44, "C:\\Src\\Diablo\\DiabloUI\\SelHero.cpp", 123, 0); -} */ -// 10010364: using guessed type int __stdcall SMemAlloc(_DWORD, _DWORD, _DWORD, _DWORD); +_uiheroinfo *__cdecl SelHero_AllocHeroInfo() +{ + return (_uiheroinfo *)SMemAlloc(0x2Cu, "C:\\Src\\Diablo\\DiabloUI\\SelHero.cpp", 123, 0); +} // ref: 0x1000B7CA -int SelHero_1000B7CA() { return 0; } -/* { - return dword_1002A48C; -} */ -// 1002A48C: using guessed type int dword_1002A48C; +int __cdecl SelHero_GetHeroIsGood() +{ + return selhero_is_good; +} // ref: 0x1000B7D0 -int __fastcall SelHero_1000B7D0(int a1, int a2) { return 0; } -/* { - return dword_1002A410(a1, a2); -} */ -// 1002A410: using guessed type int (__stdcall *dword_1002A410)(_DWORD, _DWORD); +int __fastcall SelHero_SetClassStats(int heroclass, _uidefaultstats *pStats) +{ + return selhero_fnstats(heroclass, pStats); +} // ref: 0x1000B7DE -signed int SelHero_1000B7DE() { return 0; } -/* { - signed int result; // eax - - result = 2139095040; - dword_1002A414 = 2139095040; - return result; -} */ -// 1002A414: using guessed type int dword_1002A414; +void __cdecl SelHero_cpp_init() +{ + SelHero_cpp_float = SelHero_cpp_float_value; +} +// 1001F460: using guessed type int SelHero_cpp_float_value; +// 1002A414: using guessed type int SelHero_cpp_float; // ref: 0x1000B899 -int __fastcall SelHero_1000B899(HWND hDlg, int a2) { return 0; } -/* { - int v2; // ebx +void __fastcall SelHero_SetStaticBMP(HWND hWnd, int adjust_size) +{ HWND v3; // esi struct tagRECT Rect; // [esp+8h] [ebp-10h] - v2 = a2; - v3 = GetDlgItem(hDlg, 1040); + v3 = GetDlgItem(hWnd, 1040); InvalidateRect(v3, 0, 0); GetClientRect(v3, &Rect); - local_10007A68(&Rect, 0, v2 * Rect.bottom); - return SDlgSetBitmapI(v3, 0, "Static", -1, 1, dword_1002A498, &Rect, dword_1002A418, dword_1002A41C, -1); -} */ -// 10010400: using guessed type int __stdcall SDlgSetBitmapI(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD); -// 1002A418: using guessed type int dword_1002A418; -// 1002A41C: using guessed type int dword_1002A41C; -// 1002A498: using guessed type int dword_1002A498; + local_AdjustRectSize(&Rect, 0, adjust_size * Rect.bottom); + SDlgSetBitmapI(v3, 0, "Static", -1, 1, selhero_buffer, (int)&Rect, selhero_sizedata[0], selhero_sizedata[1], -1); +} // ref: 0x1000B905 -int __fastcall SelHero_1000B905(HWND hDlg, int a2) { return 0; } -/* { - HWND v2; // ebp +void __fastcall SelHero_PrintHeroInfo(HWND hWnd, _uiheroinfo *pInfo) +{ HWND v3; // eax int v4; // eax HWND v5; // eax @@ -90,255 +76,218 @@ int __fastcall SelHero_1000B905(HWND hDlg, int a2) { return 0; } int v10; // eax HWND v11; // eax int v12; // eax - int result; // eax - int v14; // esi - HWND v15; // edi - HWND v16; // ebp - int v17; // eax - HWND hWnd; // ST1C_4 - int v19; // eax - HWND v20; // ST1C_4 - int v21; // eax - HWND v22; // ST1C_4 - int v23; // eax - HWND v24; // ST1C_4 - int v25; // eax - HWND hDlga; // [esp+Ch] [ebp-4h] - - v14 = a2; - v15 = hDlg; - hDlga = hDlg; - if ( *(_WORD *)(a2 + 20) ) + HWND v15; // ebp + int v16; // eax + HWND v17; // ST1C_4 + int v18; // eax + HWND v19; // ST1C_4 + int v20; // eax + HWND v21; // ST1C_4 + int v22; // eax + HWND v23; // ST1C_4 + int v24; // eax + + if ( pInfo->level ) { - dword_1002A424 = *(_DWORD *)(a2 + 36); - strcpy(&byte_1002A440, (const char *)(a2 + 4)); - v16 = GetDlgItem(v15, 1014); - wsprintfA(byte_1002A42C, "%d", *(unsigned short *)(v14 + 20)); - v17 = GetWindowLongA(v16, -21); - local_10007FA4(v17, byte_1002A42C); - hWnd = GetDlgItem(hDlga, 1018); - wsprintfA(byte_1002A490, "%d", *(unsigned short *)(v14 + 24)); - v19 = GetWindowLongA(hWnd, -21); - local_10007FA4(v19, byte_1002A490); - v20 = GetDlgItem(hDlga, 1017); - wsprintfA(byte_1002A43C, "%d", *(unsigned short *)(v14 + 26)); - v21 = GetWindowLongA(v20, -21); - local_10007FA4(v21, byte_1002A43C); - v22 = GetDlgItem(hDlga, 1016); - wsprintfA(byte_1002A454, "%d", *(unsigned short *)(v14 + 28)); - v23 = GetWindowLongA(v22, -21); - local_10007FA4(v23, byte_1002A454); - v24 = GetDlgItem(hDlga, 1015); - wsprintfA(byte_1002A494, "%d", *(unsigned short *)(v14 + 30)); - v25 = GetWindowLongA(v24, -21); - local_10007FA4(v25, byte_1002A494); - SelHero_1000B899(hDlga, *(unsigned char *)(v14 + 22)); - result = Doom_10006A13(hDlga, (int *)&unk_10023020, 1); + selhero_hero_hassaved = pInfo->hassaved; + strcpy(selhero_heronamestr, pInfo->name); + v15 = GetDlgItem(hWnd, 1014); + wsprintfA(selhero_herolevel, "%d", pInfo->level); + v16 = GetWindowLongA(v15, -21); + local_SetWndLongStr(v16, selhero_herolevel); + v17 = GetDlgItem(hWnd, 1018); + wsprintfA(selhero_herostr, "%d", pInfo->strength); + v18 = GetWindowLongA(v17, -21); + local_SetWndLongStr(v18, selhero_herostr); + v19 = GetDlgItem(hWnd, 1017); + wsprintfA(selhero_heromag, "%d", pInfo->magic); + v20 = GetWindowLongA(v19, -21); + local_SetWndLongStr(v20, selhero_heromag); + v21 = GetDlgItem(hWnd, 1016); + wsprintfA(selhero_herodex, "%d", pInfo->dexterity); + v22 = GetWindowLongA(v21, -21); + local_SetWndLongStr(v22, selhero_herodex); + v23 = GetDlgItem(hWnd, 1015); + wsprintfA(selhero_herovit, "%d", pInfo->vitality); + v24 = GetWindowLongA(v23, -21); + local_SetWndLongStr(v24, selhero_herovit); + SelHero_SetStaticBMP(hWnd, pInfo->heroclass); + Doom_ParseWndProc4(hWnd, selhero_msgtbl_info, 1); } else { - dword_1002A424 = 0; - byte_1002A440 = 0; - v2 = hDlg; - v3 = GetDlgItem(hDlg, 1014); + selhero_hero_hassaved = 0; + selhero_heronamestr[0] = 0; + v3 = GetDlgItem(hWnd, 1014); v4 = GetWindowLongA(v3, -21); - local_10007FA4(v4, "--"); - v5 = GetDlgItem(v2, 1018); + local_SetWndLongStr(v4, "--"); + v5 = GetDlgItem(hWnd, 1018); v6 = GetWindowLongA(v5, -21); - local_10007FA4(v6, "--"); - v7 = GetDlgItem(v2, 1017); + local_SetWndLongStr(v6, "--"); + v7 = GetDlgItem(hWnd, 1017); v8 = GetWindowLongA(v7, -21); - local_10007FA4(v8, "--"); - v9 = GetDlgItem(v2, 1016); + local_SetWndLongStr(v8, "--"); + v9 = GetDlgItem(hWnd, 1016); v10 = GetWindowLongA(v9, -21); - local_10007FA4(v10, "--"); - v11 = GetDlgItem(v2, 1015); + local_SetWndLongStr(v10, "--"); + v11 = GetDlgItem(hWnd, 1015); v12 = GetWindowLongA(v11, -21); - local_10007FA4(v12, "--"); - SelHero_1000B899(v2, 3); - result = Doom_10006A13(v2, (int *)&unk_10023020, 1); + local_SetWndLongStr(v12, "--"); + SelHero_SetStaticBMP(hWnd, 3); + Doom_ParseWndProc4(hWnd, selhero_msgtbl_info, 1); } - return result; -} */ -// 1002A424: using guessed type int dword_1002A424; +} +// 1002A424: using guessed type int selhero_hero_hassaved; // ref: 0x1000BA7B -HWND __fastcall SelHero_1000BA7B(HWND hDlg, const char *a2) { return 0; } -/* { - HWND v2; // esi - const char *v3; // edi - HWND result; // eax +void __fastcall SelHero_SetStringWithMsg(HWND hWnd, const char *str) +{ + HWND v4; // eax int v5; // eax - v2 = hDlg; - v3 = a2; - result = GetDlgItem(hDlg, 1038); - if ( result ) + v4 = GetDlgItem(hWnd, 1038); + if ( v4 ) { - v5 = GetWindowLongA(result, -21); - local_10007FA4(v5, v3); - result = (HWND)Doom_10006A13(v2, (int *)&unk_10023000, 5); + v5 = GetWindowLongA(v4, -21); + local_SetWndLongStr(v5, str); + Doom_ParseWndProc4(hWnd, selhero_msgtbl_string, 5); } - return result; -} */ +} // ref: 0x1000BAB4 -char *UNKCALL SelHero_1000BAB4(char *arg) { return 0; } -/* { +BOOL __fastcall SelHero_IsNameReserved(char *name) +{ UINT v1; // esi - char *result; // eax - CHAR SrcStr; // [esp+4h] [ebp-90h] - CHAR Buffer; // [esp+84h] [ebp-10h] + BOOL result; // eax + char SrcStr[128]; // [esp+4h] [ebp-90h] + char Buffer[16]; // [esp+84h] [ebp-10h] - strcpy(&SrcStr, arg); - _strlwr(&SrcStr); + strcpy(SrcStr, name); + _strlwr(SrcStr); v1 = 19; while ( 1 ) { - LoadStringA(hInstance, v1, &Buffer, 15); - SelHero_1000BB26(&Buffer); - _strlwr(&Buffer); - result = strstr(&SrcStr, &Buffer); + LoadStringA(ghUiInst, v1, Buffer, 15); + SelHero_SetLastNamePos(Buffer); + _strlwr(Buffer); + result = (BOOL)strstr(SrcStr, Buffer); if ( result ) break; if ( (signed int)++v1 > 26 ) return result; } - return (char *)1; -} */ + return 1; +} // ref: 0x1000BB26 -char __fastcall SelHero_1000BB26(char *a1) { return 0; } -/* { - char result; // al - - while ( 1 ) - { - result = *a1; - if ( !*a1 ) - break; - *a1++ = result - 1; - } - return result; -} */ +void __fastcall SelHero_SetLastNamePos(char *name) +{ + while ( *name ) + --*name++; +} // ref: 0x1000BB34 -int __fastcall SelHero_1000BB34(char *a1, char *a2) { return 0; } -/* { - char *v2; // esi - char *v3; // edi +BOOL __fastcall SelHero_NameHasChar(char *name, char *illegalchrs) +{ char v5; // al - v2 = a1; - v3 = a2; - if ( strpbrk(a1, ",<>%&\\\"?*#/:") || strpbrk(v2, v3) ) + if ( strpbrk(name, ",<>%&\\\"?*#/:") || strpbrk(name, illegalchrs) ) return 1; while ( 1 ) { - v5 = *v2; - if ( !*v2 ) + v5 = *name; + if ( !*name ) break; if ( (unsigned char)v5 < 0x20u || (unsigned char)v5 > 0x7Eu && (unsigned char)v5 < 0xC0u ) return 1; - ++v2; + ++name; } return 0; -} */ +} // ref: 0x1000BB75 -int __stdcall UiValidPlayerName(char *arg) { return 0; } -/* { - char *v1; // esi - signed int v2; // edi +BOOL __fastcall UiValidPlayerName(char *name) +{ + BOOL v2; // edi - v1 = arg; v2 = 1; - if ( !strlen(arg) ) + if ( !strlen(name) ) v2 = 0; - if ( dword_1002A48C == 1 && (SelHero_1000BAB4(v1) || SelHero_1000BB34(v1, " ")) ) + if ( selhero_is_good == 1 && (SelHero_IsNameReserved(name) || SelHero_NameHasChar(name, " ")) ) v2 = 0; return v2; -} */ -// 1002A48C: using guessed type int dword_1002A48C; +} // ref: 0x1000BBB4 -int __stdcall UiSelHeroMultDialog(void *fninfo, void *fncreate, void *fnremove, void *fnstats, int *a5, int *a6, char *name) { return 0; } -/* { +BOOL __stdcall UiSelHeroMultDialog(BOOL (__stdcall *fninfo)(BOOL (__stdcall *fninfofunc)(_uiheroinfo *)), BOOL (__stdcall *fncreate)(_uiheroinfo *), BOOL (__stdcall *fnremove)(_uiheroinfo *), BOOL (__stdcall *fnstats)(int, _uidefaultstats *), int *dlgresult, int *a6, char *name) +{ int v7; // eax int v8; // eax - artfont_10001159(); - dword_1002A438 = (int (__stdcall *)(_DWORD))a1; - dword_1002A450 = (int (UNKCALL *)(_DWORD, _DWORD))a2; - dword_1002A434 = (int (__stdcall *)(_DWORD))a3; - dword_1002A410 = (int (__stdcall *)(_DWORD, _DWORD))a4; - dword_1002A458 = 0; - dword_1002A48C = 1; - dword_1002A45C = 0; - v7 = SDrawGetFrameWindow(); - v8 = SDlgDialogBoxParam(hInstance, "SELHERO_DIALOG", v7, SelHero_1000BC46, 0); - if ( a5 ) - *(_DWORD *)a5 = v8; - if ( a7 ) - strcpy(a7, &byte_1002A440); + artfont_LoadAllFonts(); + selhero_fninfo = fninfo; + selhero_fncreate = fncreate; + selhero_fnremove = fnremove; + selhero_fnstats = fnstats; + sgpHeroInfo = 0; + selhero_is_good = 1; + selhero_is_created = 0; + v7 = (int)SDrawGetFrameWindow(); + v8 = SDlgDialogBoxParam(ghUiInst, "SELHERO_DIALOG", v7, SelHero_WndProc, 0); + if ( dlgresult ) + *dlgresult = v8; + if ( name ) + strcpy(name, selhero_heronamestr); if ( a6 ) - *(_DWORD *)a6 = dword_1002A45C; + *a6 = selhero_is_created; return 1; -} */ -// 10010370: using guessed type int __stdcall SDlgDialogBoxParam(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); +} // 10010382: using guessed type _DWORD __stdcall SDrawGetFrameWindow(); -// 1002A410: using guessed type int (__stdcall *dword_1002A410)(_DWORD, _DWORD); -// 1002A434: using guessed type int (__stdcall *dword_1002A434)(_DWORD); -// 1002A438: using guessed type int (__stdcall *dword_1002A438)(_DWORD); -// 1002A450: using guessed type int (UNKCALL *dword_1002A450)(_DWORD, _DWORD); -// 1002A458: using guessed type int dword_1002A458; -// 1002A45C: using guessed type int dword_1002A45C; -// 1002A48C: using guessed type int dword_1002A48C; +// 1002A45C: using guessed type int selhero_is_created; // ref: 0x1000BC46 -int __stdcall SelHero_1000BC46(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { return 0; } -/* { +LRESULT __stdcall SelHero_WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) +{ HWND v4; // eax int v6; // edx HWND v7; // ecx signed int v8; // [esp-4h] [ebp-8h] - int v9; // [esp+0h] [ebp-4h] if ( Msg > 0xBD2 ) { switch ( Msg ) { case 0xBD3u: - SelHero_1000C21A(hWnd); + SelHero_DoSelLoad(hWnd); return 0; case 0xBD4u: - SelHero_1000C269(hWnd); + SelHero_DoSelDiff(hWnd); return 0; case 0xBD5u: v7 = hWnd; - if ( dword_1002A48C != 1 ) + if ( selhero_is_good != 1 ) { v8 = 2; goto LABEL_30; } break; case 0xBD6u: - strcpy(&byte_1002A440, byte_1002A464); + strcpy(selhero_heronamestr, heroinfo_create.name); v6 = 1; v7 = hWnd; - if ( dword_1002A48C != 1 ) + if ( selhero_is_good != 1 ) { - dword_1002A420 = 0; + selhero_difficulty = 0; LABEL_31: - SelHero_1000C3E2((int)v7, v6); + SelHero_DoHeroEndFade(v7, v6); return 0; } break; case 0xBD7u: - SelHero_1000BDAD(hWnd); + SelHero_DoStuffWithStrings(hWnd); return 0; default: - return SDlgDefDialogProc(hWnd, Msg, wParam, lParam); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); } v8 = 3; LABEL_30: @@ -347,117 +296,110 @@ LABEL_30: } if ( Msg == 3026 ) { - SelHero_1000C09B(hWnd); + SelHero_DoEnterName(hWnd); return 0; } if ( Msg == 2 ) { - SelHero_1000C364(hWnd); - return SDlgDefDialogProc(hWnd, Msg, wParam, lParam); + SelHero_DeleteAndFree(hWnd); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); } if ( Msg <= 0x103 ) - return SDlgDefDialogProc(hWnd, Msg, wParam, lParam); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); if ( Msg <= 0x105 ) { v4 = (HWND)SDrawGetFrameWindow(); SendMessageA(v4, Msg, wParam, lParam); - return SDlgDefDialogProc(hWnd, Msg, wParam, lParam); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); } switch ( Msg ) { case 0x110u: - SelHero_1000C3FF(hWnd); + SelHero_LoadHeroGFX(hWnd); PostMessageA(hWnd, 0x7E8u, 0, 0); return 0; case 0x7E8u: - if ( !Fade_1000739F() ) - Fade_100073FD(hWnd, v9); + if ( !Fade_CheckRange5() ) + Fade_SetFadeTimer((int)hWnd); return 0; case 0xBD0u: - SelHero_1000BF6D(hWnd); + SelHero_DoHeroSelList(hWnd); return 0; } if ( Msg != 3025 ) - return SDlgDefDialogProc(hWnd, Msg, wParam, lParam); - SelHero_1000BFF9(hWnd); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); + SelHero_DoHeroSelClass(hWnd); return 0; -} */ -// 1001037C: using guessed type int __stdcall SDlgDefDialogProc(_DWORD, _DWORD, _DWORD, _DWORD); +} // 10010382: using guessed type _DWORD __stdcall SDrawGetFrameWindow(); -// 1002A420: using guessed type int dword_1002A420; -// 1002A48C: using guessed type int dword_1002A48C; +// 1002A420: using guessed type int selhero_difficulty; // ref: 0x1000BDAD -BOOL UNKCALL SelHero_1000BDAD(HWND arg) { return 0; } -/* { - const char *v1; // eax - CHAR v3; // [esp+Ch] [ebp-B4h] - CHAR v4; // [esp+5Ch] [ebp-64h] - CHAR Buffer; // [esp+9Ch] [ebp-24h] - HWND hWnd; // [esp+BCh] [ebp-4h] - - hWnd = arg; - if ( SelHero_1000B7CA() == 1 ) - LoadStringA(hInstance, 0x23u, &Buffer, 31); +void __fastcall SelHero_DoStuffWithStrings(HWND hWnd) +{ + _uiheroinfo *v1; // eax + char dialogstr[80]; // [esp+Ch] [ebp-B4h] + char string64[64]; // [esp+5Ch] [ebp-64h] + char Buffer[32]; // [esp+9Ch] [ebp-24h] + + if ( SelHero_GetHeroIsGood() == 1 ) + LoadStringA(ghUiInst, 0x23u, Buffer, 31); else - LoadStringA(hInstance, 0x22u, &Buffer, 31); - LoadStringA(hInstance, 7u, &v4, 63); - wsprintfA(&v3, &v4, &byte_1002A440); - if ( SelYesNo_1000FA49((int)hWnd, &v3, (int)&Buffer, 1) != 2 ) + LoadStringA(ghUiInst, 0x22u, Buffer, 31); + LoadStringA(ghUiInst, 7u, string64, 63); + wsprintfA(dialogstr, string64, selhero_heronamestr); + if ( SelYesNo_YesNoDialog(hWnd, dialogstr, Buffer, 1) != 2 ) { - v1 = SelHero_1000BF4A((const char *)dword_1002A458, &byte_1002A440); + v1 = SelHero_GetHeroSlotFromName(sgpHeroInfo, selhero_heronamestr); if ( v1 ) { - if ( dword_1002A434(v1) ) + if ( selhero_fnremove(v1) ) { - dword_1002A458 = (int)SelHero_1000BEDB((int *)dword_1002A458, &byte_1002A440); - --dword_1002A428; - LoadStringA(hInstance, 0x1Eu, &v4, 15); - if ( !strcmp(&v4, (const char *)(dword_1002A458 + 4)) ) - return PostMessageA(hWnd, 0xBD1u, 0, 0); - SelHero_1000B905(hWnd, dword_1002A458); + sgpHeroInfo = SelHero_GetNextHeroFromStr(sgpHeroInfo, selhero_heronamestr); + --selhero_numheroesleft; + LoadStringA(ghUiInst, 0x1Eu, string64, 15); + if ( !strcmp(string64, sgpHeroInfo->name) ) + { + PostMessageA(hWnd, 0xBD1u, 0, 0); + return; + } + SelHero_PrintHeroInfo(hWnd, sgpHeroInfo); } else { - LoadStringA(hInstance, 0x11u, &v4, 63); - SelYesNo_1000FD39((int)hWnd, &v4, (int)&Buffer, 1); + LoadStringA(ghUiInst, 0x11u, string64, 63); + SelYesNo_SelOkDialog(hWnd, string64, Buffer, 1); } } } - return PostMessageA(hWnd, 0xBD0u, 0, 0); -} */ -// 1002A428: using guessed type int dword_1002A428; -// 1002A434: using guessed type int (__stdcall *dword_1002A434)(_DWORD); -// 1002A458: using guessed type int dword_1002A458; + PostMessageA(hWnd, 0xBD0u, 0, 0); +} +// 1002A428: using guessed type int selhero_numheroesleft; // ref: 0x1000BEDB -int *__fastcall SelHero_1000BEDB(int *a1, char *a2) { return 0; } -/* { - int *v2; // ebx - _DWORD *v3; // ebp - _DWORD *v4; // edi - int *v5; // esi - char *v7; // [esp+10h] [ebp-4h] - - v2 = a1; +_uiheroinfo *__fastcall SelHero_GetNextHeroFromStr(_uiheroinfo *pInfo, char *name) +{ + _uiheroinfo *v2; // ebx + _uiheroinfo *v3; // ebp + _uiheroinfo *v4; // edi + + v2 = pInfo; v3 = 0; v4 = 0; - v7 = a2; - v5 = a1; - if ( a1 ) + if ( pInfo ) { while ( !v4 ) { - if ( !strcmp((const char *)v5 + 4, v7) ) + if ( !strcmp(pInfo->name, name) ) { - v4 = v5; + v4 = pInfo; } else { - v3 = v5; - v5 = (int *)*v5; + v3 = pInfo; + pInfo = pInfo->next; } - if ( !v5 ) + if ( !pInfo ) { if ( !v4 ) return v2; @@ -465,88 +407,86 @@ int *__fastcall SelHero_1000BEDB(int *a1, char *a2) { return 0; } } } if ( v3 ) - *v3 = *v4; + v3->next = v4->next; else - v2 = (int *)*v4; - SelHero_1000BF33(v4); + v2 = v4->next; + SelHero_FreeSomeMemory(v4); } return v2; -} */ +} // ref: 0x1000BF33 -int UNKCALL SelHero_1000BF33(void *arg) { return 0; } -/* { - int result; // eax - - if ( arg ) - result = SMemFree(arg, "C:\\Src\\Diablo\\DiabloUI\\SelHero.cpp", 131, 0); - return result; -} */ -// 10010340: using guessed type int __stdcall SMemFree(_DWORD, _DWORD, _DWORD, _DWORD); +void __fastcall SelHero_FreeSomeMemory(void *ptr) +{ + if ( ptr ) + SMemFree(ptr, "C:\\Src\\Diablo\\DiabloUI\\SelHero.cpp", 131, 0); +} // ref: 0x1000BF4A -const char *__fastcall SelHero_1000BF4A(const char *a1, const char *a2) { return 0; } -/* { - const char *v2; // edi - const char *i; // esi +_uiheroinfo *__fastcall SelHero_GetHeroSlotFromName(_uiheroinfo *pInfo, const char *name) +{ + _uiheroinfo *i; // esi - v2 = a2; - for ( i = a1; i && _strcmpi(i + 4, v2); i = *(const char **)i ) + for ( i = pInfo; i && _strcmpi(i->name, name); i = i->next ) ; return i; -} */ +} // ref: 0x1000BF6D -int UNKCALL SelHero_1000BF6D(HWND hWnd) { return 0; } -/* { - HWND v1; // esi - int v2; // eax - int v4; // edx +void __fastcall SelHero_DoHeroSelList(HWND hWnd) +{ + BOOL v2; // eax + int v3; // edx - v1 = hWnd; - v2 = SDlgDialogBoxParam(hInstance, "SELLIST_DIALOG", hWnd, SelList_1000D774, 0); + v2 = SDlgDialogBoxParam(ghUiInst, "SELLIST_DIALOG", (int)hWnd, SelList_WndProc, 0); if ( v2 == 1 ) { - if ( !strlen(&byte_1002A440) ) - return PostMessageA(v1, 0xBD1u, 0, 0); - if ( dword_1002A48C == 1 ) - return PostMessageA(v1, 0xBD5u, 0, 0); - if ( dword_1002A424 ) - return PostMessageA(v1, 0xBD3u, 0, 0); - dword_1002A420 = 0; - v4 = 1; - return SelHero_1000C3E2((int)v1, v4); + if ( !strlen(selhero_heronamestr) ) + { + PostMessageA(hWnd, 0xBD1u, 0, 0); + return; + } + if ( selhero_is_good == 1 ) + { + PostMessageA(hWnd, 0xBD5u, 0, 0); + return; + } + if ( selhero_hero_hassaved ) + { + PostMessageA(hWnd, 0xBD3u, 0, 0); + return; + } + selhero_difficulty = 0; + v3 = 1; +LABEL_13: + SelHero_DoHeroEndFade(hWnd, v3); + return; } if ( v2 != 1006 ) { - v4 = 4; - return SelHero_1000C3E2((int)v1, v4); + v3 = 4; + goto LABEL_13; } - return PostMessageA(v1, 0xBD7u, 0, 0); -} */ -// 10010370: using guessed type int __stdcall SDlgDialogBoxParam(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); -// 1002A420: using guessed type int dword_1002A420; -// 1002A424: using guessed type int dword_1002A424; -// 1002A48C: using guessed type int dword_1002A48C; + PostMessageA(hWnd, 0xBD7u, 0, 0); +} +// 1002A420: using guessed type int selhero_difficulty; +// 1002A424: using guessed type int selhero_hero_hassaved; // ref: 0x1000BFF9 -int UNKCALL SelHero_1000BFF9(HWND hWnd) { return 0; } -/* { - HWND v1; // esi - int v2; // eax +void __fastcall SelHero_DoHeroSelClass(HWND hWnd) +{ + BOOL v2; // eax int v3; // eax - int result; // eax - CHAR Buffer; // [esp+8h] [ebp-20h] + char Buffer[32]; // [esp+8h] [ebp-20h] - v1 = hWnd; - v2 = SDlgDialogBoxParam(hInstance, "SELCLASS_DIALOG", hWnd, SelClass_10009D66, 0); + v2 = SDlgDialogBoxParam(ghUiInst, "SELCLASS_DIALOG", (int)hWnd, SelClass_WndProc, 0); if ( v2 == -1 || v2 == 2 ) { - LoadStringA(hInstance, 0x1Eu, &Buffer, 31); - if ( !strcmp(&Buffer, (const char *)(dword_1002A458 + 4)) ) - result = SelHero_1000C3E2((int)v1, 4); + LoadStringA(ghUiInst, 0x1Eu, Buffer, 31); + if ( !strcmp(Buffer, sgpHeroInfo->name) ) + SelHero_DoHeroEndFade(hWnd, 4); else - result = PostMessageA(v1, 0xBD0u, 0, 0); + PostMessageA(hWnd, 0xBD0u, 0, 0); } else { @@ -554,204 +494,183 @@ int UNKCALL SelHero_1000BFF9(HWND hWnd) { return 0; } if ( v3 ) { if ( v3 == 1 ) - byte_1002A476 = 2; + heroinfo_create.heroclass = 2; else - byte_1002A476 = 0; + heroinfo_create.heroclass = 0; } else { - byte_1002A476 = 1; + heroinfo_create.heroclass = 1; } - result = PostMessageA(v1, 0xBD2u, 0, 0); + PostMessageA(hWnd, 0xBD2u, 0, 0); } - return result; -} */ -// 10010370: using guessed type int __stdcall SDlgDialogBoxParam(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); -// 1002A458: using guessed type int dword_1002A458; -// 1002A476: using guessed type char byte_1002A476; +} // ref: 0x1000C09B -int UNKCALL SelHero_1000C09B(HWND hWnd) { return 0; } -/* { - HWND v1; // esi - int result; // eax - char v3; // [esp+8h] [ebp-10h] - char v4; // [esp+17h] [ebp-1h] - - v1 = hWnd; - if ( SDlgDialogBoxParam(hInstance, "ENTERNAME_DIALOG", hWnd, EntName_10006F7C, &v3) != 1 ) - return PostMessageA(v1, 0xBD1u, 0, 0); - v4 = 0; - if ( SelHero_1000C0F9((int)v1, &v3) ) - result = PostMessageA(v1, 0xBD6u, 0, 0); +void __fastcall SelHero_DoEnterName(HWND hWnd) +{ + char namestr[16]; // [esp+8h] [ebp-10h] + + if ( SDlgDialogBoxParam(ghUiInst, "ENTERNAME_DIALOG", (int)hWnd, EntName_WndProc, (int)namestr) == 1 ) + { + namestr[15] = 0; + if ( SelHero_CreateHero(hWnd, namestr) ) + PostMessageA(hWnd, 0xBD6u, 0, 0); + else + PostMessageA(hWnd, 0xBD2u, 0, 0); + } else - result = PostMessageA(v1, 0xBD2u, 0, 0); - return result; -} */ -// 10010370: using guessed type int __stdcall SDlgDialogBoxParam(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); + { + PostMessageA(hWnd, 0xBD1u, 0, 0); + } +} // ref: 0x1000C0F9 -signed int __fastcall SelHero_1000C0F9(int a1, char *a2) { return 0; } -/* { - const char *v2; // edi - int v3; // ST0C_4 - CHAR v5; // [esp+Ch] [ebp-138h] - CHAR v6; // [esp+9Ch] [ebp-A8h] - CHAR Buffer; // [esp+11Ch] [ebp-28h] - int v8; // [esp+13Ch] [ebp-8h] - char *v9; // [esp+140h] [ebp-4h] - - v9 = a2; - v8 = a1; - if ( SelHero_1000B7CA() == 1 ) - LoadStringA(hInstance, 0x20u, &Buffer, 31); +BOOL __fastcall SelHero_CreateHero(HWND hWnd, char *name) +{ + _uiheroinfo *v2; // edi + char dialogstr[144]; // [esp+Ch] [ebp-138h] + char v5[128]; // [esp+9Ch] [ebp-A8h] + char Buffer[32]; // [esp+11Ch] [ebp-28h] + + if ( SelHero_GetHeroIsGood() == 1 ) + LoadStringA(ghUiInst, 0x20u, Buffer, 31); else - LoadStringA(hInstance, 0x1Fu, &Buffer, 31); - if ( !UiValidPlayerName(v9) ) + LoadStringA(ghUiInst, 0x1Fu, Buffer, 31); + if ( !UiValidPlayerName(name) ) { - LoadStringA(hInstance, 0xFu, &v6, 127); - SelYesNo_1000FD39(v8, &v6, (int)&Buffer, 1); + LoadStringA(ghUiInst, 0xFu, v5, 127); + SelYesNo_SelOkDialog(hWnd, v5, Buffer, 1); return 0; } - v2 = SelHero_1000BF4A((const char *)dword_1002A458, v9); + v2 = SelHero_GetHeroSlotFromName(sgpHeroInfo, name); if ( v2 ) { - LoadStringA(hInstance, 8u, &v6, 127); - wsprintfA(&v5, &v6, v2 + 4); - if ( SelYesNo_1000FA49(v8, &v5, (int)&Buffer, 1) == 2 ) + LoadStringA(ghUiInst, 8u, v5, 127); + wsprintfA(dialogstr, v5, v2->name); + if ( SelYesNo_YesNoDialog(hWnd, dialogstr, Buffer, 1) == 2 ) return 0; } - strcpy(byte_1002A464, v9); - dword_1002A484 = 0; - if ( !dword_1002A450(v3, &unk_1002A460) ) + strcpy(heroinfo_create.name, name); + heroinfo_create.hassaved = 0; + if ( !selhero_fncreate(&heroinfo_create) ) { - LoadStringA(hInstance, 0x10u, &v6, 127); - OkCancel_1000930A(v8, (int)&v6, 1); + LoadStringA(ghUiInst, 0x10u, v5, 127); + OkCancel_DoOkDialog(hWnd, v5, 1); return 0; } - dword_1002A45C = 1; + selhero_is_created = 1; return 1; -} */ -// 1002A450: using guessed type int (UNKCALL *dword_1002A450)(_DWORD, _DWORD); -// 1002A458: using guessed type int dword_1002A458; -// 1002A45C: using guessed type int dword_1002A45C; -// 1002A484: using guessed type int dword_1002A484; +} +// 1002A45C: using guessed type int selhero_is_created; // ref: 0x1000C21A -BOOL UNKCALL SelHero_1000C21A(HWND hWnd) { return 0; } -/* { - HWND v1; // esi - int v2; // eax +void __fastcall SelHero_DoSelLoad(HWND hWnd) +{ + BOOL v2; // eax - v1 = hWnd; - v2 = SDlgDialogBoxParam(hInstance, "SELLOAD_DIALOG", hWnd, SelLoad_1000E1C2, 0); + v2 = SDlgDialogBoxParam(ghUiInst, "SELLOAD_DIALOG", (int)hWnd, SelLoad_WndProc, 0); if ( v2 == -1 || v2 == 2 ) - return PostMessageA(v1, 0xBD0u, 0, 0); - if ( v2 == 1106 ) - return PostMessageA(v1, 0xBD5u, 0, 0); - return PostMessageA(v1, 0xBD4u, 0, 0); -} */ -// 10010370: using guessed type int __stdcall SDlgDialogBoxParam(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); + { + PostMessageA(hWnd, 0xBD0u, 0, 0); + } + else if ( v2 == 1106 ) + { + PostMessageA(hWnd, 0xBD5u, 0, 0); + } + else + { + PostMessageA(hWnd, 0xBD4u, 0, 0); + } +} // ref: 0x1000C269 -int UNKCALL SelHero_1000C269(HWND hWnd) { return 0; } -/* { - HWND v1; // ebx - int v2; // ecx - const char *v4; // eax - int v5; // eax - CHAR Buffer; // [esp+4h] [ebp-208h] - char v7; // [esp+104h] [ebp-108h] - char v8; // [esp+184h] [ebp-88h] - char v9; // [esp+204h] [ebp-8h] - char v10; // [esp+208h] [ebp-4h] - - v1 = hWnd; - if ( !SelHero_1000B7CA() ) +void __fastcall SelHero_DoSelDiff(HWND hWnd) +{ + _uiheroinfo *v3; // eax + int v4; // eax + char Buffer[256]; // [esp+4h] [ebp-208h] + char v6[128]; // [esp+104h] [ebp-108h] + char v7[128]; // [esp+184h] [ebp-88h] + _gamedata gameData; // [esp+204h] [ebp-8h] + + if ( !SelHero_GetHeroIsGood() ) + { + SelHero_SetHeroDifficulty(0); +LABEL_3: + SelHero_DoHeroEndFade(hWnd, 1); + return; + } + CreaDung_SetDelSpin(1); + if ( SDlgDialogBoxParam(ghUiInst, "SELDIFF_DIALOG", (int)hWnd, CreaDung_WndProc, selhero_is_good) == 1 ) + { + v3 = SelHero_GetHeroSlotFromName(sgpHeroInfo, selhero_heronamestr); + UiCreatePlayerDescription(v3, 'DBLO', v7); + gameData.bDiff = selhero_difficulty; + Connect_SetDiffString(&gameData, selhero_heronamestr, v7, v6, 128); + v4 = UiAuthCallback(2, selhero_heronamestr, v7, 0, v6, Buffer, 256); + if ( v4 ) + goto LABEL_3; + SelYesNo_SelOkDialog(hWnd, Buffer, 0, 1); + PostMessageA(hWnd, 0xBD4u, 0, 0); + } + else { - SelHero_1000B7AC(0); - v2 = (int)v1; - return SelHero_1000C3E2(v2, 1); + PostMessageA(hWnd, 0xBD3u, 0, 0); } - CreaDung_10004C33((void *)1); - if ( SDlgDialogBoxParam(hInstance, "SELDIFF_DIALOG", v1, CreaDung_10004C4A, dword_1002A48C) != 1 ) - return PostMessageA(v1, 0xBD3u, 0, 0); - v4 = SelHero_1000BF4A((const char *)dword_1002A458, &byte_1002A440); - UiCreatePlayerDescription((int)v4, 1145195599, (int)&v8); - v10 = dword_1002A420; - Connect_10003E0C((int)&v9, &byte_1002A440, &v8, &v7, 128); - v5 = UiAuthCallback(2, (int)&byte_1002A440, &v8, 0, &v7, &Buffer, 256); - v2 = (int)v1; - if ( v5 ) - return SelHero_1000C3E2(v2, 1); - SelYesNo_1000FD39((int)v1, &Buffer, 0, 1); - return PostMessageA(v1, 0xBD4u, 0, 0); -} */ -// 10010370: using guessed type int __stdcall SDlgDialogBoxParam(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); -// 1002A420: using guessed type int dword_1002A420; -// 1002A458: using guessed type int dword_1002A458; -// 1002A48C: using guessed type int dword_1002A48C; +} +// 1002A420: using guessed type int selhero_difficulty; // ref: 0x1000C364 -void UNKCALL SelHero_1000C364(HWND hDlg) { return; } -/* { - HWND v1; // esi - _DWORD *v2; // eax - - v1 = hDlg; - Doom_10006C53(hDlg, (int *)&unk_10023020); - Doom_10006C53(v1, (int *)&unk_10023008); - Doom_10006C53(v1, (int *)&unk_10023000); - Title_100100E7(v1); - SelHero_1000C3CE((_DWORD *)dword_1002A458); - if ( dword_1002A498 ) +void __fastcall SelHero_DeleteAndFree(HWND hWnd) +{ + void **v2; // eax + + Doom_DeleteFreeProcs(hWnd, selhero_msgtbl_info); + Doom_DeleteFreeProcs(hWnd, selhero_msgtbl_3); + Doom_DeleteFreeProcs(hWnd, selhero_msgtbl_string); + Title_KillTitleTimer(hWnd); + SelHero_FreeAllHeroes(sgpHeroInfo); + if ( selhero_buffer ) { - SMemFree(dword_1002A498, "C:\\Src\\Diablo\\DiabloUI\\SelHero.cpp", 744, 0); - dword_1002A498 = 0; + SMemFree(selhero_buffer, "C:\\Src\\Diablo\\DiabloUI\\SelHero.cpp", 744, 0); + selhero_buffer = 0; } - v2 = (_DWORD *)GetWindowLongA(v1, -21); - local_10007F72(v2); -} */ -// 10010340: using guessed type int __stdcall SMemFree(_DWORD, _DWORD, _DWORD, _DWORD); -// 1002A458: using guessed type int dword_1002A458; -// 1002A498: using guessed type int dword_1002A498; + v2 = (void **)GetWindowLongA(hWnd, -21); + local_FreeMemPtr(v2); +} // ref: 0x1000C3CE -int __fastcall SelHero_1000C3CE(_DWORD *a1) { return 0; } -/* { - _DWORD *v1; // esi - int result; // eax +void __fastcall SelHero_FreeAllHeroes(_uiheroinfo *pInfo) +{ + _uiheroinfo *v1; // esi - if ( a1 ) + if ( pInfo ) { do { - v1 = (_DWORD *)*a1; - result = SelHero_1000BF33(a1); - a1 = v1; + v1 = pInfo->next; + SelHero_FreeSomeMemory(pInfo); + pInfo = v1; } while ( v1 ); } - return result; -} */ +} // ref: 0x1000C3E2 -int __fastcall SelHero_1000C3E2(int a1, int a2) { return 0; } -/* { - int v2; // edi - int v3; // esi - - v2 = a2; - v3 = a1; - Fade_100073B4(); - Fade_100072BE(10); - return SDlgEndDialog(v3, v2); -} */ -// 10010376: using guessed type int __stdcall SDlgEndDialog(_DWORD, _DWORD); +void __fastcall SelHero_DoHeroEndFade(HWND hWnd, int a2) +{ + void *v2; // edi + + v2 = (void *)a2; + Fade_Range5SetZero(); + Fade_UpdatePaletteRange(10); + SDlgEndDialog(hWnd, v2); +} // ref: 0x1000C3FF -int UNKCALL SelHero_1000C3FF(HWND hWnd) { return 0; } -/* { +void __fastcall SelHero_LoadHeroGFX(HWND hWnd) +{ HWND v1; // eax int v2; // eax HWND v3; // eax @@ -762,132 +681,110 @@ int UNKCALL SelHero_1000C3FF(HWND hWnd) { return 0; } int v8; // eax HWND v9; // eax int v10; // eax - HWND v12; // esi - int v13; // eax - int *v14; // edi - void *v15; // [esp+0h] [ebp-8h] - HWND v16; // [esp+0h] [ebp-8h] - - v12 = hWnd; - SelHero_1000C49F(hWnd, v15); - v13 = local_10007F46(); - v14 = (int *)v13; - if ( v13 ) + DWORD *v12; // eax MAPDST + + SelHero_SelectHeroRegion(hWnd); + v12 = local_AllocWndLongData(); + if ( v12 ) { - SetWindowLongA(v12, -21, v13); - local_10007944((int)v12, 0, &byte_10029448, -1, 1, (int)"ui_art\\selhero.pcx", v14, v14 + 1, 0); - Fade_100073C5(v12, 1); + SetWindowLongA(hWnd, -21, (LONG)v12); + local_LoadArtWithPal(hWnd, 0, &nullcharacter, -1, 1, "ui_art\\selhero.pcx", (BYTE **)v12, v12 + 1, 0); + Fade_NoInputAndArt(hWnd, 1); } - local_100078BE((int)"ui_art\\heros.pcx", &dword_1002A498, &dword_1002A418); - SetActiveWindow(v12); - Title_1001009E(v12, (int)"ui_art\\smlogo.pcx", v16); - Doom_100068AB(v12, (int *)&unk_10023000, 5); - Doom_100068AB(v12, (int *)&unk_10023008, 1); - Doom_100068AB(v12, (int *)&unk_10023020, 1); - dword_1002A424 = 0; - byte_1002A440 = 0; - v1 = GetDlgItem(v12, 1014); + local_LoadArtImage("ui_art\\heros.pcx", &selhero_buffer, selhero_sizedata); + SetActiveWindow(hWnd); + Title_LoadImgSetTimer(hWnd, "ui_art\\smlogo.pcx"); + Doom_ParseWndProc3(hWnd, selhero_msgtbl_string, 5); + Doom_ParseWndProc3(hWnd, selhero_msgtbl_3, 1); + Doom_ParseWndProc3(hWnd, selhero_msgtbl_info, 1); + selhero_hero_hassaved = 0; + selhero_heronamestr[0] = 0; + v1 = GetDlgItem(hWnd, 1014); v2 = GetWindowLongA(v1, -21); - local_10007FA4(v2, "--"); - v3 = GetDlgItem(v12, 1018); + local_SetWndLongStr(v2, "--"); + v3 = GetDlgItem(hWnd, 1018); v4 = GetWindowLongA(v3, -21); - local_10007FA4(v4, "--"); - v5 = GetDlgItem(v12, 1017); + local_SetWndLongStr(v4, "--"); + v5 = GetDlgItem(hWnd, 1017); v6 = GetWindowLongA(v5, -21); - local_10007FA4(v6, "--"); - v7 = GetDlgItem(v12, 1016); + local_SetWndLongStr(v6, "--"); + v7 = GetDlgItem(hWnd, 1016); v8 = GetWindowLongA(v7, -21); - local_10007FA4(v8, "--"); - v9 = GetDlgItem(v12, 1015); + local_SetWndLongStr(v8, "--"); + v9 = GetDlgItem(hWnd, 1015); v10 = GetWindowLongA(v9, -21); - local_10007FA4(v10, "--"); - SelHero_1000B899(v12, 3); - return Doom_10006A13(v12, (int *)&unk_10023020, 1); -} */ -// 1002A418: using guessed type int dword_1002A418; -// 1002A424: using guessed type int dword_1002A424; -// 1002A498: using guessed type int dword_1002A498; + local_SetWndLongStr(v10, "--"); + SelHero_SetStaticBMP(hWnd, 3); + Doom_ParseWndProc4(hWnd, selhero_msgtbl_info, 1); +} +// 1002A424: using guessed type int selhero_hero_hassaved; // ref: 0x1000C49F -BOOL UNKCALL SelHero_1000C49F(HWND hWnd, void *a2) { return 0; } -/* { - HWND v2; // ebx - int v3; // esi - BOOL result; // eax - int v5; // [esp+10h] [ebp-44h] - CHAR Buffer; // [esp+14h] [ebp-40h] - - v2 = hWnd; - v3 = SelHero_1000B7B9(); - *(_DWORD *)v3 = 0; - LoadStringA(hInstance, 0x1Eu, (LPSTR)(v3 + 4), 15); - *(_WORD *)(v3 + 20) = 0; - dword_1002A458 = (int)SelRegn_1000EF56(dword_1002A458, (_DWORD *)v3); - v5 = dword_1002A458; - dword_1002A428 = 1; - if ( !dword_1002A438(SelHero_1000C541) ) +void __fastcall SelHero_SelectHeroRegion(HWND hWnd) +{ + _uiheroinfo *v2; // esi + _uiheroinfo *v3; // [esp+10h] [ebp-44h] + char Buffer[64]; // [esp+14h] [ebp-40h] + + v2 = SelHero_AllocHeroInfo(); + v2->next = 0; + LoadStringA(ghUiInst, 0x1Eu, v2->name, 15); + v2->level = 0; + sgpHeroInfo = SelRegn_SetNextHero(sgpHeroInfo, v2); + v3 = sgpHeroInfo; + selhero_numheroesleft = 1; + if ( !selhero_fninfo(SelHero_GetHeroInfo) ) { - LoadStringA(hInstance, 0x12u, &Buffer, 64); - OkCancel_1000930A((int)v2, (int)&Buffer, 1); + LoadStringA(ghUiInst, 0x12u, Buffer, 64); + OkCancel_DoOkDialog(hWnd, Buffer, 1); } - if ( v5 == dword_1002A458 ) - result = PostMessageA(v2, 0xBD1u, 0, 0); + if ( v3 == sgpHeroInfo ) + PostMessageA(hWnd, 0xBD1u, 0, 0); else - result = PostMessageA(v2, 0xBD0u, 0, 0); - return result; -} */ -// 1002A428: using guessed type int dword_1002A428; -// 1002A438: using guessed type int (__stdcall *dword_1002A438)(_DWORD); -// 1002A458: using guessed type int dword_1002A458; + PostMessageA(hWnd, 0xBD0u, 0, 0); +} +// 1002A428: using guessed type int selhero_numheroesleft; // ref: 0x1000C541 -signed int __stdcall SelHero_1000C541(void *a1) { return 0; } -/* { - _DWORD *v1; // esi - _DWORD *v2; // eax - - v1 = (_DWORD *)SelHero_1000B7B9(); - memcpy(v1, a1, 0x2Cu); - *v1 = 0; - v2 = SelRegn_1000EF56(dword_1002A458, v1); - ++dword_1002A428; - dword_1002A458 = (int)v2; +BOOL __stdcall SelHero_GetHeroInfo(_uiheroinfo *pInfo) +{ + _uiheroinfo *v1; // esi + _uiheroinfo *v2; // eax + + v1 = SelHero_AllocHeroInfo(); + memcpy(v1, pInfo, 0x2Cu); + v1->next = 0; + v2 = SelRegn_SetNextHero(sgpHeroInfo, v1); + ++selhero_numheroesleft; + sgpHeroInfo = v2; return 1; -} */ -// 1002A428: using guessed type int dword_1002A428; -// 1002A458: using guessed type int dword_1002A458; +} +// 1002A428: using guessed type int selhero_numheroesleft; // ref: 0x1000C57A -int __stdcall UiSelHeroSingDialog(void *fninfo, void *fncreate, void *fnremove, void *fnstats, int *a5, char *name, int *difficulty) { return 0; } -/* { +BOOL __stdcall UiSelHeroSingDialog(BOOL (__stdcall *fninfo)(BOOL (__stdcall *fninfofunc)(_uiheroinfo *)), BOOL (__stdcall *fncreate)(_uiheroinfo *), BOOL (__stdcall *fnremove)(_uiheroinfo *), BOOL (__stdcall *fnstats)(int, _uidefaultstats *), int *dlgresult, char *name, int *difficulty) +{ int v7; // eax int v8; // edi - artfont_10001159(); - dword_1002A438 = (int (__stdcall *)(_DWORD))a1; - dword_1002A450 = (int (UNKCALL *)(_DWORD, _DWORD))a2; - dword_1002A434 = (int (__stdcall *)(_DWORD))a3; - dword_1002A410 = (int (__stdcall *)(_DWORD, _DWORD))a4; - dword_1002A458 = 0; - dword_1002A48C = 0; - v7 = SDrawGetFrameWindow(); - v8 = SDlgDialogBoxParam(hInstance, "SELHERO_DIALOG", v7, SelHero_1000BC46, 0); - if ( a5 ) - *(_DWORD *)a5 = v8; - if ( a6 ) - strcpy(a6, &byte_1002A440); - if ( a7 ) - *(_DWORD *)a7 = dword_1002A420; + artfont_LoadAllFonts(); + selhero_fninfo = fninfo; + selhero_fncreate = fncreate; + selhero_fnremove = fnremove; + selhero_fnstats = fnstats; + sgpHeroInfo = 0; + selhero_is_good = 0; + v7 = (int)SDrawGetFrameWindow(); + v8 = SDlgDialogBoxParam(ghUiInst, "SELHERO_DIALOG", v7, SelHero_WndProc, 0); + if ( dlgresult ) + *dlgresult = v8; + if ( name ) + strcpy(name, selhero_heronamestr); + if ( difficulty ) + *difficulty = selhero_difficulty; if ( v8 != 4 ) - artfont_100010C8(); + artfont_FreeAllFonts(); return 1; -} */ -// 10010370: using guessed type int __stdcall SDlgDialogBoxParam(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); +} // 10010382: using guessed type _DWORD __stdcall SDrawGetFrameWindow(); -// 1002A410: using guessed type int (__stdcall *dword_1002A410)(_DWORD, _DWORD); -// 1002A420: using guessed type int dword_1002A420; -// 1002A434: using guessed type int (__stdcall *dword_1002A434)(_DWORD); -// 1002A438: using guessed type int (__stdcall *dword_1002A438)(_DWORD); -// 1002A450: using guessed type int (UNKCALL *dword_1002A450)(_DWORD, _DWORD); -// 1002A458: using guessed type int dword_1002A458; -// 1002A48C: using guessed type int dword_1002A48C; +// 1002A420: using guessed type int selhero_difficulty; diff --git a/DiabloUI/sellist.cpp b/DiabloUI/sellist.cpp index 92370a9bc..75c8e17dc 100644 --- a/DiabloUI/sellist.cpp +++ b/DiabloUI/sellist.cpp @@ -1,17 +1,14 @@ // ref: 0x1000D769 -signed int SelList_1000D769() { return 0; } -/* { - signed int result; // eax - - result = 2139095040; - dword_1002A4C0 = 2139095040; - return result; -} */ -// 1002A4C0: using guessed type int dword_1002A4C0; +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 -int __stdcall SelList_1000D774(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam) { return 0; } -/* { +LRESULT __stdcall SelList_WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) +{ HWND v4; // eax char *v5; // eax int v6; // edx @@ -23,105 +20,101 @@ int __stdcall SelList_1000D774(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam if ( Msg == 275 ) { v9 = GetFocus(); - Focus_100075DC(hDlg, v9); + Focus_DoBlitSpinIncFrame(hWnd, v9); return 0; } if ( Msg != 513 ) { if ( Msg == 514 ) { - v8 = GetDlgItem(hDlg, 1105); - if ( !Sbar_100099C0(v8) ) - return SDlgDefDialogProc(hDlg, Msg, wParam, lParam); + v8 = GetDlgItem(hWnd, 1105); + if ( !Sbar_CheckIfNextHero(v8) ) + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); goto LABEL_23; } if ( Msg != 515 ) - return SDlgDefDialogProc(hDlg, Msg, wParam, lParam); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); } - SelList_1000E0CA(hDlg, (unsigned short)lParam, (unsigned int)lParam >> 16); - return SDlgDefDialogProc(hDlg, Msg, wParam, 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_100075B7(hDlg, (HWND)lParam); - return SDlgDefDialogProc(hDlg, Msg, wParam, lParam); + Focus_GetAndBlitSpin(hWnd, lParam); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); } if ( HIWORD(wParam) != 6 ) { v6 = 1; - if ( wParam != 327681 ) + if ( HIWORD(wParam) != 5 && (_WORD)wParam != 1 ) { v6 = 2; if ( (_WORD)wParam != 2 ) - return SDlgDefDialogProc(hDlg, Msg, wParam, lParam); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); } LABEL_25: - OkCancel_100092F5((int)hDlg, v6); - return SDlgDefDialogProc(hDlg, Msg, wParam, lParam); + OkCancel_PlaySndEndDlg(hWnd, v6); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); } - Focus_10007458((void *)lParam); - Focus_100075DC(hDlg, (HWND)lParam); - SelList_1000D964(hDlg, (unsigned short)wParam); + Focus_CheckPlayMove(lParam); + Focus_DoBlitSpinIncFrame(hWnd, (HWND)lParam); + SelList_GetHeroStats(hWnd, (unsigned short)wParam); LABEL_23: - SelList_1000D9CF(hDlg); - return SDlgDefDialogProc(hDlg, Msg, wParam, lParam); + SelList_CountHeroList(hWnd); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); case 2u: - SelList_1000D916(hDlg); - return SDlgDefDialogProc(hDlg, Msg, wParam, lParam); + SelList_DeleteFreeProcs(hWnd); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); case 6u: if ( (_WORD)wParam == 1 || (_WORD)wParam == 2 ) - SelList_1000DA2D(hDlg); + SelList_LoadFocus16(hWnd); else - SelList_1000DA48(hDlg); + SelList_KillFocus16(hWnd); return 0; case 0x100u: if ( wParam != 46 ) - return SDlgDefDialogProc(hDlg, Msg, wParam, lParam); - v5 = SelHero_1000B7B3(); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); + v5 = SelHero_GetHeroNameStr(); if ( !strlen(v5) ) - return SDlgDefDialogProc(hDlg, Msg, wParam, lParam); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); v6 = 1006; goto LABEL_25; } if ( Msg <= 0x103 ) - return SDlgDefDialogProc(hDlg, Msg, wParam, lParam); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); if ( Msg <= 0x105 ) { v4 = (HWND)SDrawGetFrameWindow(); SendMessageA(v4, Msg, wParam, lParam); - return SDlgDefDialogProc(hDlg, Msg, wParam, lParam); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); } if ( Msg != 272 ) - return SDlgDefDialogProc(hDlg, Msg, wParam, lParam); - SelList_1000DA55(hDlg); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); + SelList_ShowListWindow(hWnd); return 0; -} */ -// 1001037C: using guessed type int __stdcall SDlgDefDialogProc(_DWORD, _DWORD, _DWORD, _DWORD); +} // 10010382: using guessed type _DWORD __stdcall SDrawGetFrameWindow(); // ref: 0x1000D916 -HWND UNKCALL SelList_1000D916(HWND hDlg) { return 0; } -/* { - HWND v1; // esi +void __fastcall SelList_DeleteFreeProcs(HWND hWnd) +{ HWND v2; // eax - v1 = hDlg; - Sbar_10009CD2(hDlg, 1105); - Doom_10006C53(v1, &dword_10023190); - Doom_10006C53(v1, (int *)&unk_10023188); - Doom_10006C53(v1, (int *)&unk_1002317C); - Doom_10006C53(v1, (int *)&unk_10023174); - v2 = GetParent(v1); - return SelHero_1000BA7B(v2, 0); -} */ -// 10023190: using guessed type int dword_10023190; + 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 -HWND __fastcall SelList_1000D964(HWND hDlg, int nIDDlgItem) { return 0; } -/* { +void __fastcall SelList_GetHeroStats(HWND hWnd, int nIDDlgItem) +{ HWND v2; // ebp HWND v3; // eax int v4; // eax @@ -133,81 +126,77 @@ HWND __fastcall SelList_1000D964(HWND hDlg, int nIDDlgItem) { return 0; } int v10; // eax HWND v11; // eax int v12; // eax - HWND v13; // esi - HWND result; // eax - int v15; // edi - HWND v16; // eax + HWND v14; // eax + LONG v15; // eax + _uiheroinfo *v16; // edi HWND v17; // eax + HWND v18; // eax - v13 = hDlg; - result = GetDlgItem(hDlg, nIDDlgItem); - if ( result ) + v14 = GetDlgItem(hWnd, nIDDlgItem); + if ( v14 ) { - result = (HWND)GetWindowLongA(result, -21); - if ( result ) + v15 = GetWindowLongA(v14, -21); + if ( v15 ) { - v15 = *((_DWORD *)result + 3); - if ( v15 ) + v16 = *(_uiheroinfo **)(v15 + 12); + if ( v16 ) { - if ( *(_WORD *)(v15 + 20) ) - Doom_1000680A(v13, (int *)&unk_10023188, 4, 0); + if ( v16->level ) + Doom_ParseWndProc2(hWnd, sellist_msgtbl3, 4, 0); else - Doom_1000680A(v13, (int *)&unk_10023188, 5, 0); - v16 = GetParent(v13); - result = (HWND)SelHero_1000B905(v16, v15); + Doom_ParseWndProc2(hWnd, sellist_msgtbl3, 5, 0); + v17 = GetParent(hWnd); + SelHero_PrintHeroInfo(v17, v16); } else { - Doom_1000680A(v13, (int *)&unk_10023188, 5, 0); - v17 = GetParent(v13); - dword_1002A424 = 0; - byte_1002A440 = 0; - v2 = v17; - v3 = GetDlgItem(v17, 1014); + 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_10007FA4(v4, "--"); + local_SetWndLongStr(v4, "--"); v5 = GetDlgItem(v2, 1018); v6 = GetWindowLongA(v5, -21); - local_10007FA4(v6, "--"); + local_SetWndLongStr(v6, "--"); v7 = GetDlgItem(v2, 1017); v8 = GetWindowLongA(v7, -21); - local_10007FA4(v8, "--"); + local_SetWndLongStr(v8, "--"); v9 = GetDlgItem(v2, 1016); v10 = GetWindowLongA(v9, -21); - local_10007FA4(v10, "--"); + local_SetWndLongStr(v10, "--"); v11 = GetDlgItem(v2, 1015); v12 = GetWindowLongA(v11, -21); - local_10007FA4(v12, "--"); - SelHero_1000B899(v2, 3); - result = (HWND)Doom_10006A13(v2, (int *)&unk_10023020, 1); + local_SetWndLongStr(v12, "--"); + SelHero_SetStaticBMP(v2, 3); + Doom_ParseWndProc4(v2, selhero_msgtbl_info, 1); } } } - return result; -} */ -// 1002A424: using guessed type int dword_1002A424; +} +// 1002A424: using guessed type int selhero_hero_hassaved; // ref: 0x1000D9CF -HWND UNKCALL SelList_1000D9CF(HWND hDlg) { return 0; } -/* { - HWND v1; // esi +void __fastcall SelList_CountHeroList(HWND hWnd) +{ HWND v2; // eax int v3; // ST04_4 int v4; // eax - v1 = hDlg; v2 = GetFocus(); - v3 = SelList_1000D9F4(v2); - v4 = SelHero_1000B7A6(); - return Sbar_10009A99(v1, 1105, v4, v3); -} */ + v3 = SelList_GetNextHeroLong(v2); + v4 = SelHero_GetNumHeroesLeft(); + Sbar_DrawScrollBar(hWnd, 1105, v4, v3); +} // ref: 0x1000D9F4 -int UNKCALL SelList_1000D9F4(HWND hWnd) { return 0; } -/* { +int __fastcall SelList_GetNextHeroLong(HWND hWnd) +{ LONG v1; // esi - _DWORD *v2; // eax - _DWORD *v3; // esi + _uiheroinfo *v2; // eax + _uiheroinfo *v3; // esi int v5; // ecx if ( !hWnd ) @@ -215,10 +204,10 @@ int UNKCALL SelList_1000D9F4(HWND hWnd) { return 0; } v1 = GetWindowLongA(hWnd, -21); if ( !v1 ) return 0; - v2 = (_DWORD *)SelHero_1000B7A0(); + v2 = SelHero_GetCurrentHeroInfo(); if ( !v2 ) return 0; - v3 = *(_DWORD **)(v1 + 12); + v3 = *(_uiheroinfo **)(v1 + 12); if ( !v3 ) return 0; v5 = 0; @@ -226,146 +215,110 @@ int UNKCALL SelList_1000D9F4(HWND hWnd) { return 0; } { if ( v2 == v3 ) break; - v2 = (_DWORD *)*v2; + v2 = v2->next; ++v5; } while ( v2 ); return v5; -} */ +} // ref: 0x1000DA2D -int UNKCALL SelList_1000DA2D(void *arg) { return 0; } -/* { - void *v1; // esi - - v1 = arg; - Focus_10007719("ui_art\\focus16.pcx"); - return SDlgSetTimer(v1, 1, 55, 0); -} */ -// 10010412: using guessed type int __stdcall SDlgSetTimer(_DWORD, _DWORD, _DWORD, _DWORD); +void __fastcall SelList_LoadFocus16(HWND hWnd) +{ + Focus_LoadSpinner("ui_art\\focus16.pcx"); + SDlgSetTimer((int)hWnd, 1, 55, 0); +} // ref: 0x1000DA48 -int UNKCALL SelList_1000DA48(void *arg) { return 0; } -/* { - SDlgKillTimer(arg, 1); - return Focus_100076C3(); -} */ -// 10010418: using guessed type int __stdcall SDlgKillTimer(_DWORD, _DWORD); +void __fastcall SelList_KillFocus16(HWND hWnd) +{ + SDlgKillTimer((int)hWnd, 1); + Focus_DeleteSpinners(); +} // ref: 0x1000DA55 -int UNKCALL SelList_1000DA55(HWND hWnd) { return 0; } -/* { - HWND v1; // esi +void __fastcall SelList_ShowListWindow(HWND hWnd) +{ HWND v2; // edi LONG v3; // eax - int result; // eax - HWND v5; // eax - CHAR Buffer; // [esp+8h] [ebp-20h] + HWND v4; // eax + char Buffer[32]; // [esp+8h] [ebp-20h] - v1 = hWnd; v2 = GetParent(hWnd); - SelList_1000DBAC(v1); - if ( SelHero_1000B7CA() == 1 ) - LoadStringA(hInstance, 0x1Cu, &Buffer, 31); + SelList_DoListOldProc(hWnd); + if ( SelHero_GetHeroIsGood() == 1 ) + LoadStringA(ghUiInst, 0x1Cu, Buffer, 31); else - LoadStringA(hInstance, 0x1Du, &Buffer, 31); - SelHero_1000BA7B(v2, &Buffer); + LoadStringA(ghUiInst, 0x1Du, Buffer, 31); + SelHero_SetStringWithMsg(v2, Buffer); v3 = GetWindowLongA(v2, -21); - SetWindowLongA(v1, -21, v3); - Doom_100068AB(v1, (int *)&unk_10023174, 5); - Doom_1000658C(v1, (int *)&unk_1002317C, 4, 0); - Doom_1000658C(v1, (int *)&unk_10023188, 4, 0); - Doom_1000658C(v1, &dword_10023190, 2, 1); - dword_1002A4C4 = SelHero_1000B7A0(); - SelList_1000DB2C(v1, (const char *)dword_1002A4C4); - Sbar_10009BF1(v1, 1105); - result = SelHero_1000B7A6(); - if ( result <= 6 ) + 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 ) { - v5 = GetDlgItem(v1, 1105); - result = ShowWindow(v5, 0); + v4 = GetDlgItem(hWnd, 1105); + ShowWindow(v4, 0); } - return result; -} */ -// 10023190: using guessed type int dword_10023190; -// 1002A4C4: using guessed type int dword_1002A4C4; +} // ref: 0x1000DB2C -int __fastcall SelList_1000DB2C(HWND a1, const char *a2) { return 0; } -/* { - const char *v2; // edi - int *v3; // ebp - HWND v4; // eax - HWND v5; // esi +void __fastcall SelList_SetHeroDlgLong(HWND hWnd, _uiheroinfo *pInfo) +{ + int *i; // ebp + HWND v4; // eax MAPDST int v6; // esi - HWND hDlg; // [esp+8h] [ebp-4h] - v2 = a2; - hDlg = a1; - v3 = &dword_10023190; - if ( dword_10023190 ) + for ( i = sellist_msgtbl4; *i; ++i ) { - do + v4 = GetDlgItem(hWnd, *i); + if ( v4 ) { - v4 = GetDlgItem(hDlg, *v3); - v5 = v4; - if ( v4 ) + if ( pInfo ) { - if ( v2 ) - { - EnableWindow(v4, 1); - v6 = GetWindowLongA(v5, -21); - local_10007FA4(v6, v2 + 4); - if ( v6 ) - *(_DWORD *)(v6 + 12) = v2; - v2 = *(const char **)v2; - } - else - { - EnableWindow(v4, 0); - } + 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); } - ++v3; } - while ( *v3 ); } - return Doom_1000680A(hDlg, &dword_10023190, 2, 1); -} */ -// 10023190: using guessed type int dword_10023190; + Doom_ParseWndProc2(hWnd, sellist_msgtbl4, 2, 1); +} // ref: 0x1000DBAC -void UNKCALL SelList_1000DBAC(HWND hDlg) { return; } -/* { - HWND v1; // ebx - int *v2; // edi - HWND v3; // eax - HWND v4; // esi +void __fastcall SelList_DoListOldProc(HWND hWnd) +{ + int *i; // edi + HWND v3; // eax MAPDST void *v5; // eax - v1 = hDlg; - v2 = &dword_10023190; - if ( dword_10023190 ) + for ( i = sellist_msgtbl4; *i; ++i ) { - do + v3 = GetDlgItem(hWnd, *i); + if ( v3 ) { - v3 = GetDlgItem(v1, *v2); - v4 = v3; - if ( v3 ) - { - v5 = (void *)GetWindowLongA(v3, -4); - SetPropA(v4, "UIOLDPROC", v5); - SetWindowLongA(v4, -4, (LONG)SelList_1000DBFE); - } - ++v2; + v5 = (void *)GetWindowLongA(v3, -4); + SetPropA(v3, "UIOLDPROC", v5); + SetWindowLongA(v3, -4, (LONG)SelList_OldListWndProc); } - while ( *v2 ); } -} */ -// 10023190: using guessed type int dword_10023190; +} // ref: 0x1000DBFE -LRESULT __stdcall SelList_1000DBFE(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { return 0; } -/* { +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] @@ -382,7 +335,7 @@ LRESULT __stdcall SelList_1000DBFE(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lP SetWindowLongA(hWnd, -4, (LONG)v4); break; case 0xFu: - local_10007C95(hWnd); + local_DlgDoPaint(hWnd); return 0; case 0x87u: return 4; @@ -391,19 +344,19 @@ LRESULT __stdcall SelList_1000DBFE(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lP { if ( wParam == 34 ) { - SelList_1000DE18(hWnd); + SelList_HeroesWithBigDialogs(hWnd); return 0; } if ( wParam > 0x24 ) { if ( wParam <= 0x26 ) { - SelList_1000E043(hWnd); + SelList_HeroDlgWithSnd2(hWnd); return 0; } if ( wParam <= 0x28 ) { - SelList_1000DFAB(hWnd); + SelList_HeroDlgWithSound(hWnd); return 0; } if ( wParam == 46 ) @@ -420,13 +373,13 @@ LRESULT __stdcall SelList_1000DBFE(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lP switch ( wParam ) { case 0x21u: - SelList_1000DEF4(hWnd); + SelList_HeroesWithHugeDlg(hWnd); break; case 9u: if ( GetKeyState(16) >= 0 ) - SelList_1000DD36(hWnd); + SelList_ShiftHeroDlgItems(hWnd); else - SelList_1000DDA7(hWnd); + SelList_ShiftHeroDlgItm2(hWnd); return 0; case 0xDu: goto LABEL_38; @@ -451,382 +404,340 @@ LABEL_24: if ( v4 ) return CallWindowProcA(v4, hWnd, Msg, wParam, lParam); return DefWindowProcA(hWnd, Msg, wParam, lParam); -} */ +} // ref: 0x1000DD36 -HWND UNKCALL SelList_1000DD36(HWND hWnd) { return 0; } -/* { - HWND v1; // edi +void __fastcall SelList_ShiftHeroDlgItems(HWND hWnd) +{ HWND v2; // ebx - int nIDDlgItem[1044]; // [esp+0h] [ebp-1074h] - int v5; // [esp+1050h] [ebp-24h] - int v6; // [esp+105Ch] [ebp-18h] - int v7; // [esp+1060h] [ebp-14h] - int v8; // [esp+1064h] [ebp-10h] - int v9; // [esp+1068h] [ebp-Ch] - int v10; // [esp+106Ch] [ebp-8h] - int v11; // [esp+1070h] [ebp-4h] - - v1 = hWnd; - v6 = 1048; - v7 = 1049; - v8 = 1050; - v9 = 1051; - v10 = 1052; - v11 = 1047; + 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 { - v5 = nIDDlgItem[GetWindowLongA(v1, -12)]; - v1 = GetDlgItem(v2, v5); + nIDDlgItem[1044] = nIDDlgItem[GetWindowLongA(hWnd, -12)]; + hWnd = GetDlgItem(v2, nIDDlgItem[1044]); } - while ( !IsWindowEnabled(v1) ); - return SetFocus(v1); -} */ -// 1000DD36: using guessed type int nIDDlgItem[1044]; + while ( !IsWindowEnabled(hWnd) ); + SetFocus(hWnd); +} // ref: 0x1000DDA7 -HWND UNKCALL SelList_1000DDA7(HWND hWnd) { return 0; } -/* { - HWND v1; // edi +void __fastcall SelList_ShiftHeroDlgItm2(HWND hWnd) +{ HWND v2; // ebx - int nIDDlgItem[1044]; // [esp+0h] [ebp-1074h] - int v5; // [esp+1050h] [ebp-24h] - int v6; // [esp+105Ch] [ebp-18h] - int v7; // [esp+1060h] [ebp-14h] - int v8; // [esp+1064h] [ebp-10h] - int v9; // [esp+1068h] [ebp-Ch] - int v10; // [esp+106Ch] [ebp-8h] - int v11; // [esp+1070h] [ebp-4h] - - v1 = hWnd; - v6 = 1052; - v7 = 1047; - v8 = 1048; - v9 = 1049; - v10 = 1050; - v11 = 1051; + 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 { - v5 = nIDDlgItem[GetWindowLongA(v1, -12)]; - v1 = GetDlgItem(v2, v5); + nIDDlgItem[1044] = nIDDlgItem[GetWindowLongA(hWnd, -12)]; + hWnd = GetDlgItem(v2, nIDDlgItem[1044]); } - while ( !IsWindowEnabled(v1) ); - return SetFocus(v1); -} */ -// 1000DDA7: using guessed type int nIDDlgItem[1044]; + while ( !IsWindowEnabled(hWnd) ); + SetFocus(hWnd); +} // ref: 0x1000DE18 -HWND UNKCALL SelList_1000DE18(HWND hWnd) { return 0; } -/* { - HWND result; // eax - HWND v2; // edi +void __fastcall SelList_HeroesWithBigDialogs(HWND hWnd) +{ + HWND v1; // eax MAPDST HWND v3; // ebp HWND v4; // eax - _DWORD *v5; // eax - char *v6; // esi - const char *v7; // esi - int v8; // eax - HWND hWnda; // [esp+10h] [ebp-4h] - - hWnda = hWnd; - result = GetParent(hWnd); - v2 = result; - if ( result ) + LONG v5; // eax + _uiheroinfo *v6; // eax + int v7; // esi + _uiheroinfo *v8; // esi + int v9; // eax + + v1 = GetParent(hWnd); + if ( v1 ) { - result = GetDlgItem(result, 1047); - v3 = result; - if ( result ) + v3 = GetDlgItem(v1, 1047); + if ( v3 ) { - v4 = GetDlgItem(v2, 1052); - result = (HWND)GetWindowLongA(v4, -21); - if ( result ) + v4 = GetDlgItem(v1, 1052); + v5 = GetWindowLongA(v4, -21); + if ( v5 ) { - v5 = (_DWORD *)*((_DWORD *)result + 3); - if ( v5 && *v5 ) + v6 = *(_uiheroinfo **)(v5 + 12); + if ( v6 && v6->next ) { - v6 = (char *)(SelList_1000D9F4(v3) + 6); - if ( (signed int)v6 > SelHero_1000B7A6() - 6 ) - v6 = (char *)(SelHero_1000B7A6() - 6); - result = (HWND)SelList_1000DEDD(v6); - v7 = (const char *)result; - if ( result ) + v7 = SelList_GetNextHeroLong(v3) + 6; + if ( v7 > SelHero_GetNumHeroesLeft() - 6 ) + v7 = SelHero_GetNumHeroesLeft() - 6; + v8 = SelList_GetHeroFromNum(v7); + if ( v8 ) { - TitleSnd_10010315(); - SelList_1000DB2C(v2, v7); - v8 = GetWindowLongA(hWnda, -12); - SelList_1000D964(v2, v8); - result = SelList_1000D9CF(v2); + TitleSnd_PlayMoveSound(); + SelList_SetHeroDlgLong(v1, v8); + v9 = GetWindowLongA(hWnd, -12); + SelList_GetHeroStats(v1, v9); + SelList_CountHeroList(v1); } } else { - result = SelList_1000DDA7(v3); + SelList_ShiftHeroDlgItm2(v3); } } } } - return result; -} */ +} // ref: 0x1000DEDD -_DWORD *UNKCALL SelList_1000DEDD(char *arg) { return 0; } -/* { - char *v1; // esi - _DWORD *result; // eax - - v1 = arg; - result = (_DWORD *)SelHero_1000B7A0(); - while ( result && v1 ) +_uiheroinfo *__fastcall SelList_GetHeroFromNum(int heronum) +{ + _uiheroinfo *result; // eax + + result = SelHero_GetCurrentHeroInfo(); + while ( result && heronum ) { - result = (_DWORD *)*result; - --v1; + result = result->next; + --heronum; } return result; -} */ +} // ref: 0x1000DEF4 -HWND UNKCALL SelList_1000DEF4(HWND hWnd) { return 0; } -/* { - HWND result; // eax - HWND v2; // esi - HWND v3; // edi - int v4; // ebp - HWND v5; // eax - char *v6; // eax - const char *v7; // edi +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 - HWND hWnda; // [esp+10h] [ebp-4h] + _uiheroinfo *v9; // edi + int v10; // eax - hWnda = hWnd; - result = GetParent(hWnd); - v2 = result; - if ( result ) + v1 = GetParent(hWnd); + if ( v1 ) { - result = GetDlgItem(result, 1047); - v3 = result; - if ( result ) + v3 = GetDlgItem(v1, 1047); + if ( v3 ) { - result = (HWND)GetWindowLongA(result, -21); - if ( result ) + v5 = GetWindowLongA(v3, -21); + if ( v5 ) { - v4 = *((_DWORD *)result + 3); - if ( v4 ) + v6 = *(_uiheroinfo **)(v5 + 12); + if ( v6 ) { - if ( v4 == SelHero_1000B7A0() ) + if ( v6 == SelHero_GetCurrentHeroInfo() ) { - v5 = GetDlgItem(v2, 1052); - result = SelList_1000DD36(v5); + v7 = GetDlgItem(v1, 1052); + SelList_ShiftHeroDlgItems(v7); } else { - v6 = (char *)(SelList_1000D9F4(v3) - 6); - if ( (signed int)v6 < 0 ) - v6 = 0; - result = (HWND)SelList_1000DEDD(v6); - v7 = (const char *)result; - if ( result ) + v8 = SelList_GetNextHeroLong(v3) - 6; + if ( v8 < 0 ) + v8 = 0; + v9 = SelList_GetHeroFromNum(v8); + if ( v9 ) { - TitleSnd_10010315(); - SelList_1000DB2C(v2, v7); - v8 = GetWindowLongA(hWnda, -12); - SelList_1000D964(v2, v8); - result = SelList_1000D9CF(v2); + TitleSnd_PlayMoveSound(); + SelList_SetHeroDlgLong(v1, v9); + v10 = GetWindowLongA(hWnd, -12); + SelList_GetHeroStats(v1, v10); + SelList_CountHeroList(v1); } } } } } } - return result; -} */ +} // ref: 0x1000DFAB -HWND UNKCALL SelList_1000DFAB(HWND hWnd) { return 0; } -/* { - HWND v1; // edi - HWND result; // eax - HWND v3; // eax - const char *v4; // ebp +void __fastcall SelList_HeroDlgWithSound(HWND hWnd) +{ + LONG v2; // eax + _uiheroinfo *v3; // eax + HWND v4; // eax HWND v5; // eax - int v6; // ebx - HWND v7; // eax + LONG v6; // eax + _uiheroinfo *v7; // ebp HWND v8; // eax + int v9; // ebx + HWND v10; // eax + HWND v11; // eax - v1 = hWnd; - result = (HWND)GetWindowLongA(hWnd, -21); - if ( result ) + v2 = GetWindowLongA(hWnd, -21); + if ( v2 ) { - result = (HWND)*((_DWORD *)result + 3); - if ( result ) + v3 = *(_uiheroinfo **)(v2 + 12); + if ( v3 ) { - if ( *(_DWORD *)result ) + if ( v3->next ) { - if ( GetWindowLongA(v1, -12) >= 1052 ) + if ( GetWindowLongA(hWnd, -12) >= 1052 ) { - v3 = GetParent(v1); - result = GetDlgItem(v3, 1048); - if ( result ) + v4 = GetParent(hWnd); + v5 = GetDlgItem(v4, 1048); + if ( v5 ) { - result = (HWND)GetWindowLongA(result, -21); - if ( result ) + v6 = GetWindowLongA(v5, -21); + if ( v6 ) { - v4 = (const char *)*((_DWORD *)result + 3); - if ( v4 ) + v7 = *(_uiheroinfo **)(v6 + 12); + if ( v7 ) { - TitleSnd_10010315(); - v5 = GetParent(v1); - SelList_1000DB2C(v5, v4); - v6 = GetWindowLongA(v1, -12); - v7 = GetParent(v1); - SelList_1000D964(v7, v6); - v8 = GetParent(v1); - result = SelList_1000D9CF(v8); + 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 { - result = SelList_1000DD36(v1); + SelList_ShiftHeroDlgItems(hWnd); } } } } - return result; -} */ +} // ref: 0x1000E043 -HWND UNKCALL SelList_1000E043(HWND hWnd) { return 0; } -/* { - HWND v1; // edi - HWND result; // eax - HWND v3; // esi - const char *v4; // ebx +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 - v1 = hWnd; - if ( GetWindowLongA(hWnd, -12) > 1047 ) - return SelList_1000DDA7(v1); - result = (HWND)GetWindowLongA(v1, -21); - if ( result ) + if ( GetWindowLongA(hWnd, -12) <= 1047 ) { - v3 = (HWND)*((_DWORD *)result + 3); - if ( v3 ) + v2 = GetWindowLongA(hWnd, -21); + if ( v2 ) { - result = (HWND)SelHero_1000B7A0(); - v4 = (const char *)result; - if ( v3 != result ) + v3 = *(_uiheroinfo **)(v2 + 12); + if ( v3 ) { - while ( v4 && *(HWND *)v4 != v3 ) - v4 = *(const char **)v4; - TitleSnd_10010315(); - v5 = GetParent(v1); - SelList_1000DB2C(v5, v4); - v6 = GetWindowLongA(v1, -12); - v7 = GetParent(v1); - SelList_1000D964(v7, v6); - v8 = GetParent(v1); - result = SelList_1000D9CF(v8); + 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); + } } } } - return result; -} */ + else + { + SelList_ShiftHeroDlgItm2(hWnd); + } +} // ref: 0x1000E0CA -int __fastcall SelList_1000E0CA(HWND hWnd, int a2, int a3) { return 0; } -/* { - int v3; // ebx - HWND v4; // esi - int v5; // ST08_4 +void __fastcall SelList_ChooseDlgFromSize(HWND hWnd, int width, int height) +{ HWND v6; // eax int v7; // edx - int result; // eax + HWND v8; // eax HWND v9; // eax - HWND v10; // eax - char *v11; // eax + char *v10; // eax + HWND v11; // eax HWND v12; // eax - HWND v13; // eax + int v13; // eax int v14; // eax int v15; // eax - int v16; // eax + HWND v16; // eax HWND v17; // eax HWND v18; // eax HWND v19; // eax - HWND v20; // eax - v3 = a2; - v4 = hWnd; - v5 = a2; v6 = GetDlgItem(hWnd, 1056); - if ( local_10007C3B(v4, v6, v5, a3) ) + if ( local_GetBottomRect(hWnd, v6, width, height) ) { v7 = 1; - return OkCancel_100092F5((int)v4, v7); +LABEL_3: + OkCancel_PlaySndEndDlg(hWnd, v7); + return; } - v9 = GetDlgItem(v4, 1054); - if ( local_10007C3B(v4, v9, v3, a3) ) + v8 = GetDlgItem(hWnd, 1054); + if ( local_GetBottomRect(hWnd, v8, width, height) ) { v7 = 2; - return OkCancel_100092F5((int)v4, v7); + goto LABEL_3; } - v10 = GetDlgItem(v4, 1006); - if ( local_10007C3B(v4, v10, v3, a3) ) + v9 = GetDlgItem(hWnd, 1006); + if ( local_GetBottomRect(hWnd, v9, width, height) ) { - v11 = SelHero_1000B7B3(); - result = strlen(v11); - if ( result ) + v10 = SelHero_GetHeroNameStr(); + if ( strlen(v10) ) { v7 = 1006; - return OkCancel_100092F5((int)v4, v7); + goto LABEL_3; } } else { - v12 = GetDlgItem(v4, 1105); - result = local_10007C3B(v4, v12, v3, a3); - if ( result ) + v11 = GetDlgItem(hWnd, 1105); + if ( local_GetBottomRect(hWnd, v11, width, height) ) { - v13 = GetDlgItem(v4, 1105); - v14 = Sbar_100099DC(v13, v3, a3) - 1; - if ( v14 ) + v12 = GetDlgItem(hWnd, 1105); + v13 = Sbar_NumScrollLines(v12, width, height) - 1; + if ( v13 ) { - v15 = v14 - 1; - if ( v15 ) + v14 = v13 - 1; + if ( v14 ) { - v16 = v15 - 1; - if ( v16 ) + v15 = v14 - 1; + if ( v15 ) { - result = v16 - 1; - if ( !result ) + if ( v15 == 1 ) { - v17 = GetFocus(); - result = (int)SelList_1000DE18(v17); + v16 = GetFocus(); + SelList_HeroesWithBigDialogs(v16); } } else { - v18 = GetFocus(); - result = (int)SelList_1000DEF4(v18); + v17 = GetFocus(); + SelList_HeroesWithHugeDlg(v17); } } else { - v19 = GetFocus(); - result = (int)SelList_1000DFAB(v19); + v18 = GetFocus(); + SelList_HeroDlgWithSound(v18); } } else { - v20 = GetFocus(); - result = (int)SelList_1000E043(v20); + v19 = GetFocus(); + SelList_HeroDlgWithSnd2(v19); } } } - return result; -} */ +} diff --git a/DiabloUI/selload.cpp b/DiabloUI/selload.cpp index 95174654e..952909e61 100644 --- a/DiabloUI/selload.cpp +++ b/DiabloUI/selload.cpp @@ -1,28 +1,28 @@ // ref: 0x1000E1C2 -int __stdcall SelLoad_1000E1C2(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam) { return 0; } -/* { +LRESULT __stdcall SelLoad_WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) +{ HWND v4; // eax - LONG v5; // edx + int v5; // edx HWND v6; // eax HWND v7; // eax HWND v9; // eax if ( Msg == 2 ) { - SelLoad_1000E30E(hDlg); - return SDlgDefDialogProc(hDlg, Msg, wParam, lParam); + SelLoad_DeleteProcsAndSpin(hWnd); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); } if ( Msg <= 0x103 ) - return SDlgDefDialogProc(hDlg, Msg, wParam, lParam); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); if ( Msg <= 0x105 ) { v9 = (HWND)SDrawGetFrameWindow(); SendMessageA(v9, Msg, wParam, lParam); - return SDlgDefDialogProc(hDlg, Msg, wParam, lParam); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); } if ( Msg == 272 ) { - SelLoad_1000E34B(hDlg); + SelLoad_LoadFocusAndMsg(hWnd); return 0; } if ( Msg != 273 ) @@ -31,117 +31,104 @@ int __stdcall SelLoad_1000E1C2(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam { if ( Msg == 513 ) { - v4 = GetDlgItem(hDlg, 1056); - if ( local_10007C3B(hDlg, v4, (unsigned short)lParam, (unsigned int)lParam >> 16) ) + v4 = GetDlgItem(hWnd, 1056); + if ( local_GetBottomRect(hWnd, v4, (unsigned short)lParam, (unsigned int)lParam >> 16) ) { v5 = 1; LABEL_19: - SelLoad_1000E3E2((int)hDlg, v5); - return SDlgDefDialogProc(hDlg, Msg, wParam, lParam); + SelLoad_SelectSndLoad(hWnd, v5); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); } - v6 = GetDlgItem(hDlg, 1054); - if ( local_10007C3B(hDlg, v6, (unsigned short)lParam, (unsigned int)lParam >> 16) ) + v6 = GetDlgItem(hWnd, 1054); + if ( local_GetBottomRect(hWnd, v6, (unsigned short)lParam, (unsigned int)lParam >> 16) ) { LABEL_21: v5 = 2; goto LABEL_19; } } - return SDlgDefDialogProc(hDlg, Msg, wParam, lParam); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); } v7 = GetFocus(); - Focus_100075DC(hDlg, v7); + Focus_DoBlitSpinIncFrame(hWnd, v7); return 0; } if ( HIWORD(wParam) == 7 ) { - Focus_100075B7(hDlg, (HWND)lParam); + Focus_GetAndBlitSpin(hWnd, lParam); } else { if ( HIWORD(wParam) != 6 ) { v5 = 1; - if ( wParam == 327681 ) + if ( HIWORD(wParam) == 5 || (_WORD)wParam == 1 ) goto LABEL_19; if ( (_WORD)wParam != 2 ) - return SDlgDefDialogProc(hDlg, Msg, wParam, lParam); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); goto LABEL_21; } - Focus_10007458((void *)lParam); - Focus_100075DC(hDlg, (HWND)lParam); + Focus_CheckPlayMove(lParam); + Focus_DoBlitSpinIncFrame(hWnd, (HWND)lParam); } - return SDlgDefDialogProc(hDlg, Msg, wParam, lParam); -} */ -// 1001037C: using guessed type int __stdcall SDlgDefDialogProc(_DWORD, _DWORD, _DWORD, _DWORD); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); +} // 10010382: using guessed type _DWORD __stdcall SDrawGetFrameWindow(); // ref: 0x1000E30E -HWND UNKCALL SelLoad_1000E30E(HWND hDlg) { return 0; } -/* { - HWND v1; // esi +void __fastcall SelLoad_DeleteProcsAndSpin(HWND hWnd) +{ HWND v2; // eax - v1 = hDlg; - Focus_100076C3(); - Doom_10006C53(v1, (int *)&unk_100231C0); - Doom_10006C53(v1, (int *)&unk_100231B4); - Doom_10006C53(v1, (int *)&unk_100231AC); - v2 = GetParent(v1); - return SelHero_1000BA7B(v2, 0); -} */ + Focus_DeleteSpinners(); + Doom_DeleteFreeProcs(hWnd, selload_msgtbl3); + Doom_DeleteFreeProcs(hWnd, selload_msgtbl2); + Doom_DeleteFreeProcs(hWnd, selload_msgtbl1); + v2 = GetParent(hWnd); + SelHero_SetStringWithMsg(v2, 0); +} // ref: 0x1000E34B -int UNKCALL SelLoad_1000E34B(HWND hWnd) { return 0; } -/* { - HWND v1; // esi +void __fastcall SelLoad_LoadFocusAndMsg(HWND hWnd) +{ HWND v2; // edi LONG v3; // eax - CHAR Buffer; // [esp+8h] [ebp-20h] + char Buffer[32]; // [esp+8h] [ebp-20h] - v1 = hWnd; v2 = GetParent(hWnd); - LoadStringA(hInstance, 0x1Du, &Buffer, 31); - SelHero_1000BA7B(v2, &Buffer); + LoadStringA(ghUiInst, 0x1Du, Buffer, 31); + SelHero_SetStringWithMsg(v2, Buffer); v3 = GetWindowLongA(v2, -21); - SetWindowLongA(v1, -21, v3); - local_10007CB5(v1, (int *)&unk_100231C0); - Doom_100068AB(v1, (int *)&unk_100231AC, 5); - Doom_1000658C(v1, (int *)&unk_100231B4, 4, 0); - Doom_1000658C(v1, (int *)&unk_100231C0, 2, 1); - Focus_10007719("ui_art\\focus16.pcx"); - return SDlgSetTimer(v1, 1, 55, 0); -} */ -// 10010412: using guessed type int __stdcall SDlgSetTimer(_DWORD, _DWORD, _DWORD, _DWORD); + SetWindowLongA(hWnd, -21, v3); + local_DoUiWndProc(hWnd, (DWORD *)selload_msgtbl3); + Doom_ParseWndProc3(hWnd, selload_msgtbl1, 5); + Doom_ParseWndProcs(hWnd, selload_msgtbl2, 4, 0); + Doom_ParseWndProcs(hWnd, selload_msgtbl3, 2, 1); + Focus_LoadSpinner("ui_art\\focus16.pcx"); + SDlgSetTimer((int)hWnd, 1, 55, 0); +} // ref: 0x1000E3E2 -int __fastcall SelLoad_1000E3E2(int a1, LONG a2) { return 0; } -/* { - LONG v2; // esi - int v3; // edi +void __fastcall SelLoad_SelectSndLoad(HWND hWnd, int a2) +{ + int v2; // esi HWND v4; // eax v2 = a2; - v3 = a1; - TitleSnd_1001031F(); - SDlgKillTimer(v3, 1); + TitleSnd_PlaySelectSound(); + SDlgKillTimer((int)hWnd, 1); if ( v2 == 1 ) { v4 = GetFocus(); v2 = GetWindowLongA(v4, -12); } - return SDlgEndDialog(v3, v2); -} */ -// 10010376: using guessed type int __stdcall SDlgEndDialog(_DWORD, _DWORD); -// 10010418: using guessed type int __stdcall SDlgKillTimer(_DWORD, _DWORD); + SDlgEndDialog(hWnd, (HANDLE)v2); +} // ref: 0x1000E41A -signed int SelLoad_1000E41A() { return 0; } -/* { - signed int result; // eax - - result = 2139095040; - dword_1002A4C8 = 2139095040; - return result; -} */ -// 1002A4C8: using guessed type int dword_1002A4C8; +void __cdecl SelLoad_cpp_init() +{ + SelLoad_cpp_float = SelLoad_cpp_float_value; +} +// 1001F46C: using guessed type int SelLoad_cpp_float_value; +// 1002A4C8: using guessed type int SelLoad_cpp_float; diff --git a/DiabloUI/selregn.cpp b/DiabloUI/selregn.cpp index 8901742e5..c939aac69 100644 --- a/DiabloUI/selregn.cpp +++ b/DiabloUI/selregn.cpp @@ -6,14 +6,14 @@ void *SelRegn_1000EF42() { return 0; } // 10010364: using guessed type int __stdcall SMemAlloc(_DWORD, _DWORD, _DWORD, _DWORD); // ref: 0x1000EF56 -_DWORD *__fastcall SelRegn_1000EF56(int a1, _DWORD *a2) { return 0; } -/* { - _DWORD *result; // eax +_uiheroinfo *__fastcall SelRegn_SetNextHero(_uiheroinfo *pNext, _uiheroinfo *pCurrent) +{ + _uiheroinfo *result; // eax - result = a2; - *a2 = a1; + result = pCurrent; + pCurrent->next = pNext; return result; -} */ +} // ref: 0x1000EF60 signed int SelRegn_1000EF60() { return 0; } diff --git a/DiabloUI/selyesno.cpp b/DiabloUI/selyesno.cpp index fa80a3be1..9ca9e9a78 100644 --- a/DiabloUI/selyesno.cpp +++ b/DiabloUI/selyesno.cpp @@ -1,25 +1,23 @@ // ref: 0x1000FA49 -int __fastcall SelYesNo_1000FA49(int a1, const CHAR *a2, int a3, int a4) { return 0; } -/* { - dword_1002A4F8 = a2; - dword_1002A504 = a3; - dword_1002A500 = a4; - dword_1002A50C = 0; - dword_1002A508 = 0; - return SDlgDialogBoxParam(hInstance, "SELYESNO_DIALOG", a1, SelYesNo_1000FA87, 0); -} */ -// 10010370: using guessed type int __stdcall SDlgDialogBoxParam(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); -// 1002A500: using guessed type int dword_1002A500; -// 1002A504: using guessed type int dword_1002A504; -// 1002A508: using guessed type int (*dword_1002A508)(void); -// 1002A50C: using guessed type int dword_1002A50C; +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 -int __stdcall SelYesNo_1000FA87(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam) { return 0; } -/* { +LRESULT __stdcall SelYesNo_WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) +{ HWND v4; // eax HWND v5; // eax - LONG v7; // edx + int v7; // edx HWND v8; // eax LONG v9; // eax HWND v10; // ecx @@ -27,8 +25,8 @@ int __stdcall SelYesNo_1000FA87(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lPara if ( Msg == 2 ) { - SelYesNo_1000FBC7(hDlg); - return SDlgDefDialogProc(hDlg, Msg, wParam, lParam); + SelYesNo_RemoveYNDialog(hWnd); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); } if ( Msg > 0x103 ) { @@ -36,22 +34,22 @@ int __stdcall SelYesNo_1000FA87(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lPara { v11 = (HWND)SDrawGetFrameWindow(); SendMessageA(v11, Msg, wParam, lParam); - return SDlgDefDialogProc(hDlg, Msg, wParam, lParam); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); } switch ( Msg ) { case 0x110u: - SelYesNo_1000FC1C(hDlg); + SelYesNo_LoadSelYN_GFX(hWnd); return 0; case 0x111u: if ( HIWORD(wParam) == 7 ) { - Focus_100075B7(hDlg, (HWND)lParam); + Focus_GetAndBlitSpin(hWnd, lParam); } else if ( HIWORD(wParam) == 6 ) { - Focus_10007458((void *)lParam); - Focus_100075DC(hDlg, (HWND)lParam); + Focus_CheckPlayMove(lParam); + Focus_DoBlitSpinIncFrame(hWnd, (HWND)lParam); } else { @@ -60,7 +58,7 @@ int __stdcall SelYesNo_1000FA87(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lPara { v8 = GetFocus(); v9 = GetWindowLongA(v8, -12); - v10 = hDlg; + v10 = hWnd; if ( v9 == 1109 ) v7 = 1; else @@ -74,78 +72,72 @@ int __stdcall SelYesNo_1000FA87(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lPara } else if ( (_WORD)wParam != 1109 ) { - return SDlgDefDialogProc(hDlg, Msg, wParam, lParam); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); } - v10 = hDlg; + v10 = hWnd; } - SelYesNo_1000FCF6((int)v10, v7); + SelYesNo_DoSelectYesNo(v10, v7); } break; case 0x113u: v4 = GetFocus(); - if ( !Focus_100075DC(hDlg, v4) ) + if ( !Focus_DoBlitSpinIncFrame(hWnd, v4) ) { - v5 = GetDlgItem(hDlg, 1109); + v5 = GetDlgItem(hWnd, 1109); if ( !v5 ) - v5 = GetDlgItem(hDlg, 2); + v5 = GetDlgItem(hWnd, 2); SetFocus(v5); } return 0; } } - return SDlgDefDialogProc(hDlg, Msg, wParam, lParam); -} */ -// 1001037C: using guessed type int __stdcall SDlgDefDialogProc(_DWORD, _DWORD, _DWORD, _DWORD); + return (LRESULT)SDlgDefDialogProc(hWnd, Msg, (HDC)wParam, (HWND)lParam); +} // 10010382: using guessed type _DWORD __stdcall SDrawGetFrameWindow(); // ref: 0x1000FBC7 -HWND UNKCALL SelYesNo_1000FBC7(HWND hDlg) { return 0; } -/* { +void __fastcall SelYesNo_RemoveYNDialog(HWND hWnd) +{ HWND v1; // esi - _DWORD *v2; // eax - HWND result; // eax - HWND v4; // eax + void **v2; // eax + HWND v3; // eax - v1 = hDlg; - v2 = (_DWORD *)GetWindowLongA(hDlg, -21); - local_10007F72(v2); - if ( dword_1002A500 ) - Focus_100076C3(); - Doom_10006C53(v1, (int *)&unk_100232DC); - result = (HWND)Doom_10006C53(v1, (int *)&unk_100232D4); - if ( dword_1002A504 ) + 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 ) { - v4 = GetParent(v1); - result = SelHero_1000BA7B(v4, 0); + v3 = GetParent(v1); + SelHero_SetStringWithMsg(v3, 0); } - return result; -} */ -// 1002A500: using guessed type int dword_1002A500; -// 1002A504: using guessed type int dword_1002A504; +} +// 1002A500: using guessed type int yesno_remove_focus; // ref: 0x1000FC1C -void UNKCALL SelYesNo_1000FC1C(HWND hWnd) { return; } -/* { - HWND v1; // esi +void __fastcall SelYesNo_LoadSelYN_GFX(HWND hWnd) +{ HWND v2; // eax - int v3; // eax - int *v4; // edi + DWORD *v3; // eax + DWORD *v4; // edi const char *v5; // eax - const CHAR *v6; // ST18_4 + char *v6; // ST18_4 HWND v7; // eax - v1 = hWnd; v2 = GetParent(hWnd); - if ( dword_1002A504 ) - SelHero_1000BA7B(v2, (const char *)dword_1002A504); - v3 = local_10007F46(); - v4 = (int *)v3; + if ( yesno_hero_name ) + SelHero_SetStringWithMsg(v2, yesno_hero_name); + v3 = local_AllocWndLongData(); + v4 = v3; if ( v3 ) { - SetWindowLongA(v1, -21, v3); - if ( dword_1002A50C ) + SetWindowLongA(hWnd, -21, (LONG)v3); + if ( yesno_is_popup ) { - if ( DiabloUI_10005C2A() ) + if ( DiabloUI_GetSpawned() ) v5 = "ui_art\\swmmpop.pcx"; else v5 = "ui_art\\mmpopup.pcx"; @@ -154,97 +146,81 @@ void UNKCALL SelYesNo_1000FC1C(HWND hWnd) { return; } { v5 = "ui_art\\black.pcx"; } - local_10007944((int)v1, 0, "Popup", -1, 1, (int)v5, v4, v4 + 1, 1); + local_LoadArtWithPal(hWnd, 0, "Popup", -1, 1, v5, (BYTE **)v4, v4 + 1, 1); } - v6 = dword_1002A4F8; - v7 = GetDlgItem(v1, 1026); + v6 = yesno_dialog_string; + v7 = GetDlgItem(hWnd, 1026); SetWindowTextA(v7, v6); - Doom_100068AB(v1, (int *)&unk_100232D4, 3); - Doom_1000658C(v1, (int *)&unk_100232DC, 4, 1); - if ( dword_1002A500 ) - Focus_10007719("ui_art\\focus.pcx"); + Doom_ParseWndProc3(hWnd, yesno_msgtbl2, 3); + Doom_ParseWndProcs(hWnd, yesno_msgtbl1, 4, 1); + if ( yesno_remove_focus ) + Focus_LoadSpinner("ui_art\\focus.pcx"); else - Focus_100076FA(); - SDlgSetTimer(v1, 1, 55, 0); - return local_10007DE9(v1, (int *)&unk_100232DC); -} */ -// 10010412: using guessed type int __stdcall SDlgSetTimer(_DWORD, _DWORD, _DWORD, _DWORD); -// 1002A500: using guessed type int dword_1002A500; -// 1002A504: using guessed type int dword_1002A504; -// 1002A50C: using guessed type int dword_1002A50C; + 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 -int __fastcall SelYesNo_1000FCF6(int a1, LONG a2) { return 0; } -/* { - LONG v2; // esi - int v3; // edi +void __fastcall SelYesNo_DoSelectYesNo(HWND hWnd, int option) +{ HWND v4; // eax - v2 = a2; - v3 = a1; - TitleSnd_1001031F(); - SDlgKillTimer(v3, 1); - if ( v2 == 2 ) + TitleSnd_PlaySelectSound(); + SDlgKillTimer((int)hWnd, 1); + if ( option == 2 ) { - if ( !dword_1002A508 ) - return SDlgEndDialog(v3, v2); - dword_1002A508(); + if ( !YesNoFunc ) + goto LABEL_6; + YesNoFunc(); } - if ( v2 == 1 ) + if ( option == 1 ) { v4 = GetFocus(); - v2 = GetWindowLongA(v4, -12); + option = GetWindowLongA(v4, -12); } - return SDlgEndDialog(v3, v2); -} */ -// 10010376: using guessed type int __stdcall SDlgEndDialog(_DWORD, _DWORD); -// 10010418: using guessed type int __stdcall SDlgKillTimer(_DWORD, _DWORD); -// 1002A508: using guessed type int (*dword_1002A508)(void); +LABEL_6: + SDlgEndDialog(hWnd, (HANDLE)option); +} +// 1002A508: using guessed type int (*YesNoFunc)(void); // ref: 0x1000FD39 -int __fastcall SelYesNo_1000FD39(int a1, const CHAR *a2, int a3, int a4) { return 0; } -/* { - dword_1002A4F8 = a2; - dword_1002A504 = a3; - dword_1002A500 = a4; - dword_1002A50C = 0; - dword_1002A508 = 0; - return SDlgDialogBoxParam(hInstance, "SELOK_DIALOG", a1, SelYesNo_1000FA87, 0); -} */ -// 10010370: using guessed type int __stdcall SDlgDialogBoxParam(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); -// 1002A500: using guessed type int dword_1002A500; -// 1002A504: using guessed type int dword_1002A504; -// 1002A508: using guessed type int (*dword_1002A508)(void); -// 1002A50C: using guessed type int dword_1002A50C; +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_1000FD77(int a1, UINT a2, int a3) { return 0; } -/* { - int v3; // esi - CHAR Buffer; // [esp+4h] [ebp-100h] +int __fastcall SelYesNo_SpawnErrDialog(HWND hWnd, int string_rsrc, int is_popup) +{ + char Buffer[256]; // [esp+4h] [ebp-100h] - v3 = a1; - LoadStringA(hInstance, a2, &Buffer, 255); - dword_1002A50C = a3; - dword_1002A500 = 0; - dword_1002A504 = 0; - dword_1002A4F8 = &Buffer; - dword_1002A508 = 0; - return SDlgDialogBoxParam(hInstance, "SPAWNERR_DIALOG", v3, SelYesNo_1000FA87, 0); -} */ -// 10010370: using guessed type int __stdcall SDlgDialogBoxParam(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD); -// 1002A500: using guessed type int dword_1002A500; -// 1002A504: using guessed type int dword_1002A504; -// 1002A508: using guessed type int (*dword_1002A508)(void); -// 1002A50C: using guessed type int dword_1002A50C; + 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 -signed int SelYesNo_1000FDE3() { return 0; } -/* { - signed int result; // eax - - result = 2139095040; - dword_1002A4FC = 2139095040; - return result; -} */ -// 1002A4FC: using guessed type int dword_1002A4FC; +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; diff --git a/Source/control.cpp b/Source/control.cpp index 7f9f13935..b3987e4b8 100644 --- a/Source/control.cpp +++ b/Source/control.cpp @@ -6,7 +6,7 @@ char sgbNextTalkSave; // weak char sgbTalkSavePos; // weak void *pDurIcons; void *pChrButtons; -int drawhpflag; // idb +BOOL drawhpflag; // idb int dropGoldFlag; // weak int panbtn[8]; int chrbtn[4]; @@ -16,7 +16,7 @@ void *pChrPanel; int lvlbtndown; // weak char sgszTalkSave[8][80]; int dropGoldValue; // idb -int drawmanaflag; // idb +BOOL drawmanaflag; // idb int chrbtnactive; // weak char sgszTalkMsg[80]; void *pPanelText; @@ -143,7 +143,7 @@ const unsigned char fontidx[256] = /* data */ -unsigned char SpellITbl[37] = +unsigned char SpellITbl[MAX_SPELLS] = { 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 28, 13, 12, 18, 16, 14, 18, 19, 11, 20, @@ -611,7 +611,7 @@ LABEL_68: v26 *= (__int64)2; v23 = v4; } - while ( (signed int)v20 < (signed int)&spelldata[37].sTownSpell ); + while ( (signed int)v20 < (signed int)&spelldata[MAX_SPELLS].sTownSpell ); if ( v25 && v17 != 636 ) v17 -= 56; if ( v17 == 20 ) @@ -1218,8 +1218,8 @@ void __cdecl InitControlPan() pDurIcons = LoadFileInMem("Items\\DurIcons.CEL", 0); strcpy(infostr, &empty_string); ClearPanel(); - drawhpflag = 1; - drawmanaflag = 1; + drawhpflag = TRUE; + drawmanaflag = TRUE; chrflag = 0; spselflag = 0; pSpellBkCel = LoadFileInMem("Data\\SpellBk.CEL", 0); @@ -1382,7 +1382,7 @@ void __cdecl DoSpeedBook() ++v10; v7 = v4; } - while ( v10 < 37 ); + while ( v10 < MAX_SPELLS ); if ( v3 && v13 != 636 ) v13 -= 56; if ( v13 == 20 ) @@ -2748,11 +2748,11 @@ void __cdecl DrawSpellBook() { v7 = GetSBookTrans(v2, 1u); SetSpellTrans(v7); - DrawSpellCel(395, v8 + 1, (char *)pSBkIconCels, (char)SpellITbl[v2], 37); + DrawSpellCel(395, v8 + 1, (char *)pSBkIconCels, (char)SpellITbl[v2], MAX_SPELLS); if ( v2 == plr[myplr]._pRSpell && v7 == _LOBYTE(plr[myplr]._pRSplType) ) { SetSpellTrans(0); - DrawSpellCel(395, v8 + 1, (char *)pSBkIconCels, 43, 37); + DrawSpellCel(395, v8 + 1, (char *)pSBkIconCels, 43, MAX_SPELLS); } PrintSBookStr(10, v8 - 22, 0, spelldata[v2].sNameText, 0); v3 = GetSBookTrans(v2, 0); diff --git a/Source/control.h b/Source/control.h index c8fceaec4..db1b10ab7 100644 --- a/Source/control.h +++ b/Source/control.h @@ -6,7 +6,7 @@ extern char sgbNextTalkSave; // weak extern char sgbTalkSavePos; // weak extern void *pDurIcons; extern void *pChrButtons; -extern int drawhpflag; // idb +extern BOOL drawhpflag; // idb extern int dropGoldFlag; // weak extern int panbtn[8]; extern int chrbtn[4]; @@ -16,7 +16,7 @@ extern void *pChrPanel; extern int lvlbtndown; // weak extern char sgszTalkSave[8][80]; extern int dropGoldValue; // idb -extern int drawmanaflag; // idb +extern BOOL drawmanaflag; // idb extern int chrbtnactive; // weak extern char sgszTalkMsg[80]; extern void *pPanelText; @@ -131,7 +131,7 @@ extern const unsigned char fontidx[256]; /* data */ -extern unsigned char SpellITbl[37]; +extern unsigned char SpellITbl[MAX_SPELLS]; extern int PanBtnPos[8][5]; extern char *PanBtnHotKey[8]; extern char *PanBtnStr[8]; diff --git a/Source/debug.cpp b/Source/debug.cpp index 03e11200d..022cac0e1 100644 --- a/Source/debug.cpp +++ b/Source/debug.cpp @@ -105,7 +105,7 @@ void __cdecl MaxSpellsCheat() { int i; // ebp - for(i = 1; i < 37; i++) + for(i = 1; i < MAX_SPELLS; i++) { if ( spelldata[i].sBookLvl != -1 ) { diff --git a/Source/init.cpp b/Source/init.cpp index a7c19c19e..05cec1e77 100644 --- a/Source/init.cpp +++ b/Source/init.cpp @@ -280,7 +280,7 @@ void __cdecl init_archives() #ifdef COPYPROT if ( diabdat_mpq ) break; - UiCopyProtError((int)&v1); + UiCopyProtError(&v1); if ( v1 == COPYPROT_CANCEL ) FileErrDlg("diabdat.mpq"); } diff --git a/Source/inv.cpp b/Source/inv.cpp index f70004eaa..cb10e2c08 100644 --- a/Source/inv.cpp +++ b/Source/inv.cpp @@ -1861,7 +1861,7 @@ void __fastcall RemoveInvItem(int pnum, int iv) { if ( plr[pnum]._pRSpell != SPL_INVALID ) { - // BUGFIX: Cast the literal `1` to `UINT64` to make that bitshift 64bit + // BUGFIX: Cast the literal `1` to `unsigned __int64` to make that bitshift 64bit // this causes the last 4 skills to not reset correctly after use if ( !( plr[pnum]._pScrlSpells64 @@ -1885,7 +1885,7 @@ void __fastcall RemoveSpdBarItem(int pnum, int iv) { if ( plr[pnum]._pRSpell != SPL_INVALID ) { - // BUGFIX: Cast the literal `1` to `UINT64` to make that bitshift 64bit + // BUGFIX: Cast the literal `1` to `unsigned __int64` to make that bitshift 64bit // this causes the last 4 skills to not reset correctly after use if ( !( plr[pnum]._pScrlSpells64 diff --git a/Source/items.cpp b/Source/items.cpp index 08b5fa4e5..d6d435bc5 100644 --- a/Source/items.cpp +++ b/Source/items.cpp @@ -775,7 +775,7 @@ void __fastcall CalcPlrItemVals(int p, BOOL Loadgfx) int dadd = 0; // added dexterity int vadd = 0; // added vitality - UINT64 spl = 0; // bitarray for all enabled/active spells + unsigned __int64 spl = 0; // bitarray for all enabled/active spells signed int fr = 0; // fire resistance signed int lr = 0; // lightning resistance @@ -938,7 +938,7 @@ void __fastcall CalcPlrItemVals(int p, BOOL Loadgfx) // check if the current RSplType is a valid/allowed spell if ( plr[p]._pRSplType == RSPLTYPE_CHARGES - && !(spl & ((UINT64)1 << (plr[p]._pRSpell - 1))) ) + && !(spl & ((unsigned __int64)1 << (plr[p]._pRSpell - 1))) ) { plr[p]._pRSpell = SPL_INVALID; plr[p]._pRSplType = RSPLTYPE_INVALID; @@ -1115,8 +1115,8 @@ void __fastcall CalcPlrItemVals(int p, BOOL Loadgfx) } } - drawmanaflag = 1; - drawhpflag = 1; + drawmanaflag = TRUE; + drawhpflag = TRUE; } void __fastcall CalcPlrScrolls(int p) @@ -1883,7 +1883,7 @@ void __fastcall GetBookSpell(int i, int lvl) v3 = i; if ( !lvl ) v2 = lvl + 1; - v4 = random(14, 37) + 1; + v4 = random(14, MAX_SPELLS) + 1; LABEL_13: v6 = 1; while ( v4 > 0 ) @@ -1902,7 +1902,7 @@ LABEL_13: if ( v6 == SPL_HEALOTHER ) v6 = SPL_FLARE; } - if ( v6 == 37 ) + if ( v6 == MAX_SPELLS ) goto LABEL_13; } v7 = v3; @@ -2017,7 +2017,7 @@ void __fastcall GetStaffSpell(int i, int lvl, unsigned char onlygood) l = lvl >> 1; if ( !l ) l = 1; - rv = random(18, 37) + 1; + rv = random(18, MAX_SPELLS) + 1; LABEL_15: s = 1; while ( rv > 0 ) @@ -2035,7 +2035,7 @@ LABEL_15: if ( s == SPL_HEALOTHER ) s = SPL_FLARE; } - if ( s == 37 ) + if ( s == MAX_SPELLS ) goto LABEL_15; } sprintf(istr, "%s of %s", item[i]._iName, spelldata[bs].sNameText); @@ -2434,14 +2434,14 @@ LABEL_79: if ( param1 == 5 ) BYTE1(item[v8]._iFlags) |= 0x40u; LABEL_92: - drawmanaflag = 1; + drawmanaflag = TRUE; break; case IPL_STEALLIFE: if ( param1 == 3 ) BYTE1(item[v8]._iFlags) |= 0x80u; if ( param1 == 5 ) BYTE2(item[v8]._iFlags) |= 1u; - drawhpflag = 1; + drawhpflag = TRUE; break; case IPL_TARGAC: v11 = &item[v8]._iPLEnAc; @@ -4489,7 +4489,7 @@ void __fastcall UseItem(int p, int Mid, int spl) { plr[p]._pHitPoints = plr[p]._pMaxHP; plr[p]._pHPBase = plr[p]._pMaxHPBase; - drawhpflag = 1; + drawhpflag = TRUE; return; } v5 = Mid - 3; @@ -4519,7 +4519,7 @@ void __fastcall UseItem(int p, int Mid, int spl) plr[v9]._pMana = plr[v9]._pMaxMana; plr[v9]._pManaBase = plr[v9]._pMaxManaBase; LABEL_41: - drawmanaflag = 1; + drawmanaflag = TRUE; return; } v10 = p; @@ -4567,7 +4567,7 @@ LABEL_71: *v68 += v65; if ( *v68 > v69 ) *v68 = v69; - drawhpflag = 1; + drawhpflag = TRUE; return; } if ( Mid == IMISC_ELIXVIT ) @@ -4657,11 +4657,11 @@ LABEL_71: plr[v40]._pHitPoints = plr[p]._pMaxHP; plr[v40]._pHPBase = plr[p]._pMaxHPBase; v36 = (plr[p]._pIFlags & 0x8000000) == 0; - drawhpflag = 1; + drawhpflag = TRUE; if ( v36 ) { v41 = plr[v40]._pMaxMana; - drawmanaflag = 1; + drawmanaflag = TRUE; plr[v40]._pMana = v41; plr[v40]._pManaBase = plr[v40]._pMaxManaBase; } @@ -4689,7 +4689,7 @@ LABEL_71: *v50 = v49; v51 = plr[v42]._pMaxMana >> 8; v52 = plr[v42]._pMaxMana >> 8; - drawhpflag = 1; + drawhpflag = TRUE; v53 = (v51 & 0xFFFFFFFE) + 2 * random(40, v52); v54 = plr[v42]._pClass; v55 = 32 * v53; @@ -4709,7 +4709,7 @@ LABEL_71: *v58 += v55; if ( *v58 > v59 ) *v58 = v59; - drawmanaflag = 1; + drawmanaflag = TRUE; } } } diff --git a/Source/missiles.cpp b/Source/missiles.cpp index 89ea2b2e1..0545c8aab 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -1718,7 +1718,7 @@ LABEL_70: if ( v27 != 2 ) { LABEL_78: - drawhpflag = 1; + drawhpflag = TRUE; return 1; } v28 = PS_MAGE69; @@ -3563,7 +3563,7 @@ void __fastcall AddFlare(int mi, int sx, int sy, int dx, int dy, int midir, int { UseMana(id, 35); v14 = id; - drawhpflag = 1; + drawhpflag = TRUE; plr[v14]._pHPBase -= 320; plr[v14]._pHitPoints -= 320; if ( plr[id]._pHitPoints <= 0 ) @@ -3898,7 +3898,7 @@ void __fastcall AddHeal(int mi, int sx, int sy, int dx, int dy, int midir, int m *v17 = v18; UseMana(id, 2); missile[i]._miDelFlag = 1; - drawhpflag = 1; + drawhpflag = TRUE; } void __fastcall AddHealOther(int mi, int sx, int sy, int dx, int dy, int midir, int mienemy, int id, int dam) @@ -4452,7 +4452,7 @@ void __fastcall AddBoneSpirit(int mi, int sx, int sy, int dx, int dy, int midir, { UseMana(id, 36); v13 = id; - drawhpflag = 1; + drawhpflag = TRUE; plr[v13]._pHPBase -= 384; plr[v13]._pHitPoints -= 384; if ( plr[id]._pHitPoints <= 0 ) @@ -5716,8 +5716,8 @@ void __fastcall MI_Manashield(int i) } if ( v10 < 0 ) v10 = 0; - drawmanaflag = 1; - drawhpflag = 1; + drawmanaflag = TRUE; + drawhpflag = TRUE; if ( v8 >= v10 ) { plr[v2]._pHitPoints = v9; diff --git a/Source/msg.cpp b/Source/msg.cpp index e5e25d2a1..f1b7adf7b 100644 --- a/Source/msg.cpp +++ b/Source/msg.cpp @@ -3202,7 +3202,7 @@ int __fastcall On_PLRDAMAGE(struct TCmdDamage *pCmd, int pnum) v4 = plr[myplr]._pHitPoints; if ( (signed int)(v4 & 0xFFFFFFC0) > 0 ) { - drawhpflag = 1; + drawhpflag = TRUE; plr[v3]._pHitPoints = v4 - pCmd->dwDam; v5 = &plr[v3]._pHPBase; *v5 -= pCmd->dwDam; diff --git a/Source/multi.cpp b/Source/multi.cpp index 571698a00..fdba5e6f4 100644 --- a/Source/multi.cpp +++ b/Source/multi.cpp @@ -826,14 +826,14 @@ int __fastcall NetInit(int bSinglePlayer, int *pfExitProgram) memset(&UiData, 0, 0x50u); UiData.size = 80; UiData.parentwindow = SDrawGetFrameWindow(0); - UiData.artcallback = UiArtCallback; - UiData.createcallback = UiCreateGameCallback; - UiData.drawdesccallback = UiDrawDescCallback; - UiData.messageboxcallback = UiMessageBoxCallback; - UiData.soundcallback = UiSoundCallback; - UiData.authcallback = UiAuthCallback; - UiData.getdatacallback = UiGetDataCallback; - UiData.categorycallback = UiCategoryCallback; + UiData.artcallback = (void (__cdecl *)())UiArtCallback; + UiData.createcallback = (void (__cdecl *)())UiCreateGameCallback; + UiData.drawdesccallback = (void (__cdecl *)())UiDrawDescCallback; + UiData.messageboxcallback = (void (__cdecl *)())UiMessageBoxCallback; + UiData.soundcallback = (void (__cdecl *)())UiSoundCallback; + UiData.authcallback = (void (__cdecl *)())UiAuthCallback; + UiData.getdatacallback = (void (__cdecl *)())UiGetDataCallback; + UiData.categorycallback = (void (__cdecl *)())UiCategoryCallback; UiData.selectnamecallback = (void (__cdecl *)())mainmenu_select_hero_dialog; UiData.changenamecallback = (void (__cdecl *)())mainmenu_create_hero; UiData.profilebitmapcallback = UiProfileDraw; diff --git a/Source/objects.cpp b/Source/objects.cpp index df789e52e..bb3edb65a 100644 --- a/Source/objects.cpp +++ b/Source/objects.cpp @@ -2862,7 +2862,7 @@ void __fastcall Obj_BCrossDamage(int i) { SyncPlrKill(myplr, 0); LABEL_15: - drawhpflag = 1; + drawhpflag = TRUE; return; } v5 = plr[v1]._pClass; @@ -5275,10 +5275,10 @@ LABEL_47: v57 *= 2; ++v59; } - while ( v59 <= 37 ); + while ( v59 <= MAX_SPELLS ); do { - v60 = random(0, 37); + v60 = random(0, MAX_SPELLS); v7 = v60; } while ( !(plr[v53]._pMemSpells[1] & ((unsigned __int64)((__int64)1 << v60) >> 32) | plr[v53]._pMemSpells[0] & (unsigned int)((__int64)1 << v60)) ); diff --git a/Source/pack.cpp b/Source/pack.cpp index a5c601941..12d3b432a 100644 --- a/Source/pack.cpp +++ b/Source/pack.cpp @@ -50,7 +50,7 @@ void __fastcall PackPlayer(PkPlayerStruct *pPack, int pnum, bool manashield) pPack->pMemSpells = pPlayer->_pMemSpells[0]; pPack->pMemSpells2 = pPlayer->_pMemSpells[1]; - for(i = 0; i < 37; i++) + for(i = 0; i < MAX_SPELLS; i++) pPack->pSplLvl[i] = pPlayer->_pSplLvl[i]; pki = pPack->InvBody; @@ -199,7 +199,7 @@ void __fastcall UnPackPlayer(PkPlayerStruct *pPack, int pnum, bool killok) pPlayer->_pMemSpells[0] = pPack->pMemSpells; pPlayer->_pMemSpells[1] = pPack->pMemSpells2; - for(i = 0; i < 37; i++) + for(i = 0; i < MAX_SPELLS; i++) pPlayer->_pSplLvl[i] = pPack->pSplLvl[i]; pki = pPack->InvBody; diff --git a/Source/pfile.cpp b/Source/pfile.cpp index 5cba7da25..04fea7a06 100644 --- a/Source/pfile.cpp +++ b/Source/pfile.cpp @@ -288,7 +288,7 @@ char __fastcall game_2_ui_class(PlayerStruct *p) return result; } -bool __stdcall pfile_ui_set_hero_infos(void (__stdcall *ui_add_hero_info)(_uiheroinfo *)) +BOOL __stdcall pfile_ui_set_hero_infos(BOOL (__stdcall *ui_add_hero_info)(_uiheroinfo *)) { char *v1; // esi //int v2; // eax @@ -507,7 +507,7 @@ bool __fastcall pfile_archive_contains_game(void *hsArchive) } // 679660: using guessed type char gbMaxPlayers; -bool __stdcall pfile_ui_set_class_stats(int player_class_nr, _uidefaultstats *class_stats) +BOOL __stdcall pfile_ui_set_class_stats(int player_class_nr, _uidefaultstats *class_stats) { int v2; // eax @@ -530,7 +530,7 @@ int __fastcall pfile_get_player_class(int player_class_nr) return result; } -bool __stdcall pfile_ui_save_create(_uiheroinfo *heroinfo) +BOOL __stdcall pfile_ui_save_create(_uiheroinfo *heroinfo) { unsigned int v1; // edi //int v3; // eax @@ -609,7 +609,7 @@ LABEL_10: } // 679660: using guessed type char gbMaxPlayers; -bool __stdcall pfile_delete_save(_uiheroinfo *hero_info) +BOOL __stdcall pfile_delete_save(_uiheroinfo *hero_info) { unsigned int v1; // eax char FileName[260]; // [esp+0h] [ebp-104h] diff --git a/Source/pfile.h b/Source/pfile.h index 6b5553fc8..a4b0e87e8 100644 --- a/Source/pfile.h +++ b/Source/pfile.h @@ -21,17 +21,17 @@ int __fastcall pfile_create_save_file(char *name_1, char *name_2); void __cdecl pfile_flush_W(); void __fastcall game_2_ui_player(PlayerStruct *p, _uiheroinfo *heroinfo, bool bHasSaveFile); char __fastcall game_2_ui_class(PlayerStruct *p); -bool __stdcall pfile_ui_set_hero_infos(void (__stdcall *ui_add_hero_info)(_uiheroinfo *)); +BOOL __stdcall pfile_ui_set_hero_infos(BOOL (__stdcall *ui_add_hero_info)(_uiheroinfo *)); char *__fastcall GetSaveDirectory(char *dst, int dst_size, int save_num); bool __fastcall pfile_read_hero(void *archive, PkPlayerStruct *pPack); void *__fastcall pfile_open_save_archive(int *unused, int save_num); void __fastcall pfile_SFileCloseArchive(void *hsArchive); bool __fastcall pfile_archive_contains_game(void *hsArchive); -bool __stdcall pfile_ui_set_class_stats(int player_class_nr, _uidefaultstats *class_stats); +BOOL __stdcall pfile_ui_set_class_stats(int player_class_nr, _uidefaultstats *class_stats); int __fastcall pfile_get_player_class(int player_class_nr); -bool __stdcall pfile_ui_save_create(_uiheroinfo *heroinfo); +BOOL __stdcall pfile_ui_save_create(_uiheroinfo *heroinfo); bool __stdcall pfile_get_file_name(int lvl, char *dst); -bool __stdcall pfile_delete_save(_uiheroinfo *hero_info); +BOOL __stdcall pfile_delete_save(_uiheroinfo *hero_info); void __cdecl pfile_read_player_from_save(); void __fastcall GetTempLevelNames(char *szTemp); void __fastcall GetPermLevelNames(char *szPerm); diff --git a/Source/player.cpp b/Source/player.cpp index bd65d4fcd..a39872365 100644 --- a/Source/player.cpp +++ b/Source/player.cpp @@ -711,7 +711,7 @@ void __fastcall NextPlrLevel(int pnum) plr[pnum]._pHPBase = plr[pnum]._pMaxHPBase; if ( pnum == myplr ) { - drawhpflag = 1; + drawhpflag = TRUE; } int mana = c != PC_WARRIOR ? 128 : 64; @@ -727,7 +727,7 @@ void __fastcall NextPlrLevel(int pnum) } if ( pnum == myplr ) { - drawmanaflag = 1; + drawmanaflag = TRUE; } } // 679660: using guessed type char gbMaxPlayers; @@ -1489,7 +1489,7 @@ void __fastcall StartPlrBlock(int pnum, int dir) void __fastcall StartSpell(int pnum, int d, int cx, int cy) { - if ( (unsigned int)pnum >= MAX_PLRS ) + if ( (DWORD)pnum >= MAX_PLRS ) TermMsg("StartSpell: illegal player %d", pnum); if ( plr[pnum]._pInvincible && !plr[pnum]._pHitPoints && pnum == myplr ) { @@ -1632,7 +1632,7 @@ void __fastcall StartPlrHit(int pnum, int dam, BOOL forcehit) PlaySfxLoc(PS_MAGE69, plr[pnum].WorldX, plr[pnum].WorldY); } - drawhpflag = 1; + drawhpflag = TRUE; if ( dam >> 6 >= plr[pnum]._pLevel || forcehit ) { int dir = plr[pnum]._pdir; @@ -1739,7 +1739,7 @@ void __fastcall StartPlayerKill(int pnum, int earflag) SetPlayerOld(pnum); if ( pnum == myplr ) { - drawhpflag = 1; + drawhpflag = TRUE; deathdelay = 30; if ( pcurs >= CURSOR_FIRSTITEM ) { @@ -2366,7 +2366,7 @@ BOOL __fastcall PM_DoWalk3(int pnum) if ( plr[pnum]._pVar8 == vel ) { dPlayer[plr[pnum].WorldX][plr[pnum].WorldY] = 0; - dFlags[plr[pnum]._pVar4][plr[pnum]._pVar5] &= 0xDFu; + dFlags[plr[pnum]._pVar4][plr[pnum]._pVar5] &= 0xDF; plr[pnum].WorldX = plr[pnum]._pVar1; plr[pnum].WorldY = plr[pnum]._pVar2; dPlayer[plr[pnum]._pVar1][plr[pnum]._pVar2] = pnum + 1; @@ -2421,7 +2421,7 @@ BOOL __fastcall WeaponDur(int pnum, int durrnd) } plr[pnum].InvBody[INVLOC_HAND_LEFT]._iDurability--; - if ( plr[pnum].InvBody[INVLOC_HAND_LEFT]._iDurability != 0) { + if ( plr[pnum].InvBody[INVLOC_HAND_LEFT]._iDurability == 0) { NetSendCmdDelItem(TRUE, INVLOC_HAND_LEFT); plr[pnum].InvBody[INVLOC_HAND_LEFT]._itype = ITYPE_NONE; CalcPlrInv(pnum, TRUE); @@ -2435,7 +2435,7 @@ BOOL __fastcall WeaponDur(int pnum, int durrnd) } plr[pnum].InvBody[INVLOC_HAND_RIGHT]._iDurability--; - if ( plr[pnum].InvBody[INVLOC_HAND_RIGHT]._iDurability != 0 ) { + if ( plr[pnum].InvBody[INVLOC_HAND_RIGHT]._iDurability == 0 ) { NetSendCmdDelItem(TRUE, INVLOC_HAND_RIGHT); plr[pnum].InvBody[INVLOC_HAND_RIGHT]._itype = ITYPE_NONE; CalcPlrInv(pnum, TRUE); @@ -2449,7 +2449,7 @@ BOOL __fastcall WeaponDur(int pnum, int durrnd) } plr[pnum].InvBody[INVLOC_HAND_RIGHT]._iDurability--; - if ( plr[pnum].InvBody[INVLOC_HAND_RIGHT]._iDurability != 0 ) { + if ( plr[pnum].InvBody[INVLOC_HAND_RIGHT]._iDurability == 0 ) { NetSendCmdDelItem(TRUE, INVLOC_HAND_RIGHT); plr[pnum].InvBody[INVLOC_HAND_RIGHT]._itype = ITYPE_NONE; CalcPlrInv(pnum, TRUE); @@ -2458,14 +2458,16 @@ BOOL __fastcall WeaponDur(int pnum, int durrnd) } if ( plr[pnum].InvBody[INVLOC_HAND_RIGHT]._itype == ITYPE_NONE && plr[pnum].InvBody[INVLOC_HAND_LEFT]._itype == ITYPE_SHIELD ) { - if ( plr[pnum].InvBody[INVLOC_HAND_LEFT]._iDurability != 255 ) { - plr[pnum].InvBody[INVLOC_HAND_LEFT]._iDurability--; - if ( plr[pnum].InvBody[INVLOC_HAND_LEFT]._iDurability != 0 ) { - NetSendCmdDelItem(TRUE, INVLOC_HAND_LEFT); - plr[pnum].InvBody[INVLOC_HAND_LEFT]._itype = ITYPE_NONE; - CalcPlrInv(pnum, TRUE); - return TRUE; - } + if ( plr[pnum].InvBody[INVLOC_HAND_LEFT]._iDurability == 255 ) { + return FALSE; + } + + plr[pnum].InvBody[INVLOC_HAND_LEFT]._iDurability--; + if ( plr[pnum].InvBody[INVLOC_HAND_LEFT]._iDurability == 0 ) { + NetSendCmdDelItem(TRUE, INVLOC_HAND_LEFT); + plr[pnum].InvBody[INVLOC_HAND_LEFT]._itype = ITYPE_NONE; + CalcPlrInv(pnum, TRUE); + return TRUE; } } @@ -2623,7 +2625,7 @@ LABEL_40: if ( plr[v9]._pHPBase > v30 ) *v31 = v30; v5 = v43; - drawhpflag = 1; + drawhpflag = TRUE; } else { @@ -2649,7 +2651,7 @@ LABEL_40: *v36 = v35; v5 = v43; v32 = v46; - drawmanaflag = 1; + drawmanaflag = TRUE; } if ( v32 & 0x18000 ) { @@ -2669,7 +2671,7 @@ LABEL_40: *v39 = v40; BYTE1(v32) = BYTE1(v46); v5 = v43; - drawhpflag = 1; + drawhpflag = TRUE; } if ( v32 & 0x100 ) *(int *)((char *)&monster[0]._mFlags + v5) |= 8u; @@ -2781,7 +2783,7 @@ BOOL __fastcall PlrHitPlr(int pnum, char p) if ( plr[pnum]._pHPBase > plr[pnum]._pMaxHPBase ) { plr[pnum]._pHPBase = plr[pnum]._pMaxHPBase; } - drawhpflag = 1; + drawhpflag = TRUE; } if ( pnum == myplr ) { NetSendCmdDamage(TRUE, p, skdam); @@ -2813,7 +2815,7 @@ BOOL __fastcall PlrHitObj(int pnum, int mx, int my) return FALSE; } -int __fastcall PM_DoAttack(int pnum) +BOOL __fastcall PM_DoAttack(int pnum) { int v1; // esi int v2; // esi @@ -3062,7 +3064,7 @@ BOOL __fastcall PM_DoSpell(int pnum) if ( !plr[pnum]._pSplFrom ) { if ( plr[pnum]._pRSplType == RSPLTYPE_SCROLL) { if ( !(plr[pnum]._pScrlSpells64 - & (UINT64)1 << (plr[pnum]._pRSpell - 1)) + & (unsigned __int64)1 << (plr[pnum]._pRSpell - 1)) ) { plr[pnum]._pRSpell = SPL_INVALID; plr[pnum]._pRSplType = RSPLTYPE_INVALID; @@ -3072,7 +3074,7 @@ BOOL __fastcall PM_DoSpell(int pnum) if ( plr[pnum]._pRSplType == RSPLTYPE_CHARGES) { if ( !(plr[pnum]._pISpells64 - & (UINT64)1 << (plr[pnum]._pRSpell - 1)) + & (unsigned __int64)1 << (plr[pnum]._pRSpell - 1)) ) { plr[pnum]._pRSpell = SPL_INVALID; plr[pnum]._pRSplType = RSPLTYPE_INVALID; @@ -3101,7 +3103,7 @@ BOOL __fastcall PM_DoSpell(int pnum) // 52571C: using guessed type int drawpanflag; // 5BB1ED: using guessed type char leveltype; -int __fastcall PM_DoGotHit(int pnum) +BOOL __fastcall PM_DoGotHit(int pnum) { int v1; // esi int v2; // eax @@ -3188,7 +3190,7 @@ LABEL_23: } } -int __fastcall PM_DoDeath(int pnum) +BOOL __fastcall PM_DoDeath(int pnum) { int v1; // edi int v2; // esi @@ -3765,210 +3767,149 @@ BOOL __fastcall PlrDeathModeOK(int pnum) void __cdecl ValidatePlayer() { - int v0; // edi - int v1; // esi - char *v2; // eax - int v3; // ecx - int v4; // ecx - int *v5; // eax - int v6; // eax - int v7; // edx - int v8; // edx - int v9; // edx - int v10; // eax - int *v11; // ebx - signed int v12; // edi - char *v13; // eax - __int64 v14; // [esp+Ch] [ebp-8h] + __int64 msk = 0; - v0 = 0; - v14 = (__int64)0; - if ( (unsigned int)myplr >= 4 ) + if ( (DWORD)myplr >= MAX_PLRS ) { TermMsg("ValidatePlayer: illegal player %d", myplr); - v1 = myplr; - v2 = &plr[myplr]._pLevel; - if ( *v2 > 50 ) - *v2 = 50; - v3 = plr[v1]._pNextExper; - if ( plr[v1]._pExperience > v3 ) - plr[v1]._pExperience = v3; - v4 = 0; - if ( plr[v1]._pNumInv > 0 ) - { - v5 = &plr[v1].InvList[0]._ivalue; - do - { - if ( *(v5 - 47) == 11 ) - { - if ( *v5 > 5000 ) - *v5 = 5000; - v4 += *v5; + } + if ( plr[myplr]._pLevel > 50 ) + plr[myplr]._pLevel = 50; + if ( plr[myplr]._pExperience > plr[myplr]._pNextExper ) + plr[myplr]._pExperience = plr[myplr]._pNextExper; + + int gt = 0; + for ( int i = 0; i < plr[myplr]._pNumInv; i++ ) { + if ( plr[myplr].InvList[i]._itype == ITYPE_GOLD ) { + if ( plr[myplr].InvList[i]._ivalue > 5000 ) { + plr[myplr].InvList[i]._ivalue = 5000; } - ++v0; - v5 += 92; + gt += plr[myplr].InvList[i]._ivalue; } - while ( v0 < plr[v1]._pNumInv ); - } - if ( v4 != plr[v1]._pGold ) - plr[v1]._pGold = v4; - v6 = SLOBYTE(plr[v1]._pClass); - v7 = MaxStats[v6][0]; - if ( plr[v1]._pBaseStr > v7 ) - plr[v1]._pBaseStr = v7; - v8 = MaxStats[v6][1]; - if ( plr[v1]._pBaseMag > v8 ) - plr[v1]._pBaseMag = v8; - v9 = MaxStats[v6][2]; - if ( plr[v1]._pBaseDex > v9 ) - plr[v1]._pBaseDex = v9; - v10 = MaxStats[v6][3]; - if ( plr[v1]._pBaseVit > v10 ) - plr[v1]._pBaseVit = v10; - v11 = &spelldata[1].sBookLvl; - v12 = 1; - do - { - if ( *v11 != -1 ) - { - v14 |= (__int64)1 << ((unsigned char)v12 - 1); - v13 = &plr[v1]._pSplLvl[v12]; - if ( *v13 > 15 ) - *v13 = 15; + } + if ( gt != plr[myplr]._pGold ) + plr[myplr]._pGold = gt; + + int pc = plr[myplr]._pClass; + if ( plr[myplr]._pBaseStr > MaxStats[pc][ATTRIB_STR] ) { + plr[myplr]._pBaseStr = MaxStats[pc][ATTRIB_STR]; + } + if ( plr[myplr]._pBaseMag > MaxStats[pc][ATTRIB_MAG] ) { + plr[myplr]._pBaseMag = MaxStats[pc][ATTRIB_MAG]; + } + if ( plr[myplr]._pBaseDex > MaxStats[pc][ATTRIB_DEX] ) { + plr[myplr]._pBaseDex = MaxStats[pc][ATTRIB_DEX]; + } + if ( plr[myplr]._pBaseVit > MaxStats[pc][ATTRIB_VIT] ) { + plr[myplr]._pBaseVit = MaxStats[pc][ATTRIB_VIT]; + } + + for ( int b = 1; b < MAX_SPELLS; b++) { + if ( spelldata[b].sBookLvl != -1 ) { + msk |= (__int64)1 << (b - 1); + if ( plr[myplr]._pSplLvl[b] > 15 ) + plr[myplr]._pSplLvl[b] = 15; } - v11 += 14; - ++v12; } - while ( (signed int)v11 < (signed int)&spelldata[37].sBookLvl ); - *(_QWORD *)plr[v1]._pMemSpells &= v14; + + plr[myplr]._pMemSpells64 &= msk; } void __cdecl ProcessPlayers() { - int v0; // eax - int v1; // eax - unsigned char *v2; // ecx - char v3; // al - int v4; // ebp - int *v5; // esi - int v6; // eax - //int v7; // eax - int v8; // eax - int v9; // eax - int v10; // eax - int v11; // edi - int v12; // eax - char *v13; // eax - char *v14; // eax - - v0 = myplr; - if ( (unsigned int)myplr >= 4 ) - { + if ( (DWORD)myplr >= MAX_PLRS ) { TermMsg("ProcessPlayers: illegal player %d", myplr); - v0 = myplr; } - v1 = v0; - v2 = &plr[v1].pLvlLoad; - v3 = plr[v1].pLvlLoad; - if ( v3 ) - *v2 = v3 - 1; - v4 = 0; - if ( sfxdelay > 0 && !--sfxdelay ) - PlaySFX(sfxdnum); + + if ( plr[myplr].pLvlLoad ) { + plr[myplr].pLvlLoad--; + } + + if ( sfxdelay > 0 ) { + sfxdelay--; + if ( sfxdelay == 0 ) { + PlaySFX(sfxdnum); + } + } + ValidatePlayer(); - v5 = &plr[0]._pHitPoints; - do - { - v6 = (int)(v5 - 89); - if ( *((_BYTE *)v5 - 379) && currlevel == *(_DWORD *)v6 && (v4 == myplr || !*(_BYTE *)(v6 + 267)) ) - { - CheckCheatStats(v4); - //_LOBYTE(v7) = PlrDeathModeOK(v4); - if ( !PlrDeathModeOK(v4) && (signed int)(*v5 & 0xFFFFFFC0) <= 0 ) - SyncPlrKill(v4, -1); - if ( v4 == myplr ) - { - if ( v5[5294] & 0x40 && currlevel ) - { - *v5 -= 4; - v8 = *v5; - *(v5 - 2) -= 4; - if ( (signed int)(v8 & 0xFFFFFFC0) <= 0 ) - SyncPlrKill(v4, 0); - drawhpflag = 1; - } - if ( *((_BYTE *)v5 + 21179) & 8 ) - { - v9 = v5[3]; - if ( v9 > 0 ) - { - v10 = v9 - v5[5]; - v5[5] = 0; - drawmanaflag = 1; - v5[3] = v10; + + for ( int pnum = 0; pnum < MAX_PLRS; pnum++ ) { + if ( plr[pnum].plractive && currlevel == plr[pnum].plrlevel && (pnum == myplr || !plr[pnum]._pLvlChanging) ) { + CheckCheatStats(pnum); + + if ( !PlrDeathModeOK(pnum) && (plr[pnum]._pHitPoints >> 6) <= 0 ) { + SyncPlrKill(pnum, -1); + } + + if ( pnum == myplr ) { + if ( plr[pnum]._pIFlags & ISPL_DRAINLIFE ) { + plr[pnum]._pHitPoints -= 4; + plr[pnum]._pHPBase -= 4; + if ( (plr[pnum]._pHitPoints >> 6) <= 0 ) { + SyncPlrKill(pnum, 0); } + drawhpflag = TRUE; + } + if ( plr[pnum]._pIFlags & ISPL_NOMANA && plr[pnum]._pManaBase > 0 ) { + plr[pnum]._pManaBase -= plr[pnum]._pMana; + plr[pnum]._pMana = 0; + drawmanaflag = TRUE; } } - v11 = 0; - do - { - switch ( *(v5 - 102) ) + + BOOL tplayer = FALSE; + do { + switch ( plr[pnum]._pmode ) { case PM_STAND: - v12 = PM_DoStand(v4); - goto LABEL_38; + tplayer = PM_DoStand(pnum); + break; case PM_WALK: - v12 = PM_DoWalk(v4); - goto LABEL_38; + tplayer = PM_DoWalk(pnum); + break; case PM_WALK2: - v12 = PM_DoWalk2(v4); - goto LABEL_38; + tplayer = PM_DoWalk2(pnum); + break; case PM_WALK3: - v12 = PM_DoWalk3(v4); - goto LABEL_38; + tplayer = PM_DoWalk3(pnum); + break; case PM_ATTACK: - v12 = PM_DoAttack(v4); - goto LABEL_38; + tplayer = PM_DoAttack(pnum); + break; case PM_RATTACK: - v12 = PM_DoRangeAttack(v4); - goto LABEL_38; + tplayer = PM_DoRangeAttack(pnum); + break; case PM_BLOCK: - v12 = PM_DoBlock(v4); - goto LABEL_38; + tplayer = PM_DoBlock(pnum); + break; case PM_GOTHIT: - v12 = PM_DoGotHit(v4); - goto LABEL_38; + tplayer = PM_DoGotHit(pnum); + break; case PM_DEATH: - v12 = PM_DoDeath(v4); - goto LABEL_38; + tplayer = PM_DoDeath(pnum); + break; case PM_SPELL: - v12 = PM_DoSpell(v4); - goto LABEL_38; + tplayer = PM_DoSpell(pnum); + break; case PM_NEWLVL: - v12 = PM_DoStand(v4); -LABEL_38: - v11 = v12; + tplayer = PM_DoStand(pnum); break; default: break; } - CheckNewPath(v4); - } - while ( v11 ); - v13 = (char *)(v5 - 69); - ++*(_DWORD *)v13; - if ( *(v5 - 69) > *(v5 - 70) ) - { - *(_DWORD *)v13 = 0; - v14 = (char *)(v5 - 67); - ++*(_DWORD *)v14; - if ( *(v5 - 67) > *(v5 - 68) ) - *(_DWORD *)v14 = 1; + CheckNewPath(pnum); + } while ( tplayer ); + + plr[pnum]._pAnimCnt++; + if ( plr[pnum]._pAnimDelay < plr[pnum]._pAnimCnt ) { + plr[pnum]._pAnimCnt = 0; + plr[pnum]._pAnimFrame++; + if ( plr[pnum]._pAnimLen < plr[pnum]._pAnimFrame ) { + plr[pnum]._pAnimFrame = 1; + } } } - v5 += 5430; - ++v4; } - while ( (signed int)v5 < (signed int)&plr[MAX_PLRS]._pHitPoints ); } // 52A554: using guessed type int sfxdelay; @@ -4318,84 +4259,52 @@ LABEL_19: void __fastcall SyncInitPlrPos(int pnum) { - int v1; // esi - bool v2; // zf - unsigned int v3; // eax - int v4; // ebx - int v5; // edi - int v6; // eax - signed int v7; // [esp+Ch] [ebp-18h] - int p; // [esp+10h] [ebp-14h] - int v9; // [esp+14h] [ebp-10h] - signed int v10; // [esp+18h] [ebp-Ch] - signed int v11; // [esp+1Ch] [ebp-8h] - unsigned int i; // [esp+20h] [ebp-4h] - signed int v13; // [esp+20h] [ebp-4h] + plr[pnum]._ptargx = plr[pnum].WorldX; + plr[pnum]._ptargy = plr[pnum].WorldY; - p = pnum; - v1 = pnum; - v2 = gbMaxPlayers == 1; - plr[v1]._ptargx = plr[pnum].WorldX; - plr[v1]._ptargy = plr[pnum].WorldY; - if ( !v2 && plr[v1].plrlevel == currlevel ) - { - v3 = 0; - for ( i = 0; ; v3 = i ) - { - v4 = plr[v1].WorldX + *(int *)((char *)plrxoff2 + v3); - v5 = plr[v1].WorldY + *(int *)((char *)plryoff2 + v3); - if ( PosOkPlayer(p, v4, v5) ) - break; - i += 4; - if ( i >= 0x20 ) - break; + if ( gbMaxPlayers == 1 || plr[pnum].plrlevel != currlevel ) { + return; + } + + int x; + int y; + for ( DWORD i = 0; i < 8; i++ ) { + x = plr[pnum].WorldX + plrxoff2[i]; + y = plr[pnum].WorldY + plryoff2[i]; + if ( PosOkPlayer(pnum, x, y) ) { + break; } - if ( !PosOkPlayer(p, v4, v5) ) - { - v11 = 0; - v6 = -1; - v13 = 1; - v7 = -1; - do - { - if ( v11 ) - break; - v9 = v6; - while ( v6 <= v13 && !v11 ) - { - v5 = v9 + plr[v1].WorldY; - v10 = v7; - do - { - if ( v11 ) - break; - v4 = v10 + plr[v1].WorldX; - if ( PosOkPlayer(p, v10 + plr[v1].WorldX, v5) && !PosOkPortal(currlevel, v4, v5) ) - v11 = 1; - ++v10; + } + + if ( !PosOkPlayer(pnum, x, y) ) { + BOOL posOk = FALSE; + int xx; + int yy; + for ( int range = 1; range < 50 && !posOk; range++ ) { + for ( yy = -range; yy <= range && !posOk; yy++ ) { + y = yy + plr[pnum].WorldY; + for ( xx = -range; xx <= range && !posOk; xx++ ) { + x = xx + plr[pnum].WorldX; + if ( PosOkPlayer(pnum, x, y) && !PosOkPortal(currlevel, x, y) ) { + posOk = TRUE; } - while ( v10 <= v13 ); - v6 = ++v9; } - ++v13; - v6 = v7-- - 1; } - while ( v7 > -50 ); - } - plr[v1].WorldX = v4; - v2 = p == myplr; - plr[v1].WorldY = v5; - dPlayer[v4][v5] = p + 1; - if ( v2 ) - { - plr[v1]._px = v4; - plr[v1]._py = v5; - plr[v1]._ptargx = v4; - plr[v1]._ptargy = v5; - ViewX = v4; - ViewY = v5; } } + + plr[pnum].WorldX = x; + plr[pnum].WorldY = y; + dPlayer[x][y] = pnum + 1; + + if ( pnum == myplr ) { + plr[pnum]._px = x; + plr[pnum]._py = y; + plr[pnum]._ptargx = x; + plr[pnum]._ptargy = y; + ViewX = x; + ViewY = y; + } } // 679660: using guessed type char gbMaxPlayers; @@ -4519,86 +4428,62 @@ void __fastcall CheckStats(int pnum) void __fastcall ModifyPlrStr(int pnum, int l) { - int v2; // esi - int v3; // edi - int v4; // esi - char v5; // dl - int v6; // ecx - int v7; // eax - int v8; // ebx - int v9; // eax - signed int v10; // ecx - int p; // [esp+8h] [ebp-4h] - - v2 = pnum; - v3 = l; - p = pnum; - if ( (unsigned int)pnum >= MAX_PLRS ) + if ( (DWORD)pnum >= MAX_PLRS ) { TermMsg("ModifyPlrStr: illegal player %d", pnum); - v4 = v2; - v5 = plr[v4]._pClass; - v6 = plr[v4]._pBaseStr; - v7 = MaxStats[v5][0]; - if ( v6 + v3 > v7 ) - v3 = v7 - v6; - plr[v4]._pBaseStr = v3 + v6; - plr[v4]._pStrength += v3; - v8 = plr[v4]._pStrength; - if ( v5 == 1 ) - { - v9 = plr[v4]._pLevel * (v8 + plr[v4]._pDexterity); - v10 = 200; } - else - { - v9 = v8 * plr[v4]._pLevel; - v10 = 100; + + int max = MaxStats[plr[pnum]._pClass][ATTRIB_STR]; + if ( plr[pnum]._pBaseStr + l > max ) { + l = max - plr[pnum]._pBaseStr; + } + + plr[pnum]._pStrength += l; + plr[pnum]._pBaseStr += l; + + if ( plr[pnum]._pClass == PC_ROGUE ) { + plr[pnum]._pDamageMod = plr[pnum]._pLevel * (plr[pnum]._pStrength + plr[pnum]._pDexterity) / 200; + } else { + plr[pnum]._pDamageMod = plr[pnum]._pLevel * plr[pnum]._pStrength / 100; + } + + CalcPlrInv(pnum, TRUE); + + if ( pnum == myplr ) { + NetSendCmdParam1(FALSE, CMD_SETSTR, plr[pnum]._pBaseStr); //60 } - plr[v4]._pDamageMod = v9 / v10; - CalcPlrInv(p, 1u); - if ( p == myplr ) - NetSendCmdParam1(0, CMD_SETSTR, plr[v4]._pBaseStr); } void __fastcall ModifyPlrMag(int pnum, int l) { - int v2; // esi - int v3; // edi - int v4; // esi - char v5; // dl - int v6; // ecx - int v7; // eax - int v8; // eax - int v9; // edi - int p; // [esp+8h] [ebp-4h] - - v2 = pnum; - v3 = l; - p = pnum; - if ( (unsigned int)pnum >= MAX_PLRS ) + if ( (DWORD)pnum >= MAX_PLRS ) { TermMsg("ModifyPlrMag: illegal player %d", pnum); - v4 = v2; - v5 = plr[v4]._pClass; - v6 = MaxStats[v5][1]; - v7 = plr[v4]._pBaseMag; - if ( v7 + v3 > v6 ) - v3 = v6 - v7; - plr[v4]._pMagic += v3; - v8 = v3 + v7; - v9 = v3 << 6; - plr[v4]._pBaseMag = v8; - if ( v5 == 2 ) - v9 *= 2; - plr[v4]._pMaxManaBase += v9; - plr[v4]._pMaxMana += v9; - if ( !(plr[v4]._pIFlags & 0x8000000) ) - { - plr[v4]._pManaBase += v9; - plr[v4]._pMana += v9; } - CalcPlrInv(p, 1u); - if ( p == myplr ) - NetSendCmdParam1(0, CMD_SETMAG, plr[v4]._pBaseMag); + + int max = MaxStats[plr[pnum]._pClass][ATTRIB_MAG]; + if ( plr[pnum]._pBaseMag + l > max ) { + l = max - plr[pnum]._pBaseMag; + } + + plr[pnum]._pMagic += l; + plr[pnum]._pBaseMag += l; + + int ms = l << 6; + if ( plr[pnum]._pClass == PC_SORCERER ) { + ms *= 2; + } + + plr[pnum]._pMaxManaBase += ms; + plr[pnum]._pMaxMana += ms; + if ( !(plr[pnum]._pIFlags & ISPL_NOMANA) ) { + plr[pnum]._pManaBase += ms; + plr[pnum]._pMana += ms; + } + + CalcPlrInv(pnum, TRUE); + + if ( pnum == myplr ) { + NetSendCmdParam1(FALSE, CMD_SETMAG, plr[pnum]._pBaseMag); + } } void __fastcall ModifyPlrDex(int pnum, int l) @@ -4608,21 +4493,20 @@ void __fastcall ModifyPlrDex(int pnum, int l) } int max = MaxStats[plr[pnum]._pClass][ATTRIB_DEX]; - if ( plr[pnum]._pBaseDex + l > max ) - { + if ( plr[pnum]._pBaseDex + l > max ) { l = max - plr[pnum]._pBaseDex; } plr[pnum]._pDexterity += l; plr[pnum]._pBaseDex += l; - CalcPlrInv(pnum, 1); + CalcPlrInv(pnum, TRUE); if ( plr[pnum]._pClass == PC_ROGUE ) { plr[pnum]._pDamageMod = plr[pnum]._pLevel * (plr[pnum]._pDexterity + plr[pnum]._pStrength) / 200; } if ( pnum == myplr ) { - NetSendCmdParam1(0, CMD_SETDEX, plr[pnum]._pBaseDex); + NetSendCmdParam1(FALSE, CMD_SETDEX, plr[pnum]._pBaseDex); } } @@ -4633,8 +4517,7 @@ void __fastcall ModifyPlrVit(int pnum, int l) } int max = MaxStats[plr[pnum]._pClass][ATTRIB_VIT]; - if ( plr[pnum]._pBaseVit + l > max ) - { + if ( plr[pnum]._pBaseVit + l > max ) { l = max - plr[pnum]._pBaseVit; } @@ -4668,7 +4551,7 @@ void __fastcall SetPlayerHitPoints(int pnum, int newhp) plr[pnum]._pHPBase = newhp + plr[pnum]._pMaxHPBase - plr[pnum]._pMaxHP; if ( pnum == myplr ) { - drawhpflag = 1; + drawhpflag = TRUE; } } @@ -4737,7 +4620,7 @@ void __fastcall SetPlrVit(int pnum, int v) plr[pnum]._pBaseVit = v; int hp = v << 6; - if ( !_LOBYTE(plr[pnum]._pClass) ) { + if ( plr[pnum]._pClass == PC_WARRIOR ) { hp *= 2; } diff --git a/Source/player.h b/Source/player.h index 62fa2208b..0adccbeb9 100644 --- a/Source/player.h +++ b/Source/player.h @@ -77,14 +77,14 @@ BOOL __fastcall WeaponDur(int pnum, int durrnd); bool __fastcall PlrHitMonst(int pnum, int m); BOOL __fastcall PlrHitPlr(int pnum, char p); BOOL __fastcall PlrHitObj(int pnum, int mx, int my); -int __fastcall PM_DoAttack(int pnum); +BOOL __fastcall PM_DoAttack(int pnum); BOOL __fastcall PM_DoRangeAttack(int pnum); void __fastcall ShieldDur(int pnum); BOOL __fastcall PM_DoBlock(int pnum); BOOL __fastcall PM_DoSpell(int pnum); -int __fastcall PM_DoGotHit(int pnum); +BOOL __fastcall PM_DoGotHit(int pnum); void __fastcall ArmorDur(int pnum); -int __fastcall PM_DoDeath(int pnum); +BOOL __fastcall PM_DoDeath(int pnum); void __fastcall CheckNewPath(int pnum); BOOL __fastcall PlrDeathModeOK(int pnum); void __cdecl ValidatePlayer(); diff --git a/Source/portal.cpp b/Source/portal.cpp index d913cb629..1548f1f01 100644 --- a/Source/portal.cpp +++ b/Source/portal.cpp @@ -196,7 +196,7 @@ void __cdecl GetPortalLvlPos() } } -bool __fastcall PosOkPortal(int lvl, int x, int y) +BOOL __fastcall PosOkPortal(int lvl, int x, int y) { int *v3; // eax diff --git a/Source/portal.h b/Source/portal.h index f97623fdd..e8a4e8a50 100644 --- a/Source/portal.h +++ b/Source/portal.h @@ -18,7 +18,7 @@ void __fastcall RemovePortalMissile(int id); void __fastcall SetCurrentPortal(int p); void __cdecl GetPortalLevel(); void __cdecl GetPortalLvlPos(); -bool __fastcall PosOkPortal(int lvl, int x, int y); +BOOL __fastcall PosOkPortal(int lvl, int x, int y); /* rdata */ extern int WarpDropX[MAXPORTAL]; diff --git a/Source/scrollrt.cpp b/Source/scrollrt.cpp index 9e25570a2..8ac3871c0 100644 --- a/Source/scrollrt.cpp +++ b/Source/scrollrt.cpp @@ -3338,8 +3338,8 @@ void __cdecl DrawAndBlit() { if ( drawpanflag == 255 ) { - drawhpflag = 1; - drawmanaflag = 1; + drawhpflag = TRUE; + drawmanaflag = TRUE; drawbtnflag = 1; drawsbarflag = 1; ddsdesc = 0; @@ -3381,8 +3381,8 @@ void __cdecl DrawAndBlit() lock_buf_priv(); scrollrt_draw_cursor_back_buffer(); unlock_buf_priv(); - drawhpflag = 0; - drawmanaflag = 0; + drawhpflag = FALSE; + drawmanaflag = FALSE; drawbtnflag = 0; drawsbarflag = 0; } diff --git a/Source/spells.cpp b/Source/spells.cpp index 9c6c9087e..e5a1b2f94 100644 --- a/Source/spells.cpp +++ b/Source/spells.cpp @@ -2,7 +2,7 @@ #include "../types.h" -SpellData spelldata[37] = +SpellData spelldata[MAX_SPELLS] = { { 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, { 0, 0, 0 }, 0, 0, 40, 80, 0, 0 }, { SPL_FIREBOLT, 6, STYPE_FIRE, "Firebolt", "Firebolt", 1, 1, 1, 0, 15, IS_CAST2, { MIS_FIREBOLT, 0, 0 }, 1, 3, 40, 80, 1000, 50 }, @@ -121,7 +121,7 @@ void __fastcall UseMana(int id, int sn) ma = GetManaAmount(id, sn); plr[id]._pMana -= ma; plr[id]._pManaBase -= ma; - drawmanaflag = 1; + drawmanaflag = TRUE; #ifdef _DEBUG } #endif @@ -230,8 +230,8 @@ void __fastcall DoResurrect(int pnum, int rid) { deathflag = 0; gamemenu_off(); - drawhpflag = 1; - drawmanaflag = 1; + drawhpflag = TRUE; + drawmanaflag = TRUE; } ClrPlrPath(rid); @@ -362,6 +362,6 @@ void __fastcall DoHealOther(int pnum, int rid) plr[rid]._pHPBase = plr[rid]._pMaxHPBase; } - drawhpflag = 1; + drawhpflag = TRUE; } } diff --git a/Source/spells.h b/Source/spells.h index 52aae6c95..3e23547be 100644 --- a/Source/spells.h +++ b/Source/spells.h @@ -12,6 +12,6 @@ void __fastcall DoHealOther(int pnum, int rid); /* rdata */ -extern SpellData spelldata[37]; +extern SpellData spelldata[MAX_SPELLS]; #endif /* __SPELLS_H__ */ diff --git a/Source/stores.cpp b/Source/stores.cpp index d8269234f..3d06535dc 100644 --- a/Source/stores.cpp +++ b/Source/stores.cpp @@ -3744,7 +3744,7 @@ LABEL_12: } if ( plr[myplr]._pHitPoints != plr[myplr]._pMaxHP ) PlaySFX(IS_CAST8); - drawhpflag = 1; + drawhpflag = TRUE; v1 = myplr; plr[v1]._pHitPoints = plr[myplr]._pMaxHP; plr[v1]._pHPBase = plr[v1]._pMaxHPBase; diff --git a/defs.h b/defs.h index 8671cd043..f0f6d829d 100644 --- a/defs.h +++ b/defs.h @@ -12,6 +12,7 @@ #define MAX_LVLMTYPES 16 // #define MAX_PATH 260 #define MAX_SEND_STR_LEN 80 +#define MAX_SPELLS 37 #define MAXDEAD 31 #define MAXDUNX 112 diff --git a/structs.h b/structs.h index 1da28b356..0c1fa845d 100644 --- a/structs.h +++ b/structs.h @@ -213,15 +213,15 @@ struct PlayerStruct char _pSBkSplType; char _pSplLvl[64]; union { - __int64 _pMemSpells64; + unsigned __int64 _pMemSpells64; int _pMemSpells[2]; }; union { - __int64 _pAblSpells64; + unsigned __int64 _pAblSpells64; int _pAblSpells[2]; }; union { - __int64 _pScrlSpells64; + unsigned __int64 _pScrlSpells64; int _pScrlSpells[2]; }; int _pSpellFlags; @@ -322,7 +322,7 @@ struct PlayerStruct int _pIBonusAC; int _pIBonusDamMod; union { - __int64 _pISpells64; + unsigned __int64 _pISpells64; int _pISpells[2]; }; int _pIFlags; @@ -1471,7 +1471,7 @@ struct PkPlayerStruct int pMaxHPBase; int pManaBase; int pMaxManaBase; - char pSplLvl[37]; + char pSplLvl[MAX_SPELLS]; int pMemSpells; /* __int64 */ int pMemSpells2; PkItemStruct InvBody[7];