Mercurial > mm7
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 { |