# HG changeset patch # User Gloval # Date 1361820795 -14400 # Node ID c43f156a95c92be0e4bb2b0fc0d9e8b02fc5b53c # Parent fcdaa804074f94fcb7e61cd823a634a4449de3e2 ArmorShopDialog crash fixed. All shops show its items diff -r fcdaa804074f -r c43f156a95c9 GUIWindow.cpp --- a/GUIWindow.cpp Mon Feb 25 17:58:00 2013 +0400 +++ b/GUIWindow.cpp Mon Feb 25 23:33:15 2013 +0400 @@ -1233,8 +1233,8 @@ //----- (004B1854) -------------------------------------------------------- -char *GUIWindow::_4B1854(__int64 a2) -{ +void GUIWindow::DrawCurrentTime( __int64 a2 ) + { unsigned int v2; // edi@1 unsigned int v3; // esi@1 unsigned int v4; // ebp@1 @@ -1263,7 +1263,7 @@ v16 = (signed __int64)__PAIR__(v4, v5) % 60; v7 = v6 % 24; strcpy(pTmpBuf, pGlobalTXT_LocalizationStrings[532]); - if ( (unsigned int)v6 / 0x18 ) + if ( (unsigned int)v6 /24 ) { v8 = pGlobalTXT_LocalizationStrings[57]; if ( v18 <= 1 ) @@ -1283,24 +1283,24 @@ if ( v16 && !v18 ) { if ( v16 <= 1 ) - v10 = pGlobalTXT_LocalizationStrings[437]; + v10 = pGlobalTXT_LocalizationStrings[437];//"Minute" else - v10 = pGlobalTXT_LocalizationStrings[436]; + v10 = pGlobalTXT_LocalizationStrings[436]; //"Minutes" sprintf(pTmpBuf2, "%d %s ", v16, v10); strcat(pTmpBuf, pTmpBuf2); } if ( v17 && !v7 ) { if ( v17 <= 1 ) - v11 = pGlobalTXT_LocalizationStrings[439]; + v11 = pGlobalTXT_LocalizationStrings[439]; //"Second" else - v11 = pGlobalTXT_LocalizationStrings[438]; + v11 = pGlobalTXT_LocalizationStrings[438]; //"Seconds" sprintf(pTmpBuf2, "%d %s ", v17, v11); strcat(pTmpBuf, pTmpBuf2); } v12 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0x9Bu); v13 = pFontArrus->CalcTextHeight(pTmpBuf, v15, 0, 0); - return v15->DrawTitleText(pFontArrus, 0, (212 - v13) / 2 + 101, v12, pTmpBuf, 3u); + v15->DrawTitleText(pFontArrus, 0, (212 - v13) / 2 + 101, v12, pTmpBuf, 3u); } diff -r fcdaa804074f -r c43f156a95c9 GUIWindow.h --- a/GUIWindow.h Mon Feb 25 17:58:00 2013 +0400 +++ b/GUIWindow.h Mon Feb 25 23:33:15 2013 +0400 @@ -114,7 +114,7 @@ char DrawText(GUIFont *a2, signed int uX, int uY, unsigned int uFontColor, const char *Str, int a7, int a8, unsigned int uFontShadowColor); char *DrawTitleText(GUIFont *a2, unsigned int uHorizontalMargin, unsigned int uVerticalMargin, unsigned __int16 uDefaultColor, const char *pInString, unsigned int uLineSpacing); - char *_4B1854(__int64 a2); + void DrawCurrentTime(__int64 a2); void HouseDialogManager(); void OpenSpellBook(); void InitializeBookView(); diff -r fcdaa804074f -r c43f156a95c9 Party.h --- a/Party.h Mon Feb 25 17:58:00 2013 +0400 +++ b/Party.h Mon Feb 25 23:33:15 2013 +0400 @@ -113,7 +113,8 @@ struct Party_stru0 { int field_0[20]; - int field_50[170]; + // int field_50[170]; + __int64 field_50[85]; int _shop_ban_times[82]; int field_440[44]; int field_4F0[38]; diff -r fcdaa804074f -r c43f156a95c9 mm7_2.cpp --- a/mm7_2.cpp Mon Feb 25 17:58:00 2013 +0400 +++ b/mm7_2.cpp Mon Feb 25 23:33:15 2013 +0400 @@ -1210,7 +1210,7 @@ { draw_leather(); CharacterUI_InventoryTab_Draw(uActiveCharacter, 1); - sub_4B46A5(pGlobalTXT_LocalizationStrings[198], 0); + DrawTextAtStatusBar(pGlobalTXT_LocalizationStrings[198], 0); result = (char *)sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win(); if ( result ) { @@ -1311,7 +1311,7 @@ { draw_leather(); CharacterUI_InventoryTab_Draw(uActiveCharacter, 1); - sub_4B46A5(pGlobalTXT_LocalizationStrings[199], 0); + DrawTextAtStatusBar(pGlobalTXT_LocalizationStrings[199], 0); result = (char *)sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win(); if ( result ) { @@ -1349,7 +1349,7 @@ { draw_leather(); CharacterUI_InventoryTab_Draw(uActiveCharacter, 1); - sub_4B46A5(pGlobalTXT_LocalizationStrings[197], 0); + DrawTextAtStatusBar(pGlobalTXT_LocalizationStrings[197], 0); result = (char *)sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win(); if ( result ) { @@ -1417,13 +1417,13 @@ if ( pParty->StandartItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][(int)v48].uItemID); { v49 = word_F8B158[(signed int)v48]; - v50 = dword_F8B168[(signed int)v48]; + v50 = ItemsInShopTexture[(signed int)v48]; v49 += 30; v51 = 60 - ((signed int)v50->uTextureWidth >> 1); pRenderer->DrawTextureTransparent(v51 + v108, v49, v50); sub_40F92A( &pRenderer->pActiveZBuffer[v51 + v108 + 640 * v49], - dword_F8B168[(signed int)v109], + ItemsInShopTexture[(signed int)v109], (int)((char *)v109 + 1)); v48 = v109; } @@ -1443,12 +1443,12 @@ if (pParty->SpecialItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][(signed int)v109].uItemID) { v52 = word_F8B158[(signed int)v109] + 30; - v53 = dword_F8B168[(signed int)v109]; + v53 = ItemsInShopTexture[(signed int)v109]; v54 = 60 - ((signed int)v53->uTextureWidth >> 1); pRenderer->DrawTextureTransparent(v54 + v108, word_F8B158[(signed int)v109] + 30, v53); sub_40F92A( &pRenderer->pActiveZBuffer[v54 + v108 + 640 * v52], - dword_F8B168[(signed int)v109], + ItemsInShopTexture[(signed int)v109], (int)((char *)v109 + 1)); } v109 = (const char **)((char *)v109 + 1); @@ -1496,7 +1496,7 @@ if ( dword_F8B19C != 2 ) v58 = pGlobalTXT_LocalizationStrings[196]; } - sub_4B46A5(v58, 0); + DrawTextAtStatusBar(v58, 0); if ( v106.x ) { v59 = pMouse->GetCursorPos(&v91); @@ -1532,11 +1532,8 @@ } else { - result = v101._4B1854( - __PAIR__( - pParty->field_3C.field_50[2 * (unsigned int)window_SpeakInHouse->ptr_1C + 1], - pParty->field_3C.field_50[2 * (unsigned int)window_SpeakInHouse->ptr_1C]) - - pParty->uTimePlayed); + v101.DrawCurrentTime( pParty->field_3C.field_50[(unsigned int)window_SpeakInHouse->ptr_1C] - pParty->uTimePlayed); + result =0; //added } } return result; @@ -1732,7 +1729,7 @@ { draw_leather(); CharacterUI_InventoryTab_Draw(uActiveCharacter, 1); - sub_4B46A5(pGlobalTXT_LocalizationStrings[199], 0); + DrawTextAtStatusBar(pGlobalTXT_LocalizationStrings[199], 0); result = (POINT *)sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win(); if ( !result || (v43 = pMouse->GetCursorPos(&v99)->x - 14, @@ -1757,7 +1754,7 @@ { draw_leather(); CharacterUI_InventoryTab_Draw(uActiveCharacter, 1); - sub_4B46A5(pGlobalTXT_LocalizationStrings[197], 0); + DrawTextAtStatusBar(pGlobalTXT_LocalizationStrings[197], 0); result = (POINT *)sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win(); if ( !result || (v36 = pMouse->GetCursorPos(&a2)->x - 14, @@ -1957,7 +1954,7 @@ // if ( pParty->field_777C[9 * (v114 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C)] ) if ( pParty->StandartItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][v114].uItemID); { - v46 = dword_F8B168[v114]; + v46 = ItemsInShopTexture[v114]; v47 = 152 - v46->uTextureHeight; if ( (signed int)v47 < 1 ) v47 = 0; @@ -1966,7 +1963,7 @@ { if ( v114 == 5 ) { - v49 = dword_F8B168[5]->uTextureWidth; + v49 = ItemsInShopTexture[5]->uTextureWidth; if ( (signed int)v48 > 457 - v49 ) v48 = 457 - v49; } @@ -1977,7 +1974,7 @@ v48 = 18; } pRenderer->DrawTextureTransparent(v48, v47, v46); - sub_40F92A(&pRenderer->pActiveZBuffer[v48 + 640 * v47], dword_F8B168[v114], v114 + 1); + sub_40F92A(&pRenderer->pActiveZBuffer[v48 + 640 * v47], ItemsInShopTexture[v114], v114 + 1); } ++v114; } @@ -1988,7 +1985,7 @@ // if ( pParty->field_777C[9 * (v114 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C) + 54] ) if ( pParty->StandartItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][v114+1].uItemID); { - v50 = dword_F8B168[v114 + 6]; + v50 = ItemsInShopTexture[v114 + 6]; v51 = 308 - v50->uTextureHeight; if ( (signed int)v51 < 1 ) v51 = 0; @@ -1997,7 +1994,7 @@ { if ( v114 == 5 ) { - v53 = dword_F8B168[11]->uTextureWidth; + v53 = ItemsInShopTexture[11]->uTextureWidth; if ( (signed int)v52 > 457 - v53 ) v52 = 457 - v53; } @@ -2008,7 +2005,7 @@ v52 = 18; } pRenderer->DrawTextureTransparent(v52, v51, v50); - sub_40F92A(&pRenderer->pActiveZBuffer[v52 + 640 * v51], dword_F8B168[v114 + 6], v114 + 7); + sub_40F92A(&pRenderer->pActiveZBuffer[v52 + 640 * v51], ItemsInShopTexture[v114 + 6], v114 + 7); } ++v114; } @@ -2021,7 +2018,7 @@ //if ( pParty->field_C59C[9 * (v114 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C) + 724] ) if (pParty->SpecialItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][v114].uItemID) { - v54 = dword_F8B168[v114]; + v54 = ItemsInShopTexture[v114]; v55 = 152 - v54->uTextureHeight; if ( (signed int)v55 < 1 ) v55 = 0; @@ -2030,7 +2027,7 @@ { if ( v114 == 5 ) { - v57 = dword_F8B168[5]->uTextureWidth; + v57 = ItemsInShopTexture[5]->uTextureWidth; if ( (signed int)v56 > 457 - v57 ) v56 = 457 - v57; } @@ -2041,7 +2038,7 @@ v56 = 18; } pRenderer->DrawTextureTransparent(v56, v55, v54); - sub_40F92A(&pRenderer->pActiveZBuffer[v56 + 640 * v55], dword_F8B168[v114], v114 + 1); + sub_40F92A(&pRenderer->pActiveZBuffer[v56 + 640 * v55], ItemsInShopTexture[v114], v114 + 1); } ++v114; } @@ -2052,7 +2049,7 @@ // if ( pParty->field_C59C[9 * (v114 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C) + 778] ) //weak if (pParty->SpecialItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][(signed int)v114].uItemID) //not itemid { - v58 = dword_F8B168[v114 + 6]; + v58 = ItemsInShopTexture[v114 + 6]; v59 = 308 - v58->uTextureHeight; if ( (signed int)v59 < 1 ) v59 = 0; @@ -2061,7 +2058,7 @@ { if ( v114 == 5 ) { - v61 = dword_F8B168[11]->uTextureWidth; + v61 = ItemsInShopTexture[11]->uTextureWidth; if ( (signed int)v60 > 457 - v61 ) v60 = 457 - v61; } @@ -2072,7 +2069,7 @@ v60 = 18; } pRenderer->DrawTextureTransparent(v60, v59, v58); - sub_40F92A(&pRenderer->pActiveZBuffer[v60 + 640 * v59], dword_F8B168[v114 + 6], v114 + 7); + sub_40F92A(&pRenderer->pActiveZBuffer[v60 + 640 * v59], ItemsInShopTexture[v114 + 6], v114 + 7); } ++v114; } @@ -2118,13 +2115,12 @@ if ( dword_F8B19C != 2 ) v65 = pGlobalTXT_LocalizationStrings[196]; } - sub_4B46A5(v65, 0); + DrawTextAtStatusBar(v65, 0); if ( !v109 ) - return (POINT *)v104._4B1854( - __PAIR__( - pParty->field_3C.field_50[2 * (unsigned int)window_SpeakInHouse->ptr_1C + 1], - pParty->field_3C.field_50[2 * (unsigned int)window_SpeakInHouse->ptr_1C]) - - pParty->uTimePlayed); + { + v104.DrawCurrentTime( pParty->field_3C.field_50[ (unsigned int)window_SpeakInHouse->ptr_1C] - pParty->uTimePlayed); + return 0; + } v66 = pMouse->GetCursorPos(&v98); result = (POINT *)(v66->x + pSRZBufferLineOffsets[pMouse->GetCursorPos(&v96)->y]); if ( pRenderer->pActiveZBuffer[(int)result] & 0xFFFF ) @@ -2163,704 +2159,766 @@ //----- (004BA928) -------------------------------------------------------- void __cdecl ArmorShopDialog() -{ - Player *v0; // ebx@1 - signed int v1; // esi@8 - unsigned int v2; // eax@10 - ItemGen *v3; // eax@11 - unsigned __int8 v4; // dl@12 - char *v5; // ecx@12 - char *v6; // eax@13 - int v7; // ST08_4@15 - int v8; // eax@15 - signed int v9; // esi@17 - unsigned int v10; // eax@19 - char *v11; // edi@19 - int v12; // ST08_4@20 - int v13; // eax@20 - unsigned __int8 v14; // dl@20 - char *v15; // ecx@20 - char **v16; // edi@22 - int v17; // ebx@22 - char **v18; // esi@22 - int v19; // eax@23 - GUIWindow *v20; // ecx@24 - int v21; // eax@24 - int v22; // edx@24 - int v23; // ebx@24 - unsigned __int8 v24; // sf@24 - GUIButton *v25; // eax@26 - GUIButton *v26; // esi@26 - int v27; // eax@26 - unsigned int v28; // ecx@26 - Player *v29; // edx@26 - unsigned __int16 v30; // ax@26 - signed int v31; // esi@31 - unsigned int v32; // eax@33 - int v33; // eax@34 - int v34; // ST08_4@35 - int v35; // eax@35 - char *v36; // edx@36 - GUIWindow *v37; // edi@42 - signed int v38; // esi@42 - unsigned int v39; // esi@44 - int v40; // eax@44 - unsigned int v41; // eax@45 - int v42; // eax@47 - int v43; // ecx@52 - GUIButton *v44; // eax@54 - GUIButton *v45; // esi@54 - int v46; // eax@54 - char *v47; // eax@56 - int v48; // eax@56 - unsigned int v49; // ecx@56 - int v50; // edx@56 - int v51; // eax@56 - unsigned __int16 v52; // ax@56 - int v53; // eax@60 - int v54; // eax@60 - signed int v55; // ebx@65 - Texture *v56; // eax@67 - unsigned int v57; // edi@68 - Texture *v58; // ST1C_4@68 - int v59; // eax@68 - int v60; // edi@69 - signed int v61; // ebx@73 - Texture *v62; // eax@75 - int v63; // edi@76 - Texture *v64; // ST1C_4@76 - unsigned int v65; // ST18_4@76 - int v66; // eax@76 - int v67; // edi@77 - signed int v68; // ecx@81 - SHORT v69; // bx@89 - bool v70; // eax@89 - const char *v71; // ecx@91 - void *v72; // eax@95 - POINT *v73; // esi@97 - int v74; // ecx@97 - int v75; // eax@98 - int v76; // ecx@98 - ItemGen *v77; // ecx@99 - unsigned __int8 v78; // bl@104 - char **v79; // edi@105 - int v80; // ebx@105 - char **v81; // esi@105 - int v82; // eax@106 - GUIWindow *v83; // ecx@107 - int v84; // eax@107 - int v85; // edx@107 - int v86; // ebx@107 - GUIButton *v87; // eax@109 - GUIButton *v88; // esi@109 - int v89; // eax@109 - unsigned int v90; // ecx@109 - int v91; // edx@109 - unsigned __int16 v92; // ax@109 - signed int v93; // edx@114 - POINT *v94; // edi@120 - __int32 v95; // ecx@120 - void *v96; // ST14_4@122 - unsigned __int8 v97; // bl@122 - ItemGen *v98; // ST10_4@122 - int v99; // eax@122 - char *v100; // eax@122 - const char *v101; // ST18_4@122 - unsigned __int16 v102; // ST14_2@122 - int v103; // eax@122 - signed int v104; // edi@123 - Texture *v105; // eax@125 - int v106; // ebx@126 - Texture *v107; // ST1C_4@126 - unsigned int v108; // ST18_4@126 - int v109; // eax@126 - int v110; // ebx@127 - GUIWindow *v111; // [sp-18h] [bp-11Ch]@36 - unsigned int v112; // [sp-14h] [bp-118h]@13 - int v113; // [sp-14h] [bp-118h]@36 - ItemGen *v114; // [sp-10h] [bp-114h]@12 - unsigned int v115; // [sp-10h] [bp-114h]@13 - ItemGen *v116; // [sp-10h] [bp-114h]@20 - int v117; // [sp-10h] [bp-114h]@36 - void *v118; // [sp-Ch] [bp-110h]@12 - unsigned __int16 v119; // [sp-Ch] [bp-110h]@13 - void *v120; // [sp-Ch] [bp-110h]@20 - char *v121; // [sp-8h] [bp-10Ch]@13 - int v122; // [sp-8h] [bp-10Ch]@20 - unsigned int v123; // [sp-4h] [bp-108h]@13 - __int64 *v124; // [sp-4h] [bp-108h]@20 - int v125; // [sp-4h] [bp-108h]@68 - int v126; // [sp-4h] [bp-108h]@76 - int v127; // [sp-4h] [bp-108h]@126 - POINT v128; // [sp+Ch] [bp-F8h]@8 - POINT v129; // [sp+14h] [bp-F0h]@18 - char v130; // [sp+1Ch] [bp-E8h]@120 - POINT a2; // [sp+24h] [bp-E0h]@8 - POINT v132; // [sp+2Ch] [bp-D8h]@120 - POINT v133; // [sp+34h] [bp-D0h]@17 - char v134; // [sp+3Ch] [bp-C8h]@97 - POINT v135; // [sp+44h] [bp-C0h]@31 - POINT v136; // [sp+4Ch] [bp-B8h]@97 - POINT v137; // [sp+54h] [bp-B0h]@17 - POINT v138; // [sp+5Ch] [bp-A8h]@32 - POINT v139; // [sp+64h] [bp-A0h]@17 - POINT v140; // [sp+6Ch] [bp-98h]@31 - POINT v141; // [sp+74h] [bp-90h]@8 - POINT v142; // [sp+7Ch] [bp-88h]@31 - POINT v143; // [sp+84h] [bp-80h]@9 - GUIWindow v144; // [sp+8Ch] [bp-78h]@1 - char *Str; // [sp+E0h] [bp-24h]@56 - int v146; // [sp+E4h] [bp-20h]@24 - int v147; // [sp+E8h] [bp-1Ch]@1 - int v148; // [sp+ECh] [bp-18h]@1 - __int32 v149; // [sp+F0h] [bp-14h]@8 - Player *_this; // [sp+F4h] [bp-10h]@1 - unsigned __int8 uPlayerID; // [sp+FBh] [bp-9h]@15 - int v152; // [sp+FCh] [bp-8h]@24 - int v153; // [sp+100h] [bp-4h]@44 - - v0 = pPlayers[uActiveCharacter]; - _this = pPlayers[uActiveCharacter]; - memcpy(&v144, window_SpeakInHouse, sizeof(v144)); - v144.uFrameX = 483; - v144.uFrameWidth = 148; - v144.uFrameZ = 334; - v148 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0xFFu); - v147 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xE1u, 0xCDu, 0x23u); - if ( dword_F8B19C > 5 ) - { - if ( dword_F8B19C == 6 ) - { - pRenderer->DrawTextureIndexed(8u, 8u, dword_F8B164); - sub_4B46A5(pGlobalTXT_LocalizationStrings[195], 0); - if ( !sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() ) - return; - v149 = 0; - v93 = 0; - do - { - // if ( pParty->field_C59C[9 * (v93 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C) + 724] ) - if (pParty->SpecialItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][v93].uItemID) - ++v149; - ++v93; - } - while ( v93 < 8 ); - if ( v149 ) - { - v94 = pMouse->GetCursorPos(&v132); - v149 = pRenderer->pActiveZBuffer[v94->x + pSRZBufferLineOffsets[pMouse->GetCursorPos((POINT *)&v130)->y]]; - v95 = v149; - if ( v149 && v149 != -65536 ) - { - --v149; - v96 = window_SpeakInHouse->ptr_1C; - v97 = uActiveCharacter - 1; - // v98 = (ItemGen *)&pParty->field_C59C[9 * (v95 - 1 + 12 * (int)v96) + 724]; - v99 = _this->_490EEE( - &pParty->SpecialItemsInShops[(int)v96][v95-1],// (ItemGen *)&pParty->field_C59C[9 * (v95 - 1 + 12 * (int)v96) + 724], - 2, - (int)window_SpeakInHouse->ptr_1C, - 2); - v100 = BuilDialogueString((char *)pMerchantsBuyPhrases[v99], v97, v98, (char *)v96, 2, 0); - v101 = v100; - v102 = v148; - v103 = pFontArrus->CalcTextHeight(v100, &v144, 0, 0); - v144.DrawTitleText(pFontArrus, 0, (174 - v103) / 2 + 138, v102, v101, 3u); - } - v104 = 0; - v153 = 0; - do - { - //if ( pParty->field_C59C[9 * (v104 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C) + 724] ) - if (pParty->SpecialItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][v104].uItemID) - { - v105 = dword_F8B168[v104]; - if ( v104 >= 4 ) - { - v110 = 90 - ((signed int)v105->uTextureWidth >> 1); - pRenderer->DrawTextureTransparent(v153 + v110 - 420, 0x7Eu, dword_F8B168[v104]); - v127 = v104 + 1; - v109 = v153 + v110 + 80220; - } - else - { - v106 = 98 - v105->uTextureHeight; - v107 = dword_F8B168[v104]; - v108 = 98 - v105->uTextureHeight; - v152 = 86 - ((signed int)v105->uTextureWidth >> 1); - pRenderer->DrawTextureTransparent(v152 + v153, v108, v107); - v127 = v104 + 1; - v109 = v152 + v153 + 640 * v106; - } - ZBuffer_DoFill(&pRenderer->pActiveZBuffer[v109], dword_F8B168[v104], v127); - } - v153 += 105; - ++v104; - } - while ( v104 < 8 ); - return; - } - v72 = window_SpeakInHouse->ptr_1C; - goto LABEL_96; - } - if ( dword_F8B19C == 94 ) - { - draw_leather(); - CharacterUI_InventoryTab_Draw(uActiveCharacter, 1); - v79 = pShopOptions; - pShopOptions[0] = pGlobalTXT_LocalizationStrings[200]; - pShopOptions[1] = pGlobalTXT_LocalizationStrings[113]; - pShopOptions[2] = pGlobalTXT_LocalizationStrings[179]; - v80 = 0; - v81 = pShopOptions; - do - { - v82 = pFontArrus->CalcTextHeight(*v81, &v144, 0, 0); - ++v81; - v80 += v82; - } - while ( (signed int)v81 < (signed int)&pShopOptions[3] ); - v83 = pDialogueWindow; - v152 = (174 - v80) / 3; - v84 = pDialogueWindow->pStartingPosActiveItem; - v85 = v84 + pDialogueWindow->pNumPresenceButton; - v86 = (3 * (58 - v152) - v80) / 2 - v152 / 2 + 138; - v24 = -pDialogueWindow->pNumPresenceButton < 0; - _this = (Player *)pDialogueWindow->pStartingPosActiveItem; - if ( v24 ^ __OFSUB__(v84, v85) ) - { - v153 = 2; - do - { - v87 = v83->GetControl((unsigned int)_this); - v88 = v87; - v87->uY = v152 + v86; - v89 = pFontArrus->CalcTextHeight(*v79, &v144, 0, 0); - v90 = v88->uY; - v91 = v153; - v88->uHeight = v89; - v86 = v90 + v89 - 1; - v88->uW = v86; - v92 = v147; - if ( pDialogueWindow->pCurrentPosActiveItem != v91 ) - v92 = v148; - v144.DrawTitleText(pFontArrus, 0, v90, v92, *v79, 3u); - v83 = pDialogueWindow; - ++v153; - ++v79; - _this = (Player *)((char *)_this + 1); - } - while ( (signed int)_this < pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem ); - } - return; - } - if ( dword_F8B19C != 95 ) - { - if ( dword_F8B19C != 96 || !sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() ) - return; - v152 = 0; - v37 = pDialogueWindow; - //v38 = (signed __int64)(*(float *)&p2DEvents_minus1__24[13 * (unsigned int)ptr_507BC0->ptr_1C] * 500.0); - v38 = (signed __int64)(p2DEvents[(unsigned int)window_SpeakInHouse->ptr_1C - 1].flt_24 * 500.0); - _this = (Player *)(v38 * (100 - v0->GetMerchant()) / 100); - if ( (signed int)_this < v38 / 3 ) - _this = (Player *)(v38 / 3); - v39 = v37->pStartingPosActiveItem; - v40 = v37->pNumPresenceButton; - v153 = 0; - if ( (signed int)v39 < (signed int)(v39 + v40) ) - { - do - { - v41 = v37->GetControl(v39)->uControlParam - 36; - if ( byte_4ED970_skill_learn_ability_by_class_table[v0->classType][v41] && !v0->pActiveSkills[v41] ) - { - v42 = pFontArrus->CalcTextHeight(pSkillNames[v41], &v144, 0, 0); - v152 += v42; - ++v153; - } - ++v39; - } - while ( (signed int)v39 < v37->pNumPresenceButton + v37->pStartingPosActiveItem ); - if ( v153 ) - { - sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[401], _this); - v144.DrawTitleText(pFontArrus, 0, 0x92u, 0, pTmpBuf, 3u); - _this = (Player *)((149 - v152) / v153); - if ( (149 - v152) / v153 > 32 ) - _this = (Player *)32; - v43 = (149 - v153 * (signed int)_this - v152) / 2 - (signed int)_this / 2 + 162; - v152 = v37->pStartingPosActiveItem; - v146 = v43; - if ( v152 < v152 + v37->pNumPresenceButton ) - { - v153 = 2; - do - { - v44 = v37->GetControl(v152); - v45 = v44; - v46 = v44->uControlParam - 36; - if ( !byte_4ED970_skill_learn_ability_by_class_table[v0->classType][v46] || v0->pActiveSkills[v46] ) - { - v45->uW = 0; - v45->uHeight = 0; - v45->uY = 0; - } - else - { - v47 = pSkillNames[v46]; - v45->uY = (unsigned int)((char *)_this + v146); - Str = v47; - v48 = pFontArrus->CalcTextHeight(v47, &v144, 0, 0); - v49 = v45->uY; - v50 = v153; - v45->uHeight = v48; - v51 = v49 + v48 - 1; - v45->uW = v51; - v146 = v51; - v52 = v147; - if ( pDialogueWindow->pCurrentPosActiveItem != v50 ) - v52 = v148; - v144.DrawTitleText(pFontArrus, 0, v49, v52, Str, 3u); - } - v53 = v37->pStartingPosActiveItem; - ++v152; - v54 = v37->pNumPresenceButton + v53; - ++v153; - } - while ( v152 < v54 ); - } - return; - } - } - sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[544], v0->pName, pClassNames[v0->classType]); - strcat(pTmpBuf, "\n \n"); - strcat(pTmpBuf, pGlobalTXT_LocalizationStrings[528]); - v11 = 0; - v36 = pTmpBuf; - v123 = 3; - v121 = pTmpBuf; - v119 = v147; - v117 = 0; - v113 = 0; - v111 = &v144; -LABEL_63: - v115 = (174 - pFontArrus->CalcTextHeight(v36, v111, v113, v117)) / 2 + 138; - v112 = (unsigned int)v11; -LABEL_14: - v144.DrawTitleText(pFontArrus, v112, v115, v119, v121, v123); - return; - } -LABEL_64: - pRenderer->DrawTextureIndexed(8u, 8u, dword_F8B164); - if ( dword_F8B19C == 2 ) - { - v55 = 0; - v153 = 0; - do - { - // if ( pParty->field_777C[9 * (v55 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C)] ) - if ( pParty->StandartItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][v55].uItemID); - { - v56 = dword_F8B168[v55]; - if ( v55 >= 4 ) - { - v60 = 90 - ((signed int)v56->uTextureWidth >> 1); - pRenderer->DrawTextureTransparent(v60 + v153 - 420, 0x7Eu, dword_F8B168[v55]); - v125 = v55 + 1; - v59 = v60 + v153 + 80220; - } - else - { - v57 = 98 - v56->uTextureHeight; - v58 = dword_F8B168[v55]; - v152 = 86 - ((signed int)v56->uTextureWidth >> 1); - pRenderer->DrawTextureTransparent(v153 + v152, v57, v58); - v125 = v55 + 1; - v59 = v153 + v152 + 640 * v57; - } - ZBuffer_DoFill(&pRenderer->pActiveZBuffer[v59], dword_F8B168[v55], v125); - } - v153 += 105; - ++v55; - } - while ( v55 < 8 ); - v11 = 0; - } - else - { - v11 = 0; - v61 = 0; - v153 = 0; - do - { - // if ( (char *)pParty->field_C59C[9 * (v61 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C) + 724] != v11 ) - if (pParty->SpecialItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][v61].uItemID) - { - v62 = dword_F8B168[v61]; - if ( v61 >= 4 ) - { - v67 = 90 - ((signed int)v62->uTextureWidth >> 1); - pRenderer->DrawTextureTransparent(v153 + v67 - 420, 0x7Eu, dword_F8B168[v61]); - v126 = v61 + 1; - v66 = v153 + v67 + 80220; - } - else - { - v63 = 98 - v62->uTextureHeight; - v64 = dword_F8B168[v61]; - v65 = 98 - v62->uTextureHeight; - v152 = 86 - ((signed int)v62->uTextureWidth >> 1); - pRenderer->DrawTextureTransparent(v152 + v153, v65, v64); - v126 = v61 + 1; - v66 = v152 + v153 + 640 * v63; - } - ZBuffer_DoFill(&pRenderer->pActiveZBuffer[v66], dword_F8B168[v61], v126); - v11 = 0; - } - v153 += 105; - ++v61; - } - while ( v61 < 8 ); - } - if ( !sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() ) - return; - v68 = 0; - v149 = (__int32)v11; - if ( dword_F8B19C == 2 ) - { - do - { - // if ( (char *)pParty->field_777C[9 * (v68 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C)] != v11 ) - if ( pParty->StandartItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][v68].uItemID); - ++v149; - ++v68; - } - while ( v68 < 6 ); - } - else - { - do - { - // if ( (char *)pParty->field_C59C[9 * (v68 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C) + 724] != v11 ) - if (pParty->SpecialItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][(signed int)v68].uItemID) - ++v149; - ++v68; - } - while ( v68 < 6 ); - } - v69 = GetAsyncKeyState(17); - v70 = _this->CanSteal(); - Str = (char *)v70; - if ( v69 == (short)v11 || (char *)v70 == v11 ) - { - v71 = pGlobalTXT_LocalizationStrings[195]; - if ( dword_F8B19C != 2 ) - v71 = pGlobalTXT_LocalizationStrings[196]; - } - else - { - v71 = pGlobalTXT_LocalizationStrings[185]; - } - sub_4B46A5(v71, 0); - if ( (char *)v149 != v11 ) - { - v73 = pMouse->GetCursorPos(&v136); - v74 = pRenderer->pActiveZBuffer[v73->x + pSRZBufferLineOffsets[pMouse->GetCursorPos((POINT *)&v134)->y]] & 0xFFFF; - if ( !v74 ) - return; - v149 = v74 - 1; - v75 = (int)window_SpeakInHouse->ptr_1C; - v76 = 9 * (v74 - 1 + 12 * v75); - if ( dword_F8B19C == 2 ) - v77 = (ItemGen *)&pParty->StandartItemsInShops[v76]; - else - v77 = &pParty->SpecialItemsInShops[(int)75][v74-1];//(ItemGen *)&pParty->field_C59C[v76 + 724]; - if ( v69 == (short)v11 || Str == v11 ) - { - v124 = (__int64 *)v11; - v122 = 2; - v120 = window_SpeakInHouse->ptr_1C; - v116 = v77; - v78 = uActiveCharacter - 1; - v15 = (char *)pMerchantsBuyPhrases[_this->_490EEE(v77, 2, v75, 2)]; - v14 = v78; - } - else - { - v124 = (__int64 *)v11; - v122 = 2; - v120 = window_SpeakInHouse->ptr_1C; - v116 = v77; - v15 = pGlobalTXT_LocalizationStrings[181]; - v14 = uActiveCharacter - 1; - } -LABEL_36: - v36 = BuilDialogueString(v15, v14, v116, (char *)v120, v122, v124); - v123 = 3; - v121 = v36; - v119 = v148; - v117 = (int)v11; - v113 = (int)v11; - v111 = &v144; - goto LABEL_63; - } - v72 = window_SpeakInHouse->ptr_1C; -LABEL_96: - v144._4B1854( - __PAIR__(pParty->field_3C.field_50[2 * (int)v72 + 1], pParty->field_3C.field_50[2 * (int)v72]) - - pParty->uTimePlayed); - return; - } - if ( dword_F8B19C == 5 ) - { - draw_leather(); - CharacterUI_InventoryTab_Draw(uActiveCharacter, 1); - sub_4B46A5(pGlobalTXT_LocalizationStrings[198], 0); - if ( !sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() - || (v31 = pMouse->GetCursorPos(&v135)->x - 14, - v149 = (v31 >> 5) + 14 * ((pMouse->GetCursorPos(&v142)->y - 17) >> 5), - pMouse->GetCursorPos(&v140)->x <= 13) - || pMouse->GetCursorPos(&v138)->x >= 462 - || (v32 = v0->GetItemIDAtInventoryIndex((int *)&v149), v11 = 0, !v32) - || (v33 = 9 * v32, !(v0->field_1F5[4 * v33 + 15] & 2)) ) - return; - v124 = 0; - v122 = 5; - v120 = window_SpeakInHouse->ptr_1C; - v116 = (ItemGen *)&v0->spellbook.pDarkSpellbook.bIsSpellAvailable[4 * v33 + 5]; - v34 = (int)window_SpeakInHouse->ptr_1C; - uPlayerID = uActiveCharacter - 1; - v35 = v0->_490EEE((ItemGen *)&v0->spellbook.pDarkSpellbook.bIsSpellAvailable[4 * v33 + 5], 2, v34, 5); - v14 = uPlayerID; - v15 = (char *)pMerchantsRepairPhrases[v35]; - goto LABEL_36; - } - if ( dword_F8B19C == 1 ) - { - if ( sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() ) - { - v16 = pShopOptions; - pShopOptions[0] = pGlobalTXT_LocalizationStrings[134]; - pShopOptions[1] = pGlobalTXT_LocalizationStrings[152]; - pShopOptions[2] = pGlobalTXT_LocalizationStrings[159]; - v17 = 0; - pShopOptions[3] = pGlobalTXT_LocalizationStrings[160]; - v18 = pShopOptions; - do - { - v19 = pFontArrus->CalcTextHeight(*v18, &v144, 0, 0); - ++v18; - v17 += v19; - } - while ( (signed int)v18 < (signed int)&unk_F8B1C8 ); - v20 = pDialogueWindow; - v146 = (174 - v17) / 4; - v21 = pDialogueWindow->pStartingPosActiveItem; - v22 = v21 + pDialogueWindow->pNumPresenceButton; - v23 = (174 - 4 * (174 - v17) / 4 - v17) / 2 - (174 - v17) / 4 / 2 + 138; - v24 = -pDialogueWindow->pNumPresenceButton < 0; - v152 = pDialogueWindow->pStartingPosActiveItem; - if ( v24 ^ __OFSUB__(v21, v22) ) - { - _this = (Player *)2; - do - { - v25 = v20->GetControl(v152); - v26 = v25; - v25->uY = v146 + v23; - v27 = pFontArrus->CalcTextHeight(*v16, &v144, 0, 0); - v28 = v26->uY; - v29 = _this; - v26->uHeight = v27; - v23 = v28 + v27 - 1; - v26->uW = v23; - v30 = v147; - if ( (Player *)pDialogueWindow->pCurrentPosActiveItem != v29 ) - v30 = v148; - v144.DrawTitleText(pFontArrus, 0, v28, v30, *v16, 3u); - v20 = pDialogueWindow; - _this = (Player *)((char *)_this + 1); - ++v16; - ++v152; - } - while ( v152 < pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem ); - } - } - return; - } - if ( dword_F8B19C == 2 ) - goto LABEL_64; - if ( dword_F8B19C == 3 ) - { - draw_leather(); - CharacterUI_InventoryTab_Draw(uActiveCharacter, 1); - sub_4B46A5(pGlobalTXT_LocalizationStrings[199], 0); - if ( !sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() - || (v9 = pMouse->GetCursorPos(&v139)->x - 14, - v149 = (v9 >> 5) + 14 * ((pMouse->GetCursorPos(&v133)->y - 17) >> 5), - pMouse->GetCursorPos(&v137)->x <= 13) - || pMouse->GetCursorPos(&v129)->x >= 462 - || (v10 = v0->GetItemIDAtInventoryIndex((int *)&v149), v11 = 0, !v10) ) - return; - v124 = 0; - v122 = 3; - v120 = window_SpeakInHouse->ptr_1C; - v116 = (ItemGen *)&v0->pInventoryItems[v10-1]; - v12 = (int)window_SpeakInHouse->ptr_1C; - uPlayerID = uActiveCharacter - 1; - v13 = v0->_490EEE(v116, 2, v12, 3); - v14 = uPlayerID; - v15 = (char *)pMerchantsSellPhrases[v13]; - goto LABEL_36; - } - if ( dword_F8B19C == 4 ) - { - draw_leather(); - CharacterUI_InventoryTab_Draw(uActiveCharacter, 1); - sub_4B46A5(pGlobalTXT_LocalizationStrings[197], 0); - if ( sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() ) - { - v1 = pMouse->GetCursorPos(&a2)->x - 14; - v149 = (v1 >> 5) + 14 * ((pMouse->GetCursorPos(&v128)->y - 17) >> 5); - if ( pMouse->GetCursorPos(&v141)->x > 13 ) - { - if ( pMouse->GetCursorPos(&v143)->x < 462 ) - { - v2 = v0->GetItemIDAtInventoryIndex((int *)&v149); - if ( v2 ) - { - v3 = (ItemGen *)&v0->pInventoryItems[v2-1]; - if (v3->Identified()) - { - v118 = window_SpeakInHouse->ptr_1C; - v4 = uActiveCharacter - 1; - v5 = "%24"; - v114 = v3; - } - else - { - v118 = window_SpeakInHouse->ptr_1C; - v114 = v3; - v7 = (int)window_SpeakInHouse->ptr_1C; - uPlayerID = uActiveCharacter - 1; - v8 = v0->_490EEE(v3, 2, v7, 4); - v4 = uPlayerID; - v5 = (char *)pMerchantsIdentifyPhrases[v8]; - } - v6 = BuilDialogueString(v5, v4, v114, (char *)v118, 4, 0); - v123 = 3; - v121 = v6; - v119 = v148; - v115 = (174 - pFontArrus->CalcTextHeight(v6, &v144, 0, 0)) / 2 + 138; - v112 = 0; - goto LABEL_14; - } - } - } - } - } -} + { + Player *v0; // ebx@1 + signed int v1; // esi@8 + unsigned int v2; // eax@10 + ItemGen *v3; // eax@11 + unsigned __int8 v4; // dl@12 + char *v5; // ecx@12 + char *v6; // eax@13 + int v7; // ST08_4@15 + int v8; // eax@15 + signed int v9; // esi@17 + unsigned int v10; // eax@19 + char *v11; // edi@19 + int v12; // ST08_4@20 + int v13; // eax@20 + unsigned __int8 v14; // dl@20 + char *v15; // ecx@20 + char **v16; // edi@22 + int v17; // ebx@22 + char **v18; // esi@22 + int v19; // eax@23 + GUIWindow *v20; // ecx@24 + int v21; // eax@24 + int v22; // edx@24 + int v23; // ebx@24 + unsigned __int8 v24; // sf@24 + GUIButton *v25; // eax@26 + GUIButton *v26; // esi@26 + int v27; // eax@26 + unsigned int v28; // ecx@26 + Player *v29; // edx@26 + unsigned __int16 v30; // ax@26 + signed int v31; // esi@31 + unsigned int v32; // eax@33 + int v33; // eax@34 + int v34; // ST08_4@35 + int v35; // eax@35 + char *v36; // edx@36 + GUIWindow *v37; // edi@42 + signed int v38; // esi@42 + unsigned int v39; // esi@44 + int v40; // eax@44 + unsigned int v41; // eax@45 + int v42; // eax@47 + int v43; // ecx@52 + GUIButton *v44; // eax@54 + GUIButton *v45; // esi@54 + int v46; // eax@54 + char *v47; // eax@56 + int v48; // eax@56 + unsigned int v49; // ecx@56 + int v50; // edx@56 + int v51; // eax@56 + unsigned __int16 v52; // ax@56 + int v53; // eax@60 + int v54; // eax@60 + signed int v55; // ebx@65 + Texture *v56; // eax@67 + unsigned int v57; // edi@68 + Texture *v58; // ST1C_4@68 + int v59; // eax@68 + int v60; // edi@69 + signed int v61; // ebx@73 + Texture *v62; // eax@75 + int v63; // edi@76 + Texture *v64; // ST1C_4@76 + unsigned int v65; // ST18_4@76 + int v66; // eax@76 + int v67; // edi@77 + signed int v68; // ecx@81 + SHORT v69; // bx@89 + bool v70; // eax@89 + const char *v71; // ecx@91 + void *v72; // eax@95 + POINT *v73; // esi@97 + int v74; // ecx@97 + int v75; // eax@98 + int v76; // ecx@98 + ItemGen *v77; // ecx@99 + unsigned __int8 v78; // bl@104 + char **v79; // edi@105 + int v80; // ebx@105 + char **v81; // esi@105 + int v82; // eax@106 + GUIWindow *v83; // ecx@107 + int v84; // eax@107 + int v85; // edx@107 + int v86; // ebx@107 + GUIButton *v87; // eax@109 + GUIButton *v88; // esi@109 + int v89; // eax@109 + unsigned int v90; // ecx@109 + int v91; // edx@109 + unsigned __int16 v92; // ax@109 + signed int v93; // edx@114 + POINT *v94; // edi@120 + __int32 v95; // ecx@120 + void *v96; // ST14_4@122 + unsigned __int8 v97; // bl@122 + ItemGen *v98; // ST10_4@122 + int v99; // eax@122 + char *v100; // eax@122 + const char *v101; // ST18_4@122 + unsigned __int16 v102; // ST14_2@122 + int v103; // eax@122 + signed int v104; // edi@123 + Texture *v105; // eax@125 + int v106; // ebx@126 + Texture *v107; // ST1C_4@126 + unsigned int v108; // ST18_4@126 + int v109; // eax@126 + int v110; // ebx@127 + GUIWindow *v111; // [sp-18h] [bp-11Ch]@36 + unsigned int v112; // [sp-14h] [bp-118h]@13 + int v113; // [sp-14h] [bp-118h]@36 + ItemGen *v114; // [sp-10h] [bp-114h]@12 + unsigned int v115; // [sp-10h] [bp-114h]@13 + ItemGen *v116; // [sp-10h] [bp-114h]@20 + int v117; // [sp-10h] [bp-114h]@36 + void *v118; // [sp-Ch] [bp-110h]@12 + unsigned __int16 v119; // [sp-Ch] [bp-110h]@13 + void *v120; // [sp-Ch] [bp-110h]@20 + char *v121; // [sp-8h] [bp-10Ch]@13 + int v122; // [sp-8h] [bp-10Ch]@20 + unsigned int v123; // [sp-4h] [bp-108h]@13 + __int64 *v124; // [sp-4h] [bp-108h]@20 + int v125; // [sp-4h] [bp-108h]@68 + int v126; // [sp-4h] [bp-108h]@76 + int v127; // [sp-4h] [bp-108h]@126 + POINT v128; // [sp+Ch] [bp-F8h]@8 + POINT v129; // [sp+14h] [bp-F0h]@18 + char v130; // [sp+1Ch] [bp-E8h]@120 + POINT a2; // [sp+24h] [bp-E0h]@8 + POINT v132; // [sp+2Ch] [bp-D8h]@120 + POINT v133; // [sp+34h] [bp-D0h]@17 + POINT v134; // [sp+3Ch] [bp-C8h]@97 + POINT v135; // [sp+44h] [bp-C0h]@31 + POINT v136; // [sp+4Ch] [bp-B8h]@97 + POINT v137; // [sp+54h] [bp-B0h]@17 + POINT v138; // [sp+5Ch] [bp-A8h]@32 + POINT v139; // [sp+64h] [bp-A0h]@17 + POINT v140; // [sp+6Ch] [bp-98h]@31 + POINT v141; // [sp+74h] [bp-90h]@8 + POINT v142; // [sp+7Ch] [bp-88h]@31 + POINT v143; // [sp+84h] [bp-80h]@9 + GUIWindow v144; // [sp+8Ch] [bp-78h]@1 + char *Str; // [sp+E0h] [bp-24h]@56 + int v146; // [sp+E4h] [bp-20h]@24 + int v147; // [sp+E8h] [bp-1Ch]@1 + int v148; // [sp+ECh] [bp-18h]@1 + __int32 v149; // [sp+F0h] [bp-14h]@8 + Player* _this; // [sp+F4h] [bp-10h]@1 + unsigned __int8 uPlayerID; // [sp+FBh] [bp-9h]@15 + int v152; // [sp+FCh] [bp-8h]@24 + int v153; // [sp+100h] [bp-4h]@44 + int th; + + v0 = pPlayers[uActiveCharacter]; + _this = pPlayers[uActiveCharacter]; + memcpy(&v144, window_SpeakInHouse, sizeof(v144)); + v144.uFrameX = 483; + v144.uFrameWidth = 148; + v144.uFrameZ = 334; + v148 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xFFu, 0xFFu, 0xFFu); + v147 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(0xE1u, 0xCDu, 0x23u); + switch (dword_F8B19C) + { + case 1: //prepare shop text + { + if ( sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() ) + { + v16 = pShopOptions; + pShopOptions[0] = pGlobalTXT_LocalizationStrings[134]; + pShopOptions[1] = pGlobalTXT_LocalizationStrings[152]; + pShopOptions[2] = pGlobalTXT_LocalizationStrings[159]; + v17 = 0; + pShopOptions[3] = pGlobalTXT_LocalizationStrings[160]; + for(int i=0;i<4;++i) + { + v19 = pFontArrus->CalcTextHeight(pShopOptions[i], &v144, 0, 0); + v17 += v19; + } + v20 = pDialogueWindow; + v146 = (174 - v17) / 4; + v21 = pDialogueWindow->pStartingPosActiveItem; + v22 = v21 + pDialogueWindow->pNumPresenceButton; + v23 = (174 - 4 * (174 - v17) / 4 - v17) / 2 - (174 - v17) / 4 / 2 + 138; + v24 = -pDialogueWindow->pNumPresenceButton < 0; + v152 = pDialogueWindow->pStartingPosActiveItem; + if ( v24 ^ __OFSUB__(v21, v22) ) + { + th = 2; + do + { + v25 = v20->GetControl(v152); + v26 = v25; + v25->uY = v146 + v23; + v27 = pFontArrus->CalcTextHeight(*v16, &v144, 0, 0); + v28 = v26->uY; + v29 = _this; + v26->uHeight = v27; + v23 = v28 + v27 - 1; + v26->uW = v23; + v30 = v147; + if ( (Player *)pDialogueWindow->pCurrentPosActiveItem != v29 ) + v30 = v148; + v144.DrawTitleText(pFontArrus, 0, v28, v30, *v16, 3u); + v20 = pDialogueWindow; + ++th; + ++v16; + ++v152; + } + while ( v152 < pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem ); + } + } + } + break; + case 2: //buy standart + { + pRenderer->DrawTextureIndexed(8u, 8u, dword_F8B164); + v55 = 0; + v153 = 0; + for(int i=0; i<8; ++i) + { + // if ( pParty->field_777C[9 * (v55 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C)] ) + if ( pParty->StandartItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][i].uItemID); + { + v56 = ItemsInShopTexture[v55]; + if ( i >= 4 ) + { + v60 = 90 - ((signed int)v56->uTextureWidth >> 1); + pRenderer->DrawTextureTransparent(v60 + v153 - 420, 126, ItemsInShopTexture[i]); + v59 = v60 + v153 + 80220; + } + else + { + v57 = 98 - v56->uTextureHeight; + v58 = ItemsInShopTexture[i]; + v152 = 86 - ((signed int)v56->uTextureWidth >> 1); + pRenderer->DrawTextureTransparent(v153 + v152, v57, v58); + v59 = v153 + v152 + 640 * v57; + } + ZBuffer_DoFill(&pRenderer->pActiveZBuffer[v59], ItemsInShopTexture[i], i+1); + } + v153 += 105; + + } + + v11 = 0; + if ( !sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() ) + return; + + v149 = 0; + for(int i=0; i<6; ++i) + { + // if ( (char *)pParty->field_777C[9 * (v68 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C)] != v11 ) + if ( pParty->StandartItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][i].uItemID); + ++v149; + + } + + v69 = GetAsyncKeyState(17); + v70 = _this->CanSteal(); + //Str = (char *)v70; + if ( v69 == 0 || v70 == 0 ) + { + v71 = pGlobalTXT_LocalizationStrings[195]; //"Select the Item to Buy" + } + else + { + v71 = pGlobalTXT_LocalizationStrings[185];//"Steal item" + } + DrawTextAtStatusBar(v71, 0); + if ( v149 != 0 ) + { + v73 = pMouse->GetCursorPos(&v136); + v74 = pRenderer->pActiveZBuffer[v73->x + pSRZBufferLineOffsets[pMouse->GetCursorPos(&v134)->y]] & 0xFFFF; + if ( !v74 ) + return; + v149 = v74 - 1; + v75 = (int)window_SpeakInHouse->ptr_1C; + v77 = &pParty->StandartItemsInShops[(int)v75][v74-1]; + if ( v69 ==0 || v70 == 0) + { + v120 = window_SpeakInHouse->ptr_1C; + v15 = (char *)pMerchantsBuyPhrases[_this->_490EEE(v77, 2, v75, 2)]; + } + else + { + v120 = window_SpeakInHouse->ptr_1C; + v15 = pGlobalTXT_LocalizationStrings[181]; + } + v36 = BuilDialogueString(v15, uActiveCharacter - 1, v77, (char *)v120, 2, 0); + v115 = (174 - pFontArrus->CalcTextHeight(v36, &v144, 0, 0)) / 2 + 138; + v144.DrawTitleText(pFontArrus, 0, v115, v148, v36, 3); + return; + } + v72 = window_SpeakInHouse->ptr_1C; + v144.DrawCurrentTime( pParty->field_3C.field_50[(int)v72]- pParty->uTimePlayed); + return; + } + break; + case 3: + { + draw_leather(); + CharacterUI_InventoryTab_Draw(uActiveCharacter, 1); + DrawTextAtStatusBar(pGlobalTXT_LocalizationStrings[199], 0); + if ( !sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() + || (v9 = pMouse->GetCursorPos(&v139)->x - 14, + v149 = (v9 >> 5) + 14 * ((pMouse->GetCursorPos(&v133)->y - 17) >> 5), + pMouse->GetCursorPos(&v137)->x <= 13) + || pMouse->GetCursorPos(&v129)->x >= 462 + || (v10 = v0->GetItemIDAtInventoryIndex((int *)&v149), v11 = 0, !v10) ) + return; + v124 = 0; + v122 = 3; + v120 = window_SpeakInHouse->ptr_1C; + v116 = (ItemGen *)&v0->pInventoryItems[v10-1]; + v12 = (int)window_SpeakInHouse->ptr_1C; + uPlayerID = uActiveCharacter - 1; + v13 = v0->_490EEE(v116, 2, v12, 3); + v14 = uPlayerID; + v15 = (char *)pMerchantsSellPhrases[v13]; + v36 = BuilDialogueString(v15, v14, v116, (char *)v120, v122, v124); + v123 = 3; + v121 = v36; + v119 = v148; + v117 = (int)v11; + v113 = (int)v11; + v111 = &v144; + v115 = (174 - pFontArrus->CalcTextHeight(v36, v111, v113, v117)) / 2 + 138; + v112 = (unsigned int)v11; + v144.DrawTitleText(pFontArrus, v112, v115, v119, v121, v123); + return; + } + break; + case 4: + { + draw_leather(); + CharacterUI_InventoryTab_Draw(uActiveCharacter, 1); + DrawTextAtStatusBar(pGlobalTXT_LocalizationStrings[197], 0); + if ( sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() ) + { + v1 = pMouse->GetCursorPos(&a2)->x - 14; + v149 = (v1 >> 5) + 14 * ((pMouse->GetCursorPos(&v128)->y - 17) >> 5); + if ( pMouse->GetCursorPos(&v141)->x > 13 ) + { + if ( pMouse->GetCursorPos(&v143)->x < 462 ) + { + v2 = v0->GetItemIDAtInventoryIndex((int *)&v149); + if ( v2 ) + { + v3 = (ItemGen *)&v0->pInventoryItems[v2-1]; + if (v3->Identified()) + { + v118 = window_SpeakInHouse->ptr_1C; + v4 = uActiveCharacter - 1; + v5 = "%24"; + v114 = v3; + } + else + { + v118 = window_SpeakInHouse->ptr_1C; + v114 = v3; + v7 = (int)window_SpeakInHouse->ptr_1C; + uPlayerID = uActiveCharacter - 1; + v8 = v0->_490EEE(v3, 2, v7, 4); + v4 = uPlayerID; + v5 = (char *)pMerchantsIdentifyPhrases[v8]; + } + v6 = BuilDialogueString(v5, v4, v114, (char *)v118, 4, 0); + v123 = 3; + v121 = v6; + v119 = v148; + v115 = (174 - pFontArrus->CalcTextHeight(v6, &v144, 0, 0)) / 2 + 138; + v112 = 0; + v144.DrawTitleText(pFontArrus, v112, v115, v119, v121, v123); + return; + } + } + } + } + } + break; + case 5: + { + draw_leather(); + CharacterUI_InventoryTab_Draw(uActiveCharacter, 1); + DrawTextAtStatusBar(pGlobalTXT_LocalizationStrings[198], 0); + if ( !sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() + || (v31 = pMouse->GetCursorPos(&v135)->x - 14, + v149 = (v31 >> 5) + 14 * ((pMouse->GetCursorPos(&v142)->y - 17) >> 5), + pMouse->GetCursorPos(&v140)->x <= 13) + || pMouse->GetCursorPos(&v138)->x >= 462 + || (v32 = v0->GetItemIDAtInventoryIndex((int *)&v149), v11 = 0, !v32) + || (v33 = 9 * v32, !(v0->field_1F5[4 * v33 + 15] & 2)) ) + return; + v124 = 0; + v122 = 5; + v120 = window_SpeakInHouse->ptr_1C; + v116 = (ItemGen *)&v0->spellbook.pDarkSpellbook.bIsSpellAvailable[4 * v33 + 5]; + v34 = (int)window_SpeakInHouse->ptr_1C; + uPlayerID = uActiveCharacter - 1; + v35 = v0->_490EEE((ItemGen *)&v0->spellbook.pDarkSpellbook.bIsSpellAvailable[4 * v33 + 5], 2, v34, 5); + v14 = uPlayerID; + v15 = (char *)pMerchantsRepairPhrases[v35]; + v36 = BuilDialogueString(v15, v14, v116, (char *)v120, v122, v124); + v123 = 3; + v121 = v36; + v119 = v148; + v117 = (int)v11; + v113 = (int)v11; + v111 = &v144; + v115 = (174 - pFontArrus->CalcTextHeight(v36, v111, v113, v117)) / 2 + 138; + v112 = (unsigned int)v11; + v144.DrawTitleText(pFontArrus, v112, v115, v119, v121, v123); + return; + } + break; + case 6: + { + pRenderer->DrawTextureIndexed(8u, 8u, dword_F8B164); + DrawTextAtStatusBar(pGlobalTXT_LocalizationStrings[195], 0); + if ( !sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() ) + return; + v149 = 0; + v93 = 0; + do + { + // if ( pParty->field_C59C[9 * (v93 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C) + 724] ) + if (pParty->SpecialItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][v93].uItemID) + ++v149; + ++v93; + } + while ( v93 < 8 ); + if ( v149 ) + { + v94 = pMouse->GetCursorPos(&v132); + v149 = pRenderer->pActiveZBuffer[v94->x + pSRZBufferLineOffsets[pMouse->GetCursorPos((POINT *)&v130)->y]]; + v95 = v149; + if ( v149 && v149 != -65536 ) + { + --v149; + v96 = window_SpeakInHouse->ptr_1C; + v97 = uActiveCharacter - 1; + // v98 = (ItemGen *)&pParty->field_C59C[9 * (v95 - 1 + 12 * (int)v96) + 724]; + v99 = _this->_490EEE( + &pParty->SpecialItemsInShops[(int)v96][v95-1],// (ItemGen *)&pParty->field_C59C[9 * (v95 - 1 + 12 * (int)v96) + 724], + 2, + (int)window_SpeakInHouse->ptr_1C, + 2); + v100 = BuilDialogueString((char *)pMerchantsBuyPhrases[v99], v97, v98, (char *)v96, 2, 0); + v101 = v100; + v102 = v148; + v103 = pFontArrus->CalcTextHeight(v100, &v144, 0, 0); + v144.DrawTitleText(pFontArrus, 0, (174 - v103) / 2 + 138, v102, v101, 3u); + } + v104 = 0; + v153 = 0; + do + { + //if ( pParty->field_C59C[9 * (v104 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C) + 724] ) + if (pParty->SpecialItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][v104].uItemID) + { + v105 = ItemsInShopTexture[v104]; + if ( v104 >= 4 ) + { + v110 = 90 - ((signed int)v105->uTextureWidth >> 1); + pRenderer->DrawTextureTransparent(v153 + v110 - 420, 0x7Eu, ItemsInShopTexture[v104]); + v127 = v104 + 1; + v109 = v153 + v110 + 80220; + } + else + { + v106 = 98 - v105->uTextureHeight; + v107 = ItemsInShopTexture[v104]; + v108 = 98 - v105->uTextureHeight; + v152 = 86 - ((signed int)v105->uTextureWidth >> 1); + pRenderer->DrawTextureTransparent(v152 + v153, v108, v107); + v127 = v104 + 1; + v109 = v152 + v153 + 640 * v106; + } + ZBuffer_DoFill(&pRenderer->pActiveZBuffer[v109], ItemsInShopTexture[v104], v127); + } + v153 += 105; + ++v104; + } + while ( v104 < 8 ); + return; + } + v72 = window_SpeakInHouse->ptr_1C; + v144.DrawCurrentTime(pParty->field_3C.field_50[(int)v72]- pParty->uTimePlayed); + return; + } + break; + case 94: + { + draw_leather(); + CharacterUI_InventoryTab_Draw(uActiveCharacter, 1); + v79 = pShopOptions; + pShopOptions[0] = pGlobalTXT_LocalizationStrings[200]; + pShopOptions[1] = pGlobalTXT_LocalizationStrings[113]; + pShopOptions[2] = pGlobalTXT_LocalizationStrings[179]; + v80 = 0; + v81 = pShopOptions; + do + { + v82 = pFontArrus->CalcTextHeight(*v81, &v144, 0, 0); + ++v81; + v80 += v82; + } + while ( (signed int)v81 < (signed int)&pShopOptions[3] ); + v83 = pDialogueWindow; + v152 = (174 - v80) / 3; + v84 = pDialogueWindow->pStartingPosActiveItem; + v85 = v84 + pDialogueWindow->pNumPresenceButton; + v86 = (3 * (58 - v152) - v80) / 2 - v152 / 2 + 138; + v24 = -pDialogueWindow->pNumPresenceButton < 0; + _this = (Player *)pDialogueWindow->pStartingPosActiveItem; + if ( v24 ^ __OFSUB__(v84, v85) ) + { + v153 = 2; + do + { + v87 = v83->GetControl((unsigned int)_this); + v88 = v87; + v87->uY = v152 + v86; + v89 = pFontArrus->CalcTextHeight(*v79, &v144, 0, 0); + v90 = v88->uY; + v91 = v153; + v88->uHeight = v89; + v86 = v90 + v89 - 1; + v88->uW = v86; + v92 = v147; + if ( pDialogueWindow->pCurrentPosActiveItem != v91 ) + v92 = v148; + v144.DrawTitleText(pFontArrus, 0, v90, v92, *v79, 3u); + v83 = pDialogueWindow; + ++v153; + ++v79; + _this = (Player *)((char *)_this + 1); + } + while ( (signed int)_this < pDialogueWindow->pNumPresenceButton + pDialogueWindow->pStartingPosActiveItem ); + } + return; + } + break; + case 95: //buy spesial + { + + pRenderer->DrawTextureIndexed(8u, 8u, dword_F8B164); + + v11 = 0; + v61 = 0; + v153 = 0; + do + { + // if ( (char *)pParty->field_C59C[9 * (v61 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C) + 724] != v11 ) + if (pParty->SpecialItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][v61].uItemID) + { + v62 = ItemsInShopTexture[v61]; + if ( v61 >= 4 ) + { + v67 = 90 - ((signed int)v62->uTextureWidth >> 1); + pRenderer->DrawTextureTransparent(v153 + v67 - 420, 0x7Eu, ItemsInShopTexture[v61]); + v126 = v61 + 1; + v66 = v153 + v67 + 80220; + } + else + { + v63 = 98 - v62->uTextureHeight; + v64 = ItemsInShopTexture[v61]; + v65 = 98 - v62->uTextureHeight; + v152 = 86 - ((signed int)v62->uTextureWidth >> 1); + pRenderer->DrawTextureTransparent(v152 + v153, v65, v64); + v126 = v61 + 1; + v66 = v152 + v153 + 640 * v63; + } + ZBuffer_DoFill(&pRenderer->pActiveZBuffer[v66], ItemsInShopTexture[v61], v126); + v11 = 0; + } + v153 += 105; + ++v61; + } + while ( v61 < 8 ); + + if ( !sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() ) + return; + v68 = 0; + v149 = (__int32)v11; + + do + { + // if ( (char *)pParty->field_C59C[9 * (v68 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C) + 724] != v11 ) + if (pParty->SpecialItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][(signed int)v68].uItemID) + ++v149; + ++v68; + } + while ( v68 < 6 ); + + v69 = GetAsyncKeyState(17); + v70 = _this->CanSteal(); + Str = (char *)v70; + if ( v69 == (short)v11 || (char *)v70 == v11 ) + { + v71 = pGlobalTXT_LocalizationStrings[196]; //Select the Special Item to Buy" + } + else + { + v71 = pGlobalTXT_LocalizationStrings[185]; + } + DrawTextAtStatusBar(v71, 0); + if ( (char *)v149 != v11 ) + { + v73 = pMouse->GetCursorPos(&v136); + v74 = pRenderer->pActiveZBuffer[v73->x + pSRZBufferLineOffsets[pMouse->GetCursorPos((POINT *)&v134)->y]] & 0xFFFF; + if ( !v74 ) + return; + v149 = v74 - 1; + v75 = (int)window_SpeakInHouse->ptr_1C; + v76 = 9 * (v74 - 1 + 12 * v75); + if ( dword_F8B19C == 2 ) + v77 = (ItemGen *)&pParty->StandartItemsInShops[v76]; + else + v77 = &pParty->SpecialItemsInShops[(int)75][v74-1];//(ItemGen *)&pParty->field_C59C[v76 + 724]; + if ( v69 == (short)v11 || Str == v11 ) + { + v124 = (__int64 *)v11; + v122 = 2; + v120 = window_SpeakInHouse->ptr_1C; + v116 = v77; + v78 = uActiveCharacter - 1; + v15 = (char *)pMerchantsBuyPhrases[_this->_490EEE(v77, 2, v75, 2)]; + v14 = v78; + } + else + { + v124 = (__int64 *)v11; + v122 = 2; + v120 = window_SpeakInHouse->ptr_1C; + v116 = v77; + v15 = pGlobalTXT_LocalizationStrings[181]; + v14 = uActiveCharacter - 1; + } + v36 = BuilDialogueString(v15, v14, v116, (char *)v120, v122, v124); + v123 = 3; + v121 = v36; + v119 = v148; + v117 = (int)v11; + v113 = (int)v11; + v111 = &v144; + v115 = (174 - pFontArrus->CalcTextHeight(v36, v111, v113, v117)) / 2 + 138; + v112 = (unsigned int)v11; + v144.DrawTitleText(pFontArrus, v112, v115, v119, v121, v123); + return; + } + v72 = window_SpeakInHouse->ptr_1C; + v144.DrawCurrentTime( pParty->field_3C.field_50[(int)v72]- pParty->uTimePlayed); + return; + } + + break; + case 96: + if (!sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win() ) + return; + v152 = 0; + v37 = pDialogueWindow; + //v38 = (signed __int64)(*(float *)&p2DEvents_minus1__24[13 * (unsigned int)ptr_507BC0->ptr_1C] * 500.0); + v38 = (signed __int64)(p2DEvents[(unsigned int)window_SpeakInHouse->ptr_1C - 1].flt_24 * 500.0); + _this = (Player *)(v38 * (100 - v0->GetMerchant()) / 100); + if ( (signed int)_this < v38 / 3 ) + _this = (Player *)(v38 / 3); + v39 = v37->pStartingPosActiveItem; + v40 = v37->pNumPresenceButton; + v153 = 0; + if ( (signed int)v39 < (signed int)(v39 + v40) ) + { + do + { + v41 = v37->GetControl(v39)->uControlParam - 36; + if ( byte_4ED970_skill_learn_ability_by_class_table[v0->classType][v41] && !v0->pActiveSkills[v41] ) + { + v42 = pFontArrus->CalcTextHeight(pSkillNames[v41], &v144, 0, 0); + v152 += v42; + ++v153; + } + ++v39; + } + while ( (signed int)v39 < v37->pNumPresenceButton + v37->pStartingPosActiveItem ); + if ( v153 ) + { + sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[401], _this); + v144.DrawTitleText(pFontArrus, 0, 0x92u, 0, pTmpBuf, 3u); + _this = (Player *)((149 - v152) / v153); + if ( (149 - v152) / v153 > 32 ) + _this = (Player *)32; + v43 = (149 - v153 * (signed int)_this - v152) / 2 - (signed int)_this / 2 + 162; + v152 = v37->pStartingPosActiveItem; + v146 = v43; + if ( v152 < v152 + v37->pNumPresenceButton ) + { + v153 = 2; + do + { + v44 = v37->GetControl(v152); + v45 = v44; + v46 = v44->uControlParam - 36; + if ( !byte_4ED970_skill_learn_ability_by_class_table[v0->classType][v46] || v0->pActiveSkills[v46] ) + { + v45->uW = 0; + v45->uHeight = 0; + v45->uY = 0; + } + else + { + v47 = pSkillNames[v46]; + v45->uY = (unsigned int)((char *)_this + v146); + Str = v47; + v48 = pFontArrus->CalcTextHeight(v47, &v144, 0, 0); + v49 = v45->uY; + v50 = v153; + v45->uHeight = v48; + v51 = v49 + v48 - 1; + v45->uW = v51; + v146 = v51; + v52 = v147; + if ( pDialogueWindow->pCurrentPosActiveItem != v50 ) + v52 = v148; + v144.DrawTitleText(pFontArrus, 0, v49, v52, Str, 3u); + } + v53 = v37->pStartingPosActiveItem; + ++v152; + v54 = v37->pNumPresenceButton + v53; + ++v153; + } + while ( v152 < v54 ); + } + return; + } + } + sprintf(pTmpBuf, pGlobalTXT_LocalizationStrings[544], v0->pName, pClassNames[v0->classType]); + strcat(pTmpBuf, "\n \n"); + strcat(pTmpBuf, pGlobalTXT_LocalizationStrings[528]); + v11 = 0; + v36 = pTmpBuf; + v123 = 3; + v121 = pTmpBuf; + v119 = v147; + v117 = 0; + v113 = 0; + v111 = &v144; + v115 = (174 - pFontArrus->CalcTextHeight(v36, v111, v113, v117)) / 2 + 138; + v112 = (unsigned int)v11; + v144.DrawTitleText(pFontArrus, v112, v115, v119, v121, v123); + return; + break; + + } + + } //----- (004BB756) -------------------------------------------------------- signed int __fastcall sub_4BB756(signed int a1) @@ -3786,7 +3844,7 @@ pItemsTable->pItems[v33].pIconName, TEXTURE_16BIT_PALETTE); v8 = window_SpeakInHouse; - dword_F8B168[v32] = &pIcons_LOD->pTextures[v34]; + ItemsInShopTexture[v32] = &pIcons_LOD->pTextures[v34]; } ++v32; } @@ -4126,9 +4184,7 @@ sub_421B2C_PlaceInInventory_or_DropPickedItem(); return; } - if ( (signed __int64)__PAIR__( - pParty->field_3C.field_50[2 * (unsigned int)v8->ptr_1C + 1], - pParty->field_3C.field_50[2 * (unsigned int)v8->ptr_1C]) < (signed __int64)pParty->uTimePlayed ) + if ( pParty->field_3C.field_50[(unsigned int)v8->ptr_1C] < (signed __int64)pParty->uTimePlayed ) { GenerateStandartShopItems(); GenerateSpecialShopItems(); @@ -4158,7 +4214,7 @@ v46 = pIcons_LOD->LoadTexture(pItemsTable->pItems[v45].pIconName, TEXTURE_16BIT_PALETTE); //v3 = dword_F8B198; v8 = window_SpeakInHouse; - dword_F8B168[v43] = &pIcons_LOD->pTextures[v46]; + ItemsInShopTexture[v43] = &pIcons_LOD->pTextures[v46]; } v42 = v8->ptr_1C; ++v43; @@ -4180,7 +4236,7 @@ { v49 = rand(); v8 = window_SpeakInHouse; - word_F8B158[v48] = v49 % (300 - dword_F8B168[v48]->uTextureHeight); + word_F8B158[v48] = v49 % (300 - ItemsInShopTexture[v48]->uTextureHeight); } v47 = v8->ptr_1C; ++v48; @@ -4203,7 +4259,7 @@ v51 = pIcons_LOD->LoadTexture(pItemsTable->pItems[v50].pIconName, TEXTURE_16BIT_PALETTE); //v3 = dword_F8B198; v8 = window_SpeakInHouse; - dword_F8B168[v43] = &pIcons_LOD->pTextures[v51]; + ItemsInShopTexture[v43] = &pIcons_LOD->pTextures[v51]; } v42 = v8->ptr_1C; ++v43; @@ -4225,7 +4281,7 @@ { v54 = rand(); v8 = window_SpeakInHouse; - word_F8B158[v53] = v54 % (300 - dword_F8B168[v53]->uTextureHeight); + word_F8B158[v53] = v54 % (300 - ItemsInShopTexture[v53]->uTextureHeight); } v52 = v8->ptr_1C; ++v53; diff -r fcdaa804074f -r c43f156a95c9 mm7_4.cpp --- a/mm7_4.cpp Mon Feb 25 17:58:00 2013 +0400 +++ b/mm7_4.cpp Mon Feb 25 23:33:15 2013 +0400 @@ -10890,17 +10890,12 @@ //----- (004B46A5) -------------------------------------------------------- -char __fastcall sub_4B46A5(const char *Str, int a5) -{ - const char *v2; // esi@1 - int v3; // edi@1 +char __fastcall DrawTextAtStatusBar(const char *sText, int font_color) +{ int v4; // eax@1 - - v2 = Str; - v3 = a5; - pRenderer->DrawTextureRGB(0, 0x160u, pTexture_StatusBar); - v4 = pFontLucida->AlignText_Center(0x1C2u, v2); - return pPrimaryWindow->DrawText(pFontLucida, v4 + 11, 357, v3, v2, 0, 0, 0); + pRenderer->DrawTextureRGB(0, 352, pTexture_StatusBar); + v4 = pFontLucida->AlignText_Center(450, sText); + return pPrimaryWindow->DrawText(pFontLucida, v4 + 11, 357, font_color, sText, 0, 0, 0); } //----- (004B46F8) -------------------------------------------------------- @@ -11610,7 +11605,7 @@ { draw_leather(); CharacterUI_InventoryTab_Draw(uActiveCharacter, 1); - sub_4B46A5(pGlobalTXT_LocalizationStrings[198], 0);// "Select the Item to Repair" + DrawTextAtStatusBar(pGlobalTXT_LocalizationStrings[198], 0);// "Select the Item to Repair" result = sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win(); if ( !result || (v27 = pMouse->GetCursorPos(&v110)->x - 14, @@ -11696,7 +11691,7 @@ { draw_leather(); CharacterUI_InventoryTab_Draw(uActiveCharacter, 1); - sub_4B46A5(pGlobalTXT_LocalizationStrings[197], 0);// "Select the Item to Identify" + DrawTextAtStatusBar(pGlobalTXT_LocalizationStrings[197], 0);// "Select the Item to Identify" result = sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win(); if ( result ) { @@ -11741,7 +11736,7 @@ } draw_leather(); CharacterUI_InventoryTab_Draw(uActiveCharacter, 1); - sub_4B46A5(pGlobalTXT_LocalizationStrings[199], 0);// "Select the Item to Sell" + DrawTextAtStatusBar(pGlobalTXT_LocalizationStrings[199], 0);// "Select the Item to Sell" result = sub_4B1784_check_if_player_concious__draw_warning_else_mess_with_dlg_win(); if ( !result || (v11 = pMouse->GetCursorPos(&v107)->x - 14, @@ -11784,7 +11779,7 @@ // if ( pParty->field_777C[9 * (v49 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C)] ) if ( pParty->StandartItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][v49].uItemID); { - v50 = dword_F8B168[v49]; + v50 = ItemsInShopTexture[v49]; v51 = 152 - v50->uTextureHeight; if ( (signed int)v51 < 1 ) v51 = 0; @@ -11793,7 +11788,7 @@ { if ( v122 == 5 ) { - v53 = dword_F8B168[5]->uTextureWidth; + v53 = ItemsInShopTexture[5]->uTextureWidth; if ( (signed int)v52 > 457 - v53 ) v52 = 457 - v53; } @@ -11804,7 +11799,7 @@ v52 = 18; } pRenderer->DrawTextureTransparent(v52, v51, v50); - sub_40F92A(&pRenderer->pActiveZBuffer[v52 + 640 * v51], dword_F8B168[v122], v122 + 1); + sub_40F92A(&pRenderer->pActiveZBuffer[v52 + 640 * v51], ItemsInShopTexture[v122], v122 + 1); v49 = v122; } ++v49; @@ -11817,14 +11812,14 @@ //if ( pParty->field_777C[9 * (v122 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C) + 54] ) if ( pParty->StandartItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][v122+1].uItemID); { - v54 = dword_F8B168[v122 + 6]; + v54 = ItemsInShopTexture[v122 + 6]; v55 = 306 - v54->uTextureHeight; v56 = 75 * v122 - v54->uTextureWidth / 2 + 40; if ( v122 ) { if ( v122 == 5 ) { - v57 = dword_F8B168[11]->uTextureWidth; + v57 = ItemsInShopTexture[11]->uTextureWidth; if ( (signed int)v56 > 457 - v57 ) v56 = 457 - v57; } @@ -11835,7 +11830,7 @@ v56 = 18; } pRenderer->DrawTextureTransparent(v56, v55, v54); - sub_40F92A(&pRenderer->pActiveZBuffer[v56 + 640 * v55], dword_F8B168[v122 + 6], v122 + 7); + sub_40F92A(&pRenderer->pActiveZBuffer[v56 + 640 * v55], ItemsInShopTexture[v122 + 6], v122 + 7); } ++v122; } @@ -11848,7 +11843,7 @@ // if ( pParty->field_C59C[9 * (v49 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C) + 724] ) if (pParty->SpecialItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][v49].uItemID) { - v58 = dword_F8B168[v49]; + v58 = ItemsInShopTexture[v49]; v59 = 152 - v58->uTextureHeight; if ( (signed int)v59 < 1 ) v59 = 0; @@ -11857,7 +11852,7 @@ { if ( v122 == 5 ) { - v61 = dword_F8B168[5]->uTextureWidth; + v61 = ItemsInShopTexture[5]->uTextureWidth; if ( (signed int)v60 > 457 - v61 ) v60 = 457 - v61; } @@ -11868,7 +11863,7 @@ v60 = 18; } pRenderer->DrawTextureTransparent(v60, v59, v58); - sub_40F92A(&pRenderer->pActiveZBuffer[v60 + 640 * v59], dword_F8B168[v122], v122 + 1); + sub_40F92A(&pRenderer->pActiveZBuffer[v60 + 640 * v59], ItemsInShopTexture[v122], v122 + 1); v49 = v122; } ++v49; @@ -11881,7 +11876,7 @@ //if ( pParty->Spell_Item[(unsigned int)window_SpeakInHouse->ptr_1C][v49] + 778] ) //weak if (pParty->SpecialItemsInShops[(unsigned int)window_SpeakInHouse->ptr_1C][v49].uAttributes) { - v62 = dword_F8B168[v122 + 6]; + v62 = ItemsInShopTexture[v122 + 6]; v63 = 306 - v62->uTextureHeight; if ( (signed int)v63 < 1 ) v63 = 0; @@ -11890,7 +11885,7 @@ { if ( v122 == 5 ) { - v65 = dword_F8B168[11]->uTextureWidth; + v65 = ItemsInShopTexture[11]->uTextureWidth; if ( (signed int)v64 > 457 - v65 ) v64 = 457 - v65; } @@ -11901,7 +11896,7 @@ v64 = 18; } pRenderer->DrawTextureTransparent(v64, v63, v62); - sub_40F92A(&pRenderer->pActiveZBuffer[v64 + 640 * v63], dword_F8B168[v122 + 6], v122 + 7); + sub_40F92A(&pRenderer->pActiveZBuffer[v64 + 640 * v63], ItemsInShopTexture[v122 + 6], v122 + 7); } ++v122; } @@ -11946,13 +11941,12 @@ if ( dword_F8B19C != 2 ) v69 = pGlobalTXT_LocalizationStrings[196];// "Select the Special Item to Buy" } - sub_4B46A5(v69, 0); + DrawTextAtStatusBar(v69, 0); if ( !v117 ) - return (int)v112._4B1854( - __PAIR__( - pParty->field_3C.field_50[2 * (unsigned int)window_SpeakInHouse->ptr_1C + 1], - pParty->field_3C.field_50[2 * (unsigned int)window_SpeakInHouse->ptr_1C]) - - pParty->uTimePlayed); + { + v112.DrawCurrentTime( pParty->field_3C.field_50[(unsigned int)window_SpeakInHouse->ptr_1C] - pParty->uTimePlayed); + return 0; + } v70 = pMouse->GetCursorPos(&v102); result = v70->x + pSRZBufferLineOffsets[pMouse->GetCursorPos(&v100)->y]; if ( pRenderer->pActiveZBuffer[result] & 0xFFFF ) @@ -12456,8 +12450,8 @@ { if ( *(&pParty->pPlayers[1].pInstalledBeacons[0].field_18 + 9 * (v6 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C)) ) { - pRenderer->DrawTextureTransparent(v63, 0x5Au, dword_F8B168[v6]); - ZBuffer_DoFill((int *)((char *)pRenderer->pActiveZBuffer + v62 + 230528), dword_F8B168[v6], v6 + 1); + pRenderer->DrawTextureTransparent(v63, 0x5Au, ItemsInShopTexture[v6]); + ZBuffer_DoFill((int *)((char *)pRenderer->pActiveZBuffer + v62 + 230528), ItemsInShopTexture[v6], v6 + 1); v1 = v58; } v63 += 70; @@ -12472,8 +12466,8 @@ { if ( *(&pParty->pPlayers[1].pInstalledBeacons[0].field_18 + 9 * (v7 + 12 * (unsigned int)window_SpeakInHouse->ptr_1C)) ) { - pRenderer->DrawTextureTransparent(v63, 0xFAu, dword_F8B168[v7]); - ZBuffer_DoFill((int *)((char *)pRenderer->pActiveZBuffer + v62 + 638448), dword_F8B168[v7], v7 + 1); + pRenderer->DrawTextureTransparent(v63, 0xFAu, ItemsInShopTexture[v7]); + ZBuffer_DoFill((int *)((char *)pRenderer->pActiveZBuffer + v62 + 638448), ItemsInShopTexture[v7], v7 + 1); v1 = v58; } v63 += 70; @@ -12499,13 +12493,16 @@ v11 = pGlobalTXT_LocalizationStrings[195]; if ( dword_F8B19C != 2 ) v11 = pGlobalTXT_LocalizationStrings[196]; - sub_4B46A5(v11, 0); + DrawTextAtStatusBar(v11, 0); if ( !v8 ) - return (int)v52._4B1854( + { + v52.DrawCurrentTime( __PAIR__( *(int *)&stru_AA1058[3].pSounds[8 * (unsigned int)window_SpeakInHouse->ptr_1C + 44472], *(int *)&stru_AA1058[3].pSounds[8 * (unsigned int)window_SpeakInHouse->ptr_1C + 44468]) - pParty->uTimePlayed); + return 0; + } v12 = pMouse->GetCursorPos(&v51); result = v12->x + pSRZBufferLineOffsets[pMouse->GetCursorPos(&v50)->y]; v13 = pRenderer->pActiveZBuffer[result] & 0xFFFF; diff -r fcdaa804074f -r c43f156a95c9 mm7_data.cpp --- a/mm7_data.cpp Mon Feb 25 17:58:00 2013 +0400 +++ b/mm7_data.cpp Mon Feb 25 23:33:15 2013 +0400 @@ -2340,7 +2340,7 @@ char byte_F8B148[16]; __int16 word_F8B158[777]; // weak struct Texture *dword_F8B164; // idb -struct Texture *dword_F8B168[12]; +struct Texture *ItemsInShopTexture[12]; int dword_F8B198; // weak int dword_F8B19C; // weak __int16 word_F8B1A0; // weak diff -r fcdaa804074f -r c43f156a95c9 mm7_data.h --- a/mm7_data.h Mon Feb 25 17:58:00 2013 +0400 +++ b/mm7_data.h Mon Feb 25 23:33:15 2013 +0400 @@ -1685,7 +1685,7 @@ extern char byte_F8B148[16]; extern __int16 word_F8B158[]; // weak extern struct Texture *dword_F8B164; // idb -extern struct Texture *dword_F8B168[12]; +extern struct Texture *ItemsInShopTexture[12]; extern int dword_F8B198; // weak extern int dword_F8B19C; // weak extern __int16 word_F8B1A0; // weak @@ -2317,7 +2317,7 @@ void __fastcall sub_4B3FE5(int a4); void __cdecl sub_4B40E6(); void _4B4224_UpdateNPCTopics(int _this); -char __fastcall sub_4B46A5(const char *Str, int a5); +char __fastcall DrawTextAtStatusBar(const char *Str, int a5); int __fastcall sub_4B46F8(int a1); int __cdecl TrainingDialog(); char *__cdecl sub_4B4F4F();