From 0bae1ea3a1548f46265b65693980bcbcabb699aa Mon Sep 17 00:00:00 2001 From: DakkJaniels <6080734+DakkJaniels@users.noreply.github.com> Date: Sat, 5 Mar 2022 22:19:33 -0500 Subject: [PATCH] switch affix_item_type bit flag enum to class format (#4123) --- Source/itemdat.cpp | 376 ++++++++++++++++++++++----------------------- Source/itemdat.h | 18 ++- Source/items.cpp | 36 ++--- 3 files changed, 216 insertions(+), 214 deletions(-) diff --git a/Source/itemdat.cpp b/Source/itemdat.cpp index c874e56b1..4b800eeba 100644 --- a/Source/itemdat.cpp +++ b/Source/itemdat.cpp @@ -224,204 +224,204 @@ ItemData AllItemsList[] = { /** Contains the data related to each item prefix. */ const PLStruct ItemPrefixes[] = { // clang-format off - // PLName, { type, param1, param2 }, PLMinLvl, PLIType, PLGOE, PLDouble, PLOk, minVal, maxVal, multVal + // PLName, { type, param1, param2 }, PLMinLvl, PLIType, PLGOE, PLDouble, PLOk, minVal, maxVal, multVal // 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 }, 3, AffixItemType::Weapon | AffixItemType::Bow | AffixItemType::Misc, GOE_ANY, true, false, 0, 0, -3 }, + { N_("Brass"), { IPL_TOHIT_CURSE, 1, 5 }, 1, AffixItemType::Weapon | AffixItemType::Bow | AffixItemType::Misc, GOE_ANY, true, false, 0, 0, -2 }, + { N_("Bronze"), { IPL_TOHIT, 1, 5 }, 1, AffixItemType::Weapon | AffixItemType::Bow | AffixItemType::Misc, GOE_ANY, true, true, 100, 500, 2 }, + { N_("Iron"), { IPL_TOHIT, 6, 10 }, 4, AffixItemType::Weapon | AffixItemType::Bow | AffixItemType::Misc, GOE_ANY, true, true, 600, 1000, 3 }, + { N_("Steel"), { IPL_TOHIT, 11, 15 }, 6, AffixItemType::Weapon | AffixItemType::Bow | AffixItemType::Misc, GOE_ANY, true, true, 1100, 1500, 5 }, + { N_("Silver"), { IPL_TOHIT, 16, 20 }, 9, AffixItemType::Weapon | AffixItemType::Bow | AffixItemType::Misc, GOE_GOOD, true, true, 1600, 2000, 7 }, + { N_("Gold"), { IPL_TOHIT, 21, 30 }, 12, AffixItemType::Weapon | AffixItemType::Bow | AffixItemType::Misc, GOE_GOOD, true, true, 2100, 3000, 9 }, + { N_("Platinum"), { IPL_TOHIT, 31, 40 }, 16, AffixItemType::Weapon | AffixItemType::Bow , GOE_GOOD, true, true, 3100, 4000, 11 }, + { N_("Mithril"), { IPL_TOHIT, 41, 60 }, 20, AffixItemType::Weapon | AffixItemType::Bow , GOE_GOOD, true, true, 4100, 6000, 13 }, + { N_("Meteoric"), { IPL_TOHIT, 61, 80 }, 23, AffixItemType::Weapon | AffixItemType::Bow , GOE_ANY, true, true, 6100, 10000, 15 }, + { N_("Weird"), { IPL_TOHIT, 81, 100 }, 35, AffixItemType::Weapon | AffixItemType::Bow , GOE_ANY, true, true, 10100, 14000, 17 }, + { N_("Strange"), { IPL_TOHIT, 101, 150 }, 60, AffixItemType::Weapon | AffixItemType::Bow , GOE_ANY, true, true, 14100, 20000, 20 }, + { N_("Useless"), { IPL_DAMP_CURSE, 100, 100 }, 5, AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow , GOE_ANY, true, false, 0, 0, -8 }, + { N_("Bent"), { IPL_DAMP_CURSE, 50, 75 }, 3, AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow , GOE_ANY, true, false, 0, 0, -4 }, + { N_("Weak"), { IPL_DAMP_CURSE, 25, 45 }, 1, AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow , GOE_ANY, true, false, 0, 0, -3 }, + { N_("Jagged"), { IPL_DAMP, 20, 35 }, 4, AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow , GOE_ANY, true, true, 250, 450, 3 }, + { N_("Deadly"), { IPL_DAMP, 36, 50 }, 6, AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow , GOE_ANY, true, true, 500, 700, 4 }, + { N_("Heavy"), { IPL_DAMP, 51, 65 }, 9, AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow , GOE_ANY, true, true, 750, 950, 5 }, + { N_("Vicious"), { IPL_DAMP, 66, 80 }, 12, AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow , GOE_EVIL, true, true, 1000, 1450, 8 }, + { N_("Brutal"), { IPL_DAMP, 81, 95 }, 16, AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow , GOE_ANY, true, true, 1500, 1950, 10 }, + { N_("Massive"), { IPL_DAMP, 96, 110 }, 20, AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow , GOE_ANY, true, true, 2000, 2450, 13 }, + { N_("Savage"), { IPL_DAMP, 111, 125 }, 23, AffixItemType::Weapon | AffixItemType::Bow , GOE_ANY, true, true, 2500, 3000, 15 }, + { N_("Ruthless"), { IPL_DAMP, 126, 150 }, 35, AffixItemType::Weapon | AffixItemType::Bow , GOE_ANY, true, true, 10100, 15000, 17 }, + { N_("Merciless"), { IPL_DAMP, 151, 175 }, 60, AffixItemType::Weapon | AffixItemType::Bow , GOE_ANY, true, true, 15000, 20000, 20 }, + { N_("Clumsy"), { IPL_TOHIT_DAMP_CURSE, 50, 75 }, 5, AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow , GOE_ANY, true, false, 0, 0, -7 }, + { N_("Dull"), { IPL_TOHIT_DAMP_CURSE, 25, 45 }, 1, AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow , GOE_ANY, true, false, 0, 0, -5 }, + { N_("Sharp"), { IPL_TOHIT_DAMP, 20, 35 }, 1, AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow , GOE_ANY, true, false, 350, 950, 5 }, + { N_("Fine"), { IPL_TOHIT_DAMP, 36, 50 }, 6, AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow , GOE_ANY, true, true, 1100, 1700, 7 }, + { N_("Warrior's"), { IPL_TOHIT_DAMP, 51, 65 }, 10, AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow , GOE_ANY, true, true, 1850, 2450, 13 }, + { N_("Soldier's"), { IPL_TOHIT_DAMP, 66, 80 }, 15, AffixItemType::Weapon | AffixItemType::Staff , GOE_ANY, true, true, 2600, 3950, 17 }, + { N_("Lord's"), { IPL_TOHIT_DAMP, 81, 95 }, 19, AffixItemType::Weapon | AffixItemType::Staff , GOE_ANY, true, true, 4100, 5950, 21 }, + { N_("Knight's"), { IPL_TOHIT_DAMP, 96, 110 }, 23, AffixItemType::Weapon | AffixItemType::Staff , GOE_ANY, true, true, 6100, 8450, 26 }, + { N_("Master's"), { IPL_TOHIT_DAMP, 111, 125 }, 28, AffixItemType::Weapon | AffixItemType::Staff , GOE_ANY, true, true, 8600, 13000, 30 }, + { N_("Champion's"), { IPL_TOHIT_DAMP, 126, 150 }, 40, AffixItemType::Weapon | AffixItemType::Staff , GOE_ANY, true, true, 15200, 24000, 33 }, + { N_("King's"), { IPL_TOHIT_DAMP, 151, 175 }, 28, AffixItemType::Weapon | AffixItemType::Staff , GOE_ANY, true, true, 24100, 35000, 38 }, + { N_("Vulnerable"), { IPL_ACP_CURSE, 51, 100 }, 3, AffixItemType::Armor | AffixItemType::Shield , GOE_ANY, true, false, 0, 0, -3 }, + { N_("Rusted"), { IPL_ACP_CURSE, 25, 50 }, 1, AffixItemType::Armor | AffixItemType::Shield , GOE_ANY, true, false, 0, 0, -2 }, + { N_("Fine"), { IPL_ACP, 20, 30 }, 1, AffixItemType::Armor | AffixItemType::Shield , GOE_ANY, true, true, 20, 100, 2 }, + { N_("Strong"), { IPL_ACP, 31, 40 }, 3, AffixItemType::Armor | AffixItemType::Shield , GOE_ANY, true, true, 120, 200, 3 }, + { N_("Grand"), { IPL_ACP, 41, 55 }, 6, AffixItemType::Armor | AffixItemType::Shield , GOE_ANY, true, true, 220, 300, 5 }, + { N_("Valiant"), { IPL_ACP, 56, 70 }, 10, AffixItemType::Armor | AffixItemType::Shield , GOE_ANY, true, true, 320, 400, 7 }, + { N_("Glorious"), { IPL_ACP, 71, 90 }, 14, AffixItemType::Armor | AffixItemType::Shield , GOE_GOOD, true, true, 420, 600, 9 }, + { N_("Blessed"), { IPL_ACP, 91, 110 }, 19, AffixItemType::Armor | AffixItemType::Shield , GOE_GOOD, true, true, 620, 800, 11 }, + { N_("Saintly"), { IPL_ACP, 111, 130 }, 24, AffixItemType::Armor | AffixItemType::Shield , GOE_GOOD, true, true, 820, 1200, 13 }, + { N_("Awesome"), { IPL_ACP, 131, 150 }, 28, AffixItemType::Armor | AffixItemType::Shield , GOE_GOOD, true, true, 1220, 2000, 15 }, + { N_("Holy"), { IPL_ACP, 151, 170 }, 35, AffixItemType::Armor | AffixItemType::Shield , GOE_GOOD, true, true, 5200, 6000, 17 }, + { N_("Godly"), { IPL_ACP, 171, 200 }, 60, AffixItemType::Armor | AffixItemType::Shield , GOE_GOOD, true, true, 6200, 7000, 20 }, + { N_("Red"), { IPL_FIRERES, 10, 20 }, 4, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow | AffixItemType::Misc, GOE_ANY, false, true, 500, 1500, 2 }, + { N_("Crimson"), { IPL_FIRERES, 21, 30 }, 10, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow | AffixItemType::Misc, GOE_ANY, false, true, 2100, 3000, 2 }, + { N_("Crimson"), { IPL_FIRERES, 31, 40 }, 16, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow | AffixItemType::Misc, GOE_ANY, false, true, 3100, 4000, 2 }, + { N_("Garnet"), { IPL_FIRERES, 41, 50 }, 20, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow | AffixItemType::Misc, GOE_ANY, false, true, 8200, 12000, 3 }, + { N_("Ruby"), { IPL_FIRERES, 51, 60 }, 26, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow | AffixItemType::Misc, GOE_ANY, false, true, 17100, 20000, 5 }, + { N_("Blue"), { IPL_LIGHTRES, 10, 20 }, 4, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow | AffixItemType::Misc, GOE_ANY, false, true, 500, 1500, 2 }, + { N_("Azure"), { IPL_LIGHTRES, 21, 30 }, 10, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow | AffixItemType::Misc, GOE_ANY, false, true, 2100, 3000, 2 }, + { N_("Lapis"), { IPL_LIGHTRES, 31, 40 }, 16, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow | AffixItemType::Misc, GOE_ANY, false, true, 3100, 4000, 2 }, + { N_("Cobalt"), { IPL_LIGHTRES, 41, 50 }, 20, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow | AffixItemType::Misc, GOE_ANY, false, true, 8200, 12000, 3 }, + { N_("Sapphire"), { IPL_LIGHTRES, 51, 60 }, 26, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow | AffixItemType::Misc, GOE_ANY, false, true, 17100, 20000, 5 }, + { N_("White"), { IPL_MAGICRES, 10, 20 }, 4, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow | AffixItemType::Misc, GOE_ANY, false, true, 500, 1500, 2 }, + { N_("Pearl"), { IPL_MAGICRES, 21, 30 }, 10, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow | AffixItemType::Misc, GOE_ANY, false, true, 2100, 3000, 2 }, + { N_("Ivory"), { IPL_MAGICRES, 31, 40 }, 16, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow | AffixItemType::Misc, GOE_ANY, false, true, 3100, 4000, 2 }, + { N_("Crystal"), { IPL_MAGICRES, 41, 50 }, 20, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow | AffixItemType::Misc, GOE_ANY, false, true, 8200, 12000, 3 }, + { N_("Diamond"), { IPL_MAGICRES, 51, 60 }, 26, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow | AffixItemType::Misc, GOE_ANY, false, true, 17100, 20000, 5 }, + { N_("Topaz"), { IPL_ALLRES, 10, 15 }, 8, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow | AffixItemType::Misc, GOE_ANY, false, true, 2000, 5000, 3 }, + { N_("Amber"), { IPL_ALLRES, 16, 20 }, 12, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow | AffixItemType::Misc, GOE_ANY, false, true, 7400, 10000, 3 }, + { N_("Jade"), { IPL_ALLRES, 21, 30 }, 18, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow | AffixItemType::Misc, GOE_ANY, false, true, 11000, 15000, 3 }, + { N_("Obsidian"), { IPL_ALLRES, 31, 40 }, 24, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow | AffixItemType::Misc, GOE_ANY, false, true, 24000, 40000, 4 }, + { N_("Emerald"), { IPL_ALLRES, 41, 50 }, 31, AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow , GOE_ANY, false, true, 61000, 75000, 7 }, + { N_("Hyena's"), { IPL_MANA_CURSE, 11, 25 }, 4, AffixItemType::Staff | AffixItemType::Misc, GOE_ANY, false, false, 100, 1000, -2 }, + { N_("Frog's"), { IPL_MANA_CURSE, 1, 10 }, 1, AffixItemType::Staff | AffixItemType::Misc, GOE_EVIL, false, false, 0, 0, -2 }, + { N_("Spider's"), { IPL_MANA, 10, 15 }, 1, AffixItemType::Staff | AffixItemType::Misc, GOE_EVIL, false, true, 500, 1000, 2 }, + { N_("Raven's"), { IPL_MANA, 15, 20 }, 5, AffixItemType::Staff | AffixItemType::Misc, GOE_ANY, false, true, 1100, 2000, 3 }, + { N_("Snake's"), { IPL_MANA, 21, 30 }, 9, AffixItemType::Staff | AffixItemType::Misc, GOE_ANY, false, true, 2100, 4000, 5 }, + { N_("Serpent's"), { IPL_MANA, 30, 40 }, 15, AffixItemType::Staff | AffixItemType::Misc, GOE_ANY, false, true, 4100, 6000, 7 }, + { N_("Drake's"), { IPL_MANA, 41, 50 }, 21, AffixItemType::Staff | AffixItemType::Misc, GOE_ANY, false, true, 6100, 10000, 9 }, + { N_("Dragon's"), { IPL_MANA, 51, 60 }, 27, AffixItemType::Staff | AffixItemType::Misc, GOE_ANY, false, true, 10100, 15000, 11 }, + { N_("Wyrm's"), { IPL_MANA, 61, 80 }, 35, AffixItemType::Staff , GOE_ANY, false, true, 15100, 19000, 12 }, + { N_("Hydra's"), { IPL_MANA, 81, 100 }, 60, AffixItemType::Staff , GOE_ANY, false, true, 19100, 30000, 13 }, + { N_("Angel's"), { IPL_SPLLVLADD, 1, 1 }, 15, AffixItemType::Staff , GOE_GOOD, false, true, 25000, 25000, 2 }, + { N_("Arch-Angel's"), { IPL_SPLLVLADD, 2, 2 }, 25, AffixItemType::Staff , GOE_GOOD, false, true, 50000, 50000, 3 }, + { N_("Plentiful"), { IPL_CHARGES, 2, 2 }, 4, AffixItemType::Staff , GOE_ANY, false, true, 2000, 2000, 2 }, + { N_("Bountiful"), { IPL_CHARGES, 3, 3 }, 9, AffixItemType::Staff , GOE_ANY, false, true, 3000, 3000, 3 }, + { N_("Flaming"), { IPL_FIREDAM, 1, 10 }, 7, AffixItemType::Weapon | AffixItemType::Staff , GOE_ANY, false, true, 5000, 5000, 2 }, + { N_("Lightning"), { IPL_LIGHTDAM, 2, 20 }, 18, AffixItemType::Weapon | AffixItemType::Staff , GOE_ANY, false, true, 10000, 10000, 2 }, + { N_("Jester's"), { IPL_JESTERS, 1, 1 }, 7, AffixItemType::Weapon , GOE_ANY, false, true, 1200, 1200, 3 }, + { N_("Crystalline"), { IPL_CRYSTALLINE, 30, 70 }, 5, AffixItemType::Weapon , GOE_ANY, false, true, 1000, 3000, 3 }, // 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 }, 11, AffixItemType::Weapon | AffixItemType::Staff , GOE_ANY, false, true, 2000, 2400, 10 }, + { "", { IPL_INVALID, 0, 0 }, 0, AffixItemType::None , GOE_ANY, false, false, 0, 0, 0 }, // clang-format on }; /** Contains the data related to each item suffix. */ const PLStruct ItemSuffixes[] = { // clang-format off - // PLName, { type, param1, param2 }, PLMinLvl, PLIType, PLGOE, PLDouble, PLOk, minVal, maxVal, multVal + // PLName, { type, param1, param2 }, PLMinLvl, PLIType, PLGOE, PLDouble, PLOk, minVal, maxVal, multVal // 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 }, + { N_("quality"), { IPL_DAMMOD, 1, 2 }, 2, AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow , GOE_ANY, false, true, 100, 200, 2 }, + { N_("maiming"), { IPL_DAMMOD, 3, 5 }, 7, AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow , GOE_ANY, false, true, 1300, 1500, 3 }, + { N_("slaying"), { IPL_DAMMOD, 6, 8 }, 15, AffixItemType::Weapon , GOE_ANY, false, true, 2600, 3000, 5 }, + { N_("gore"), { IPL_DAMMOD, 9, 12 }, 25, AffixItemType::Weapon , GOE_ANY, false, true, 4100, 5000, 8 }, + { N_("carnage"), { IPL_DAMMOD, 13, 16 }, 35, AffixItemType::Weapon , GOE_ANY, false, true, 5100, 10000, 10 }, + { N_("slaughter"), { IPL_DAMMOD, 17, 20 }, 60, AffixItemType::Weapon , GOE_ANY, false, true, 10100, 15000, 13 }, + { N_("pain"), { IPL_GETHIT_CURSE, 2, 4 }, 4, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Misc, GOE_EVIL, false, false, 0, 0, -4 }, + { N_("tears"), { IPL_GETHIT_CURSE, 1, 1 }, 2, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Misc, GOE_EVIL, false, false, 0, 0, -2 }, + { N_("health"), { IPL_GETHIT, 1, 1 }, 2, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Misc, GOE_GOOD, false, true, 200, 200, 2 }, + { N_("protection"), { IPL_GETHIT, 2, 2 }, 6, AffixItemType::Armor | AffixItemType::Shield , GOE_GOOD, false, true, 400, 800, 4 }, + { N_("absorption"), { IPL_GETHIT, 3, 3 }, 12, AffixItemType::Armor | AffixItemType::Shield , GOE_GOOD, false, true, 1001, 2500, 10 }, + { N_("deflection"), { IPL_GETHIT, 4, 4 }, 20, AffixItemType::Armor , GOE_GOOD, false, true, 2500, 6500, 15 }, + { N_("osmosis"), { IPL_GETHIT, 5, 6 }, 50, AffixItemType::Armor , GOE_GOOD, false, true, 7500, 10000, 20 }, + { N_("frailty"), { IPL_STR_CURSE, 6, 10 }, 3, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Bow | AffixItemType::Misc, GOE_EVIL, false, false, 0, 0, -3 }, + { N_("weakness"), { IPL_STR_CURSE, 1, 5 }, 1, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow | AffixItemType::Misc, GOE_EVIL, false, false, 0, 0, -2 }, + { N_("strength"), { IPL_STR, 1, 5 }, 1, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow | AffixItemType::Misc, GOE_ANY, false, true, 200, 1000, 2 }, + { N_("might"), { IPL_STR, 6, 10 }, 5, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Bow | AffixItemType::Misc, GOE_ANY, false, true, 1200, 2000, 3 }, + { N_("power"), { IPL_STR, 11, 15 }, 11, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Bow | AffixItemType::Misc, GOE_ANY, false, true, 2200, 3000, 4 }, + { N_("giants"), { IPL_STR, 16, 20 }, 17, AffixItemType::Armor | AffixItemType::Weapon | AffixItemType::Bow | AffixItemType::Misc, GOE_ANY, false, true, 3200, 5000, 7 }, + { N_("titans"), { IPL_STR, 21, 30 }, 23, AffixItemType::Weapon | AffixItemType::Misc, GOE_ANY, false, true, 5200, 10000, 10 }, + { N_("paralysis"), { IPL_DEX_CURSE, 6, 10 }, 3, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Bow | AffixItemType::Misc, GOE_EVIL, false, false, 0, 0, -3 }, + { N_("atrophy"), { IPL_DEX_CURSE, 1, 5 }, 1, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow | AffixItemType::Misc, GOE_EVIL, false, false, 0, 0, -2 }, + { N_("dexterity"), { IPL_DEX, 1, 5 }, 1, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow | AffixItemType::Misc, GOE_ANY, false, true, 200, 1000, 2 }, + { N_("skill"), { IPL_DEX, 6, 10 }, 5, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Bow | AffixItemType::Misc, GOE_ANY, false, true, 1200, 2000, 3 }, + { N_("accuracy"), { IPL_DEX, 11, 15 }, 11, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Bow | AffixItemType::Misc, GOE_ANY, false, true, 2200, 3000, 4 }, + { N_("precision"), { IPL_DEX, 16, 20 }, 17, AffixItemType::Armor | AffixItemType::Weapon | AffixItemType::Bow | AffixItemType::Misc, GOE_ANY, false, true, 3200, 5000, 7 }, + { N_("perfection"), { IPL_DEX, 21, 30 }, 23, AffixItemType::Bow | AffixItemType::Misc, GOE_ANY, false, true, 5200, 10000, 10 }, + { N_("the fool"), { IPL_MAG_CURSE, 6, 10 }, 3, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow | AffixItemType::Misc, GOE_EVIL, false, false, 0, 0, -3 }, + { N_("dyslexia"), { IPL_MAG_CURSE, 1, 5 }, 1, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow | AffixItemType::Misc, GOE_EVIL, false, false, 0, 0, -2 }, + { N_("magic"), { IPL_MAG, 1, 5 }, 1, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow | AffixItemType::Misc, GOE_ANY, false, true, 200, 1000, 2 }, + { N_("the mind"), { IPL_MAG, 6, 10 }, 5, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow | AffixItemType::Misc, GOE_ANY, false, true, 1200, 2000, 3 }, + { N_("brilliance"), { IPL_MAG, 11, 15 }, 11, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow | AffixItemType::Misc, GOE_ANY, false, true, 2200, 3000, 4 }, + { N_("sorcery"), { IPL_MAG, 16, 20 }, 17, AffixItemType::Armor | AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow | AffixItemType::Misc, GOE_ANY, false, true, 3200, 5000, 7 }, + { N_("wizardry"), { IPL_MAG, 21, 30 }, 23, AffixItemType::Staff | AffixItemType::Misc, GOE_ANY, false, true, 5200, 10000, 10 }, + { N_("illness"), { IPL_VIT_CURSE, 6, 10 }, 3, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow | AffixItemType::Misc, GOE_EVIL, false, false, 0, 0, -3 }, + { N_("disease"), { IPL_VIT_CURSE, 1, 5 }, 1, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow | AffixItemType::Misc, GOE_EVIL, false, false, 0, 0, -2 }, + { N_("vitality"), { IPL_VIT, 1, 5 }, 1, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow | AffixItemType::Misc, GOE_GOOD, false, true, 200, 1000, 2 }, + { N_("zest"), { IPL_VIT, 6, 10 }, 5, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Bow | AffixItemType::Misc, GOE_GOOD, false, true, 1200, 2000, 3 }, + { N_("vim"), { IPL_VIT, 11, 15 }, 11, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Bow | AffixItemType::Misc, GOE_GOOD, false, true, 2200, 3000, 4 }, + { N_("vigor"), { IPL_VIT, 16, 20 }, 17, AffixItemType::Armor | AffixItemType::Weapon | AffixItemType::Bow | AffixItemType::Misc, GOE_GOOD, false, true, 3200, 5000, 7 }, + { N_("life"), { IPL_VIT, 21, 30 }, 23, AffixItemType::Misc, GOE_GOOD, false, true, 5200, 10000, 10 }, + { N_("trouble"), { IPL_ATTRIBS_CURSE, 6, 10 }, 12, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow | AffixItemType::Misc, GOE_EVIL, false, false, 0, 0, -10 }, + { N_("the pit"), { IPL_ATTRIBS_CURSE, 1, 5 }, 5, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow | AffixItemType::Misc, GOE_EVIL, false, false, 0, 0, -5 }, + { N_("the sky"), { IPL_ATTRIBS, 1, 3 }, 5, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow | AffixItemType::Misc, GOE_ANY, false, true, 800, 4000, 5 }, + { N_("the moon"), { IPL_ATTRIBS, 4, 7 }, 11, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow | AffixItemType::Misc, GOE_ANY, false, true, 4800, 8000, 10 }, + { N_("the stars"), { IPL_ATTRIBS, 8, 11 }, 17, AffixItemType::Armor | AffixItemType::Weapon | AffixItemType::Bow | AffixItemType::Misc, GOE_ANY, false, true, 8800, 12000, 15 }, + { N_("the heavens"), { IPL_ATTRIBS, 12, 15 }, 25, AffixItemType::Weapon | AffixItemType::Bow | AffixItemType::Misc, GOE_ANY, false, true, 12800, 20000, 20 }, + { N_("the zodiac"), { IPL_ATTRIBS, 16, 20 }, 30, AffixItemType::Misc, GOE_ANY, false, true, 20800, 40000, 30 }, + { N_("the vulture"), { IPL_LIFE_CURSE, 11, 25 }, 4, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Misc, GOE_EVIL, false, false, 0, 0, -4 }, + { N_("the jackal"), { IPL_LIFE_CURSE, 1, 10 }, 1, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Misc, GOE_EVIL, false, false, 0, 0, -2 }, + { N_("the fox"), { IPL_LIFE, 10, 15 }, 1, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Misc, GOE_ANY, false, true, 100, 1000, 2 }, + { N_("the jaguar"), { IPL_LIFE, 16, 20 }, 5, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Misc, GOE_ANY, false, true, 1100, 2000, 3 }, + { N_("the eagle"), { IPL_LIFE, 21, 30 }, 9, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Misc, GOE_ANY, false, true, 2100, 4000, 5 }, + { N_("the wolf"), { IPL_LIFE, 30, 40 }, 15, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Misc, GOE_ANY, false, true, 4100, 6000, 7 }, + { N_("the tiger"), { IPL_LIFE, 41, 50 }, 21, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Misc, GOE_ANY, false, true, 6100, 10000, 9 }, + { N_("the lion"), { IPL_LIFE, 51, 60 }, 27, AffixItemType::Armor | AffixItemType::Misc, GOE_ANY, false, true, 10100, 15000, 11 }, + { N_("the mammoth"), { IPL_LIFE, 61, 80 }, 35, AffixItemType::Armor , GOE_ANY, false, true, 15100, 19000, 12 }, + { N_("the whale"), { IPL_LIFE, 81, 100 }, 60, AffixItemType::Armor , GOE_ANY, false, true, 19100, 30000, 13 }, + { N_("fragility"), { IPL_DUR_CURSE, 100, 100 }, 3, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon , GOE_EVIL, false, false, 0, 0, -4 }, + { N_("brittleness"), { IPL_DUR_CURSE, 26, 75 }, 1, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon , GOE_EVIL, false, false, 0, 0, -2 }, + { N_("sturdiness"), { IPL_DUR, 26, 75 }, 1, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Staff , GOE_ANY, false, true, 100, 100, 2 }, + { N_("craftsmanship"), { IPL_DUR, 51, 100 }, 6, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Staff , GOE_ANY, false, true, 200, 200, 2 }, + { N_("structure"), { IPL_DUR, 101, 200 }, 12, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Staff , GOE_ANY, false, true, 300, 300, 2 }, + { N_("the ages"), { IPL_INDESTRUCTIBLE, 0, 0 }, 25, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon | AffixItemType::Staff , GOE_ANY, false, true, 600, 600, 5 }, + { N_("the dark"), { IPL_LIGHT_CURSE, 4, 4 }, 6, AffixItemType::Armor | AffixItemType::Weapon | AffixItemType::Misc, GOE_EVIL, false, false, 0, 0, -3 }, + { N_("the night"), { IPL_LIGHT_CURSE, 2, 2 }, 3, AffixItemType::Armor | AffixItemType::Weapon | AffixItemType::Misc, GOE_EVIL, false, false, 0, 0, -2 }, + { N_("light"), { IPL_LIGHT, 2, 2 }, 4, AffixItemType::Armor | AffixItemType::Weapon | AffixItemType::Misc, GOE_GOOD, false, true, 750, 750, 2 }, + { N_("radiance"), { IPL_LIGHT, 4, 4 }, 8, AffixItemType::Armor | AffixItemType::Weapon | AffixItemType::Misc, GOE_GOOD, false, true, 1500, 1500, 3 }, + { N_("flame"), { IPL_FIRE_ARROWS, 1, 3 }, 1, AffixItemType::Bow , GOE_ANY, false, true, 2000, 2000, 2 }, + { N_("fire"), { IPL_FIRE_ARROWS, 1, 6 }, 11, AffixItemType::Bow , GOE_ANY, false, true, 4000, 4000, 4 }, + { N_("burning"), { IPL_FIRE_ARROWS, 1, 16 }, 35, AffixItemType::Bow , GOE_ANY, false, true, 6000, 6000, 6 }, + { N_("shock"), { IPL_LIGHT_ARROWS, 1, 6 }, 13, AffixItemType::Bow , GOE_ANY, false, true, 6000, 6000, 2 }, + { N_("lightning"), { IPL_LIGHT_ARROWS, 1, 10 }, 21, AffixItemType::Bow , GOE_ANY, false, true, 8000, 8000, 4 }, + { N_("thunder"), { IPL_LIGHT_ARROWS, 1, 20 }, 60, AffixItemType::Bow , GOE_ANY, false, true, 12000, 12000, 6 }, + { N_("many"), { IPL_DUR, 100, 100 }, 3, AffixItemType::Bow , GOE_ANY, false, true, 750, 750, 2 }, + { N_("plenty"), { IPL_DUR, 200, 200 }, 7, AffixItemType::Bow , GOE_ANY, false, true, 1500, 1500, 3 }, + { N_("thorns"), { IPL_THORNS, 1, 3 }, 1, AffixItemType::Armor | AffixItemType::Shield , GOE_ANY, false, true, 500, 500, 2 }, + { N_("corruption"), { IPL_NOMANA, 0, 0 }, 5, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Weapon , GOE_EVIL, false, false, -1000, -1000, 2 }, + { N_("thieves"), { IPL_ABSHALFTRAP, 0, 0 }, 11, AffixItemType::Armor | AffixItemType::Shield | AffixItemType::Misc, GOE_ANY, false, true, 1500, 1500, 2 }, + { N_("the bear"), { IPL_KNOCKBACK, 0, 0 }, 5, AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow , GOE_EVIL, false, true, 750, 750, 2 }, + { N_("the bat"), { IPL_STEALMANA, 3, 3 }, 8, AffixItemType::Weapon , GOE_ANY, false, true, 7500, 7500, 3 }, + { N_("vampires"), { IPL_STEALMANA, 5, 5 }, 19, AffixItemType::Weapon , GOE_ANY, false, true, 15000, 15000, 3 }, + { N_("the leech"), { IPL_STEALLIFE, 3, 3 }, 8, AffixItemType::Weapon , GOE_ANY, false, true, 7500, 7500, 3 }, + { N_("blood"), { IPL_STEALLIFE, 5, 5 }, 19, AffixItemType::Weapon , GOE_ANY, false, true, 15000, 15000, 3 }, + { N_("piercing"), { IPL_TARGAC, 1, 1 }, 1, AffixItemType::Weapon | AffixItemType::Bow , GOE_ANY, false, true, 1000, 1000, 3 }, + { N_("puncturing"), { IPL_TARGAC, 2, 2 }, 9, AffixItemType::Weapon | AffixItemType::Bow , GOE_ANY, false, true, 2000, 2000, 6 }, + { N_("bashing"), { IPL_TARGAC, 3, 3 }, 17, AffixItemType::Weapon , GOE_ANY, false, true, 4000, 4000, 12 }, + { N_("readiness"), { IPL_FASTATTACK, 1, 1 }, 1, AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow , GOE_ANY, false, true, 2000, 2000, 2 }, + { N_("swiftness"), { IPL_FASTATTACK, 2, 2 }, 10, AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow , GOE_ANY, false, true, 4000, 4000, 4 }, + { N_("speed"), { IPL_FASTATTACK, 3, 3 }, 19, AffixItemType::Weapon | AffixItemType::Staff , GOE_ANY, false, true, 8000, 8000, 8 }, + { N_("haste"), { IPL_FASTATTACK, 4, 4 }, 27, AffixItemType::Weapon | AffixItemType::Staff , GOE_ANY, false, true, 16000, 16000, 16 }, + { N_("balance"), { IPL_FASTRECOVER, 1, 1 }, 1, AffixItemType::Armor | AffixItemType::Misc, GOE_ANY, false, true, 2000, 2000, 2 }, + { N_("stability"), { IPL_FASTRECOVER, 2, 2 }, 10, AffixItemType::Armor | AffixItemType::Misc, GOE_ANY, false, true, 4000, 4000, 4 }, + { N_("harmony"), { IPL_FASTRECOVER, 3, 3 }, 20, AffixItemType::Armor | AffixItemType::Misc, GOE_ANY, false, true, 8000, 8000, 8 }, + { N_("blocking"), { IPL_FASTBLOCK, 1, 1 }, 5, AffixItemType::Shield , GOE_ANY, false, true, 4000, 4000, 4 }, + { N_("devastation"), { IPL_DEVASTATION, 1, 1 }, 1, AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow , GOE_ANY, false, true, 1200, 1200, 3 }, + { N_("decay"), { IPL_DECAY, 150, 250 }, 1, AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::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_("peril"), { IPL_PERIL, 1, 1 }, 5, AffixItemType::Weapon | AffixItemType::Staff | AffixItemType::Bow , GOE_ANY, false, true, 500, 500, 1 }, + { "", { IPL_INVALID, 0, 0 }, 0, AffixItemType::None , GOE_ANY, false, false, 0, 0, 0 }, // clang-format on }; diff --git a/Source/itemdat.h b/Source/itemdat.h index 9c84a6434..16241f362 100644 --- a/Source/itemdat.h +++ b/Source/itemdat.h @@ -560,16 +560,18 @@ enum goodorevil : uint8_t { GOE_GOOD, }; -enum affix_item_type : uint8_t { +enum class AffixItemType : uint8_t { // clang-format off - PLT_MISC = 1 << 0, - PLT_BOW = 1 << 1, - PLT_STAFF = 1 << 2, - PLT_WEAP = 1 << 3, - PLT_SHLD = 1 << 4, - PLT_ARMO = 1 << 5, + None = 0, + Misc = 1 << 0, + Bow = 1 << 1, + Staff = 1 << 2, + Weapon = 1 << 3, + Shield = 1 << 4, + Armor = 1 << 5, // clang-format on }; +use_enum_as_flags(AffixItemType); struct ItemPower { item_effect_type type; @@ -581,7 +583,7 @@ struct PLStruct { const char *PLName; ItemPower power; int8_t PLMinLvl; - int PLIType; // affix_item_type as bit flags + AffixItemType PLIType; // AffixItemType as bit flags enum goodorevil PLGOE; bool PLDouble; bool PLOk; diff --git a/Source/items.cpp b/Source/items.cpp index 5f0f44be5..33c16c06b 100644 --- a/Source/items.cpp +++ b/Source/items.cpp @@ -344,24 +344,24 @@ int premiumLvlAddHellfire[] = { // clang-format on }; -bool IsPrefixValidForItemType(int i, int flgs) +bool IsPrefixValidForItemType(int i, AffixItemType flgs) { - int itemTypes = ItemPrefixes[i].PLIType; + AffixItemType itemTypes = ItemPrefixes[i].PLIType; if (!gbIsHellfire) { if (i > 82) return false; if (i >= 12 && i <= 20) - itemTypes &= ~PLT_STAFF; + itemTypes &= ~AffixItemType::Staff; } - return (flgs & itemTypes) != 0; + return HasAnyOf(flgs, itemTypes); } -bool IsSuffixValidForItemType(int i, int flgs) +bool IsSuffixValidForItemType(int i, AffixItemType flgs) { - int itemTypes = ItemSuffixes[i].PLIType; + AffixItemType itemTypes = ItemSuffixes[i].PLIType; if (!gbIsHellfire) { if (i > 94) @@ -373,10 +373,10 @@ bool IsSuffixValidForItemType(int i, int flgs) || (i >= 34 && i <= 36) || (i >= 41 && i <= 44) || (i >= 60 && i <= 63)) - itemTypes &= ~PLT_STAFF; + itemTypes &= ~AffixItemType::Staff; } - return (flgs & itemTypes) != 0; + return HasAnyOf(flgs, itemTypes); } int ItemsGetCurrlevel() @@ -1111,7 +1111,7 @@ void GetStaffPower(Item &item, int lvl, int bs, bool onlygood) int nl = 0; int l[256]; for (int j = 0; ItemPrefixes[j].power.type != IPL_INVALID; j++) { - if (!IsPrefixValidForItemType(j, PLT_STAFF) || ItemPrefixes[j].PLMinLvl > lvl) + if (!IsPrefixValidForItemType(j, AffixItemType::Staff) || ItemPrefixes[j].PLMinLvl > lvl) continue; if (onlygood && !ItemPrefixes[j].PLOk) continue; @@ -1174,7 +1174,7 @@ std::string GenerateMagicItemName(const string_view &baseNamel, int preidx, int } // namespace -void GetItemPower(Item &item, int minlvl, int maxlvl, affix_item_type flgs, bool onlygood) +void GetItemPower(Item &item, int minlvl, int maxlvl, AffixItemType flgs, bool onlygood) { int l[256]; goodorevil goe; @@ -1201,7 +1201,7 @@ void GetItemPower(Item &item, int minlvl, int maxlvl, affix_item_type flgs, bool continue; if (onlygood && !ItemPrefixes[j].PLOk) continue; - if (flgs == PLT_STAFF && ItemPrefixes[j].power.type == IPL_CHARGES) + if (HasAnyOf(flgs, AffixItemType::Staff) && ItemPrefixes[j].power.type == IPL_CHARGES) continue; l[nt] = j; nt++; @@ -1248,7 +1248,7 @@ void GetItemPower(Item &item, int minlvl, int maxlvl, affix_item_type flgs, bool void GetStaffSpell(Item &item, int lvl, bool onlygood) { if (!gbIsHellfire && GenerateRnd(4) == 0) { - GetItemPower(item, lvl / 2, lvl, PLT_STAFF, onlygood); + GetItemPower(item, lvl / 2, lvl, AffixItemType::Staff, onlygood); return; } @@ -1327,29 +1327,29 @@ void GetItemBonus(Item &item, int minlvl, int maxlvl, bool onlygood, bool allows case ItemType::Sword: case ItemType::Axe: case ItemType::Mace: - GetItemPower(item, minlvl, maxlvl, PLT_WEAP, onlygood); + GetItemPower(item, minlvl, maxlvl, AffixItemType::Weapon, onlygood); break; case ItemType::Bow: - GetItemPower(item, minlvl, maxlvl, PLT_BOW, onlygood); + GetItemPower(item, minlvl, maxlvl, AffixItemType::Bow, onlygood); break; case ItemType::Shield: - GetItemPower(item, minlvl, maxlvl, PLT_SHLD, onlygood); + GetItemPower(item, minlvl, maxlvl, AffixItemType::Shield, onlygood); break; case ItemType::LightArmor: case ItemType::Helm: case ItemType::MediumArmor: case ItemType::HeavyArmor: - GetItemPower(item, minlvl, maxlvl, PLT_ARMO, onlygood); + GetItemPower(item, minlvl, maxlvl, AffixItemType::Armor, onlygood); break; case ItemType::Staff: if (allowspells) GetStaffSpell(item, maxlvl, onlygood); else - GetItemPower(item, minlvl, maxlvl, PLT_STAFF, onlygood); + GetItemPower(item, minlvl, maxlvl, AffixItemType::Staff, onlygood); break; case ItemType::Ring: case ItemType::Amulet: - GetItemPower(item, minlvl, maxlvl, PLT_MISC, onlygood); + GetItemPower(item, minlvl, maxlvl, AffixItemType::Misc, onlygood); break; case ItemType::None: case ItemType::Misc: