Item Convert from main.exe (Source)

Results 1 to 8 of 8
  1. #1
    Enthusiast 8bitcore is offline
    MemberRank
    Oct 2009 Join Date
    UkraineLocation
    33Posts

    Item Convert from main.exe (Source)

    From this function you can change view of level/stat requirement, additional/excellent/luck options, etc on item
    1.04d gmo

    .h
    Code:
    #pragma pack(push, 1)
    typedef struct	//-> Complete (size: 107)
    {
    /*+0*/		WORD	m_Type;
    /*+2*/		int		m_Level;
    /*+6*/		BYTE	Unknown6;
    /*+7*/		BYTE	Unknown7;
    /*+8*/		BYTE	Unknown8;
    /*+9*/		WORD	DamageMin;
    /*+11*/		WORD	DamageMax;
    /*+13*/		BYTE	Unknown13;
    /*+14*/		WORD	Defense;
    /*+16*/		WORD	MagicDefense;
    /*+18*/		BYTE	MagicDamage;
    /*+19*/		BYTE	Unknown19;
    /*+20*/		WORD	Unknown20;
    /*+22*/		BYTE	Durability;
    /*+23*/		BYTE	ExcellentOption;
    /*+24*/		BYTE	AncientOption;
    /*+25*/		WORD	ReqStrenght;
    /*+27*/		WORD	ReqDextirity;
    /*+29*/		WORD	ReqEnergy;
    /*+31*/		WORD	ReqVitality;
    /*+33*/		WORD	ReqCommand;
    /*+35*/		WORD	ReqLevel;
    /*+37*/		BYTE    SpecialCount;
    /*+38*/		WORD	SpecialType[8];
    /*+54*/		BYTE	SpecialValue[8];
    /*+62*/		int		UniqueID;
    /*+66*/		BYTE	Unknown66;
    /*+67*/		BYTE 	PosX;
    /*+68*/		BYTE 	PosY;
    /*+69*/		WORD 	HarmonyType;
    /*+71*/		WORD	HarmonyValue;
    /*+73*/		BYTE 	Is380Item;
    /*+74*/		BYTE	SocketOption[5];
    /*+79*/		BYTE	Unknown79;
    /*+80*/		BYTE	SocketSeedIndex[5];
    /*+85*/		BYTE	SocketSphereLevel[5];
    /*+90*/		BYTE	SocketSet;
    BYTE gap01[5];
    /*+96*/		BYTE	DurabilityState;
    /*+97*/		BYTE 	PeriodItem;
    /*+98*/		BYTE 	ExpiredItem;
    /*+99*/		int		ExpireDateConvert;
    /*+103*/	int		Unknown103;
    } ObjectItem, * lpItemObj;
    #pragma pack(pop)
    .cpp
    Code:
    #define sub_4F9B50 ((char(*) (int a1, int a2)) 0x4F9B50)
    
    char sub_58B8D0(signed int a1)
    {
    	if ( (a1 >= ITEM(2,8) && a1 <= ITEM(2,15))
    		|| a1 == ITEM(2,17)
    		|| a1 == ITEM(2,18)
    		|| a1 == ITEM(2,21) )
    		return TRUE;
    
    	return FALSE;
    }
    
    char sub_5C9370(signed int a1, int a2)
    {
    	BYTE result = FALSE;
    
    	int v2 = (a2 + a1) % 512;
    
    	if ( a1 >= ITEM(7,0) && a1 <= ITEM(12,0) && v2 >= 62 && v2 <= 72 )
    		result = TRUE;
    
    	return result;
    }
    
    char gObjItemConvert(lpItemObj CItem, BYTE a2, BYTE a3, BYTE a4)
    {
    	int *v4; // eax@439
    	int v6; // [sp+14h] [bp-68h]@156
    	int v10; // [sp+2Ch] [bp-50h]@115
    	int v11; // [sp+34h] [bp-48h]@89
    	int v12; // [sp+3Ch] [bp-40h]@73
    	int v13; // [sp+44h] [bp-38h]@55
    	int v14; // [sp+4Ch] [bp-30h]@37
    	int v16; // [sp+54h] [bp-28h]@1
    	int v20; // [sp+64h] [bp-18h]@165
    	int v21; // [sp+68h] [bp-14h]@1
    	char v22; // [sp+6Fh] [bp-Dh]@1
    	int v24; // [sp+74h] [bp-8h]@1
    	int v25; // [sp+78h] [bp-4h]@22
    
    	CItem->Level = a2;
    	v24 = (a2 >> 3) & 0xF;
    	v16 = a3 & 0x3F;
    	v21 = a3 & 0x3F;
    	v22 = 0;
    
    	if ( (CItem->m_Type >= ITEM(12,3) && CItem->m_Type <= ITEM(12,6))
    		|| (CItem->m_Type >= ITEM(12,36) && CItem->m_Type <= ITEM(12,40))
    		|| (CItem->m_Type >= ITEM(12,42) && CItem->m_Type <= ITEM(12,43))
    		|| CItem->m_Type == ITEM(0,19)
    		|| CItem->m_Type == 2066
    		|| CItem->m_Type == 2570
    		|| CItem->m_Type == 1037
    		|| CItem->m_Type == ITEM(13,30)
    		|| (CItem->m_Type >= 6274 && CItem->m_Type <= 6278)
    		|| (CItem->m_Type >= ITEM(12,49) && CItem->m_Type <= ITEM(12,50)) // RF capes
    		|| CItem->m_Type == 6279
    		|| CItem->m_Type == 2596 )
    		v16 = 0;
    
    	if ( a4 % 4 == 1 || a4 % 4 == 2 )
    	{
    		v16 = 1;
    		v22 = 1;
    	}
    
    	v25 = *(int*)0x8128AC0 + 84 * CItem->m_Type;
    	CItem->Unknown8 = *(BYTE *)(v25 + 30);
    	CItem->Unknown19 = *(BYTE *)(v25 + 45);
    	CItem->DamageMin = *(BYTE *)(v25 + 40);
    	CItem->DamageMax = *(BYTE *)(v25 + 41);
    	CItem->Unknown13 = *(BYTE *)(v25 + 42);
    	CItem->Defense = *(BYTE *)(v25 + 43);
    	CItem->MagicDefense = *(BYTE *)(v25 + 44);
    	CItem->Unknown20 = *(BYTE *)(v25 + 46);
    	CItem->Unknown18 = *(BYTE *)(v25 + 49);
    	int v17 = *(WORD *)(v25 + 32) + 30;
    	
    	int damage = 0;
    	switch ( CItem->m_Type )
    	{
    		case 0x406:
    		damage = 15;
    		break;
    		case 0x806:
    		damage = 30;
    		break;
    		case 0xA07:
    		damage = 25;
    		break;
    	}
    	//MIN DAMAGE
    	if ( *(BYTE *)(v25 + 40) > 0 )
    	{
    		if ( v16 > 0 )
    		{
    			if ( *(WORD *)(v25 + 32) )
    			{
    				if ( damage )
    					CItem->DamageMin += damage;
    				else
    					CItem->DamageMin += 25 * *(BYTE *)(v25 + 40) / *(WORD *)(v25 + 32) + 5;
    			}
    		}
    
    		if ( v22 )
    			CItem->DamageMin += v17 / 40 + 5;
    		if ( v24 <= 9 )
    			v14 = (a2 >> 3) & 0xF;
    		else
    			v14 = 9;
    		CItem->DamageMin += 3 * v14;
    
    		switch ( v24 )
    		{
    			case 15:
    			CItem->DamageMin += 9;
    			goto LABEL_41;
    			case 14:
    			LABEL_41:
    			CItem->DamageMin += 8;
    			goto LABEL_42;
    			case 13:
    			LABEL_42:
    			CItem->DamageMin += 7;
    			goto LABEL_43;
    			case 12:
    			LABEL_43:
    			CItem->DamageMin += 6;
    			goto LABEL_44;
    			case 11:
    			LABEL_44:
    			CItem->DamageMin += 5;
    			goto LABEL_45;
    			case 10:
    			LABEL_45:
    			CItem->DamageMin += 4;
    			break;
    			default:
    			break;
    		}
    	}
    	// MAX DAMAGE
    	if ( *(BYTE *)(v25 + 41) > 0 )
    	{
    		if ( v16 > 0 )
    		{
    			if ( *(WORD *)(v25 + 32) )
    			{
    				if ( damage )
    					CItem->DamageMax += damage;
    				else
    					CItem->DamageMax += 25 * *(BYTE *)(v25 + 40) / *(WORD *)(v25 + 32) + 5;
    			}
    		}
    
    		if ( v22 )
    			CItem->DamageMax += v17 / 40 + 5;
    		if ( v24 <= 9 )
    			v13 = (a2 >> 3) & 0xF;
    		else
    			v13 = 9;
    		CItem->DamageMax += 3 * v13;
    
    		switch ( v24 )
    		{
    			case 15:
    			CItem->DamageMax += 9;
    			goto LABEL_59;
    			case 14:
    			LABEL_59:
    			CItem->DamageMax += 8;
    			goto LABEL_60;
    			case 13:
    			LABEL_60:
    			CItem->DamageMax += 7;
    			goto LABEL_61;
    			case 12:
    			LABEL_61:
    			CItem->DamageMax += 6;
    			goto LABEL_62;
    			case 11:
    			LABEL_62:
    			CItem->DamageMax += 5;
    			goto LABEL_63;
    			case 10:
    			LABEL_63:
    			CItem->DamageMax += 4;
    			break;
    			default:
    			break;
    		}
    	}
    	// DAMAGE ?
    	if ( *(BYTE *)(v25 + 49) > 0 )
    	{
    		if ( v16 > 0 )
    		{
    			if ( *(WORD *)(v25 + 32) )
    			{
    				if ( damage )
    					CItem->Unknown18 += damage;
    				else
    					CItem->Unknown18 += 25 * *(BYTE *)(v25 + 49) / *(WORD *)(v25 + 32) + 5;
    			}
    		}
    
    		if ( v22 )
    			CItem->Unknown18 += v17 / 60 + 2;
    		if ( v24 <= 9 )
    			v12 = (a2 >> 3) & 0xF;
    		else
    			v12 = 9;
    		CItem->Unknown18 += 3 * v12;
    
    		switch ( v24 )
    		{
    			case 15:
    			CItem->Unknown18 += 9;
    			goto LABEL_77;
    			case 14:
    			LABEL_77:
    			CItem->Unknown18 += 8;
    			goto LABEL_78;
    			case 13:
    			LABEL_78:
    			CItem->Unknown18 += 7;
    			goto LABEL_79;
    			case 12:
    			LABEL_79:
    			CItem->Unknown18 += 6;
    			goto LABEL_80;
    			case 11:
    			LABEL_80:
    			CItem->Unknown18 += 5;
    			goto LABEL_81;
    			case 10:
    			LABEL_81:
    			CItem->Unknown18 += 4;
    			break;
    			default:
    			break;
    		}
    
    		CItem->Unknown18 >>= 1;
    		if ( !sub_58B8D0(CItem->m_Type) )
    			CItem->Unknown18 += 2 * v24;
    	}
    	//
    	if ( *(BYTE *)(v25 + 42) > 0 )
    	{
    		if ( v16 > 0 )
    		{
    			if ( *(WORD *)(v25 + 32) )
    				CItem->Unknown13 += 25 * *(BYTE *)(v25 + 42) / *(WORD *)(v25 + 32) + 5;
    		}
    
    		if ( v24 <= 9 )
    			v11 = (a2 >> 3) & 0xF;
    		else
    			v11 = 9;
    		CItem->Unknown13 += 3 * v11;
    
    		switch ( v24 )
    		{
    			case 15:
    			CItem->Unknown13 += 9;
    			goto LABEL_93;
    			case 14:
    			LABEL_93:
    			CItem->Unknown13 += 8;
    			goto LABEL_94;
    			case 13:
    			LABEL_94:
    			CItem->Unknown13 += 7;
    			goto LABEL_95;
    			case 12:
    			LABEL_95:
    			CItem->Unknown13 += 6;
    			goto LABEL_96;
    			case 11:
    			LABEL_96:
    			CItem->Unknown13 += 5;
    			goto LABEL_97;
    			case 10:
    			LABEL_97:
    			CItem->Unknown13 += 4;
    			break;
    			default:
    			break;
    		}
    	}
    	//DEFENCE
    	if ( CItem->m_Type == ITEM(13,30) )
    	{
    		*(BYTE *)(v25 + 43) = 15;
    		CItem->Defense = 15;
    	}
    
    	if ( *(BYTE *)(v25 + 43) > 0 )
    	{
    		if ( CItem->m_Type >= ITEM(6,0) && CItem->m_Type < ITEM(7,0) ) // Shields
    		{
    			CItem->Defense += v24;
    			if ( v22 )
    				CItem->Defense += 20 * CItem->Defense / v17 + 2;
    		}
    		else
    		{
    			if ( v16 > 0 )
    			{
    				if ( *(WORD *)(v25 + 32) )
    					CItem->Defense += 12 * *(BYTE *)(v25 + 43) / *(WORD *)(v25 + 32) + *(WORD *)(v25 + 32) / 5 + 4;
    			}
    
    			if ( v22 )
    				CItem->Defense += 3 * CItem->Defense / v17 + v17 / 30 + 2;
    
    			if ( (CItem->m_Type >= ITEM(12,3) && CItem->m_Type <= ITEM(12,6))
    				|| CItem->m_Type == ITEM(12,42)
    				|| CItem->m_Type == ITEM(13,30)
    				|| CItem->m_Type == ITEM(12,49) ) // Wings 2
    			{
    				if ( v24 <= 9 )
    					v10 = (a2 >> 3) & 0xF;
    				else
    					v10 = 9;
    				CItem->Defense += 2 * v10;
    			}
    			else if ( (CItem->m_Type >= ITEM(12,36) && CItem->m_Type <= ITEM(12,40))
    					|| CItem->m_Type == ITEM(12,43)
    					|| CItem->m_Type == ITEM(12,50) ) // Wings 3
    
    			{
    				if ( v24 <= 9 )
    					v10 = (a2 >> 3) & 0xF;
    				else
    					v10 = 9;
    				CItem->Defense += 4 * v10;
    			}
    			else
    			{
    				if ( v24 <= 9 )
    					v10 = (a2 >> 3) & 0xF;
    				else
    					v10 = 9;
    				CItem->Defense += 3 * v10;
    			}
    
    			if ( (CItem->m_Type >= ITEM(12,36) && CItem->m_Type <= ITEM(12,40))
    				|| CItem->m_Type == ITEM(12,43)
    				|| CItem->m_Type == ITEM(12,50) )
    			{
    				switch ( v24 )
    				{
    					case 15:
    					CItem->Defense += 10;
    					goto LABEL_142;
    					case 14:
    					LABEL_142:
    					CItem->Defense += 9;
    					goto LABEL_143;
    					case 13:
    					LABEL_143:
    					CItem->Defense += 8;
    					goto LABEL_144;
    					case 12:
    					LABEL_144:
    					CItem->Defense += 7;
    					goto LABEL_145;
    					case 11:
    					LABEL_145:
    					CItem->Defense += 6;
    					goto LABEL_146;
    					case 10:
    					LABEL_146:
    					CItem->Defense += 5;
    					break;
    					default:
    					break;
    				}
    			}
    			else
    			{
    				switch ( v24 )
    				{
    					case 15:
    					CItem->Defense += 9;
    					goto LABEL_149;
    					case 14:
    					LABEL_149:
    					CItem->Defense += 8;
    					goto LABEL_150;
    					case 13:
    					LABEL_150:
    					CItem->Defense += 7;
    					goto LABEL_151;
    					case 12:
    					LABEL_151:
    					CItem->Defense += 6;
    					goto LABEL_152;
    					case 11:
    					LABEL_152:
    					CItem->Defense += 5;
    					goto LABEL_153;
    					case 10:
    					LABEL_153:
    					CItem->Defense += 4;
    					break;
    					default:
    					break;
    				}
    			}
    		}
    	}
    	//MAGIC DEFENCE
    	if ( *(BYTE *)(v25 + 44) > 0 )
    	{
    		if ( v24 <= 9 )
    			v6 = (a2 >> 3) & 0xF;
    		else
    			v6 = 9;
    
    		CItem->MagicDefense += 3 * v6;
    
    		switch ( v24 )
    		{
    			case 15:
    			CItem->MagicDefense += 9;
    			goto LABEL_160;
    			case 14:
    			LABEL_160:
    			CItem->MagicDefense += 8;
    			goto LABEL_161;
    			case 13:
    			LABEL_161:
    			CItem->MagicDefense += 7;
    			goto LABEL_162;
    			case 12:
    			LABEL_162:
    			CItem->MagicDefense += 6;
    			goto LABEL_163;
    			case 11:
    			LABEL_163:
    			CItem->MagicDefense += 5;
    			goto LABEL_164;
    			case 10:
    			LABEL_164:
    			CItem->MagicDefense += 4;
    			break;
    			default:
    			break;
    		}
    	}
    	//REQ
    	v20 = *(WORD *)(v25 + 32);
    
    	if ( v16 )
    		v20 = *(WORD *)(v25 + 32) + 25;
    	else if ( v22 )
    		v20 = *(WORD *)(v25 + 32) + 30;
    
    	int ReqLevel = 4;
    
    	if ( (CItem->m_Type >= ITEM(12,3) && CItem->m_Type <= ITEM(12,6))
    		|| CItem->m_Type == ITEM(12,42) )
    		ReqLevel = 5;
    
    	if ( *(WORD *)(v25 + 60)
    		&& ((CItem->m_Type >= 0 && CItem->m_Type < ITEM(12,0))
    		|| CItem->m_Type == ITEM(13,37)
    		|| (CItem->m_Type >= ITEM(12,7) && CItem->m_Type <= ITEM(12,40))
    		|| (CItem->m_Type >= ITEM(12,43) && CItem->m_Type < ITEM(13,0) && CItem->m_Type != ITEM(12,49))) )
    	{
    		CItem->ReqLevel = *(WORD *)(v25 + 60);
    	}
    	else if ( *(WORD *)(v25 + 60)
    			&& ((CItem->m_Type >= ITEM(12,0) && CItem->m_Type <= ITEM(12,7))
    			|| (CItem->m_Type >= ITEM(12,41) && CItem->m_Type <= ITEM(12,42))
    			|| CItem->m_Type == ITEM(12,49)
    			|| CItem->m_Type >= ITEM(13,0)) )
    		CItem->ReqLevel = ReqLevel * v24 + *(WORD *)(v25 + 60);
    	else
    		CItem->ReqLevel = 0;
    
    	if ( *(WORD *)(v25 + 50) )
    		CItem->ReqStrenght = 3 * (v20 + 3 * v24) * *(WORD *)(v25 + 50) / 100 + 20;
    	else
    		CItem->ReqStrenght = 0;
    
    	if ( *(WORD *)(v25 + 52) )
    		CItem->ReqDextirity = 3 * (v20 + 3 * v24) * *(WORD *)(v25 + 52) / 100 + 20;
    	else
    		CItem->ReqDextirity = 0;
    
    	if ( *(WORD *)(v25 + 56) )
    		CItem->ReqVitality = 3 * (v20 + 3 * v24) * *(WORD *)(v25 + 56) / 100 + 20;
    	else
    		CItem->ReqVitality = 0;
    
    	if ( *(WORD *)(v25 + 54) )
    	{
    		if ( (CItem->m_Type < 2581 || CItem->m_Type > 2589) && CItem->m_Type != 2600 )
    		{
    			if ( *(WORD *)(v25 + 60) <= 0 || CItem->m_Type < 7680 || CItem->m_Type >= 8192 )
    				CItem->ReqEnergy = 4 * (v20 + 3 * v24) * *(WORD *)(v25 + 54) / 100 + 20;
    			else
    				CItem->ReqEnergy = 4 * *(WORD *)(v25 + 60) * *(WORD *)(v25 + 54) / 100 + 20;
    		}
    		else
    		{
    		CItem->ReqEnergy = 3 * (v24 + v20) * *(WORD *)(v25 + 54) / 100 + 20;
    		}
    	}
    	else
    	{
    		CItem->ReqEnergy = 0;
    	}
    
    	if ( *(WORD *)(v25 + 58) )
    		CItem->ReqCommand = 3 * (v20 + 3 * v24) * *(WORD *)(v25 + 58) / 100 + 20;
    	else
    		CItem->ReqCommand = 0;
    
    	if ( CItem->m_Type == 6155 )
    	{
    		int ReqEnergy = 0;
    		switch ( v24 )
    		{
    			case 0:
    			ReqEnergy = 30;
    			break;
    			case 1:
    			ReqEnergy = 60;
    			break;
    			case 2:
    			ReqEnergy = 90;
    			break;
    			case 3:
    			ReqEnergy = 130;
    			break;
    			case 4:
    			ReqEnergy = 170;
    			break;
    			case 5:
    			ReqEnergy = 210;
    			break;
    			case 6:
    			ReqEnergy = 300;
    			break;
    			default:
    			break;
    		}
    		CItem->ReqEnergy = ReqEnergy;
    	}
    
    	if ( *(WORD *)(v25 + 58) )
    	{
    		if ( CItem->m_Type == 7832 )
    			CItem->ReqCommand = 15 * *(WORD *)(v25 + 58) + 185;
    		else
    			CItem->ReqCommand = *(WORD *)(v25 + 58);
    	}
    
    	if ( CItem->m_Type == 6666 )
    	{
    		if ( v24 > 2 )
    			CItem->ReqLevel = 50;
    		else
    			CItem->ReqLevel = 20;
    	}
    
    	if ( (CItem->m_Type >= 3613 && CItem->m_Type <= 3617)
    		|| (CItem->m_Type >= 4125 && CItem->m_Type <= 4129)
    		|| (CItem->m_Type >= 4637 && CItem->m_Type <= 4641)
    		|| (CItem->m_Type >= 5149 && CItem->m_Type <= 5153)
    		|| (CItem->m_Type >= 5661 && CItem->m_Type <= 5665)
    		|| CItem->m_Type == 22
    		|| CItem->m_Type == 23
    		|| CItem->m_Type == 2572
    		|| CItem->m_Type == 2069
    		|| CItem->m_Type == 1038
    		|| CItem->m_Type == 2579
    		|| CItem->m_Type == 3627
    		|| CItem->m_Type == 4139
    		|| CItem->m_Type == 4651
    		|| CItem->m_Type == 5163
    		|| CItem->m_Type == 5675
    		|| sub_5C9370(CItem->m_Type, 0) )
    		v16 = 0;
    
    	if ( v16 > 0 )
    	{
    		if ( CItem->ReqLevel > 0 )
    		{
    			if ( CItem->m_Type != ITEM(13,37) )
    				CItem->ReqLevel += 20;
    		}
    	}
    
    	CItem->SpecialCount = 0;
    	// WINGS EXCELLENT
    	if ( (CItem->m_Type >= ITEM(12,3) && CItem->m_Type <= ITEM(12,6)) // Wings 2
    		|| CItem->m_Type == ITEM(12,42) )
    	{
    		if ( v21 & 1 )
    		{
    			CItem->SpecialValue[CItem->SpecialCount] = 5 * v24 + 50;
    			CItem->SpecialType[CItem->SpecialCount++] = 101;
    		}
    		if ( (v21 >> 1) & 1 )
    		{
    			CItem->SpecialValue[CItem->SpecialCount] = 5 * v24 + 50;
    			CItem->SpecialType[CItem->SpecialCount++] = 102;
    		}
    		if ( (v21 >> 2) & 1 )
    		{
    			CItem->SpecialValue[CItem->SpecialCount] = 3;
    			CItem->SpecialType[CItem->SpecialCount++] = 103;
    		}
    		if ( (v21 >> 3) & 1 )
    		{
    			CItem->SpecialValue[CItem->SpecialCount] = 50;
    			CItem->SpecialType[CItem->SpecialCount++] = 104;
    		}
    		if ( (v21 >> 4) & 1 )
    		{
    			CItem->SpecialValue[CItem->SpecialCount] = 5;
    			CItem->SpecialType[CItem->SpecialCount++] = 98;
    		}
    	}
    	else if ( CItem->m_Type == ITEM(13,30) || CItem->m_Type == ITEM(12,49) ) // RF DL Capes 1
    	{
    		if ( v21 & 1 )
    		{
    			CItem->SpecialValue[CItem->SpecialCount] = 5 * v24 + 50;
    			CItem->SpecialType[CItem->SpecialCount++] = 101;
    		}
    		if ( (v21 >> 1) & 1 )
    		{
    			CItem->SpecialValue[CItem->SpecialCount] = 5 * v24 + 50;
    			CItem->SpecialType[CItem->SpecialCount++] = 102;
    		}
    		if ( (v21 >> 2) & 1 )
    		{
    			CItem->SpecialValue[CItem->SpecialCount] = 3;
    			CItem->SpecialType[CItem->SpecialCount++] = 103;
    		}
    		if ( (v21 >> 3) & 1 )
    		{
    			if ( CItem->m_Type != ITEM(12,49) )
    			{
    				CItem->SpecialValue[CItem->SpecialCount] = 5 * v24 + 10;
    				CItem->SpecialType[CItem->SpecialCount++] = 172;
    			}
    		}
    	}
    	else if ( (CItem->m_Type >= ITEM(12,36) && CItem->m_Type <= ITEM(12,40))
    			|| CItem->m_Type == ITEM(12,43)
    			|| CItem->m_Type == ITEM(12,50) ) // Wings 3
    	{
    		if ( v21 & 1 )
    		{
    			CItem->SpecialValue[CItem->SpecialCount] = 5;
    			CItem->SpecialType[CItem->SpecialCount++] = 103;
    		}
    		if ( (v21 >> 1) & 1 )
    		{
    			CItem->SpecialValue[CItem->SpecialCount] = 5;
    			CItem->SpecialType[CItem->SpecialCount++] = 106;
    		}
    		if ( (v21 >> 2) & 1 )
    		{
    			CItem->SpecialValue[CItem->SpecialCount] = 5;
    			CItem->SpecialType[CItem->SpecialCount++] = 107;
    		}
    		if ( (v21 >> 3) & 1 )
    		{
    			CItem->SpecialValue[CItem->SpecialCount] = 5;
    			CItem->SpecialType[CItem->SpecialCount++] = 108;
    		}
    	}
    	//??
    	if ( (a2 >> 7) & 1 )
    	{
    		if ( *(WORD *)(v25 + 36) )
    			CItem->SpecialType[CItem->SpecialCount++] = *(WORD *)(v25 + 36);
    	}
    	//LUCK
    	if ( (a2 >> 2) & 1 )
    	{
    		if ( (CItem->m_Type >= 0 && CItem->m_Type < ITEM(12,0))
    			&& CItem->m_Type != ITEM(4,7)
    			&& CItem->m_Type != ITEM(4,15) )
    			CItem->SpecialType[CItem->SpecialCount++] = 85;
    
    		if ( (CItem->m_Type >= ITEM(12,0) && CItem->m_Type <= ITEM(12,6))
    			|| (CItem->m_Type >= ITEM(12,41) && CItem->m_Type <= ITEM(12,42)) )
    			CItem->SpecialType[CItem->SpecialCount++] = 85;
    
    		if ( CItem->m_Type == ITEM(13,30) || CItem->m_Type == ITEM(12,49) )
    			CItem->SpecialType[CItem->SpecialCount++] = 85;
    
    		if ( (CItem->m_Type >= ITEM(12,36) && CItem->m_Type <= ITEM(12,40))
    			|| CItem->m_Type == ITEM(12,43)
    			|| CItem->m_Type == ITEM(12,50) )
    			CItem->SpecialType[CItem->SpecialCount++] = 85;
    	}
    	// ADD OPTION
    	int add = (a2 & 3) + 4 * ((a3 & 0x40) >> 6);
    
    	if ( add )
    	{
    		if ( CItem->m_Type == ITEM(13,3) )
    		{
    			if ( add & 1 )
    			{
    				CItem->SpecialValue[CItem->SpecialCount] = 5;
    				CItem->SpecialType[CItem->SpecialCount++] = 105;
    			}
    			if ( (add >> 1) & 1 )
    			{
    				CItem->SpecialValue[CItem->SpecialCount] = 50;
    				CItem->SpecialType[CItem->SpecialCount++] = 104;
    			}
    			if ( (add >> 2) & 1 )
    			{
    				CItem->SpecialValue[CItem->SpecialCount] = 5;
    				CItem->SpecialType[CItem->SpecialCount++] = 98;
    			}
    		}
    		else
    		{
    			if ( (CItem->m_Type >= 0 && CItem->m_Type < ITEM(5,0)) // Weapon
    				&& CItem->m_Type != ITEM(4,7)
    				&& CItem->m_Type != ITEM(4,15) )
    			{
    				CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    				CItem->SpecialType[CItem->SpecialCount++] = 80;
    				CItem->ReqStrenght += 5 * add;
    			}
    
    			if ( CItem->m_Type >= ITEM(5,0) && CItem->m_Type < ITEM(6,0) ) // Staff
    			{
    				CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    				if ( (CItem->m_Type < 2581 || CItem->m_Type > 2589) && CItem->m_Type != 2600 )
    					CItem->SpecialType[CItem->SpecialCount] = 81;
    				else
    					CItem->SpecialType[CItem->SpecialCount] = 82;
    				++CItem->SpecialCount;
    				CItem->ReqStrenght += 5 * add;
    			}
    
    			if ( CItem->m_Type >= ITEM(6,0) && CItem->m_Type < ITEM(7,0) ) // Shield
    			{
    				CItem->SpecialValue[CItem->SpecialCount] = 5 * add;
    				CItem->SpecialType[CItem->SpecialCount++] = 83;
    				CItem->ReqStrenght += 5 * add;
    			}
    
    			if ( CItem->m_Type >= ITEM(7,0) && CItem->m_Type < ITEM(12,0) ) // Sets
    			{
    				CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    				CItem->SpecialType[CItem->SpecialCount++] = 84;
    				CItem->ReqStrenght += 5 * add;
    			}
    
    			if ( (CItem->m_Type >= ITEM(13,8) && CItem->m_Type < ITEM(14,0))
    				&& CItem->m_Type != ITEM(13,30) ) // Rings Pendant
    			{
    				if ( CItem->m_Type == ITEM(13,24) )
    				{
    					CItem->SpecialValue[CItem->SpecialCount] = add;
    					CItem->SpecialType[CItem->SpecialCount++] = 204;
    				}
    				else if ( CItem->m_Type == ITEM(13,28) )
    				{
    					CItem->SpecialValue[CItem->SpecialCount] = add;
    					CItem->SpecialType[CItem->SpecialCount++] = 205;
    				}
    				else
    				{
    					CItem->SpecialValue[CItem->SpecialCount] = add;
    					CItem->SpecialType[CItem->SpecialCount++] = 86;
    				}
    			}
    
    			switch ( CItem->m_Type ) // Other
    			{
    				case ITEM(12,0):
    					CItem->SpecialValue[CItem->SpecialCount] = add;
    					CItem->SpecialType[CItem->SpecialCount++] = 86;
    				break;
    				case ITEM(12,1):
    				case ITEM(12,41):
    					CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    					CItem->SpecialType[CItem->SpecialCount++] = 81;
    				break;
    				case ITEM(12,2):
    					CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    					CItem->SpecialType[CItem->SpecialCount++] = 80;
    				break;
    				case ITEM(12,3):
    					if ( (v21 >> 5) & 1 )
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = add;
    						CItem->SpecialType[CItem->SpecialCount++] = 86;
    					}
    					else
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    						CItem->SpecialType[CItem->SpecialCount++] = 80;
    					}
    				break;
    				case ITEM(12,4):
    					if ( (v21 >> 5) & 1 )
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    						CItem->SpecialType[CItem->SpecialCount++] = 81;
    					}
    					else
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = add;
    						CItem->SpecialType[CItem->SpecialCount++] = 86;
    					}
    				break;
    				case ITEM(12,5):
    					if ( (v21 >> 5) & 1 )
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    						CItem->SpecialType[CItem->SpecialCount++] = 80;
    					}
    					else
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = add;
    						CItem->SpecialType[CItem->SpecialCount++] = 86;
    					}
    				break;
    				case ITEM(12,6):
    					if ( (v21 >> 5) & 1 )
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    						CItem->SpecialType[CItem->SpecialCount++] = 80;
    					}
    					else
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    						CItem->SpecialType[CItem->SpecialCount++] = 81;
    					}
    				break;
    				case ITEM(13,30): // DL Cape 1
    					CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    					CItem->SpecialType[CItem->SpecialCount++] = 80;
    				break;
    				case ITEM(12,49): // RF Cape 1
    					if ( (v21 >> 5) & 1 )
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    						CItem->SpecialType[CItem->SpecialCount++] = 80;
    					}
    					else
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = add;
    						CItem->SpecialType[CItem->SpecialCount++] = 86;
    					}
    				break;
    				case ITEM(12,42):
    					CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    					if ( (v21 >> 5) & 1 )
    						CItem->SpecialType[CItem->SpecialCount] = 81;
    					else
    						CItem->SpecialType[CItem->SpecialCount] = 82;
    					++CItem->SpecialCount;
    				break;
    				case ITEM(12,36):
    					if ( (v21 >> 4) & 1 )
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    						CItem->SpecialType[CItem->SpecialCount++] = 80;
    					}
    					else if ( (v21 >> 5) & 1 )
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    						CItem->SpecialType[CItem->SpecialCount++] = 84;
    					}
    					else
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = add;
    						CItem->SpecialType[CItem->SpecialCount++] = 86;
    					}
    				break;
    				case ITEM(12,37):
    					if ( (v21 >> 4) & 1 )
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    						CItem->SpecialType[CItem->SpecialCount++] = 81;
    					}
    					else if ( (v21 >> 5) & 1 )
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    						CItem->SpecialType[CItem->SpecialCount++] = 84;
    					}
    					else
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = add;
    						CItem->SpecialType[CItem->SpecialCount++] = 86;
    					}
    				break;
    				case ITEM(12,38):
    					if ( (v21 >> 4) & 1 )
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    						CItem->SpecialType[CItem->SpecialCount++] = 80;
    					}
    					else if ( (v21 >> 5) & 1 )
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    						CItem->SpecialType[CItem->SpecialCount++] = 84;
    					}
    					else
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = add;
    						CItem->SpecialType[CItem->SpecialCount++] = 86;
    					}
    				break;
    				case ITEM(12,39):
    					if ( (v21 >> 4) & 1 )
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    						CItem->SpecialType[CItem->SpecialCount++] = 80;
    					}
    					else if ( (v21 >> 5) & 1 )
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    						CItem->SpecialType[CItem->SpecialCount++] = 81;
    					}
    					else
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = add;
    						CItem->SpecialType[CItem->SpecialCount++] = 86;
    					}
    				break;
    				case ITEM(12,40): // DL Cape 2
    				case ITEM(12,50): // RF Cape 2
    					if ( (v21 >> 4) & 1 )
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    						CItem->SpecialType[CItem->SpecialCount++] = 80;
    					}
    					else if ( (v21 >> 5) & 1 )
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    						CItem->SpecialType[CItem->SpecialCount++] = 84;
    					}
    					else
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = add;
    						CItem->SpecialType[CItem->SpecialCount++] = 86;
    					}
    				case ITEM(12,43): // SUM Wings 3
    					if ( (v21 >> 4) & 1 )
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    						CItem->SpecialType[CItem->SpecialCount++] = 81;
    					}
    					else if ( (v21 >> 5) & 1 )
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    						CItem->SpecialType[CItem->SpecialCount++] = 82;
    					}
    					else
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = add;
    						CItem->SpecialType[CItem->SpecialCount++] = 86;
    					}
    				break;
    			}
    		}
    	}
    	// ----
    
    	if ( CItem->m_Type == 6660 )
    	{
    		v4 = sub_4F9930(*(int*)CItem);
    		sub_4F9B50(*(int*)CItem, *v4);
    	}
    
    	// SHIELDS/SETS/RINGS EXCELLENT
    	if ( (CItem->m_Type >= ITEM(6,0) && CItem->m_Type < ITEM(12,0))
    		|| (CItem->m_Type >= ITEM(13,8) && CItem->m_Type <= ITEM(13,9))
    		|| (CItem->m_Type >= ITEM(13,21) && CItem->m_Type <= ITEM(13,24)) )
    	{
    		if ( (a3 >> 5) & 1 )
    			CItem->SpecialType[CItem->SpecialCount++] = 87;
    		if ( (a3 >> 4) & 1 )
    			CItem->SpecialType[CItem->SpecialCount++] = 88;
    		if ( (a3 >> 3) & 1 )
    			CItem->SpecialType[CItem->SpecialCount++] = 89;
    		if ( (a3 >> 2) & 1 )
    			CItem->SpecialType[CItem->SpecialCount++] = 90;
    		if ( (a3 >> 1) & 1 )
    			CItem->SpecialType[CItem->SpecialCount++] = 91;
    		if ( a3 & 1 )
    			CItem->SpecialType[CItem->SpecialCount++] = 92;
    	}
    
    	// WEAPON/PENDANTS EXCELLENT
    	if ( CItem->m_Type >= 0 && CItem->m_Type < ITEM(6,0)
    		|| CItem->m_Type >= ITEM(13,12) && CItem->m_Type <= ITEM(13,13)
    		|| CItem->m_Type >= ITEM(13,25) && CItem->m_Type <= ITEM(13,28) )
    	{
    		if ( (a3 >> 5) & 1 )
    			CItem->SpecialType[CItem->SpecialCount++] = 93;
    
    		if ( (CItem->m_Type >= ITEM(5,0) && CItem->m_Type < ITEM(6,0))
    			|| CItem->m_Type == 6668
    			|| CItem->m_Type == 6681
    			|| CItem->m_Type == 6683 )
    		{
    			if ( (a3 >> 4) & 1 )
    			{
    				CItem->SpecialValue[CItem->SpecialCount] = *(WORD *)(0x8128AC8 + 14) / 20;
    				CItem->SpecialType[CItem->SpecialCount++] = 96;
    			}
    			if ( (a3 >> 3) & 1 )
    			{
    				CItem->SpecialValue[CItem->SpecialCount] = 2;
    				CItem->SpecialType[CItem->SpecialCount++] = 97;
    			}
    		}
    		else
    		{
    			if ( (a3 >> 4) & 1 )
    			{
    				CItem->SpecialValue[CItem->SpecialCount] = *(WORD *)(0x8128AC8 + 14) / 20;
    				CItem->SpecialType[CItem->SpecialCount++] = 94;
    			}
    			if ( (a3 >> 3) & 1 )
    			{
    				CItem->SpecialValue[CItem->SpecialCount] = 2;
    				CItem->SpecialType[CItem->SpecialCount++] = 95;
    			}
    		}
    
    		if ( (a3 >> 2) & 1 )
    		{
    			CItem->SpecialValue[CItem->SpecialCount] = 7;
    			CItem->SpecialType[CItem->SpecialCount++] = 98;
    		}
    
    		if ( (a3 >> 1) & 1 )
    			CItem->SpecialType[CItem->SpecialCount++] = 99;
    		if ( a3 & 1 )
    			CItem->SpecialType[CItem->SpecialCount++] = 100;
    	}
    
    	if ( CItem->m_Type == ITEM(13,20) ) // Wizard ring
    	{
    		if ( v24 )
    		{
    			if ( v24 == 3 )
    			{
    				CItem->SpecialValue[CItem->SpecialCount] = 10;
    				CItem->SpecialType[CItem->SpecialCount++] = 97;
    				CItem->SpecialValue[CItem->SpecialCount] = 10;
    				CItem->SpecialType[CItem->SpecialCount++] = 95;
    				CItem->SpecialValue[CItem->SpecialCount] = 10;
    				CItem->SpecialType[CItem->SpecialCount++] = 98;
    			}
    		}
    		else
    		{
    			CItem->SpecialValue[CItem->SpecialCount] = 10;
    			CItem->SpecialType[CItem->SpecialCount++] = 97;
    			CItem->SpecialValue[CItem->SpecialCount] = 10;
    			CItem->SpecialType[CItem->SpecialCount++] = 95;
    			CItem->SpecialValue[CItem->SpecialCount] = 10;
    			CItem->SpecialType[CItem->SpecialCount++] = 98;
    		}
    	}
    
    	if ( CItem->m_Type == ITEM(13,107) ) // Lethal Wizard's Ring
    	{
    		CItem->SpecialValue[CItem->SpecialCount] = 15;
    		CItem->SpecialType[CItem->SpecialCount++] = 97;
    		CItem->SpecialValue[CItem->SpecialCount] = 15;
    		CItem->SpecialType[CItem->SpecialCount++] = 95;
    		CItem->SpecialValue[CItem->SpecialCount] = 10;
    		CItem->SpecialType[CItem->SpecialCount++] = 98;
    	}
    
    	char result = *(BYTE *)(0x8128AC0 + 84 * CItem->m_Type + 34);
    	CItem->Unknown6 = result;
    	return result;
    }
    Local calls from 0058B77E, 005C7833, 005C7D71, 005C7F1B, 005C80BE, 007E216A
    Last edited by 8bitcore; 05-06-14 at 10:05 AM. Reason: update lpItemObj


  2. #2
    Enthusiast IonGames is offline
    MemberRank
    Jun 2012 Join Date
    47Posts

    Re: Item Convert from main.exe (Source)

    screen shot ?

  3. #3
    Enthusiast 8bitcore is offline
    MemberRank
    Oct 2009 Join Date
    UkraineLocation
    33Posts

    Re: Item Convert from main.exe (Source)

    Quote Originally Posted by IonGames View Post
    screen shot ?
    additional/excellent/luck options added through this function


    Changed the name of the variables for a better understanding
    If bugs appear, use the function from the first post
    Code:
    char gObjItemConvert(lpItemObj CItem, BYTE a2, BYTE a3, BYTE ItemAncient)
    {
    	CItem->m_Level = a2;
    	int Level = (a2 >> 3) & 0xF;
    	int IFExcellent = a3 & 0x3F;
    	int Excellent = a3 & 0x3F;
    	char Ancient = 0;
    
    	if ( (CItem->m_Type >= ITEM(12,3) && CItem->m_Type <= ITEM(12,6))
    		|| (CItem->m_Type >= ITEM(12,36) && CItem->m_Type <= ITEM(12,40))
    		|| (CItem->m_Type >= ITEM(12,42) && CItem->m_Type <= ITEM(12,43))
    		|| CItem->m_Type == ITEM(0,19)
    		|| CItem->m_Type == 2066
    		|| CItem->m_Type == 2570
    		|| CItem->m_Type == 1037
    		|| CItem->m_Type == ITEM(13,30)
    		|| (CItem->m_Type >= 6274 && CItem->m_Type <= 6278)
    		|| (CItem->m_Type >= ITEM(12,49) && CItem->m_Type <= ITEM(12,50)) // RF capes
    		|| CItem->m_Type == 6279
    		|| CItem->m_Type == 2596 )
    		IFExcellent = 0;
    
    	if ( ItemAncient % 4 == 1 || ItemAncient % 4 == 2 )
    	{
    		IFExcellent = 1;
    		Ancient = 1;
    	}
    
    	int ItemAttribute = *(int*)0x8128AC0 + 84 * CItem->m_Type;
    	CItem->Unknown8 = *(BYTE *)(ItemAttribute + 30);
    	CItem->Unknown19 = *(BYTE *)(ItemAttribute + 45);
    	CItem->DamageMin = *(BYTE *)(ItemAttribute + 40);
    	CItem->DamageMax = *(BYTE *)(ItemAttribute + 41);
    	CItem->Unknown13 = *(BYTE *)(ItemAttribute + 42);
    	CItem->Defense = *(BYTE *)(ItemAttribute + 43);
    	CItem->MagicDefense = *(BYTE *)(ItemAttribute + 44);
    	CItem->Unknown20 = *(BYTE *)(ItemAttribute + 46);
    	CItem->MagicDamage = *(BYTE *)(ItemAttribute + 49);
    	int ItemLevel = *(WORD *)(ItemAttribute + 32) + 30;
    	
    	int damage = 0;
    	switch ( CItem->m_Type )
    	{
    		case 0x406:
    		damage = 15;
    		break;
    		case 0x806:
    		damage = 30;
    		break;
    		case 0xA07:
    		damage = 25;
    		break;
    	}
    	//MIN DAMAGE
    	if ( *(BYTE *)(ItemAttribute + 40) > 0 )
    	{
    		if ( IFExcellent > 0 && *(WORD *)(ItemAttribute + 32) )
    		{
    			if ( damage )
    				CItem->DamageMin += damage;
    			else
    				CItem->DamageMin += 25 * *(BYTE *)(ItemAttribute + 40) / *(WORD *)(ItemAttribute + 32) + 5;
    		}
    
    		if ( Ancient )
    			CItem->DamageMin += ItemLevel / 40 + 5;
    
    		if ( Level <= 9 )
    			CItem->DamageMin += 3 * Level;
    		else
    			CItem->DamageMin += 3 * 9;
    
    		switch ( Level )
    		{
    			case 15:
    			CItem->DamageMin += 9;
    			goto LABEL_41;
    			case 14:
    			LABEL_41:
    			CItem->DamageMin += 8;
    			goto LABEL_42;
    			case 13:
    			LABEL_42:
    			CItem->DamageMin += 7;
    			goto LABEL_43;
    			case 12:
    			LABEL_43:
    			CItem->DamageMin += 6;
    			goto LABEL_44;
    			case 11:
    			LABEL_44:
    			CItem->DamageMin += 5;
    			goto LABEL_45;
    			case 10:
    			LABEL_45:
    			CItem->DamageMin += 4;
    			break;
    			default:
    			break;
    		}
    	}
    	// MAX DAMAGE
    	if ( *(BYTE *)(ItemAttribute + 41) > 0 )
    	{
    		if ( IFExcellent > 0 && *(WORD *)(ItemAttribute + 32) )
    		{
    			if ( damage )
    				CItem->DamageMax += damage;
    			else
    				CItem->DamageMax += 25 * *(BYTE *)(ItemAttribute + 40) / *(WORD *)(ItemAttribute + 32) + 5;
    		}
    
    		if ( Ancient )
    			CItem->DamageMax += ItemLevel / 40 + 5;
    
    		if ( Level <= 9 )
    			CItem->DamageMax += 3 * Level;
    		else
    			CItem->DamageMax += 3 * 9;
    
    		switch ( Level )
    		{
    			case 15:
    			CItem->DamageMax += 9;
    			goto LABEL_59;
    			case 14:
    			LABEL_59:
    			CItem->DamageMax += 8;
    			goto LABEL_60;
    			case 13:
    			LABEL_60:
    			CItem->DamageMax += 7;
    			goto LABEL_61;
    			case 12:
    			LABEL_61:
    			CItem->DamageMax += 6;
    			goto LABEL_62;
    			case 11:
    			LABEL_62:
    			CItem->DamageMax += 5;
    			goto LABEL_63;
    			case 10:
    			LABEL_63:
    			CItem->DamageMax += 4;
    			break;
    			default:
    			break;
    		}
    	}
    	// WIZARDY DAMAGE
    	if ( *(BYTE *)(ItemAttribute + 49) > 0 )
    	{
    		if ( IFExcellent > 0 && *(WORD *)(ItemAttribute + 32) )
    		{
    			if ( damage )
    				CItem->MagicDamage += damage;
    			else
    				CItem->MagicDamage += 25 * *(BYTE *)(ItemAttribute + 49) / *(WORD *)(ItemAttribute + 32) + 5;
    		}
    
    		if ( Ancient )
    			CItem->MagicDamage += ItemLevel / 60 + 2;
    
    		if ( Level <= 9 )
    			CItem->MagicDamage += 3 * Level;
    		else
    			CItem->MagicDamage += 3 * 9;
    
    		switch ( Level )
    		{
    			case 15:
    			CItem->MagicDamage += 9;
    			goto LABEL_77;
    			case 14:
    			LABEL_77:
    			CItem->MagicDamage += 8;
    			goto LABEL_78;
    			case 13:
    			LABEL_78:
    			CItem->MagicDamage += 7;
    			goto LABEL_79;
    			case 12:
    			LABEL_79:
    			CItem->MagicDamage += 6;
    			goto LABEL_80;
    			case 11:
    			LABEL_80:
    			CItem->MagicDamage += 5;
    			goto LABEL_81;
    			case 10:
    			LABEL_81:
    			CItem->MagicDamage += 4;
    			break;
    			default:
    			break;
    		}
    
    		CItem->MagicDamage >>= 1;
    		if ( !sub_58B8D0(CItem->m_Type) )
    			CItem->MagicDamage += 2 * Level;
    	}
    	//
    	if ( *(BYTE *)(ItemAttribute + 42) > 0 )
    	{
    		if ( IFExcellent > 0 && *(WORD *)(ItemAttribute + 32) )
    		{
    			CItem->Unknown13 += 25 * *(BYTE *)(ItemAttribute + 42) / *(WORD *)(ItemAttribute + 32) + 5;
    		}
    
    		if ( Level <= 9 )
    			CItem->Unknown13 += 3 * Level;
    		else
    			CItem->Unknown13 += 3 * 9;
    
    		switch ( Level )
    		{
    			case 15:
    			CItem->Unknown13 += 9;
    			goto LABEL_93;
    			case 14:
    			LABEL_93:
    			CItem->Unknown13 += 8;
    			goto LABEL_94;
    			case 13:
    			LABEL_94:
    			CItem->Unknown13 += 7;
    			goto LABEL_95;
    			case 12:
    			LABEL_95:
    			CItem->Unknown13 += 6;
    			goto LABEL_96;
    			case 11:
    			LABEL_96:
    			CItem->Unknown13 += 5;
    			goto LABEL_97;
    			case 10:
    			LABEL_97:
    			CItem->Unknown13 += 4;
    			break;
    			default:
    			break;
    		}
    	}
    	//DEFENCE
    	if ( CItem->m_Type == ITEM(13,30) )
    	{
    		*(BYTE *)(ItemAttribute + 43) = 15;
    		CItem->Defense = 15;
    	}
    
    	if ( *(BYTE *)(ItemAttribute + 43) > 0 )
    	{
    		if ( CItem->m_Type >= ITEM(6,0) && CItem->m_Type < ITEM(7,0) ) // Shields
    		{
    			CItem->Defense += Level;
    			if ( Ancient )
    				CItem->Defense += 20 * CItem->Defense / ItemLevel + 2;
    		}
    		else
    		{
    			if ( IFExcellent > 0 )
    			{
    				if ( *(WORD *)(ItemAttribute + 32) )
    					CItem->Defense += 12 * *(BYTE *)(ItemAttribute + 43) / *(WORD *)(ItemAttribute + 32) + *(WORD *)(ItemAttribute + 32) / 5 + 4;
    			}
    
    			if ( Ancient )
    				CItem->Defense += 3 * CItem->Defense / ItemLevel + ItemLevel / 30 + 2;
    
    			if ( (CItem->m_Type >= ITEM(12,3) && CItem->m_Type <= ITEM(12,6))
    				|| CItem->m_Type == ITEM(12,42)
    				|| CItem->m_Type == ITEM(13,30)
    				|| CItem->m_Type == ITEM(12,49) ) // Wings 2
    			{
    				if ( Level <= 9 )
    					CItem->Defense += 2 * Level;
    				else
    					CItem->Defense += 2 * 9;
    			}
    			else if ( (CItem->m_Type >= ITEM(12,36) && CItem->m_Type <= ITEM(12,40))
    					|| CItem->m_Type == ITEM(12,43)
    					|| CItem->m_Type == ITEM(12,50) ) // Wings 3
    
    			{
    				if ( Level <= 9 )
    					CItem->Defense += 4 * Level;
    				else
    					CItem->Defense += 4 * 9;
    			}
    			else
    			{
    				if ( Level <= 9 )
    					CItem->Defense += 3 * Level;
    				else
    					CItem->Defense += 3 * 9;
    			}
    
    			if ( (CItem->m_Type >= ITEM(12,36) && CItem->m_Type <= ITEM(12,40))
    				|| CItem->m_Type == ITEM(12,43)
    				|| CItem->m_Type == ITEM(12,50) )
    			{
    				switch ( Level )
    				{
    					case 15:
    					CItem->Defense += 10;
    					goto LABEL_142;
    					case 14:
    					LABEL_142:
    					CItem->Defense += 9;
    					goto LABEL_143;
    					case 13:
    					LABEL_143:
    					CItem->Defense += 8;
    					goto LABEL_144;
    					case 12:
    					LABEL_144:
    					CItem->Defense += 7;
    					goto LABEL_145;
    					case 11:
    					LABEL_145:
    					CItem->Defense += 6;
    					goto LABEL_146;
    					case 10:
    					LABEL_146:
    					CItem->Defense += 5;
    					break;
    					default:
    					break;
    				}
    			}
    			else
    			{
    				switch ( Level )
    				{
    					case 15:
    					CItem->Defense += 9;
    					goto LABEL_149;
    					case 14:
    					LABEL_149:
    					CItem->Defense += 8;
    					goto LABEL_150;
    					case 13:
    					LABEL_150:
    					CItem->Defense += 7;
    					goto LABEL_151;
    					case 12:
    					LABEL_151:
    					CItem->Defense += 6;
    					goto LABEL_152;
    					case 11:
    					LABEL_152:
    					CItem->Defense += 5;
    					goto LABEL_153;
    					case 10:
    					LABEL_153:
    					CItem->Defense += 4;
    					break;
    					default:
    					break;
    				}
    			}
    		}
    	}
    	//MAGIC DEFENCE
    	if ( *(BYTE *)(ItemAttribute + 44) > 0 )
    	{
    		if ( Level <= 9 )
    			CItem->MagicDefense += 3 * Level;
    		else
    			CItem->MagicDefense += 3 * 9;
    
    		switch ( Level )
    		{
    			case 15:
    			CItem->MagicDefense += 9;
    			goto LABEL_160;
    			case 14:
    			LABEL_160:
    			CItem->MagicDefense += 8;
    			goto LABEL_161;
    			case 13:
    			LABEL_161:
    			CItem->MagicDefense += 7;
    			goto LABEL_162;
    			case 12:
    			LABEL_162:
    			CItem->MagicDefense += 6;
    			goto LABEL_163;
    			case 11:
    			LABEL_163:
    			CItem->MagicDefense += 5;
    			goto LABEL_164;
    			case 10:
    			LABEL_164:
    			CItem->MagicDefense += 4;
    			break;
    			default:
    			break;
    		}
    	}
    	//REQ
    	int v20 = *(WORD *)(ItemAttribute + 32);
    
    	if ( IFExcellent )
    		v20 = *(WORD *)(ItemAttribute + 32) + 25;
    	else if ( Ancient )
    		v20 = *(WORD *)(ItemAttribute + 32) + 30;
    
    	int ReqLevel = 4;
    
    	if ( (CItem->m_Type >= ITEM(12,3) && CItem->m_Type <= ITEM(12,6))
    		|| CItem->m_Type == ITEM(12,42) )
    		ReqLevel = 5;
    
    	if ( *(WORD *)(ItemAttribute + 60) > 0
    		&& ((CItem->m_Type >= 0 && CItem->m_Type < ITEM(12,0))
    		|| CItem->m_Type == ITEM(13,37)
    		|| (CItem->m_Type >= ITEM(12,7) && CItem->m_Type <= ITEM(12,40))
    		|| (CItem->m_Type >= ITEM(12,43) && CItem->m_Type < ITEM(13,0) && CItem->m_Type != ITEM(12,49))) )
    	{
    		CItem->ReqLevel = *(WORD *)(ItemAttribute + 60);
    	}
    	else if ( *(WORD *)(ItemAttribute + 60) > 0
    			&& ((CItem->m_Type >= ITEM(12,0) && CItem->m_Type <= ITEM(12,7))
    			|| (CItem->m_Type >= ITEM(12,41) && CItem->m_Type <= ITEM(12,42))
    			|| CItem->m_Type == ITEM(12,49)
    			|| CItem->m_Type >= ITEM(13,0)) )
    		CItem->ReqLevel = ReqLevel * Level + *(WORD *)(ItemAttribute + 60);
    	else
    		CItem->ReqLevel = 0;
    
    	if ( *(WORD *)(ItemAttribute + 50) )
    		CItem->ReqStrenght = 3 * (v20 + 3 * Level) * *(WORD *)(ItemAttribute + 50) / 100 + 20;
    	else
    		CItem->ReqStrenght = 0;
    
    	if ( *(WORD *)(ItemAttribute + 52) )
    		CItem->ReqDextirity = 3 * (v20 + 3 * Level) * *(WORD *)(ItemAttribute + 52) / 100 + 20;
    	else
    		CItem->ReqDextirity = 0;
    
    	if ( *(WORD *)(ItemAttribute + 56) )
    		CItem->ReqVitality = 3 * (v20 + 3 * Level) * *(WORD *)(ItemAttribute + 56) / 100 + 20;
    	else
    		CItem->ReqVitality = 0;
    
    	if ( *(WORD *)(ItemAttribute + 54) )
    	{
    		if ( (CItem->m_Type < 2581 || CItem->m_Type > 2589) && CItem->m_Type != 2600 )
    		{
    			if ( *(WORD *)(ItemAttribute + 60) <= 0 || CItem->m_Type < 7680 || CItem->m_Type >= 8192 )
    				CItem->ReqEnergy = 4 * (v20 + 3 * Level) * *(WORD *)(ItemAttribute + 54) / 100 + 20;
    			else
    				CItem->ReqEnergy = 4 * *(WORD *)(ItemAttribute + 60) * *(WORD *)(ItemAttribute + 54) / 100 + 20;
    		}
    		else
    		{
    			CItem->ReqEnergy = 3 * (Level + v20) * *(WORD *)(ItemAttribute + 54) / 100 + 20;
    		}
    	}
    	else
    	{
    		CItem->ReqEnergy = 0;
    	}
    
    	if ( *(WORD *)(ItemAttribute + 58) )
    		CItem->ReqCommand = 3 * (v20 + 3 * Level) * *(WORD *)(ItemAttribute + 58) / 100 + 20;
    	else
    		CItem->ReqCommand = 0;
    
    	if ( CItem->m_Type == 6155 )
    	{
    		int ReqEnergy = 0;
    		switch ( Level )
    		{
    			case 0:
    			ReqEnergy = 30;
    			break;
    			case 1:
    			ReqEnergy = 60;
    			break;
    			case 2:
    			ReqEnergy = 90;
    			break;
    			case 3:
    			ReqEnergy = 130;
    			break;
    			case 4:
    			ReqEnergy = 170;
    			break;
    			case 5:
    			ReqEnergy = 210;
    			break;
    			case 6:
    			ReqEnergy = 300;
    			break;
    			default:
    			break;
    		}
    		CItem->ReqEnergy = ReqEnergy;
    	}
    
    	if ( *(WORD *)(ItemAttribute + 58) )
    	{
    		if ( CItem->m_Type == 7832 )
    			CItem->ReqCommand = 15 * *(WORD *)(ItemAttribute + 58) + 185;
    		else
    			CItem->ReqCommand = *(WORD *)(ItemAttribute + 58);
    	}
    
    	if ( CItem->m_Type == 6666 )
    	{
    		if ( Level > 2 )
    			CItem->ReqLevel = 50;
    		else
    			CItem->ReqLevel = 20;
    	}
    
    	if ( (CItem->m_Type >= 3613 && CItem->m_Type <= 3617)
    		|| (CItem->m_Type >= 4125 && CItem->m_Type <= 4129)
    		|| (CItem->m_Type >= 4637 && CItem->m_Type <= 4641)
    		|| (CItem->m_Type >= 5149 && CItem->m_Type <= 5153)
    		|| (CItem->m_Type >= 5661 && CItem->m_Type <= 5665)
    		|| CItem->m_Type == 22
    		|| CItem->m_Type == 23
    		|| CItem->m_Type == 2572
    		|| CItem->m_Type == 2069
    		|| CItem->m_Type == 1038
    		|| CItem->m_Type == 2579
    		|| CItem->m_Type == 3627
    		|| CItem->m_Type == 4139
    		|| CItem->m_Type == 4651
    		|| CItem->m_Type == 5163
    		|| CItem->m_Type == 5675
    		|| sub_5C9370(CItem->m_Type, 0) )
    		IFExcellent = 0;
    
    	if ( IFExcellent > 0 )
    	{
    		if ( CItem->ReqLevel > 0 )
    		{
    			if ( CItem->m_Type != ITEM(13,37) )
    				CItem->ReqLevel += 20;
    		}
    	}
    
    	CItem->SpecialCount = 0;
    	// WINGS EXCELLENT
    	if ( (CItem->m_Type >= ITEM(12,3) && CItem->m_Type <= ITEM(12,6)) // Wings 2
    		|| CItem->m_Type == ITEM(12,42) )
    	{
    		if ( Excellent & 1 )
    		{
    			CItem->SpecialValue[CItem->SpecialCount] = 5 * Level + 50;
    			CItem->SpecialType[CItem->SpecialCount++] = 101;
    		}
    		if ( (Excellent >> 1) & 1 )
    		{
    			CItem->SpecialValue[CItem->SpecialCount] = 5 * Level + 50;
    			CItem->SpecialType[CItem->SpecialCount++] = 102;
    		}
    		if ( (Excellent >> 2) & 1 )
    		{
    			CItem->SpecialValue[CItem->SpecialCount] = 3;
    			CItem->SpecialType[CItem->SpecialCount++] = 103;
    		}
    		if ( (Excellent >> 3) & 1 )
    		{
    			CItem->SpecialValue[CItem->SpecialCount] = 50;
    			CItem->SpecialType[CItem->SpecialCount++] = 104;
    		}
    		if ( (Excellent >> 4) & 1 )
    		{
    			CItem->SpecialValue[CItem->SpecialCount] = 5;
    			CItem->SpecialType[CItem->SpecialCount++] = 98;
    		}
    	}
    	else if ( CItem->m_Type == ITEM(13,30) || CItem->m_Type == ITEM(12,49) ) // RF DL Capes 1
    	{
    		if ( Excellent & 1 )
    		{
    			CItem->SpecialValue[CItem->SpecialCount] = 5 * Level + 50;
    			CItem->SpecialType[CItem->SpecialCount++] = 101;
    		}
    		if ( (Excellent >> 1) & 1 )
    		{
    			CItem->SpecialValue[CItem->SpecialCount] = 5 * Level + 50;
    			CItem->SpecialType[CItem->SpecialCount++] = 102;
    		}
    		if ( (Excellent >> 2) & 1 )
    		{
    			CItem->SpecialValue[CItem->SpecialCount] = 3;
    			CItem->SpecialType[CItem->SpecialCount++] = 103;
    		}
    		if ( (Excellent >> 3) & 1 )
    		{
    			if ( CItem->m_Type != ITEM(12,49) )
    			{
    				CItem->SpecialValue[CItem->SpecialCount] = 5 * Level + 10;
    				CItem->SpecialType[CItem->SpecialCount++] = 172;
    			}
    		}
    	}
    	else if ( (CItem->m_Type >= ITEM(12,36) && CItem->m_Type <= ITEM(12,40))
    			|| CItem->m_Type == ITEM(12,43)
    			|| CItem->m_Type == ITEM(12,50) ) // Wings 3
    	{
    		if ( Excellent & 1 )
    		{
    			CItem->SpecialValue[CItem->SpecialCount] = 5;
    			CItem->SpecialType[CItem->SpecialCount++] = 103;
    		}
    		if ( (Excellent >> 1) & 1 )
    		{
    			CItem->SpecialValue[CItem->SpecialCount] = 5;
    			CItem->SpecialType[CItem->SpecialCount++] = 106;
    		}
    		if ( (Excellent >> 2) & 1 )
    		{
    			CItem->SpecialValue[CItem->SpecialCount] = 5;
    			CItem->SpecialType[CItem->SpecialCount++] = 107;
    		}
    		if ( (Excellent >> 3) & 1 )
    		{
    			CItem->SpecialValue[CItem->SpecialCount] = 5;
    			CItem->SpecialType[CItem->SpecialCount++] = 108;
    		}
    	}
    	//??
    	if ( (a2 >> 7) & 1 )
    	{
    		if ( *(WORD *)(ItemAttribute + 36) )
    			CItem->SpecialType[CItem->SpecialCount++] = *(WORD *)(ItemAttribute + 36);
    	}
    	//LUCK
    	if ( (a2 >> 2) & 1 )
    	{
    		if ( (CItem->m_Type >= 0 && CItem->m_Type < ITEM(12,0))
    			&& CItem->m_Type != ITEM(4,7)
    			&& CItem->m_Type != ITEM(4,15) )
    			CItem->SpecialType[CItem->SpecialCount++] = 85;
    
    		if ( (CItem->m_Type >= ITEM(12,0) && CItem->m_Type <= ITEM(12,6))
    			|| (CItem->m_Type >= ITEM(12,41) && CItem->m_Type <= ITEM(12,42)) )
    			CItem->SpecialType[CItem->SpecialCount++] = 85;
    
    		if ( CItem->m_Type == ITEM(13,30) || CItem->m_Type == ITEM(12,49) )
    			CItem->SpecialType[CItem->SpecialCount++] = 85;
    
    		if ( (CItem->m_Type >= ITEM(12,36) && CItem->m_Type <= ITEM(12,40))
    			|| CItem->m_Type == ITEM(12,43)
    			|| CItem->m_Type == ITEM(12,50) )
    			CItem->SpecialType[CItem->SpecialCount++] = 85;
    	}
    	// ADD OPTION
    	int add = (a2 & 3) + 4 * ((a3 & 0x40) >> 6);
    
    	if ( add )
    	{
    		if ( CItem->m_Type == ITEM(13,3) )
    		{
    			if ( add & 1 )
    			{
    				CItem->SpecialValue[CItem->SpecialCount] = 5;
    				CItem->SpecialType[CItem->SpecialCount++] = 105;
    			}
    			if ( (add >> 1) & 1 )
    			{
    				CItem->SpecialValue[CItem->SpecialCount] = 50;
    				CItem->SpecialType[CItem->SpecialCount++] = 104;
    			}
    			if ( (add >> 2) & 1 )
    			{
    				CItem->SpecialValue[CItem->SpecialCount] = 5;
    				CItem->SpecialType[CItem->SpecialCount++] = 98;
    			}
    		}
    		else
    		{
    			if ( (CItem->m_Type >= 0 && CItem->m_Type < ITEM(5,0)) // Weapon
    				&& CItem->m_Type != ITEM(4,7)
    				&& CItem->m_Type != ITEM(4,15) )
    			{
    				CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    				CItem->SpecialType[CItem->SpecialCount++] = 80;
    				CItem->ReqStrenght += 5 * add;
    			}
    
    			if ( CItem->m_Type >= ITEM(5,0) && CItem->m_Type < ITEM(6,0) ) // Staff
    			{
    				CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    
    				if ( (CItem->m_Type < 2581 || CItem->m_Type > 2589) && CItem->m_Type != 2600 )
    					CItem->SpecialType[CItem->SpecialCount] = 81;
    				else
    					CItem->SpecialType[CItem->SpecialCount] = 82;
    
    				CItem->SpecialCount++;
    				CItem->ReqStrenght += 5 * add;
    			}
    
    			if ( CItem->m_Type >= ITEM(6,0) && CItem->m_Type < ITEM(7,0) ) // Shield
    			{
    				CItem->SpecialValue[CItem->SpecialCount] = 5 * add;
    				CItem->SpecialType[CItem->SpecialCount++] = 83;
    				CItem->ReqStrenght += 5 * add;
    			}
    
    			if ( CItem->m_Type >= ITEM(7,0) && CItem->m_Type < ITEM(12,0) ) // Sets
    			{
    				CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    				CItem->SpecialType[CItem->SpecialCount++] = 84;
    				CItem->ReqStrenght += 5 * add;
    			}
    
    			if ( (CItem->m_Type >= ITEM(13,8) && CItem->m_Type < ITEM(14,0))
    				&& CItem->m_Type != ITEM(13,30) ) // Rings Pendant
    			{
    				if ( CItem->m_Type == ITEM(13,24) )
    				{
    					CItem->SpecialValue[CItem->SpecialCount] = add;
    					CItem->SpecialType[CItem->SpecialCount++] = 204;
    				}
    				else if ( CItem->m_Type == ITEM(13,28) )
    				{
    					CItem->SpecialValue[CItem->SpecialCount] = add;
    					CItem->SpecialType[CItem->SpecialCount++] = 205;
    				}
    				else
    				{
    					CItem->SpecialValue[CItem->SpecialCount] = add;
    					CItem->SpecialType[CItem->SpecialCount++] = 86;
    				}
    			}
    
    			switch ( CItem->m_Type ) // Other
    			{
    				case ITEM(12,0):
    					CItem->SpecialValue[CItem->SpecialCount] = add;
    					CItem->SpecialType[CItem->SpecialCount++] = 86;
    				break;
    				case ITEM(12,1):
    				case ITEM(12,41):
    					CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    					CItem->SpecialType[CItem->SpecialCount++] = 81;
    				break;
    				case ITEM(12,2):
    					CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    					CItem->SpecialType[CItem->SpecialCount++] = 80;
    				break;
    				case ITEM(12,3):
    					if ( (Excellent >> 5) & 1 )
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = add;
    						CItem->SpecialType[CItem->SpecialCount++] = 86;
    					}
    					else
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    						CItem->SpecialType[CItem->SpecialCount++] = 80;
    					}
    				break;
    				case ITEM(12,4):
    					if ( (Excellent >> 5) & 1 )
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    						CItem->SpecialType[CItem->SpecialCount++] = 81;
    					}
    					else
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = add;
    						CItem->SpecialType[CItem->SpecialCount++] = 86;
    					}
    				break;
    				case ITEM(12,5):
    					if ( (Excellent >> 5) & 1 )
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    						CItem->SpecialType[CItem->SpecialCount++] = 80;
    					}
    					else
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = add;
    						CItem->SpecialType[CItem->SpecialCount++] = 86;
    					}
    				break;
    				case ITEM(12,6):
    					if ( (Excellent >> 5) & 1 )
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    						CItem->SpecialType[CItem->SpecialCount++] = 80;
    					}
    					else
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    						CItem->SpecialType[CItem->SpecialCount++] = 81;
    					}
    				break;
    				case ITEM(13,30): // DL Cape 1
    					CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    					CItem->SpecialType[CItem->SpecialCount++] = 80;
    				break;
    				case ITEM(12,49): // RF Cape 1
    					if ( (Excellent >> 5) & 1 )
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    						CItem->SpecialType[CItem->SpecialCount++] = 80;
    					}
    					else
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = add;
    						CItem->SpecialType[CItem->SpecialCount++] = 86;
    					}
    				break;
    				case ITEM(12,42):
    					CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    					if ( (Excellent >> 5) & 1 )
    						CItem->SpecialType[CItem->SpecialCount] = 81;
    					else
    						CItem->SpecialType[CItem->SpecialCount] = 82;
    					++CItem->SpecialCount;
    				break;
    				case ITEM(12,36):
    					if ( (Excellent >> 4) & 1 )
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    						CItem->SpecialType[CItem->SpecialCount++] = 80;
    					}
    					else if ( (Excellent >> 5) & 1 )
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    						CItem->SpecialType[CItem->SpecialCount++] = 84;
    					}
    					else
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = add;
    						CItem->SpecialType[CItem->SpecialCount++] = 86;
    					}
    				break;
    				case ITEM(12,37):
    					if ( (Excellent >> 4) & 1 )
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    						CItem->SpecialType[CItem->SpecialCount++] = 81;
    					}
    					else if ( (Excellent >> 5) & 1 )
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    						CItem->SpecialType[CItem->SpecialCount++] = 84;
    					}
    					else
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = add;
    						CItem->SpecialType[CItem->SpecialCount++] = 86;
    					}
    				break;
    				case ITEM(12,38):
    					if ( (Excellent >> 4) & 1 )
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    						CItem->SpecialType[CItem->SpecialCount++] = 80;
    					}
    					else if ( (Excellent >> 5) & 1 )
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    						CItem->SpecialType[CItem->SpecialCount++] = 84;
    					}
    					else
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = add;
    						CItem->SpecialType[CItem->SpecialCount++] = 86;
    					}
    				break;
    				case ITEM(12,39):
    					if ( (Excellent >> 4) & 1 )
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    						CItem->SpecialType[CItem->SpecialCount++] = 80;
    					}
    					else if ( (Excellent >> 5) & 1 )
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    						CItem->SpecialType[CItem->SpecialCount++] = 81;
    					}
    					else
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = add;
    						CItem->SpecialType[CItem->SpecialCount++] = 86;
    					}
    				break;
    				case ITEM(12,40): // DL Cape 2
    				case ITEM(12,50): // RF Cape 2
    					if ( (Excellent >> 4) & 1 )
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    						CItem->SpecialType[CItem->SpecialCount++] = 80;
    					}
    					else if ( (Excellent >> 5) & 1 )
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    						CItem->SpecialType[CItem->SpecialCount++] = 84;
    					}
    					else
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = add;
    						CItem->SpecialType[CItem->SpecialCount++] = 86;
    					}
    				case ITEM(12,43): // SUM Wings 3
    					if ( (Excellent >> 4) & 1 )
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    						CItem->SpecialType[CItem->SpecialCount++] = 81;
    					}
    					else if ( (Excellent >> 5) & 1 )
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
    						CItem->SpecialType[CItem->SpecialCount++] = 82;
    					}
    					else
    					{
    						CItem->SpecialValue[CItem->SpecialCount] = add;
    						CItem->SpecialType[CItem->SpecialCount++] = 86;
    					}
    				break;
    			}
    		}
    	}
    	// ----
    	if ( CItem->m_Type == ITEM(13,4) )
    	{
    		int *horse = sub_4F9930(*(int*)CItem);
    		sub_4F9B50(*(int*)CItem, *horse);
    	}
    	// SHIELDS/SETS/RINGS EXCELLENT
    	if ( (CItem->m_Type >= ITEM(6,0) && CItem->m_Type < ITEM(12,0))
    		|| (CItem->m_Type >= ITEM(13,8) && CItem->m_Type <= ITEM(13,9))
    		|| (CItem->m_Type >= ITEM(13,21) && CItem->m_Type <= ITEM(13,24)) )
    	{
    		if ( (a3 >> 5) & 1 )
    			CItem->SpecialType[CItem->SpecialCount++] = 87;
    		if ( (a3 >> 4) & 1 )
    			CItem->SpecialType[CItem->SpecialCount++] = 88;
    		if ( (a3 >> 3) & 1 )
    			CItem->SpecialType[CItem->SpecialCount++] = 89;
    		if ( (a3 >> 2) & 1 )
    			CItem->SpecialType[CItem->SpecialCount++] = 90;
    		if ( (a3 >> 1) & 1 )
    			CItem->SpecialType[CItem->SpecialCount++] = 91;
    		if ( a3 & 1 )
    			CItem->SpecialType[CItem->SpecialCount++] = 92;
    	}
    	// WEAPON/PENDANTS EXCELLENT
    	if ( CItem->m_Type >= 0 && CItem->m_Type < ITEM(6,0)
    		|| CItem->m_Type >= ITEM(13,12) && CItem->m_Type <= ITEM(13,13)
    		|| CItem->m_Type >= ITEM(13,25) && CItem->m_Type <= ITEM(13,28) )
    	{
    		if ( (a3 >> 5) & 1 )
    			CItem->SpecialType[CItem->SpecialCount++] = 93;
    
    		if ( (CItem->m_Type >= ITEM(5,0) && CItem->m_Type < ITEM(6,0))
    			|| CItem->m_Type == 6668
    			|| CItem->m_Type == 6681
    			|| CItem->m_Type == 6683 )
    		{
    			if ( (a3 >> 4) & 1 )
    			{
    				CItem->SpecialValue[CItem->SpecialCount] = *(WORD *)(0x8128AC8 + 14) / 20;
    				CItem->SpecialType[CItem->SpecialCount++] = 96;
    			}
    			if ( (a3 >> 3) & 1 )
    			{
    				CItem->SpecialValue[CItem->SpecialCount] = 2;
    				CItem->SpecialType[CItem->SpecialCount++] = 97;
    			}
    		}
    		else
    		{
    			if ( (a3 >> 4) & 1 )
    			{
    				CItem->SpecialValue[CItem->SpecialCount] = *(WORD *)(0x8128AC8 + 14) / 20;
    				CItem->SpecialType[CItem->SpecialCount++] = 94;
    			}
    			if ( (a3 >> 3) & 1 )
    			{
    				CItem->SpecialValue[CItem->SpecialCount] = 2;
    				CItem->SpecialType[CItem->SpecialCount++] = 95;
    			}
    		}
    
    		if ( (a3 >> 2) & 1 )
    		{
    			CItem->SpecialValue[CItem->SpecialCount] = 7;
    			CItem->SpecialType[CItem->SpecialCount++] = 98;
    		}
    
    		if ( (a3 >> 1) & 1 )
    			CItem->SpecialType[CItem->SpecialCount++] = 99;
    
    		if ( a3 & 1 )
    			CItem->SpecialType[CItem->SpecialCount++] = 100;
    	}
    
    	if ( CItem->m_Type == ITEM(13,20) ) // Wizard ring
    	{
    		if ( Level )
    		{
    			if ( Level == 3 )
    			{
    				CItem->SpecialValue[CItem->SpecialCount] = 10;
    				CItem->SpecialType[CItem->SpecialCount++] = 97;
    				CItem->SpecialValue[CItem->SpecialCount] = 10;
    				CItem->SpecialType[CItem->SpecialCount++] = 95;
    				CItem->SpecialValue[CItem->SpecialCount] = 10;
    				CItem->SpecialType[CItem->SpecialCount++] = 98;
    			}
    		}
    		else
    		{
    			CItem->SpecialValue[CItem->SpecialCount] = 10;
    			CItem->SpecialType[CItem->SpecialCount++] = 97;
    			CItem->SpecialValue[CItem->SpecialCount] = 10;
    			CItem->SpecialType[CItem->SpecialCount++] = 95;
    			CItem->SpecialValue[CItem->SpecialCount] = 10;
    			CItem->SpecialType[CItem->SpecialCount++] = 98;
    		}
    	}
    
    	if ( CItem->m_Type == ITEM(13,107) ) // Lethal Wizard's Ring
    	{
    		CItem->SpecialValue[CItem->SpecialCount] = 15;
    		CItem->SpecialType[CItem->SpecialCount++] = 97;
    		CItem->SpecialValue[CItem->SpecialCount] = 15;
    		CItem->SpecialType[CItem->SpecialCount++] = 95;
    		CItem->SpecialValue[CItem->SpecialCount] = 10;
    		CItem->SpecialType[CItem->SpecialCount++] = 98;
    	}
    
    	char result = *(BYTE *)(0x8128AC0 + 84 * CItem->m_Type + 34);
    	CItem->Unknown6 = result;
    	return result;
    }
    Last edited by 8bitcore; 05-06-14 at 10:15 AM.

  4. #4
    Apprentice kaisudo is offline
    MemberRank
    Jan 2010 Join Date
    7Posts

    Re: Item Convert from main.exe (Source)

    how to change color name new wing

  5. #5
    Account Upgraded | Title Enabled! Maddox is online now
    MemberRank
    Feb 2014 Join Date
    938Posts

    Re: Item Convert from main.exe (Source)

    Quote Originally Posted by 8bitcore View Post
    From this function you can change view of level/stat requirement, additional/excellent/luck options, etc on item
    1.04d gmo

    .h
    Code:
    #pragma pack(push, 1)
    typedef struct    //-> Complete (size: 107)
    {
    /*+0*/        WORD    m_Type;
    /*+2*/        int        m_Level;
    /*+6*/        BYTE    Unknown6;
    /*+7*/        BYTE    Unknown7;
    /*+8*/        BYTE    Unknown8;
    /*+9*/        WORD    DamageMin;
    /*+11*/        WORD    DamageMax;
    /*+13*/        BYTE    Unknown13;
    /*+14*/        WORD    Defense;
    /*+16*/        WORD    MagicDefense;
    /*+18*/        BYTE    MagicDamage;
    /*+19*/        BYTE    Unknown19;
    /*+20*/        WORD    Unknown20;
    /*+22*/        BYTE    Durability;
    /*+23*/        BYTE    ExcellentOption;
    /*+24*/        BYTE    AncientOption;
    /*+25*/        WORD    ReqStrenght;
    /*+27*/        WORD    ReqDextirity;
    /*+29*/        WORD    ReqEnergy;
    /*+31*/        WORD    ReqVitality;
    /*+33*/        WORD    ReqCommand;
    /*+35*/        WORD    ReqLevel;
    /*+37*/        BYTE    SpecialCount;
    /*+38*/        WORD    SpecialType[8];
    /*+54*/        BYTE    SpecialValue[8];
    /*+62*/        int        UniqueID;
    /*+66*/        BYTE    Unknown66;
    /*+67*/        BYTE     PosX;
    /*+68*/        BYTE     PosY;
    /*+69*/        WORD     HarmonyType;
    /*+71*/        WORD    HarmonyValue;
    /*+73*/        BYTE     Is380Item;
    /*+74*/        BYTE    SocketOption[5];
    /*+79*/        BYTE    Unknown79;
    /*+80*/        BYTE    SocketSeedIndex[5];
    /*+85*/        BYTE    SocketSphereLevel[5];
    /*+90*/        BYTE    SocketSet;
    BYTE gap01[5];
    /*+96*/        BYTE    DurabilityState;
    /*+97*/        BYTE     PeriodItem;
    /*+98*/        BYTE     ExpiredItem;
    /*+99*/        int        ExpireDateConvert;
    /*+103*/    int        Unknown103;
    } ObjectItem, * lpItemObj;
    #pragma pack(pop)
    .cpp
    Code:
    #define sub_4F9B50 ((char(*) (int a1, int a2)) 0x4F9B50)
    
    char sub_58B8D0(signed int a1)
    {
        if ( (a1 >= ITEM(2,8) && a1 <= ITEM(2,15))
            || a1 == ITEM(2,17)
            || a1 == ITEM(2,18)
            || a1 == ITEM(2,21) )
            return TRUE;
    
        return FALSE;
    }
    
    char sub_5C9370(signed int a1, int a2)
    {
        BYTE result = FALSE;
    
        int v2 = (a2 + a1) % 512;
    
        if ( a1 >= ITEM(7,0) && a1 <= ITEM(12,0) && v2 >= 62 && v2 <= 72 )
            result = TRUE;
    
        return result;
    }
    
    char gObjItemConvert(lpItemObj CItem, BYTE a2, BYTE a3, BYTE a4)
    {
        int *v4; // eax@439
        int v6; // [sp+14h] [bp-68h]@156
        int v10; // [sp+2Ch] [bp-50h]@115
        int v11; // [sp+34h] [bp-48h]@89
        int v12; // [sp+3Ch] [bp-40h]@73
        int v13; // [sp+44h] [bp-38h]@55
        int v14; // [sp+4Ch] [bp-30h]@37
        int v16; // [sp+54h] [bp-28h]@1
        int v20; // [sp+64h] [bp-18h]@165
        int v21; // [sp+68h] [bp-14h]@1
        char v22; // [sp+6Fh] [bp-Dh]@1
        int v24; // [sp+74h] [bp-8h]@1
        int v25; // [sp+78h] [bp-4h]@22
    
        CItem->Level = a2;
        v24 = (a2 >> 3) & 0xF;
        v16 = a3 & 0x3F;
        v21 = a3 & 0x3F;
        v22 = 0;
    
        if ( (CItem->m_Type >= ITEM(12,3) && CItem->m_Type <= ITEM(12,6))
            || (CItem->m_Type >= ITEM(12,36) && CItem->m_Type <= ITEM(12,40))
            || (CItem->m_Type >= ITEM(12,42) && CItem->m_Type <= ITEM(12,43))
            || CItem->m_Type == ITEM(0,19)
            || CItem->m_Type == 2066
            || CItem->m_Type == 2570
            || CItem->m_Type == 1037
            || CItem->m_Type == ITEM(13,30)
            || (CItem->m_Type >= 6274 && CItem->m_Type <= 6278)
            || (CItem->m_Type >= ITEM(12,49) && CItem->m_Type <= ITEM(12,50)) // RF capes
            || CItem->m_Type == 6279
            || CItem->m_Type == 2596 )
            v16 = 0;
    
        if ( a4 % 4 == 1 || a4 % 4 == 2 )
        {
            v16 = 1;
            v22 = 1;
        }
    
        v25 = *(int*)0x8128AC0 + 84 * CItem->m_Type;
        CItem->Unknown8 = *(BYTE *)(v25 + 30);
        CItem->Unknown19 = *(BYTE *)(v25 + 45);
        CItem->DamageMin = *(BYTE *)(v25 + 40);
        CItem->DamageMax = *(BYTE *)(v25 + 41);
        CItem->Unknown13 = *(BYTE *)(v25 + 42);
        CItem->Defense = *(BYTE *)(v25 + 43);
        CItem->MagicDefense = *(BYTE *)(v25 + 44);
        CItem->Unknown20 = *(BYTE *)(v25 + 46);
        CItem->Unknown18 = *(BYTE *)(v25 + 49);
        int v17 = *(WORD *)(v25 + 32) + 30;
        
        int damage = 0;
        switch ( CItem->m_Type )
        {
            case 0x406:
            damage = 15;
            break;
            case 0x806:
            damage = 30;
            break;
            case 0xA07:
            damage = 25;
            break;
        }
        //MIN DAMAGE
        if ( *(BYTE *)(v25 + 40) > 0 )
        {
            if ( v16 > 0 )
            {
                if ( *(WORD *)(v25 + 32) )
                {
                    if ( damage )
                        CItem->DamageMin += damage;
                    else
                        CItem->DamageMin += 25 * *(BYTE *)(v25 + 40) / *(WORD *)(v25 + 32) + 5;
                }
            }
    
            if ( v22 )
                CItem->DamageMin += v17 / 40 + 5;
            if ( v24 <= 9 )
                v14 = (a2 >> 3) & 0xF;
            else
                v14 = 9;
            CItem->DamageMin += 3 * v14;
    
            switch ( v24 )
            {
                case 15:
                CItem->DamageMin += 9;
                goto LABEL_41;
                case 14:
                LABEL_41:
                CItem->DamageMin += 8;
                goto LABEL_42;
                case 13:
                LABEL_42:
                CItem->DamageMin += 7;
                goto LABEL_43;
                case 12:
                LABEL_43:
                CItem->DamageMin += 6;
                goto LABEL_44;
                case 11:
                LABEL_44:
                CItem->DamageMin += 5;
                goto LABEL_45;
                case 10:
                LABEL_45:
                CItem->DamageMin += 4;
                break;
                default:
                break;
            }
        }
        // MAX DAMAGE
        if ( *(BYTE *)(v25 + 41) > 0 )
        {
            if ( v16 > 0 )
            {
                if ( *(WORD *)(v25 + 32) )
                {
                    if ( damage )
                        CItem->DamageMax += damage;
                    else
                        CItem->DamageMax += 25 * *(BYTE *)(v25 + 40) / *(WORD *)(v25 + 32) + 5;
                }
            }
    
            if ( v22 )
                CItem->DamageMax += v17 / 40 + 5;
            if ( v24 <= 9 )
                v13 = (a2 >> 3) & 0xF;
            else
                v13 = 9;
            CItem->DamageMax += 3 * v13;
    
            switch ( v24 )
            {
                case 15:
                CItem->DamageMax += 9;
                goto LABEL_59;
                case 14:
                LABEL_59:
                CItem->DamageMax += 8;
                goto LABEL_60;
                case 13:
                LABEL_60:
                CItem->DamageMax += 7;
                goto LABEL_61;
                case 12:
                LABEL_61:
                CItem->DamageMax += 6;
                goto LABEL_62;
                case 11:
                LABEL_62:
                CItem->DamageMax += 5;
                goto LABEL_63;
                case 10:
                LABEL_63:
                CItem->DamageMax += 4;
                break;
                default:
                break;
            }
        }
        // DAMAGE ?
        if ( *(BYTE *)(v25 + 49) > 0 )
        {
            if ( v16 > 0 )
            {
                if ( *(WORD *)(v25 + 32) )
                {
                    if ( damage )
                        CItem->Unknown18 += damage;
                    else
                        CItem->Unknown18 += 25 * *(BYTE *)(v25 + 49) / *(WORD *)(v25 + 32) + 5;
                }
            }
    
            if ( v22 )
                CItem->Unknown18 += v17 / 60 + 2;
            if ( v24 <= 9 )
                v12 = (a2 >> 3) & 0xF;
            else
                v12 = 9;
            CItem->Unknown18 += 3 * v12;
    
            switch ( v24 )
            {
                case 15:
                CItem->Unknown18 += 9;
                goto LABEL_77;
                case 14:
                LABEL_77:
                CItem->Unknown18 += 8;
                goto LABEL_78;
                case 13:
                LABEL_78:
                CItem->Unknown18 += 7;
                goto LABEL_79;
                case 12:
                LABEL_79:
                CItem->Unknown18 += 6;
                goto LABEL_80;
                case 11:
                LABEL_80:
                CItem->Unknown18 += 5;
                goto LABEL_81;
                case 10:
                LABEL_81:
                CItem->Unknown18 += 4;
                break;
                default:
                break;
            }
    
            CItem->Unknown18 >>= 1;
            if ( !sub_58B8D0(CItem->m_Type) )
                CItem->Unknown18 += 2 * v24;
        }
        //
        if ( *(BYTE *)(v25 + 42) > 0 )
        {
            if ( v16 > 0 )
            {
                if ( *(WORD *)(v25 + 32) )
                    CItem->Unknown13 += 25 * *(BYTE *)(v25 + 42) / *(WORD *)(v25 + 32) + 5;
            }
    
            if ( v24 <= 9 )
                v11 = (a2 >> 3) & 0xF;
            else
                v11 = 9;
            CItem->Unknown13 += 3 * v11;
    
            switch ( v24 )
            {
                case 15:
                CItem->Unknown13 += 9;
                goto LABEL_93;
                case 14:
                LABEL_93:
                CItem->Unknown13 += 8;
                goto LABEL_94;
                case 13:
                LABEL_94:
                CItem->Unknown13 += 7;
                goto LABEL_95;
                case 12:
                LABEL_95:
                CItem->Unknown13 += 6;
                goto LABEL_96;
                case 11:
                LABEL_96:
                CItem->Unknown13 += 5;
                goto LABEL_97;
                case 10:
                LABEL_97:
                CItem->Unknown13 += 4;
                break;
                default:
                break;
            }
        }
        //DEFENCE
        if ( CItem->m_Type == ITEM(13,30) )
        {
            *(BYTE *)(v25 + 43) = 15;
            CItem->Defense = 15;
        }
    
        if ( *(BYTE *)(v25 + 43) > 0 )
        {
            if ( CItem->m_Type >= ITEM(6,0) && CItem->m_Type < ITEM(7,0) ) // Shields
            {
                CItem->Defense += v24;
                if ( v22 )
                    CItem->Defense += 20 * CItem->Defense / v17 + 2;
            }
            else
            {
                if ( v16 > 0 )
                {
                    if ( *(WORD *)(v25 + 32) )
                        CItem->Defense += 12 * *(BYTE *)(v25 + 43) / *(WORD *)(v25 + 32) + *(WORD *)(v25 + 32) / 5 + 4;
                }
    
                if ( v22 )
                    CItem->Defense += 3 * CItem->Defense / v17 + v17 / 30 + 2;
    
                if ( (CItem->m_Type >= ITEM(12,3) && CItem->m_Type <= ITEM(12,6))
                    || CItem->m_Type == ITEM(12,42)
                    || CItem->m_Type == ITEM(13,30)
                    || CItem->m_Type == ITEM(12,49) ) // Wings 2
                {
                    if ( v24 <= 9 )
                        v10 = (a2 >> 3) & 0xF;
                    else
                        v10 = 9;
                    CItem->Defense += 2 * v10;
                }
                else if ( (CItem->m_Type >= ITEM(12,36) && CItem->m_Type <= ITEM(12,40))
                        || CItem->m_Type == ITEM(12,43)
                        || CItem->m_Type == ITEM(12,50) ) // Wings 3
    
                {
                    if ( v24 <= 9 )
                        v10 = (a2 >> 3) & 0xF;
                    else
                        v10 = 9;
                    CItem->Defense += 4 * v10;
                }
                else
                {
                    if ( v24 <= 9 )
                        v10 = (a2 >> 3) & 0xF;
                    else
                        v10 = 9;
                    CItem->Defense += 3 * v10;
                }
    
                if ( (CItem->m_Type >= ITEM(12,36) && CItem->m_Type <= ITEM(12,40))
                    || CItem->m_Type == ITEM(12,43)
                    || CItem->m_Type == ITEM(12,50) )
                {
                    switch ( v24 )
                    {
                        case 15:
                        CItem->Defense += 10;
                        goto LABEL_142;
                        case 14:
                        LABEL_142:
                        CItem->Defense += 9;
                        goto LABEL_143;
                        case 13:
                        LABEL_143:
                        CItem->Defense += 8;
                        goto LABEL_144;
                        case 12:
                        LABEL_144:
                        CItem->Defense += 7;
                        goto LABEL_145;
                        case 11:
                        LABEL_145:
                        CItem->Defense += 6;
                        goto LABEL_146;
                        case 10:
                        LABEL_146:
                        CItem->Defense += 5;
                        break;
                        default:
                        break;
                    }
                }
                else
                {
                    switch ( v24 )
                    {
                        case 15:
                        CItem->Defense += 9;
                        goto LABEL_149;
                        case 14:
                        LABEL_149:
                        CItem->Defense += 8;
                        goto LABEL_150;
                        case 13:
                        LABEL_150:
                        CItem->Defense += 7;
                        goto LABEL_151;
                        case 12:
                        LABEL_151:
                        CItem->Defense += 6;
                        goto LABEL_152;
                        case 11:
                        LABEL_152:
                        CItem->Defense += 5;
                        goto LABEL_153;
                        case 10:
                        LABEL_153:
                        CItem->Defense += 4;
                        break;
                        default:
                        break;
                    }
                }
            }
        }
        //MAGIC DEFENCE
        if ( *(BYTE *)(v25 + 44) > 0 )
        {
            if ( v24 <= 9 )
                v6 = (a2 >> 3) & 0xF;
            else
                v6 = 9;
    
            CItem->MagicDefense += 3 * v6;
    
            switch ( v24 )
            {
                case 15:
                CItem->MagicDefense += 9;
                goto LABEL_160;
                case 14:
                LABEL_160:
                CItem->MagicDefense += 8;
                goto LABEL_161;
                case 13:
                LABEL_161:
                CItem->MagicDefense += 7;
                goto LABEL_162;
                case 12:
                LABEL_162:
                CItem->MagicDefense += 6;
                goto LABEL_163;
                case 11:
                LABEL_163:
                CItem->MagicDefense += 5;
                goto LABEL_164;
                case 10:
                LABEL_164:
                CItem->MagicDefense += 4;
                break;
                default:
                break;
            }
        }
        //REQ
        v20 = *(WORD *)(v25 + 32);
    
        if ( v16 )
            v20 = *(WORD *)(v25 + 32) + 25;
        else if ( v22 )
            v20 = *(WORD *)(v25 + 32) + 30;
    
        int ReqLevel = 4;
    
        if ( (CItem->m_Type >= ITEM(12,3) && CItem->m_Type <= ITEM(12,6))
            || CItem->m_Type == ITEM(12,42) )
            ReqLevel = 5;
    
        if ( *(WORD *)(v25 + 60)
            && ((CItem->m_Type >= 0 && CItem->m_Type < ITEM(12,0))
            || CItem->m_Type == ITEM(13,37)
            || (CItem->m_Type >= ITEM(12,7) && CItem->m_Type <= ITEM(12,40))
            || (CItem->m_Type >= ITEM(12,43) && CItem->m_Type < ITEM(13,0) && CItem->m_Type != ITEM(12,49))) )
        {
            CItem->ReqLevel = *(WORD *)(v25 + 60);
        }
        else if ( *(WORD *)(v25 + 60)
                && ((CItem->m_Type >= ITEM(12,0) && CItem->m_Type <= ITEM(12,7))
                || (CItem->m_Type >= ITEM(12,41) && CItem->m_Type <= ITEM(12,42))
                || CItem->m_Type == ITEM(12,49)
                || CItem->m_Type >= ITEM(13,0)) )
            CItem->ReqLevel = ReqLevel * v24 + *(WORD *)(v25 + 60);
        else
            CItem->ReqLevel = 0;
    
        if ( *(WORD *)(v25 + 50) )
            CItem->ReqStrenght = 3 * (v20 + 3 * v24) * *(WORD *)(v25 + 50) / 100 + 20;
        else
            CItem->ReqStrenght = 0;
    
        if ( *(WORD *)(v25 + 52) )
            CItem->ReqDextirity = 3 * (v20 + 3 * v24) * *(WORD *)(v25 + 52) / 100 + 20;
        else
            CItem->ReqDextirity = 0;
    
        if ( *(WORD *)(v25 + 56) )
            CItem->ReqVitality = 3 * (v20 + 3 * v24) * *(WORD *)(v25 + 56) / 100 + 20;
        else
            CItem->ReqVitality = 0;
    
        if ( *(WORD *)(v25 + 54) )
        {
            if ( (CItem->m_Type < 2581 || CItem->m_Type > 2589) && CItem->m_Type != 2600 )
            {
                if ( *(WORD *)(v25 + 60) <= 0 || CItem->m_Type < 7680 || CItem->m_Type >= 8192 )
                    CItem->ReqEnergy = 4 * (v20 + 3 * v24) * *(WORD *)(v25 + 54) / 100 + 20;
                else
                    CItem->ReqEnergy = 4 * *(WORD *)(v25 + 60) * *(WORD *)(v25 + 54) / 100 + 20;
            }
            else
            {
            CItem->ReqEnergy = 3 * (v24 + v20) * *(WORD *)(v25 + 54) / 100 + 20;
            }
        }
        else
        {
            CItem->ReqEnergy = 0;
        }
    
        if ( *(WORD *)(v25 + 58) )
            CItem->ReqCommand = 3 * (v20 + 3 * v24) * *(WORD *)(v25 + 58) / 100 + 20;
        else
            CItem->ReqCommand = 0;
    
        if ( CItem->m_Type == 6155 )
        {
            int ReqEnergy = 0;
            switch ( v24 )
            {
                case 0:
                ReqEnergy = 30;
                break;
                case 1:
                ReqEnergy = 60;
                break;
                case 2:
                ReqEnergy = 90;
                break;
                case 3:
                ReqEnergy = 130;
                break;
                case 4:
                ReqEnergy = 170;
                break;
                case 5:
                ReqEnergy = 210;
                break;
                case 6:
                ReqEnergy = 300;
                break;
                default:
                break;
            }
            CItem->ReqEnergy = ReqEnergy;
        }
    
        if ( *(WORD *)(v25 + 58) )
        {
            if ( CItem->m_Type == 7832 )
                CItem->ReqCommand = 15 * *(WORD *)(v25 + 58) + 185;
            else
                CItem->ReqCommand = *(WORD *)(v25 + 58);
        }
    
        if ( CItem->m_Type == 6666 )
        {
            if ( v24 > 2 )
                CItem->ReqLevel = 50;
            else
                CItem->ReqLevel = 20;
        }
    
        if ( (CItem->m_Type >= 3613 && CItem->m_Type <= 3617)
            || (CItem->m_Type >= 4125 && CItem->m_Type <= 4129)
            || (CItem->m_Type >= 4637 && CItem->m_Type <= 4641)
            || (CItem->m_Type >= 5149 && CItem->m_Type <= 5153)
            || (CItem->m_Type >= 5661 && CItem->m_Type <= 5665)
            || CItem->m_Type == 22
            || CItem->m_Type == 23
            || CItem->m_Type == 2572
            || CItem->m_Type == 2069
            || CItem->m_Type == 1038
            || CItem->m_Type == 2579
            || CItem->m_Type == 3627
            || CItem->m_Type == 4139
            || CItem->m_Type == 4651
            || CItem->m_Type == 5163
            || CItem->m_Type == 5675
            || sub_5C9370(CItem->m_Type, 0) )
            v16 = 0;
    
        if ( v16 > 0 )
        {
            if ( CItem->ReqLevel > 0 )
            {
                if ( CItem->m_Type != ITEM(13,37) )
                    CItem->ReqLevel += 20;
            }
        }
    
        CItem->SpecialCount = 0;
        // WINGS EXCELLENT
        if ( (CItem->m_Type >= ITEM(12,3) && CItem->m_Type <= ITEM(12,6)) // Wings 2
            || CItem->m_Type == ITEM(12,42) )
        {
            if ( v21 & 1 )
            {
                CItem->SpecialValue[CItem->SpecialCount] = 5 * v24 + 50;
                CItem->SpecialType[CItem->SpecialCount++] = 101;
            }
            if ( (v21 >> 1) & 1 )
            {
                CItem->SpecialValue[CItem->SpecialCount] = 5 * v24 + 50;
                CItem->SpecialType[CItem->SpecialCount++] = 102;
            }
            if ( (v21 >> 2) & 1 )
            {
                CItem->SpecialValue[CItem->SpecialCount] = 3;
                CItem->SpecialType[CItem->SpecialCount++] = 103;
            }
            if ( (v21 >> 3) & 1 )
            {
                CItem->SpecialValue[CItem->SpecialCount] = 50;
                CItem->SpecialType[CItem->SpecialCount++] = 104;
            }
            if ( (v21 >> 4) & 1 )
            {
                CItem->SpecialValue[CItem->SpecialCount] = 5;
                CItem->SpecialType[CItem->SpecialCount++] = 98;
            }
        }
        else if ( CItem->m_Type == ITEM(13,30) || CItem->m_Type == ITEM(12,49) ) // RF DL Capes 1
        {
            if ( v21 & 1 )
            {
                CItem->SpecialValue[CItem->SpecialCount] = 5 * v24 + 50;
                CItem->SpecialType[CItem->SpecialCount++] = 101;
            }
            if ( (v21 >> 1) & 1 )
            {
                CItem->SpecialValue[CItem->SpecialCount] = 5 * v24 + 50;
                CItem->SpecialType[CItem->SpecialCount++] = 102;
            }
            if ( (v21 >> 2) & 1 )
            {
                CItem->SpecialValue[CItem->SpecialCount] = 3;
                CItem->SpecialType[CItem->SpecialCount++] = 103;
            }
            if ( (v21 >> 3) & 1 )
            {
                if ( CItem->m_Type != ITEM(12,49) )
                {
                    CItem->SpecialValue[CItem->SpecialCount] = 5 * v24 + 10;
                    CItem->SpecialType[CItem->SpecialCount++] = 172;
                }
            }
        }
        else if ( (CItem->m_Type >= ITEM(12,36) && CItem->m_Type <= ITEM(12,40))
                || CItem->m_Type == ITEM(12,43)
                || CItem->m_Type == ITEM(12,50) ) // Wings 3
        {
            if ( v21 & 1 )
            {
                CItem->SpecialValue[CItem->SpecialCount] = 5;
                CItem->SpecialType[CItem->SpecialCount++] = 103;
            }
            if ( (v21 >> 1) & 1 )
            {
                CItem->SpecialValue[CItem->SpecialCount] = 5;
                CItem->SpecialType[CItem->SpecialCount++] = 106;
            }
            if ( (v21 >> 2) & 1 )
            {
                CItem->SpecialValue[CItem->SpecialCount] = 5;
                CItem->SpecialType[CItem->SpecialCount++] = 107;
            }
            if ( (v21 >> 3) & 1 )
            {
                CItem->SpecialValue[CItem->SpecialCount] = 5;
                CItem->SpecialType[CItem->SpecialCount++] = 108;
            }
        }
        //??
        if ( (a2 >> 7) & 1 )
        {
            if ( *(WORD *)(v25 + 36) )
                CItem->SpecialType[CItem->SpecialCount++] = *(WORD *)(v25 + 36);
        }
        //LUCK
        if ( (a2 >> 2) & 1 )
        {
            if ( (CItem->m_Type >= 0 && CItem->m_Type < ITEM(12,0))
                && CItem->m_Type != ITEM(4,7)
                && CItem->m_Type != ITEM(4,15) )
                CItem->SpecialType[CItem->SpecialCount++] = 85;
    
            if ( (CItem->m_Type >= ITEM(12,0) && CItem->m_Type <= ITEM(12,6))
                || (CItem->m_Type >= ITEM(12,41) && CItem->m_Type <= ITEM(12,42)) )
                CItem->SpecialType[CItem->SpecialCount++] = 85;
    
            if ( CItem->m_Type == ITEM(13,30) || CItem->m_Type == ITEM(12,49) )
                CItem->SpecialType[CItem->SpecialCount++] = 85;
    
            if ( (CItem->m_Type >= ITEM(12,36) && CItem->m_Type <= ITEM(12,40))
                || CItem->m_Type == ITEM(12,43)
                || CItem->m_Type == ITEM(12,50) )
                CItem->SpecialType[CItem->SpecialCount++] = 85;
        }
        // ADD OPTION
        int add = (a2 & 3) + 4 * ((a3 & 0x40) >> 6);
    
        if ( add )
        {
            if ( CItem->m_Type == ITEM(13,3) )
            {
                if ( add & 1 )
                {
                    CItem->SpecialValue[CItem->SpecialCount] = 5;
                    CItem->SpecialType[CItem->SpecialCount++] = 105;
                }
                if ( (add >> 1) & 1 )
                {
                    CItem->SpecialValue[CItem->SpecialCount] = 50;
                    CItem->SpecialType[CItem->SpecialCount++] = 104;
                }
                if ( (add >> 2) & 1 )
                {
                    CItem->SpecialValue[CItem->SpecialCount] = 5;
                    CItem->SpecialType[CItem->SpecialCount++] = 98;
                }
            }
            else
            {
                if ( (CItem->m_Type >= 0 && CItem->m_Type < ITEM(5,0)) // Weapon
                    && CItem->m_Type != ITEM(4,7)
                    && CItem->m_Type != ITEM(4,15) )
                {
                    CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
                    CItem->SpecialType[CItem->SpecialCount++] = 80;
                    CItem->ReqStrenght += 5 * add;
                }
    
                if ( CItem->m_Type >= ITEM(5,0) && CItem->m_Type < ITEM(6,0) ) // Staff
                {
                    CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
                    if ( (CItem->m_Type < 2581 || CItem->m_Type > 2589) && CItem->m_Type != 2600 )
                        CItem->SpecialType[CItem->SpecialCount] = 81;
                    else
                        CItem->SpecialType[CItem->SpecialCount] = 82;
                    ++CItem->SpecialCount;
                    CItem->ReqStrenght += 5 * add;
                }
    
                if ( CItem->m_Type >= ITEM(6,0) && CItem->m_Type < ITEM(7,0) ) // Shield
                {
                    CItem->SpecialValue[CItem->SpecialCount] = 5 * add;
                    CItem->SpecialType[CItem->SpecialCount++] = 83;
                    CItem->ReqStrenght += 5 * add;
                }
    
                if ( CItem->m_Type >= ITEM(7,0) && CItem->m_Type < ITEM(12,0) ) // Sets
                {
                    CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
                    CItem->SpecialType[CItem->SpecialCount++] = 84;
                    CItem->ReqStrenght += 5 * add;
                }
    
                if ( (CItem->m_Type >= ITEM(13,8) && CItem->m_Type < ITEM(14,0))
                    && CItem->m_Type != ITEM(13,30) ) // Rings Pendant
                {
                    if ( CItem->m_Type == ITEM(13,24) )
                    {
                        CItem->SpecialValue[CItem->SpecialCount] = add;
                        CItem->SpecialType[CItem->SpecialCount++] = 204;
                    }
                    else if ( CItem->m_Type == ITEM(13,28) )
                    {
                        CItem->SpecialValue[CItem->SpecialCount] = add;
                        CItem->SpecialType[CItem->SpecialCount++] = 205;
                    }
                    else
                    {
                        CItem->SpecialValue[CItem->SpecialCount] = add;
                        CItem->SpecialType[CItem->SpecialCount++] = 86;
                    }
                }
    
                switch ( CItem->m_Type ) // Other
                {
                    case ITEM(12,0):
                        CItem->SpecialValue[CItem->SpecialCount] = add;
                        CItem->SpecialType[CItem->SpecialCount++] = 86;
                    break;
                    case ITEM(12,1):
                    case ITEM(12,41):
                        CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
                        CItem->SpecialType[CItem->SpecialCount++] = 81;
                    break;
                    case ITEM(12,2):
                        CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
                        CItem->SpecialType[CItem->SpecialCount++] = 80;
                    break;
                    case ITEM(12,3):
                        if ( (v21 >> 5) & 1 )
                        {
                            CItem->SpecialValue[CItem->SpecialCount] = add;
                            CItem->SpecialType[CItem->SpecialCount++] = 86;
                        }
                        else
                        {
                            CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
                            CItem->SpecialType[CItem->SpecialCount++] = 80;
                        }
                    break;
                    case ITEM(12,4):
                        if ( (v21 >> 5) & 1 )
                        {
                            CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
                            CItem->SpecialType[CItem->SpecialCount++] = 81;
                        }
                        else
                        {
                            CItem->SpecialValue[CItem->SpecialCount] = add;
                            CItem->SpecialType[CItem->SpecialCount++] = 86;
                        }
                    break;
                    case ITEM(12,5):
                        if ( (v21 >> 5) & 1 )
                        {
                            CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
                            CItem->SpecialType[CItem->SpecialCount++] = 80;
                        }
                        else
                        {
                            CItem->SpecialValue[CItem->SpecialCount] = add;
                            CItem->SpecialType[CItem->SpecialCount++] = 86;
                        }
                    break;
                    case ITEM(12,6):
                        if ( (v21 >> 5) & 1 )
                        {
                            CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
                            CItem->SpecialType[CItem->SpecialCount++] = 80;
                        }
                        else
                        {
                            CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
                            CItem->SpecialType[CItem->SpecialCount++] = 81;
                        }
                    break;
                    case ITEM(13,30): // DL Cape 1
                        CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
                        CItem->SpecialType[CItem->SpecialCount++] = 80;
                    break;
                    case ITEM(12,49): // RF Cape 1
                        if ( (v21 >> 5) & 1 )
                        {
                            CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
                            CItem->SpecialType[CItem->SpecialCount++] = 80;
                        }
                        else
                        {
                            CItem->SpecialValue[CItem->SpecialCount] = add;
                            CItem->SpecialType[CItem->SpecialCount++] = 86;
                        }
                    break;
                    case ITEM(12,42):
                        CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
                        if ( (v21 >> 5) & 1 )
                            CItem->SpecialType[CItem->SpecialCount] = 81;
                        else
                            CItem->SpecialType[CItem->SpecialCount] = 82;
                        ++CItem->SpecialCount;
                    break;
                    case ITEM(12,36):
                        if ( (v21 >> 4) & 1 )
                        {
                            CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
                            CItem->SpecialType[CItem->SpecialCount++] = 80;
                        }
                        else if ( (v21 >> 5) & 1 )
                        {
                            CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
                            CItem->SpecialType[CItem->SpecialCount++] = 84;
                        }
                        else
                        {
                            CItem->SpecialValue[CItem->SpecialCount] = add;
                            CItem->SpecialType[CItem->SpecialCount++] = 86;
                        }
                    break;
                    case ITEM(12,37):
                        if ( (v21 >> 4) & 1 )
                        {
                            CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
                            CItem->SpecialType[CItem->SpecialCount++] = 81;
                        }
                        else if ( (v21 >> 5) & 1 )
                        {
                            CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
                            CItem->SpecialType[CItem->SpecialCount++] = 84;
                        }
                        else
                        {
                            CItem->SpecialValue[CItem->SpecialCount] = add;
                            CItem->SpecialType[CItem->SpecialCount++] = 86;
                        }
                    break;
                    case ITEM(12,38):
                        if ( (v21 >> 4) & 1 )
                        {
                            CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
                            CItem->SpecialType[CItem->SpecialCount++] = 80;
                        }
                        else if ( (v21 >> 5) & 1 )
                        {
                            CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
                            CItem->SpecialType[CItem->SpecialCount++] = 84;
                        }
                        else
                        {
                            CItem->SpecialValue[CItem->SpecialCount] = add;
                            CItem->SpecialType[CItem->SpecialCount++] = 86;
                        }
                    break;
                    case ITEM(12,39):
                        if ( (v21 >> 4) & 1 )
                        {
                            CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
                            CItem->SpecialType[CItem->SpecialCount++] = 80;
                        }
                        else if ( (v21 >> 5) & 1 )
                        {
                            CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
                            CItem->SpecialType[CItem->SpecialCount++] = 81;
                        }
                        else
                        {
                            CItem->SpecialValue[CItem->SpecialCount] = add;
                            CItem->SpecialType[CItem->SpecialCount++] = 86;
                        }
                    break;
                    case ITEM(12,40): // DL Cape 2
                    case ITEM(12,50): // RF Cape 2
                        if ( (v21 >> 4) & 1 )
                        {
                            CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
                            CItem->SpecialType[CItem->SpecialCount++] = 80;
                        }
                        else if ( (v21 >> 5) & 1 )
                        {
                            CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
                            CItem->SpecialType[CItem->SpecialCount++] = 84;
                        }
                        else
                        {
                            CItem->SpecialValue[CItem->SpecialCount] = add;
                            CItem->SpecialType[CItem->SpecialCount++] = 86;
                        }
                    case ITEM(12,43): // SUM Wings 3
                        if ( (v21 >> 4) & 1 )
                        {
                            CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
                            CItem->SpecialType[CItem->SpecialCount++] = 81;
                        }
                        else if ( (v21 >> 5) & 1 )
                        {
                            CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
                            CItem->SpecialType[CItem->SpecialCount++] = 82;
                        }
                        else
                        {
                            CItem->SpecialValue[CItem->SpecialCount] = add;
                            CItem->SpecialType[CItem->SpecialCount++] = 86;
                        }
                    break;
                }
            }
        }
        // ----
    
        if ( CItem->m_Type == 6660 )
        {
            v4 = sub_4F9930(*(int*)CItem);
            sub_4F9B50(*(int*)CItem, *v4);
        }
    
        // SHIELDS/SETS/RINGS EXCELLENT
        if ( (CItem->m_Type >= ITEM(6,0) && CItem->m_Type < ITEM(12,0))
            || (CItem->m_Type >= ITEM(13,8) && CItem->m_Type <= ITEM(13,9))
            || (CItem->m_Type >= ITEM(13,21) && CItem->m_Type <= ITEM(13,24)) )
        {
            if ( (a3 >> 5) & 1 )
                CItem->SpecialType[CItem->SpecialCount++] = 87;
            if ( (a3 >> 4) & 1 )
                CItem->SpecialType[CItem->SpecialCount++] = 88;
            if ( (a3 >> 3) & 1 )
                CItem->SpecialType[CItem->SpecialCount++] = 89;
            if ( (a3 >> 2) & 1 )
                CItem->SpecialType[CItem->SpecialCount++] = 90;
            if ( (a3 >> 1) & 1 )
                CItem->SpecialType[CItem->SpecialCount++] = 91;
            if ( a3 & 1 )
                CItem->SpecialType[CItem->SpecialCount++] = 92;
        }
    
        // WEAPON/PENDANTS EXCELLENT
        if ( CItem->m_Type >= 0 && CItem->m_Type < ITEM(6,0)
            || CItem->m_Type >= ITEM(13,12) && CItem->m_Type <= ITEM(13,13)
            || CItem->m_Type >= ITEM(13,25) && CItem->m_Type <= ITEM(13,28) )
        {
            if ( (a3 >> 5) & 1 )
                CItem->SpecialType[CItem->SpecialCount++] = 93;
    
            if ( (CItem->m_Type >= ITEM(5,0) && CItem->m_Type < ITEM(6,0))
                || CItem->m_Type == 6668
                || CItem->m_Type == 6681
                || CItem->m_Type == 6683 )
            {
                if ( (a3 >> 4) & 1 )
                {
                    CItem->SpecialValue[CItem->SpecialCount] = *(WORD *)(0x8128AC8 + 14) / 20;
                    CItem->SpecialType[CItem->SpecialCount++] = 96;
                }
                if ( (a3 >> 3) & 1 )
                {
                    CItem->SpecialValue[CItem->SpecialCount] = 2;
                    CItem->SpecialType[CItem->SpecialCount++] = 97;
                }
            }
            else
            {
                if ( (a3 >> 4) & 1 )
                {
                    CItem->SpecialValue[CItem->SpecialCount] = *(WORD *)(0x8128AC8 + 14) / 20;
                    CItem->SpecialType[CItem->SpecialCount++] = 94;
                }
                if ( (a3 >> 3) & 1 )
                {
                    CItem->SpecialValue[CItem->SpecialCount] = 2;
                    CItem->SpecialType[CItem->SpecialCount++] = 95;
                }
            }
    
            if ( (a3 >> 2) & 1 )
            {
                CItem->SpecialValue[CItem->SpecialCount] = 7;
                CItem->SpecialType[CItem->SpecialCount++] = 98;
            }
    
            if ( (a3 >> 1) & 1 )
                CItem->SpecialType[CItem->SpecialCount++] = 99;
            if ( a3 & 1 )
                CItem->SpecialType[CItem->SpecialCount++] = 100;
        }
    
        if ( CItem->m_Type == ITEM(13,20) ) // Wizard ring
        {
            if ( v24 )
            {
                if ( v24 == 3 )
                {
                    CItem->SpecialValue[CItem->SpecialCount] = 10;
                    CItem->SpecialType[CItem->SpecialCount++] = 97;
                    CItem->SpecialValue[CItem->SpecialCount] = 10;
                    CItem->SpecialType[CItem->SpecialCount++] = 95;
                    CItem->SpecialValue[CItem->SpecialCount] = 10;
                    CItem->SpecialType[CItem->SpecialCount++] = 98;
                }
            }
            else
            {
                CItem->SpecialValue[CItem->SpecialCount] = 10;
                CItem->SpecialType[CItem->SpecialCount++] = 97;
                CItem->SpecialValue[CItem->SpecialCount] = 10;
                CItem->SpecialType[CItem->SpecialCount++] = 95;
                CItem->SpecialValue[CItem->SpecialCount] = 10;
                CItem->SpecialType[CItem->SpecialCount++] = 98;
            }
        }
    
        if ( CItem->m_Type == ITEM(13,107) ) // Lethal Wizard's Ring
        {
            CItem->SpecialValue[CItem->SpecialCount] = 15;
            CItem->SpecialType[CItem->SpecialCount++] = 97;
            CItem->SpecialValue[CItem->SpecialCount] = 15;
            CItem->SpecialType[CItem->SpecialCount++] = 95;
            CItem->SpecialValue[CItem->SpecialCount] = 10;
            CItem->SpecialType[CItem->SpecialCount++] = 98;
        }
    
        char result = *(BYTE *)(0x8128AC0 + 84 * CItem->m_Type + 34);
        CItem->Unknown6 = result;
        return result;
    }
    Local calls from 0058B77E, 005C7833, 005C7D71, 005C7F1B, 005C80BE, 007E216A

    Can you upload Full Source 1.04D Main including this change you made?

    thanks :)

  6. #6
    ^_^ ashlay is offline
    MemberRank
    Jun 2010 Join Date
    BrazilLocation
    888Posts

    Re: Item Convert from main.exe (Source)

    @8bitcore
    "identifier "sub_4F9930" is undefined"
    you forgot to post something or is my mistake?

  7. #7
    Enthusiast 8bitcore is offline
    MemberRank
    Oct 2009 Join Date
    UkraineLocation
    33Posts

    Re: Item Convert from main.exe (Source)

    @ashlay rly, you're right. you can find it in this post http://forum.ragezone.com/f508/makep...ml#post8092545

  8. #8
    ^_^ ashlay is offline
    MemberRank
    Jun 2010 Join Date
    BrazilLocation
    888Posts

    Re: Item Convert from main.exe (Source)

    @8bitcore
    i was working on main 1.04.04 using your itemconvent and makepreview source for add new wings.

    maybe you can give a little help on hide exel text insert jewels etc.



Advertisement