Mercurial > mm7
changeset 254:d1af3319bc44
BuilDialogueString: replaces %xx in dialogue strings by appropriate values
author | Nomad |
---|---|
date | Mon, 18 Feb 2013 08:48:23 +0200 |
parents | 83f85ab6079a |
children | 0a37a56e9f02 |
files | GUIWindow.cpp mm7_2.cpp mm7_3.cpp mm7_4.cpp mm7_5.cpp mm7_data.h mm7text_ru.cpp |
diffstat | 7 files changed, 248 insertions(+), 240 deletions(-) [+] |
line wrap: on
line diff
--- a/GUIWindow.cpp Mon Feb 18 07:26:48 2013 +0200 +++ b/GUIWindow.cpp Mon Feb 18 08:48:23 2013 +0200 @@ -729,7 +729,7 @@ { if ( v4 ) { - v5 = sub_495461(v4, uActiveCharacter - 1, 0, 0, 0, v3); + v5 = BuilDialogueString(v4, uActiveCharacter - 1, 0, 0, 0, v3); v6 = pAutonoteFont->CalcTextHeight(v5, &v26, 1, 0); v7 = (v6 - 3) / (signed int)v26.uFrameHeight; v8 = v7 + 1;
--- a/mm7_2.cpp Mon Feb 18 07:26:48 2013 +0200 +++ b/mm7_2.cpp Mon Feb 18 08:48:23 2013 +0200 @@ -1463,7 +1463,7 @@ LABEL_13: v6 = uActiveCharacter - 1; LABEL_14: - v7 = sub_495461(v5, v6, v79, (char *)v81, v83, v85); + v7 = BuilDialogueString(v5, v6, v79, (char *)v81, v83, v85); v86 = 3; v84 = v7; v82 = v105; @@ -1862,7 +1862,7 @@ LABEL_44: v39 = uActiveCharacter - 1; LABEL_45: - v21 = sub_495461(v38, v39, v87, (char *)v89, v91, v93); + v21 = BuilDialogueString(v38, v39, v87, (char *)v89, v91, v93); v92 = 3; v90 = v21; v88 = v108; @@ -2429,7 +2429,7 @@ 2, (int)ptr_507BC0->ptr_1C, 2); - v100 = sub_495461((char *)pMerchantsBuyPhrases[v99], v97, v98, (char *)v96, 2, 0); + v100 = BuilDialogueString((char *)pMerchantsBuyPhrases[v99], v97, v98, (char *)v96, 2, 0); v101 = v100; v102 = v148; v103 = pFontArrus->CalcTextHeight(v100, &v144, 0, 0); @@ -2759,7 +2759,7 @@ v14 = uActiveCharacter - 1; } LABEL_36: - v36 = sub_495461(v15, v14, v116, (char *)v120, v122, v124); + v36 = BuilDialogueString(v15, v14, v116, (char *)v120, v122, v124); v123 = 3; v121 = v36; v119 = v148; @@ -2911,7 +2911,7 @@ v4 = uPlayerID; v5 = (char *)pMerchantsIdentifyPhrases[v8]; } - v6 = sub_495461(v5, v4, v114, (char *)v118, 4, 0); + v6 = BuilDialogueString(v5, v4, v114, (char *)v118, 4, 0); v123 = 3; v121 = v6; v119 = v148;
--- a/mm7_3.cpp Mon Feb 18 07:26:48 2013 +0200 +++ b/mm7_3.cpp Mon Feb 18 08:48:23 2013 +0200 @@ -16298,7 +16298,7 @@ if (dialogue_show_profession_details) { v6 = pNPCStats->pProfessions[pNPC->uProfession - 1].pBenefits; - v7 = sub_495461(v6, uActiveCharacter - 1, 0, 0, 0, 0); + v7 = BuilDialogueString(v6, uActiveCharacter - 1, 0, 0, 0, 0); pInString = v7; pWindow.uFrameWidth = 460; pWindow.uFrameZ = 452; @@ -16318,7 +16318,7 @@ else if (pNPC->Hired()) { v6 = pNPCStats->pProfessions[pNPC->uProfession - 1].pDismissText; - v7 = sub_495461(v6, uActiveCharacter - 1, 0, 0, 0, 0); + v7 = BuilDialogueString(v6, uActiveCharacter - 1, 0, 0, 0, 0); pInString = v7; pWindow.uFrameWidth = 460; pWindow.uFrameZ = 452; @@ -16338,7 +16338,7 @@ else { v6 = pNPCStats->pProfessions[pNPC->uProfession - 1].pJoinText; - v7 = sub_495461(v6, uActiveCharacter - 1, 0, 0, 0, 0); + v7 = BuilDialogueString(v6, uActiveCharacter - 1, 0, 0, 0, 0); pInString = v7; pWindow.uFrameWidth = 460; pWindow.uFrameZ = 452; @@ -16440,7 +16440,7 @@ else if ( uDialogueType == DIALOGUE_13 ) { v6 = pNPCStats->pProfessions[pNPC->uProfession - 1].pJoinText; - v7 = sub_495461(v6, uActiveCharacter - 1, 0, 0, 0, 0); + v7 = BuilDialogueString(v6, uActiveCharacter - 1, 0, 0, 0, 0); pInString = v7; pWindow.uFrameWidth = 460; pWindow.uFrameZ = 452; @@ -16515,7 +16515,7 @@ v9 = pNPCStats->pProfessions[pNPC->uProfession].pDismissText; else v9 = pNPCStats->pProfessions[pNPC->uProfession].pJoinText; //"Invalid String Passed" - pInString = sub_495461(v9, uActiveCharacter - 1, 0, 0, 0, 0); + pInString = BuilDialogueString(v9, uActiveCharacter - 1, 0, 0, 0, 0); if ( pInString != NULL ) { pWindow.uFrameWidth = 460;
--- a/mm7_4.cpp Mon Feb 18 07:26:48 2013 +0200 +++ b/mm7_4.cpp Mon Feb 18 08:48:23 2013 +0200 @@ -4836,18 +4836,18 @@ } //----- (00495461) -------------------------------------------------------- -char *__fastcall sub_495461(char *lpsz, unsigned __int8 uPlayerID, ItemGen *a3, char *a4, int a5, __int64 *a6) +char *BuilDialogueString(char *lpsz, unsigned __int8 uPlayerID, ItemGen *a3, char *a4, int a5, __int64 *a6) { unsigned __int8 v6; // bl@1 Player *pPlayer; // ebx@3 - NPCData *v9; // eax@4 + //NPCData *v9; // eax@4 //size_t v10; // eax@6 char *v11; // esi@7 - int v12; // edx@7 - ItemGen *v13; // edi@7 - char v14; // cl@8 - char *v15; // ecx@10 - int v16; // edx@10 + //int v12; // edx@7 + //ItemGen *v13; // edi@7 + //char v14; // cl@8 + //char *v15; // ecx@10 + //int v16; // edx@10 int v17; // eax@10 signed __int64 v18; // qax@18 unsigned int v19; // edi@32 @@ -4891,76 +4891,74 @@ stru351 v57; // [sp+9Ch] [bp-9Ch]@115 char a1[100]; // [sp+B8h] [bp-80h]@3 unsigned int v59; // [sp+11Ch] [bp-1Ch]@3 - size_t v60; // [sp+120h] [bp-18h]@3 + //size_t v60; // [sp+120h] [bp-18h]@3 //Player *v61; // [sp+124h] [bp-14h]@3 //char *Str; // [sp+128h] [bp-10h]@1 int v63; // [sp+12Ch] [bp-Ch]@32 - int v64; // [sp+130h] [bp-8h]@6 - NPCData *v65; // [sp+134h] [bp-4h]@6 + //int v64; // [sp+130h] [bp-8h]@6 + //NPCData *v65; // [sp+134h] [bp-4h]@6 + //int packed; + + v6 = uPlayerID; //Str = lpsz; if ( IsBadStringPtrA(lpsz, 1u) ) return "Invalid String Passed"; - v60 = strlen(lpsz); + a1[0] = 0; pPlayer = &pParty->pPlayers[v6]; v59 = GenerateColorAsCloseAsPossibleToR8G8B8InTargetFormat(255, 255, 155); //v61 = pPlayer; - memset(pTmpBuf2, 0, 0x7D0u); + memset(pTmpBuf2, 0, sizeof(pTmpBuf2)); + + NPCData *npc = nullptr; if ( dword_5C35D4 ) { __debugbreak(); // fix - v9 = array_5913D8[(unsigned int)((char *)array_5913D8[6] + -(dword_591080 != 0) - 1)]; - } - else - v9 = GetNPCData(uDialogue_SpeakingActorNPC_ID); - v65 = v9; + npc = array_5913D8[(unsigned int)((char *)array_5913D8[6] + -(dword_591080 != 0) - 1)]; + } + else + npc = GetNPCData(uDialogue_SpeakingActorNPC_ID); + //v65 = v9; //v10 = 0; - v64 = 0; - - int i = 0; - if ( (signed int)v60 > 0 ) - { - v11 = a4; - v12 = v64; - v13 = a3; - while ( 1 ) - { - v14 = lpsz[v12]; - if ( v14 == '%' ) - break; - pTmpBuf2[i++] = v14; -LABEL_119: - ++v12; - v64 = v12; - if ( v12 >= (signed int)v60 ) - return pTmpBuf2; - } - v15 = &lpsz[v12 + 1]; - v16 = (unsigned __int8)lpsz[v12 + 2]; - v17 = v16 + 10 * (unsigned __int8)*v15 - 528; - - if ( v17 <= 15 ) - { - if ( v17 != 15 ) - { - switch ( v16 + 10 * (unsigned __int8)*v15 ) - { - case 0x211: - v11 = v65->pName; - goto LABEL_118; - case 0x212: + //v64 = 0; + + //int i = 0; + //if ( (signed int)v60 > 0 ) + v11 = a4; + + auto len = strlen(lpsz); + for (int i = 0, dst = 0; i < len; ++i) + { + //v12 = v64; + //v13 = a3; + //while ( 1 ) + //{ + char c = lpsz[i]; + if (c != '%') + pTmpBuf2[dst++] = c; + else + { + //v15 = &lpsz[v12 + 1]; + //v16 = (unsigned __int8)lpsz[v12 + 2]; + //packed = 10 * (int)lpsz[v12 + 1] + lpsz[v12 + 2]; + //v17 = packed - 528;// 10 * '0' + '0' + v17 = 10 * (int)(lpsz[i + 1] - '0') + lpsz[i + 2] - '0'; + + switch ( v17 ) + { + case 1: + v11 = npc->pName; + goto _continue_strcat; + case 2: v11 = pPlayer->pName; - goto LABEL_118; - case 0x213: - case 0x219: - if ( v65->uSex ) - v11 = pGlobalTXT_LocalizationStrings[384];// "her" - else - v11 = pGlobalTXT_LocalizationStrings[383];// "his" - goto LABEL_118; - case 0x215: + goto _continue_strcat; + case 3: + case 4: + v11 = a1; + goto _continue_strcat; + case 5: v18 = (signed __int64)((double)(signed __int64)pParty->uTimePlayed * 0.234375) / 60 / 60 % 24; v11 = pGlobalTXT_LocalizationStrings[397];// "evening" if ( SHIDWORD(v18) <= 0 && SHIDWORD(v18) >= 0 && (unsigned int)v18 >= 5 && SHIDWORD(v18) <= 0 ) @@ -4975,19 +4973,20 @@ v11 = pGlobalTXT_LocalizationStrings[395];// "morning" } } - goto LABEL_118; - case 0x216: + goto _continue_strcat; + case 6: if ( pPlayer->uSex ) v11 = pGlobalTXT_LocalizationStrings[387];// "lady" else v11 = pGlobalTXT_LocalizationStrings[385];// "sir" - goto LABEL_118; - case 0x217: + goto _continue_strcat; + case 7: if ( pPlayer->uSex ) - goto LABEL_43; - v11 = pGlobalTXT_LocalizationStrings[386];// "Sir" - goto LABEL_118; - case 0x218: + v11 = pGlobalTXT_LocalizationStrings[389];// "Lady" + else + v11 = pGlobalTXT_LocalizationStrings[386];// "Sir" + goto _continue_strcat; + case 8: v19 = 0; v63 = 0; v20 = (unsigned __int8 *)pPlayer->field_152; @@ -5019,20 +5018,25 @@ v11 = (char *)pNPCTopics[55].pText; } //pPlayer = v61; - v13 = a3; - goto LABEL_118; - case 0x21A: + //v13 = a3; + goto _continue_strcat; + case 9: + if ( npc->uSex ) + v11 = pGlobalTXT_LocalizationStrings[384];// "her" + else + v11 = pGlobalTXT_LocalizationStrings[383];// "his" + goto _continue_strcat; + case 10: if ( pPlayer->uSex ) -LABEL_43: v11 = pGlobalTXT_LocalizationStrings[389];// "Lady" else v11 = pGlobalTXT_LocalizationStrings[388];// "Lord" - goto LABEL_118; - case 0x21B: + goto _continue_strcat; + case 11: v25 = GetPartyReputation(); goto LABEL_46; - case 0x21C: - v25 = v65->rep; + case 12: + v25 = npc->rep; LABEL_46: if ( v25 >= 25 ) { @@ -5059,79 +5063,91 @@ v11 = pGlobalTXT_LocalizationStrings[392]; } } - goto LABEL_118; - case 0x21D: + goto _continue_strcat; + case 13: v11 = sub_495366(pPlayer->pName[0], pPlayer->uSex); - goto LABEL_118; - case 0x21E: - goto LABEL_93; - case 0x214: + goto _continue_strcat; + case 14: + { + if ( npc->uSex ) + v11 = pGlobalTXT_LocalizationStrings[391];// "sister" + else + v11 = pGlobalTXT_LocalizationStrings[390];// "brother" + goto _continue_strcat; + } + + case 15: + { + v11 = pGlobalTXT_LocalizationStrings[393];// "daughter" +_continue_strcat: + strcat(pTmpBuf2, v11); + dst = strlen(pTmpBuf2); + //v64 += 2; + i += 2; + } + break; + + case 16: + { + if ( npc->uSex ) + v11 = pGlobalTXT_LocalizationStrings[391];// "sister" + else + v11 = pGlobalTXT_LocalizationStrings[390];// "brother" + goto _continue_strcat; + } + case 17: + { + auto pay_percentage = pNPCStats->pProfessions[npc->uProfession - 1].uHirePrice / 100; + if (!pay_percentage) + pay_percentage = 1; + + sprintf(a1, "%lu", pay_percentage); v11 = a1; - goto LABEL_118; - default: - goto LABEL_108; - } - goto LABEL_108; - } - v11 = pGlobalTXT_LocalizationStrings[393];// "daughter" -LABEL_118: - strcat(pTmpBuf2, v11); - i = strlen(pTmpBuf2); - v64 += 2; - v12 = v64; - goto LABEL_119; - } - if ( v17 <= 29 ) - { - if ( v17 == 29 ) - { - //v34 = p2DEvents_minus1__20[13 * (signed int)a4]; - v34 = p2DEvents[(signed int)a4 - 1].fPriceMultiplier; - } - else - { - if ( v16 + 10 * (unsigned __int8)*v15 == 544 ) - { -LABEL_93: - if ( v65->uSex ) - v11 = pGlobalTXT_LocalizationStrings[391];// "sister" - else - v11 = pGlobalTXT_LocalizationStrings[390];// "brother" - goto LABEL_118; - } - if ( v16 + 10 * (unsigned __int8)*v15 == 545 ) - { - v29 = *(&pNPCStats->field_13A58 + 5 * v65->uProfession) / 100; - goto LABEL_91; - } - if ( v16 + 10 * (unsigned __int8)*v15 == 551 ) - { - v47 = pMapStats->GetMapInfo(pCurrentMapName); - if ( v47 ) - v11 = pMapStats->pInfos[v47].pName; - else - v11 = pGlobalTXT_LocalizationStrings[394];// "Unknown" - goto LABEL_118; - } - if ( v16 + 10 * (unsigned __int8)*v15 == 552 ) - { - v46 = v13->GetDisplayName(); - sprintf(a1, format_4E2D80, v59, v46); + goto _continue_strcat; + } + + case 18: + case 19: + case 20: + case 21: + case 22: + case 26: +_continue_strncpy: + strncpy(a1, lpsz + i + 1, 2); + v51 = atoi(a1); + sprintf(a1, "%lu", v51); v11 = a1; - goto LABEL_118; - } - if ( v16 + 10 * (unsigned __int8)*v15 == 553 ) - { - //v37 = &p2DEvents_minus1__20[13 * (signed int)a4]; - v37 = &p2DEvents[(signed int)a4 - 1].fPriceMultiplier; - v38 = *v37; - v39 = v13->GetValue(); - v29 = pPlayer->_4B8233(v39, v38); + goto _continue_strcat; + + case 23: + { + v47 = pMapStats->GetMapInfo(pCurrentMapName); + if ( v47 ) + v11 = pMapStats->pInfos[v47].pName; + else + v11 = pGlobalTXT_LocalizationStrings[394];// "Unknown" + goto _continue_strcat; + } + case 24: + { + v46 = a3->GetDisplayName(); + sprintf(a1, format_4E2D80, v59, v46); + v11 = a1; + goto _continue_strcat; + } + + + case 25: + { + v37 = &p2DEvents[(signed int)a4 - 1].fPriceMultiplier; + v38 = *v37; + v39 = a3->GetValue(); + v29 = pPlayer->_4B8233(v39, v38); switch ( a5 ) { case 3: v44 = *v37; - v45 = v13->GetValue(); + v45 = a3->GetValue(); v29 = pPlayer->_4B8213(v45, v44); break; case 4: @@ -5139,55 +5155,39 @@ break; case 5: v42 = *v37; - v43 = v13->GetValue(); + v43 = a3->GetValue(); v29 = pPlayer->_4B8265(v43, v42); break; case 6: v40 = *v37; - v41 = v13->GetValue(); + v41 = a3->GetValue(); v29 = pPlayer->_4B8213(v41, v40) / 2; break; - } - goto LABEL_98; - } - if ( v16 + 10 * (unsigned __int8)*v15 != 555 ) - { - if ( v16 + 10 * (unsigned __int8)*v15 == 556 ) - { - //v11 = (char *)p2DEvents_minus1__10[13 * (signed int)a4]; - v11 = (char *)p2DEvents[(signed int)a4 - 1].pProprieterTitle; - goto LABEL_118; - } -LABEL_108: - strncpy(a1, v15, 2u); - v51 = atoi(a1); - sprintf(a1, "%lu", v51); - v11 = a1; - goto LABEL_118; - } - v26 = &p2DEvents[(signed int)a4 - 1].fPriceMultiplier; + } + goto _continue_sprintf; + } + + case 27: + { + v26 = &p2DEvents[(signed int)a4 - 1].fPriceMultiplier; v27 = *v26; - v28 = v13->GetValue(); + v28 = a3->GetValue(); v29 = pPlayer->_4B8142(v28, v27); if ( a5 == 3 ) { v35 = *v26; - v36 = v13->GetValue(); + v36 = a3->GetValue(); v29 = pPlayer->_4B8102(v36, v35); - if ( v13->uAttributes & 2 ) - { -LABEL_77: + if ( a3->uAttributes & 2 ) v29 = 1; - goto LABEL_98; - } - goto LABEL_98; + goto _continue_sprintf; } if ( a5 != 4 ) { if ( a5 == 5 ) { v32 = *v26; - v33 = v13->GetValue(); + v33 = a3->GetValue(); v29 = pPlayer->_4B81C3(v33, v32); } else @@ -5195,47 +5195,69 @@ if ( a5 == 6 ) { v30 = *v26; - v31 = v13->GetValue(); + v31 = a3->GetValue(); v29 = pPlayer->_4B8102(v31, v30) / 2; - if ( v13->uAttributes & 2 ) + if ( a3->uAttributes & 2 ) v29 = 1; -LABEL_91: - if ( v29 >= 1 ) - goto LABEL_98; - goto LABEL_77; + if (!v29) + v29 = 1; + goto _continue_sprintf; } } -LABEL_98: +_continue_sprintf: sprintf(a1, "%lu", v29); v11 = a1; - goto LABEL_118; + goto _continue_strcat; } v34 = *v26; - } + v48 = v34; v29 = pPlayer->_4B8179(v48); - goto LABEL_98; - } - if ( v17 != 30 ) - { - switch ( v17 ) - { - case 31: - v52 = pPlayers[1]; - break; - case 32: - v52 = pPlayers[2]; - break; - case 33: - v52 = pPlayers[3]; - break; - default: - if ( v17 != 34 ) - { + goto _continue_sprintf; + } + + case 28: + { + //v11 = (char *)p2DEvents_minus1__10[13 * (signed int)a4]; + v11 = (char *)p2DEvents[(signed int)a4 - 1].pProprieterTitle; + goto _continue_strcat; + } + + case 29: + { + //v34 = p2DEvents_minus1__20[13 * (signed int)a4]; + v34 = p2DEvents[(signed int)a4 - 1].fPriceMultiplier; + v48 = v34; + v29 = pPlayer->_4B8179(v48); + goto _continue_sprintf; + } + + case 30: + { + if ( !a6 ) + goto _continue_strcat; + sub_493F79(&v57, *a6); + v54 = v57.field_18; + v53 = v57.field_C + 1; + v50 = v57.field_14; + sprintf(a1, pGlobalTXT_LocalizationStrings[378], aMonthNames[v50], v53, v54); + v11 = a1; + goto _continue_strcat; + } + + case 31: + case 32: + case 33: + case 34: + v52 = &pParty->pPlayers[v17 - 31]; + v11 = v52->pName; + goto _continue_strcat; + + default: if ( v17 <= 50 || v17 > 70 ) - goto LABEL_108; - if ( v16 + 10 * (unsigned __int8)*v15 - 579 >= 20 ) - goto LABEL_118; + goto _continue_strncpy; + if ( v17 - 51 >= 20 ) + goto _continue_strcat; HIDWORD(v49) = pParty->field_3C.field_440[2 * v17 + 1]; LODWORD(v49) = pParty->field_3C.field_440[2 * v17]; sub_493F79(&v56, v49); @@ -5244,23 +5266,9 @@ v50 = v56.field_14; sprintf(a1, pGlobalTXT_LocalizationStrings[378], aMonthNames[v50], v53, v54); v11 = a1; - goto LABEL_118; - } - v52 = pPlayers[4]; - break; - } - v11 = v52->pName; - goto LABEL_118; - } - if ( !a6 ) - goto LABEL_118; - sub_493F79(&v57, *a6); - v54 = v57.field_18; - v53 = v57.field_C + 1; - v50 = v57.field_14; - sprintf(a1, pGlobalTXT_LocalizationStrings[378], aMonthNames[v50], v53, v54); - v11 = a1; - goto LABEL_118; + goto _continue_strcat; + } + } } return pTmpBuf2; } @@ -9435,7 +9443,7 @@ if ( a1 == 13 ) { ptr_F8B1E8 = (char *)*(&pNPCStats->field_13A64 + 5 * v2->uProfession); - ptr_F8B1E8 = sub_495461((char *)ptr_F8B1E8, uActiveCharacter - 1, 0, 0, 0, 0); + ptr_F8B1E8 = BuilDialogueString((char *)ptr_F8B1E8, uActiveCharacter - 1, 0, 0, 0, 0); sub_4B40E6(); dialogue_show_profession_details = false; goto _return; @@ -9509,7 +9517,7 @@ else v17 = pNPCStats->pProfessions[v2->uProfession - 1].pBenefits; ptr_F8B1E8 = v17; - v18 = sub_495461(v17, uActiveCharacter - 1, 0, 0, 0, 0); + v18 = BuilDialogueString(v17, uActiveCharacter - 1, 0, 0, 0, 0); dialogue_show_profession_details = ~dialogue_show_profession_details; ptr_F8B1E8 = v18; } @@ -9636,7 +9644,7 @@ dialogue_show_profession_details = false; uDialogueType = 13; ptr_F8B1E8 = pNPCStats->pProfessions[v2->uProfession - 1].pJoinText; - ptr_F8B1E8 = sub_495461((char *)ptr_F8B1E8, uActiveCharacter - 1, 0, 0, 0, 0); + ptr_F8B1E8 = BuilDialogueString((char *)ptr_F8B1E8, uActiveCharacter - 1, 0, 0, 0, 0); if ( uActiveCharacter ) pPlayers[uActiveCharacter]->PlaySound(SPEECH_NotEnoughGold, 0); v19 = pGlobalTXT_LocalizationStrings[155]; @@ -12279,7 +12287,7 @@ v4 = (char *)&_this->pInventoryItems[result-1]; if ( v4[20] & 1 ) { - v5 = sub_495461("%24", uActiveCharacter - 1, (ItemGen *)v4, (char *)ptr_507BC0->ptr_1C, 4, 0); + v5 = BuilDialogueString("%24", uActiveCharacter - 1, (ItemGen *)v4, (char *)ptr_507BC0->ptr_1C, 4, 0); v97 = 3; v95 = v5; v92 = white; @@ -12323,7 +12331,7 @@ v9 = uPlayerID; v10 = (char *)pMerchantsSellPhrases[v13]; LABEL_35: - v30 = sub_495461(v10, v9, v90, (char *)v93, v94, v96); + v30 = BuilDialogueString(v10, v9, v90, (char *)v93, v94, v96); v97 = 3; v95 = v30; v92 = white; @@ -13072,7 +13080,7 @@ 3, v16, 2); - v18 = sub_495461((char *)pMerchantsBuyPhrases[v17], uPlayerID, v15, (char *)v14, 2, 0); + v18 = BuilDialogueString((char *)pMerchantsBuyPhrases[v17], uPlayerID, v15, (char *)v14, 2, 0); v44 = 3; v43 = v18; v42 = v56;
--- a/mm7_5.cpp Mon Feb 18 07:26:48 2013 +0200 +++ b/mm7_5.cpp Mon Feb 18 08:48:23 2013 +0200 @@ -13570,7 +13570,7 @@ dword_506548 = 0; dword_506520 = 0; v7 = *pStorylineText->StoreLine[v6].pText;//*(&pStorylineText->field_0 + 3 * v6); - v8 = sub_495461( + v8 = BuilDialogueString( pStorylineText->StoreLine[v6].pText, uActiveCharacter - 1, 0, @@ -16108,7 +16108,7 @@ a1.DrawTitleText(pFontArrus, 0, 0xCu, v13, v11, 3u); a1.uFrameWidth -= 24; a1.uFrameZ = a1.uFrameX + a1.uFrameWidth - 1; - v14 = sub_495461((char *)lpsz, uActiveCharacter - 1, 0, 0, 0, 0); + v14 = BuilDialogueString((char *)lpsz, uActiveCharacter - 1, 0, 0, 0, 0); a1.DrawText(pFontArrus, 100, 36, 0, v14, 0, 0, 0); } }
--- a/mm7_data.h Mon Feb 18 07:26:48 2013 +0200 +++ b/mm7_data.h Mon Feb 18 08:48:23 2013 +0200 @@ -2265,7 +2265,7 @@ unsigned int __fastcall sub_494820(unsigned int a1); char *__fastcall sub_495366(unsigned __int8 a1, unsigned __int8 a2); char *__fastcall GetReputationString(signed int a1); -char *__fastcall sub_495461(char *lpsz, unsigned __int8 uPlayerID, struct ItemGen *a3, char *a4, int a5, __int64 *a6); +char *BuilDialogueString(char *lpsz, unsigned __int8 uPlayerID, struct ItemGen *a3, char *a4, int a5, __int64 *a6); void __cdecl PlayerCreationUI_Draw(); void __cdecl PlayerCreationUI_Initialize(); void __cdecl DeleteCCharFont();
--- a/mm7text_ru.cpp Mon Feb 18 07:26:48 2013 +0200 +++ b/mm7text_ru.cpp Mon Feb 18 08:48:23 2013 +0200 @@ -1082,7 +1082,7 @@ int left = 0, right = table_size - 1, match = 0; - while (left <= right) + while (left < right) { match = left + (right - left) / 2; int rval = _mbsncmp(name, (unsigned char *)table[match].name, name_len);