Mercurial > mm7
diff mm7_3.cpp @ 263:8cf4fe6b4941
Слияние
author | Ritor1 |
---|---|
date | Mon, 18 Feb 2013 12:38:38 +0600 |
parents | c3bfe1eb3de7 96f3a1177b37 |
children | 006188b68143 |
line wrap: on
line diff
--- a/mm7_3.cpp Mon Feb 18 12:38:07 2013 +0600 +++ b/mm7_3.cpp Mon Feb 18 12:38:38 2013 +0600 @@ -4703,1188 +4703,9 @@ return result; } -//----- (00476387) -------------------------------------------------------- -bool PartyHasDragon() -{ - return pNPCStats->pNewNPCData[57].Hired(); -} - -//----- (00476395) -------------------------------------------------------- -//0x26 Wizard eye at skill level 2 -bool __thiscall CheckHiredNPCSpeciality(unsigned int uProfession) -{ - bool result; // eax@2 - signed int v2; // esi@3 - char *v3; // eax@4 - - if ( bNoNPCHiring == 1 ) - return 0; - v2 = 0; - if ( (signed int)pNPCStats->uNumNewNPCs <= 0 ) - { -LABEL_8: - result = 0; - if ( pParty->pHirelings[0].uProfession != uProfession ) - { - LOBYTE(result) = pParty->pHirelings[1].uProfession == uProfession; - return result; - } - } - else - { - v3 = (char *)&pNPCStats->pNewNPCData[0].uFlags; - while ( *((int *)v3 + 4) != uProfession || !(*v3 & 0x80) ) - { - ++v2; - v3 += 76; - if ( v2 >= (signed int)pNPCStats->uNumNewNPCs ) - goto LABEL_8; - } - result = 0; - } - ++result; - return result; -} -// 6BE3C5: using guessed type char bNoNPCHiring; - -//----- (004763E0) -------------------------------------------------------- -void InitializeAwards() -{ - - int i; - char* test_string; - unsigned char c; - bool break_loop; - unsigned int temp_str_len; - char* tmp_pos; - int decode_step; - int item_counter; - - if ( pAwardsTXT_Raw ) - pAllocator->FreeChunk(pAwardsTXT_Raw); - pAwardsTXT_Raw = NULL; - pAwardsTXT_Raw = (char *)pEvents_LOD->LoadRaw("awards.txt", 0); - strtok(pAwardsTXT_Raw, "\r"); - - for (i=1; i<104; ++i) - { - test_string = strtok(NULL, "\r") + 1; - break_loop = false; - decode_step=0; - do - { - c = *(unsigned char*)test_string; - temp_str_len = 0; - while((c!='\t')&&(c>0)) - { - ++temp_str_len; - c=test_string[temp_str_len]; - } - tmp_pos=test_string+temp_str_len; - if (*tmp_pos == 0) - break_loop = true; - *tmp_pos = 0; - if (temp_str_len) - { - if (decode_step==1) - pAwards[i].pText=RemoveQuotes(test_string); - else if (decode_step==2) - pAwards[i].uSort=atoi(test_string); - } - else - { - break_loop = true; - } - ++decode_step; - test_string=tmp_pos+1; - } while ((decode_step<3)&&!break_loop); - } - -} -// 7241C8: using guessed type int dword_7241C8; - -//----- (004764C2) -------------------------------------------------------- -void InitializeScrolls() -{ - - int i; - char* test_string; - unsigned char c; - bool break_loop; - unsigned int temp_str_len; - char* tmp_pos; - int decode_step; - int item_counter; - - if ( pScrollsTXT_Raw ) - pAllocator->FreeChunk(pScrollsTXT_Raw); - pScrollsTXT_Raw = NULL; - pScrollsTXT_Raw = (char *)pEvents_LOD->LoadRaw("scroll.txt", 0); - strtok(pScrollsTXT_Raw, "\r"); - for (i=0; i<82; ++i) - { - test_string = strtok(NULL, "\r") + 1; - break_loop = false; - decode_step=0; - do - { - c = *(unsigned char*)test_string; - temp_str_len = 0; - while((c!='\t')&&(c>0)) - { - ++temp_str_len; - c=test_string[temp_str_len]; - } - tmp_pos=test_string+temp_str_len; - if (*tmp_pos == 0) - break_loop = true; - *tmp_pos = 0; - if (temp_str_len) - { - if ( decode_step == 1) - pScrolls[i]=RemoveQuotes(test_string); - } - else - { - break_loop = true; - } - ++decode_step; - test_string=tmp_pos+1; - } while ((decode_step<2)&&!break_loop); - } -} - - -//----- (00476590) -------------------------------------------------------- -void InitializeMerchants() -{ - int i; - char* test_string; - unsigned char c; - bool break_loop; - unsigned int temp_str_len; - char* tmp_pos; - int decode_step; - int item_counter; - - if ( pMerchantsTXT_Raw ) - pAllocator->FreeChunk(pMerchantsTXT_Raw); - pMerchantsTXT_Raw = NULL; - pMerchantsTXT_Raw = (char *)pEvents_LOD->LoadRaw("merchant.txt", 0); - strtok(pMerchantsTXT_Raw, "\r"); - - for (i=0; i<7; ++i) - { - test_string = strtok(NULL, "\r") + 1; - break_loop = false; - decode_step=0; - do - { - c = *(unsigned char*)test_string; - temp_str_len = 0; - while((c!='\t')&&(c>0)) - { - ++temp_str_len; - c=test_string[temp_str_len]; - } - tmp_pos=test_string+temp_str_len; - if (*tmp_pos == 0) - break_loop = true; - *tmp_pos = 0; - if (temp_str_len) - { - switch (decode_step) - { - case 1: - pMerchantsBuyPhrases[i]=RemoveQuotes(test_string); - break; - case 2: - pMerchantsSellPhrases[i]=RemoveQuotes(test_string); - break; - case 3: - pMerchantsRepairPhrases[i]=RemoveQuotes(test_string); - break; - case 4: - pMerchantsIdentifyPhrases[i]=RemoveQuotes(test_string); - break; - } - } - else - { - break_loop = true; - } - ++decode_step; - test_string=tmp_pos+1; - } while ((decode_step<5)&&!break_loop); - } - -} - -//----- (00476682) -------------------------------------------------------- -void InitializeTransitions() -{ - int i; - char* test_string; - unsigned char c; - bool break_loop; - unsigned int temp_str_len; - char* tmp_pos; - int decode_step; - int item_counter; - - if ( pTransitionsTXT_Raw ) - pAllocator->FreeChunk(pTransitionsTXT_Raw); - pTransitionsTXT_Raw = NULL; - pTransitionsTXT_Raw = (char *)pEvents_LOD->LoadRaw("trans.txt", 0); - strtok(pTransitionsTXT_Raw, "\r"); - - for (i=0; i<464; ++i) - { - test_string = strtok(NULL, "\r") + 1; - break_loop = false; - decode_step=0; - do - { - c = *(unsigned char*)test_string; - temp_str_len = 0; - while((c!='\t')&&(c>0)) - { - ++temp_str_len; - c=test_string[temp_str_len]; - } - tmp_pos=test_string+temp_str_len; - if (*tmp_pos == 0) - break_loop = true; - *tmp_pos = 0; - if (temp_str_len) - { - if ( decode_step == 1) - pTransitionStrings[i]=RemoveQuotes(test_string); - } - else - { - break_loop = true; - } - ++decode_step; - test_string=tmp_pos+1; - } while ((decode_step<2)&&!break_loop); - } -} - -//----- (00476750) -------------------------------------------------------- -void __cdecl InitializeAutonotes() -{ - int i; - char* test_string; - unsigned char c; - bool break_loop; - unsigned int temp_str_len; - char* tmp_pos; - int decode_step; - int item_counter; - - if ( pAutonoteTXT_Raw ) - pAllocator->FreeChunk(pAutonoteTXT_Raw); - pAutonoteTXT_Raw = 0; - pAutonoteTXT_Raw = (char *)pEvents_LOD->LoadRaw("autonote.txt", 0); - strtok(pAutonoteTXT_Raw, "\r"); - - for (i=0; i<195; ++i) - { - test_string = strtok(NULL, "\r") + 1; - break_loop = false; - decode_step=0; - do - { - c = *(unsigned char*)test_string; - temp_str_len = 0; - while((c!='\t')&&(c>0)) - { - ++temp_str_len; - c=test_string[temp_str_len]; - } - tmp_pos=test_string+temp_str_len; - if (*tmp_pos == 0) - break_loop = true; - *tmp_pos = 0; - if (temp_str_len) - { - switch (decode_step) - { - case 1: - pAutonoteTxt[i].pText=RemoveQuotes(test_string); - break; - case 2: - { - if ( !_strcmpi(test_string, "potion")) - { - pAutonoteTxt[i].eType = AUTONOTE_POTION_RECEPIE; - break; - } - if ( !_strcmpi(test_string, "stat") ) - { - pAutonoteTxt[i].eType = AUTONOTE_STAT_HINT; - break; - } - if ( !_strcmpi(test_string, "seer") ) - { - pAutonoteTxt[i].eType = AUTONOTE_SEER; - break; - } - if ( !_strcmpi(test_string, "obelisk") ) - { - pAutonoteTxt[i].eType = AUTONOTE_OBELISK; - break; - } - if ( !_strcmpi(test_string, "teacher") ) - { - pAutonoteTxt[i].eType = AUTONOTE_TEACHER; - break; - } - pAutonoteTxt[i].eType =AUTONOTE_MISC; - break; - } - } - } - else - { - break_loop = true; - } - ++decode_step; - test_string=tmp_pos+1; - } while ((decode_step<3)&&!break_loop); - } -} - - -//----- (004768A9) -------------------------------------------------------- -void __cdecl InitializeQuests() -{ - int i; - char* test_string; - unsigned char c; - bool break_loop; - unsigned int temp_str_len; - char* tmp_pos; - int decode_step; - int item_counter; - - if ( pQuestsTXT_Raw ) - pAllocator->FreeChunk(pQuestsTXT_Raw); - pQuestsTXT_Raw = NULL; - pQuestsTXT_Raw = (char *)pEvents_LOD->LoadRaw("quests.txt", 0); - strtok(pQuestsTXT_Raw, "\r"); - - for (i=0; i<512; ++i) - { - test_string = strtok(NULL, "\r") + 1; - break_loop = false; - decode_step=0; - do - { - c = *(unsigned char*)test_string; - temp_str_len = 0; - while((c!='\t')&&(c>0)) - { - ++temp_str_len; - c=test_string[temp_str_len]; - } - tmp_pos=test_string+temp_str_len; - if (*tmp_pos == 0) - break_loop = true; - *tmp_pos = 0; - if (temp_str_len) - { - if ( decode_step == 1) - pQuestTable[i] =RemoveQuotes(test_string); - } - else - { - break_loop = true; - } - ++decode_step; - test_string=tmp_pos+1; - } while ((decode_step<2)&&!break_loop); - } -} - - - -//----- (00476977) -------------------------------------------------------- -void NPCStats::Initialize2() -{ - int i; - char* test_string; - unsigned char c; - bool break_loop; - unsigned int temp_str_len; - char* tmp_pos; - int decode_step; - int item_counter; - - - if (pNPCTextTXT_Raw) - pAllocator->FreeChunk(pNPCTextTXT_Raw); - pNPCTextTXT_Raw =NULL; - pNPCTextTXT_Raw = (char *)pEvents_LOD->LoadRaw("npctext.txt", 0); - strtok(pNPCTextTXT_Raw, "\r"); - - for (i=0; i<789; ++i) - { - test_string = strtok(NULL, "\r") + 1; - break_loop = false; - decode_step=0; - do - { - c = *(unsigned char*)test_string; - temp_str_len = 0; - while((c!='\t')&&(c>0)) - { - ++temp_str_len; - c=test_string[temp_str_len]; - } - tmp_pos=test_string+temp_str_len; - if (*tmp_pos == 0) - break_loop = true; - *tmp_pos = 0; - if (temp_str_len) - { - if ( decode_step == 1) - pNPCTopics[i].pText =RemoveQuotes(test_string); - } - else - { - break_loop = true; - } - ++decode_step; - test_string=tmp_pos+1; - } while ((decode_step<2)&&!break_loop); - } - - if (pNPCTopicTXT_Raw) - pAllocator->FreeChunk(pNPCTopicTXT_Raw); - pNPCTopicTXT_Raw =NULL; - pNPCTopicTXT_Raw = (char *)pEvents_LOD->LoadRaw("npctopic.txt", 0); - strtok(pNPCTopicTXT_Raw, "\r"); - - for (i=0; i<579; ++i) - { - test_string = strtok(NULL, "\r") + 1; - break_loop = false; - decode_step=0; - do - { - c = *(unsigned char*)test_string; - temp_str_len = 0; - while((c!='\t')&&(c>0)) - { - ++temp_str_len; - c=test_string[temp_str_len]; - } - tmp_pos=test_string+temp_str_len; - if (*tmp_pos == 0) - break_loop = true; - *tmp_pos = 0; - if (temp_str_len) - { - if ( decode_step == 1) - pNPCTopics[i].pTopic = RemoveQuotes(test_string); - } - else - { - break_loop = true; - } - ++decode_step; - test_string=tmp_pos+1; - } while ((decode_step<2)&&!break_loop); - } - - if (pNPCDistTXT_Raw) - pAllocator->FreeChunk(pNPCDistTXT_Raw); - pNPCDistTXT_Raw = NULL; - pNPCDistTXT_Raw = (char *)pEvents_LOD->LoadRaw("npcdist.txt", 0); - strtok(pNPCDistTXT_Raw, "\r"); - strtok(NULL, "\r"); - - for (i=1; i<59; ++i) - { - test_string = strtok(NULL, "\r") + 1; - break_loop = false; - decode_step=0; - do - { - c = *(unsigned char*)test_string; - temp_str_len = 0; - while((c!='\t')&&(c>0)) - { - ++temp_str_len; - c=test_string[temp_str_len]; - } - tmp_pos=test_string+temp_str_len; - if (*tmp_pos == 0) - break_loop = true; - *tmp_pos = 0; - if (temp_str_len) - { - if ((decode_step>0)&&(decode_step<77)) - { - array_16544[decode_step].field_4[i]=atoi(test_string); - } - else if (decode_step==0) - { - array_16544[0].field_4[i]=10; - } - } - else - { - break_loop = true; - } - ++decode_step; - test_string=tmp_pos+1; - } while ((decode_step<78)&&!break_loop); - } - - for (i=0; i<78; ++i) - { - array_16544[i].field_0=0; - for (int ii=1; ii<59; ++ii) - { - array_16544[i].field_0+=array_16544[i].field_4[ii]; - } - } - - if (pNPCDistTXT_Raw) - { - pAllocator->FreeChunk(pNPCDistTXT_Raw); - pNPCDistTXT_Raw = NULL; - } -} - -//----- (00476C60) -------------------------------------------------------- -void NPCStats::_476C60() -{ - for (uint i = 1; i < uNumNewNPCs; ++i) - pNewNPCData[i].pName = pNPCNames2[i - 1]; - - if (pParty->pHirelings[0].pName) - pParty->pHirelings[0].pName = pParty->pHireling1Name; - if (pParty->pHirelings[1].pName) - pParty->pHirelings[1].pName = pParty->pHireling2Name; -} - -//----- (00476CB5) -------------------------------------------------------- -void NPCStats::Initialize1() -{ - NPCStats *pNPCStats; // esi@1 - char *pRaw; // eax@1 - char *pHouse; // edi@1 - char *v4; // eax@2 - char v5; // dl@3 - int v6; // ecx@3 - char *v7; // eax@11 - char *v8; // eax@26 - char *v9; // ecx@27 - char v10; // dl@28 - int v11; // eax@28 - int v12; // edi@32 - char *v13; // eax@42 - char *v14; // eax@43 - char v15; // dl@44 - int v16; // ecx@44 - int v17; // edi@48 - char *v18; // eax@56 - char *v19; // eax@57 - char v20; // cl@58 - int v21; // edi@58 - int v22; // esi@62 - int v23; // [sp+Ch] [bp-14h]@7 - signed int v24; // [sp+10h] [bp-10h]@1 - signed int v25; // [sp+10h] [bp-10h]@26 - signed int v26; // [sp+10h] [bp-10h]@42 - signed int v27; // [sp+10h] [bp-10h]@56 - char *Str; // [sp+14h] [bp-Ch]@1 - NPCGreeting *pGreetings; // [sp+14h] [bp-Ch]@26 - unsigned __int16 *pGroups; // [sp+14h] [bp-Ch]@42 - char **pCatchPhrase; // [sp+14h] [bp-Ch]@56 - signed int v32; // [sp+18h] [bp-8h]@2 - signed int v33; // [sp+18h] [bp-8h]@27 - signed int v34; // [sp+18h] [bp-8h]@43 - signed int v35; // [sp+18h] [bp-8h]@57 - signed int v36; // [sp+1Ch] [bp-4h]@2 - signed int v37; // [sp+1Ch] [bp-4h]@27 - signed int v38; // [sp+1Ch] [bp-4h]@43 - signed int v39; // [sp+1Ch] [bp-4h]@57 - - pNPCStats = this; - pRaw = (char *)pEvents_LOD->LoadRaw("npcdata.txt", 0); - pNPCStats->pNPCDataTXT_Raw = pRaw; - strtok(pRaw, "\r"); - strtok(0, "\r"); - pHouse = (char *)&pNPCStats->pNPCData[1].house; - Str = (char *)pNPCStats->pNPCNames2; - v24 = 500; - do - { - v32 = 0; - v4 = strtok(0, "\r") + 1; - v36 = -1; - do - { - v5 = *v4; - v6 = 0; - while ( v5 != 9 && v5 ) - { - ++v6; - v5 = v4[v6]; - } - v23 = (int)&v4[v6]; - if ( !v4[v6] ) - v32 = 1; - v4[v6] = 0; - if ( v6 ) - { - switch ( v36 ) - { - case 0: - v7 = RemoveQuotes(v4); - *((int *)pHouse - 5) = (int)v7; - *(int *)Str = (int)v7; - break; - case 1: - *((int *)pHouse - 4) = atoi(v4); - break; - case 5: - *(int *)pHouse = atoi(v4); - break; - case 6: - *((int *)pHouse + 1) = atoi(v4); - break; - case 7: - *((int *)pHouse + 2) = atoi(v4); - break; - case 8: - *((int *)pHouse + 3) = *v4 == 121; - break; - case 9: - *((int *)pHouse + 5) = atoi(v4); - break; - case 10: - *((int *)pHouse + 6) = atoi(v4); - break; - case 11: - *((int *)pHouse + 7) = atoi(v4); - break; - case 12: - *((int *)pHouse + 8) = atoi(v4); - break; - case 13: - *((int *)pHouse + 9) = atoi(v4); - break; - case 14: - *((int *)pHouse + 10) = atoi(v4); - break; - default: - break; - } - } - ++v36; - v4 = (char *)(v23 + 1); - } - while ( v36 + 1 <= 15 && !v32 ); - Str += 4; - pHouse += 76; - --v24; - } - while ( v24 ); - pNPCStats->uNumNewNPCs = 501; - v8 = (char *)pEvents_LOD->LoadRaw("npcgreet.txt", 0); - pNPCStats->pNPCGreetTXT_Raw = v8; - strtok(v8, "\r"); - pGreetings = pNPCStats->pNPCGreetings; - v25 = 205; - do - { - v37 = 0; - v33 = 0; - v9 = strtok(0, "\r") + 1; - do - { - v10 = *v9; - v11 = 0; - while ( v10 != 9 && v10 ) - { - ++v11; - v10 = v9[v11]; - } - v12 = (int)&v9[v11]; - if ( !v9[v11] ) - v33 = 1; - *(char *)v12 = 0; - if ( v11 ) - { - if ( v37 == 1 ) - { - pGreetings->pGreeting1 = (char *)RemoveQuotes(v9); - } - else - { - if ( v37 == 2 ) - pGreetings->pGreeting2 = (char *)RemoveQuotes(v9); - } - } - ++v37; - v9 = (char *)(v12 + 1); - } - while ( v37 <= 2 && !v33 ); - ++pGreetings; - --v25; - } - while ( v25 ); - v13 = (char *)pEvents_LOD->LoadRaw("npcgroup.txt", 0); - pNPCStats->pNCPGroupTXT_Raw = v13; - strtok(v13, "\r"); - pGroups = pNPCStats->pGroups; - v26 = 51; - do - { - v14 = strtok(0, "\r") + 1; - v38 = 0; - v34 = 0; - do - { - v15 = *v14; - v16 = 0; - while ( v15 != 9 && v15 ) - { - ++v16; - v15 = v14[v16]; - } - v17 = (int)&v14[v16]; - if ( !v14[v16] ) - v34 = 1; - *(char *)v17 = 0; - if ( v16 && v38 == 1 ) - *pGroups = atoi(v14); - ++v38; - v14 = (char *)(v17 + 1); - } - while ( v38 <= 1 && !v34 ); - ++pGroups; - --v26; - } - while ( v26 ); - v18 = (char *)pEvents_LOD->LoadRaw("npcnews.txt", 0); - pNPCStats->pNPCNewsTXT_Raw = v18; - strtok(v18, "\r"); - pCatchPhrase = pNPCStats->pCatchPhrases; - v27 = 51; - do - { - v19 = strtok(0, "\r") + 1; - v39 = 0; - v35 = 0; - do - { - v20 = *v19; - v21 = 0; - while ( v20 != 9 && v20 ) - { - ++v21; - v20 = v19[v21]; - } - v22 = (int)&v19[v21]; - if ( !v19[v21] ) - v35 = 1; - *(char *)v22 = 0; - if ( v21 && v39 == 1 ) - *pCatchPhrase = (char *)RemoveQuotes(v19); - ++v39; - v19 = (char *)(v22 + 1); - } - while ( v39 <= 1 && !v35 ); - ++pCatchPhrase; - --v27; - } - while ( v27 ); -} - -//----- (0047702F) -------------------------------------------------------- -void NPCStats::Initialize() -{ - //NPCStats *v1; // edi@1 - char *v2; // ebx@1 - //char *v3; // eax@1 - char *v4; // ebx@3 - char v5; // al@4 - int v6; // ecx@4 - //char *v7; // eax@18 - char *v8; // ebx@18 - char *v9; // ecx@19 - char v10; // dl@20 - int v11; // eax@20 - char v12; // zf@41 - signed int v13; // [sp+Ch] [bp-14h]@18 - int v14; // [sp+10h] [bp-10h]@4 - int v15; // [sp+10h] [bp-10h]@24 - char *v16; // [sp+14h] [bp-Ch]@1 - signed int v17; // [sp+14h] [bp-Ch]@19 - unsigned int v18; // [sp+18h] [bp-8h]@1 - char *v19; // [sp+18h] [bp-8h]@18 - signed int v20; // [sp+1Ch] [bp-4h]@3 - signed int v21; // [sp+1Ch] [bp-4h]@19 - //v1 = this; - - Initialize1(); - Initialize2(); - - InitializeQuests(); - InitializeAutonotes(); - InitializeAwards(); - InitializeTransitions(); - InitializeMerchants(); - InitializeScrolls(); - v2 = 0; - field_17FC0 = 0; - pNPCNamesTXT_Raw = 0; - //v3 = (char *)pEvents_LOD->LoadRaw("npcnames.txt", 0); - pNPCNamesTXT_Raw = (char *)pEvents_LOD->LoadRaw("npcnames.txt", 0); - strtok(pNPCNamesTXT_Raw, "\r"); - v18 = 0; - v16 = (char *)pNPCNames; - while ( 1 ) - { - v4 = strtok(v2, "\r") + 1; - v20 = 0; - do - { - v5 = *v4; - v6 = 0; - v14 = 0; - if ( *v4 == 9 ) - goto LABEL_45; - do - { - if ( !v5 ) - break; - if ( v5 == 10 ) - break; - ++v6; - v14 = v6; - v5 = v4[v6]; - } - while ( v5 != 9 ); - if ( v6 ) - { - v4[v6] = 0; - if ( v20 ) - { - if ( v20 == 1 ) - *((int *)v16 + 1) = (int)RemoveQuotes(v4); - } - else - { - *(int *)v16 = (int)RemoveQuotes(v4); - } - } - else - { -LABEL_45: - if ( v20 == 1 && !uNumNPCNames[1] ) - uNumNPCNames[1] = v18; - } - ++v20; - v4 += v14 + 1; - } - while ( v20 <= 1 ); - ++v18; - v16 += 8; - if ( (signed int)v18 >= 540 ) - break; - v2 = 0; - } - pNPCProfTXT_Raw = 0; - uNumNPCNames[0] = v18; - //v7 = (char *)pEvents_LOD->LoadRaw("npcprof.txt", 0); - pNPCProfTXT_Raw = (char *)pEvents_LOD->LoadRaw("npcprof.txt", 0); - strtok(pNPCProfTXT_Raw, "\r"); - strtok(0, "\r"); - strtok(0, "\r"); - strtok(0, "\r"); - v8 = (char *)&pProfessions[0].pJoinText; - v19 = (char *)&pProfessions[0].pJoinText; - v13 = 58; - do - { - v21 = 0; - v9 = strtok(0, "\r") + 1; - v17 = 0; - do - { - v10 = *v9; - v11 = 0; - if ( *v9 != 9 ) - { - do - { - if ( !v10 ) - break; - ++v11; - v10 = v9[v11]; - } - while ( v10 != 9 ); - v8 = v19; - } - v15 = (int)&v9[v11]; - if ( !v9[v11] ) - v17 = 1; - *(char *)v15 = 0; - if ( v11 ) - { - switch ( v21 ) - { - case 2: - *((int *)v8 - 3) = atoi(v9); - break; - case 3: - *((int *)v8 - 1) = (int)RemoveQuotes(v9); - break; - case 4: - *((int *)v8 - 2) = (int)RemoveQuotes(v9); - break; - case 5: - *(int *)v8 = (int)RemoveQuotes(v9); - break; - case 6: - *((int *)v8 + 1) = (int)RemoveQuotes(v9); - break; - } - } - else - { - if ( !v21 ) - v17 = 1; - } - ++v21; - v9 = (char *)(v15 + 1); - } - while ( v21 <= 6 && !v17 ); - v8 += 20; - v12 = v13-- == 1; - v19 = v8; - } - while ( !v12 ); - uNumNPCProfessions = 59; -} - -//----- (00477266) -------------------------------------------------------- -void NPCStats::Release() -{ - NPCStats *v1; // esi@1 - void *v2; // ST00_4@1 - int v3; // ebx@1 - - v1 = this; - pAllocator->FreeChunk(this->pNPCTopicTXT_Raw); - v2 = v1->pNPCTextTXT_Raw; - v1->pNPCNewsTXT_Raw = 0; - pAllocator->FreeChunk(v2); - v1->pNPCNewsTXT_Raw = 0; - pAllocator->FreeChunk(0); - v1->pNPCNewsTXT_Raw = 0; - pAllocator->FreeChunk(v1->pNPCProfTXT_Raw); - v1->pNPCProfTXT_Raw = 0; - pAllocator->FreeChunk(v1->pNPCNamesTXT_Raw); - v1->pNPCNamesTXT_Raw = 0; - pAllocator->FreeChunk(v1->pNPCDataTXT_Raw); - v1->pNPCDataTXT_Raw = 0; - pAllocator->FreeChunk(v1->pNPCDistTXT_Raw); - v1->pNPCDistTXT_Raw = 0; - v3 = (int)&v1->pNPCGreetTXT_Raw; - pAllocator->FreeChunk(v1->pNPCGreetTXT_Raw); - v1 = (NPCStats *)((char *)v1 + 98296); - *(int *)v3 = 0; - pAllocator->FreeChunk(v1->pNPCData[0].pName); - v1->pNPCData[0].pName = 0; -} - -//----- (0047730C) -------------------------------------------------------- -int __fastcall const_1(int a1, int) -{ - return 1; -} -// 47730C: using guessed type int __stdcall const_1(int); - -//----- (0047732C) -------------------------------------------------------- -bool NPCStats::InitializeAdditionalNPCs(NPCData *a2, int a3, int a4, int a5) -{ - //NPCStats *v5; // ebx@1 - signed __int64 v6; // qax@1 - int v7; // esi@1 - int v8; // edx@1 - NPCData *v9; // edi@1 - int v10; // eax@1 - //int v11; // eax@23 - int v12; // ecx@23 - int v13; // edx@28 - int v14; // esi@37 - int v15; // edx@37 - int v16; // ecx@37 - int v17; // eax@37 - int v18; // edx@37 - signed int result; // eax@39 - int v20; // [sp+Ch] [bp-Ch]@1 - signed int v21; // [sp+10h] [bp-8h]@1 - signed int v22; // [sp+14h] [bp-4h]@1 - int v23; // [sp+24h] [bp+Ch]@1 - - - v23 = a3 - 1; - //v5 = this; - v6 = (signed __int64)((double)v23 * -0.33333334); - v7 = (unsigned __int8)byte_4E8394[-(_DWORD)v6 + 28]; - v20 = (unsigned __int8)byte_4E8394[-(_DWORD)v6 + 116]; - v8 = rand() % uNumNPCNames[v7]; - v9 = a2; - a2->uSex = v7; - a2->pName = pNPCNames[v8][v7]; - v10 = 0; - v22 = 0; - v21 = 0; - - while ( 1 ) - { - if ( v20 == v10 ) - { - if ( v7 == v10 ) - { - v23 = 2; - a2 = (NPCData *)100; - } - else - { - if ( v7 - v10 == 1 ) - { - v23 = 201; - a2 = (NPCData *)250; - } - } - } - else - { - switch ( v20 - v10 ) - { - case 1: - if ( v7 == v10 ) - { - v23 = 400; - a2 = (NPCData *)430; - } - else - { - if ( v7 - v10 == 1 ) - { - v23 = 460; - a2 = (NPCData *)490; - } - } - break; - case 2: - if ( v7 == v10 ) - { - v23 = 500; - a2 = (NPCData *)520; - } - else - { - if ( v7 - v10 == 1 ) - { - v23 = 530; - a2 = (NPCData *)550; - } - } - break; - case 3: - if ( v7 == v10 ) - { - v23 = 300; - a2 = (NPCData *)330; - } - else - { - if ( v7 - v10 == 1 ) - { - v23 = 360; - a2 = (NPCData *)387; - } - } - break; - } - } - v12 = v23 + rand() % ((int)a2 - v23 + 1); - if ( const_1(v12, v7) == 1 ) - v21 = 1; - ++v22; - if ( v22 >= 4 ) - { - v12 = v23; - v21 = 1; - } - if ( v21 ) - break; - v10 = 0; - } - - v9->uPortraitID = v12; - v9->uFlags = 0; - v9->fame = 0; - v13 = rand() % 100 + 1; - - if ( v13 >= 60 ) - { - if ( v13 >= 90 ) - { - if ( v13 >= 95 ) - { - if ( v13 >= 98 ) - v9->rep = -600; - else - v9->rep = 400; - } - else - { - v9->rep = -300; - } - } - else - { - v9->rep = 200; - } - } - else - { - v9->rep = 0; - } - - //v14 = (int)((char *)v5 + 64 * a5); - //v15 = rand() % *(_DWORD *)(v14 + 91460); - v15 = rand() % array_16544[a5].field_0; - v16 = 0; - v17 = 0; - v18 = v15 + 1; - - if ( v18 > 0 ) - { - do - //v14 += *(char *)(v14 + v17++ + 0x16548); - v16 += array_16544[a5].field_4[v17++]; - while ( v16 < v18 ); - } - v9->uProfession = v17 - 1; - v9->house = a4; - v9->field_24 = 1; - v9->joins = 1; - return true; -} + + + // 47730C: using guessed type int __stdcall const_1(int); //----- (0047752B) -------------------------------------------------------- @@ -16297,7 +15118,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; @@ -16317,7 +15138,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; @@ -16337,7 +15158,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; @@ -16439,7 +15260,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; @@ -16514,7 +15335,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;