diff --git a/Source/itemdat.cpp b/Source/itemdat.cpp index a47cc36b7..eb2325476 100644 --- a/Source/itemdat.cpp +++ b/Source/itemdat.cpp @@ -187,324 +187,324 @@ ItemDataStruct AllItemsList[] = { /** Contains the data related to each item prefix. */ const PLStruct ItemPrefixes[] = { // clang-format off - // PLName, PLPower, PLParam1, PLParam2, PLMinLvl, PLIType, PLGOE, PLDouble, PLOk, PLMinVal, PLMaxVal, PLMultVal + // PLName, PLPower, PLParam1, PLParam2, PLMinVal, PLMaxVal, PLMultVal },PLMinLvl, PLIType, PLGOE, PLDouble, PLOk // TRANSLATORS: Item prefix section. - { N_("Tin"), IPL_TOHIT_CURSE, 6, 10, 3, PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, true, false, 0, 0, -3 }, - { N_("Brass"), IPL_TOHIT_CURSE, 1, 5, 1, PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, true, false, 0, 0, -2 }, - { N_("Bronze"), IPL_TOHIT, 1, 5, 1, PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, true, true, 100, 500, 2 }, - { N_("Iron"), IPL_TOHIT, 6, 10, 4, PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, true, true, 600, 1000, 3 }, - { N_("Steel"), IPL_TOHIT, 11, 15, 6, PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, true, true, 1100, 1500, 5 }, - { N_("Silver"), IPL_TOHIT, 16, 20, 9, PLT_WEAP | PLT_BOW | PLT_MISC, GOE_GOOD, true, true, 1600, 2000, 7 }, - { N_("Gold"), IPL_TOHIT, 21, 30, 12, PLT_WEAP | PLT_BOW | PLT_MISC, GOE_GOOD, true, true, 2100, 3000, 9 }, - { N_("Platinum"), IPL_TOHIT, 31, 40, 16, PLT_WEAP | PLT_BOW , GOE_GOOD, true, true, 3100, 4000, 11 }, - { N_("Mithril"), IPL_TOHIT, 41, 60, 20, PLT_WEAP | PLT_BOW , GOE_GOOD, true, true, 4100, 6000, 13 }, - { N_("Meteoric"), IPL_TOHIT, 61, 80, 23, PLT_WEAP | PLT_BOW , GOE_ANY, true, true, 6100, 10000, 15 }, - { N_("Weird"), IPL_TOHIT, 81, 100, 35, PLT_WEAP | PLT_BOW , GOE_ANY, true, true, 10100, 14000, 17 }, - { N_("Strange"), IPL_TOHIT, 101, 150, 60, PLT_WEAP | PLT_BOW , GOE_ANY, true, true, 14100, 20000, 20 }, - { N_("Useless"), IPL_DAMP_CURSE, 100, 100, 5, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, true, false, 0, 0, -8 }, - { N_("Bent"), IPL_DAMP_CURSE, 50, 75, 3, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, true, false, 0, 0, -4 }, - { N_("Weak"), IPL_DAMP_CURSE, 25, 45, 1, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, true, false, 0, 0, -3 }, - { N_("Jagged"), IPL_DAMP, 20, 35, 4, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, true, true, 250, 450, 3 }, - { N_("Deadly"), IPL_DAMP, 36, 50, 6, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, true, true, 500, 700, 4 }, - { N_("Heavy"), IPL_DAMP, 51, 65, 9, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, true, true, 750, 950, 5 }, - { N_("Vicious"), IPL_DAMP, 66, 80, 12, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_EVIL, true, true, 1000, 1450, 8 }, - { N_("Brutal"), IPL_DAMP, 81, 95, 16, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, true, true, 1500, 1950, 10 }, - { N_("Massive"), IPL_DAMP, 96, 110, 20, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, true, true, 2000, 2450, 13 }, - { N_("Savage"), IPL_DAMP, 111, 125, 23, PLT_WEAP | PLT_BOW , GOE_ANY, true, true, 2500, 3000, 15 }, - { N_("Ruthless"), IPL_DAMP, 126, 150, 35, PLT_WEAP | PLT_BOW , GOE_ANY, true, true, 10100, 15000, 17 }, - { N_("Merciless"), IPL_DAMP, 151, 175, 60, PLT_WEAP | PLT_BOW , GOE_ANY, true, true, 15000, 20000, 20 }, - { N_("Clumsy"), IPL_TOHIT_DAMP_CURSE, 50, 75, 5, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, true, false, 0, 0, -7 }, - { N_("Dull"), IPL_TOHIT_DAMP_CURSE, 25, 45, 1, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, true, false, 0, 0, -5 }, - { N_("Sharp"), IPL_TOHIT_DAMP, 20, 35, 1, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, true, false, 350, 950, 5 }, - { N_("Fine"), IPL_TOHIT_DAMP, 36, 50, 6, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, true, true, 1100, 1700, 7 }, - { N_("Warrior's"), IPL_TOHIT_DAMP, 51, 65, 10, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, true, true, 1850, 2450, 13 }, - { N_("Soldier's"), IPL_TOHIT_DAMP, 66, 80, 15, PLT_WEAP | PLT_STAFF , GOE_ANY, true, true, 2600, 3950, 17 }, - { N_("Lord's"), IPL_TOHIT_DAMP, 81, 95, 19, PLT_WEAP | PLT_STAFF , GOE_ANY, true, true, 4100, 5950, 21 }, - { N_("Knight's"), IPL_TOHIT_DAMP, 96, 110, 23, PLT_WEAP | PLT_STAFF , GOE_ANY, true, true, 6100, 8450, 26 }, - { N_("Master's"), IPL_TOHIT_DAMP, 111, 125, 28, PLT_WEAP | PLT_STAFF , GOE_ANY, true, true, 8600, 13000, 30 }, - { N_("Champion's"), IPL_TOHIT_DAMP, 126, 150, 40, PLT_WEAP | PLT_STAFF , GOE_ANY, true, true, 15200, 24000, 33 }, - { N_("King's"), IPL_TOHIT_DAMP, 151, 175, 28, PLT_WEAP | PLT_STAFF , GOE_ANY, true, true, 24100, 35000, 38 }, - { N_("Vulnerable"), IPL_ACP_CURSE, 51, 100, 3, PLT_ARMO | PLT_SHLD , GOE_ANY, true, false, 0, 0, -3 }, - { N_("Rusted"), IPL_ACP_CURSE, 25, 50, 1, PLT_ARMO | PLT_SHLD , GOE_ANY, true, false, 0, 0, -2 }, - { N_("Fine"), IPL_ACP, 20, 30, 1, PLT_ARMO | PLT_SHLD , GOE_ANY, true, true, 20, 100, 2 }, - { N_("Strong"), IPL_ACP, 31, 40, 3, PLT_ARMO | PLT_SHLD , GOE_ANY, true, true, 120, 200, 3 }, - { N_("Grand"), IPL_ACP, 41, 55, 6, PLT_ARMO | PLT_SHLD , GOE_ANY, true, true, 220, 300, 5 }, - { N_("Valiant"), IPL_ACP, 56, 70, 10, PLT_ARMO | PLT_SHLD , GOE_ANY, true, true, 320, 400, 7 }, - { N_("Glorious"), IPL_ACP, 71, 90, 14, PLT_ARMO | PLT_SHLD , GOE_GOOD, true, true, 420, 600, 9 }, - { N_("Blessed"), IPL_ACP, 91, 110, 19, PLT_ARMO | PLT_SHLD , GOE_GOOD, true, true, 620, 800, 11 }, - { N_("Saintly"), IPL_ACP, 111, 130, 24, PLT_ARMO | PLT_SHLD , GOE_GOOD, true, true, 820, 1200, 13 }, - { N_("Awesome"), IPL_ACP, 131, 150, 28, PLT_ARMO | PLT_SHLD , GOE_GOOD, true, true, 1220, 2000, 15 }, - { N_("Holy"), IPL_ACP, 151, 170, 35, PLT_ARMO | PLT_SHLD , GOE_GOOD, true, true, 5200, 6000, 17 }, - { N_("Godly"), IPL_ACP, 171, 200, 60, PLT_ARMO | PLT_SHLD , GOE_GOOD, true, true, 6200, 7000, 20 }, - { N_("Red"), IPL_FIRERES, 10, 20, 4, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true, 500, 1500, 2 }, - { N_("Crimson"), IPL_FIRERES, 21, 30, 10, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true, 2100, 3000, 2 }, - { N_("Crimson"), IPL_FIRERES, 31, 40, 16, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true, 3100, 4000, 2 }, - { N_("Garnet"), IPL_FIRERES, 41, 50, 20, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true, 8200, 12000, 3 }, - { N_("Ruby"), IPL_FIRERES, 51, 60, 26, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true, 17100, 20000, 5 }, - { N_("Blue"), IPL_LIGHTRES, 10, 20, 4, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true, 500, 1500, 2 }, - { N_("Azure"), IPL_LIGHTRES, 21, 30, 10, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true, 2100, 3000, 2 }, - { N_("Lapis"), IPL_LIGHTRES, 31, 40, 16, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true, 3100, 4000, 2 }, - { N_("Cobalt"), IPL_LIGHTRES, 41, 50, 20, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true, 8200, 12000, 3 }, - { N_("Sapphire"), IPL_LIGHTRES, 51, 60, 26, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true, 17100, 20000, 5 }, - { N_("White"), IPL_MAGICRES, 10, 20, 4, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true, 500, 1500, 2 }, - { N_("Pearl"), IPL_MAGICRES, 21, 30, 10, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true, 2100, 3000, 2 }, - { N_("Ivory"), IPL_MAGICRES, 31, 40, 16, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true, 3100, 4000, 2 }, - { N_("Crystal"), IPL_MAGICRES, 41, 50, 20, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true, 8200, 12000, 3 }, - { N_("Diamond"), IPL_MAGICRES, 51, 60, 26, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true, 17100, 20000, 5 }, - { N_("Topaz"), IPL_ALLRES, 10, 15, 8, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true, 2000, 5000, 3 }, - { N_("Amber"), IPL_ALLRES, 16, 20, 12, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true, 7400, 10000, 3 }, - { N_("Jade"), IPL_ALLRES, 21, 30, 18, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true, 11000, 15000, 3 }, - { N_("Obsidian"), IPL_ALLRES, 31, 40, 24, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true, 24000, 40000, 4 }, - { N_("Emerald"), IPL_ALLRES, 41, 50, 31, PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, false, true, 61000, 75000, 7 }, - { N_("Hyena's"), IPL_MANA_CURSE, 11, 25, 4, PLT_STAFF | PLT_MISC, GOE_ANY, false, false, 100, 1000, -2 }, - { N_("Frog's"), IPL_MANA_CURSE, 1, 10, 1, PLT_STAFF | PLT_MISC, GOE_EVIL, false, false, 0, 0, -2 }, - { N_("Spider's"), IPL_MANA, 10, 15, 1, PLT_STAFF | PLT_MISC, GOE_EVIL, false, true, 500, 1000, 2 }, - { N_("Raven's"), IPL_MANA, 15, 20, 5, PLT_STAFF | PLT_MISC, GOE_ANY, false, true, 1100, 2000, 3 }, - { N_("Snake's"), IPL_MANA, 21, 30, 9, PLT_STAFF | PLT_MISC, GOE_ANY, false, true, 2100, 4000, 5 }, - { N_("Serpent's"), IPL_MANA, 30, 40, 15, PLT_STAFF | PLT_MISC, GOE_ANY, false, true, 4100, 6000, 7 }, - { N_("Drake's"), IPL_MANA, 41, 50, 21, PLT_STAFF | PLT_MISC, GOE_ANY, false, true, 6100, 10000, 9 }, - { N_("Dragon's"), IPL_MANA, 51, 60, 27, PLT_STAFF | PLT_MISC, GOE_ANY, false, true, 10100, 15000, 11 }, - { N_("Wyrm's"), IPL_MANA, 61, 80, 35, PLT_STAFF , GOE_ANY, false, true, 15100, 19000, 12 }, - { N_("Hydra's"), IPL_MANA, 81, 100, 60, PLT_STAFF , GOE_ANY, false, true, 19100, 30000, 13 }, - { N_("Angel's"), IPL_SPLLVLADD, 1, 1, 15, PLT_STAFF , GOE_GOOD, false, true, 25000, 25000, 2 }, - { N_("Arch-Angel's"), IPL_SPLLVLADD, 2, 2, 25, PLT_STAFF , GOE_GOOD, false, true, 50000, 50000, 3 }, - { N_("Plentiful"), IPL_CHARGES, 2, 2, 4, PLT_STAFF , GOE_ANY, false, true, 2000, 2000, 2 }, - { N_("Bountiful"), IPL_CHARGES, 3, 3, 9, PLT_STAFF , GOE_ANY, false, true, 3000, 3000, 3 }, - { N_("Flaming"), IPL_FIREDAM, 1, 10, 7, PLT_WEAP | PLT_STAFF , GOE_ANY, false, true, 5000, 5000, 2 }, - { N_("Lightning"), IPL_LIGHTDAM, 2, 20, 18, PLT_WEAP | PLT_STAFF , GOE_ANY, false, true, 10000, 10000, 2 }, - { N_("Jester's"), IPL_JESTERS, 1, 1, 7, PLT_WEAP , GOE_ANY, false, true, 1200, 1200, 3 }, - { N_("Crystalline"), IPL_CRYSTALLINE, 30, 70, 5, PLT_WEAP , GOE_ANY, false, true, 1000, 3000, 3 }, + { N_("Tin"), { IPL_TOHIT_CURSE, 6, 10, 0, 0, -3 }, 3, PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, true, false }, + { N_("Brass"), { IPL_TOHIT_CURSE, 1, 5, 0, 0, -2 }, 1, PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, true, false }, + { N_("Bronze"), { IPL_TOHIT, 1, 5, 100, 500, 2 }, 1, PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, true, true }, + { N_("Iron"), { IPL_TOHIT, 6, 10, 600, 1000, 3 }, 4, PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, true, true }, + { N_("Steel"), { IPL_TOHIT, 11, 15, 1100, 1500, 5 }, 6, PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, true, true }, + { N_("Silver"), { IPL_TOHIT, 16, 20, 1600, 2000, 7 }, 9, PLT_WEAP | PLT_BOW | PLT_MISC, GOE_GOOD, true, true }, + { N_("Gold"), { IPL_TOHIT, 21, 30, 2100, 3000, 9 }, 12, PLT_WEAP | PLT_BOW | PLT_MISC, GOE_GOOD, true, true }, + { N_("Platinum"), { IPL_TOHIT, 31, 40, 3100, 4000, 11 }, 16, PLT_WEAP | PLT_BOW , GOE_GOOD, true, true }, + { N_("Mithril"), { IPL_TOHIT, 41, 60, 4100, 6000, 13 }, 20, PLT_WEAP | PLT_BOW , GOE_GOOD, true, true }, + { N_("Meteoric"), { IPL_TOHIT, 61, 80, 6100, 10000, 15 }, 23, PLT_WEAP | PLT_BOW , GOE_ANY, true, true }, + { N_("Weird"), { IPL_TOHIT, 81, 100, 10100, 14000, 17 }, 35, PLT_WEAP | PLT_BOW , GOE_ANY, true, true }, + { N_("Strange"), { IPL_TOHIT, 101, 150, 14100, 20000, 20 }, 60, PLT_WEAP | PLT_BOW , GOE_ANY, true, true }, + { N_("Useless"), { IPL_DAMP_CURSE, 100, 100, 0, 0, -8 }, 5, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, true, false }, + { N_("Bent"), { IPL_DAMP_CURSE, 50, 75, 0, 0, -4 }, 3, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, true, false }, + { N_("Weak"), { IPL_DAMP_CURSE, 25, 45, 0, 0, -3 }, 1, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, true, false }, + { N_("Jagged"), { IPL_DAMP, 20, 35, 250, 450, 3 }, 4, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, true, true }, + { N_("Deadly"), { IPL_DAMP, 36, 50, 500, 700, 4 }, 6, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, true, true }, + { N_("Heavy"), { IPL_DAMP, 51, 65, 750, 950, 5 }, 9, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, true, true }, + { N_("Vicious"), { IPL_DAMP, 66, 80, 1000, 1450, 8 }, 12, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_EVIL, true, true }, + { N_("Brutal"), { IPL_DAMP, 81, 95, 1500, 1950, 10 }, 16, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, true, true }, + { N_("Massive"), { IPL_DAMP, 96, 110, 2000, 2450, 13 }, 20, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, true, true }, + { N_("Savage"), { IPL_DAMP, 111, 125, 2500, 3000, 15 }, 23, PLT_WEAP | PLT_BOW , GOE_ANY, true, true }, + { N_("Ruthless"), { IPL_DAMP, 126, 150, 10100, 15000, 17 }, 35, PLT_WEAP | PLT_BOW , GOE_ANY, true, true }, + { N_("Merciless"), { IPL_DAMP, 151, 175, 15000, 20000, 20 }, 60, PLT_WEAP | PLT_BOW , GOE_ANY, true, true }, + { N_("Clumsy"), { IPL_TOHIT_DAMP_CURSE, 50, 75, 0, 0, -7 }, 5, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, true, false }, + { N_("Dull"), { IPL_TOHIT_DAMP_CURSE, 25, 45, 0, 0, -5 }, 1, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, true, false }, + { N_("Sharp"), { IPL_TOHIT_DAMP, 20, 35, 350, 950, 5 }, 1, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, true, false }, + { N_("Fine"), { IPL_TOHIT_DAMP, 36, 50, 1100, 1700, 7 }, 6, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, true, true }, + { N_("Warrior's"), { IPL_TOHIT_DAMP, 51, 65, 1850, 2450, 13 }, 10, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, true, true }, + { N_("Soldier's"), { IPL_TOHIT_DAMP, 66, 80, 2600, 3950, 17 }, 15, PLT_WEAP | PLT_STAFF , GOE_ANY, true, true }, + { N_("Lord's"), { IPL_TOHIT_DAMP, 81, 95, 4100, 5950, 21 }, 19, PLT_WEAP | PLT_STAFF , GOE_ANY, true, true }, + { N_("Knight's"), { IPL_TOHIT_DAMP, 96, 110, 6100, 8450, 26 }, 23, PLT_WEAP | PLT_STAFF , GOE_ANY, true, true }, + { N_("Master's"), { IPL_TOHIT_DAMP, 111, 125, 8600, 13000, 30 }, 28, PLT_WEAP | PLT_STAFF , GOE_ANY, true, true }, + { N_("Champion's"), { IPL_TOHIT_DAMP, 126, 150, 15200, 24000, 33 }, 40, PLT_WEAP | PLT_STAFF , GOE_ANY, true, true }, + { N_("King's"), { IPL_TOHIT_DAMP, 151, 175, 24100, 35000, 38 }, 28, PLT_WEAP | PLT_STAFF , GOE_ANY, true, true }, + { N_("Vulnerable"), { IPL_ACP_CURSE, 51, 100, 0, 0, -3 }, 3, PLT_ARMO | PLT_SHLD , GOE_ANY, true, false }, + { N_("Rusted"), { IPL_ACP_CURSE, 25, 50, 0, 0, -2 }, 1, PLT_ARMO | PLT_SHLD , GOE_ANY, true, false }, + { N_("Fine"), { IPL_ACP, 20, 30, 20, 100, 2 }, 1, PLT_ARMO | PLT_SHLD , GOE_ANY, true, true }, + { N_("Strong"), { IPL_ACP, 31, 40, 120, 200, 3 }, 3, PLT_ARMO | PLT_SHLD , GOE_ANY, true, true }, + { N_("Grand"), { IPL_ACP, 41, 55, 220, 300, 5 }, 6, PLT_ARMO | PLT_SHLD , GOE_ANY, true, true }, + { N_("Valiant"), { IPL_ACP, 56, 70, 320, 400, 7 }, 10, PLT_ARMO | PLT_SHLD , GOE_ANY, true, true }, + { N_("Glorious"), { IPL_ACP, 71, 90, 420, 600, 9 }, 14, PLT_ARMO | PLT_SHLD , GOE_GOOD, true, true }, + { N_("Blessed"), { IPL_ACP, 91, 110, 620, 800, 11 }, 19, PLT_ARMO | PLT_SHLD , GOE_GOOD, true, true }, + { N_("Saintly"), { IPL_ACP, 111, 130, 820, 1200, 13 }, 24, PLT_ARMO | PLT_SHLD , GOE_GOOD, true, true }, + { N_("Awesome"), { IPL_ACP, 131, 150, 1220, 2000, 15 }, 28, PLT_ARMO | PLT_SHLD , GOE_GOOD, true, true }, + { N_("Holy"), { IPL_ACP, 151, 170, 5200, 6000, 17 }, 35, PLT_ARMO | PLT_SHLD , GOE_GOOD, true, true }, + { N_("Godly"), { IPL_ACP, 171, 200, 6200, 7000, 20 }, 60, PLT_ARMO | PLT_SHLD , GOE_GOOD, true, true }, + { N_("Red"), { IPL_FIRERES, 10, 20, 500, 1500, 2 }, 4, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true }, + { N_("Crimson"), { IPL_FIRERES, 21, 30, 2100, 3000, 2 }, 10, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true }, + { N_("Crimson"), { IPL_FIRERES, 31, 40, 3100, 4000, 2 }, 16, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true }, + { N_("Garnet"), { IPL_FIRERES, 41, 50, 8200, 12000, 3 }, 20, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true }, + { N_("Ruby"), { IPL_FIRERES, 51, 60, 17100, 20000, 5 }, 26, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true }, + { N_("Blue"), { IPL_LIGHTRES, 10, 20, 500, 1500, 2 }, 4, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true }, + { N_("Azure"), { IPL_LIGHTRES, 21, 30, 2100, 3000, 2 }, 10, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true }, + { N_("Lapis"), { IPL_LIGHTRES, 31, 40, 3100, 4000, 2 }, 16, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true }, + { N_("Cobalt"), { IPL_LIGHTRES, 41, 50, 8200, 12000, 3 }, 20, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true }, + { N_("Sapphire"), { IPL_LIGHTRES, 51, 60, 17100, 20000, 5 }, 26, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true }, + { N_("White"), { IPL_MAGICRES, 10, 20, 500, 1500, 2 }, 4, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true }, + { N_("Pearl"), { IPL_MAGICRES, 21, 30, 2100, 3000, 2 }, 10, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true }, + { N_("Ivory"), { IPL_MAGICRES, 31, 40, 3100, 4000, 2 }, 16, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true }, + { N_("Crystal"), { IPL_MAGICRES, 41, 50, 8200, 12000, 3 }, 20, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true }, + { N_("Diamond"), { IPL_MAGICRES, 51, 60, 17100, 20000, 5 }, 26, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true }, + { N_("Topaz"), { IPL_ALLRES, 10, 15, 2000, 5000, 3 }, 8, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true }, + { N_("Amber"), { IPL_ALLRES, 16, 20, 7400, 10000, 3 }, 12, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true }, + { N_("Jade"), { IPL_ALLRES, 21, 30, 11000, 15000, 3 }, 18, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true }, + { N_("Obsidian"), { IPL_ALLRES, 31, 40, 24000, 40000, 4 }, 24, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true }, + { N_("Emerald"), { IPL_ALLRES, 41, 50, 61000, 75000, 7 }, 31, PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, false, true }, + { N_("Hyena's"), { IPL_MANA_CURSE, 11, 25, 100, 1000, -2 }, 4, PLT_STAFF | PLT_MISC, GOE_ANY, false, false }, + { N_("Frog's"), { IPL_MANA_CURSE, 1, 10, 0, 0, -2 }, 1, PLT_STAFF | PLT_MISC, GOE_EVIL, false, false }, + { N_("Spider's"), { IPL_MANA, 10, 15, 500, 1000, 2 }, 1, PLT_STAFF | PLT_MISC, GOE_EVIL, false, true }, + { N_("Raven's"), { IPL_MANA, 15, 20, 1100, 2000, 3 }, 5, PLT_STAFF | PLT_MISC, GOE_ANY, false, true }, + { N_("Snake's"), { IPL_MANA, 21, 30, 2100, 4000, 5 }, 9, PLT_STAFF | PLT_MISC, GOE_ANY, false, true }, + { N_("Serpent's"), { IPL_MANA, 30, 40, 4100, 6000, 7 }, 15, PLT_STAFF | PLT_MISC, GOE_ANY, false, true }, + { N_("Drake's"), { IPL_MANA, 41, 50, 6100, 10000, 9 }, 21, PLT_STAFF | PLT_MISC, GOE_ANY, false, true }, + { N_("Dragon's"), { IPL_MANA, 51, 60, 10100, 15000, 11 }, 27, PLT_STAFF | PLT_MISC, GOE_ANY, false, true }, + { N_("Wyrm's"), { IPL_MANA, 61, 80, 15100, 19000, 12 }, 35, PLT_STAFF , GOE_ANY, false, true }, + { N_("Hydra's"), { IPL_MANA, 81, 100, 19100, 30000, 13 }, 60, PLT_STAFF , GOE_ANY, false, true }, + { N_("Angel's"), { IPL_SPLLVLADD, 1, 1, 25000, 25000, 2 }, 15, PLT_STAFF , GOE_GOOD, false, true }, + { N_("Arch-Angel's"), { IPL_SPLLVLADD, 2, 2, 50000, 50000, 3 }, 25, PLT_STAFF , GOE_GOOD, false, true }, + { N_("Plentiful"), { IPL_CHARGES, 2, 2, 2000, 2000, 2 }, 4, PLT_STAFF , GOE_ANY, false, true }, + { N_("Bountiful"), { IPL_CHARGES, 3, 3, 3000, 3000, 3 }, 9, PLT_STAFF , GOE_ANY, false, true }, + { N_("Flaming"), { IPL_FIREDAM, 1, 10, 5000, 5000, 2 }, 7, PLT_WEAP | PLT_STAFF , GOE_ANY, false, true }, + { N_("Lightning"), { IPL_LIGHTDAM, 2, 20, 10000, 10000, 2 }, 18, PLT_WEAP | PLT_STAFF , GOE_ANY, false, true }, + { N_("Jester's"), { IPL_JESTERS, 1, 1, 1200, 1200, 3 }, 7, PLT_WEAP , GOE_ANY, false, true }, + { N_("Crystalline"), { IPL_CRYSTALLINE, 30, 70, 1000, 3000, 3 }, 5, PLT_WEAP , GOE_ANY, false, true }, // TRANSLATORS: Item prefix section end. - { N_("Doppelganger's"), IPL_DOPPELGANGER, 81, 95, 11, PLT_WEAP | PLT_STAFF , GOE_ANY, false, true, 2000, 2400, 10 }, - { "", IPL_INVALID, 0, 0, 0, 0 , GOE_ANY, false, false, 0, 0, 0 }, + { N_("Doppelganger's"), { IPL_DOPPELGANGER, 81, 95, 2000, 2400, 10 }, 11, PLT_WEAP | PLT_STAFF , GOE_ANY, false, true }, + { "", { IPL_INVALID, 0, 0, 0, 0, 0 }, 0, 0 , GOE_ANY, false, false }, // clang-format on }; /** Contains the data related to each item suffix. */ const PLStruct ItemSuffixes[] = { // clang-format off - // PLName, PLPower, PLParam1, PLParam2, PLMinLvl, PLIType, PLGOE, PLDouble, PLOk, PLMinVal, PLMaxVal, PLMultVal + // PLName, { PLPower, PLParam1, PLParam2, PLMinVal, PLMaxVal, PLMultVal }, PLMinLvl, PLIType, PLGOE, PLDouble, PLOk, // TRANSLATORS: Item suffix section. All items will have a word binding word. (Format: {:s} of {:s} - e.g. Rags of Valor) - { N_("quality"), IPL_DAMMOD, 1, 2, 2, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, false, true, 100, 200, 2 }, - { N_("maiming"), IPL_DAMMOD, 3, 5, 7, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, false, true, 1300, 1500, 3 }, - { N_("slaying"), IPL_DAMMOD, 6, 8, 15, PLT_WEAP , GOE_ANY, false, true, 2600, 3000, 5 }, - { N_("gore"), IPL_DAMMOD, 9, 12, 25, PLT_WEAP , GOE_ANY, false, true, 4100, 5000, 8 }, - { N_("carnage"), IPL_DAMMOD, 13, 16, 35, PLT_WEAP , GOE_ANY, false, true, 5100, 10000, 10 }, - { N_("slaughter"), IPL_DAMMOD, 17, 20, 60, PLT_WEAP , GOE_ANY, false, true, 10100, 15000, 13 }, - { N_("pain"), IPL_GETHIT_CURSE, 2, 4, 4, PLT_ARMO | PLT_SHLD | PLT_MISC, GOE_EVIL, false, false, 0, 0, -4 }, - { N_("tears"), IPL_GETHIT_CURSE, 1, 1, 2, PLT_ARMO | PLT_SHLD | PLT_MISC, GOE_EVIL, false, false, 0, 0, -2 }, - { N_("health"), IPL_GETHIT, 1, 1, 2, PLT_ARMO | PLT_SHLD | PLT_MISC, GOE_GOOD, false, true, 200, 200, 2 }, - { N_("protection"), IPL_GETHIT, 2, 2, 6, PLT_ARMO | PLT_SHLD , GOE_GOOD, false, true, 400, 800, 4 }, - { N_("absorption"), IPL_GETHIT, 3, 3, 12, PLT_ARMO | PLT_SHLD , GOE_GOOD, false, true, 1001, 2500, 10 }, - { N_("deflection"), IPL_GETHIT, 4, 4, 20, PLT_ARMO , GOE_GOOD, false, true, 2500, 6500, 15 }, - { N_("osmosis"), IPL_GETHIT, 5, 6, 50, PLT_ARMO , GOE_GOOD, false, true, 7500, 10000, 20 }, - { N_("frailty"), IPL_STR_CURSE, 6, 10, 3, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_EVIL, false, false, 0, 0, -3 }, - { N_("weakness"), IPL_STR_CURSE, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_EVIL, false, false, 0, 0, -2 }, - { N_("strength"), IPL_STR, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true, 200, 1000, 2 }, - { N_("might"), IPL_STR, 6, 10, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, false, true, 1200, 2000, 3 }, - { N_("power"), IPL_STR, 11, 15, 11, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, false, true, 2200, 3000, 4 }, - { N_("giants"), IPL_STR, 16, 20, 17, PLT_ARMO | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, false, true, 3200, 5000, 7 }, - { N_("titans"), IPL_STR, 21, 30, 23, PLT_WEAP | PLT_MISC, GOE_ANY, false, true, 5200, 10000, 10 }, - { N_("paralysis"), IPL_DEX_CURSE, 6, 10, 3, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_EVIL, false, false, 0, 0, -3 }, - { N_("atrophy"), IPL_DEX_CURSE, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_EVIL, false, false, 0, 0, -2 }, - { N_("dexterity"), IPL_DEX, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true, 200, 1000, 2 }, - { N_("skill"), IPL_DEX, 6, 10, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, false, true, 1200, 2000, 3 }, - { N_("accuracy"), IPL_DEX, 11, 15, 11, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, false, true, 2200, 3000, 4 }, - { N_("precision"), IPL_DEX, 16, 20, 17, PLT_ARMO | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, false, true, 3200, 5000, 7 }, - { N_("perfection"), IPL_DEX, 21, 30, 23, PLT_BOW | PLT_MISC, GOE_ANY, false, true, 5200, 10000, 10 }, - { N_("the fool"), IPL_MAG_CURSE, 6, 10, 3, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_EVIL, false, false, 0, 0, -3 }, - { N_("dyslexia"), IPL_MAG_CURSE, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_EVIL, false, false, 0, 0, -2 }, - { N_("magic"), IPL_MAG, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true, 200, 1000, 2 }, - { N_("the mind"), IPL_MAG, 6, 10, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true, 1200, 2000, 3 }, - { N_("brilliance"), IPL_MAG, 11, 15, 11, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true, 2200, 3000, 4 }, - { N_("sorcery"), IPL_MAG, 16, 20, 17, PLT_ARMO | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true, 3200, 5000, 7 }, - { N_("wizardry"), IPL_MAG, 21, 30, 23, PLT_STAFF | PLT_MISC, GOE_ANY, false, true, 5200, 10000, 10 }, - { N_("illness"), IPL_VIT_CURSE, 6, 10, 3, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_EVIL, false, false, 0, 0, -3 }, - { N_("disease"), IPL_VIT_CURSE, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_EVIL, false, false, 0, 0, -2 }, - { N_("vitality"), IPL_VIT, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_GOOD, false, true, 200, 1000, 2 }, - { N_("zest"), IPL_VIT, 6, 10, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_GOOD, false, true, 1200, 2000, 3 }, - { N_("vim"), IPL_VIT, 11, 15, 11, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_GOOD, false, true, 2200, 3000, 4 }, - { N_("vigor"), IPL_VIT, 16, 20, 17, PLT_ARMO | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_GOOD, false, true, 3200, 5000, 7 }, - { N_("life"), IPL_VIT, 21, 30, 23, PLT_MISC, GOE_GOOD, false, true, 5200, 10000, 10 }, - { N_("trouble"), IPL_ATTRIBS_CURSE, 6, 10, 12, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_EVIL, false, false, 0, 0, -10 }, - { N_("the pit"), IPL_ATTRIBS_CURSE, 1, 5, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_EVIL, false, false, 0, 0, -5 }, - { N_("the sky"), IPL_ATTRIBS, 1, 3, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true, 800, 4000, 5 }, - { N_("the moon"), IPL_ATTRIBS, 4, 7, 11, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true, 4800, 8000, 10 }, - { N_("the stars"), IPL_ATTRIBS, 8, 11, 17, PLT_ARMO | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, false, true, 8800, 12000, 15 }, - { N_("the heavens"), IPL_ATTRIBS, 12, 15, 25, PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, false, true, 12800, 20000, 20 }, - { N_("the zodiac"), IPL_ATTRIBS, 16, 20, 30, PLT_MISC, GOE_ANY, false, true, 20800, 40000, 30 }, - { N_("the vulture"), IPL_LIFE_CURSE, 11, 25, 4, PLT_ARMO | PLT_SHLD | PLT_MISC, GOE_EVIL, false, false, 0, 0, -4 }, - { N_("the jackal"), IPL_LIFE_CURSE, 1, 10, 1, PLT_ARMO | PLT_SHLD | PLT_MISC, GOE_EVIL, false, false, 0, 0, -2 }, - { N_("the fox"), IPL_LIFE, 10, 15, 1, PLT_ARMO | PLT_SHLD | PLT_MISC, GOE_ANY, false, true, 100, 1000, 2 }, - { N_("the jaguar"), IPL_LIFE, 16, 20, 5, PLT_ARMO | PLT_SHLD | PLT_MISC, GOE_ANY, false, true, 1100, 2000, 3 }, - { N_("the eagle"), IPL_LIFE, 21, 30, 9, PLT_ARMO | PLT_SHLD | PLT_MISC, GOE_ANY, false, true, 2100, 4000, 5 }, - { N_("the wolf"), IPL_LIFE, 30, 40, 15, PLT_ARMO | PLT_SHLD | PLT_MISC, GOE_ANY, false, true, 4100, 6000, 7 }, - { N_("the tiger"), IPL_LIFE, 41, 50, 21, PLT_ARMO | PLT_SHLD | PLT_MISC, GOE_ANY, false, true, 6100, 10000, 9 }, - { N_("the lion"), IPL_LIFE, 51, 60, 27, PLT_ARMO | PLT_MISC, GOE_ANY, false, true, 10100, 15000, 11 }, - { N_("the mammoth"), IPL_LIFE, 61, 80, 35, PLT_ARMO , GOE_ANY, false, true, 15100, 19000, 12 }, - { N_("the whale"), IPL_LIFE, 81, 100, 60, PLT_ARMO , GOE_ANY, false, true, 19100, 30000, 13 }, - { N_("fragility"), IPL_DUR_CURSE, 100, 100, 3, PLT_ARMO | PLT_SHLD | PLT_WEAP , GOE_EVIL, false, false, 0, 0, -4 }, - { N_("brittleness"), IPL_DUR_CURSE, 26, 75, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP , GOE_EVIL, false, false, 0, 0, -2 }, - { N_("sturdiness"), IPL_DUR, 26, 75, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF , GOE_ANY, false, true, 100, 100, 2 }, - { N_("craftsmanship"), IPL_DUR, 51, 100, 6, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF , GOE_ANY, false, true, 200, 200, 2 }, - { N_("structure"), IPL_DUR, 101, 200, 12, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF , GOE_ANY, false, true, 300, 300, 2 }, - { N_("the ages"), IPL_INDESTRUCTIBLE, 0, 0, 25, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF , GOE_ANY, false, true, 600, 600, 5 }, - { N_("the dark"), IPL_LIGHT_CURSE, 4, 4, 6, PLT_ARMO | PLT_WEAP | PLT_MISC, GOE_EVIL, false, false, 0, 0, -3 }, - { N_("the night"), IPL_LIGHT_CURSE, 2, 2, 3, PLT_ARMO | PLT_WEAP | PLT_MISC, GOE_EVIL, false, false, 0, 0, -2 }, - { N_("light"), IPL_LIGHT, 2, 2, 4, PLT_ARMO | PLT_WEAP | PLT_MISC, GOE_GOOD, false, true, 750, 750, 2 }, - { N_("radiance"), IPL_LIGHT, 4, 4, 8, PLT_ARMO | PLT_WEAP | PLT_MISC, GOE_GOOD, false, true, 1500, 1500, 3 }, - { N_("flame"), IPL_FIRE_ARROWS, 1, 3, 1, PLT_BOW , GOE_ANY, false, true, 2000, 2000, 2 }, - { N_("fire"), IPL_FIRE_ARROWS, 1, 6, 11, PLT_BOW , GOE_ANY, false, true, 4000, 4000, 4 }, - { N_("burning"), IPL_FIRE_ARROWS, 1, 16, 35, PLT_BOW , GOE_ANY, false, true, 6000, 6000, 6 }, - { N_("shock"), IPL_LIGHT_ARROWS, 1, 6, 13, PLT_BOW , GOE_ANY, false, true, 6000, 6000, 2 }, - { N_("lightning"), IPL_LIGHT_ARROWS, 1, 10, 21, PLT_BOW , GOE_ANY, false, true, 8000, 8000, 4 }, - { N_("thunder"), IPL_LIGHT_ARROWS, 1, 20, 60, PLT_BOW , GOE_ANY, false, true, 12000, 12000, 6 }, - { N_("many"), IPL_DUR, 100, 100, 3, PLT_BOW , GOE_ANY, false, true, 750, 750, 2 }, - { N_("plenty"), IPL_DUR, 200, 200, 7, PLT_BOW , GOE_ANY, false, true, 1500, 1500, 3 }, - { N_("thorns"), IPL_THORNS, 1, 3, 1, PLT_ARMO | PLT_SHLD , GOE_ANY, false, true, 500, 500, 2 }, - { N_("corruption"), IPL_NOMANA, 0, 0, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP , GOE_EVIL, false, false, -1000, -1000, 2 }, - { N_("thieves"), IPL_ABSHALFTRAP, 0, 0, 11, PLT_ARMO | PLT_SHLD | PLT_MISC, GOE_ANY, false, true, 1500, 1500, 2 }, - { N_("the bear"), IPL_KNOCKBACK, 0, 0, 5, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_EVIL, false, true, 750, 750, 2 }, - { N_("the bat"), IPL_STEALMANA, 3, 3, 8, PLT_WEAP , GOE_ANY, false, true, 7500, 7500, 3 }, - { N_("vampires"), IPL_STEALMANA, 5, 5, 19, PLT_WEAP , GOE_ANY, false, true, 15000, 15000, 3 }, - { N_("the leech"), IPL_STEALLIFE, 3, 3, 8, PLT_WEAP , GOE_ANY, false, true, 7500, 7500, 3 }, - { N_("blood"), IPL_STEALLIFE, 5, 5, 19, PLT_WEAP , GOE_ANY, false, true, 15000, 15000, 3 }, - { N_("piercing"), IPL_TARGAC, 1, 1, 1, PLT_WEAP | PLT_BOW , GOE_ANY, false, true, 1000, 1000, 3 }, - { N_("puncturing"), IPL_TARGAC, 2, 2, 9, PLT_WEAP | PLT_BOW , GOE_ANY, false, true, 2000, 2000, 6 }, - { N_("bashing"), IPL_TARGAC, 3, 3, 17, PLT_WEAP , GOE_ANY, false, true, 4000, 4000, 12 }, - { N_("readiness"), IPL_FASTATTACK, 1, 1, 1, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, false, true, 2000, 2000, 2 }, - { N_("swiftness"), IPL_FASTATTACK, 2, 2, 10, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, false, true, 4000, 4000, 4 }, - { N_("speed"), IPL_FASTATTACK, 3, 3, 19, PLT_WEAP | PLT_STAFF , GOE_ANY, false, true, 8000, 8000, 8 }, - { N_("haste"), IPL_FASTATTACK, 4, 4, 27, PLT_WEAP | PLT_STAFF , GOE_ANY, false, true, 16000, 16000, 16 }, - { N_("balance"), IPL_FASTRECOVER, 1, 1, 1, PLT_ARMO | PLT_MISC, GOE_ANY, false, true, 2000, 2000, 2 }, - { N_("stability"), IPL_FASTRECOVER, 2, 2, 10, PLT_ARMO | PLT_MISC, GOE_ANY, false, true, 4000, 4000, 4 }, - { N_("harmony"), IPL_FASTRECOVER, 3, 3, 20, PLT_ARMO | PLT_MISC, GOE_ANY, false, true, 8000, 8000, 8 }, - { N_("blocking"), IPL_FASTBLOCK, 1, 1, 5, PLT_SHLD , GOE_ANY, false, true, 4000, 4000, 4 }, - { N_("devastation"), IPL_DEVASTATION, 1, 1, 1, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, false, true, 1200, 1200, 3 }, - { N_("decay"), IPL_DECAY, 150, 250, 1, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, false, true, 200, 200, 2 }, - // TRANSLATORS: Item suffix section end. - { N_("peril"), IPL_PERIL, 1, 1, 5, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, false, true, 500, 500, 1 }, - { "", IPL_INVALID, 0, 0, 0, 0 , GOE_ANY, false, false, 0, 0, 0 }, + { N_("quality"), { IPL_DAMMOD, 1, 2, 100, 200, 2 }, 2, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, false, true }, + { N_("maiming"), { IPL_DAMMOD, 3, 5, 1300, 1500, 3 }, 7, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, false, true }, + { N_("slaying"), { IPL_DAMMOD, 6, 8, 2600, 3000, 5 }, 15, PLT_WEAP , GOE_ANY, false, true }, + { N_("gore"), { IPL_DAMMOD, 9, 12, 4100, 5000, 8 }, 25, PLT_WEAP , GOE_ANY, false, true }, + { N_("carnage"), { IPL_DAMMOD, 13, 16, 5100, 10000, 10 }, 35, PLT_WEAP , GOE_ANY, false, true }, + { N_("slaughter"), { IPL_DAMMOD, 17, 20, 10100, 15000, 13 }, 60, PLT_WEAP , GOE_ANY, false, true }, + { N_("pain"), { IPL_GETHIT_CURSE, 2, 4, 0, 0, -4 }, 4, PLT_ARMO | PLT_SHLD | PLT_MISC, GOE_EVIL, false, false }, + { N_("tears"), { IPL_GETHIT_CURSE, 1, 1, 0, 0, -2 }, 2, PLT_ARMO | PLT_SHLD | PLT_MISC, GOE_EVIL, false, false }, + { N_("health"), { IPL_GETHIT, 1, 1, 200, 200, 2 }, 2, PLT_ARMO | PLT_SHLD | PLT_MISC, GOE_GOOD, false, true }, + { N_("protection"), { IPL_GETHIT, 2, 2, 400, 800, 4 }, 6, PLT_ARMO | PLT_SHLD , GOE_GOOD, false, true }, + { N_("absorption"), { IPL_GETHIT, 3, 3, 1001, 2500, 10 }, 12, PLT_ARMO | PLT_SHLD , GOE_GOOD, false, true }, + { N_("deflection"), { IPL_GETHIT, 4, 4, 2500, 6500, 15 }, 20, PLT_ARMO , GOE_GOOD, false, true }, + { N_("osmosis"), { IPL_GETHIT, 5, 6, 7500, 10000, 20 }, 50, PLT_ARMO , GOE_GOOD, false, true }, + { N_("frailty"), { IPL_STR_CURSE, 6, 10, 0, 0, -3 }, 3, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_EVIL, false, false }, + { N_("weakness"), { IPL_STR_CURSE, 1, 5, 0, 0, -2 }, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_EVIL, false, false }, + { N_("strength"), { IPL_STR, 1, 5, 200, 1000, 2 }, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true }, + { N_("might"), { IPL_STR, 6, 10, 1200, 2000, 3 }, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, false, true }, + { N_("power"), { IPL_STR, 11, 15, 2200, 3000, 4 }, 11, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, false, true }, + { N_("giants"), { IPL_STR, 16, 20, 3200, 5000, 7 }, 17, PLT_ARMO | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, false, true }, + { N_("titans"), { IPL_STR, 21, 30, 5200, 10000, 10 }, 23, PLT_WEAP | PLT_MISC, GOE_ANY, false, true }, + { N_("paralysis"), { IPL_DEX_CURSE, 6, 10, 0, 0, -3 }, 3, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_EVIL, false, false }, + { N_("atrophy"), { IPL_DEX_CURSE, 1, 5, 0, 0, -2 }, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_EVIL, false, false }, + { N_("dexterity"), { IPL_DEX, 1, 5, 200, 1000, 2 }, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true }, + { N_("skill"), { IPL_DEX, 6, 10, 1200, 2000, 3 }, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, false, true }, + { N_("accuracy"), { IPL_DEX, 11, 15, 2200, 3000, 4 }, 11, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, false, true }, + { N_("precision"), { IPL_DEX, 16, 20, 3200, 5000, 7 }, 17, PLT_ARMO | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, false, true }, + { N_("perfection"), { IPL_DEX, 21, 30, 5200, 10000, 10 }, 23, PLT_BOW | PLT_MISC, GOE_ANY, false, true }, + { N_("the fool"), { IPL_MAG_CURSE, 6, 10, 0, 0, -3 }, 3, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_EVIL, false, false }, + { N_("dyslexia"), { IPL_MAG_CURSE, 1, 5, 0, 0, -2 }, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_EVIL, false, false }, + { N_("magic"), { IPL_MAG, 1, 5, 200, 1000, 2 }, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true }, + { N_("the mind"), { IPL_MAG, 6, 10, 1200, 2000, 3 }, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true }, + { N_("brilliance"), { IPL_MAG, 11, 15, 2200, 3000, 4 }, 11, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true }, + { N_("sorcery"), { IPL_MAG, 16, 20, 3200, 5000, 7 }, 17, PLT_ARMO | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true }, + { N_("wizardry"), { IPL_MAG, 21, 30, 5200, 10000, 10 }, 23, PLT_STAFF | PLT_MISC, GOE_ANY, false, true }, + { N_("illness"), { IPL_VIT_CURSE, 6, 10, 0, 0, -3 }, 3, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_EVIL, false, false }, + { N_("disease"), { IPL_VIT_CURSE, 1, 5, 0, 0, -2 }, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_EVIL, false, false }, + { N_("vitality"), { IPL_VIT, 1, 5, 200, 1000, 2 }, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_GOOD, false, true }, + { N_("zest"), { IPL_VIT, 6, 10, 1200, 2000, 3 }, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_GOOD, false, true }, + { N_("vim"), { IPL_VIT, 11, 15, 2200, 3000, 4 }, 11, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_GOOD, false, true }, + { N_("vigor"), { IPL_VIT, 16, 20, 3200, 5000, 7 }, 17, PLT_ARMO | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_GOOD, false, true }, + { N_("life"), { IPL_VIT, 21, 30, 5200, 10000, 10 }, 23, PLT_MISC, GOE_GOOD, false, true }, + { N_("trouble"), { IPL_ATTRIBS_CURSE, 6, 10, 0, 0, -10 }, 12, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_EVIL, false, false }, + { N_("the pit"), { IPL_ATTRIBS_CURSE, 1, 5, 0, 0, -5 }, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_EVIL, false, false }, + { N_("the sky"), { IPL_ATTRIBS, 1, 3, 800, 4000, 5 }, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true }, + { N_("the moon"), { IPL_ATTRIBS, 4, 7, 4800, 8000, 10 }, 11, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, false, true }, + { N_("the stars"), { IPL_ATTRIBS, 8, 11, 8800, 12000, 15 }, 17, PLT_ARMO | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, false, true }, + { N_("the heavens"), { IPL_ATTRIBS, 12, 15, 12800, 20000, 20 }, 25, PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, false, true }, + { N_("the zodiac"), { IPL_ATTRIBS, 16, 20, 20800, 40000, 30 }, 30, PLT_MISC, GOE_ANY, false, true }, + { N_("the vulture"), { IPL_LIFE_CURSE, 11, 25, 0, 0, -4 }, 4, PLT_ARMO | PLT_SHLD | PLT_MISC, GOE_EVIL, false, false }, + { N_("the jackal"), { IPL_LIFE_CURSE, 1, 10, 0, 0, -2 }, 1, PLT_ARMO | PLT_SHLD | PLT_MISC, GOE_EVIL, false, false }, + { N_("the fox"), { IPL_LIFE, 10, 15, 100, 1000, 2 }, 1, PLT_ARMO | PLT_SHLD | PLT_MISC, GOE_ANY, false, true }, + { N_("the jaguar"), { IPL_LIFE, 16, 20, 1100, 2000, 3 }, 5, PLT_ARMO | PLT_SHLD | PLT_MISC, GOE_ANY, false, true }, + { N_("the eagle"), { IPL_LIFE, 21, 30, 2100, 4000, 5 }, 9, PLT_ARMO | PLT_SHLD | PLT_MISC, GOE_ANY, false, true }, + { N_("the wolf"), { IPL_LIFE, 30, 40, 4100, 6000, 7 }, 15, PLT_ARMO | PLT_SHLD | PLT_MISC, GOE_ANY, false, true }, + { N_("the tiger"), { IPL_LIFE, 41, 50, 6100, 10000, 9 }, 21, PLT_ARMO | PLT_SHLD | PLT_MISC, GOE_ANY, false, true }, + { N_("the lion"), { IPL_LIFE, 51, 60, 10100, 15000, 11 }, 27, PLT_ARMO | PLT_MISC, GOE_ANY, false, true }, + { N_("the mammoth"), { IPL_LIFE, 61, 80, 15100, 19000, 12 }, 35, PLT_ARMO , GOE_ANY, false, true }, + { N_("the whale"), { IPL_LIFE, 81, 100, 19100, 30000, 13 }, 60, PLT_ARMO , GOE_ANY, false, true }, + { N_("fragility"), { IPL_DUR_CURSE, 100, 100, 0, 0, -4 }, 3, PLT_ARMO | PLT_SHLD | PLT_WEAP , GOE_EVIL, false, false }, + { N_("brittleness"), { IPL_DUR_CURSE, 26, 75, 0, 0, -2 }, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP , GOE_EVIL, false, false }, + { N_("sturdiness"), { IPL_DUR, 26, 75, 100, 100, 2 }, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF , GOE_ANY, false, true }, + { N_("craftsmanship"), { IPL_DUR, 51, 100, 200, 200, 2 }, 6, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF , GOE_ANY, false, true }, + { N_("structure"), { IPL_DUR, 101, 200, 300, 300, 2 }, 12, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF , GOE_ANY, false, true }, + { N_("the ages"), { IPL_INDESTRUCTIBLE, 0, 0, 600, 600, 5 }, 25, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF , GOE_ANY, false, true }, + { N_("the dark"), { IPL_LIGHT_CURSE, 4, 4, 0, 0, -3 }, 6, PLT_ARMO | PLT_WEAP | PLT_MISC, GOE_EVIL, false, false }, + { N_("the night"), { IPL_LIGHT_CURSE, 2, 2, 0, 0, -2 }, 3, PLT_ARMO | PLT_WEAP | PLT_MISC, GOE_EVIL, false, false }, + { N_("light"), { IPL_LIGHT, 2, 2, 750, 750, 2 }, 4, PLT_ARMO | PLT_WEAP | PLT_MISC, GOE_GOOD, false, true }, + { N_("radiance"), { IPL_LIGHT, 4, 4, 1500, 1500, 3 }, 8, PLT_ARMO | PLT_WEAP | PLT_MISC, GOE_GOOD, false, true }, + { N_("flame"), { IPL_FIRE_ARROWS, 1, 3, 2000, 2000, 2 }, 1, PLT_BOW , GOE_ANY, false, true }, + { N_("fire"), { IPL_FIRE_ARROWS, 1, 6, 4000, 4000, 4 }, 11, PLT_BOW , GOE_ANY, false, true }, + { N_("burning"), { IPL_FIRE_ARROWS, 1, 16, 6000, 6000, 6 }, 35, PLT_BOW , GOE_ANY, false, true }, + { N_("shock"), { IPL_LIGHT_ARROWS, 1, 6, 6000, 6000, 2 }, 13, PLT_BOW , GOE_ANY, false, true }, + { N_("lightning"), { IPL_LIGHT_ARROWS, 1, 10, 8000, 8000, 4 }, 21, PLT_BOW , GOE_ANY, false, true }, + { N_("thunder"), { IPL_LIGHT_ARROWS, 1, 20, 12000, 12000, 6 }, 60, PLT_BOW , GOE_ANY, false, true }, + { N_("many"), { IPL_DUR, 100, 100, 750, 750, 2 }, 3, PLT_BOW , GOE_ANY, false, true }, + { N_("plenty"), { IPL_DUR, 200, 200, 1500, 1500, 3 }, 7, PLT_BOW , GOE_ANY, false, true }, + { N_("thorns"), { IPL_THORNS, 1, 3, 500, 500, 2 }, 1, PLT_ARMO | PLT_SHLD , GOE_ANY, false, true }, + { N_("corruption"), { IPL_NOMANA, 0, 0, -1000, -1000, 2 }, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP , GOE_EVIL, false, false }, + { N_("thieves"), { IPL_ABSHALFTRAP, 0, 0, 1500, 1500, 2 }, 11, PLT_ARMO | PLT_SHLD | PLT_MISC, GOE_ANY, false, true }, + { N_("the bear"), { IPL_KNOCKBACK, 0, 0, 750, 750, 2 }, 5, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_EVIL, false, true }, + { N_("the bat"), { IPL_STEALMANA, 3, 3, 7500, 7500, 3 }, 8, PLT_WEAP , GOE_ANY, false, true }, + { N_("vampires"), { IPL_STEALMANA, 5, 5, 15000, 15000, 3 }, 19, PLT_WEAP , GOE_ANY, false, true }, + { N_("the leech"), { IPL_STEALLIFE, 3, 3, 7500, 7500, 3 }, 8, PLT_WEAP , GOE_ANY, false, true }, + { N_("blood"), { IPL_STEALLIFE, 5, 5, 15000, 15000, 3 }, 19, PLT_WEAP , GOE_ANY, false, true }, + { N_("piercing"), { IPL_TARGAC, 1, 1, 1000, 1000, 3 }, 1, PLT_WEAP | PLT_BOW , GOE_ANY, false, true }, + { N_("puncturing"), { IPL_TARGAC, 2, 2, 2000, 2000, 6 }, 9, PLT_WEAP | PLT_BOW , GOE_ANY, false, true }, + { N_("bashing"), { IPL_TARGAC, 3, 3, 4000, 4000, 12 }, 17, PLT_WEAP , GOE_ANY, false, true }, + { N_("readiness"), { IPL_FASTATTACK, 1, 1, 2000, 2000, 2 }, 1, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, false, true }, + { N_("swiftness"), { IPL_FASTATTACK, 2, 2, 4000, 4000, 4 }, 10, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, false, true }, + { N_("speed"), { IPL_FASTATTACK, 3, 3, 8000, 8000, 8 }, 19, PLT_WEAP | PLT_STAFF , GOE_ANY, false, true }, + { N_("haste"), { IPL_FASTATTACK, 4, 4, 16000, 16000, 16 }, 27, PLT_WEAP | PLT_STAFF , GOE_ANY, false, true }, + { N_("balance"), { IPL_FASTRECOVER, 1, 1, 2000, 2000, 2 }, 1, PLT_ARMO | PLT_MISC, GOE_ANY, false, true }, + { N_("stability"), { IPL_FASTRECOVER, 2, 2, 4000, 4000, 4 }, 10, PLT_ARMO | PLT_MISC, GOE_ANY, false, true }, + { N_("harmony"), { IPL_FASTRECOVER, 3, 3, 8000, 8000, 8 }, 20, PLT_ARMO | PLT_MISC, GOE_ANY, false, true }, + { N_("blocking"), { IPL_FASTBLOCK, 1, 1, 4000, 4000, 4 }, 5, PLT_SHLD , GOE_ANY, false, true }, + { N_("devastation"), { IPL_DEVASTATION, 1, 1, 1200, 1200, 3 }, 1, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, false, true }, + { N_("decay"), { IPL_DECAY, 150, 250, 200, 200, 2 }, 1, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, false, true }, + // TRANSLATORS: Item suffix section end. + { N_("peril"), { IPL_PERIL, 1, 1, 500, 500, 1 }, 5, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, false, true }, + { "", { IPL_INVALID, 0, 0, 0, 0, 0 }, 0, 0 , GOE_ANY, false, false }, // clang-format on }; /** Contains the data related to each unique item ID. */ const UItemStruct UniqueItemList[] = { // clang-format off - // UIName, UIItemId, UIMinLvl, UINumPL, UIValue, UIPower1, UIParam1, UIParam2, UIPower2, UIParam3, UIParam4, UIPower3, UIParam5, UIParam6, UIPower4, UIParam7, UIParam8, UIPower5, UIParam9, UIParam10, UIPower6, UIParam11, UIParam12 - // TRANSLATORS: Unique Item section - { N_("The Butcher's Cleaver"), UITYPE_CLEAVER, 1, 3, 3650, IPL_STR, 10, 10, IPL_SETDAM, 4, 24, IPL_SETDUR, 10, 10, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("The Undead Crown"), UITYPE_SKCROWN, 1, 3, 16650, IPL_RNDSTEALLIFE, 0, 0, IPL_SETAC, 8, 8, IPL_INVCURS, 77, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("Empyrean Band"), UITYPE_INFRARING, 1, 4, 8000, IPL_ATTRIBS, 2, 2, IPL_LIGHT, 2, 2, IPL_FASTRECOVER, 1, 1, IPL_ABSHALFTRAP, 0, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("Optic Amulet"), UITYPE_OPTAMULET, 1, 5, 9750, IPL_LIGHT, 2, 2, IPL_LIGHTRES, 20, 20, IPL_GETHIT, 1, 1, IPL_MAG, 5, 5, IPL_INVCURS, 44, 0, IPL_TOHIT, 0, 0 }, - { N_("Ring of Truth"), UITYPE_TRING, 1, 4, 9100, IPL_LIFE, 10, 10, IPL_GETHIT, 1, 1, IPL_ALLRES, 10, 10, IPL_INVCURS, 10, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("Harlequin Crest"), UITYPE_HARCREST, 1, 6, 4000, IPL_AC_CURSE, 3, 3, IPL_GETHIT, 1, 1, IPL_ATTRIBS, 2, 2, IPL_LIFE, 7, 7, IPL_MANA, 7, 7, IPL_INVCURS, 81, 0 }, - { N_("Veil of Steel"), UITYPE_STEELVEIL, 1, 6, 63800, IPL_ALLRES, 50, 50, IPL_LIGHT_CURSE, 2, 2, IPL_ACP, 60, 60, IPL_MANA_CURSE, 30, 30, IPL_STR, 15, 15, IPL_VIT, 15, 15 }, - { N_("Arkaine's Valor"), UITYPE_ARMOFVAL, 1, 4, 42000, IPL_SETAC, 25, 25, IPL_VIT, 10, 10, IPL_GETHIT, 3, 3, IPL_FASTRECOVER, 3, 3, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("Griswold's Edge"), UITYPE_GRISWOLD, 1, 6, 42000, IPL_FIREDAM, 1, 10, IPL_TOHIT, 25, 25, IPL_FASTATTACK, 2, 2, IPL_KNOCKBACK, 0, 0, IPL_MANA, 20, 20, IPL_LIFE_CURSE, 20, 20 }, - { N_("Bovine Plate"), UITYPE_BOVINE, 1, 6, 400, IPL_SETAC, 150, 150, IPL_INDESTRUCTIBLE, 0, 0, IPL_LIGHT, 5, 5, IPL_ALLRES, 30, 30, IPL_MANA_CURSE, 50, 50, IPL_SPLLVLADD, -2, -2 }, - { N_("The Rift Bow"), UITYPE_SHORTBOW, 1, 3, 1800, IPL_RNDARROWVEL, 0, 0, IPL_DAMMOD, 2, 2, IPL_DEX_CURSE, 3, 3, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("The Needler"), UITYPE_SHORTBOW, 2, 4, 8900, IPL_TOHIT, 50, 50, IPL_SETDAM, 1, 3, IPL_FASTATTACK, 2, 2, IPL_INVCURS, 158, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("The Celestial Bow"), UITYPE_LONGBOW, 2, 4, 1200, IPL_NOMINSTR, 0, 0, IPL_DAMMOD, 2, 2, IPL_SETAC, 5, 5, IPL_INVCURS, 133, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("Deadly Hunter"), UITYPE_COMPBOW, 3, 4, 8750, IPL_3XDAMVDEM, 10, 10, IPL_TOHIT, 20, 20, IPL_MAG_CURSE, 5, 5, IPL_INVCURS, 108, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("Bow of the Dead"), UITYPE_COMPBOW, 5, 6, 2500, IPL_TOHIT, 10, 10, IPL_DEX, 4, 4, IPL_VIT_CURSE, 3, 3, IPL_LIGHT_CURSE, 2, 2, IPL_SETDUR, 30, 30, IPL_INVCURS, 108, 0 }, - { N_("The Blackoak Bow"), UITYPE_LONGBOW, 5, 4, 2500, IPL_DEX, 10, 10, IPL_VIT_CURSE, 10, 10, IPL_DAMP, 50, 50, IPL_LIGHT_CURSE, 1, 1, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("Flamedart"), UITYPE_HUNTBOW, 10, 4, 14250, IPL_FIRE_ARROWS, 0, 0, IPL_FIREDAM, 1, 6, IPL_TOHIT, 20, 20, IPL_FIRERES, 40, 40, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("Fleshstinger"), UITYPE_LONGBOW, 13, 4, 16500, IPL_DEX, 15, 15, IPL_TOHIT, 40, 40, IPL_DAMP, 80, 80, IPL_DUR, 6, 6, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("Windforce"), UITYPE_WARBOW, 17, 4, 37750, IPL_STR, 5, 5, IPL_DAMP, 200, 200, IPL_KNOCKBACK, 0, 0, IPL_INVCURS, 164, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("Eaglehorn"), UITYPE_BATTLEBOW, 26, 5, 42500, IPL_DEX, 20, 20, IPL_TOHIT, 50, 50, IPL_DAMP, 100, 100, IPL_INDESTRUCTIBLE, 0, 0, IPL_INVCURS, 108, 0, IPL_TOHIT, 0, 0 }, - { N_("Gonnagal's Dirk"), UITYPE_DAGGER, 1, 5, 7040, IPL_DEX_CURSE, 5, 5, IPL_DAMMOD, 4, 4, IPL_FASTATTACK, 2, 2, IPL_FIRERES, 25, 25, IPL_INVCURS, 54, 0, IPL_TOHIT, 0, 0 }, - { N_("The Defender"), UITYPE_SABRE, 1, 3, 2000, IPL_SETAC, 5, 5, IPL_VIT, 5, 5, IPL_TOHIT_CURSE, 5, 5, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("Gryphons Claw"), UITYPE_FALCHION, 1, 4, 1000, IPL_DAMP, 100, 100, IPL_MAG_CURSE, 2, 2, IPL_DEX_CURSE, 5, 5, IPL_INVCURS, 68, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("Black Razor"), UITYPE_DAGGER, 1, 4, 2000, IPL_DAMP, 150, 150, IPL_VIT, 2, 2, IPL_SETDUR, 5, 5, IPL_INVCURS, 53, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("Gibbous Moon"), UITYPE_BROADSWR, 2, 4, 6660, IPL_ATTRIBS, 2, 2, IPL_DAMP, 25, 25, IPL_MANA, 15, 15, IPL_LIGHT_CURSE, 3, 3, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("Ice Shank"), UITYPE_LONGSWR, 3, 3, 5250, IPL_FIRERES, 40, 40, IPL_SETDUR, 15, 15, IPL_STR, 5, 10, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("The Executioner's Blade"), UITYPE_FALCHION, 3, 5, 7080, IPL_DAMP, 150, 150, IPL_LIFE_CURSE, 10, 10, IPL_LIGHT_CURSE, 1, 1, IPL_DUR, 200, 200, IPL_INVCURS, 58, 0, IPL_TOHIT, 0, 0 }, - { N_("The Bonesaw"), UITYPE_CLAYMORE, 6, 6, 4400, IPL_DAMMOD, 10, 10, IPL_STR, 10, 10, IPL_MAG_CURSE, 5, 5, IPL_DEX_CURSE, 5, 5, IPL_LIFE, 10, 10, IPL_MANA_CURSE, 10, 10 }, - { N_("Shadowhawk"), UITYPE_BROADSWR, 8, 4, 13750, IPL_LIGHT_CURSE, 2, 2, IPL_STEALLIFE, 5, 5, IPL_TOHIT, 15, 15, IPL_ALLRES, 5, 5, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("Wizardspike"), UITYPE_DAGGER, 11, 5, 12920, IPL_MAG, 15, 15, IPL_MANA, 35, 35, IPL_TOHIT, 25, 25, IPL_ALLRES, 15, 15, IPL_INVCURS, 50, 0, IPL_TOHIT, 0, 0 }, - { N_("Lightsabre"), UITYPE_SABRE, 13, 4, 19150, IPL_LIGHT, 2, 2, IPL_LIGHTDAM, 1, 10, IPL_TOHIT, 20, 20, IPL_LIGHTRES, 50, 50, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("The Falcon's Talon"), UITYPE_SCIMITAR, 15, 5, 7867, IPL_FASTATTACK, 4, 4, IPL_TOHIT, 20, 20, IPL_DAMP_CURSE, 33, 33, IPL_DEX, 10, 10, IPL_INVCURS, 68, 0, IPL_TOHIT, 0, 0 }, - { N_("Inferno"), UITYPE_LONGSWR, 17, 4, 34600, IPL_FIREDAM, 2, 12, IPL_LIGHT, 3, 3, IPL_MANA, 20, 20, IPL_FIRERES, 80, 80, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("Doombringer"), UITYPE_BASTARDSWR, 19, 5, 18250, IPL_TOHIT, 25, 25, IPL_DAMP, 250, 250, IPL_ATTRIBS_CURSE, 5, 5, IPL_LIFE_CURSE, 25, 25, IPL_LIGHT_CURSE, 2, 2, IPL_TOHIT, 0, 0 }, - { N_("The Grizzly"), UITYPE_TWOHANDSWR, 23, 6, 50000, IPL_STR, 20, 20, IPL_VIT_CURSE, 5, 5, IPL_DAMP, 200, 200, IPL_KNOCKBACK, 0, 0, IPL_DUR, 100, 100, IPL_INVCURS, 160, 0 }, - { N_("The Grandfather"), UITYPE_GREATSWR, 27, 6, 119800, IPL_ONEHAND, 0, 0, IPL_ATTRIBS, 5, 5, IPL_TOHIT, 20, 20, IPL_DAMP, 70, 70, IPL_LIFE, 20, 20, IPL_INVCURS, 161, 0 }, - { N_("The Mangler"), UITYPE_LARGEAXE, 2, 5, 2850, IPL_DAMP, 200, 200, IPL_DEX_CURSE, 5, 5, IPL_MAG_CURSE, 5, 5, IPL_MANA_CURSE, 10, 10, IPL_INVCURS, 144, 0, IPL_TOHIT, 0, 0 }, - { N_("Sharp Beak"), UITYPE_LARGEAXE, 2, 4, 2850, IPL_LIFE, 20, 20, IPL_MAG_CURSE, 10, 10, IPL_MANA_CURSE, 10, 10, IPL_INVCURS, 143, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("BloodSlayer"), UITYPE_BROADAXE, 3, 5, 2500, IPL_DAMP, 100, 100, IPL_3XDAMVDEM, 50, 50, IPL_ATTRIBS_CURSE, 5, 5, IPL_SPLLVLADD, -1, -1, IPL_INVCURS, 144, 0, IPL_TOHIT, 0, 0 }, - { N_("The Celestial Axe"), UITYPE_BATTLEAXE, 4, 4, 14100, IPL_NOMINSTR, 0, 0, IPL_TOHIT, 15, 15, IPL_LIFE, 15, 15, IPL_STR_CURSE, 15, 15, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("Wicked Axe"), UITYPE_LARGEAXE, 5, 6, 31150, IPL_TOHIT, 30, 30, IPL_DEX, 10, 10, IPL_VIT_CURSE, 10, 10, IPL_GETHIT, 1, 6, IPL_INDESTRUCTIBLE, 0, 0, IPL_INVCURS, 143, 0 }, - { N_("Stonecleaver"), UITYPE_BROADAXE, 7, 5, 23900, IPL_LIFE, 30, 30, IPL_TOHIT, 20, 20, IPL_DAMP, 50, 50, IPL_LIGHTRES, 40, 40, IPL_INVCURS, 104, 0, IPL_TOHIT, 0, 0 }, - { N_("Aguinara's Hatchet"), UITYPE_SMALLAXE, 12, 3, 24800, IPL_SPLLVLADD, 1, 1, IPL_MAG, 10, 10, IPL_MAGICRES, 80, 80, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("Hellslayer"), UITYPE_BATTLEAXE, 15, 5, 26200, IPL_STR, 8, 8, IPL_VIT, 8, 8, IPL_DAMP, 100, 100, IPL_LIFE, 25, 25, IPL_MANA_CURSE, 25, 25, IPL_TOHIT, 0, 0 }, - { N_("Messerschmidt's Reaver"), UITYPE_GREATAXE, 25, 6, 58000, IPL_DAMP, 200, 200, IPL_DAMMOD, 15, 15, IPL_ATTRIBS, 5, 5, IPL_LIFE_CURSE, 50, 50, IPL_FIREDAM, 2, 12, IPL_INVCURS, 163, 0 }, - { N_("Crackrust"), UITYPE_MACE, 1, 5, 11375, IPL_ATTRIBS, 2, 2, IPL_INDESTRUCTIBLE, 0, 0, IPL_ALLRES, 15, 15, IPL_DAMP, 50, 50, IPL_SPLLVLADD, -1, -1, IPL_TOHIT, 0, 0 }, - { N_("Hammer of Jholm"), UITYPE_MAUL, 1, 4, 8700, IPL_DAMP, 4, 10, IPL_INDESTRUCTIBLE, 0, 0, IPL_STR, 3, 3, IPL_TOHIT, 15, 15, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("Civerb's Cudgel"), UITYPE_MACE, 1, 3, 2000, IPL_3XDAMVDEM, 35, 35, IPL_DEX_CURSE, 5, 5, IPL_MAG_CURSE, 2, 2, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("The Celestial Star"), UITYPE_FLAIL, 2, 5, 7810, IPL_NOMINSTR, 0, 0, IPL_LIGHT, 2, 2, IPL_DAMMOD, 10, 10, IPL_AC_CURSE, 8, 8, IPL_INVCURS, 131, 0, IPL_TOHIT, 0, 0 }, - { N_("Baranar's Star"), UITYPE_MORNSTAR, 5, 6, 6850, IPL_TOHIT, 12, 12, IPL_DAMP, 80, 80, IPL_FASTATTACK, 1, 1, IPL_VIT, 4, 4, IPL_DEX_CURSE, 4, 4, IPL_SETDUR, 60, 60 }, - { N_("Gnarled Root"), UITYPE_SPIKCLUB, 9, 6, 9820, IPL_TOHIT, 20, 20, IPL_DAMP, 300, 300, IPL_DEX, 10, 10, IPL_MAG, 5, 5, IPL_ALLRES, 10, 10, IPL_AC_CURSE, 10, 10 }, - { N_("The Cranium Basher"), UITYPE_MAUL, 12, 6, 36500, IPL_DAMMOD, 20, 20, IPL_STR, 15, 15, IPL_INDESTRUCTIBLE, 0, 0, IPL_MANA_CURSE, 150, 150, IPL_ALLRES, 5, 5, IPL_INVCURS, 122, 0 }, - { N_("Schaefer's Hammer"), UITYPE_WARHAMMER, 16, 6, 56125, IPL_DAMP_CURSE, 100, 100, IPL_LIGHTDAM, 1, 50, IPL_LIFE, 50, 50, IPL_TOHIT, 30, 30, IPL_LIGHTRES, 80, 80, IPL_LIGHT, 1, 1 }, - { N_("Dreamflange"), UITYPE_MACE, 26, 5, 26450, IPL_MAG, 30, 30, IPL_MANA, 50, 50, IPL_MAGICRES, 50, 50, IPL_LIGHT, 2, 2, IPL_SPLLVLADD, 1, 1, IPL_TOHIT, 0, 0 }, - { N_("Staff of Shadows"), UITYPE_LONGSTAFF, 2, 5, 1250, IPL_MAG_CURSE, 10, 10, IPL_TOHIT, 10, 10, IPL_DAMP, 60, 60, IPL_LIGHT_CURSE, 2, 2, IPL_FASTATTACK, 1, 1, IPL_TOHIT, 0, 0 }, - { N_("Immolator"), UITYPE_LONGSTAFF, 4, 4, 3900, IPL_FIRERES, 20, 20, IPL_FIREDAM, 4, 4, IPL_MANA, 10, 10, IPL_VIT_CURSE, 5, 5, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("Storm Spire"), UITYPE_WARSTAFF, 8, 4, 22500, IPL_LIGHTRES, 50, 50, IPL_LIGHTDAM, 2, 8, IPL_STR, 10, 10, IPL_MAG_CURSE, 10, 10, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("Gleamsong"), UITYPE_SHORTSTAFF, 8, 4, 6520, IPL_MANA, 25, 25, IPL_STR_CURSE, 3, 3, IPL_VIT_CURSE, 3, 3, IPL_SPELL, 10, 76, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("Thundercall"), UITYPE_COMPSTAFF, 14, 5, 22250, IPL_TOHIT, 35, 35, IPL_LIGHTDAM, 1, 10, IPL_SPELL, 3, 76, IPL_LIGHTRES, 30, 30, IPL_LIGHT, 2, 2, IPL_TOHIT, 0, 0 }, - { N_("The Protector"), UITYPE_SHORTSTAFF, 16, 6, 17240, IPL_VIT, 5, 5, IPL_GETHIT, 5, 5, IPL_SETAC, 40, 40, IPL_SPELL, 2, 86, IPL_THORNS, 1, 3, IPL_INVCURS, 162, 0 }, - { N_("Naj's Puzzler"), UITYPE_LONGSTAFF, 18, 5, 34000, IPL_MAG, 20, 20, IPL_DEX, 10, 10, IPL_ALLRES, 20, 20, IPL_SPELL, 23, 57, IPL_LIFE_CURSE, 25, 25, IPL_TOHIT, 0, 0 }, - { N_("Mindcry"), UITYPE_QUARSTAFF, 20, 4, 41500, IPL_MAG, 15, 15, IPL_SPELL, 13, 69, IPL_ALLRES, 15, 15, IPL_SPLLVLADD, 1, 1, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("Rod of Onan"), UITYPE_WARSTAFF, 22, 3, 44167, IPL_SPELL, 21, 50, IPL_DAMP, 100, 100, IPL_ATTRIBS, 5, 5, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("Helm of Sprits"), UITYPE_HELM, 1, 2, 7525, IPL_STEALLIFE, 5, 5, IPL_INVCURS, 77, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("Thinking Cap"), UITYPE_SKULLCAP, 6, 5, 2020, IPL_MANA, 30, 30, IPL_SPLLVLADD, 2, 2, IPL_ALLRES, 20, 20, IPL_SETDUR, 1, 1, IPL_INVCURS, 93, 0, IPL_TOHIT, 0, 0 }, - { N_("OverLord's Helm"), UITYPE_HELM, 7, 6, 12500, IPL_STR, 20, 20, IPL_DEX, 15, 15, IPL_VIT, 5, 5, IPL_MAG_CURSE, 20, 20, IPL_SETDUR, 15, 15, IPL_INVCURS, 99, 0 }, - { N_("Fool's Crest"), UITYPE_HELM, 12, 5, 10150, IPL_ATTRIBS_CURSE, 4, 4, IPL_LIFE, 100, 100, IPL_GETHIT_CURSE, 1, 6, IPL_THORNS, 1, 3, IPL_INVCURS, 80, 0, IPL_TOHIT, 0, 0 }, - { N_("Gotterdamerung"), UITYPE_GREATHELM, 21, 6, 54900, IPL_ATTRIBS, 20, 20, IPL_SETAC, 60, 60, IPL_GETHIT, 4, 4, IPL_ALLRESZERO, 0, 0, IPL_LIGHT_CURSE, 4, 4, IPL_INVCURS, 85, 0 }, - { N_("Royal Circlet"), UITYPE_CROWN, 27, 5, 24875, IPL_ATTRIBS, 10, 10, IPL_MANA, 40, 40, IPL_SETAC, 40, 40, IPL_LIGHT, 1, 1, IPL_INVCURS, 79, 0, IPL_TOHIT, 0, 0 }, - { N_("Torn Flesh of Souls"), UITYPE_RAGS, 2, 5, 4825, IPL_SETAC, 8, 8, IPL_VIT, 10, 10, IPL_GETHIT, 1, 1, IPL_INDESTRUCTIBLE, 0, 0, IPL_INVCURS, 92, 0, IPL_TOHIT, 0, 0 }, - { N_("The Gladiator's Bane"), UITYPE_STUDARMOR, 6, 4, 3450, IPL_SETAC, 25, 25, IPL_GETHIT, 2, 2, IPL_DUR, 200, 200, IPL_ATTRIBS_CURSE, 3, 3, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("The Rainbow Cloak"), UITYPE_CLOAK, 2, 6, 4900, IPL_SETAC, 10, 10, IPL_ATTRIBS, 1, 1, IPL_ALLRES, 10, 10, IPL_LIFE, 5, 5, IPL_DUR, 50, 50, IPL_INVCURS, 138, 0 }, - { N_("Leather of Aut"), UITYPE_LEATHARMOR, 4, 5, 10550, IPL_SETAC, 15, 15, IPL_STR, 5, 5, IPL_MAG_CURSE, 5, 5, IPL_DEX, 5, 5, IPL_INDESTRUCTIBLE, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("Wisdom's Wrap"), UITYPE_ROBE, 5, 6, 6200, IPL_MAG, 5, 5, IPL_MANA, 10, 10, IPL_LIGHTRES, 25, 25, IPL_SETAC, 15, 15, IPL_GETHIT, 1, 1, IPL_INVCURS, 138, 0 }, - { N_("Sparking Mail"), UITYPE_CHAINMAIL, 9, 2, 15750, IPL_SETAC, 30, 30, IPL_LIGHTDAM, 1, 10, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("Scavenger Carapace"), UITYPE_BREASTPLATE, 13, 4, 14000, IPL_GETHIT, 15, 15, IPL_AC_CURSE, 30, 30, IPL_DEX, 5, 5, IPL_LIGHTRES, 40, 40, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("Nightscape"), UITYPE_CAPE, 16, 6, 11600, IPL_FASTRECOVER, 2, 2, IPL_LIGHT_CURSE, 4, 4, IPL_SETAC, 15, 15, IPL_DEX, 3, 3, IPL_ALLRES, 20, 20, IPL_INVCURS, 138, 0 }, - { N_("Naj's Light Plate"), UITYPE_PLATEMAIL, 19, 6, 78700, IPL_NOMINSTR, 0, 0, IPL_MAG, 5, 5, IPL_MANA, 20, 20, IPL_ALLRES, 20, 20, IPL_SPLLVLADD, 1, 1, IPL_INVCURS, 159, 0 }, - { N_("Demonspike Coat"), UITYPE_FULLPLATE, 25, 5, 251175, IPL_SETAC, 100, 100, IPL_GETHIT, 6, 6, IPL_STR, 10, 10, IPL_INDESTRUCTIBLE, 0, 0, IPL_FIRERES, 50, 50, IPL_TOHIT, 0, 0 }, - { N_("The Deflector"), UITYPE_BUCKLER, 1, 5, 1500, IPL_SETAC, 7, 7, IPL_ALLRES, 10, 10, IPL_DAMP_CURSE, 20, 20, IPL_TOHIT_CURSE, 5, 5, IPL_INVCURS, 83, 0, IPL_TOHIT, 0, 0 }, - { N_("Split Skull Shield"), UITYPE_BUCKLER, 1, 6, 2025, IPL_SETAC, 10, 10, IPL_LIFE, 10, 10, IPL_STR, 2, 2, IPL_LIGHT_CURSE, 1, 1, IPL_SETDUR, 15, 15, IPL_INVCURS, 116, 0 }, - { N_("Dragon's Breach"), UITYPE_KITESHIELD, 2, 6, 19200, IPL_FIRERES, 25, 25, IPL_STR, 5, 5, IPL_SETAC, 20, 20, IPL_MAG_CURSE, 5, 5, IPL_INDESTRUCTIBLE, 0, 0, IPL_INVCURS, 117, 0 }, - { N_("Blackoak Shield"), UITYPE_SMALLSHIELD, 4, 6, 5725, IPL_DEX, 10, 10, IPL_VIT_CURSE, 10, 10, IPL_SETAC, 18, 18, IPL_LIGHT_CURSE, 1, 1, IPL_DUR, 150, 150, IPL_INVCURS, 146, 0 }, - { N_("Holy Defender"), UITYPE_LARGESHIELD, 10, 6, 13800, IPL_SETAC, 15, 15, IPL_GETHIT, 2, 2, IPL_FIRERES, 20, 20, IPL_DUR, 200, 200, IPL_FASTBLOCK, 1, 1, IPL_INVCURS, 146, 0 }, - { N_("Stormshield"), UITYPE_GOTHSHIELD, 24, 6, 49000, IPL_SETAC, 40, 40, IPL_GETHIT_CURSE, 4, 4, IPL_STR, 10, 10, IPL_INDESTRUCTIBLE, 0, 0, IPL_FASTBLOCK, 1, 1, IPL_INVCURS, 148, 0 }, - { N_("Bramble"), UITYPE_RING, 1, 4, 1000, IPL_ATTRIBS_CURSE, 2, 2, IPL_DAMMOD, 3, 3, IPL_MANA, 10, 10, IPL_INVCURS, 9, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("Ring of Regha"), UITYPE_RING, 1, 6, 4175, IPL_MAG, 10, 10, IPL_MAGICRES, 10, 10, IPL_LIGHT, 1, 1, IPL_STR_CURSE, 3, 3, IPL_DEX_CURSE, 3, 3, IPL_INVCURS, 11, 0 }, - { N_("The Bleeder"), UITYPE_RING, 2, 4, 8500, IPL_MAGICRES, 20, 20, IPL_MANA, 30, 30, IPL_LIFE_CURSE, 10, 10, IPL_INVCURS, 8, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("Constricting Ring"), UITYPE_RING, 5, 3, 62000, IPL_ALLRES, 75, 75, IPL_DRAINLIFE, 0, 0, IPL_INVCURS, 14, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("Ring of Engagement"), UITYPE_RING, 11, 5, 12476, IPL_GETHIT, 1, 2, IPL_THORNS, 1, 3, IPL_SETAC, 5, 5, IPL_TARGAC, 4, 12, IPL_INVCURS, 13, 0, IPL_TOHIT, 0, 0 }, - { N_("Giant's Knuckle"), UITYPE_RING, 8, 3, 8000, IPL_STR, 60, 60, IPL_DEX_CURSE, 30, 30, IPL_INVCURS, 179, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("Mercurial Ring"), UITYPE_RING, 8, 3, 8000, IPL_DEX, 60, 60, IPL_STR_CURSE, 30, 30, IPL_INVCURS, 176, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("Xorine's Ring"), UITYPE_RING, 8, 3, 8000, IPL_MAG, 60, 60, IPL_STR_CURSE, 30, 30, IPL_INVCURS, 168, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("Karik's Ring"), UITYPE_RING, 8, 3, 8000, IPL_VIT, 60, 60, IPL_MAG_CURSE, 30, 30, IPL_INVCURS, 173, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("Ring of Magma"), UITYPE_RING, 8, 4, 8000, IPL_FIRERES, 60, 60, IPL_LIGHTRES_CURSE, 30, 30, IPL_MAGICRES_CURSE, 30, 30, IPL_INVCURS, 184, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("Ring of the Mystics"), UITYPE_RING, 8, 4, 8000, IPL_MAGICRES, 60, 60, IPL_FIRERES_CURSE, 30, 30, IPL_LIGHTRES_CURSE, 30, 30, IPL_INVCURS, 181, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("Ring of Thunder"), UITYPE_RING, 8, 4, 8000, IPL_LIGHTRES, 60, 60, IPL_FIRERES_CURSE, 30, 30, IPL_MAGICRES_CURSE, 30, 30, IPL_INVCURS, 177, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("Amulet of Warding"), UITYPE_AMULET, 12, 3, 30000, IPL_ALLRES, 40, 40, IPL_LIFE_CURSE, 100, 100, IPL_INVCURS, 170, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("Gnat Sting"), UITYPE_HUNTBOW, 15, 5, 30000, IPL_MULT_ARROWS, 3, 3, IPL_SETDAM, 1, 2, IPL_FASTATTACK, 1, 1, IPL_INDESTRUCTIBLE, 0, 0, IPL_INVCURS, 210, 0, IPL_TOHIT, 0, 0 }, - { N_("Flambeau"), UITYPE_COMPBOW, 11, 4, 30000, IPL_FIREBALL, 15, 20, IPL_SETDAM, 0, 0, IPL_INDESTRUCTIBLE, 0, 0, IPL_INVCURS, 209, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("Armor of Gloom"), UITYPE_FULLPLATE, 25, 5, 200000, IPL_NOMINSTR, 0, 0, IPL_SETAC, 225, 225, IPL_ALLRESZERO, 0, 0, IPL_LIGHT_CURSE, 2, 2, IPL_INVCURS, 203, 0, IPL_TOHIT, 0, 0 }, - { N_("Blitzen"), UITYPE_COMPBOW, 13, 4, 30000, IPL_ADDACLIFE, 10, 15, IPL_SETDAM, 0, 0, IPL_INDESTRUCTIBLE, 0, 0, IPL_INVCURS, 219, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("Thunderclap"), UITYPE_WARHAMMER, 13, 6, 30000, IPL_ADDMANAAC, 3, 6, IPL_STR, 20, 20, IPL_LIGHTRES, 30, 30, IPL_LIGHT, 2, 2, IPL_INDESTRUCTIBLE, 0, 0, IPL_INVCURS, 205, 0 }, - { N_("Shirotachi"), UITYPE_GREATSWR, 21, 4, 36000, IPL_ONEHAND, 0, 0, IPL_FASTATTACK, 4, 4, IPL_TARGAC, 2, 2, IPL_LIGHTDAM, 6, 6, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("Eater of Souls"), UITYPE_TWOHANDSWR, 23, 6, 42000, IPL_INDESTRUCTIBLE, 0, 0, IPL_LIFE, 50, 50, IPL_STEALLIFE, 5, 5, IPL_STEALMANA, 5, 5, IPL_DRAINLIFE, 0, 0, IPL_INVCURS, 200, 0 }, - { N_("Diamondedge"), UITYPE_LONGSWR, 17, 6, 42000, IPL_SETDUR, 10, 10, IPL_TOHIT, 50, 50, IPL_DAMP, 100, 100, IPL_LIGHTRES, 50, 50, IPL_SETAC, 10, 10, IPL_INVCURS, 206, 0 }, - { N_("Bone Chain Armor"), UITYPE_CHAINMAIL, 13, 3, 36000, IPL_SETAC, 40, 40, IPL_ACUNDEAD, 0, 0, IPL_INVCURS, 204, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("Demon Plate Armor"), UITYPE_FULLPLATE, 25, 3, 80000, IPL_SETAC, 80, 80, IPL_ACDEMON, 0, 0, IPL_INVCURS, 225, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { N_("Acolyte's Amulet"), UITYPE_AMULET, 10, 2, 10000, IPL_MANATOLIFE, 50, 50, IPL_INVCURS, 183, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - // TRANSLATORS: Unique Item section end. - { N_("Gladiator's Ring"), UITYPE_RING, 10, 2, 10000, IPL_LIFETOMANA, 40, 40, IPL_INVCURS, 186, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, - { "", UITYPE_INVALID, 0, 0, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0, IPL_TOHIT, 0, 0 }, + // UIName, UIItemId, UIMinLvl, UINumPL, UIValue, ItemPower[0], ItemPower[1], ItemPower[2], ItemPower[3], ItemPower[4], ItemPower[5] + // TRANSLATORS: Unique Item section + { N_("The Butcher's Cleaver"), UITYPE_CLEAVER, 1, 3, 3650, { { IPL_STR, 10, 10, 0, 0 ,1 }, { IPL_SETDAM, 4, 24, 0, 0, 1 }, { IPL_SETDUR, 10, 10, 0 ,0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("The Undead Crown"), UITYPE_SKCROWN, 1, 3, 16650, { { IPL_RNDSTEALLIFE, 0, 0, 0, 0 ,1 }, { IPL_SETAC, 8, 8, 0, 0, 1 }, { IPL_INVCURS, 77, 0, 0 ,0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Empyrean Band"), UITYPE_INFRARING, 1, 4, 8000, { { IPL_ATTRIBS, 2, 2, 0, 0 ,1 }, { IPL_LIGHT, 2, 2, 0, 0, 1 }, { IPL_FASTRECOVER, 1, 1, 0 ,0, 1 }, { IPL_ABSHALFTRAP, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Optic Amulet"), UITYPE_OPTAMULET, 1, 5, 9750, { { IPL_LIGHT, 2, 2, 0, 0 ,1 }, { IPL_LIGHTRES, 20, 20, 0, 0, 1 }, { IPL_GETHIT, 1, 1, 0 ,0, 1 }, { IPL_MAG, 5, 5, 0, 0, 1 }, { IPL_INVCURS, 44, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Ring of Truth"), UITYPE_TRING, 1, 4, 9100, { { IPL_LIFE, 10, 10, 0, 0 ,1 }, { IPL_GETHIT, 1, 1, 0, 0, 1 }, { IPL_ALLRES, 10, 10, 0 ,0, 1 }, { IPL_INVCURS, 10, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Harlequin Crest"), UITYPE_HARCREST, 1, 6, 4000, { { IPL_AC_CURSE, 3, 3, 0, 0 ,1 }, { IPL_GETHIT, 1, 1, 0, 0, 1 }, { IPL_ATTRIBS, 2, 2, 0 ,0, 1 }, { IPL_LIFE, 7, 7, 0, 0, 1 }, { IPL_MANA, 7, 7, 0, 0, 1 }, { IPL_INVCURS, 81, 0, 0, 0, 1 } } }, + { N_("Veil of Steel"), UITYPE_STEELVEIL, 1, 6, 63800, { { IPL_ALLRES, 50, 50, 0, 0 ,1 }, { IPL_LIGHT_CURSE, 2, 2, 0, 0, 1 }, { IPL_ACP, 60, 60, 0 ,0, 1 }, { IPL_MANA_CURSE, 30, 30, 0, 0, 1 }, { IPL_STR, 15, 15, 0, 0, 1 }, { IPL_VIT, 15, 15, 0, 0, 1 } } }, + { N_("Arkaine's Valor"), UITYPE_ARMOFVAL, 1, 4, 42000, { { IPL_SETAC, 25, 25, 0, 0 ,1 }, { IPL_VIT, 10, 10, 0, 0, 1 }, { IPL_GETHIT, 3, 3, 0 ,0, 1 }, { IPL_FASTRECOVER, 3, 3, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Griswold's Edge"), UITYPE_GRISWOLD, 1, 6, 42000, { { IPL_FIREDAM, 1, 10, 0, 0 ,1 }, { IPL_TOHIT, 25, 25, 0, 0, 1 }, { IPL_FASTATTACK, 2, 2, 0 ,0, 1 }, { IPL_KNOCKBACK, 0, 0, 0, 0, 1 }, { IPL_MANA, 20, 20, 0, 0, 1 }, { IPL_LIFE_CURSE, 20, 20, 0, 0, 1 } } }, + { N_("Bovine Plate"), UITYPE_BOVINE, 1, 6, 400, { { IPL_SETAC, 150, 150, 0, 0 ,1 }, { IPL_INDESTRUCTIBLE, 0, 0, 0, 0, 1 }, { IPL_LIGHT, 5, 5, 0 ,0, 1 }, { IPL_ALLRES, 30, 30, 0, 0, 1 }, { IPL_MANA_CURSE, 50, 50, 0, 0, 1 }, { IPL_SPLLVLADD, -2, -2, 0, 0, 1 } } }, + { N_("The Rift Bow"), UITYPE_SHORTBOW, 1, 3, 1800, { { IPL_RNDARROWVEL, 0, 0, 0, 0 ,1 }, { IPL_DAMMOD, 2, 2, 0, 0, 1 }, { IPL_DEX_CURSE, 3, 3, 0 ,0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("The Needler"), UITYPE_SHORTBOW, 2, 4, 8900, { { IPL_TOHIT, 50, 50, 0, 0 ,1 }, { IPL_SETDAM, 1, 3, 0, 0, 1 }, { IPL_FASTATTACK, 2, 2, 0 ,0, 1 }, { IPL_INVCURS, 158, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("The Celestial Bow"), UITYPE_LONGBOW, 2, 4, 1200, { { IPL_NOMINSTR, 0, 0, 0, 0 ,1 }, { IPL_DAMMOD, 2, 2, 0, 0, 1 }, { IPL_SETAC, 5, 5, 0 ,0, 1 }, { IPL_INVCURS, 133, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Deadly Hunter"), UITYPE_COMPBOW, 3, 4, 8750, { { IPL_3XDAMVDEM, 10, 10, 0, 0 ,1 }, { IPL_TOHIT, 20, 20, 0, 0, 1 }, { IPL_MAG_CURSE, 5, 5, 0 ,0, 1 }, { IPL_INVCURS, 108, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Bow of the Dead"), UITYPE_COMPBOW, 5, 6, 2500, { { IPL_TOHIT, 10, 10, 0, 0 ,1 }, { IPL_DEX, 4, 4, 0, 0, 1 }, { IPL_VIT_CURSE, 3, 3, 0 ,0, 1 }, { IPL_LIGHT_CURSE, 2, 2, 0, 0, 1 }, { IPL_SETDUR, 30, 30, 0, 0, 1 }, { IPL_INVCURS, 108, 0, 0, 0, 1 } } }, + { N_("The Blackoak Bow"), UITYPE_LONGBOW, 5, 4, 2500, { { IPL_DEX, 10, 10, 0, 0 ,1 }, { IPL_VIT_CURSE, 10, 10, 0, 0, 1 }, { IPL_DAMP, 50, 50, 0 ,0, 1 }, { IPL_LIGHT_CURSE, 1, 1, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Flamedart"), UITYPE_HUNTBOW, 10, 4, 14250, { { IPL_FIRE_ARROWS, 0, 0, 0, 0 ,1 }, { IPL_FIREDAM, 1, 6, 0, 0, 1 }, { IPL_TOHIT, 20, 20, 0 ,0, 1 }, { IPL_FIRERES, 40, 40, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Fleshstinger"), UITYPE_LONGBOW, 13, 4, 16500, { { IPL_DEX, 15, 15, 0, 0 ,1 }, { IPL_TOHIT, 40, 40, 0, 0, 1 }, { IPL_DAMP, 80, 80, 0 ,0, 1 }, { IPL_DUR, 6, 6, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Windforce"), UITYPE_WARBOW, 17, 4, 37750, { { IPL_STR, 5, 5, 0, 0 ,1 }, { IPL_DAMP, 200, 200, 0, 0, 1 }, { IPL_KNOCKBACK, 0, 0, 0 ,0, 1 }, { IPL_INVCURS, 164, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Eaglehorn"), UITYPE_BATTLEBOW, 26, 5, 42500, { { IPL_DEX, 20, 20, 0, 0 ,1 }, { IPL_TOHIT, 50, 50, 0, 0, 1 }, { IPL_DAMP, 100, 100, 0 ,0, 1 }, { IPL_INDESTRUCTIBLE, 0, 0, 0, 0, 1 }, { IPL_INVCURS, 108, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Gonnagal's Dirk"), UITYPE_DAGGER, 1, 5, 7040, { { IPL_DEX_CURSE, 5, 5, 0, 0 ,1 }, { IPL_DAMMOD, 4, 4, 0, 0, 1 }, { IPL_FASTATTACK, 2, 2, 0 ,0, 1 }, { IPL_FIRERES, 25, 25, 0, 0, 1 }, { IPL_INVCURS, 54, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("The Defender"), UITYPE_SABRE, 1, 3, 2000, { { IPL_SETAC, 5, 5, 0, 0 ,1 }, { IPL_VIT, 5, 5, 0, 0, 1 }, { IPL_TOHIT_CURSE, 5, 5, 0 ,0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Gryphons Claw"), UITYPE_FALCHION, 1, 4, 1000, { { IPL_DAMP, 100, 100, 0, 0 ,1 }, { IPL_MAG_CURSE, 2, 2, 0, 0, 1 }, { IPL_DEX_CURSE, 5, 5, 0 ,0, 1 }, { IPL_INVCURS, 68, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Black Razor"), UITYPE_DAGGER, 1, 4, 2000, { { IPL_DAMP, 150, 150, 0, 0 ,1 }, { IPL_VIT, 2, 2, 0, 0, 1 }, { IPL_SETDUR, 5, 5, 0 ,0, 1 }, { IPL_INVCURS, 53, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Gibbous Moon"), UITYPE_BROADSWR, 2, 4, 6660, { { IPL_ATTRIBS, 2, 2, 0, 0 ,1 }, { IPL_DAMP, 25, 25, 0, 0, 1 }, { IPL_MANA, 15, 15, 0 ,0, 1 }, { IPL_LIGHT_CURSE, 3, 3, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Ice Shank"), UITYPE_LONGSWR, 3, 3, 5250, { { IPL_FIRERES, 40, 40, 0, 0 ,1 }, { IPL_SETDUR, 15, 15, 0, 0, 1 }, { IPL_STR, 5, 10, 0 ,0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("The Executioner's Blade"), UITYPE_FALCHION, 3, 5, 7080, { { IPL_DAMP, 150, 150, 0, 0 ,1 }, { IPL_LIFE_CURSE, 10, 10, 0, 0, 1 }, { IPL_LIGHT_CURSE, 1, 1, 0 ,0, 1 }, { IPL_DUR, 200, 200, 0, 0, 1 }, { IPL_INVCURS, 58, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("The Bonesaw"), UITYPE_CLAYMORE, 6, 6, 4400, { { IPL_DAMMOD, 10, 10, 0, 0 ,1 }, { IPL_STR, 10, 10, 0, 0, 1 }, { IPL_MAG_CURSE, 5, 5, 0 ,0, 1 }, { IPL_DEX_CURSE, 5, 5, 0, 0, 1 }, { IPL_LIFE, 10, 10, 0, 0, 1 }, { IPL_MANA_CURSE, 10, 10, 0, 0, 1 } } }, + { N_("Shadowhawk"), UITYPE_BROADSWR, 8, 4, 13750, { { IPL_LIGHT_CURSE, 2, 2, 0, 0 ,1 }, { IPL_STEALLIFE, 5, 5, 0, 0, 1 }, { IPL_TOHIT, 15, 15, 0 ,0, 1 }, { IPL_ALLRES, 5, 5, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Wizardspike"), UITYPE_DAGGER, 11, 5, 12920, { { IPL_MAG, 15, 15, 0, 0 ,1 }, { IPL_MANA, 35, 35, 0, 0, 1 }, { IPL_TOHIT, 25, 25, 0 ,0, 1 }, { IPL_ALLRES, 15, 15, 0, 0, 1 }, { IPL_INVCURS, 50, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Lightsabre"), UITYPE_SABRE, 13, 4, 19150, { { IPL_LIGHT, 2, 2, 0, 0 ,1 }, { IPL_LIGHTDAM, 1, 10, 0, 0, 1 }, { IPL_TOHIT, 20, 20, 0 ,0, 1 }, { IPL_LIGHTRES, 50, 50, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("The Falcon's Talon"), UITYPE_SCIMITAR, 15, 5, 7867, { { IPL_FASTATTACK, 4, 4, 0, 0 ,1 }, { IPL_TOHIT, 20, 20, 0, 0, 1 }, { IPL_DAMP_CURSE, 33, 33, 0 ,0, 1 }, { IPL_DEX, 10, 10, 0, 0, 1 }, { IPL_INVCURS, 68, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Inferno"), UITYPE_LONGSWR, 17, 4, 34600, { { IPL_FIREDAM, 2, 12, 0, 0 ,1 }, { IPL_LIGHT, 3, 3, 0, 0, 1 }, { IPL_MANA, 20, 20, 0 ,0, 1 }, { IPL_FIRERES, 80, 80, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Doombringer"), UITYPE_BASTARDSWR, 19, 5, 18250, { { IPL_TOHIT, 25, 25, 0, 0 ,1 }, { IPL_DAMP, 250, 250, 0, 0, 1 }, { IPL_ATTRIBS_CURSE, 5, 5, 0 ,0, 1 }, { IPL_LIFE_CURSE, 25, 25, 0, 0, 1 }, { IPL_LIGHT_CURSE, 2, 2, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("The Grizzly"), UITYPE_TWOHANDSWR, 23, 6, 50000, { { IPL_STR, 20, 20, 0, 0 ,1 }, { IPL_VIT_CURSE, 5, 5, 0, 0, 1 }, { IPL_DAMP, 200, 200, 0 ,0, 1 }, { IPL_KNOCKBACK, 0, 0, 0, 0, 1 }, { IPL_DUR, 100, 100, 0, 0, 1 }, { IPL_INVCURS, 160, 0, 0, 0, 1 } } }, + { N_("The Grandfather"), UITYPE_GREATSWR, 27, 6, 119800, { { IPL_ONEHAND, 0, 0, 0, 0 ,1 }, { IPL_ATTRIBS, 5, 5, 0, 0, 1 }, { IPL_TOHIT, 20, 20, 0 ,0, 1 }, { IPL_DAMP, 70, 70, 0, 0, 1 }, { IPL_LIFE, 20, 20, 0, 0, 1 }, { IPL_INVCURS, 161, 0, 0, 0, 1 } } }, + { N_("The Mangler"), UITYPE_LARGEAXE, 2, 5, 2850, { { IPL_DAMP, 200, 200, 0, 0 ,1 }, { IPL_DEX_CURSE, 5, 5, 0, 0, 1 }, { IPL_MAG_CURSE, 5, 5, 0 ,0, 1 }, { IPL_MANA_CURSE, 10, 10, 0, 0, 1 }, { IPL_INVCURS, 144, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Sharp Beak"), UITYPE_LARGEAXE, 2, 4, 2850, { { IPL_LIFE, 20, 20, 0, 0 ,1 }, { IPL_MAG_CURSE, 10, 10, 0, 0, 1 }, { IPL_MANA_CURSE, 10, 10, 0 ,0, 1 }, { IPL_INVCURS, 143, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("BloodSlayer"), UITYPE_BROADAXE, 3, 5, 2500, { { IPL_DAMP, 100, 100, 0, 0 ,1 }, { IPL_3XDAMVDEM, 50, 50, 0, 0, 1 }, { IPL_ATTRIBS_CURSE, 5, 5, 0 ,0, 1 }, { IPL_SPLLVLADD, -1, -1, 0, 0, 1 }, { IPL_INVCURS, 144, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("The Celestial Axe"), UITYPE_BATTLEAXE, 4, 4, 14100, { { IPL_NOMINSTR, 0, 0, 0, 0 ,1 }, { IPL_TOHIT, 15, 15, 0, 0, 1 }, { IPL_LIFE, 15, 15, 0 ,0, 1 }, { IPL_STR_CURSE, 15, 15, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Wicked Axe"), UITYPE_LARGEAXE, 5, 6, 31150, { { IPL_TOHIT, 30, 30, 0, 0 ,1 }, { IPL_DEX, 10, 10, 0, 0, 1 }, { IPL_VIT_CURSE, 10, 10, 0 ,0, 1 }, { IPL_GETHIT, 1, 6, 0, 0, 1 }, { IPL_INDESTRUCTIBLE, 0, 0, 0, 0, 1 }, { IPL_INVCURS, 143, 0, 0, 0, 1 } } }, + { N_("Stonecleaver"), UITYPE_BROADAXE, 7, 5, 23900, { { IPL_LIFE, 30, 30, 0, 0 ,1 }, { IPL_TOHIT, 20, 20, 0, 0, 1 }, { IPL_DAMP, 50, 50, 0 ,0, 1 }, { IPL_LIGHTRES, 40, 40, 0, 0, 1 }, { IPL_INVCURS, 104, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Aguinara's Hatchet"), UITYPE_SMALLAXE, 12, 3, 24800, { { IPL_SPLLVLADD, 1, 1, 0, 0 ,1 }, { IPL_MAG, 10, 10, 0, 0, 1 }, { IPL_MAGICRES, 80, 80, 0 ,0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Hellslayer"), UITYPE_BATTLEAXE, 15, 5, 26200, { { IPL_STR, 8, 8, 0, 0 ,1 }, { IPL_VIT, 8, 8, 0, 0, 1 }, { IPL_DAMP, 100, 100, 0 ,0, 1 }, { IPL_LIFE, 25, 25, 0, 0, 1 }, { IPL_MANA_CURSE, 25, 25, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Messerschmidt's Reaver"), UITYPE_GREATAXE, 25, 6, 58000, { { IPL_DAMP, 200, 200, 0, 0 ,1 }, { IPL_DAMMOD, 15, 15, 0, 0, 1 }, { IPL_ATTRIBS, 5, 5, 0 ,0, 1 }, { IPL_LIFE_CURSE, 50, 50, 0, 0, 1 }, { IPL_FIREDAM, 2, 12, 0, 0, 1 }, { IPL_INVCURS, 163, 0, 0, 0, 1 } } }, + { N_("Crackrust"), UITYPE_MACE, 1, 5, 11375, { { IPL_ATTRIBS, 2, 2, 0, 0 ,1 }, { IPL_INDESTRUCTIBLE, 0, 0, 0, 0, 1 }, { IPL_ALLRES, 15, 15, 0 ,0, 1 }, { IPL_DAMP, 50, 50, 0, 0, 1 }, { IPL_SPLLVLADD, -1, -1, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Hammer of Jholm"), UITYPE_MAUL, 1, 4, 8700, { { IPL_DAMP, 4, 10, 0, 0 ,1 }, { IPL_INDESTRUCTIBLE, 0, 0, 0, 0, 1 }, { IPL_STR, 3, 3, 0 ,0, 1 }, { IPL_TOHIT, 15, 15, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Civerb's Cudgel"), UITYPE_MACE, 1, 3, 2000, { { IPL_3XDAMVDEM, 35, 35, 0, 0 ,1 }, { IPL_DEX_CURSE, 5, 5, 0, 0, 1 }, { IPL_MAG_CURSE, 2, 2, 0 ,0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("The Celestial Star"), UITYPE_FLAIL, 2, 5, 7810, { { IPL_NOMINSTR, 0, 0, 0, 0 ,1 }, { IPL_LIGHT, 2, 2, 0, 0, 1 }, { IPL_DAMMOD, 10, 10, 0 ,0, 1 }, { IPL_AC_CURSE, 8, 8, 0, 0, 1 }, { IPL_INVCURS, 131, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Baranar's Star"), UITYPE_MORNSTAR, 5, 6, 6850, { { IPL_TOHIT, 12, 12, 0, 0 ,1 }, { IPL_DAMP, 80, 80, 0, 0, 1 }, { IPL_FASTATTACK, 1, 1, 0 ,0, 1 }, { IPL_VIT, 4, 4, 0, 0, 1 }, { IPL_DEX_CURSE, 4, 4, 0, 0, 1 }, { IPL_SETDUR, 60, 60, 0, 0, 1 } } }, + { N_("Gnarled Root"), UITYPE_SPIKCLUB, 9, 6, 9820, { { IPL_TOHIT, 20, 20, 0, 0 ,1 }, { IPL_DAMP, 300, 300, 0, 0, 1 }, { IPL_DEX, 10, 10, 0 ,0, 1 }, { IPL_MAG, 5, 5, 0, 0, 1 }, { IPL_ALLRES, 10, 10, 0, 0, 1 }, { IPL_AC_CURSE, 10, 10, 0, 0, 1 } } }, + { N_("The Cranium Basher"), UITYPE_MAUL, 12, 6, 36500, { { IPL_DAMMOD, 20, 20, 0, 0 ,1 }, { IPL_STR, 15, 15, 0, 0, 1 }, { IPL_INDESTRUCTIBLE, 0, 0, 0 ,0, 1 }, { IPL_MANA_CURSE, 150, 150, 0, 0, 1 }, { IPL_ALLRES, 5, 5, 0, 0, 1 }, { IPL_INVCURS, 122, 0, 0, 0, 1 } } }, + { N_("Schaefer's Hammer"), UITYPE_WARHAMMER, 16, 6, 56125, { { IPL_DAMP_CURSE, 100, 100, 0, 0 ,1 }, { IPL_LIGHTDAM, 1, 50, 0, 0, 1 }, { IPL_LIFE, 50, 50, 0 ,0, 1 }, { IPL_TOHIT, 30, 30, 0, 0, 1 }, { IPL_LIGHTRES, 80, 80, 0, 0, 1 }, { IPL_LIGHT, 1, 1, 0, 0, 1 } } }, + { N_("Dreamflange"), UITYPE_MACE, 26, 5, 26450, { { IPL_MAG, 30, 30, 0, 0 ,1 }, { IPL_MANA, 50, 50, 0, 0, 1 }, { IPL_MAGICRES, 50, 50, 0 ,0, 1 }, { IPL_LIGHT, 2, 2, 0, 0, 1 }, { IPL_SPLLVLADD, 1, 1, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Staff of Shadows"), UITYPE_LONGSTAFF, 2, 5, 1250, { { IPL_MAG_CURSE, 10, 10, 0, 0 ,1 }, { IPL_TOHIT, 10, 10, 0, 0, 1 }, { IPL_DAMP, 60, 60, 0 ,0, 1 }, { IPL_LIGHT_CURSE, 2, 2, 0, 0, 1 }, { IPL_FASTATTACK, 1, 1, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Immolator"), UITYPE_LONGSTAFF, 4, 4, 3900, { { IPL_FIRERES, 20, 20, 0, 0 ,1 }, { IPL_FIREDAM, 4, 4, 0, 0, 1 }, { IPL_MANA, 10, 10, 0 ,0, 1 }, { IPL_VIT_CURSE, 5, 5, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Storm Spire"), UITYPE_WARSTAFF, 8, 4, 22500, { { IPL_LIGHTRES, 50, 50, 0, 0 ,1 }, { IPL_LIGHTDAM, 2, 8, 0, 0, 1 }, { IPL_STR, 10, 10, 0 ,0, 1 }, { IPL_MAG_CURSE, 10, 10, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Gleamsong"), UITYPE_SHORTSTAFF, 8, 4, 6520, { { IPL_MANA, 25, 25, 0, 0 ,1 }, { IPL_STR_CURSE, 3, 3, 0, 0, 1 }, { IPL_VIT_CURSE, 3, 3, 0 ,0, 1 }, { IPL_SPELL, 10, 76, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Thundercall"), UITYPE_COMPSTAFF, 14, 5, 22250, { { IPL_TOHIT, 35, 35, 0, 0 ,1 }, { IPL_LIGHTDAM, 1, 10, 0, 0, 1 }, { IPL_SPELL, 3, 76, 0 ,0, 1 }, { IPL_LIGHTRES, 30, 30, 0, 0, 1 }, { IPL_LIGHT, 2, 2, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("The Protector"), UITYPE_SHORTSTAFF, 16, 6, 17240, { { IPL_VIT, 5, 5, 0, 0 ,1 }, { IPL_GETHIT, 5, 5, 0, 0, 1 }, { IPL_SETAC, 40, 40, 0 ,0, 1 }, { IPL_SPELL, 2, 86, 0, 0, 1 }, { IPL_THORNS, 1, 3, 0, 0, 1 }, { IPL_INVCURS, 162, 0, 0, 0, 1 } } }, + { N_("Naj's Puzzler"), UITYPE_LONGSTAFF, 18, 5, 34000, { { IPL_MAG, 20, 20, 0, 0 ,1 }, { IPL_DEX, 10, 10, 0, 0, 1 }, { IPL_ALLRES, 20, 20, 0 ,0, 1 }, { IPL_SPELL, 23, 57, 0, 0, 1 }, { IPL_LIFE_CURSE, 25, 25, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Mindcry"), UITYPE_QUARSTAFF, 20, 4, 41500, { { IPL_MAG, 15, 15, 0, 0 ,1 }, { IPL_SPELL, 13, 69, 0, 0, 1 }, { IPL_ALLRES, 15, 15, 0 ,0, 1 }, { IPL_SPLLVLADD, 1, 1, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Rod of Onan"), UITYPE_WARSTAFF, 22, 3, 44167, { { IPL_SPELL, 21, 50, 0, 0 ,1 }, { IPL_DAMP, 100, 100, 0, 0, 1 }, { IPL_ATTRIBS, 5, 5, 0 ,0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Helm of Sprits"), UITYPE_HELM, 1, 2, 7525, { { IPL_STEALLIFE, 5, 5, 0, 0 ,1 }, { IPL_INVCURS, 77, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0 ,0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Thinking Cap"), UITYPE_SKULLCAP, 6, 5, 2020, { { IPL_MANA, 30, 30, 0, 0 ,1 }, { IPL_SPLLVLADD, 2, 2, 0, 0, 1 }, { IPL_ALLRES, 20, 20, 0 ,0, 1 }, { IPL_SETDUR, 1, 1, 0, 0, 1 }, { IPL_INVCURS, 93, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("OverLord's Helm"), UITYPE_HELM, 7, 6, 12500, { { IPL_STR, 20, 20, 0, 0 ,1 }, { IPL_DEX, 15, 15, 0, 0, 1 }, { IPL_VIT, 5, 5, 0 ,0, 1 }, { IPL_MAG_CURSE, 20, 20, 0, 0, 1 }, { IPL_SETDUR, 15, 15, 0, 0, 1 }, { IPL_INVCURS, 99, 0, 0, 0, 1 } } }, + { N_("Fool's Crest"), UITYPE_HELM, 12, 5, 10150, { { IPL_ATTRIBS_CURSE, 4, 4, 0, 0 ,1 }, { IPL_LIFE, 100, 100, 0, 0, 1 }, { IPL_GETHIT_CURSE, 1, 6, 0 ,0, 1 }, { IPL_THORNS, 1, 3, 0, 0, 1 }, { IPL_INVCURS, 80, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Gotterdamerung"), UITYPE_GREATHELM, 21, 6, 54900, { { IPL_ATTRIBS, 20, 20, 0, 0 ,1 }, { IPL_SETAC, 60, 60, 0, 0, 1 }, { IPL_GETHIT, 4, 4, 0 ,0, 1 }, { IPL_ALLRESZERO, 0, 0, 0, 0, 1 }, { IPL_LIGHT_CURSE, 4, 4, 0, 0, 1 }, { IPL_INVCURS, 85, 0, 0, 0, 1 } } }, + { N_("Royal Circlet"), UITYPE_CROWN, 27, 5, 24875, { { IPL_ATTRIBS, 10, 10, 0, 0 ,1 }, { IPL_MANA, 40, 40, 0, 0, 1 }, { IPL_SETAC, 40, 40, 0 ,0, 1 }, { IPL_LIGHT, 1, 1, 0, 0, 1 }, { IPL_INVCURS, 79, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Torn Flesh of Souls"), UITYPE_RAGS, 2, 5, 4825, { { IPL_SETAC, 8, 8, 0, 0 ,1 }, { IPL_VIT, 10, 10, 0, 0, 1 }, { IPL_GETHIT, 1, 1, 0 ,0, 1 }, { IPL_INDESTRUCTIBLE, 0, 0, 0, 0, 1 }, { IPL_INVCURS, 92, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("The Gladiator's Bane"), UITYPE_STUDARMOR, 6, 4, 3450, { { IPL_SETAC, 25, 25, 0, 0 ,1 }, { IPL_GETHIT, 2, 2, 0, 0, 1 }, { IPL_DUR, 200, 200, 0 ,0, 1 }, { IPL_ATTRIBS_CURSE, 3, 3, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("The Rainbow Cloak"), UITYPE_CLOAK, 2, 6, 4900, { { IPL_SETAC, 10, 10, 0, 0 ,1 }, { IPL_ATTRIBS, 1, 1, 0, 0, 1 }, { IPL_ALLRES, 10, 10, 0 ,0, 1 }, { IPL_LIFE, 5, 5, 0, 0, 1 }, { IPL_DUR, 50, 50, 0, 0, 1 }, { IPL_INVCURS, 138, 0, 0, 0, 1 } } }, + { N_("Leather of Aut"), UITYPE_LEATHARMOR, 4, 5, 10550, { { IPL_SETAC, 15, 15, 0, 0 ,1 }, { IPL_STR, 5, 5, 0, 0, 1 }, { IPL_MAG_CURSE, 5, 5, 0 ,0, 1 }, { IPL_DEX, 5, 5, 0, 0, 1 }, { IPL_INDESTRUCTIBLE, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Wisdom's Wrap"), UITYPE_ROBE, 5, 6, 6200, { { IPL_MAG, 5, 5, 0, 0 ,1 }, { IPL_MANA, 10, 10, 0, 0, 1 }, { IPL_LIGHTRES, 25, 25, 0 ,0, 1 }, { IPL_SETAC, 15, 15, 0, 0, 1 }, { IPL_GETHIT, 1, 1, 0, 0, 1 }, { IPL_INVCURS, 138, 0, 0, 0, 1 } } }, + { N_("Sparking Mail"), UITYPE_CHAINMAIL, 9, 2, 15750, { { IPL_SETAC, 30, 30, 0, 0 ,1 }, { IPL_LIGHTDAM, 1, 10, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0 ,0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Scavenger Carapace"), UITYPE_BREASTPLATE, 13, 4, 14000, { { IPL_GETHIT, 15, 15, 0, 0 ,1 }, { IPL_AC_CURSE, 30, 30, 0, 0, 1 }, { IPL_DEX, 5, 5, 0 ,0, 1 }, { IPL_LIGHTRES, 40, 40, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Nightscape"), UITYPE_CAPE, 16, 6, 11600, { { IPL_FASTRECOVER, 2, 2, 0, 0 ,1 }, { IPL_LIGHT_CURSE, 4, 4, 0, 0, 1 }, { IPL_SETAC, 15, 15, 0 ,0, 1 }, { IPL_DEX, 3, 3, 0, 0, 1 }, { IPL_ALLRES, 20, 20, 0, 0, 1 }, { IPL_INVCURS, 138, 0, 0, 0, 1 } } }, + { N_("Naj's Light Plate"), UITYPE_PLATEMAIL, 19, 6, 78700, { { IPL_NOMINSTR, 0, 0, 0, 0 ,1 }, { IPL_MAG, 5, 5, 0, 0, 1 }, { IPL_MANA, 20, 20, 0 ,0, 1 }, { IPL_ALLRES, 20, 20, 0, 0, 1 }, { IPL_SPLLVLADD, 1, 1, 0, 0, 1 }, { IPL_INVCURS, 159, 0, 0, 0, 1 } } }, + { N_("Demonspike Coat"), UITYPE_FULLPLATE, 25, 5, 251175, { { IPL_SETAC, 100, 100, 0, 0 ,1 }, { IPL_GETHIT, 6, 6, 0, 0, 1 }, { IPL_STR, 10, 10, 0 ,0, 1 }, { IPL_INDESTRUCTIBLE, 0, 0, 0, 0, 1 }, { IPL_FIRERES, 50, 50, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("The Deflector"), UITYPE_BUCKLER, 1, 5, 1500, { { IPL_SETAC, 7, 7, 0, 0 ,1 }, { IPL_ALLRES, 10, 10, 0, 0, 1 }, { IPL_DAMP_CURSE, 20, 20, 0 ,0, 1 }, { IPL_TOHIT_CURSE, 5, 5, 0, 0, 1 }, { IPL_INVCURS, 83, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Split Skull Shield"), UITYPE_BUCKLER, 1, 6, 2025, { { IPL_SETAC, 10, 10, 0, 0 ,1 }, { IPL_LIFE, 10, 10, 0, 0, 1 }, { IPL_STR, 2, 2, 0 ,0, 1 }, { IPL_LIGHT_CURSE, 1, 1, 0, 0, 1 }, { IPL_SETDUR, 15, 15, 0, 0, 1 }, { IPL_INVCURS, 116, 0, 0, 0, 1 } } }, + { N_("Dragon's Breach"), UITYPE_KITESHIELD, 2, 6, 19200, { { IPL_FIRERES, 25, 25, 0, 0 ,1 }, { IPL_STR, 5, 5, 0, 0, 1 }, { IPL_SETAC, 20, 20, 0 ,0, 1 }, { IPL_MAG_CURSE, 5, 5, 0, 0, 1 }, { IPL_INDESTRUCTIBLE, 0, 0, 0, 0, 1 }, { IPL_INVCURS, 117, 0, 0, 0, 1 } } }, + { N_("Blackoak Shield"), UITYPE_SMALLSHIELD, 4, 6, 5725, { { IPL_DEX, 10, 10, 0, 0 ,1 }, { IPL_VIT_CURSE, 10, 10, 0, 0, 1 }, { IPL_SETAC, 18, 18, 0 ,0, 1 }, { IPL_LIGHT_CURSE, 1, 1, 0, 0, 1 }, { IPL_DUR, 150, 150, 0, 0, 1 }, { IPL_INVCURS, 146, 0, 0, 0, 1 } } }, + { N_("Holy Defender"), UITYPE_LARGESHIELD, 10, 6, 13800, { { IPL_SETAC, 15, 15, 0, 0 ,1 }, { IPL_GETHIT, 2, 2, 0, 0, 1 }, { IPL_FIRERES, 20, 20, 0 ,0, 1 }, { IPL_DUR, 200, 200, 0, 0, 1 }, { IPL_FASTBLOCK, 1, 1, 0, 0, 1 }, { IPL_INVCURS, 146, 0, 0, 0, 1 } } }, + { N_("Stormshield"), UITYPE_GOTHSHIELD, 24, 6, 49000, { { IPL_SETAC, 40, 40, 0, 0 ,1 }, { IPL_GETHIT_CURSE, 4, 4, 0, 0, 1 }, { IPL_STR, 10, 10, 0 ,0, 1 }, { IPL_INDESTRUCTIBLE, 0, 0, 0, 0, 1 }, { IPL_FASTBLOCK, 1, 1, 0, 0, 1 }, { IPL_INVCURS, 148, 0, 0, 0, 1 } } }, + { N_("Bramble"), UITYPE_RING, 1, 4, 1000, { { IPL_ATTRIBS_CURSE, 2, 2, 0, 0 ,1 }, { IPL_DAMMOD, 3, 3, 0, 0, 1 }, { IPL_MANA, 10, 10, 0 ,0, 1 }, { IPL_INVCURS, 9, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Ring of Regha"), UITYPE_RING, 1, 6, 4175, { { IPL_MAG, 10, 10, 0, 0 ,1 }, { IPL_MAGICRES, 10, 10, 0, 0, 1 }, { IPL_LIGHT, 1, 1, 0 ,0, 1 }, { IPL_STR_CURSE, 3, 3, 0, 0, 1 }, { IPL_DEX_CURSE, 3, 3, 0, 0, 1 }, { IPL_INVCURS, 11, 0, 0, 0, 1 } } }, + { N_("The Bleeder"), UITYPE_RING, 2, 4, 8500, { { IPL_MAGICRES, 20, 20, 0, 0 ,1 }, { IPL_MANA, 30, 30, 0, 0, 1 }, { IPL_LIFE_CURSE, 10, 10, 0 ,0, 1 }, { IPL_INVCURS, 8, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Constricting Ring"), UITYPE_RING, 5, 3, 62000, { { IPL_ALLRES, 75, 75, 0, 0 ,1 }, { IPL_DRAINLIFE, 0, 0, 0, 0, 1 }, { IPL_INVCURS, 14, 0, 0 ,0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Ring of Engagement"), UITYPE_RING, 11, 5, 12476, { { IPL_GETHIT, 1, 2, 0, 0 ,1 }, { IPL_THORNS, 1, 3, 0, 0, 1 }, { IPL_SETAC, 5, 5, 0 ,0, 1 }, { IPL_TARGAC, 4, 12, 0, 0, 1 }, { IPL_INVCURS, 13, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Giant's Knuckle"), UITYPE_RING, 8, 3, 8000, { { IPL_STR, 60, 60, 0, 0 ,1 }, { IPL_DEX_CURSE, 30, 30, 0, 0, 1 }, { IPL_INVCURS, 179, 0, 0 ,0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Mercurial Ring"), UITYPE_RING, 8, 3, 8000, { { IPL_DEX, 60, 60, 0, 0 ,1 }, { IPL_STR_CURSE, 30, 30, 0, 0, 1 }, { IPL_INVCURS, 176, 0, 0 ,0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Xorine's Ring"), UITYPE_RING, 8, 3, 8000, { { IPL_MAG, 60, 60, 0, 0 ,1 }, { IPL_STR_CURSE, 30, 30, 0, 0, 1 }, { IPL_INVCURS, 168, 0, 0 ,0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Karik's Ring"), UITYPE_RING, 8, 3, 8000, { { IPL_VIT, 60, 60, 0, 0 ,1 }, { IPL_MAG_CURSE, 30, 30, 0, 0, 1 }, { IPL_INVCURS, 173, 0, 0 ,0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Ring of Magma"), UITYPE_RING, 8, 4, 8000, { { IPL_FIRERES, 60, 60, 0, 0 ,1 }, { IPL_LIGHTRES_CURSE, 30, 30, 0, 0, 1 }, { IPL_MAGICRES_CURSE, 30, 30, 0 ,0, 1 }, { IPL_INVCURS, 184, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Ring of the Mystics"), UITYPE_RING, 8, 4, 8000, { { IPL_MAGICRES, 60, 60, 0, 0 ,1 }, { IPL_FIRERES_CURSE, 30, 30, 0, 0, 1 }, { IPL_LIGHTRES_CURSE, 30, 30, 0 ,0, 1 }, { IPL_INVCURS, 181, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Ring of Thunder"), UITYPE_RING, 8, 4, 8000, { { IPL_LIGHTRES, 60, 60, 0, 0 ,1 }, { IPL_FIRERES_CURSE, 30, 30, 0, 0, 1 }, { IPL_MAGICRES_CURSE, 30, 30, 0 ,0, 1 }, { IPL_INVCURS, 177, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Amulet of Warding"), UITYPE_AMULET, 12, 3, 30000, { { IPL_ALLRES, 40, 40, 0, 0 ,1 }, { IPL_LIFE_CURSE, 100, 100, 0, 0, 1 }, { IPL_INVCURS, 170, 0, 0 ,0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Gnat Sting"), UITYPE_HUNTBOW, 15, 5, 30000, { { IPL_MULT_ARROWS, 3, 3, 0, 0 ,1 }, { IPL_SETDAM, 1, 2, 0, 0, 1 }, { IPL_FASTATTACK, 1, 1, 0 ,0, 1 }, { IPL_INDESTRUCTIBLE, 0, 0, 0, 0, 1 }, { IPL_INVCURS, 210, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Flambeau"), UITYPE_COMPBOW, 11, 4, 30000, { { IPL_FIREBALL, 15, 20, 0, 0 ,1 }, { IPL_SETDAM, 0, 0, 0, 0, 1 }, { IPL_INDESTRUCTIBLE, 0, 0, 0 ,0, 1 }, { IPL_INVCURS, 209, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Armor of Gloom"), UITYPE_FULLPLATE, 25, 5, 200000, { { IPL_NOMINSTR, 0, 0, 0, 0 ,1 }, { IPL_SETAC, 225, 225, 0, 0, 1 }, { IPL_ALLRESZERO, 0, 0, 0 ,0, 1 }, { IPL_LIGHT_CURSE, 2, 2, 0, 0, 1 }, { IPL_INVCURS, 203, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Blitzen"), UITYPE_COMPBOW, 13, 4, 30000, { { IPL_ADDACLIFE, 10, 15, 0, 0 ,1 }, { IPL_SETDAM, 0, 0, 0, 0, 1 }, { IPL_INDESTRUCTIBLE, 0, 0, 0 ,0, 1 }, { IPL_INVCURS, 219, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Thunderclap"), UITYPE_WARHAMMER, 13, 6, 30000, { { IPL_ADDMANAAC, 3, 6, 0, 0 ,1 }, { IPL_STR, 20, 20, 0, 0, 1 }, { IPL_LIGHTRES, 30, 30, 0 ,0, 1 }, { IPL_LIGHT, 2, 2, 0, 0, 1 }, { IPL_INDESTRUCTIBLE, 0, 0, 0, 0, 1 }, { IPL_INVCURS, 205, 0, 0, 0, 1 } } }, + { N_("Shirotachi"), UITYPE_GREATSWR, 21, 4, 36000, { { IPL_ONEHAND, 0, 0, 0, 0 ,1 }, { IPL_FASTATTACK, 4, 4, 0, 0, 1 }, { IPL_TARGAC, 2, 2, 0 ,0, 1 }, { IPL_LIGHTDAM, 6, 6, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Eater of Souls"), UITYPE_TWOHANDSWR, 23, 6, 42000, { { IPL_INDESTRUCTIBLE, 0, 0, 0, 0 ,1 }, { IPL_LIFE, 50, 50, 0, 0, 1 }, { IPL_STEALLIFE, 5, 5, 0 ,0, 1 }, { IPL_STEALMANA, 5, 5, 0, 0, 1 }, { IPL_DRAINLIFE, 0, 0, 0, 0, 1 }, { IPL_INVCURS, 200, 0, 0, 0, 1 } } }, + { N_("Diamondedge"), UITYPE_LONGSWR, 17, 6, 42000, { { IPL_SETDUR, 10, 10, 0, 0 ,1 }, { IPL_TOHIT, 50, 50, 0, 0, 1 }, { IPL_DAMP, 100, 100, 0 ,0, 1 }, { IPL_LIGHTRES, 50, 50, 0, 0, 1 }, { IPL_SETAC, 10, 10, 0, 0, 1 }, { IPL_INVCURS, 206, 0, 0, 0, 1 } } }, + { N_("Bone Chain Armor"), UITYPE_CHAINMAIL, 13, 3, 36000, { { IPL_SETAC, 40, 40, 0, 0 ,1 }, { IPL_ACUNDEAD, 0, 0, 0, 0, 1 }, { IPL_INVCURS, 204, 0, 0 ,0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Demon Plate Armor"), UITYPE_FULLPLATE, 25, 3, 80000, { { IPL_SETAC, 80, 80, 0, 0 ,1 }, { IPL_ACDEMON, 0, 0, 0, 0, 1 }, { IPL_INVCURS, 225, 0, 0 ,0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { N_("Acolyte's Amulet"), UITYPE_AMULET, 10, 2, 10000, { { IPL_MANATOLIFE, 50, 50, 0, 0 ,1 }, { IPL_INVCURS, 183, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0 ,0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + // TRANSLATORS: Unique Item section end. + { N_("Gladiator's Ring"), UITYPE_RING, 10, 2, 10000, { { IPL_LIFETOMANA, 40, 40, 0, 0 ,1 }, { IPL_INVCURS, 186, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0 ,0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, + { "", UITYPE_INVALID, 0, 0, 0, { { IPL_TOHIT, 0, 0, 0, 0 ,1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0 ,0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 }, { IPL_TOHIT, 0, 0, 0, 0, 1 } } }, // clang-format on }; diff --git a/Source/itemdat.h b/Source/itemdat.h index 732181c62..4bf00136e 100644 --- a/Source/itemdat.h +++ b/Source/itemdat.h @@ -565,19 +565,23 @@ enum affix_item_type : uint8_t { // clang-format on }; +struct ItemPower { + item_effect_type type; + int param1; + int param2; + int minval; + int maxval; + int multval; +}; + struct PLStruct { const char *PLName; - enum item_effect_type PLPower; - int PLParam1; - int PLParam2; + ItemPower power; int8_t PLMinLvl; int PLIType; // affix_item_type as bit flags enum goodorevil PLGOE; bool PLDouble; bool PLOk; - int PLMinVal; - int PLMaxVal; - int PLMultVal; }; struct UItemStruct { @@ -586,24 +590,7 @@ struct UItemStruct { int8_t UIMinLvl; int8_t UINumPL; int UIValue; - enum item_effect_type UIPower1; - int UIParam1; - int UIParam2; - enum item_effect_type UIPower2; - int UIParam3; - int UIParam4; - enum item_effect_type UIPower3; - int UIParam5; - int UIParam6; - enum item_effect_type UIPower4; - int UIParam7; - int UIParam8; - enum item_effect_type UIPower5; - int UIParam9; - int UIParam10; - enum item_effect_type UIPower6; - int UIParam11; - int UIParam12; + ItemPower powers[6]; }; extern ItemDataStruct AllItemsList[]; diff --git a/Source/items.cpp b/Source/items.cpp index 5317a4bfa..60e7d17c6 100644 --- a/Source/items.cpp +++ b/Source/items.cpp @@ -33,6 +33,406 @@ namespace devilution { namespace { std::optional itemanims[ITEMTYPES]; +int RndPL(int param1, int param2) +{ + return param1 + GenerateRnd(param2 - param1 + 1); +} + +int PLVal(int pv, int p1, int p2, int minv, int maxv) +{ + if (p1 == p2) + return minv; + if (minv == maxv) + return minv; + return minv + (maxv - minv) * (100 * (pv - p1) / (p2 - p1)) / 100; +} + +void SaveItemPower(ItemStruct &item, const ItemPower &power) +{ + int r = RndPL(power.param1, power.param2); + int r2; + + switch (power.type) { + case IPL_TOHIT: + item._iPLToHit += r; + break; + case IPL_TOHIT_CURSE: + item._iPLToHit -= r; + break; + case IPL_DAMP: + item._iPLDam += r; + break; + case IPL_DAMP_CURSE: + item._iPLDam -= r; + break; + case IPL_DOPPELGANGER: + item._iDamAcFlags |= ISPLHF_DOPPELGANGER; + [[fallthrough]]; + case IPL_TOHIT_DAMP: + r = RndPL(power.param1, power.param2); + item._iPLDam += r; + if (power.param1 == 20) + r2 = RndPL(1, 5); + if (power.param1 == 36) + r2 = RndPL(6, 10); + if (power.param1 == 51) + r2 = RndPL(11, 15); + if (power.param1 == 66) + r2 = RndPL(16, 20); + if (power.param1 == 81) + r2 = RndPL(21, 30); + if (power.param1 == 96) + r2 = RndPL(31, 40); + if (power.param1 == 111) + r2 = RndPL(41, 50); + if (power.param1 == 126) + r2 = RndPL(51, 75); + if (power.param1 == 151) + r2 = RndPL(76, 100); + item._iPLToHit += r2; + break; + case IPL_TOHIT_DAMP_CURSE: + item._iPLDam -= r; + if (power.param1 == 25) + r2 = RndPL(1, 5); + if (power.param1 == 50) + r2 = RndPL(6, 10); + item._iPLToHit -= r2; + break; + case IPL_ACP: + item._iPLAC += r; + break; + case IPL_ACP_CURSE: + item._iPLAC -= r; + break; + case IPL_SETAC: + item._iAC = r; + break; + case IPL_AC_CURSE: + item._iAC -= r; + break; + case IPL_FIRERES: + item._iPLFR += r; + break; + case IPL_LIGHTRES: + item._iPLLR += r; + break; + case IPL_MAGICRES: + item._iPLMR += r; + break; + case IPL_ALLRES: + item._iPLFR = std::max(item._iPLFR + r, 0); + item._iPLLR = std::max(item._iPLLR + r, 0); + item._iPLMR = std::max(item._iPLMR + r, 0); + break; + case IPL_SPLLVLADD: + item._iSplLvlAdd = r; + break; + case IPL_CHARGES: + item._iCharges *= power.param1; + item._iMaxCharges = item._iCharges; + break; + case IPL_SPELL: + item._iSpell = static_cast(power.param1); + item._iCharges = power.param2; + item._iMaxCharges = power.param2; + break; + case IPL_FIREDAM: + item._iFlags |= ISPL_FIREDAM; + item._iFlags &= ~ISPL_LIGHTDAM; + item._iFMinDam = power.param1; + item._iFMaxDam = power.param2; + item._iLMinDam = 0; + item._iLMaxDam = 0; + break; + case IPL_LIGHTDAM: + item._iFlags |= ISPL_LIGHTDAM; + item._iFlags &= ~ISPL_FIREDAM; + item._iLMinDam = power.param1; + item._iLMaxDam = power.param2; + item._iFMinDam = 0; + item._iFMaxDam = 0; + break; + case IPL_STR: + item._iPLStr += r; + break; + case IPL_STR_CURSE: + item._iPLStr -= r; + break; + case IPL_MAG: + item._iPLMag += r; + break; + case IPL_MAG_CURSE: + item._iPLMag -= r; + break; + case IPL_DEX: + item._iPLDex += r; + break; + case IPL_DEX_CURSE: + item._iPLDex -= r; + break; + case IPL_VIT: + item._iPLVit += r; + break; + case IPL_VIT_CURSE: + item._iPLVit -= r; + break; + case IPL_ATTRIBS: + item._iPLStr += r; + item._iPLMag += r; + item._iPLDex += r; + item._iPLVit += r; + break; + case IPL_ATTRIBS_CURSE: + item._iPLStr -= r; + item._iPLMag -= r; + item._iPLDex -= r; + item._iPLVit -= r; + break; + case IPL_GETHIT_CURSE: + item._iPLGetHit += r; + break; + case IPL_GETHIT: + item._iPLGetHit -= r; + break; + case IPL_LIFE: + item._iPLHP += r << 6; + break; + case IPL_LIFE_CURSE: + item._iPLHP -= r << 6; + break; + case IPL_MANA: + item._iPLMana += r << 6; + drawmanaflag = true; + break; + case IPL_MANA_CURSE: + item._iPLMana -= r << 6; + drawmanaflag = true; + break; + case IPL_DUR: + r2 = r * item._iMaxDur / 100; + item._iMaxDur += r2; + item._iDurability += r2; + break; + case IPL_CRYSTALLINE: + item._iPLDam += 140 + r * 2; + [[fallthrough]]; + case IPL_DUR_CURSE: + item._iMaxDur -= r * item._iMaxDur / 100; + item._iMaxDur = std::max(item._iMaxDur, 1); + + item._iDurability = item._iMaxDur; + break; + case IPL_INDESTRUCTIBLE: + item._iDurability = DUR_INDESTRUCTIBLE; + item._iMaxDur = DUR_INDESTRUCTIBLE; + break; + case IPL_LIGHT: + item._iPLLight += power.param1; + break; + case IPL_LIGHT_CURSE: + item._iPLLight -= power.param1; + break; + case IPL_MULT_ARROWS: + item._iFlags |= ISPL_MULT_ARROWS; + break; + case IPL_FIRE_ARROWS: + item._iFlags |= ISPL_FIRE_ARROWS; + item._iFlags &= ~ISPL_LIGHT_ARROWS; + item._iFMinDam = power.param1; + item._iFMaxDam = power.param2; + item._iLMinDam = 0; + item._iLMaxDam = 0; + break; + case IPL_LIGHT_ARROWS: + item._iFlags |= ISPL_LIGHT_ARROWS; + item._iFlags &= ~ISPL_FIRE_ARROWS; + item._iLMinDam = power.param1; + item._iLMaxDam = power.param2; + item._iFMinDam = 0; + item._iFMaxDam = 0; + break; + case IPL_FIREBALL: + item._iFlags |= (ISPL_LIGHT_ARROWS | ISPL_FIRE_ARROWS); + item._iFMinDam = power.param1; + item._iFMaxDam = power.param2; + item._iLMinDam = 0; + item._iLMaxDam = 0; + break; + case IPL_THORNS: + item._iFlags |= ISPL_THORNS; + break; + case IPL_NOMANA: + item._iFlags |= ISPL_NOMANA; + drawmanaflag = true; + break; + case IPL_NOHEALPLR: + item._iFlags |= ISPL_NOHEALPLR; + break; + case IPL_ABSHALFTRAP: + item._iFlags |= ISPL_ABSHALFTRAP; + break; + case IPL_KNOCKBACK: + item._iFlags |= ISPL_KNOCKBACK; + break; + case IPL_3XDAMVDEM: + item._iFlags |= ISPL_3XDAMVDEM; + break; + case IPL_ALLRESZERO: + item._iFlags |= ISPL_ALLRESZERO; + break; + case IPL_NOHEALMON: + item._iFlags |= ISPL_NOHEALMON; + break; + case IPL_STEALMANA: + if (power.param1 == 3) + item._iFlags |= ISPL_STEALMANA_3; + if (power.param1 == 5) + item._iFlags |= ISPL_STEALMANA_5; + drawmanaflag = true; + break; + case IPL_STEALLIFE: + if (power.param1 == 3) + item._iFlags |= ISPL_STEALLIFE_3; + if (power.param1 == 5) + item._iFlags |= ISPL_STEALLIFE_5; + drawhpflag = true; + break; + case IPL_TARGAC: + if (gbIsHellfire) + item._iPLEnAc = power.param1; + else + item._iPLEnAc += r; + break; + case IPL_FASTATTACK: + if (power.param1 == 1) + item._iFlags |= ISPL_QUICKATTACK; + if (power.param1 == 2) + item._iFlags |= ISPL_FASTATTACK; + if (power.param1 == 3) + item._iFlags |= ISPL_FASTERATTACK; + if (power.param1 == 4) + item._iFlags |= ISPL_FASTESTATTACK; + break; + case IPL_FASTRECOVER: + if (power.param1 == 1) + item._iFlags |= ISPL_FASTRECOVER; + if (power.param1 == 2) + item._iFlags |= ISPL_FASTERRECOVER; + if (power.param1 == 3) + item._iFlags |= ISPL_FASTESTRECOVER; + break; + case IPL_FASTBLOCK: + item._iFlags |= ISPL_FASTBLOCK; + break; + case IPL_DAMMOD: + item._iPLDamMod += r; + break; + case IPL_RNDARROWVEL: + item._iFlags |= ISPL_RNDARROWVEL; + break; + case IPL_SETDAM: + item._iMinDam = power.param1; + item._iMaxDam = power.param2; + break; + case IPL_SETDUR: + item._iDurability = power.param1; + item._iMaxDur = power.param1; + break; + case IPL_FASTSWING: + item._iFlags |= ISPL_FASTERATTACK; + break; + case IPL_ONEHAND: + item._iLoc = ILOC_ONEHAND; + break; + case IPL_DRAINLIFE: + item._iFlags |= ISPL_DRAINLIFE; + break; + case IPL_RNDSTEALLIFE: + item._iFlags |= ISPL_RNDSTEALLIFE; + break; + case IPL_INFRAVISION: + item._iFlags |= ISPL_INFRAVISION; + break; + case IPL_NOMINSTR: + item._iMinStr = 0; + break; + case IPL_INVCURS: + item._iCurs = power.param1; + break; + case IPL_ADDACLIFE: + item._iFlags |= (ISPL_LIGHT_ARROWS | ISPL_FIRE_ARROWS); + item._iFMinDam = power.param1; + item._iFMaxDam = power.param2; + item._iLMinDam = 1; + item._iLMaxDam = 0; + break; + case IPL_ADDMANAAC: + item._iFlags |= (ISPL_LIGHTDAM | ISPL_FIREDAM); + item._iFMinDam = power.param1; + item._iFMaxDam = power.param2; + item._iLMinDam = 2; + item._iLMaxDam = 0; + break; + case IPL_FIRERESCLVL: + item._iPLFR = 30 - Players[MyPlayerId]._pLevel; + item._iPLFR = std::max(item._iPLFR, 0); + break; + case IPL_FIRERES_CURSE: + item._iPLFR -= r; + break; + case IPL_LIGHTRES_CURSE: + item._iPLLR -= r; + break; + case IPL_MAGICRES_CURSE: + item._iPLMR -= r; + break; + case IPL_ALLRES_CURSE: + item._iPLFR -= r; + item._iPLLR -= r; + item._iPLMR -= r; + break; + case IPL_DEVASTATION: + item._iDamAcFlags |= ISPLHF_DEVASTATION; + break; + case IPL_DECAY: + item._iDamAcFlags |= ISPLHF_DECAY; + item._iPLDam += r; + break; + case IPL_PERIL: + item._iDamAcFlags |= ISPLHF_PERIL; + break; + case IPL_JESTERS: + item._iDamAcFlags |= ISPLHF_JESTERS; + break; + case IPL_ACDEMON: + item._iDamAcFlags |= ISPLHF_ACDEMON; + break; + case IPL_ACUNDEAD: + item._iDamAcFlags |= ISPLHF_ACUNDEAD; + break; + case IPL_MANATOLIFE: + r2 = ((Players[MyPlayerId]._pMaxManaBase >> 6) * 50 / 100); + item._iPLMana -= (r2 << 6); + item._iPLHP += (r2 << 6); + break; + case IPL_LIFETOMANA: + r2 = ((Players[MyPlayerId]._pMaxHPBase >> 6) * 40 / 100); + item._iPLHP -= (r2 << 6); + item._iPLMana += (r2 << 6); + break; + default: + break; + } + if (item._iVAdd1 != 0 || item._iVMult1 != 0) { + item._iVAdd2 = PLVal(r, power.param1, power.param2, power.minval, power.maxval); + item._iVMult2 = power.multval; + } else { + item._iVAdd1 = PLVal(r, power.param1, power.param2, power.minval, power.maxval); + item._iVMult1 = power.multval; + } +} + } // namespace enum anim_armor_id : uint8_t { @@ -1465,7 +1865,7 @@ void GetStaffPower(int i, int lvl, int bs, bool onlygood) if (GenerateRnd(10) == 0 || onlygood) { int nl = 0; int l[256]; - for (int j = 0; ItemPrefixes[j].PLPower != IPL_INVALID; j++) { + for (int j = 0; ItemPrefixes[j].power.type != IPL_INVALID; j++) { if (!IsPrefixValidForItemType(j, PLT_STAFF) || ItemPrefixes[j].PLMinLvl > lvl) continue; if (onlygood && !ItemPrefixes[j].PLOk) @@ -1483,15 +1883,8 @@ void GetStaffPower(int i, int lvl, int bs, bool onlygood) sprintf(istr, "%s %s", _(ItemPrefixes[preidx].PLName), Items[i]._iIName); strcpy(Items[i]._iIName, istr); Items[i]._iMagical = ITEM_QUALITY_MAGIC; - SaveItemPower( - i, - ItemPrefixes[preidx].PLPower, - ItemPrefixes[preidx].PLParam1, - ItemPrefixes[preidx].PLParam2, - ItemPrefixes[preidx].PLMinVal, - ItemPrefixes[preidx].PLMaxVal, - ItemPrefixes[preidx].PLMultVal); - Items[i]._iPrePower = ItemPrefixes[preidx].PLPower; + SaveItemPower(Items[i], ItemPrefixes[preidx].power); + Items[i]._iPrePower = ItemPrefixes[preidx].power.type; } } if (!StringInPanel(Items[i]._iIName)) { @@ -1646,428 +2039,18 @@ void GetItemAttrs(int i, int idata, int lvl) SetPlrHandGoldCurs(&Items[i]); } -int RndPL(int param1, int param2) -{ - return param1 + GenerateRnd(param2 - param1 + 1); -} - -int PLVal(int pv, int p1, int p2, int minv, int maxv) -{ - if (p1 == p2) - return minv; - if (minv == maxv) - return minv; - return minv + (maxv - minv) * (100 * (pv - p1) / (p2 - p1)) / 100; -} - -void SaveItemPower(int i, item_effect_type power, int param1, int param2, int minval, int maxval, int multval) -{ - int r = RndPL(param1, param2); - int r2; - - switch (power) { - case IPL_TOHIT: - Items[i]._iPLToHit += r; - break; - case IPL_TOHIT_CURSE: - Items[i]._iPLToHit -= r; - break; - case IPL_DAMP: - Items[i]._iPLDam += r; - break; - case IPL_DAMP_CURSE: - Items[i]._iPLDam -= r; - break; - case IPL_DOPPELGANGER: - Items[i]._iDamAcFlags |= ISPLHF_DOPPELGANGER; - [[fallthrough]]; - case IPL_TOHIT_DAMP: - r = RndPL(param1, param2); - Items[i]._iPLDam += r; - if (param1 == 20) - r2 = RndPL(1, 5); - if (param1 == 36) - r2 = RndPL(6, 10); - if (param1 == 51) - r2 = RndPL(11, 15); - if (param1 == 66) - r2 = RndPL(16, 20); - if (param1 == 81) - r2 = RndPL(21, 30); - if (param1 == 96) - r2 = RndPL(31, 40); - if (param1 == 111) - r2 = RndPL(41, 50); - if (param1 == 126) - r2 = RndPL(51, 75); - if (param1 == 151) - r2 = RndPL(76, 100); - - Items[i]._iPLToHit += r2; - break; - case IPL_TOHIT_DAMP_CURSE: - Items[i]._iPLDam -= r; - if (param1 == 25) - r2 = RndPL(1, 5); - if (param1 == 50) - r2 = RndPL(6, 10); - - Items[i]._iPLToHit -= r2; - break; - case IPL_ACP: - Items[i]._iPLAC += r; - break; - case IPL_ACP_CURSE: - Items[i]._iPLAC -= r; - break; - case IPL_SETAC: - Items[i]._iAC = r; - break; - case IPL_AC_CURSE: - Items[i]._iAC -= r; - break; - case IPL_FIRERES: - Items[i]._iPLFR += r; - break; - case IPL_LIGHTRES: - Items[i]._iPLLR += r; - break; - case IPL_MAGICRES: - Items[i]._iPLMR += r; - break; - case IPL_ALLRES: - Items[i]._iPLFR = std::max(Items[i]._iPLFR + r, 0); - Items[i]._iPLLR = std::max(Items[i]._iPLLR + r, 0); - Items[i]._iPLMR = std::max(Items[i]._iPLMR + r, 0); - break; - case IPL_SPLLVLADD: - Items[i]._iSplLvlAdd = r; - break; - case IPL_CHARGES: - Items[i]._iCharges *= param1; - Items[i]._iMaxCharges = Items[i]._iCharges; - break; - case IPL_SPELL: - Items[i]._iSpell = static_cast(param1); - Items[i]._iCharges = param2; - Items[i]._iMaxCharges = param2; - break; - case IPL_FIREDAM: - Items[i]._iFlags |= ISPL_FIREDAM; - Items[i]._iFlags &= ~ISPL_LIGHTDAM; - Items[i]._iFMinDam = param1; - Items[i]._iFMaxDam = param2; - Items[i]._iLMinDam = 0; - Items[i]._iLMaxDam = 0; - break; - case IPL_LIGHTDAM: - Items[i]._iFlags |= ISPL_LIGHTDAM; - Items[i]._iFlags &= ~ISPL_FIREDAM; - Items[i]._iLMinDam = param1; - Items[i]._iLMaxDam = param2; - Items[i]._iFMinDam = 0; - Items[i]._iFMaxDam = 0; - break; - case IPL_STR: - Items[i]._iPLStr += r; - break; - case IPL_STR_CURSE: - Items[i]._iPLStr -= r; - break; - case IPL_MAG: - Items[i]._iPLMag += r; - break; - case IPL_MAG_CURSE: - Items[i]._iPLMag -= r; - break; - case IPL_DEX: - Items[i]._iPLDex += r; - break; - case IPL_DEX_CURSE: - Items[i]._iPLDex -= r; - break; - case IPL_VIT: - Items[i]._iPLVit += r; - break; - case IPL_VIT_CURSE: - Items[i]._iPLVit -= r; - break; - case IPL_ATTRIBS: - Items[i]._iPLStr += r; - Items[i]._iPLMag += r; - Items[i]._iPLDex += r; - Items[i]._iPLVit += r; - break; - case IPL_ATTRIBS_CURSE: - Items[i]._iPLStr -= r; - Items[i]._iPLMag -= r; - Items[i]._iPLDex -= r; - Items[i]._iPLVit -= r; - break; - case IPL_GETHIT_CURSE: - Items[i]._iPLGetHit += r; - break; - case IPL_GETHIT: - Items[i]._iPLGetHit -= r; - break; - case IPL_LIFE: - Items[i]._iPLHP += r << 6; - break; - case IPL_LIFE_CURSE: - Items[i]._iPLHP -= r << 6; - break; - case IPL_MANA: - Items[i]._iPLMana += r << 6; - drawmanaflag = true; - break; - case IPL_MANA_CURSE: - Items[i]._iPLMana -= r << 6; - drawmanaflag = true; - break; - case IPL_DUR: - r2 = r * Items[i]._iMaxDur / 100; - Items[i]._iMaxDur += r2; - Items[i]._iDurability += r2; - break; - case IPL_CRYSTALLINE: - Items[i]._iPLDam += 140 + r * 2; - [[fallthrough]]; - case IPL_DUR_CURSE: - Items[i]._iMaxDur -= r * Items[i]._iMaxDur / 100; - Items[i]._iMaxDur = std::max(Items[i]._iMaxDur, 1); - - Items[i]._iDurability = Items[i]._iMaxDur; - break; - case IPL_INDESTRUCTIBLE: - Items[i]._iDurability = DUR_INDESTRUCTIBLE; - Items[i]._iMaxDur = DUR_INDESTRUCTIBLE; - break; - case IPL_LIGHT: - Items[i]._iPLLight += param1; - break; - case IPL_LIGHT_CURSE: - Items[i]._iPLLight -= param1; - break; - case IPL_MULT_ARROWS: - Items[i]._iFlags |= ISPL_MULT_ARROWS; - break; - case IPL_FIRE_ARROWS: - Items[i]._iFlags |= ISPL_FIRE_ARROWS; - Items[i]._iFlags &= ~ISPL_LIGHT_ARROWS; - Items[i]._iFMinDam = param1; - Items[i]._iFMaxDam = param2; - Items[i]._iLMinDam = 0; - Items[i]._iLMaxDam = 0; - break; - case IPL_LIGHT_ARROWS: - Items[i]._iFlags |= ISPL_LIGHT_ARROWS; - Items[i]._iFlags &= ~ISPL_FIRE_ARROWS; - Items[i]._iLMinDam = param1; - Items[i]._iLMaxDam = param2; - Items[i]._iFMinDam = 0; - Items[i]._iFMaxDam = 0; - break; - case IPL_FIREBALL: - Items[i]._iFlags |= (ISPL_LIGHT_ARROWS | ISPL_FIRE_ARROWS); - Items[i]._iFMinDam = param1; - Items[i]._iFMaxDam = param2; - Items[i]._iLMinDam = 0; - Items[i]._iLMaxDam = 0; - break; - case IPL_THORNS: - Items[i]._iFlags |= ISPL_THORNS; - break; - case IPL_NOMANA: - Items[i]._iFlags |= ISPL_NOMANA; - drawmanaflag = true; - break; - case IPL_NOHEALPLR: - Items[i]._iFlags |= ISPL_NOHEALPLR; - break; - case IPL_ABSHALFTRAP: - Items[i]._iFlags |= ISPL_ABSHALFTRAP; - break; - case IPL_KNOCKBACK: - Items[i]._iFlags |= ISPL_KNOCKBACK; - break; - case IPL_3XDAMVDEM: - Items[i]._iFlags |= ISPL_3XDAMVDEM; - break; - case IPL_ALLRESZERO: - Items[i]._iFlags |= ISPL_ALLRESZERO; - break; - case IPL_NOHEALMON: - Items[i]._iFlags |= ISPL_NOHEALMON; - break; - case IPL_STEALMANA: - if (param1 == 3) - Items[i]._iFlags |= ISPL_STEALMANA_3; - if (param1 == 5) - Items[i]._iFlags |= ISPL_STEALMANA_5; - drawmanaflag = true; - break; - case IPL_STEALLIFE: - if (param1 == 3) - Items[i]._iFlags |= ISPL_STEALLIFE_3; - if (param1 == 5) - Items[i]._iFlags |= ISPL_STEALLIFE_5; - drawhpflag = true; - break; - case IPL_TARGAC: - if (gbIsHellfire) - Items[i]._iPLEnAc = param1; - else - Items[i]._iPLEnAc += r; - break; - case IPL_FASTATTACK: - if (param1 == 1) - Items[i]._iFlags |= ISPL_QUICKATTACK; - if (param1 == 2) - Items[i]._iFlags |= ISPL_FASTATTACK; - if (param1 == 3) - Items[i]._iFlags |= ISPL_FASTERATTACK; - if (param1 == 4) - Items[i]._iFlags |= ISPL_FASTESTATTACK; - break; - case IPL_FASTRECOVER: - if (param1 == 1) - Items[i]._iFlags |= ISPL_FASTRECOVER; - if (param1 == 2) - Items[i]._iFlags |= ISPL_FASTERRECOVER; - if (param1 == 3) - Items[i]._iFlags |= ISPL_FASTESTRECOVER; - break; - case IPL_FASTBLOCK: - Items[i]._iFlags |= ISPL_FASTBLOCK; - break; - case IPL_DAMMOD: - Items[i]._iPLDamMod += r; - break; - case IPL_RNDARROWVEL: - Items[i]._iFlags |= ISPL_RNDARROWVEL; - break; - case IPL_SETDAM: - Items[i]._iMinDam = param1; - Items[i]._iMaxDam = param2; - break; - case IPL_SETDUR: - Items[i]._iDurability = param1; - Items[i]._iMaxDur = param1; - break; - case IPL_FASTSWING: - Items[i]._iFlags |= ISPL_FASTERATTACK; - break; - case IPL_ONEHAND: - Items[i]._iLoc = ILOC_ONEHAND; - break; - case IPL_DRAINLIFE: - Items[i]._iFlags |= ISPL_DRAINLIFE; - break; - case IPL_RNDSTEALLIFE: - Items[i]._iFlags |= ISPL_RNDSTEALLIFE; - break; - case IPL_INFRAVISION: - Items[i]._iFlags |= ISPL_INFRAVISION; - break; - case IPL_NOMINSTR: - Items[i]._iMinStr = 0; - break; - case IPL_INVCURS: - Items[i]._iCurs = param1; - break; - case IPL_ADDACLIFE: - Items[i]._iFlags |= (ISPL_LIGHT_ARROWS | ISPL_FIRE_ARROWS); - Items[i]._iFMinDam = param1; - Items[i]._iFMaxDam = param2; - Items[i]._iLMinDam = 1; - Items[i]._iLMaxDam = 0; - break; - case IPL_ADDMANAAC: - Items[i]._iFlags |= (ISPL_LIGHTDAM | ISPL_FIREDAM); - Items[i]._iFMinDam = param1; - Items[i]._iFMaxDam = param2; - Items[i]._iLMinDam = 2; - Items[i]._iLMaxDam = 0; - break; - case IPL_FIRERESCLVL: - Items[i]._iPLFR = 30 - Players[MyPlayerId]._pLevel; - Items[i]._iPLFR = std::max(Items[i]._iPLFR, 0); - break; - case IPL_FIRERES_CURSE: - Items[i]._iPLFR -= r; - break; - case IPL_LIGHTRES_CURSE: - Items[i]._iPLLR -= r; - break; - case IPL_MAGICRES_CURSE: - Items[i]._iPLMR -= r; - break; - case IPL_ALLRES_CURSE: - Items[i]._iPLFR -= r; - Items[i]._iPLLR -= r; - Items[i]._iPLMR -= r; - break; - case IPL_DEVASTATION: - Items[i]._iDamAcFlags |= ISPLHF_DEVASTATION; - break; - case IPL_DECAY: - Items[i]._iDamAcFlags |= ISPLHF_DECAY; - Items[i]._iPLDam += r; - break; - case IPL_PERIL: - Items[i]._iDamAcFlags |= ISPLHF_PERIL; - break; - case IPL_JESTERS: - Items[i]._iDamAcFlags |= ISPLHF_JESTERS; - break; - case IPL_ACDEMON: - Items[i]._iDamAcFlags |= ISPLHF_ACDEMON; - break; - case IPL_ACUNDEAD: - Items[i]._iDamAcFlags |= ISPLHF_ACUNDEAD; - break; - case IPL_MANATOLIFE: - r2 = ((Players[MyPlayerId]._pMaxManaBase >> 6) * 50 / 100); - Items[i]._iPLMana -= (r2 << 6); - Items[i]._iPLHP += (r2 << 6); - break; - case IPL_LIFETOMANA: - r2 = ((Players[MyPlayerId]._pMaxHPBase >> 6) * 40 / 100); - Items[i]._iPLHP -= (r2 << 6); - Items[i]._iPLMana += (r2 << 6); - break; - default: - break; - } - if (Items[i]._iVAdd1 != 0 || Items[i]._iVMult1 != 0) { - Items[i]._iVAdd2 = PLVal(r, param1, param2, minval, maxval); - Items[i]._iVMult2 = multval; - } else { - Items[i]._iVAdd1 = PLVal(r, param1, param2, minval, maxval); - Items[i]._iVMult1 = multval; - } -} - static void SaveItemSuffix(int i, int sufidx) { - int param1 = ItemSuffixes[sufidx].PLParam1; - int param2 = ItemSuffixes[sufidx].PLParam2; + auto power = ItemSuffixes[sufidx].power; if (!gbIsHellfire) { if (sufidx >= 84 && sufidx <= 86) { - param1 = 2 << param1; - param2 = 6 << param2; + power.param1 = 2 << power.param1; + power.param2 = 6 << power.param2; } } - SaveItemPower( - i, - ItemSuffixes[sufidx].PLPower, - param1, - param2, - ItemSuffixes[sufidx].PLMinVal, - ItemSuffixes[sufidx].PLMaxVal, - ItemSuffixes[sufidx].PLMultVal); + SaveItemPower(Items[i], power); } void GetItemPower(int i, int minlvl, int maxlvl, affix_item_type flgs, bool onlygood) @@ -2091,14 +2074,14 @@ void GetItemPower(int i, int minlvl, int maxlvl, affix_item_type flgs, bool only onlygood = true; if (pre == 0) { int nt = 0; - for (int j = 0; ItemPrefixes[j].PLPower != IPL_INVALID; j++) { + for (int j = 0; ItemPrefixes[j].power.type != IPL_INVALID; j++) { if (!IsPrefixValidForItemType(j, flgs)) continue; if (ItemPrefixes[j].PLMinLvl < minlvl || ItemPrefixes[j].PLMinLvl > maxlvl) continue; if (onlygood && !ItemPrefixes[j].PLOk) continue; - if (flgs == PLT_STAFF && ItemPrefixes[j].PLPower == IPL_CHARGES) + if (flgs == PLT_STAFF && ItemPrefixes[j].power.type == IPL_CHARGES) continue; l[nt] = j; nt++; @@ -2112,21 +2095,14 @@ void GetItemPower(int i, int minlvl, int maxlvl, affix_item_type flgs, bool only sprintf(istr, "%s %s", _(ItemPrefixes[preidx].PLName), Items[i]._iIName); strcpy(Items[i]._iIName, istr); Items[i]._iMagical = ITEM_QUALITY_MAGIC; - SaveItemPower( - i, - ItemPrefixes[preidx].PLPower, - ItemPrefixes[preidx].PLParam1, - ItemPrefixes[preidx].PLParam2, - ItemPrefixes[preidx].PLMinVal, - ItemPrefixes[preidx].PLMaxVal, - ItemPrefixes[preidx].PLMultVal); - Items[i]._iPrePower = ItemPrefixes[preidx].PLPower; + SaveItemPower(Items[i], ItemPrefixes[preidx].power); + Items[i]._iPrePower = ItemPrefixes[preidx].power.type; goe = ItemPrefixes[preidx].PLGOE; } } if (post != 0) { int nl = 0; - for (int j = 0; ItemSuffixes[j].PLPower != IPL_INVALID; j++) { + for (int j = 0; ItemSuffixes[j].power.type != IPL_INVALID; j++) { if (IsSuffixValidForItemType(j, flgs) && ItemSuffixes[j].PLMinLvl >= minlvl && ItemSuffixes[j].PLMinLvl <= maxlvl && !((goe == GOE_GOOD && ItemSuffixes[j].PLGOE == GOE_EVIL) || (goe == GOE_EVIL && ItemSuffixes[j].PLGOE == GOE_GOOD)) @@ -2141,7 +2117,7 @@ void GetItemPower(int i, int minlvl, int maxlvl, affix_item_type flgs, bool only strcpy(Items[i]._iIName, istr); Items[i]._iMagical = ITEM_QUALITY_MAGIC; SaveItemSuffix(i, sufidx); - Items[i]._iSufPower = ItemSuffixes[sufidx].PLPower; + Items[i]._iSufPower = ItemSuffixes[sufidx].power.type; } } if (!StringInPanel(Items[i]._iIName)) { @@ -2380,31 +2356,23 @@ _unique_items CheckUnique(int i, int lvl, int uper, bool recreate) return (_unique_items)idata; } -void GetUniqueItem(int i, _unique_items uid) +void GetUniqueItem(ItemStruct &item, _unique_items uid) { UniqueItemFlags[uid] = true; - SaveItemPower(i, UniqueItemList[uid].UIPower1, UniqueItemList[uid].UIParam1, UniqueItemList[uid].UIParam2, 0, 0, 1); - if (UniqueItemList[uid].UINumPL > 1) - SaveItemPower(i, UniqueItemList[uid].UIPower2, UniqueItemList[uid].UIParam3, UniqueItemList[uid].UIParam4, 0, 0, 1); - if (UniqueItemList[uid].UINumPL > 2) - SaveItemPower(i, UniqueItemList[uid].UIPower3, UniqueItemList[uid].UIParam5, UniqueItemList[uid].UIParam6, 0, 0, 1); - if (UniqueItemList[uid].UINumPL > 3) - SaveItemPower(i, UniqueItemList[uid].UIPower4, UniqueItemList[uid].UIParam7, UniqueItemList[uid].UIParam8, 0, 0, 1); - if (UniqueItemList[uid].UINumPL > 4) - SaveItemPower(i, UniqueItemList[uid].UIPower5, UniqueItemList[uid].UIParam9, UniqueItemList[uid].UIParam10, 0, 0, 1); - if (UniqueItemList[uid].UINumPL > 5) - SaveItemPower(i, UniqueItemList[uid].UIPower6, UniqueItemList[uid].UIParam11, UniqueItemList[uid].UIParam12, 0, 0, 1); + for (int i = 0; i < UniqueItemList[uid].UINumPL; i++) { + SaveItemPower(item, UniqueItemList[uid].powers[i]); + } - strcpy(Items[i]._iIName, _(UniqueItemList[uid].UIName)); - Items[i]._iIvalue = UniqueItemList[uid].UIValue; + strcpy(item._iIName, _(UniqueItemList[uid].UIName)); + item._iIvalue = UniqueItemList[uid].UIValue; - if (Items[i]._iMiscId == IMISC_UNIQUE) - Items[i]._iSeed = uid; + if (item._iMiscId == IMISC_UNIQUE) + item._iSeed = uid; - Items[i]._iUid = uid; - Items[i]._iMagical = ITEM_QUALITY_UNIQUE; - Items[i]._iCreateInfo |= CF_UNIQUE; + item._iUid = uid; + item._iMagical = ITEM_QUALITY_UNIQUE; + item._iCreateInfo |= CF_UNIQUE; } void SpawnUnique(_unique_items uid, Point position) @@ -2421,7 +2389,7 @@ void SpawnUnique(_unique_items uid, Point position) idx++; GetItemAttrs(ii, idx, curlv); - GetUniqueItem(ii, uid); + GetUniqueItem(Items[ii], uid); SetupItem(ii); } @@ -2473,14 +2441,14 @@ void SetupAllItems(int ii, int idx, int iseed, int lvl, int uper, bool onlygood, if (uid == UITEM_INVALID) { GetItemBonus(ii, iblvl / 2, iblvl, onlygood, true); } else { - GetUniqueItem(ii, uid); + GetUniqueItem(Items[ii], uid); } } if (Items[ii]._iMagical != ITEM_QUALITY_UNIQUE) ItemRndDur(ii); } else { if (Items[ii]._iLoc != ILOC_UNEQUIPABLE) { - GetUniqueItem(ii, (_unique_items)iseed); // uid is stored in iseed for uniques + GetUniqueItem(Items[ii], (_unique_items)iseed); // uid is stored in iseed for uniques } } SetupItem(ii); @@ -3658,31 +3626,31 @@ void DrawUniqueInfo(const Surface &out) DrawULine(out, 5); rect.position.y += (12 - uitem.UINumPL) * 12; - PrintItemPower(uitem.UIPower1, &curruitem); + PrintItemPower(uitem.powers[0].type, &curruitem); DrawString(out, tempstr, rect, UIS_SILVER | UIS_CENTER); if (uitem.UINumPL > 1) { rect.position.y += 2 * 12; - PrintItemPower(uitem.UIPower2, &curruitem); + PrintItemPower(uitem.powers[1].type, &curruitem); DrawString(out, tempstr, rect, UIS_SILVER | UIS_CENTER); } if (uitem.UINumPL > 2) { rect.position.y += 2 * 12; - PrintItemPower(uitem.UIPower3, &curruitem); + PrintItemPower(uitem.powers[2].type, &curruitem); DrawString(out, tempstr, rect, UIS_SILVER | UIS_CENTER); } if (uitem.UINumPL > 3) { rect.position.y += 2 * 12; - PrintItemPower(uitem.UIPower4, &curruitem); + PrintItemPower(uitem.powers[3].type, &curruitem); DrawString(out, tempstr, rect, UIS_SILVER | UIS_CENTER); } if (uitem.UINumPL > 4) { rect.position.y += 2 * 12; - PrintItemPower(uitem.UIPower5, &curruitem); + PrintItemPower(uitem.powers[4].type, &curruitem); DrawString(out, tempstr, rect, UIS_SILVER | UIS_CENTER); } if (uitem.UINumPL > 5) { rect.position.y += 2 * 12; - PrintItemPower(uitem.UIPower6, &curruitem); + PrintItemPower(uitem.powers[5].type, &curruitem); DrawString(out, tempstr, rect, UIS_SILVER | UIS_CENTER); } } diff --git a/Source/items.h b/Source/items.h index a7e4228d8..cf4f1a8f8 100644 --- a/Source/items.h +++ b/Source/items.h @@ -420,7 +420,6 @@ bool ItemSpaceOk(Point position); int AllocateItem(); Point GetSuperItemLoc(Point position); void GetItemAttrs(int i, int idata, int lvl); -void SaveItemPower(int i, item_effect_type power, int param1, int param2, int minval, int maxval, int multval); void GetItemPower(int i, int minlvl, int maxlvl, affix_item_type flgs, bool onlygood); void SetupItem(int i); int RndItem(int m);