comparison Items.cpp @ 201:30aa44013f7a

On Items
author Nomad
date Sun, 17 Feb 2013 00:16:48 +0200
parents 821fd955c379
children 1bd823f52e3a
comparison
equal deleted inserted replaced
200:1527f66fd81b 201:30aa44013f7a
1027 { 1027 {
1028 if ( v101 ) 1028 if ( v101 )
1029 { 1029 {
1030 switch ( v101 ) 1030 switch ( v101 )
1031 { 1031 {
1032 case 2: 1032 case 2: pItems[v35].field_2C[0] = atoi(v36); break;
1033 pItems[v35].field_2C = atoi(v36); 1033 case 3: pItems[v35].field_2C[1] = atoi(v36); break;
1034 break; 1034 case 4: pItems[v35].field_2C[2] = atoi(v36); break;
1035 case 3: 1035 case 5: pItems[v35].field_2C[3] = atoi(v36); break;
1036 pItems[v35].field_2D = atoi(v36);
1037 break;
1038 case 4:
1039 pItems[v35].field_2E = atoi(v36);
1040 break;
1041 case 5:
1042 pItems[v35].field_2F = atoi(v36);
1043 break;
1044 case 6: 1036 case 6:
1045 *((unsigned char *)&pItems[0].uItemID + 16 * (3 * v35 + 3)) = atoi(v36); 1037 *((unsigned char *)&pItems[0].uItemID + 16 * (3 * v35 + 3)) = atoi(v36);
1046 break; 1038 break;
1047 case 7: 1039 case 7:
1048 BYTE1(pItems[v35 + 1].uItemID) = atoi(v36); 1040 BYTE1(pItems[v35 + 1].uItemID) = atoi(v36);
1071 pAllocator->FreeChunk(pRndItemsTXT_Raw); 1063 pAllocator->FreeChunk(pRndItemsTXT_Raw);
1072 pRndItemsTXT_Raw = 0; 1064 pRndItemsTXT_Raw = 0;
1073 } 1065 }
1074 v39 = (char *)field_11684; 1066 v39 = (char *)field_11684;
1075 memset(field_11684, 0, 0x18u); 1067 memset(field_11684, 0, 0x18u);
1076 v40 = &pItems[0].field_2C; 1068 v40 = pItems[0].field_2C;
1077 v77 = 6; 1069 v77 = 6;
1078 do 1070 do
1079 { 1071 {
1080 v41 = v40; 1072 v41 = v40;
1081 Strh = 800; 1073 Strh = 800;
1785 return v4; 1777 return v4;
1786 } 1778 }
1787 1779
1788 1780
1789 //----- (00456620) -------------------------------------------------------- 1781 //----- (00456620) --------------------------------------------------------
1790 void ItemsTable::GenerateItem(int a2, int a3, ItemGen *pItem) 1782 void ItemsTable::GenerateItem(int a2, int a3, ItemGen *out_item)
1791 { 1783 {
1792 ItemGen *v4; // esi@1 1784 //ItemGen *v4; // esi@1
1793 ItemsTable *v5; // edi@1 1785 //ItemsTable *v5; // edi@1
1794 int v6; // ebx@3 1786 int v6; // ebx@3
1795 int *v7; // ecx@33 1787 int *v7; // ecx@33
1796 int v8; // eax@34 1788 //int v8; // eax@34
1797 int v9; // eax@39 1789 //int v9; // eax@39
1798 int v10; // ebx@43 1790 int v10; // ebx@43
1799 int v11; // ecx@47 1791 int v11; // ecx@47
1800 unsigned int *v12; // edx@48 1792 unsigned int *v12; // edx@48
1801 unsigned int v13; // eax@49 1793 unsigned int v13; // eax@49
1802 signed int v14; // ebx@52 1794 signed int v14; // ebx@52
1834 int v46; // edx@120 1826 int v46; // edx@120
1835 int *j; // eax@121 1827 int *j; // eax@121
1836 unsigned int v48; // ecx@123 1828 unsigned int v48; // ecx@123
1837 int v49; // eax@123 1829 int v49; // eax@123
1838 int v50; // eax@123 1830 int v50; // eax@123
1839 unsigned char Dst[0xC80]; // [sp+Ch] [bp-C88h]@33 1831 int Dst[800]; // [sp+Ch] [bp-C88h]@33
1840 int v52; // [sp+C8Ch] [bp-8h]@33 1832 int v52; // [sp+C8Ch] [bp-8h]@33
1841 int v53; // [sp+C90h] [bp-4h]@1 1833 //int v53; // [sp+C90h] [bp-4h]@1
1842 int v54; // [sp+C9Ch] [bp+8h]@3 1834 int v54; // [sp+C9Ch] [bp+8h]@3
1843 int v55; // [sp+CA0h] [bp+Ch]@34 1835 //int v55; // [sp+CA0h] [bp+Ch]@34
1844 signed int v56; // [sp+CA0h] [bp+Ch]@55 1836 signed int v56; // [sp+CA0h] [bp+Ch]@55
1845 int v57; // [sp+CA0h] [bp+Ch]@62 1837 int v57; // [sp+CA0h] [bp+Ch]@62
1846 int *v58; // [sp+CA0h] [bp+Ch]@102 1838 int *v58; // [sp+CA0h] [bp+Ch]@102
1847 int v59; // [sp+CA0h] [bp+Ch]@123 1839 int v59; // [sp+CA0h] [bp+Ch]@123
1848 signed int a2a; // [sp+CA4h] [bp+10h]@33 1840 //signed int a2a; // [sp+CA4h] [bp+10h]@33
1849 int a2b; // [sp+CA4h] [bp+10h]@101 1841 int a2b; // [sp+CA4h] [bp+10h]@101
1850 int a2c; // [sp+CA4h] [bp+10h]@120 1842 int a2c; // [sp+CA4h] [bp+10h]@120
1851 1843
1852 v53 = -1; 1844 //v53 = -1;
1853 v4 = pItem; 1845 //v4 = pItem;
1854 v5 = this; 1846 //v5 = this;
1855 if ( !pItem ) 1847 if ( !out_item )
1856 v4 = (ItemGen *)pAllocator->AllocNamedChunk(pItem, 0x24u, "newItemGen"); 1848 out_item = (ItemGen *)pAllocator->AllocNamedChunk(out_item, sizeof(*out_item), "newItemGen");
1857 memset(v4, 0, 0x24u); 1849 memset(out_item, 0, sizeof(*out_item));
1858 v6 = a2 - 1; 1850 v6 = a2 - 1;
1859 v54 = a2 - 1; 1851 v54 = a2 - 1;
1860 if ( a3 ) 1852 if ( a3 )
1861 { 1853 {
1862 switch ( a3 ) 1854 ITEM_EQUIP_TYPE requested_equip;
1863 { 1855 PLAYER_SKILL_TYPE requested_skill = PLAYER_SKILL_INVALID;
1864 case 20: 1856 switch (a3)
1865 a3 = EQUIP_ONE_OR_TWO_HANDS; 1857 {
1858 case 20: requested_equip = EQUIP_ONE_OR_TWO_HANDS; break;
1859 case 21: requested_equip = EQUIP_ARMOUR; break;
1860 case 22: requested_skill = (PLAYER_SKILL_TYPE)38; __debugbreak();/*check this skill*/ break;
1861 case 23: requested_skill = PLAYER_SKILL_SWORD; break;
1862 case 24: requested_skill = PLAYER_SKILL_DAGGER; break;
1863 case 25: requested_skill = PLAYER_SKILL_AXE; break;
1864 case 26: requested_skill = PLAYER_SKILL_SPEAR; break;
1865 case 27: requested_skill = PLAYER_SKILL_BOW; break;
1866 case 28: requested_skill = PLAYER_SKILL_MACE; break;
1867 case 29: requested_skill = (PLAYER_SKILL_TYPE)37; __debugbreak();/*check this skill*/break;
1868 case 30: requested_skill = PLAYER_SKILL_STAFF; break;
1869 case 31: requested_skill = PLAYER_SKILL_LEATHER; break;
1870 case 32: requested_skill = PLAYER_SKILL_CHAIN; break;
1871 case 33: requested_skill = PLAYER_SKILL_PLATE; break;
1872 case 34: requested_equip = EQUIP_SHIELD; break;
1873 case 35: requested_equip = EQUIP_HELMET; break;
1874 case 36: requested_equip = EQUIP_BELT; break;
1875 case 37: requested_equip = EQUIP_CLOAK; break;
1876 case 38: requested_equip = EQUIP_GAUNTLETS; break;
1877 case 39: requested_equip = EQUIP_BOOTS; break;
1878 case 40: requested_equip = EQUIP_RING; break;
1879 case 41: requested_equip = EQUIP_AMULET; break;
1880 case 42: requested_equip = EQUIP_C; break;
1881 case 43: requested_equip = EQUIP_F; break;
1882 case 44: requested_equip = EQUIP_POTION; break;
1883 case 45: requested_equip = EQUIP_REAGENT; break;
1884 case 46: requested_equip = EQUIP_GEM; break;
1885 default:
1886 __debugbreak(); // check this condition
1887 requested_equip = (ITEM_EQUIP_TYPE)(a3 - 1);
1866 break; 1888 break;
1867 case 21: 1889 }
1868 a3 = 3; 1890
1869 break; 1891 memset(Dst, 0, sizeof(Dst));
1870 case 22: 1892
1871 v53 = 38;
1872 break;
1873 case 23:
1874 v53 = 1;
1875 break;
1876 case 24:
1877 v53 = 2;
1878 break;
1879 case 25:
1880 v53 = 3;
1881 break;
1882 case 26:
1883 v53 = 4;
1884 break;
1885 case 27:
1886 v53 = 5;
1887 break;
1888 case 28:
1889 v53 = 6;
1890 break;
1891 case 30:
1892 v53 = 0;
1893 break;
1894 case 31:
1895 v53 = 9;
1896 break;
1897 case 32:
1898 v53 = 10;
1899 break;
1900 case 33:
1901 v53 = 0xBu;
1902 break;
1903 case 34:
1904 a3 = 4;
1905 break;
1906 case 35:
1907 a3 = 5;
1908 break;
1909 case 36:
1910 a3 = 6;
1911 break;
1912 case 37:
1913 a3 = 7;
1914 break;
1915 case 38:
1916 a3 = 8;
1917 break;
1918 case 39:
1919 a3 = EQUIP_BOOTS;
1920 break;
1921 case 40:
1922 a3 = EQUIP_RING;
1923 break;
1924 case 41:
1925 a3 = 0xBu;
1926 break;
1927 case 42:
1928 a3 = EQUIP_C;
1929 break;
1930 case 43:
1931 a3 = EQUIP_F;
1932 break;
1933 case 44:
1934 a3 = EQUIP_POTION;
1935 break;
1936 case 45:
1937 a3 = EQUIP_REAGENT;
1938 break;
1939 case 46:
1940 a3 = EQUIP_GEM;
1941 break;
1942 case 29:
1943 v53 = 37;
1944 break;
1945 default:
1946 --a3;
1947 break;
1948 }
1949 memset(&Dst, 0, 0xC80u);
1950 v52 = 0; 1893 v52 = 0;
1951 v7 = (int *)&Dst; 1894 v7 = Dst;
1952 a2a = 1; 1895
1953 if ( v53 == -1 ) 1896 if (requested_skill == PLAYER_SKILL_INVALID)
1954 { 1897 {
1955 v53 = (int)&v5->pItems[1].uEquipType; 1898 for (uint i = 1; i < 500; ++i)
1956 v9 = (int)(&v5->pItems[1].field_2C + v6); 1899 {
1957 do 1900 if (pItems[i].uEquipType == requested_equip)
1958 {
1959 if ( *(unsigned char *)v53 == a3 )
1960 { 1901 {
1961 *v7 = a2a; 1902 *v7++ = i;
1962 ++v7; 1903 v52 += pItems[i].field_2C[v6];
1963 v52 += *(unsigned char *)v9;
1964 } 1904 }
1965 ++a2a; 1905 }
1966 v53 += 48;
1967 v9 += 48;
1968 }
1969 while ( a2a < 500 );
1970 } 1906 }
1971 else 1907 else
1972 { 1908 {
1973 v55 = (int)&v5->pItems[1].uSkillType; 1909 for (uint i = 1; i < 500; ++i)
1974 v8 = (int)(&v5->pItems[1].field_2C + v6); 1910 {
1975 do 1911 if (pItems[i].uSkillType == requested_skill)
1976 {
1977 if ( *(unsigned char *)v55 == v53 )
1978 { 1912 {
1979 *v7 = a2a; 1913 *v7++ = i;
1980 ++v7; 1914 v52 += pItems[i].field_2C[v6];
1981 v52 += *(unsigned char *)v8;
1982 } 1915 }
1983 ++a2a; 1916 }
1984 v55 += 48; 1917 }
1985 v8 += 48; 1918
1986 }
1987 while ( a2a < 500 );
1988 }
1989 v10 = 0; 1919 v10 = 0;
1990 if ( v52 ) 1920 if ( v52 )
1991 v10 = rand() % v52; 1921 v10 = rand() % v52;
1992 v4->uItemID = *(uint *)Dst; 1922 out_item->uItemID = *Dst;
1993 if ( !Dst ) 1923 if ( !*Dst )
1994 v4->uItemID = 1; 1924 out_item->uItemID = 1;
1995 v11 = *(&v5->pItems[v4->uItemID].field_2C + v54); 1925 v11 = pItems[out_item->uItemID].field_2C[v54];
1996 if ( v11 < v10 ) 1926 if ( v11 < v10 )
1997 { 1927 {
1998 v12 = (uint *)Dst; 1928 v12 = (uint *)Dst;
1999 do 1929 do
2000 { 1930 {
2001 ++v12; 1931 ++v12;
2002 v13 = *v12; 1932 v13 = *v12;
2003 v4->uItemID = *v12; 1933 out_item->uItemID = *v12;
2004 v11 += *(&v5->pItems[v13].field_2C + v54); 1934 v11 += pItems[v13].field_2C[v54];
2005 } 1935 }
2006 while ( v11 < v10 ); 1936 while ( v11 < v10 );
2007 } 1937 }
2008 if ( v5->pItems[v4->uItemID].uEquipType == EQUIP_POTION && v4->uItemID != ITEM_POTION_BOTTLE ) 1938 if (pItems[out_item->uItemID].uEquipType == EQUIP_POTION && out_item->uItemID != ITEM_POTION_BOTTLE)
2009 { 1939 {
2010 v4->_bonus_type = 0; 1940 out_item->_bonus_type = 0;
2011 v14 = 2; 1941 v14 = 2;
2012 do 1942 do
2013 { 1943 {
2014 v4->_bonus_type += rand() % 4 + 1; 1944 out_item->_bonus_type += rand() % 4 + 1;
2015 v15 = v4->_bonus_type; 1945 v15 = out_item->_bonus_type;
2016 --v14; 1946 --v14;
2017 } 1947 }
2018 while ( v14 ); 1948 while ( v14 );
2019 LABEL_72: 1949 LABEL_72:
2020 v4->_bonus_type = v15 * (v54 + 1); 1950 out_item->_bonus_type = v15 * (v54 + 1);
2021 goto LABEL_73; 1951 goto LABEL_73;
2022 } 1952 }
2023 } 1953 }
2024 else 1954 else
2025 { 1955 {
2030 while ( v16 < 29 ); 1960 while ( v16 < 29 );
2031 v17 = rand() % 29; 1961 v17 = rand() % 29;
2032 if ( v54 == 5 && rand() % 100 < 5 && !pParty->field_7BA[v17] && v56 < 13 ) 1962 if ( v54 == 5 && rand() % 100 < 5 && !pParty->field_7BA[v17] && v56 < 13 )
2033 { 1963 {
2034 pParty->field_7BA[v17] = 1; 1964 pParty->field_7BA[v17] = 1;
2035 v4->uAttributes = 0; 1965 out_item->uAttributes = 0;
2036 v4->uItemID = v17 + 500; 1966 out_item->uItemID = v17 + 500;
2037 v5->SetSpecialBonus(v4); 1967 SetSpecialBonus(out_item);
2038 return; 1968 return;
2039 } 1969 }
2040 v57 = 0; 1970 v57 = 0;
2041 v18 = rand() % v5->field_11684[v54]; 1971 v18 = rand() % field_11684[v54];
2042 v4->uItemID = 0; 1972 out_item->uItemID = 0;
2043 if ( v18 > 0 ) 1973 if ( v18 > 0 )
2044 { 1974 {
2045 do 1975 do
2046 v57 += *(&v5->pItems[v4->uItemID++ + 1].field_2C + v54); 1976 v57 += pItems[out_item->uItemID++ + 1].field_2C[v54];
2047 while ( v57 < v18 ); 1977 while ( v57 < v18 );
2048 } 1978 }
2049 if ( !v18 ) 1979 if ( !v18 )
2050 v4->uItemID = 1; 1980 out_item->uItemID = 1;
2051 if ( !v4->uItemID ) 1981 if ( !out_item->uItemID )
2052 v4->uItemID = 1; 1982 out_item->uItemID = 1;
2053 if ( v5->pItems[v4->uItemID].uEquipType == EQUIP_POTION && v4->uItemID != ITEM_POTION_BOTTLE ) 1983 if ( pItems[out_item->uItemID].uEquipType == EQUIP_POTION && out_item->uItemID != ITEM_POTION_BOTTLE )
2054 { 1984 {
2055 v4->_bonus_type = 0; 1985 out_item->_bonus_type = 0;
2056 v19 = 2; 1986 v19 = 2;
2057 do 1987 do
2058 { 1988 {
2059 v4->_bonus_type += rand() % 4 + 1; 1989 out_item->_bonus_type += rand() % 4 + 1;
2060 v15 = v4->_bonus_type; 1990 v15 = out_item->_bonus_type;
2061 --v19; 1991 --v19;
2062 } 1992 }
2063 while ( v19 ); 1993 while ( v19 );
2064 goto LABEL_72; 1994 goto LABEL_72;
2065 } 1995 }
2066 } 1996 }
2067 LABEL_73: 1997 LABEL_73:
2068 if ( v4->uItemID == ITEM_SPELLBOOK_LIGHT_DIVINE_INTERVENTION 1998 if (out_item->uItemID == ITEM_SPELLBOOK_LIGHT_DIVINE_INTERVENTION
2069 && !(unsigned __int16)_449B57_test_bit(pParty->_award_bits, 239) ) 1999 && !(unsigned __int16)_449B57_test_bit(pParty->_award_bits, 239) )
2070 v4->uItemID = ITEM_SPELLBOOK_LIGHT_SUN_BURST; 2000 out_item->uItemID = ITEM_SPELLBOOK_LIGHT_SUN_BURST;
2071 if ( BYTE2(pItemsTable->pItems[v4->uItemID + 1].uItemID) ) 2001 if ( BYTE2(pItems[out_item->uItemID + 1].uItemID) )
2072 v4->uAttributes = 0; 2002 out_item->uAttributes = 0;
2073 else 2003 else
2074 v4->uAttributes = 1; 2004 out_item->uAttributes = 1;
2075 if ( v5->pItems[v4->uItemID].uEquipType != EQUIP_POTION ) 2005 if (pItems[out_item->uItemID].uEquipType != EQUIP_POTION )
2076 { 2006 {
2077 v4->uAdditionalValue = 0; 2007 out_item->uAdditionalValue = 0;
2078 v4->_bonus_type = 0; 2008 out_item->_bonus_type = 0;
2079 } 2009 }
2080 v20 = v5->pItems[v4->uItemID].uEquipType; 2010 v20 = pItems[out_item->uItemID].uEquipType;
2081 if ( v20 <= EQUIP_BOW ) 2011 if ( v20 <= EQUIP_BOW )
2082 { 2012 {
2083 v37 = (int)&v5->field_1169C[4 * v54 + 48]; 2013 v37 = (int)&field_1169C[4 * v54 + 48];
2084 if ( !*(unsigned int *)v37 ) 2014 if ( !*(unsigned int *)v37 )
2085 return; 2015 return;
2086 v38 = rand() % 100; 2016 v38 = rand() % 100;
2087 v36 = __OFSUB__(v38, *(unsigned int *)v37); 2017 v36 = __OFSUB__(v38, *(unsigned int *)v37);
2088 v35 = v38 - *(unsigned int *)v37 < 0; 2018 v35 = v38 - *(unsigned int *)v37 < 0;
2091 { 2021 {
2092 if ( v20 > EQUIP_AMULET ) 2022 if ( v20 > EQUIP_AMULET )
2093 { 2023 {
2094 if ( v20 == EQUIP_C ) 2024 if ( v20 == EQUIP_C )
2095 { 2025 {
2096 v21 = rand() % 6 + pItemsTable->pItems[v4->uItemID].uDamageMod + 1; 2026 v21 = rand() % 6 + pItems[out_item->uItemID].uDamageMod + 1;
2097 v4->uNumCharges = v21; 2027 out_item->uNumCharges = v21;
2098 v4->uMaxCharges = v21; 2028 out_item->uMaxCharges = v21;
2099 } 2029 }
2100 return; 2030 return;
2101 } 2031 }
2102 v22 = (int)&v5->field_1169C[4 * v54]; 2032 v22 = (int)&field_1169C[4 * v54];
2103 if ( !*(unsigned int *)v22 ) 2033 if ( !*(unsigned int *)v22 )
2104 return; 2034 return;
2105 v23 = rand(); 2035 v23 = rand();
2106 v24 = *(unsigned int *)v22; 2036 v24 = *(unsigned int *)v22;
2107 v25 = v23 % 100; 2037 v25 = v23 % 100;
2108 if ( v23 % 100 < v24 ) 2038 if ( v23 % 100 < v24 )
2109 goto LABEL_127; 2039 goto LABEL_127;
2110 if ( !*(unsigned int *)&v5->field_1169C[4 * v54 + 24] ) 2040 if ( !*(unsigned int *)&field_1169C[4 * v54 + 24] )
2111 return; 2041 return;
2112 if ( v25 < v24 ) 2042 if ( v25 < v24 )
2113 { 2043 {
2114 LABEL_127: 2044 LABEL_127:
2115 v26 = rand() % v5->field_116D8[v5->pItems[v4->uItemID].uEquipType]; 2045 v26 = rand() % field_116D8[pItems[out_item->uItemID].uEquipType];
2116 v27 = v4->uItemID; 2046 v27 = out_item->uItemID;
2117 v4->_bonus_type = 0; 2047 out_item->_bonus_type = 0;
2118 for ( i = v5->pEnchantments[0].field_8[v5->pItems[v27].uEquipType + 1]; 2048 for ( i = pEnchantments[0].field_8[pItems[v27].uEquipType + 1];
2119 i < v26; 2049 i < v26;
2120 i += v5->pEnchantments[v4->_bonus_type].field_8[v5->pItems[v29].uEquipType + 1] ) 2050 i += pEnchantments[out_item->_bonus_type].field_8[pItems[v29].uEquipType + 1] )
2121 { 2051 {
2122 v29 = v4->uItemID; 2052 v29 = out_item->uItemID;
2123 ++v4->_bonus_type; 2053 ++out_item->_bonus_type;
2124 } 2054 }
2125 ++v4->_bonus_type; 2055 ++out_item->_bonus_type;
2126 v30 = v5->field_116D8[2 * v54 + 12]; 2056 v30 = field_116D8[2 * v54 + 12];
2127 v31 = rand(); 2057 v31 = rand();
2128 v32 = v4->_bonus_type - 1; 2058 v32 = out_item->_bonus_type - 1;
2129 v33 = v31 % (v5->field_116D8[2 * v54 + 13] - v30 + 1) + v30; 2059 v33 = v31 % (field_116D8[2 * v54 + 13] - v30 + 1) + v30;
2130 v4->_bonus_strength = v33; 2060 out_item->_bonus_strength = v33;
2131 if ( v32 == 21 || v32 == 22 || v32 == 23 ) 2061 if ( v32 == 21 || v32 == 22 || v32 == 23 )
2132 v4->_bonus_strength = v33 >> 1; 2062 out_item->_bonus_strength = v33 >> 1;
2133 if ( v4->_bonus_strength <= 0 ) 2063 if ( out_item->_bonus_strength <= 0 )
2134 v4->_bonus_strength = 1; 2064 out_item->_bonus_strength = 1;
2135 return; 2065 return;
2136 } 2066 }
2137 v34 = v24 + *(unsigned int *)&v5->field_1169C[4 * v54 + 24]; 2067 v34 = v24 + *(unsigned int *)&field_1169C[4 * v54 + 24];
2138 v36 = __OFSUB__(v25, v34); 2068 v36 = __OFSUB__(v25, v34);
2139 v35 = v25 - v34 < 0; 2069 v35 = v25 - v34 < 0;
2140 } 2070 }
2141 if ( !(v35 ^ v36) ) 2071 if ( !(v35 ^ v36) )
2142 return; 2072 return;
2143 memset(&Dst, 0, 0xC80u); 2073 memset(&Dst, 0, 0xC80u);
2144 v39 = 0; 2074 v39 = 0;
2145 a2b = 0; 2075 a2b = 0;
2146 if ( v5->field_11798 > 0 ) 2076 if ( field_11798 > 0 )
2147 { 2077 {
2148 v52 = -16 - (uint)v5; 2078 v52 = -16 - (uint)this;
2149 v58 = (int *)&Dst; 2079 v58 = (int *)&Dst;
2150 v40 = (int)&v5->pSpecialEnchantments[1]; 2080 v40 = (int)&pSpecialEnchantments[1];
2151 do 2081 do
2152 { 2082 {
2153 switch ( v54 ) 2083 switch ( v54 )
2154 { 2084 {
2155 case 2: 2085 case 2:
2160 case 3: 2090 case 3:
2161 v43 = *(unsigned char *)v40; 2091 v43 = *(unsigned char *)v40;
2162 if ( !*(unsigned char *)v40 || v43 == 1 ) 2092 if ( !*(unsigned char *)v40 || v43 == 1 )
2163 { 2093 {
2164 LABEL_117: 2094 LABEL_117:
2165 v39 += *((unsigned char *)&v5->pItems[0].uItemID + v40 + v52 + v5->pItems[v4->uItemID].uEquipType); 2095 v39 += *((unsigned char *)&pItems[0].uItemID + v40 + v52 + pItems[out_item->uItemID].uEquipType);
2166 if ( *((unsigned char *)&v5->pItems[0].uItemID + v40 + v52 + v5->pItems[v4->uItemID].uEquipType) ) 2096 if ( *((unsigned char *)&pItems[0].uItemID + v40 + v52 + pItems[out_item->uItemID].uEquipType) )
2167 { 2097 {
2168 v44 = v58; 2098 v44 = v58;
2169 ++v58; 2099 ++v58;
2170 *v44 = a2b; 2100 *v44 = a2b;
2171 } 2101 }
2189 goto LABEL_117; 2119 goto LABEL_117;
2190 LABEL_119: 2120 LABEL_119:
2191 ++a2b; 2121 ++a2b;
2192 v40 += 28; 2122 v40 += 28;
2193 } 2123 }
2194 while ( a2b < v5->field_11798 ); 2124 while ( a2b < field_11798 );
2195 } 2125 }
2196 v45 = rand(); 2126 v45 = rand();
2197 v4->uAdditionalValue = *(uint *)Dst; 2127 out_item->uAdditionalValue = *Dst;
2198 v46 = v45 % v39 + 1; 2128 v46 = v45 % v39 + 1;
2199 a2c = *((unsigned char *)&v5->pItems[0].uItemID + 28 * (*(uint *)Dst + 1389) + v5->pItems[v4->uItemID].uEquipType); 2129 a2c = *((unsigned char *)&pItems[0].uItemID + 28 * (*(uint *)Dst + 1389) + pItems[out_item->uItemID].uEquipType);
2200 if ( a2c < v46 ) 2130 if ( a2c < v46 )
2201 { 2131 {
2202 for ( j = (int *)&Dst; ; j = (int *)v59 ) 2132 for ( j = (int *)&Dst; ; j = (int *)v59 )
2203 { 2133 {
2204 v48 = v4->uItemID; 2134 v48 = out_item->uItemID;
2205 v49 = (int)(j + 1); 2135 v49 = (int)(j + 1);
2206 v59 = v49; 2136 v59 = v49;
2207 v50 = *(unsigned int *)v49; 2137 v50 = *(unsigned int *)v49;
2208 v4->uAdditionalValue = v50; 2138 out_item->uAdditionalValue = v50;
2209 a2c += *((unsigned char *)&v5->pItems[0].uItemID + 28 * (v50 + 1389) + v5->pItems[v48].uEquipType); 2139 a2c += *((unsigned char *)&pItems[0].uItemID + 28 * (v50 + 1389) + pItems[v48].uEquipType);
2210 if ( a2c >= v46 ) 2140 if ( a2c >= v46 )
2211 break; 2141 break;
2212 } 2142 }
2213 } 2143 }
2214 ++v4->uAdditionalValue; 2144 ++out_item->uAdditionalValue;
2215 } 2145 }
2216 2146
2217 //----- (004505CC) -------------------------------------------------------- 2147 //----- (004505CC) --------------------------------------------------------
2218 bool ItemGen::GenerateArtifact() 2148 bool ItemGen::GenerateArtifact()
2219 { 2149 {