comparison Items.cpp @ 1604:4b79ff62df3a

Moved enchantment attribute bonus list to items.cpp/h, created static function that create the enchantments + helper functions to get the enchantment strength, moved the whole logic of Player::GetItemsBonus to a case
author Grumpy7
date Sat, 14 Sep 2013 06:04:18 +0200
parents c58916c53d8e
children a4390cef284c
comparison
equal deleted inserted replaced
1603:c58916c53d8e 1604:4b79ff62df3a
790 pItems[item_counter]._bonus_type=0; 790 pItems[item_counter]._bonus_type=0;
791 if (pItems[item_counter].uMaterial==MATERIAL_SPECIAL) 791 if (pItems[item_counter].uMaterial==MATERIAL_SPECIAL)
792 { 792 {
793 for(int ii=0; ii<24; ++ii) 793 for(int ii=0; ii<24; ++ii)
794 { 794 {
795 if (_stricmp(test_string,pEnchantments[ii].pBonusStat)) 795 if (!_stricmp(test_string,pEnchantments[ii].pOfName))
796 { 796 {
797 pItems[item_counter]._bonus_type=ii+1; 797 pItems[item_counter]._bonus_type=ii+1;
798 break; 798 break;
799 } 799 }
800 } 800 }
801 if (!pItems[item_counter]._bonus_type) 801 if (!pItems[item_counter]._bonus_type)
802 { 802 {
803 for(int ii=0; ii<72; ++ii) 803 for(int ii=0; ii<72; ++ii)
804 { 804 {
805 if (_stricmp(test_string,pSpecialEnchantments[ii].pBonusStatement)) 805 if (!_stricmp(test_string,pSpecialEnchantments[ii].pNameAdd))
806 { 806 {
807 pItems[item_counter]._additional_value=ii+1; 807 pItems[item_counter]._additional_value=ii+1;
808 } 808 }
809 } 809 }
810 } 810 }
1242 } 1242 }
1243 ++decode_step; 1243 ++decode_step;
1244 test_string=tmp_pos+1; 1244 test_string=tmp_pos+1;
1245 } while ((decode_step<2)&&!break_loop); 1245 } while ((decode_step<2)&&!break_loop);
1246 } 1246 }
1247
1248
1249
1250 ItemGen::PopulateSpecialBonusMap();
1251 ItemGen::PopulateArtifactBonusMap();
1252 ItemGen::PopulateRegularBonusMap();
1253
1247 1254
1248 } 1255 }
1249 1256
1250 //----- (00456D17) -------------------------------------------------------- 1257 //----- (00456D17) --------------------------------------------------------
1251 void ItemsTable::SetSpecialBonus(ItemGen *pItem) 1258 void ItemsTable::SetSpecialBonus(ItemGen *pItem)
1913 } 1920 }
1914 else 1921 else
1915 return false; 1922 return false;
1916 1923
1917 } 1924 }
1925
1926 std::map<int, std::map<CHARACTER_ATTRIBUTE_TYPE, CEnchantment*>* >ItemGen::regularBonusMap;
1927 std::map<int, std::map<CHARACTER_ATTRIBUTE_TYPE, CEnchantment*>* >ItemGen::specialBonusMap;
1928 std::map<int, std::map<CHARACTER_ATTRIBUTE_TYPE, CEnchantment*>* >ItemGen::artifactBonusMap;
1929
1930 #define NEWBONUSINTOSPECIALLIST(x,y) AddToMap(ItemGen::specialBonusMap, enchId, x, y);
1931 #define NEWBONUSINTOSPECIALLIST2(x,y,z) AddToMap(ItemGen::specialBonusMap, enchId, x, y, z);
1932
1933 #define NEWBONUSINTOREGULARLIST(x) AddToMap(ItemGen::regularBonusMap, enchId, x);
1934
1935 #define NEWBONUSINTOARTIFACTLIST(x,y) AddToMap(ItemGen::artifactBonusMap, itemId, x, y);
1936 #define NEWBONUSINTOARTIFACTLIST2(x,y,z) AddToMap(ItemGen::artifactBonusMap, itemId, x, y, z);
1937
1938 void ItemGen::AddToMap( std::map<int, std::map<CHARACTER_ATTRIBUTE_TYPE, CEnchantment*>* > &maptoadd, int enchId, CHARACTER_ATTRIBUTE_TYPE attrId, int bonusValue /*= 0*/, unsigned __int16 Player::* skillPtr /*= NULL*/ )
1939 {
1940 auto key = maptoadd.find(enchId);
1941 std::map<CHARACTER_ATTRIBUTE_TYPE, CEnchantment*>* currMap;
1942 if (key == maptoadd.end())
1943 {
1944 currMap = new std::map<CHARACTER_ATTRIBUTE_TYPE, CEnchantment*>;
1945 maptoadd[enchId] = currMap;
1946 }
1947 else
1948 {
1949 currMap = key->second;
1950 }
1951 Assert(currMap->find(attrId) == currMap->end(), "Attribute %d already present for enchantment %d", attrId, enchId);
1952 (*currMap)[attrId] = new CEnchantment(bonusValue, skillPtr);
1953 }
1954
1955 void ItemGen::PopulateSpecialBonusMap()
1956 {
1957 int enchId = 1;// of Protection, +10 to all Resistances
1958 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_RESIST_FIRE, 10);
1959 NEWBONUSINTOSPECIALLIST( CHARACTER_ATTRIBUTE_RESIST_AIR, 10);
1960 NEWBONUSINTOSPECIALLIST( CHARACTER_ATTRIBUTE_RESIST_WATER, 10);
1961 NEWBONUSINTOSPECIALLIST( CHARACTER_ATTRIBUTE_RESIST_EARTH, 10);
1962 NEWBONUSINTOSPECIALLIST( CHARACTER_ATTRIBUTE_RESIST_MIND, 10);
1963 NEWBONUSINTOSPECIALLIST( CHARACTER_ATTRIBUTE_RESIST_BODY, 10);
1964
1965 enchId = 2;//of The Gods, +10 to all Seven Statistics
1966 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_STRENGTH, 10);
1967 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_INTELLIGENCE, 10);
1968 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_WILLPOWER, 10);
1969 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_ENDURANCE, 10);
1970 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_ACCURACY, 10);
1971 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_SPEED, 10);
1972 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_LUCK, 10);
1973
1974 enchId = 26;//of Air Magic
1975 NEWBONUSINTOSPECIALLIST2(CHARACTER_ATTRIBUTE_SKILL_AIR,0, &Player::skillAir);
1976
1977 enchId = 27;//of Body Magic
1978 NEWBONUSINTOSPECIALLIST2(CHARACTER_ATTRIBUTE_SKILL_BODY,0, &Player::skillBody);
1979
1980 enchId = 28;//of Dark Magic
1981 NEWBONUSINTOSPECIALLIST2(CHARACTER_ATTRIBUTE_SKILL_DARK,0, &Player::skillDark);
1982
1983 enchId = 29;//of Earth Magic
1984 NEWBONUSINTOSPECIALLIST2(CHARACTER_ATTRIBUTE_SKILL_EARTH,0, &Player::skillEarth);
1985
1986 enchId = 30;//of Fire Magic
1987 NEWBONUSINTOSPECIALLIST2(CHARACTER_ATTRIBUTE_SKILL_FIRE,0, &Player::skillFire);
1988
1989 enchId = 31;//of Light Magic
1990 NEWBONUSINTOSPECIALLIST2(CHARACTER_ATTRIBUTE_SKILL_LIGHT,0, &Player::skillLight);
1991
1992 enchId = 32;//of Mind Magic
1993 NEWBONUSINTOSPECIALLIST2(CHARACTER_ATTRIBUTE_SKILL_MIND,0, &Player::skillMind);
1994
1995 enchId = 33;//of Spirit Magic
1996 NEWBONUSINTOSPECIALLIST2(CHARACTER_ATTRIBUTE_SKILL_SPIRIT,0, &Player::skillSpirit);
1997
1998 enchId = 34;//of Water Magic
1999 NEWBONUSINTOSPECIALLIST2(CHARACTER_ATTRIBUTE_SKILL_WATER,0, &Player::skillWater);
2000
2001 enchId = 42;//of Doom
2002 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_STRENGTH, 1);
2003 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_INTELLIGENCE, 1);
2004 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_WILLPOWER, 1);
2005 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_ENDURANCE, 1);
2006 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_ACCURACY, 1);
2007 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_SPEED, 1);
2008 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_LUCK, 1);
2009 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_HEALTH, 1);
2010 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_MANA, 1);
2011 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_AC_BONUS, 1);
2012 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_RESIST_FIRE, 1);
2013 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_RESIST_AIR, 1);
2014 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_RESIST_WATER, 1);
2015 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_RESIST_EARTH, 1);
2016 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_RESIST_MIND, 1);
2017 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_RESIST_BODY, 1);
2018
2019 enchId = 43;//of Earth
2020 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_ENDURANCE, 10);
2021 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_AC_BONUS, 10);
2022 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_HEALTH, 10);
2023
2024 enchId = 44;//of Life
2025 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_HEALTH, 10);
2026
2027 enchId = 45;//Rogues
2028 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_SPEED, 5);
2029 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_ACCURACY, 5);
2030
2031 enchId = 46;//of The Dragon
2032 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_STRENGTH, 25);
2033
2034 enchId = 47;//of The Eclipse
2035 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_MANA, 10);
2036
2037 enchId = 48;//of The Golem
2038 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_ENDURANCE, 15);
2039 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_AC_BONUS, 5);
2040
2041 enchId = 49;//of The Moon
2042 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_INTELLIGENCE, 10);
2043 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_LUCK, 10);
2044
2045 enchId = 50;//of The Phoenix
2046 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_RESIST_FIRE, 30);
2047
2048 enchId = 51;//of The Sky
2049 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_MANA, 10);
2050 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_SPEED, 10);
2051 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_INTELLIGENCE, 10);
2052
2053 enchId = 52;//of The Stars
2054 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_ENDURANCE, 10);
2055 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_ACCURACY, 10);
2056
2057 enchId = 53;//of The Sun
2058 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_STRENGTH, 10);
2059 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_WILLPOWER, 10);
2060
2061 enchId = 54;//of The Troll
2062 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_ENDURANCE, 15);
2063
2064 enchId = 55;//of The Unicorn
2065 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_LUCK, 15);
2066
2067 enchId = 56;//Warriors
2068 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_STRENGTH, 5);
2069 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_ENDURANCE, 5);
2070
2071 enchId = 57;//Wizards
2072 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_INTELLIGENCE, 5);
2073 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_WILLPOWER, 5);
2074
2075 enchId = 60;//Monks'
2076 NEWBONUSINTOSPECIALLIST2(CHARACTER_ATTRIBUTE_SKILL_DODGE, 3, &Player::skillDodge);
2077 NEWBONUSINTOSPECIALLIST2(CHARACTER_ATTRIBUTE_SKILL_UNARMED, 3, &Player::skillUnarmed);
2078
2079 enchId = 61;//Thieves'
2080 NEWBONUSINTOSPECIALLIST2(CHARACTER_ATTRIBUTE_SKILL_TRAP_DISARM, 3, &Player::skillStealing);
2081 NEWBONUSINTOSPECIALLIST2(CHARACTER_ATTRIBUTE_SKILL_STEALING, 3, &Player::skillDisarmTrap);
2082
2083 enchId = 62;//of Identifying
2084 NEWBONUSINTOSPECIALLIST2(CHARACTER_ATTRIBUTE_SKILL_ITEM_ID, 3, &Player::skillItemId);
2085 NEWBONUSINTOSPECIALLIST2(CHARACTER_ATTRIBUTE_SKILL_MONSTER_ID, 3, &Player::skillMonsterId);
2086
2087 enchId = 67;//Assassins'
2088 NEWBONUSINTOSPECIALLIST2(CHARACTER_ATTRIBUTE_SKILL_TRAP_DISARM, 2, &Player::skillDisarmTrap);
2089
2090 enchId = 68;//Barbarians'
2091 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_AC_BONUS, 5);
2092
2093 enchId = 69;//of the Storm
2094 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_RESIST_AIR, 20);
2095
2096 enchId = 70;//of the Ocean
2097 NEWBONUSINTOSPECIALLIST(CHARACTER_ATTRIBUTE_RESIST_WATER, 10);
2098 NEWBONUSINTOSPECIALLIST2(CHARACTER_ATTRIBUTE_SKILL_ALCHEMY, 2, &Player::skillAlchemy);
2099 }
2100
2101 void ItemGen::PopulateRegularBonusMap()
2102 {
2103 int enchId = 1;//of Might
2104 NEWBONUSINTOREGULARLIST(CHARACTER_ATTRIBUTE_STRENGTH);
2105
2106 enchId = 2;//of Thought
2107 NEWBONUSINTOREGULARLIST(CHARACTER_ATTRIBUTE_INTELLIGENCE);
2108
2109 enchId = 3;//of Charm
2110 NEWBONUSINTOREGULARLIST(CHARACTER_ATTRIBUTE_WILLPOWER);
2111
2112 enchId = 4;//of Vigor
2113 NEWBONUSINTOREGULARLIST(CHARACTER_ATTRIBUTE_ENDURANCE);
2114
2115 enchId = 5;//of Precision
2116 NEWBONUSINTOREGULARLIST(CHARACTER_ATTRIBUTE_ACCURACY);
2117
2118 enchId = 6;//of Speed
2119 NEWBONUSINTOREGULARLIST(CHARACTER_ATTRIBUTE_SPEED);
2120
2121 enchId = 7;//of Luck
2122 NEWBONUSINTOREGULARLIST(CHARACTER_ATTRIBUTE_LUCK);
2123
2124 enchId = 8;//of Health
2125 NEWBONUSINTOREGULARLIST(CHARACTER_ATTRIBUTE_HEALTH);
2126
2127 enchId = 9;//of Magic
2128 NEWBONUSINTOREGULARLIST(CHARACTER_ATTRIBUTE_MANA);
2129
2130 enchId = 10;//of Defense
2131 NEWBONUSINTOREGULARLIST(CHARACTER_ATTRIBUTE_AC_BONUS);
2132
2133 enchId = 11;//of Fire Resistance
2134 NEWBONUSINTOREGULARLIST(CHARACTER_ATTRIBUTE_RESIST_FIRE);
2135
2136 enchId = 12;//of Air Resistance
2137 NEWBONUSINTOREGULARLIST(CHARACTER_ATTRIBUTE_RESIST_AIR);
2138
2139 enchId = 13;//of Water Resistance
2140 NEWBONUSINTOREGULARLIST(CHARACTER_ATTRIBUTE_RESIST_WATER);
2141
2142 enchId = 14;//of Earth Resistance
2143 NEWBONUSINTOREGULARLIST(CHARACTER_ATTRIBUTE_RESIST_EARTH);
2144
2145 enchId = 15;//of Mind Resistance
2146 NEWBONUSINTOREGULARLIST(CHARACTER_ATTRIBUTE_RESIST_MIND);
2147
2148 enchId = 16;//of Body Resistance
2149 NEWBONUSINTOREGULARLIST(CHARACTER_ATTRIBUTE_RESIST_BODY);
2150
2151 enchId = 17;//of Alchemy
2152 NEWBONUSINTOREGULARLIST(CHARACTER_ATTRIBUTE_SKILL_ALCHEMY);
2153
2154 enchId = 18;//of Stealing
2155 NEWBONUSINTOREGULARLIST(CHARACTER_ATTRIBUTE_SKILL_STEALING);
2156
2157 enchId = 19;//of Disarming
2158 NEWBONUSINTOREGULARLIST(CHARACTER_ATTRIBUTE_SKILL_TRAP_DISARM);
2159
2160 enchId = 20;//of Items
2161 NEWBONUSINTOREGULARLIST(CHARACTER_ATTRIBUTE_SKILL_ITEM_ID);
2162
2163 enchId = 21;//of Monsters
2164 NEWBONUSINTOREGULARLIST(CHARACTER_ATTRIBUTE_SKILL_MONSTER_ID);
2165
2166 enchId = 22;//of Arms
2167 NEWBONUSINTOREGULARLIST(CHARACTER_ATTRIBUTE_SKILL_ARMSMASTER);
2168
2169 enchId = 23;//of Dodging
2170 NEWBONUSINTOREGULARLIST(CHARACTER_ATTRIBUTE_SKILL_DODGE);
2171
2172 enchId = 24;//of the Fist
2173 NEWBONUSINTOREGULARLIST(CHARACTER_ATTRIBUTE_SKILL_UNARMED);
2174 }
2175
2176 void ItemGen::PopulateArtifactBonusMap()
2177 {
2178 int itemId;
2179 itemId = ITEM_ARTIFACT_PUCK;
2180 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_STRENGTH, 40);
2181
2182 itemId = ITEM_ARTIFACT_IRON_FEATHER;
2183 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_STRENGTH, 40);
2184
2185 itemId = ITEM_ARTIFACT_WALLACE;
2186 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_WILLPOWER, 40);
2187 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_SKILL_ARMSMASTER, 10);
2188
2189 itemId = ITEM_ARTIFACT_CORSAIR;
2190 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_LUCK, 40);
2191 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_SKILL_TRAP_DISARM, 5);
2192 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_SKILL_STEALING, 5);
2193
2194 itemId = ITEM_ARTICACT_GOVERNONS_ARMOR;
2195 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_STRENGTH, 10);
2196 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_INTELLIGENCE, 10);
2197 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_WILLPOWER, 10);
2198 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_ENDURANCE, 10);
2199 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_ACCURACY, 10);
2200 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_SPEED, 10);
2201 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_LUCK, 10);
2202
2203 itemId = ITEM_ARTIFACT_YORUBA;
2204 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_ENDURANCE, 25);
2205
2206 itemId = ITEM_ARTIFACT_SPLITTER;
2207 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_RESIST_FIRE, 50);
2208
2209 itemId = ITEM_ARTEFACT_ULLYSES,
2210 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_ACCURACY, 50);
2211
2212 itemId = ITEM_ARTEFACT_HANDS_OF_THE_MASTER,
2213 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_SKILL_DODGE, 10);
2214 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_SKILL_UNARMED, 10);
2215
2216 itemId = ITEM_ARTIFACT_LEAGUE_BOOTS;
2217 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_SPEED, 40);
2218 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_SKILL_WATER, 0, &Player::skillWater);
2219
2220 itemId = ITEM_ARTIFACT_RULERS_RING;
2221 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_SKILL_MIND, 0, &Player::skillMind);
2222 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_SKILL_DARK, 0, &Player::skillDark);
2223
2224 itemId = ITEM_RELIC_MASH;
2225 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_STRENGTH, 150);
2226 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_INTELLIGENCE, -40);
2227 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_WILLPOWER, -40);
2228 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_SPEED, -40);
2229
2230 itemId = ITEM_RELIC_ETHRICS_STAFF;
2231 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_SKILL_DARK, 0, &Player::skillDark);
2232 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_SKILL_MEDITATION, 15);
2233
2234 itemId = ITEM_RELIC_HARECS_LEATHER;
2235 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_SKILL_TRAP_DISARM, 5);
2236 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_SKILL_STEALING, 5);
2237 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_LUCK, 50);
2238 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_RESIST_FIRE, -10);
2239 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_RESIST_WATER, -10);
2240 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_RESIST_AIR, -10);
2241 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_RESIST_EARTH, -10);
2242 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_RESIST_MIND, -10);
2243 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_RESIST_BODY, -10);
2244
2245 itemId = ITEM_RELIC_OLD_NICK;
2246 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_SKILL_TRAP_DISARM, 5);
2247
2248 itemId = ITEM_RELIC_AMUCK;
2249 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_STRENGTH, 100);
2250 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_ENDURANCE, 100);
2251 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_AC_BONUS, -15);
2252
2253 itemId = ITEM_RELIC_GLORY_SHIELD;
2254 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_SKILL_SPIRIT, 0, &Player::skillSpirit);
2255 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_SKILL_SHIELD, 5);
2256 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_RESIST_MIND, -10);
2257 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_RESIST_BODY, -10);
2258
2259 itemId = ITEM_RELIC_KELEBRIM;
2260 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_ENDURANCE, 50);
2261 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_RESIST_EARTH, -30);
2262
2263 itemId = ITEM_RELIC_TALEDONS_HELM;
2264 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_SKILL_LIGHT, 0, &Player::skillLight);
2265 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_WILLPOWER, 15);
2266 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_STRENGTH, 15);
2267 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_LUCK, -40);
2268
2269 itemId = ITEM_RELIC_SCHOLARS_CAP;
2270 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_SKILL_LEARNING, +15);
2271 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_ENDURANCE, -50);
2272
2273 itemId = ITEM_RELIC_PHYNAXIAN_CROWN;
2274 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_SKILL_FIRE, 0, &Player::skillFire);
2275 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_RESIST_WATER, +50);
2276 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_WILLPOWER, 30);
2277 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_AC_BONUS, -20);
2278
2279 itemId = ITEM_RILIC_TITANS_BELT;
2280 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_STRENGTH, 75);
2281 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_SPEED, -40);
2282
2283 itemId = ITEM_RELIC_TWILIGHT;
2284 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_SPEED, 50);
2285 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_LUCK, 50);
2286 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_RESIST_FIRE, -15);
2287 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_RESIST_WATER, -15);
2288 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_RESIST_AIR, -15);
2289 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_RESIST_EARTH, -15);
2290 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_RESIST_MIND, -15);
2291 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_RESIST_BODY, -15);
2292
2293 itemId = ITEM_RELIC_ANIA_SELVING;
2294 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_ACCURACY, 150);
2295 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_SKILL_BOW, 5);
2296 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_AC_BONUS, -25);
2297
2298 itemId = ITEM_RELIC_JUSTICE;
2299 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_SKILL_MIND, 0, &Player::skillMind);
2300 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_SKILL_BODY, 0, &Player::skillBody);
2301 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_SPEED, -40);
2302
2303 itemId = ITEM_RELIC_MEKORIGS_HAMMER;
2304 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_SKILL_SPIRIT, 0, &Player::skillSpirit);
2305 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_STRENGTH, 75);
2306 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_RESIST_AIR, -50);
2307
2308 itemId = ITEM_ARTIFACT_HERMES_SANDALS;
2309 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_SPEED, 100);
2310 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_ACCURACY, 50);
2311 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_RESIST_AIR, 50);
2312
2313 itemId = ITEM_ARTIFACT_CLOAK_OF_THE_SHEEP;
2314 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_WILLPOWER, -20);
2315 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_INTELLIGENCE, -20);
2316
2317 itemId = ITEM_ARTIFACT_MINDS_EYE;
2318 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_WILLPOWER, 15);
2319 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_INTELLIGENCE, 15);
2320
2321 itemId = ITEM_ELVEN_CHAINMAIL;
2322 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_SPEED, 15);
2323 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_ACCURACY, 15);
2324
2325 itemId = ITEM_FORGE_GAUNTLETS;
2326 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_STRENGTH, 15);
2327 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_ENDURANCE, 15);
2328 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_RESIST_FIRE, 30);
2329
2330 itemId = ITEM_ARTIFACT_HEROS_BELT;
2331 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_STRENGTH, 15);
2332 NEWBONUSINTOARTIFACTLIST(CHARACTER_ATTRIBUTE_SKILL_ARMSMASTER, 5);
2333 }
2334
2335 void ItemGen::GetItemBonusSpecialEnchantment( Player* owner, CHARACTER_ATTRIBUTE_TYPE attrToGet, int* additiveBonus, int* halfSkillBonus )
2336 {
2337 auto bonusList = ItemGen::specialBonusMap.find(this->uSpecEnchantmentType);
2338 if (bonusList == ItemGen::specialBonusMap.end())
2339 {
2340 return;
2341 }
2342 std::map<CHARACTER_ATTRIBUTE_TYPE, CEnchantment*>* currList = bonusList->second;
2343 if (currList->find(attrToGet) != currList->end())
2344 {
2345 CEnchantment* currBonus = (*currList)[attrToGet];
2346 if (currBonus->statPtr != NULL)
2347 {
2348 if (currBonus->statBonus == 0)
2349 {
2350 *halfSkillBonus = owner->*currBonus->statPtr / 2;
2351 }
2352 else
2353 {
2354 if (*additiveBonus < currBonus->statBonus)
2355 {
2356 *additiveBonus = currBonus->statBonus;
2357 }
2358 }
2359 }
2360 else
2361 {
2362 *additiveBonus += currBonus->statBonus;
2363 }
2364 }
2365 }
2366
2367 void ItemGen::GetItemBonusArtifact( Player* owner, CHARACTER_ATTRIBUTE_TYPE attrToGet, int* bonusSum )
2368 {
2369 auto bonusList = ItemGen::artifactBonusMap.find(this->uItemID);
2370 if (bonusList == ItemGen::artifactBonusMap.end())
2371 {
2372 return;
2373 }
2374 std::map<CHARACTER_ATTRIBUTE_TYPE, CEnchantment*>* currList = bonusList->second;
2375 if (currList->find(attrToGet) != currList->end())
2376 {
2377 CEnchantment* currBonus = (*currList)[attrToGet];
2378 if (currBonus->statPtr != NULL)
2379 {
2380 *bonusSum = owner->*currBonus->statPtr / 2;
2381 }
2382 else
2383 {
2384 *bonusSum += currBonus->statBonus;
2385 }
2386 }
2387 }
2388
2389 bool ItemGen::IsRegularEnchanmentForAttribute( CHARACTER_ATTRIBUTE_TYPE attrToGet )
2390 {
2391 auto bonusList = ItemGen::specialBonusMap.find(this->uSpecEnchantmentType);
2392 if (bonusList == ItemGen::specialBonusMap.end())
2393 {
2394 return false;
2395 }
2396 std::map<CHARACTER_ATTRIBUTE_TYPE, CEnchantment*>* currList = bonusList->second;
2397 return (currList->find(attrToGet) != currList->end());
2398 return false;
2399 }
2400
1918 //----- (004B8E3D) -------------------------------------------------------- 2401 //----- (004B8E3D) --------------------------------------------------------
1919 void GenerateStandartShopItems() 2402 void GenerateStandartShopItems()
1920 { 2403 {
1921 signed int item_count; 2404 signed int item_count;
1922 signed int shop_index; 2405 signed int shop_index;