diff Items.cpp @ 222:8113753ed2ae

more item init fixing
author Gloval
date Sun, 17 Feb 2013 11:29:10 +0400
parents 821fd955c379
children 1bd823f52e3a
line wrap: on
line diff
--- a/Items.cpp	Sat Feb 16 18:46:59 2013 +0400
+++ b/Items.cpp	Sun Feb 17 11:29:10 2013 +0400
@@ -248,8 +248,8 @@
   char v4; // cl@3
   int v5; // esi@3
   char *v6; // esi@21
-  char *v7; // eax@21
-  char *v8; // ecx@22
+  unsigned char *v7; // eax@21
+  unsigned char *v8; // ecx@22
   char *v9; // eax@26
   char v10; // dl@27
   int v11; // ecx@27
@@ -345,7 +345,14 @@
   signed int v101; // [sp+20h] [bp-4h]@200
   signed int v102; // [sp+20h] [bp-4h]@234
   signed int v103; // [sp+20h] [bp-4h]@288
-
+  int i,j;
+  char* test_string;
+  char c;
+  bool break_loop;
+  unsigned int temp_str_len;
+  char* tmp_pos;
+  int decode_step;
+  int item_counter;
   //v1 = this;
 
   pMapStats = new MapStats;
@@ -368,234 +375,516 @@
   pStorylineText->Initialize();
 
   pStdItemsTXT_Raw = 0;
-  v2 = (char *)pEvents_LOD->LoadRaw("stditems.txt", 0);
-  pStdItemsTXT_Raw = v2;
-  strtok(v2, "\r");
-  strtok(0, "\r");
-  strtok(0, "\r");
-  strtok(0, "\r");
-  Str = (char *)&pEnchantments[0].pParam;
-  v79 = 24;
-  do
-  {
-    v3 = strtok(0, "\r") + 1;
-    v97 = 0;
-    v88 = 0;
-    do
-    {
-      v4 = *v3;
-      v5 = 0;
-      while ( v4 != 9 && v4 )
-      {
-        ++v5;
-        v4 = v3[v5];
-      }
-      v72 = (int)&v3[v5];
-      if ( !v3[v5] )
-        v88 = 1;
-      v3[v5] = 0;
-      if ( v5 )
-      {
-        if ( v97 )
-        {
-          if ( v97 == 1 )
-          {
-            *(unsigned int *)Str = (int)RemoveQuotes(v3);
-          }
-          else
-          {
-            if ( v97 > 1 )
-              Str[v97 + 6] = atoi(v3);
-          }
-        }
-        else
-        {
-          *((char **)Str + 1) = RemoveQuotes(v3);
-        }
-      }
-      else
-      {
-        if ( !v97 )
-          v88 = 1;
-      }
-      ++v97;
-      v3 = (char *)(v72 + 1);
-    }
-    while ( v97 <= 10 && !v88 );
-    Str += 20;
-    --v79;
-  }
-  while ( v79 );
-  v6 = (char *)&field_116D8[3];
-  memset(&field_116D8[3], 0, 0x24u);
-  v7 = &pEnchantments[0].field_8[4];
-  v73 = 9;
-  do
-  {
-    v8 = v7;
-    Stra = 24;
-    do
-    {
-      *(unsigned int *)v6 += (unsigned __int8)*v8;
-      v8 += 20;
-      --Stra;
-    }
-    while ( Stra );
-    v6 += 4;
-    ++v7;
-    --v73;
-  }
-  while ( v73 );
-  strtok(0, "\r");
-  strtok(0, "\r");
-  strtok(0, "\r");
-  strtok(0, "\r");
-  strtok(0, "\r");
-  Strb = 17856;
-  do
-  {
-    v9 = strtok(0, "\r") + 1;
-    v98 = 0;
-    v89 = 0;
-    do
-    {
-      v10 = *v9;
-      v11 = 0;
-      while ( v10 != 9 && v10 )
-      {
-        ++v11;
-        v10 = v9[v11];
-      }
-      v12 = (int)&v9[v11];
-      if ( !v9[v11] )
-        v89 = 1;
-      *(unsigned char *)v12 = 0;
-      if ( v11 && v98 > 1 )
-        *(&pItems[0].uItemID + v98 + Strb) = atoi(v9);
-      ++v98;
-      v9 = (char *)(v12 + 1);
-    }
-    while ( v98 < 4 && !v89 );
-    Strb += 2;
-  }
-  while ( Strb < 17868 );
+  pStdItemsTXT_Raw = (char *)pEvents_LOD->LoadRaw("stditems.txt", 0);
+  strtok(pStdItemsTXT_Raw, "\r");
+  strtok(NULL, "\r");
+  strtok(NULL, "\r");
+  strtok(NULL, "\r");
+  //Standard Bonuses by Group	
+  for (i=0;i<24;++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 0: 
+				  pEnchantments[i].pBonusStat=RemoveQuotes(test_string);
+				  break;
+			  case 1:
+				  pEnchantments[i].pOfName= RemoveQuotes(test_string);
+				  break;
+			  default:
+				  pEnchantments[i].to_item[decode_step-2]=atoi(test_string);
+				  }
+			  }
+		  else
+			  { 
+			  if (!decode_step)
+				  break_loop = true;
+			  }
+		  ++decode_step;
+		  test_string=tmp_pos+1;
+		  } while ((decode_step<11)&&!break_loop);
+	  }
+ //Value Mod= (+100 / Plus of Item)?
+  
+  memset(&pEnchantmentsSumm, 0, 36);
+ for(i=0;i<9;++i)
+	 {
+	 for (j=0;j<24;++j)
+		pEnchantmentsSumm[i]+=pEnchantments[j].to_item[i];
+	 }
+  
+  //Bonus range for Standard by Level
+  strtok(NULL, "\r");
+  strtok(NULL, "\r");
+  strtok(NULL, "\r");
+  strtok(NULL, "\r");
+  strtok(NULL, "\r");
+  for(i=0;i<6;++i) //counted from 1
+	 {
+	  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  (decode_step==2)
+			  bonus_ranges[i].minR = atoi(test_string);
+		  else if (decode_step==3)
+			   bonus_ranges[i].maxR =atoi(test_string);
+		  ++decode_step;
+		  test_string=tmp_pos+1;
+		  } while ((decode_step<4)&&!break_loop);
+	  }
+  
+
   pSpcItemsTXT_Raw = 0;
-  v13 = (char *)pEvents_LOD->LoadRaw("spcitems.txt", 0);
-  pSpcItemsTXT_Raw = v13;
-  strtok(v13, "\r");
-  strtok(0, "\r");
-  strtok(0, "\r");
-  strtok(0, "\r");
-  v80 = (char *)&pSpecialEnchantments[0].pParam;
-  Strc = 72;
-  do
-  {
-    v99 = 0;
-    v14 = (int)(strtok(0, "\r") + 1);
-    v90 = 0;
-    do
-    {
-      v15 = *(unsigned char *)v14;
-      v16 = 0;
-      while ( v15 != 9 && v15 )
-      {
-        ++v16;
-        v15 = *(unsigned char *)(v16 + v14);
-      }
-      v74 = v16 + v14;
-      if ( !*(unsigned char *)(v16 + v14) )
-        v90 = 1;
-      *(unsigned char *)(v16 + v14) = 0;
-      if ( v16 )
-      {
-        if ( v99 )
-        {
-          if ( v99 == 1 )
-          {
-            *(char **)v80 = RemoveQuotes((char *)v14);
-          }
-          else
-          {
-            if ( v99 <= 1 )
-            {
-              v17 = v99 == 14;
-            }
-            else
-            {
-              v17 = v99 == 14;
-              if ( v99 < 14 )
-              {
-                v80[v99 + 6] = atoi((const char *)v14);
-                goto LABEL_63;
-              }
-            }
-            if ( v17 )
-            {
-              v18 = atoi((const char *)v14);
-              *((unsigned int *)v80 + 5) = v18;
-              if ( !v18 )
-                *((unsigned int *)v80 + 5) = atoi((const char *)(v14 + 1));
-            }
-            else
-            {
-              if ( v99 == 15 )
-                v80[24] = tolower(*(unsigned char *)v14) - 97;
-            }
-          }
-        }
-        else
-        {
-          *((char **)v80 + 1) = RemoveQuotes((char *)v14);
-        }
-      }
-      else
-      {
-        if ( !v99 )
-          v90 = 1;
-      }
-LABEL_63:
-      ++v99;
-      v14 = v74 + 1;
-    }
-    while ( v99 <= 15 && !v90 );
-    v80 += 28;
-    --Strc;
-  }
-  while ( Strc );
-  v19 = field_11738;
-  memset(field_11738, 0, 0x60u);
-  v20 = &pSpecialEnchantments[0].field_8[4];
-  Strd = 12;
-  v21 = 71;
-  field_11798 = 71;
-  do
-  {
-    v83 = 0;
-    if ( v21 > 0 )
-    {
-      v22 = v20;
-      do
-      {
-        *v19 += (unsigned __int8)*v22;
-        ++v83;
-        v21 = field_11798;
-        v22 += 28;
-      }
-      while ( v83 < v21 );
-    }
-    ++v19;
-    ++v20;
-    --Strd;
-  }
-  while ( Strd );
+  pSpcItemsTXT_Raw = (char *)pEvents_LOD->LoadRaw("spcitems.txt", 0);
+  strtok(pSpcItemsTXT_Raw, "\r");
+  strtok(NULL, "\r");
+  strtok(NULL, "\r");
+  strtok(NULL, "\r");
+  for (i=0;i<72;++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 0: 
+				  pSpecialEnchantments[i].pBonusStatement=RemoveQuotes(test_string);
+				  break;
+			  case 1:
+				  pSpecialEnchantments[i].pNameAdd= RemoveQuotes(test_string);
+				  break;
+			  case 14:
+				  int res;
+				  res=atoi(test_string);
+				  if(!res)
+					  {
+					  ++test_string; 
+					  while (*test_string==' ')//fix X 2 case
+						  ++test_string; 
+						res=atoi(test_string);
+					  }				
+				   pSpecialEnchantments[i].iValue=res;
+				  break;
+			  case 15:
+				  pSpecialEnchantments[i].iTreasureLevel=  tolower(*test_string) - 97;;
+				  break;
+			  default:
+				  pSpecialEnchantments[i].to_item_apply[decode_step-2]=atoi(test_string);
+				  }
+			  }
+		  else
+			  { 
+			  if (!decode_step)
+				  break_loop = true;
+			  }
+		  ++decode_step;
+		  test_string=tmp_pos+1;
+		  } while ((decode_step<16)&&!break_loop);
+	  }
+  
+  pSpecialEnchantments_count = 71;
+  memset(&pSpecialEnchantmentsSumm, 0, 96);
+  for(i=0;i<12;++i)
+	  {
+	  for (j=0;j<pSpecialEnchantments_count;++j)
+		  pSpecialEnchantmentsSumm[i]+=pSpecialEnchantments[j].to_item_apply[i];
+	  }
+
+
+
   Initialize2DA();
-  pItemsTXT_Raw = 0;
-  v23 = (char *)pEvents_LOD->LoadRaw("items.txt", 0);
-  pItemsTXT_Raw = v23;
-  strtok(v23, "\r");
-  v24 = 0;
-  strtok(0, "\r");
-  pItems[0].uItemID = 0;
+
+  pItemsTXT_Raw = NULL;
+  pItemsTXT_Raw = (char*) pEvents_LOD->LoadRaw("items.txt", 0);
+  strtok(pItemsTXT_Raw, "\r");
+  strtok(NULL, "\r");
+  uAllItemsCount = 0;
+    item_counter = 0;
+	while (true)
+		{
+		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 0: //Item #
+					item_counter=atoi(test_string);
+					uAllItemsCount=item_counter;
+					break;
+				case 1: //Pic File
+					pItems[item_counter].pIconName = RemoveQuotes(test_string);
+					break;
+				case 2: //Name
+					pItems[item_counter].pName = RemoveQuotes(test_string);
+					break;
+				case 3: //Value
+					pItems[item_counter].uValue=atoi(test_string);
+					break;
+				case 4: //Equip Stat
+					{
+					if ( !_strcmpi(test_string, "weapon") )
+						{
+						pItems[item_counter].uEquipType = 0;
+						break;
+						}
+					if ( !_strcmpi(test_string, "weapon2") )
+						{
+						pItems[item_counter].uEquipType = 1;
+						break;
+						}
+					if ( !_strcmpi(test_string, "weapon1or2") )
+						{
+						pItems[item_counter].uEquipType = 0;
+						break;
+						}
+					if ( !(_strcmpi(test_string, "missile")&&_strcmpi(test_string, "bow")))
+						{
+						pItems[item_counter].uEquipType = 2;
+						break;
+						}
+					if ( !_strcmpi(test_string, "armor") )
+						{
+						pItems[item_counter].uEquipType = 3;
+						break;
+						}
+					if ( !_strcmpi(test_string, "shield") )
+						{
+						pItems[item_counter].uEquipType = 4;
+						break;
+						}
+					if ( !_strcmpi(test_string, "helm") )
+						{
+						pItems[item_counter].uEquipType = 5;
+						break;
+						}
+					if ( !_strcmpi(test_string, "belt") )
+						{
+						pItems[item_counter].uEquipType = 6;
+						break;
+						}
+					if ( !_strcmpi(test_string, "cloak") )
+						{
+						pItems[item_counter].uEquipType = 7;
+						break;
+						}
+					if ( !_strcmpi(test_string, "gauntlets") )
+						{
+						pItems[item_counter].uEquipType = 8;
+						break;
+						}
+					if ( !_strcmpi(test_string, "boots") )
+						{
+						pItems[item_counter].uEquipType = 9;
+						break;
+						}
+					if ( !_strcmpi(test_string, "ring") )
+						{
+						pItems[item_counter].uEquipType = 10;
+						break;
+						}
+					if ( !_strcmpi(test_string, "amulet") )
+						{
+						pItems[item_counter].uEquipType = 11;
+						break;
+						}
+					if ( !_strcmpi(test_string, "weaponw") )
+						{
+						pItems[item_counter].uEquipType = 12;
+						break;
+						}
+					if ( !(_strcmpi(test_string, "herb")&&_strcmpi(test_string, "reagent")))
+						{
+						pItems[item_counter].uEquipType = 13;
+						break;
+						}
+					if ( !_strcmpi(test_string, "bottle") )
+						{
+						pItems[item_counter].uEquipType = 14;
+						break;
+						}
+					if ( !_strcmpi(test_string, "sscroll") )
+						{
+						pItems[item_counter].uEquipType = 15;
+						break;
+						}
+					if ( !_strcmpi(test_string, "book") )
+						{
+						pItems[item_counter].uEquipType = 16;
+						break;
+						}
+					if ( !_strcmpi(test_string, "mscroll") )
+						{
+						pItems[item_counter].uEquipType = 17;
+						break;
+						}
+					if ( !_strcmpi(test_string, "gold") )
+						{
+						pItems[item_counter].uEquipType = 18;
+						break;
+						}
+					if ( !_strcmpi(test_string, "gem") )
+						{
+						pItems[item_counter].uEquipType = 19;
+						break;
+						}
+					pItems[item_counter].uEquipType = 20;
+					break;
+					}
+				case 5: //Skill Group
+					{
+					if ( !_strcmpi(test_string, "staff") )
+						{
+						pItems[item_counter].uSkillType = 0;
+						break;
+						}
+					if ( !_strcmpi(test_string, "sword") )
+						{
+						pItems[item_counter].uSkillType = 1;
+						break;
+						}
+					if ( !_strcmpi(test_string, "dagger") )
+						{
+						pItems[item_counter].uSkillType = 2;
+						break;
+						}
+					if ( !_strcmpi(test_string, "axe") )
+						{
+						pItems[item_counter].uSkillType = 3;
+						break;
+						}
+					if ( !_strcmpi(test_string, "spear") )
+						{
+						pItems[item_counter].uSkillType = 4;
+						break;
+						}
+					if ( !_strcmpi(test_string, "bow") )
+						{
+						pItems[item_counter].uSkillType = 5;
+						break;
+						}
+					if ( !_strcmpi(test_string, "mace") )
+						{
+						pItems[item_counter].uSkillType = 6;
+						break;
+						}
+					if ( !_strcmpi(test_string, "blaster") )
+						{
+						pItems[item_counter].uSkillType = 7;
+						break;
+						}
+					if ( !_strcmpi(test_string, "shield") )
+						{
+						pItems[item_counter].uSkillType = 8;
+						break;
+						}
+					if ( !_strcmpi(test_string, "leather") )
+						{
+						pItems[item_counter].uSkillType = 9;
+						break;
+						}
+					if ( !_strcmpi(test_string, "chain") )
+						{
+						pItems[item_counter].uSkillType = 10;
+						break;
+						}
+					if ( !_strcmpi(test_string, "plate") )
+						{
+						pItems[item_counter].uSkillType = 11;
+						break;
+						}
+					if ( !_strcmpi(test_string, "club") )
+						{
+						pItems[item_counter].uSkillType = 37;
+						break;
+						}
+					pItems[item_counter].uSkillType = 38;
+					break;
+					}
+				case 6: //Mod1
+					{
+					int ii;
+					char* test_char;
+					int tst_len;
+					tst_len=strlen(test_string);
+					pItems[item_counter].uDamageDice=0;
+					pItems[item_counter].uDamageRoll=0;
+					test_char=test_string;
+					for (ii=0; ii<tst_len; ++ii)
+						{
+						if (tolower(*test_char)=='d')
+							{
+							*test_char=0;
+							pItems[item_counter].uDamageDice=atoi(test_string);
+							pItems[item_counter].uDamageRoll=atoi(test_char+1);
+							*test_char='d';
+							break;
+							}
+						++test_char;
+						}
+					test_char=test_string;
+					if ((ii==tst_len)&&(tolower(*test_char)=='s'))
+						{
+						pItems[item_counter].uDamageDice=atoi(test_char+1);
+						pItems[item_counter].uDamageRoll=1;
+						}
+					break;
+					}
+				case 7: //Mod2
+					pItems[item_counter].uDamageMod=atoi(test_string);
+					break;
+				case 8: //material
+					{
+					if ( !_strcmpi(test_string, "artifact") )
+						{
+						pItems[item_counter].uMaterial = 1;
+						break;
+						}
+					if ( !_strcmpi(test_string, "relic") )
+						{
+						pItems[item_counter].uMaterial = 2;
+						break;
+						}
+					if ( !_strcmpi(test_string, "special") )
+						{
+						pItems[item_counter].uMaterial = 3;
+						break;
+						}
+					pItems[item_counter].uMaterial = 0;
+					break;}
+				case 9:  //ID/Rep/St
+					pItems[item_counter].uItemID_Rep_St=atoi(test_string);
+					break;
+				case 10: //Not identified name
+					pItems[item_counter].pUnidentifiedName = RemoveQuotes(test_string);
+					break;
+				case 11: //Sprite Index
+					pItems[item_counter].uSpriteID=atoi(test_string);
+					break;
+				case 12: //VarA
+					pItems[item_counter]._additional_value=0;
+					pItems[item_counter]._bonus_type=0;
+					if (pItems[item_counter].uMaterial==3)
+						{
+						  for(int ii=0; ii<24; ++ii)
+							  {
+							  if (stricmp(test_string,pEnchantments[ii].pBonusStat))
+							  {
+							    pItems[item_counter]._bonus_type=ii+1;
+								break;
+							  }
+							  }
+						  if (!pItems[item_counter]._bonus_type)
+							  {
+								for(int ii=0; ii<72; ++ii)
+									{
+									if (stricmp(test_string,pSpecialEnchantments[ii].pBonusStatement))
+										{
+										 pItems[item_counter]._additional_value=ii+1;
+										}
+									}
+							  }
+						}
+					
+					break;
+				case 13: //VarB
+					if ((pItems[item_counter].uMaterial==3)&&(pItems[item_counter]._bonus_type))
+						{
+						char b_s=atoi(test_string);
+						if (b_s)
+							pItems[item_counter]._bonus_strength=b_s;
+						else
+							pItems[item_counter]._bonus_strength=1;
+						}
+					else
+						pItems[item_counter]._bonus_strength=0;
+					break;
+				case 14: //Equip X
+					pItems[item_counter].uEquipX=atoi(test_string);
+					break;
+				case 15: //Equip Y
+					pItems[item_counter].uEquipY=atoi(test_string);
+					break;
+				case 16: //Notes
+					pItems[item_counter].pDescription = RemoveQuotes(test_string);
+					break;
+					
+					}
+				}
+			else
+				{ 
+				if (!decode_step)
+					break_loop = true;
+				}
+			++decode_step;
+			test_string=tmp_pos+1;
+			} while ((decode_step<17)&&!break_loop);
+			++item_counter;
+			if (item_counter>799)
+				break;
+		}
+
+/*
   while ( 2 )
   {
     v100 = 0;
@@ -925,7 +1214,7 @@
             if ( v30[37] == 3 )
             {
               v85 = 0;
-              Strf = (const char **)&pEnchantments[0].pParam;
+              Strf = (const char **)&pEnchantments[0].pOfName;
               while ( _strcmpi(*Strf, v25) )
               {
                 ++v85;
@@ -938,7 +1227,7 @@
               if ( !v81[39] )
               {
                 v86 = 0;
-                Strg = (const char **)&pSpecialEnchantments[0].pParam;
+                Strg = (const char **)&pSpecialEnchantments[0].pNameAdd;
                 while ( _strcmpi(*Strg, v25) )
                 {
                   ++v86;
@@ -995,16 +1284,17 @@
       continue;
     break;
   }
-  pRndItemsTXT_Raw = 0;
-  pItems[0].uItemID = v24;
-  v33 = (char *)pEvents_LOD->LoadRaw("rnditems.txt", 0);
-  v34 = "\r";
-  pRndItemsTXT_Raw = v33;
-  strtok(v33, "\r");
-  v35 = 0;
+  */
+
+  pRndItemsTXT_Raw = NULL;
+  uAllItemsCount = item_counter;
+  pRndItemsTXT_Raw = (char *)pEvents_LOD->LoadRaw("rnditems.txt", 0);
+  strtok(pRndItemsTXT_Raw, "\r");
   strtok(0, "\r");
   strtok(0, "\r");
   strtok(0, "\r");
+
+  v35 = 0;
   do
   {
     v101 = 0;
@@ -1030,22 +1320,22 @@
           switch ( v101 )
           {
             case 2:
-              pItems[v35].field_2C = atoi(v36);
+            //  pItems[v35].field_2C = atoi(v36);
               break;
             case 3:
-              pItems[v35].field_2D = atoi(v36);
+           //   pItems[v35].field_2D = atoi(v36);
               break;
             case 4:
-              pItems[v35].field_2E = atoi(v36);
+          //    pItems[v35].field_2E = atoi(v36);
               break;
             case 5:
-              pItems[v35].field_2F = atoi(v36);
+         //     pItems[v35].field_2F = atoi(v36);
               break;
             case 6:
-              *((unsigned char *)&pItems[0].uItemID + 16 * (3 * v35 + 3)) = atoi(v36);
+              //*((unsigned char *)&pItems[0].uItemID + 16 * (3 * v35 + 3)) = atoi(v36);
               break;
             case 7:
-              BYTE1(pItems[v35 + 1].uItemID) = atoi(v36);
+            //  BYTE1(pItems[v35 + 1].uItemID) = atoi(v36);
               break;
           }
         }
@@ -1066,6 +1356,8 @@
     ++v35;
   }
   while ( v35 < 619 );
+
+
   if ( pRndItemsTXT_Raw )
   {
     pAllocator->FreeChunk(pRndItemsTXT_Raw);
@@ -1091,6 +1383,7 @@
     --v77;
   }
   while ( v77 );
+
   v42 = 0;
   strtok(0, "\r");
   strtok(0, "\r");
@@ -1238,6 +1531,9 @@
     ++v87;
   }
   while ( v87 < 3 );
+
+
+
   pSkillDescTXT_Raw = 0;
   pSkillDescTXT_Raw = (char *)pEvents_LOD->LoadRaw("skilldes.txt", 0);
   strtok(pSkillDescTXT_Raw, "\r");
@@ -1293,6 +1589,8 @@
     ++v46;
   }
   while ( v46 < 37 );
+
+
   pStatsTXT_Raw = 0;
   pStatsTXT_Raw = (char *)pEvents_LOD->LoadRaw("stats.txt", 0);
   strtok(pStatsTXT_Raw, "\r");
@@ -1301,7 +1599,7 @@
   {
     v51 = 0;
     v95 = 0;
-    v52 = strtok(0, v34) + 1;
+    v52 = strtok(0, pStatsTXT_Raw) + 1;
     do
     {
       v53 = *v52;
@@ -1411,6 +1709,8 @@
     ++Stri;
   }
   while ( Stri < 26 );
+
+
   pClassTXT_Raw = 0;
   pClassTXT_Raw = (char *)pEvents_LOD->LoadRaw("class.txt", 0);
   strtok(pClassTXT_Raw, v34);
@@ -1491,18 +1791,18 @@
 
 //----- (00453B3C) --------------------------------------------------------
 void ItemsTable::LoadPotions()
-{
-  
-  CHAR Text[90]; // [sp+Ch] [bp-6Ch]@26
-  char* test_string;
-  unsigned int uRow;
-  unsigned int uColumn;
-  unsigned __int8 potion_value;
+	{
 
-  if ( pPotionsTXT_Raw )
-    pAllocator->FreeChunk(pPotionsTXT_Raw);
-  pPotionsTXT_Raw = NULL;
-  pPotionsTXT_Raw = (char *)pEvents_LOD->LoadRaw("potion.txt", 0);
+	CHAR Text[90]; // [sp+Ch] [bp-6Ch]@26
+	char* test_string;
+	unsigned int uRow;
+	unsigned int uColumn;
+	unsigned __int8 potion_value;
+
+	if ( pPotionsTXT_Raw )
+		pAllocator->FreeChunk(pPotionsTXT_Raw);
+	pPotionsTXT_Raw = NULL;
+	pPotionsTXT_Raw = (char *)pEvents_LOD->LoadRaw("potion.txt", 0);
 	test_string = strtok(pPotionsTXT_Raw,"\t\r\n");
 	while ( 1 )
 		{
@@ -1513,142 +1813,140 @@
 			}
 		if ( !strcmp(test_string, "222") )
 			break;
-		
+
 		test_string = strtok(NULL, "\t\r\n");
 		}
-  while ( 1 )
-  {
-    test_string = strtok(NULL, "\t\r\n");
-    
-    if ( !test_string )
+	while ( 1 )
 		{
-		MessageBoxA(0, "Error Pre-Parsing Potion Table", "Load Error", MB_ICONHAND|MB_CANCELTRYCONTINUE);
-		return;
+		test_string = strtok(NULL, "\t\r\n");
+
+		if ( !test_string )
+			{
+			MessageBoxA(0, "Error Pre-Parsing Potion Table", "Load Error", MB_ICONHAND|MB_CANCELTRYCONTINUE);
+			return;
+			}
+		if ( !strcmp(test_string, "222") )
+			break;
 		}
-if ( !strcmp(test_string, "222") )
-      break;
-  }
 
-  for (uRow = 0;uRow < 50; ++uRow)
-  {
-    int skip_count;
-    for (skip_count = 0;skip_count < 6; ++skip_count)
-    {
-      if ( !strtok(NULL, "\r\t\n") )
-        break;
-    }
-    if ( skip_count != 6 )
-      break;
-	for (uColumn = 0; uColumn < 50; ++uColumn)
+	for (uRow = 0;uRow < 50; ++uRow)
 		{
-      test_string = strtok(NULL, "\r\t\n");   
-      if ( !test_string )
-        break;
-      potion_value = atoi(test_string);
-	  char c=*test_string;
-      if ( !potion_value )
-      {
-        if ( tolower(c) == 'e' )
-          potion_value = atoi(test_string + 1);
-        else
-          potion_value = 0;
-      }
-	  this->potion_data[uRow][uColumn]=potion_value;
-    }
-    if ( uColumn != 50 )
-      break;
-    strtok(NULL, "\r\t\n");
-  }
+		int skip_count;
+		for (skip_count = 0;skip_count < 6; ++skip_count)
+			{
+			if ( !strtok(NULL, "\r\t\n") )
+				break;
+			}
+		if ( skip_count != 6 )
+			break;
+		for (uColumn = 0; uColumn < 50; ++uColumn)
+			{
+			test_string = strtok(NULL, "\r\t\n");   
+			if ( !test_string )
+				break;
+			potion_value = atoi(test_string);
+			char c=*test_string;
+			if ( !potion_value )
+				{
+				if ( tolower(c) == 'e' )
+					potion_value = atoi(test_string + 1);
+				else
+					potion_value = 0;
+				}
+			this->potion_data[uRow][uColumn]=potion_value;
+			}
+		if ( uColumn != 50 )
+			break;
+		strtok(NULL, "\r\t\n");
+		}
 
-  if ( uRow != 50 )
-  {
-    wsprintfA(Text, "Error Parsing Potion Table at Row: %d Column: %d", uRow, uColumn);
-    MessageBoxA(0, Text, "Parsing Error", MB_ICONHAND|MB_CANCELTRYCONTINUE);
-  }
-  if ( pPotionsTXT_Raw )
-  {
-    pAllocator->FreeChunk(pPotionsTXT_Raw);
-    pPotionsTXT_Raw = 0;
-  }
-}
+	if ( uRow != 50 )
+		{
+		wsprintfA(Text, "Error Parsing Potion Table at Row: %d Column: %d", uRow, uColumn);
+		MessageBoxA(0, Text, "Parsing Error", MB_ICONHAND|MB_CANCELTRYCONTINUE);
+		}
+	if ( pPotionsTXT_Raw )
+		{
+		pAllocator->FreeChunk(pPotionsTXT_Raw);
+		pPotionsTXT_Raw = 0;
+		}
+	}
 
 //----- (00453CE5) --------------------------------------------------------
 void ItemsTable::LoadPotionNotes()
-{
-  
-  CHAR Text[90]; 
-  char* test_string;
-  unsigned int uRow;
-  unsigned int uColumn;
-  unsigned __int8 potion_note;
+	{
+
+	CHAR Text[90]; 
+	char* test_string;
+	unsigned int uRow;
+	unsigned int uColumn;
+	unsigned __int8 potion_note;
+
+	if ( pPotionNotesTXT_Raw )
+		pAllocator->FreeChunk(pPotionNotesTXT_Raw);
+	pPotionNotesTXT_Raw = NULL;
+	pPotionNotesTXT_Raw = (char *)pEvents_LOD->LoadRaw("potnotes.txt", 0);
+	test_string = strtok(pPotionNotesTXT_Raw ,"\t\r\n");
+	while ( 1 )
+		{
+		if ( !test_string )
+			{
+			MessageBoxA(0, "Error Pre-Parsing Potion Table", "Load Error", MB_ICONHAND|MB_CANCELTRYCONTINUE);
+			return;
+			}	
+		if ( !strcmp(test_string, "222") )
+			break;
+		test_string = strtok(NULL, "\t\r\n");
+		}
+	while ( 1 )
+		{
+		test_string = strtok(NULL, "\t\r\n");
+
+		if ( !test_string )
+			{
+			MessageBoxA(0, "Error Pre-Parsing Potion Table", "Load Error", MB_ICONHAND|MB_CANCELTRYCONTINUE);
+			return;
+			}
+		if ( !strcmp(test_string, "222") )
+			break;
+		}
 
-  if ( pPotionNotesTXT_Raw )
-    pAllocator->FreeChunk(pPotionNotesTXT_Raw);
-  pPotionNotesTXT_Raw = NULL;
-  pPotionNotesTXT_Raw = (char *)pEvents_LOD->LoadRaw("potnotes.txt", 0);
-  test_string = strtok(pPotionNotesTXT_Raw ,"\t\r\n");
-  while ( 1 )
-	  {
-	    
-	  if ( !test_string )
-		  {
-		  MessageBoxA(0, "Error Pre-Parsing Potion Table", "Load Error", MB_ICONHAND|MB_CANCELTRYCONTINUE);
-		  return;
-		  }	
-	  if ( !strcmp(test_string, "222") )
-		  break;
-	  test_string = strtok(NULL, "\t\r\n");
-	  }
-	  while ( 1 )
-		  {
-		  test_string = strtok(NULL, "\t\r\n");
-		  
-		  if ( !test_string )
-			  {
-			  MessageBoxA(0, "Error Pre-Parsing Potion Table", "Load Error", MB_ICONHAND|MB_CANCELTRYCONTINUE);
-			  return;
-			  }
-		  if ( !strcmp(test_string, "222") )
-			  break;
-		  }
- 
-  for (uRow = 0;uRow < 50; ++uRow)
-	  {
-	  int skip_count;
-	  for (skip_count = 0;skip_count < 6; ++skip_count)
-		  {
-		  if ( !strtok(NULL, "\r\t\n") )
-			  break;
-		  }
-	  if ( skip_count != 6 )
-		  break;
-	  for (uColumn = 0; uColumn < 50; ++uColumn)
-		  {
-		  test_string = strtok(NULL, "\r\t\n");   
-		  if ( !test_string )
-			  break;
-		  potion_note = atoi(test_string);
-		  char c=*test_string;
-		  if ( !potion_note )
-			  {
-			  if ( tolower(c) == 'e' )
-				  potion_note = atoi(test_string + 1);
-			  else
-				  potion_note = 0;
-			  }
-		  this->potion_note[uRow][uColumn]=potion_note;
-		  }
-	  if ( uColumn != 50 )
-		  break;
-	  strtok(NULL, "\r\t\n");
-	  }
-
-  if ( uRow != 50 )
-	  {
-	  wsprintfA(Text, "Error Parsing Potion Table at Row: %d Column: %d", uRow, uColumn);
-	  MessageBoxA(0, Text, "Parsing Error", MB_ICONHAND|MB_CANCELTRYCONTINUE);
-	  }
-}
+	for (uRow = 0;uRow < 50; ++uRow)
+		{
+		int skip_count;
+		for (skip_count = 0;skip_count < 6; ++skip_count)
+			{
+			if ( !strtok(NULL, "\r\t\n") )
+				break;
+			}
+		if ( skip_count != 6 )
+			break;
+		for (uColumn = 0; uColumn < 50; ++uColumn)
+			{
+			test_string = strtok(NULL, "\r\t\n");   
+			if ( !test_string )
+				break;
+			potion_note = atoi(test_string);
+			char c=*test_string;
+			if ( !potion_note )
+				{
+				if ( tolower(c) == 'e' )
+					potion_note = atoi(test_string + 1);
+				else
+					potion_note = 0;
+				}
+			this->potion_note[uRow][uColumn]=potion_note;
+			}
+		if ( uColumn != 50 )
+			break;
+		strtok(NULL, "\r\t\n");
+		}
+	if ( uRow != 50 )
+		{
+		wsprintfA(Text, "Error Parsing Potion Table at Row: %d Column: %d", uRow, uColumn);
+		MessageBoxA(0, Text, "Parsing Error", MB_ICONHAND|MB_CANCELTRYCONTINUE);
+		}
+	}
 
 
 //----- (00456442) --------------------------------------------------------
@@ -1677,7 +1975,7 @@
   }
   else
   {
-    v3 = *(unsigned int *)&pItemsTable->pEnchantments[23].field_8[28 * v4 + 8];
+    v3 = *(unsigned int *)&pItemsTable->pEnchantments[23].to_item[28 * v4 + 8];
     if ( (unsigned int)v3 > 0xA )
       return uBaseValue + v3;
     result = uBaseValue * v3;
@@ -1773,12 +2071,12 @@
         sprintf(
           item__getname_buffer,
           "%s %s",
-          *(unsigned int *)&pItemsTable->pEnchantments[22].field_8[28 * v7 + 8],
+          *(unsigned int *)&pItemsTable->pEnchantments[22].to_item[28 * v7 + 8],
           pItemsTable->pItems[v1->uItemID].pName);
         return v4;
       }
       strcat(item__getname_buffer, " ");
-      v9 = *(const char **)&pItemsTable->pEnchantments[22].field_8[28 * v1->uAdditionalValue + 8];
+      v9 = *(const char **)&pItemsTable->pEnchantments[22].to_item[28 * v1->uAdditionalValue + 8];
     }
     strcat(item__getname_buffer, v9);
   }
@@ -2068,7 +2366,7 @@
   if ( v4->uItemID == ITEM_SPELLBOOK_LIGHT_DIVINE_INTERVENTION
     && !(unsigned __int16)_449B57_test_bit(pParty->_award_bits, 239) )
     v4->uItemID = ITEM_SPELLBOOK_LIGHT_SUN_BURST;
-  if ( BYTE2(pItemsTable->pItems[v4->uItemID + 1].uItemID) )
+  if ( pItemsTable->pItems[v4->uItemID + 1].uItemID_Rep_St )
     v4->uAttributes = 0;
   else
     v4->uAttributes = 1;
@@ -2115,9 +2413,9 @@
       v26 = rand() % v5->field_116D8[v5->pItems[v4->uItemID].uEquipType];
       v27 = v4->uItemID;
       v4->_bonus_type = 0;
-      for ( i = v5->pEnchantments[0].field_8[v5->pItems[v27].uEquipType + 1];
+      for ( i = v5->pEnchantments[0].to_item[v5->pItems[v27].uEquipType + 1];
             i < v26;
-            i += v5->pEnchantments[v4->_bonus_type].field_8[v5->pItems[v29].uEquipType + 1] )
+            i += v5->pEnchantments[v4->_bonus_type].to_item[v5->pItems[v29].uEquipType + 1] )
       {
         v29 = v4->uItemID;
         ++v4->_bonus_type;
@@ -2143,7 +2441,7 @@
   memset(&Dst, 0, 0xC80u);
   v39 = 0;
   a2b = 0;
-  if ( v5->field_11798 > 0 )
+  if ( v5->pSpecialEnchantments_count > 0 )
   {
     v52 = -16 - (uint)v5;
     v58 = (int *)&Dst;
@@ -2162,8 +2460,8 @@
           if ( !*(unsigned char *)v40 || v43 == 1 )
           {
 LABEL_117:
-            v39 += *((unsigned char *)&v5->pItems[0].uItemID + v40 + v52 + v5->pItems[v4->uItemID].uEquipType);
-            if ( *((unsigned char *)&v5->pItems[0].uItemID + v40 + v52 + v5->pItems[v4->uItemID].uEquipType) )
+            v39 += *((unsigned char *)&v5->uAllItemsCount + v40 + v52 + v5->pItems[v4->uItemID].uEquipType);
+            if ( *((unsigned char *)&v5->uAllItemsCount + v40 + v52 + v5->pItems[v4->uItemID].uEquipType) )
             {
               v44 = v58;
               ++v58;
@@ -2191,12 +2489,12 @@
       ++a2b;
       v40 += 28;
     }
-    while ( a2b < v5->field_11798 );
+    while ( a2b < v5->pSpecialEnchantments_count );
   }
   v45 = rand();
   v4->uAdditionalValue = *(uint *)Dst;
   v46 = v45 % v39 + 1;
-  a2c = *((unsigned char *)&v5->pItems[0].uItemID + 28 * (*(uint *)Dst + 1389) + v5->pItems[v4->uItemID].uEquipType);
+  a2c = *((unsigned char *)&v5->uAllItemsCount + 28 * (*(uint *)Dst + 1389) + v5->pItems[v4->uItemID].uEquipType);
   if ( a2c < v46 )
   {
     for ( j = (int *)&Dst; ; j = (int *)v59 )
@@ -2206,7 +2504,7 @@
       v59 = v49;
       v50 = *(unsigned int *)v49;
       v4->uAdditionalValue = v50;
-      a2c += *((unsigned char *)&v5->pItems[0].uItemID + 28 * (v50 + 1389) + v5->pItems[v48].uEquipType);
+      a2c += *((unsigned char *)&v5->uAllItemsCount + 28 * (v50 + 1389) + v5->pItems[v48].uEquipType);
       if ( a2c >= v46 )
         break;
     }