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;