diff --git a/CMake/Assets.cmake b/CMake/Assets.cmake index 7da1a6126..f021786be 100644 --- a/CMake/Assets.cmake +++ b/CMake/Assets.cmake @@ -152,10 +152,6 @@ set(devilutionx_assets lua/inspect.lua lua/mods/clock/init.lua lua/repl_prelude.lua - nlevels/cutl5w.clx - nlevels/cutl6w.clx - nlevels/l5data/cornerstone.dun - nlevels/l5data/uberroom.dun plrgfx/warrior/whu/whufm.trn plrgfx/warrior/whu/whulm.trn plrgfx/warrior/whu/whuqm.trn diff --git a/CMake/Mods.cmake b/CMake/Mods.cmake index d5e4afc7d..8d53bd747 100644 --- a/CMake/Mods.cmake +++ b/CMake/Mods.cmake @@ -4,6 +4,12 @@ endif() set(hellfire_mod lua/mods/Hellfire/init.lua + nlevels/cutl5w.clx + nlevels/cutl6w.clx + nlevels/l5data/cornerstone.dun + nlevels/l5data/uberroom.dun + txtdata/items/item_prefixes.tsv + txtdata/items/item_suffixes.tsv txtdata/items/unique_itemdat.tsv txtdata/missiles/misdat.tsv txtdata/missiles/missile_sprites.tsv diff --git a/Source/itemdat.cpp b/Source/itemdat.cpp index 1cb96c85e..5d5fca31d 100644 --- a/Source/itemdat.cpp +++ b/Source/itemdat.cpp @@ -602,7 +602,7 @@ void LoadItemAffixesDat(std::string_view filename, std::vector &out) reader.readInt("minLevel", item.PLMinLvl); reader.readEnumList("itemTypes", item.PLIType, ParseAffixItemType); reader.read("alignment", item.PLGOE, ParseAffixAlignment); - reader.readBool("doubleChance", item.PLDouble); + reader.readInt("chance", item.PLChance); reader.readBool("useful", item.PLOk); reader.readInt("minVal", item.minVal); reader.readInt("maxVal", item.maxVal); diff --git a/Source/itemdat.h b/Source/itemdat.h index 4ee43ee64..ae747ae91 100644 --- a/Source/itemdat.h +++ b/Source/itemdat.h @@ -622,7 +622,7 @@ struct PLStruct { int8_t PLMinLvl; AffixItemType PLIType; // AffixItemType as bit flags enum goodorevil PLGOE; - bool PLDouble; + uint8_t PLChance; bool PLOk; int minVal; int maxVal; diff --git a/Source/items.cpp b/Source/items.cpp index a2a427b89..c4746fecb 100644 --- a/Source/items.cpp +++ b/Source/items.cpp @@ -359,41 +359,6 @@ int itemLevelAddHf[] = { // clang-format on }; -bool IsPrefixValidForItemType(int i, AffixItemType flgs, bool hellfireItem) -{ - AffixItemType itemTypes = ItemPrefixes[i].PLIType; - - if (!hellfireItem) { - if (i > 82) - return false; - - if (i >= 12 && i <= 20) - itemTypes &= ~AffixItemType::Staff; - } - - return HasAnyOf(flgs, itemTypes); -} - -bool IsSuffixValidForItemType(int i, AffixItemType flgs, bool hellfireItem) -{ - AffixItemType itemTypes = ItemSuffixes[i].PLIType; - - if (!hellfireItem) { - if (i > 94) - return false; - - if ((i >= 0 && i <= 1) - || (i >= 14 && i <= 15) - || (i >= 21 && i <= 22) - || (i >= 34 && i <= 36) - || (i >= 41 && i <= 44) - || (i >= 60 && i <= 63)) - itemTypes &= ~AffixItemType::Staff; - } - - return HasAnyOf(flgs, itemTypes); -} - int ItemsGetCurrlevel() { if (setlevel) { @@ -700,13 +665,6 @@ int CalculateToHitBonus(int level) int SaveItemPower(const Player &player, Item &item, ItemPower &power) { - if (!gbIsHellfire) { - if (power.type == IPL_TARGAC) { - power.param1 = 1 << power.param1; - power.param2 = 3 << power.param2; - } - } - int r = RndPL(power.param1, power.param2); switch (power.type) { @@ -1067,29 +1025,46 @@ void SaveItemAffix(const Player &player, Item &item, const PLStruct &affix) } } -int GetStaffPrefixId(int lvl, bool onlygood, bool hellfireItem) +std::optional SelectAffix( + const std::vector &affixList, + AffixItemType type, + int minlvl, int maxlvl, + bool onlygood, + goodorevil goe, + bool excludeChargesForStaffs) { - int preidx = -1; - if (FlipCoin(10) || onlygood) { - int nl = 0; - int l[256]; - for (int j = 0, n = static_cast(ItemPrefixes.size()); j < n; ++j) { - if (!IsPrefixValidForItemType(j, AffixItemType::Staff, hellfireItem) || ItemPrefixes[j].PLMinLvl > lvl) - continue; - if (onlygood && !ItemPrefixes[j].PLOk) - continue; - l[nl] = j; - nl++; - if (ItemPrefixes[j].PLDouble) { - l[nl] = j; - nl++; - } - } - if (nl != 0) { - preidx = l[GenerateRnd(nl)]; + StaticVector eligibleAffixes; + + for (const PLStruct &affix : affixList) { + if (!HasAnyOf(type, affix.PLIType)) + continue; + if (affix.PLMinLvl < minlvl || affix.PLMinLvl > maxlvl) + continue; + if (onlygood && !affix.PLOk) + continue; + if ((goe == GOE_GOOD && affix.PLGOE == GOE_EVIL) || (goe == GOE_EVIL && affix.PLGOE == GOE_GOOD)) + continue; + if (excludeChargesForStaffs && type == AffixItemType::Staff && affix.power.type == IPL_CHARGES) + continue; + + for (int i = 0; i < affix.PLChance; ++i) { + eligibleAffixes.push_back(&affix); } } - return preidx; + + if (eligibleAffixes.empty()) + return std::nullopt; + + return eligibleAffixes[GenerateRnd(static_cast(eligibleAffixes.size()))]; +} + +std::optional GetStaffPrefix(int maxlvl, bool onlygood) +{ + if (!FlipCoin(10) && !onlygood) { + return std::nullopt; + } + + return SelectAffix(ItemPrefixes, AffixItemType::Staff, 0, maxlvl, onlygood, GOE_ANY, false); } std::string GenerateStaffName(const ItemData &baseItemData, SpellID spellId, bool translate) @@ -1105,12 +1080,12 @@ std::string GenerateStaffName(const ItemData &baseItemData, SpellID spellId, boo return name; } -std::string GenerateStaffNameMagical(const ItemData &baseItemData, SpellID spellId, int preidx, bool translate, std::optional forceNameLengthCheck) +std::string GenerateStaffNameMagical(const ItemData &baseItemData, SpellID spellId, const PLStruct &power, bool translate, std::optional forceNameLengthCheck) { std::string_view baseName = translate ? _(baseItemData.iName) : baseItemData.iName; std::string_view magicFmt = translate ? pgettext("spell", /* TRANSLATORS: Constructs item names. Format: {Prefix} {Item} of {Spell}. Example: King's War Staff of Firewall */ "{0} {1} of {2}") : "{0} {1} of {2}"; std::string_view spellName = translate ? pgettext("spell", GetSpellData(spellId).sNameText) : GetSpellData(spellId).sNameText; - std::string_view prefixName = translate ? _(ItemPrefixes[preidx].PLName) : ItemPrefixes[preidx].PLName; + std::string_view prefixName = translate ? _(power.PLName) : power.PLName; std::string identifiedName = fmt::format(fmt::runtime(magicFmt), prefixName, baseName, spellName); if (forceNameLengthCheck ? *forceNameLengthCheck : !StringInPanel(identifiedName.c_str())) { @@ -1120,21 +1095,21 @@ std::string GenerateStaffNameMagical(const ItemData &baseItemData, SpellID spell return identifiedName; } -void GetStaffPower(const Player &player, Item &item, int lvl, SpellID bs, bool onlygood) +void GetStaffPower(const Player &player, Item &item, int maxlvl, bool onlygood) { - int preidx = GetStaffPrefixId(lvl, onlygood, gbIsHellfire); - if (preidx != -1) { + std::optional prefix = GetStaffPrefix(maxlvl, onlygood); + if (prefix.has_value()) { item._iMagical = ITEM_QUALITY_MAGIC; - SaveItemAffix(player, item, ItemPrefixes[preidx]); - item._iPrePower = ItemPrefixes[preidx].power.type; + SaveItemAffix(player, item, **prefix); + item._iPrePower = (*prefix)->power.type; } const ItemData &baseItemData = AllItemsList[item.IDidx]; std::string staffName = GenerateStaffName(baseItemData, item._iSpell, false); CopyUtf8(item._iName, staffName, ItemNameLength); - if (preidx != -1) { - std::string staffNameMagical = GenerateStaffNameMagical(baseItemData, item._iSpell, preidx, false, std::nullopt); + if (prefix.has_value()) { + std::string staffNameMagical = GenerateStaffNameMagical(baseItemData, item._iSpell, **prefix, false, std::nullopt); CopyUtf8(item._iIName, staffNameMagical, ItemNameLength); } else { CopyUtf8(item._iIName, item._iName, ItemNameLength); @@ -1159,14 +1134,13 @@ std::string GenerateMagicItemName(const std::string_view &baseNamel, const PLStr return std::string(baseNamel); } -void GetItemPowerPrefixAndSuffix(int minlvl, int maxlvl, AffixItemType flgs, bool onlygood, bool hellfireItem, tl::function_ref prefixFound, tl::function_ref suffixFound) +void GetItemPowerPrefixAndSuffix( + int minlvl, int maxlvl, + AffixItemType flgs, + bool onlygood, + tl::function_ref prefixFound, + tl::function_ref suffixFound) { - int preidx = -1; - int sufidx = -1; - - int l[256]; - goodorevil goe; - bool allocatePrefix = FlipCoin(4); bool allocateSuffix = !FlipCoin(3); if (!allocatePrefix && !allocateSuffix) { @@ -1176,47 +1150,22 @@ void GetItemPowerPrefixAndSuffix(int minlvl, int maxlvl, AffixItemType flgs, boo else allocateSuffix = true; } - goe = GOE_ANY; + goodorevil goe = GOE_ANY; if (!onlygood && !FlipCoin(3)) onlygood = true; + if (allocatePrefix) { - int nt = 0; - for (int j = 0, n = static_cast(ItemPrefixes.size()); j < n; ++j) { - if (!IsPrefixValidForItemType(j, flgs, hellfireItem)) - continue; - if (ItemPrefixes[j].PLMinLvl < minlvl || ItemPrefixes[j].PLMinLvl > maxlvl) - continue; - if (onlygood && !ItemPrefixes[j].PLOk) - continue; - if (HasAnyOf(flgs, AffixItemType::Staff) && ItemPrefixes[j].power.type == IPL_CHARGES) - continue; - l[nt] = j; - nt++; - if (ItemPrefixes[j].PLDouble) { - l[nt] = j; - nt++; - } - } - if (nt != 0) { - preidx = l[GenerateRnd(nt)]; - goe = ItemPrefixes[preidx].PLGOE; - prefixFound(ItemPrefixes[preidx]); + std::optional prefix = SelectAffix(ItemPrefixes, flgs, minlvl, maxlvl, onlygood, goe, true); + if (prefix.has_value()) { + goe = (*prefix)->PLGOE; + prefixFound(**prefix); } } + if (allocateSuffix) { - int nl = 0; - for (int j = 0, n = static_cast(ItemSuffixes.size()); j < n; ++j) { - if (IsSuffixValidForItemType(j, flgs, hellfireItem) - && ItemSuffixes[j].PLMinLvl >= minlvl && ItemSuffixes[j].PLMinLvl <= maxlvl - && !((goe == GOE_GOOD && ItemSuffixes[j].PLGOE == GOE_EVIL) || (goe == GOE_EVIL && ItemSuffixes[j].PLGOE == GOE_GOOD)) - && (!onlygood || ItemSuffixes[j].PLOk)) { - l[nl] = j; - nl++; - } - } - if (nl != 0) { - sufidx = l[GenerateRnd(nl)]; - suffixFound(ItemSuffixes[sufidx]); + std::optional suffix = SelectAffix(ItemSuffixes, flgs, minlvl, maxlvl, onlygood, goe, true); + if (suffix.has_value()) { + suffixFound(**suffix); } } } @@ -1226,7 +1175,7 @@ void GetItemPower(const Player &player, Item &item, int minlvl, int maxlvl, Affi const PLStruct *pPrefix = nullptr; const PLStruct *pSufix = nullptr; GetItemPowerPrefixAndSuffix( - minlvl, maxlvl, flgs, onlygood, gbIsHellfire, + minlvl, maxlvl, flgs, onlygood, [&item, &player, &pPrefix](const PLStruct &prefix) { item._iMagical = ITEM_QUALITY_MAGIC; SaveItemAffix(player, item, prefix); @@ -1290,7 +1239,7 @@ void GetStaffSpell(const Player &player, Item &item, int lvl, bool onlygood) int v = item._iCharges * GetSpellData(bs).staffCost() / 5; item._ivalue += v; item._iIvalue += v; - GetStaffPower(player, item, lvl, bs, onlygood); + GetStaffPower(player, item, lvl, onlygood); } void GetOilType(Item &item, int maxLvl) @@ -2310,18 +2259,18 @@ std::string GetTranslatedItemNameMagical(const Item &item, bool hellfireItem, bo } else { DiscardRandomValues(2); // Spell and Charges - int preidx = GetStaffPrefixId(maxlvl, onlygood, hellfireItem); - if (preidx == -1 || item._iSpell == SpellID::Null) { + std::optional prefix = GetStaffPrefix(maxlvl, onlygood); + if (!prefix.has_value() || item._iSpell == SpellID::Null) { if (forceNameLengthCheck) { // We generate names to check if it's a diablo or hellfire item. This checks fails => invalid item => don't generate a item name identifiedName.clear(); } else { // This can happen, if the item is hacked or a bug in the logic exists - LogWarn("GetTranslatedItemNameMagical failed for item '{}' with preidx '{}' and spellid '{}'", item._iIName, preidx, static_cast>(item._iSpell)); + LogWarn("GetTranslatedItemNameMagical failed for item '{}' with prefix '{}' and spellid '{}'", item._iIName, prefix.has_value() ? (*prefix)->PLName : "NULL", static_cast>(item._iSpell)); identifiedName = item._iIName; } } else { - identifiedName = GenerateStaffNameMagical(baseItemData, item._iSpell, preidx, translate, forceNameLengthCheck); + identifiedName = GenerateStaffNameMagical(baseItemData, item._iSpell, **prefix, translate, forceNameLengthCheck); } } break; @@ -2340,7 +2289,7 @@ std::string GetTranslatedItemNameMagical(const Item &item, bool hellfireItem, bo const PLStruct *pPrefix = nullptr; const PLStruct *pSufix = nullptr; GetItemPowerPrefixAndSuffix( - minlvl, maxlvl, affixItemType, onlygood, hellfireItem, + minlvl, maxlvl, affixItemType, onlygood, [&pPrefix](const PLStruct &prefix) { pPrefix = &prefix; // GenerateRnd(prefix.power.param2 - prefix.power.param2 + 1) diff --git a/assets/txtdata/items/item_prefixes.tsv b/assets/txtdata/items/item_prefixes.tsv index fbc7cb4ce..1260cf446 100644 --- a/assets/txtdata/items/item_prefixes.tsv +++ b/assets/txtdata/items/item_prefixes.tsv @@ -1,87 +1,84 @@ -name power power.value1 power.value2 minLevel itemTypes alignment doubleChance useful minVal maxVal multVal -Tin TOHIT_CURSE 6 10 3 Weapon,Bow,Misc Any true false 0 0 -3 -Brass TOHIT_CURSE 1 5 1 Weapon,Bow,Misc Any true false 0 0 -2 -Bronze TOHIT 1 5 1 Weapon,Bow,Misc Any true true 100 500 2 -Iron TOHIT 6 10 4 Weapon,Bow,Misc Any true true 600 1000 3 -Steel TOHIT 11 15 6 Weapon,Bow,Misc Any true true 1100 1500 5 -Silver TOHIT 16 20 9 Weapon,Bow,Misc Good true true 1600 2000 7 -Gold TOHIT 21 30 12 Weapon,Bow,Misc Good true true 2100 3000 9 -Platinum TOHIT 31 40 16 Weapon,Bow Good true true 3100 4000 11 -Mithril TOHIT 41 60 20 Weapon,Bow Good true true 4100 6000 13 -Meteoric TOHIT 61 80 23 Weapon,Bow Any true true 6100 10000 15 -Weird TOHIT 81 100 35 Weapon,Bow Any true true 10100 14000 17 -Strange TOHIT 101 150 60 Weapon,Bow Any true true 14100 20000 20 -Useless DAMP_CURSE 100 100 5 Weapon,Staff,Bow Any true false 0 0 -8 -Bent DAMP_CURSE 50 75 3 Weapon,Staff,Bow Any true false 0 0 -4 -Weak DAMP_CURSE 25 45 1 Weapon,Staff,Bow Any true false 0 0 -3 -Jagged DAMP 20 35 4 Weapon,Staff,Bow Any true true 250 450 3 -Deadly DAMP 36 50 6 Weapon,Staff,Bow Any true true 500 700 4 -Heavy DAMP 51 65 9 Weapon,Staff,Bow Any true true 750 950 5 -Vicious DAMP 66 80 12 Weapon,Staff,Bow Evil true true 1000 1450 8 -Brutal DAMP 81 95 16 Weapon,Staff,Bow Any true true 1500 1950 10 -Massive DAMP 96 110 20 Weapon,Staff,Bow Any true true 2000 2450 13 -Savage DAMP 111 125 23 Weapon,Bow Any true true 2500 3000 15 -Ruthless DAMP 126 150 35 Weapon,Bow Any true true 10100 15000 17 -Merciless DAMP 151 175 60 Weapon,Bow Any true true 15000 20000 20 -Clumsy TOHIT_DAMP_CURSE 50 75 5 Weapon,Staff,Bow Any true false 0 0 -7 -Dull TOHIT_DAMP_CURSE 25 45 1 Weapon,Staff,Bow Any true false 0 0 -5 -Sharp TOHIT_DAMP 20 35 1 Weapon,Staff,Bow Any true false 350 950 5 -Fine TOHIT_DAMP 36 50 6 Weapon,Staff,Bow Any true true 1100 1700 7 -Warrior's TOHIT_DAMP 51 65 10 Weapon,Staff,Bow Any true true 1850 2450 13 -Soldier's TOHIT_DAMP 66 80 15 Weapon,Staff Any true true 2600 3950 17 -Lord's TOHIT_DAMP 81 95 19 Weapon,Staff Any true true 4100 5950 21 -Knight's TOHIT_DAMP 96 110 23 Weapon,Staff Any true true 6100 8450 26 -Master's TOHIT_DAMP 111 125 28 Weapon,Staff Any true true 8600 13000 30 -Champion's TOHIT_DAMP 126 150 40 Weapon,Staff Any true true 15200 24000 33 -King's TOHIT_DAMP 151 175 28 Weapon,Staff Any true true 24100 35000 38 -Vulnerable ACP_CURSE 51 100 3 Armor,Shield Any true false 0 0 -3 -Rusted ACP_CURSE 25 50 1 Armor,Shield Any true false 0 0 -2 -Fine ACP 20 30 1 Armor,Shield Any true true 20 100 2 -Strong ACP 31 40 3 Armor,Shield Any true true 120 200 3 -Grand ACP 41 55 6 Armor,Shield Any true true 220 300 5 -Valiant ACP 56 70 10 Armor,Shield Any true true 320 400 7 -Glorious ACP 71 90 14 Armor,Shield Good true true 420 600 9 -Blessed ACP 91 110 19 Armor,Shield Good true true 620 800 11 -Saintly ACP 111 130 24 Armor,Shield Good true true 820 1200 13 -Awesome ACP 131 150 28 Armor,Shield Good true true 1220 2000 15 -Holy ACP 151 170 35 Armor,Shield Good true true 5200 6000 17 -Godly ACP 171 200 60 Armor,Shield Good true true 6200 7000 20 -Red FIRERES 10 20 4 Armor,Shield,Weapon,Staff,Bow,Misc Any false true 500 1500 2 -Crimson FIRERES 21 30 10 Armor,Shield,Weapon,Staff,Bow,Misc Any false true 2100 3000 2 -Crimson FIRERES 31 40 16 Armor,Shield,Weapon,Staff,Bow,Misc Any false true 3100 4000 2 -Garnet FIRERES 41 50 20 Armor,Shield,Weapon,Staff,Bow,Misc Any false true 8200 12000 3 -Ruby FIRERES 51 60 26 Armor,Shield,Weapon,Staff,Bow,Misc Any false true 17100 20000 5 -Blue LIGHTRES 10 20 4 Armor,Shield,Weapon,Staff,Bow,Misc Any false true 500 1500 2 -Azure LIGHTRES 21 30 10 Armor,Shield,Weapon,Staff,Bow,Misc Any false true 2100 3000 2 -Lapis LIGHTRES 31 40 16 Armor,Shield,Weapon,Staff,Bow,Misc Any false true 3100 4000 2 -Cobalt LIGHTRES 41 50 20 Armor,Shield,Weapon,Staff,Bow,Misc Any false true 8200 12000 3 -Sapphire LIGHTRES 51 60 26 Armor,Shield,Weapon,Staff,Bow,Misc Any false true 17100 20000 5 -White MAGICRES 10 20 4 Armor,Shield,Weapon,Staff,Bow,Misc Any false true 500 1500 2 -Pearl MAGICRES 21 30 10 Armor,Shield,Weapon,Staff,Bow,Misc Any false true 2100 3000 2 -Ivory MAGICRES 31 40 16 Armor,Shield,Weapon,Staff,Bow,Misc Any false true 3100 4000 2 -Crystal MAGICRES 41 50 20 Armor,Shield,Weapon,Staff,Bow,Misc Any false true 8200 12000 3 -Diamond MAGICRES 51 60 26 Armor,Shield,Weapon,Staff,Bow,Misc Any false true 17100 20000 5 -Topaz ALLRES 10 15 8 Armor,Shield,Weapon,Staff,Bow,Misc Any false true 2000 5000 3 -Amber ALLRES 16 20 12 Armor,Shield,Weapon,Staff,Bow,Misc Any false true 7400 10000 3 -Jade ALLRES 21 30 18 Armor,Shield,Weapon,Staff,Bow,Misc Any false true 11000 15000 3 -Obsidian ALLRES 31 40 24 Armor,Shield,Weapon,Staff,Bow,Misc Any false true 24000 40000 4 -Emerald ALLRES 41 50 31 Shield,Weapon,Staff,Bow Any false true 61000 75000 7 -Hyena's MANA_CURSE 11 25 4 Staff,Misc Any false false 100 1000 -2 -Frog's MANA_CURSE 1 10 1 Staff,Misc Evil false false 0 0 -2 -Spider's MANA 10 15 1 Staff,Misc Evil false true 500 1000 2 -Raven's MANA 15 20 5 Staff,Misc Any false true 1100 2000 3 -Snake's MANA 21 30 9 Staff,Misc Any false true 2100 4000 5 -Serpent's MANA 30 40 15 Staff,Misc Any false true 4100 6000 7 -Drake's MANA 41 50 21 Staff,Misc Any false true 6100 10000 9 -Dragon's MANA 51 60 27 Staff,Misc Any false true 10100 15000 11 -Wyrm's MANA 61 80 35 Staff Any false true 15100 19000 12 -Hydra's MANA 81 100 60 Staff Any false true 19100 30000 13 -Angel's SPLLVLADD 1 1 15 Staff Good false true 25000 25000 2 -Arch-Angel's SPLLVLADD 2 2 25 Staff Good false true 50000 50000 3 -Plentiful CHARGES 2 2 4 Staff Any false true 2000 2000 2 -Bountiful CHARGES 3 3 9 Staff Any false true 3000 3000 3 -Flaming FIREDAM 1 10 7 Weapon,Staff Any false true 5000 5000 2 -Lightning LIGHTDAM 2 20 18 Weapon,Staff Any false true 10000 10000 2 -Jester's JESTERS 1 1 7 Weapon Any false true 1200 1200 3 -Crystalline CRYSTALLINE 30 70 5 Weapon Any false true 1000 3000 3 -Doppelganger's DOPPELGANGER 81 95 11 Weapon,Staff Any false true 2000 2400 10 +name power power.value1 power.value2 minLevel itemTypes alignment chance useful minVal maxVal multVal +Tin TOHIT_CURSE 6 10 3 Weapon,Bow,Misc Any 2 false 0 0 -3 +Brass TOHIT_CURSE 1 5 1 Weapon,Bow,Misc Any 2 false 0 0 -2 +Bronze TOHIT 1 5 1 Weapon,Bow,Misc Any 2 true 100 500 2 +Iron TOHIT 6 10 4 Weapon,Bow,Misc Any 2 true 600 1000 3 +Steel TOHIT 11 15 6 Weapon,Bow,Misc Any 2 true 1100 1500 5 +Silver TOHIT 16 20 9 Weapon,Bow,Misc Good 2 true 1600 2000 7 +Gold TOHIT 21 30 12 Weapon,Bow,Misc Good 2 true 2100 3000 9 +Platinum TOHIT 31 40 16 Weapon,Bow Good 2 true 3100 4000 11 +Mithril TOHIT 41 60 20 Weapon,Bow Good 2 true 4100 6000 13 +Meteoric TOHIT 61 80 23 Weapon,Bow Any 2 true 6100 10000 15 +Weird TOHIT 81 100 35 Weapon,Bow Any 2 true 10100 14000 17 +Strange TOHIT 101 150 60 Weapon,Bow Any 2 true 14100 20000 20 +Useless DAMP_CURSE 100 100 5 Weapon,Bow Any 2 false 0 0 -8 +Bent DAMP_CURSE 50 75 3 Weapon,Bow Any 2 false 0 0 -4 +Weak DAMP_CURSE 25 45 1 Weapon,Bow Any 2 false 0 0 -3 +Jagged DAMP 20 35 4 Weapon,Bow Any 2 true 250 450 3 +Deadly DAMP 36 50 6 Weapon,Bow Any 2 true 500 700 4 +Heavy DAMP 51 65 9 Weapon,Bow Any 2 true 750 950 5 +Vicious DAMP 66 80 12 Weapon,Bow Evil 2 true 1000 1450 8 +Brutal DAMP 81 95 16 Weapon,Bow Any 2 true 1500 1950 10 +Massive DAMP 96 110 20 Weapon,Bow Any 2 true 2000 2450 13 +Savage DAMP 111 125 23 Weapon,Bow Any 2 true 2500 3000 15 +Ruthless DAMP 126 150 35 Weapon,Bow Any 2 true 10100 15000 17 +Merciless DAMP 151 175 60 Weapon,Bow Any 2 true 15000 20000 20 +Clumsy TOHIT_DAMP_CURSE 50 75 5 Weapon,Staff,Bow Any 2 false 0 0 -7 +Dull TOHIT_DAMP_CURSE 25 45 1 Weapon,Staff,Bow Any 2 false 0 0 -5 +Sharp TOHIT_DAMP 20 35 1 Weapon,Staff,Bow Any 2 false 350 950 5 +Fine TOHIT_DAMP 36 50 6 Weapon,Staff,Bow Any 2 true 1100 1700 7 +Warrior's TOHIT_DAMP 51 65 10 Weapon,Staff,Bow Any 2 true 1850 2450 13 +Soldier's TOHIT_DAMP 66 80 15 Weapon,Staff Any 2 true 2600 3950 17 +Lord's TOHIT_DAMP 81 95 19 Weapon,Staff Any 2 true 4100 5950 21 +Knight's TOHIT_DAMP 96 110 23 Weapon,Staff Any 2 true 6100 8450 26 +Master's TOHIT_DAMP 111 125 28 Weapon,Staff Any 2 true 8600 13000 30 +Champion's TOHIT_DAMP 126 150 40 Weapon,Staff Any 2 true 15200 24000 33 +King's TOHIT_DAMP 151 175 28 Weapon,Staff Any 2 true 24100 35000 38 +Vulnerable ACP_CURSE 51 100 3 Armor,Shield Any 2 false 0 0 -3 +Rusted ACP_CURSE 25 50 1 Armor,Shield Any 2 false 0 0 -2 +Fine ACP 20 30 1 Armor,Shield Any 2 true 20 100 2 +Strong ACP 31 40 3 Armor,Shield Any 2 true 120 200 3 +Grand ACP 41 55 6 Armor,Shield Any 2 true 220 300 5 +Valiant ACP 56 70 10 Armor,Shield Any 2 true 320 400 7 +Glorious ACP 71 90 14 Armor,Shield Good 2 true 420 600 9 +Blessed ACP 91 110 19 Armor,Shield Good 2 true 620 800 11 +Saintly ACP 111 130 24 Armor,Shield Good 2 true 820 1200 13 +Awesome ACP 131 150 28 Armor,Shield Good 2 true 1220 2000 15 +Holy ACP 151 170 35 Armor,Shield Good 2 true 5200 6000 17 +Godly ACP 171 200 60 Armor,Shield Good 2 true 6200 7000 20 +Red FIRERES 10 20 4 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 500 1500 2 +Crimson FIRERES 21 30 10 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 2100 3000 2 +Crimson FIRERES 31 40 16 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 3100 4000 2 +Garnet FIRERES 41 50 20 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 8200 12000 3 +Ruby FIRERES 51 60 26 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 17100 20000 5 +Blue LIGHTRES 10 20 4 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 500 1500 2 +Azure LIGHTRES 21 30 10 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 2100 3000 2 +Lapis LIGHTRES 31 40 16 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 3100 4000 2 +Cobalt LIGHTRES 41 50 20 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 8200 12000 3 +Sapphire LIGHTRES 51 60 26 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 17100 20000 5 +White MAGICRES 10 20 4 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 500 1500 2 +Pearl MAGICRES 21 30 10 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 2100 3000 2 +Ivory MAGICRES 31 40 16 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 3100 4000 2 +Crystal MAGICRES 41 50 20 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 8200 12000 3 +Diamond MAGICRES 51 60 26 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 17100 20000 5 +Topaz ALLRES 10 15 8 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 2000 5000 3 +Amber ALLRES 16 20 12 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 7400 10000 3 +Jade ALLRES 21 30 18 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 11000 15000 3 +Obsidian ALLRES 31 40 24 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 24000 40000 4 +Emerald ALLRES 41 50 31 Shield,Weapon,Staff,Bow Any 1 true 61000 75000 7 +Hyena's MANA_CURSE 11 25 4 Staff,Misc Any 1 false 100 1000 -2 +Frog's MANA_CURSE 1 10 1 Staff,Misc Evil 1 false 0 0 -2 +Spider's MANA 10 15 1 Staff,Misc Evil 1 true 500 1000 2 +Raven's MANA 15 20 5 Staff,Misc Any 1 true 1100 2000 3 +Snake's MANA 21 30 9 Staff,Misc Any 1 true 2100 4000 5 +Serpent's MANA 30 40 15 Staff,Misc Any 1 true 4100 6000 7 +Drake's MANA 41 50 21 Staff,Misc Any 1 true 6100 10000 9 +Dragon's MANA 51 60 27 Staff,Misc Any 1 true 10100 15000 11 +Wyrm's MANA 61 80 35 Staff Any 1 true 15100 19000 12 +Hydra's MANA 81 100 60 Staff Any 1 true 19100 30000 13 +Angel's SPLLVLADD 1 1 15 Staff Good 1 true 25000 25000 2 +Arch-Angel's SPLLVLADD 2 2 25 Staff Good 1 true 50000 50000 3 +Plentiful CHARGES 2 2 4 Staff Any 1 true 2000 2000 2 +Bountiful CHARGES 3 3 9 Staff Any 1 true 3000 3000 3 +Flaming FIREDAM 1 10 7 Weapon,Staff Any 1 true 5000 5000 2 +Lightning LIGHTDAM 2 20 18 Weapon,Staff Any 1 true 10000 10000 2 diff --git a/assets/txtdata/items/item_suffixes.tsv b/assets/txtdata/items/item_suffixes.tsv index 16f905dea..d1a164421 100644 --- a/assets/txtdata/items/item_suffixes.tsv +++ b/assets/txtdata/items/item_suffixes.tsv @@ -1,99 +1,96 @@ -name power power.value1 power.value2 minLevel itemTypes alignment doubleChance useful minVal maxVal multVal -quality DAMMOD 1 2 2 Weapon,Staff,Bow Any false true 100 200 2 -maiming DAMMOD 3 5 7 Weapon,Staff,Bow Any false true 1300 1500 3 -slaying DAMMOD 6 8 15 Weapon Any false true 2600 3000 5 -gore DAMMOD 9 12 25 Weapon Any false true 4100 5000 8 -carnage DAMMOD 13 16 35 Weapon Any false true 5100 10000 10 -slaughter DAMMOD 17 20 60 Weapon Any false true 10100 15000 13 -pain GETHIT_CURSE 2 4 4 Armor,Shield,Misc Evil false false 0 0 -4 -tears GETHIT_CURSE 1 1 2 Armor,Shield,Misc Evil false false 0 0 -2 -health GETHIT 1 1 2 Armor,Shield,Misc Good false true 200 200 2 -protection GETHIT 2 2 6 Armor,Shield Good false true 400 800 4 -absorption GETHIT 3 3 12 Armor,Shield Good false true 1001 2500 10 -deflection GETHIT 4 4 20 Armor Good false true 2500 6500 15 -osmosis GETHIT 5 6 50 Armor Good false true 7500 10000 20 -frailty STR_CURSE 6 10 3 Armor,Shield,Weapon,Bow,Misc Evil false false 0 0 -3 -weakness STR_CURSE 1 5 1 Armor,Shield,Weapon,Staff,Bow,Misc Evil false false 0 0 -2 -strength STR 1 5 1 Armor,Shield,Weapon,Staff,Bow,Misc Any false true 200 1000 2 -might STR 6 10 5 Armor,Shield,Weapon,Bow,Misc Any false true 1200 2000 3 -power STR 11 15 11 Armor,Shield,Weapon,Bow,Misc Any false true 2200 3000 4 -giants STR 16 20 17 Armor,Weapon,Bow,Misc Any false true 3200 5000 7 -titans STR 21 30 23 Weapon,Misc Any false true 5200 10000 10 -paralysis DEX_CURSE 6 10 3 Armor,Shield,Weapon,Bow,Misc Evil false false 0 0 -3 -atrophy DEX_CURSE 1 5 1 Armor,Shield,Weapon,Staff,Bow,Misc Evil false false 0 0 -2 -dexterity DEX 1 5 1 Armor,Shield,Weapon,Staff,Bow,Misc Any false true 200 1000 2 -skill DEX 6 10 5 Armor,Shield,Weapon,Bow,Misc Any false true 1200 2000 3 -accuracy DEX 11 15 11 Armor,Shield,Weapon,Bow,Misc Any false true 2200 3000 4 -precision DEX 16 20 17 Armor,Weapon,Bow,Misc Any false true 3200 5000 7 -perfection DEX 21 30 23 Bow,Misc Any false true 5200 10000 10 -the fool MAG_CURSE 6 10 3 Armor,Shield,Weapon,Staff,Bow,Misc Evil false false 0 0 -3 -dyslexia MAG_CURSE 1 5 1 Armor,Shield,Weapon,Staff,Bow,Misc Evil false false 0 0 -2 -magic MAG 1 5 1 Armor,Shield,Weapon,Staff,Bow,Misc Any false true 200 1000 2 -the mind MAG 6 10 5 Armor,Shield,Weapon,Staff,Bow,Misc Any false true 1200 2000 3 -brilliance MAG 11 15 11 Armor,Shield,Weapon,Staff,Bow,Misc Any false true 2200 3000 4 -sorcery MAG 16 20 17 Armor,Weapon,Staff,Bow,Misc Any false true 3200 5000 7 -wizardry MAG 21 30 23 Staff,Misc Any false true 5200 10000 10 -illness VIT_CURSE 6 10 3 Armor,Shield,Weapon,Staff,Bow,Misc Evil false false 0 0 -3 -disease VIT_CURSE 1 5 1 Armor,Shield,Weapon,Staff,Bow,Misc Evil false false 0 0 -2 -vitality VIT 1 5 1 Armor,Shield,Weapon,Staff,Bow,Misc Good false true 200 1000 2 -zest VIT 6 10 5 Armor,Shield,Weapon,Bow,Misc Good false true 1200 2000 3 -vim VIT 11 15 11 Armor,Shield,Weapon,Bow,Misc Good false true 2200 3000 4 -vigor VIT 16 20 17 Armor,Weapon,Bow,Misc Good false true 3200 5000 7 -life VIT 21 30 23 Misc Good false true 5200 10000 10 -trouble ATTRIBS_CURSE 6 10 12 Armor,Shield,Weapon,Staff,Bow,Misc Evil false false 0 0 -10 -the pit ATTRIBS_CURSE 1 5 5 Armor,Shield,Weapon,Staff,Bow,Misc Evil false false 0 0 -5 -the sky ATTRIBS 1 3 5 Armor,Shield,Weapon,Staff,Bow,Misc Any false true 800 4000 5 -the moon ATTRIBS 4 7 11 Armor,Shield,Weapon,Staff,Bow,Misc Any false true 4800 8000 10 -the stars ATTRIBS 8 11 17 Armor,Weapon,Bow,Misc Any false true 8800 12000 15 -the heavens ATTRIBS 12 15 25 Weapon,Bow,Misc Any false true 12800 20000 20 -the zodiac ATTRIBS 16 20 30 Misc Any false true 20800 40000 30 -the vulture LIFE_CURSE 11 25 4 Armor,Shield,Misc Evil false false 0 0 -4 -the jackal LIFE_CURSE 1 10 1 Armor,Shield,Misc Evil false false 0 0 -2 -the fox LIFE 10 15 1 Armor,Shield,Misc Any false true 100 1000 2 -the jaguar LIFE 16 20 5 Armor,Shield,Misc Any false true 1100 2000 3 -the eagle LIFE 21 30 9 Armor,Shield,Misc Any false true 2100 4000 5 -the wolf LIFE 30 40 15 Armor,Shield,Misc Any false true 4100 6000 7 -the tiger LIFE 41 50 21 Armor,Shield,Misc Any false true 6100 10000 9 -the lion LIFE 51 60 27 Armor,Misc Any false true 10100 15000 11 -the mammoth LIFE 61 80 35 Armor Any false true 15100 19000 12 -the whale LIFE 81 100 60 Armor Any false true 19100 30000 13 -fragility DUR_CURSE 100 100 3 Armor,Shield,Weapon Evil false false 0 0 -4 -brittleness DUR_CURSE 26 75 1 Armor,Shield,Weapon Evil false false 0 0 -2 -sturdiness DUR 26 75 1 Armor,Shield,Weapon,Staff Any false true 100 100 2 -craftsmanship DUR 51 100 6 Armor,Shield,Weapon,Staff Any false true 200 200 2 -structure DUR 101 200 12 Armor,Shield,Weapon,Staff Any false true 300 300 2 -the ages INDESTRUCTIBLE 25 Armor,Shield,Weapon,Staff Any false true 600 600 5 -the dark LIGHT_CURSE 4 4 6 Armor,Weapon,Misc Evil false false 0 0 -3 -the night LIGHT_CURSE 2 2 3 Armor,Weapon,Misc Evil false false 0 0 -2 -light LIGHT 2 2 4 Armor,Weapon,Misc Good false true 750 750 2 -radiance LIGHT 4 4 8 Armor,Weapon,Misc Good false true 1500 1500 3 -flame FIRE_ARROWS 1 3 1 Bow Any false true 2000 2000 2 -fire FIRE_ARROWS 1 6 11 Bow Any false true 4000 4000 4 -burning FIRE_ARROWS 1 16 35 Bow Any false true 6000 6000 6 -shock LIGHT_ARROWS 1 6 13 Bow Any false true 6000 6000 2 -lightning LIGHT_ARROWS 1 10 21 Bow Any false true 8000 8000 4 -thunder LIGHT_ARROWS 1 20 60 Bow Any false true 12000 12000 6 -many DUR 100 100 3 Bow Any false true 750 750 2 -plenty DUR 200 200 7 Bow Any false true 1500 1500 3 -thorns THORNS 1 3 1 Armor,Shield Any false true 500 500 2 -corruption NOMANA 5 Armor,Shield,Weapon Evil false false -1000 -1000 2 -thieves ABSHALFTRAP 11 Armor,Shield,Misc Any false true 1500 1500 2 -the bear KNOCKBACK 5 Weapon,Staff,Bow Evil false true 750 750 2 -the bat STEALMANA 3 3 8 Weapon Any false true 7500 7500 3 -vampires STEALMANA 5 5 19 Weapon Any false true 15000 15000 3 -the leech STEALLIFE 3 3 8 Weapon Any false true 7500 7500 3 -blood STEALLIFE 5 5 19 Weapon Any false true 15000 15000 3 -piercing TARGAC 1 1 1 Weapon,Bow Any false true 1000 1000 3 -puncturing TARGAC 2 2 9 Weapon,Bow Any false true 2000 2000 6 -bashing TARGAC 3 3 17 Weapon Any false true 4000 4000 12 -readiness FASTATTACK 1 1 1 Weapon,Staff,Bow Any false true 2000 2000 2 -swiftness FASTATTACK 2 2 10 Weapon,Staff,Bow Any false true 4000 4000 4 -speed FASTATTACK 3 3 19 Weapon,Staff Any false true 8000 8000 8 -haste FASTATTACK 4 4 27 Weapon,Staff Any false true 16000 16000 16 -balance FASTRECOVER 1 1 1 Armor,Misc Any false true 2000 2000 2 -stability FASTRECOVER 2 2 10 Armor,Misc Any false true 4000 4000 4 -harmony FASTRECOVER 3 3 20 Armor,Misc Any false true 8000 8000 8 -blocking FASTBLOCK 1 1 5 Shield Any false true 4000 4000 4 -devastation DEVASTATION 1 1 1 Weapon,Staff,Bow Any false true 1200 1200 3 -decay DECAY 150 250 1 Weapon,Staff,Bow Any false true 200 200 2 -peril PERIL 1 1 5 Weapon,Staff,Bow Any false true 500 500 1 +name power power.value1 power.value2 minLevel itemTypes alignment chance useful minVal maxVal multVal +quality DAMMOD 1 2 2 Weapon,Bow Any 1 true 100 200 2 +maiming DAMMOD 3 5 7 Weapon,Bow Any 1 true 1300 1500 3 +slaying DAMMOD 6 8 15 Weapon Any 1 true 2600 3000 5 +gore DAMMOD 9 12 25 Weapon Any 1 true 4100 5000 8 +carnage DAMMOD 13 16 35 Weapon Any 1 true 5100 10000 10 +slaughter DAMMOD 17 20 60 Weapon Any 1 true 10100 15000 13 +pain GETHIT_CURSE 2 4 4 Armor,Shield,Misc Evil 1 false 0 0 -4 +tears GETHIT_CURSE 1 1 2 Armor,Shield,Misc Evil 1 false 0 0 -2 +health GETHIT 1 1 2 Armor,Shield,Misc Good 1 true 200 200 2 +protection GETHIT 2 2 6 Armor,Shield Good 1 true 400 800 4 +absorption GETHIT 3 3 12 Armor,Shield Good 1 true 1001 2500 10 +deflection GETHIT 4 4 20 Armor Good 1 true 2500 6500 15 +osmosis GETHIT 5 6 50 Armor Good 1 true 7500 10000 20 +frailty STR_CURSE 6 10 3 Armor,Shield,Weapon,Bow,Misc Evil 1 false 0 0 -3 +weakness STR_CURSE 1 5 1 Armor,Shield,Weapon,Bow,Misc Evil 1 false 0 0 -2 +strength STR 1 5 1 Armor,Shield,Weapon,Bow,Misc Any 1 true 200 1000 2 +might STR 6 10 5 Armor,Shield,Weapon,Bow,Misc Any 1 true 1200 2000 3 +power STR 11 15 11 Armor,Shield,Weapon,Bow,Misc Any 1 true 2200 3000 4 +giants STR 16 20 17 Armor,Weapon,Bow,Misc Any 1 true 3200 5000 7 +titans STR 21 30 23 Weapon,Misc Any 1 true 5200 10000 10 +paralysis DEX_CURSE 6 10 3 Armor,Shield,Weapon,Bow,Misc Evil 1 false 0 0 -3 +atrophy DEX_CURSE 1 5 1 Armor,Shield,Weapon,Bow,Misc Evil 1 false 0 0 -2 +dexterity DEX 1 5 1 Armor,Shield,Weapon,Bow,Misc Any 1 true 200 1000 2 +skill DEX 6 10 5 Armor,Shield,Weapon,Bow,Misc Any 1 true 1200 2000 3 +accuracy DEX 11 15 11 Armor,Shield,Weapon,Bow,Misc Any 1 true 2200 3000 4 +precision DEX 16 20 17 Armor,Weapon,Bow,Misc Any 1 true 3200 5000 7 +perfection DEX 21 30 23 Bow,Misc Any 1 true 5200 10000 10 +the fool MAG_CURSE 6 10 3 Armor,Shield,Weapon,Staff,Bow,Misc Evil 1 false 0 0 -3 +dyslexia MAG_CURSE 1 5 1 Armor,Shield,Weapon,Staff,Bow,Misc Evil 1 false 0 0 -2 +magic MAG 1 5 1 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 200 1000 2 +the mind MAG 6 10 5 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 1200 2000 3 +brilliance MAG 11 15 11 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 2200 3000 4 +sorcery MAG 16 20 17 Armor,Weapon,Staff,Bow,Misc Any 1 true 3200 5000 7 +wizardry MAG 21 30 23 Staff,Misc Any 1 true 5200 10000 10 +illness VIT_CURSE 6 10 3 Armor,Shield,Weapon,Bow,Misc Evil 1 false 0 0 -3 +disease VIT_CURSE 1 5 1 Armor,Shield,Weapon,Bow,Misc Evil 1 false 0 0 -2 +vitality VIT 1 5 1 Armor,Shield,Weapon,Bow,Misc Good 1 true 200 1000 2 +zest VIT 6 10 5 Armor,Shield,Weapon,Bow,Misc Good 1 true 1200 2000 3 +vim VIT 11 15 11 Armor,Shield,Weapon,Bow,Misc Good 1 true 2200 3000 4 +vigor VIT 16 20 17 Armor,Weapon,Bow,Misc Good 1 true 3200 5000 7 +life VIT 21 30 23 Misc Good 1 true 5200 10000 10 +trouble ATTRIBS_CURSE 6 10 12 Armor,Shield,Weapon,Bow,Misc Evil 1 false 0 0 -10 +the pit ATTRIBS_CURSE 1 5 5 Armor,Shield,Weapon,Bow,Misc Evil 1 false 0 0 -5 +the sky ATTRIBS 1 3 5 Armor,Shield,Weapon,Bow,Misc Any 1 true 800 4000 5 +the moon ATTRIBS 4 7 11 Armor,Shield,Weapon,Bow,Misc Any 1 true 4800 8000 10 +the stars ATTRIBS 8 11 17 Armor,Weapon,Bow,Misc Any 1 true 8800 12000 15 +the heavens ATTRIBS 12 15 25 Weapon,Bow,Misc Any 1 true 12800 20000 20 +the zodiac ATTRIBS 16 20 30 Misc Any 1 true 20800 40000 30 +the vulture LIFE_CURSE 11 25 4 Armor,Shield,Misc Evil 1 false 0 0 -4 +the jackal LIFE_CURSE 1 10 1 Armor,Shield,Misc Evil 1 false 0 0 -2 +the fox LIFE 10 15 1 Armor,Shield,Misc Any 1 true 100 1000 2 +the jaguar LIFE 16 20 5 Armor,Shield,Misc Any 1 true 1100 2000 3 +the eagle LIFE 21 30 9 Armor,Shield,Misc Any 1 true 2100 4000 5 +the wolf LIFE 30 40 15 Armor,Shield,Misc Any 1 true 4100 6000 7 +the tiger LIFE 41 50 21 Armor,Shield,Misc Any 1 true 6100 10000 9 +the lion LIFE 51 60 27 Armor,Misc Any 1 true 10100 15000 11 +the mammoth LIFE 61 80 35 Armor Any 1 true 15100 19000 12 +the whale LIFE 81 100 60 Armor Any 1 true 19100 30000 13 +fragility DUR_CURSE 100 100 3 Armor,Shield,Weapon Evil 1 false 0 0 -4 +brittleness DUR_CURSE 26 75 1 Armor,Shield,Weapon Evil 1 false 0 0 -2 +sturdiness DUR 26 75 1 Armor,Shield,Weapon Any 1 true 100 100 2 +craftsmanship DUR 51 100 6 Armor,Shield,Weapon Any 1 true 200 200 2 +structure DUR 101 200 12 Armor,Shield,Weapon Any 1 true 300 300 2 +the ages INDESTRUCTIBLE 25 Armor,Shield,Weapon Any 1 true 600 600 5 +the dark LIGHT_CURSE 4 4 6 Armor,Weapon,Misc Evil 1 false 0 0 -3 +the night LIGHT_CURSE 2 2 3 Armor,Weapon,Misc Evil 1 false 0 0 -2 +light LIGHT 2 2 4 Armor,Weapon,Misc Good 1 true 750 750 2 +radiance LIGHT 4 4 8 Armor,Weapon,Misc Good 1 true 1500 1500 3 +flame FIRE_ARROWS 1 3 1 Bow Any 1 true 2000 2000 2 +fire FIRE_ARROWS 1 6 11 Bow Any 1 true 4000 4000 4 +burning FIRE_ARROWS 1 16 35 Bow Any 1 true 6000 6000 6 +shock LIGHT_ARROWS 1 6 13 Bow Any 1 true 6000 6000 2 +lightning LIGHT_ARROWS 1 10 21 Bow Any 1 true 8000 8000 4 +thunder LIGHT_ARROWS 1 20 60 Bow Any 1 true 12000 12000 6 +many DUR 100 100 3 Bow Any 1 true 750 750 2 +plenty DUR 200 200 7 Bow Any 1 true 1500 1500 3 +thorns THORNS 1 3 1 Armor,Shield Any 1 true 500 500 2 +corruption NOMANA 5 Armor,Shield,Weapon Evil 1 false -1000 -1000 2 +thieves ABSHALFTRAP 11 Armor,Shield,Misc Any 1 true 1500 1500 2 +the bear KNOCKBACK 5 Weapon,Staff,Bow Evil 1 true 750 750 2 +the bat STEALMANA 3 3 8 Weapon Any 1 true 7500 7500 3 +vampires STEALMANA 5 5 19 Weapon Any 1 true 15000 15000 3 +the leech STEALLIFE 3 3 8 Weapon Any 1 true 7500 7500 3 +blood STEALLIFE 5 5 19 Weapon Any 1 true 15000 15000 3 +piercing TARGAC 2 6 1 Weapon,Bow Any 1 true 1000 1000 3 +puncturing TARGAC 4 12 9 Weapon,Bow Any 1 true 2000 2000 6 +bashing TARGAC 8 24 17 Weapon Any 1 true 4000 4000 12 +readiness FASTATTACK 1 1 1 Weapon,Staff,Bow Any 1 true 2000 2000 2 +swiftness FASTATTACK 2 2 10 Weapon,Staff,Bow Any 1 true 4000 4000 4 +speed FASTATTACK 3 3 19 Weapon,Staff Any 1 true 8000 8000 8 +haste FASTATTACK 4 4 27 Weapon,Staff Any 1 true 16000 16000 16 +balance FASTRECOVER 1 1 1 Armor,Misc Any 1 true 2000 2000 2 +stability FASTRECOVER 2 2 10 Armor,Misc Any 1 true 4000 4000 4 +harmony FASTRECOVER 3 3 20 Armor,Misc Any 1 true 8000 8000 8 +blocking FASTBLOCK 1 1 5 Shield Any 1 true 4000 4000 4 diff --git a/assets/nlevels/cutl5w.clx b/mods/Hellfire/nlevels/cutl5w.clx similarity index 100% rename from assets/nlevels/cutl5w.clx rename to mods/Hellfire/nlevels/cutl5w.clx diff --git a/assets/nlevels/cutl6w.clx b/mods/Hellfire/nlevels/cutl6w.clx similarity index 100% rename from assets/nlevels/cutl6w.clx rename to mods/Hellfire/nlevels/cutl6w.clx diff --git a/assets/nlevels/l5data/cornerstone.dun b/mods/Hellfire/nlevels/l5data/cornerstone.dun similarity index 100% rename from assets/nlevels/l5data/cornerstone.dun rename to mods/Hellfire/nlevels/l5data/cornerstone.dun diff --git a/assets/nlevels/l5data/uberroom.dun b/mods/Hellfire/nlevels/l5data/uberroom.dun similarity index 100% rename from assets/nlevels/l5data/uberroom.dun rename to mods/Hellfire/nlevels/l5data/uberroom.dun diff --git a/mods/Hellfire/txtdata/items/item_prefixes.tsv b/mods/Hellfire/txtdata/items/item_prefixes.tsv new file mode 100644 index 000000000..622734c2c --- /dev/null +++ b/mods/Hellfire/txtdata/items/item_prefixes.tsv @@ -0,0 +1,87 @@ +name power power.value1 power.value2 minLevel itemTypes alignment chance useful minVal maxVal multVal +Tin TOHIT_CURSE 6 10 3 Weapon,Bow,Misc Any 2 false 0 0 -3 +Brass TOHIT_CURSE 1 5 1 Weapon,Bow,Misc Any 2 false 0 0 -2 +Bronze TOHIT 1 5 1 Weapon,Bow,Misc Any 2 true 100 500 2 +Iron TOHIT 6 10 4 Weapon,Bow,Misc Any 2 true 600 1000 3 +Steel TOHIT 11 15 6 Weapon,Bow,Misc Any 2 true 1100 1500 5 +Silver TOHIT 16 20 9 Weapon,Bow,Misc Good 2 true 1600 2000 7 +Gold TOHIT 21 30 12 Weapon,Bow,Misc Good 2 true 2100 3000 9 +Platinum TOHIT 31 40 16 Weapon,Bow Good 2 true 3100 4000 11 +Mithril TOHIT 41 60 20 Weapon,Bow Good 2 true 4100 6000 13 +Meteoric TOHIT 61 80 23 Weapon,Bow Any 2 true 6100 10000 15 +Weird TOHIT 81 100 35 Weapon,Bow Any 2 true 10100 14000 17 +Strange TOHIT 101 150 60 Weapon,Bow Any 2 true 14100 20000 20 +Useless DAMP_CURSE 100 100 5 Weapon,Staff,Bow Any 2 false 0 0 -8 +Bent DAMP_CURSE 50 75 3 Weapon,Staff,Bow Any 2 false 0 0 -4 +Weak DAMP_CURSE 25 45 1 Weapon,Staff,Bow Any 2 false 0 0 -3 +Jagged DAMP 20 35 4 Weapon,Staff,Bow Any 2 true 250 450 3 +Deadly DAMP 36 50 6 Weapon,Staff,Bow Any 2 true 500 700 4 +Heavy DAMP 51 65 9 Weapon,Staff,Bow Any 2 true 750 950 5 +Vicious DAMP 66 80 12 Weapon,Staff,Bow Evil 2 true 1000 1450 8 +Brutal DAMP 81 95 16 Weapon,Staff,Bow Any 2 true 1500 1950 10 +Massive DAMP 96 110 20 Weapon,Staff,Bow Any 2 true 2000 2450 13 +Savage DAMP 111 125 23 Weapon,Bow Any 2 true 2500 3000 15 +Ruthless DAMP 126 150 35 Weapon,Bow Any 2 true 10100 15000 17 +Merciless DAMP 151 175 60 Weapon,Bow Any 2 true 15000 20000 20 +Clumsy TOHIT_DAMP_CURSE 50 75 5 Weapon,Staff,Bow Any 2 false 0 0 -7 +Dull TOHIT_DAMP_CURSE 25 45 1 Weapon,Staff,Bow Any 2 false 0 0 -5 +Sharp TOHIT_DAMP 20 35 1 Weapon,Staff,Bow Any 2 false 350 950 5 +Fine TOHIT_DAMP 36 50 6 Weapon,Staff,Bow Any 2 true 1100 1700 7 +Warrior's TOHIT_DAMP 51 65 10 Weapon,Staff,Bow Any 2 true 1850 2450 13 +Soldier's TOHIT_DAMP 66 80 15 Weapon,Staff Any 2 true 2600 3950 17 +Lord's TOHIT_DAMP 81 95 19 Weapon,Staff Any 2 true 4100 5950 21 +Knight's TOHIT_DAMP 96 110 23 Weapon,Staff Any 2 true 6100 8450 26 +Master's TOHIT_DAMP 111 125 28 Weapon,Staff Any 2 true 8600 13000 30 +Champion's TOHIT_DAMP 126 150 40 Weapon,Staff Any 2 true 15200 24000 33 +King's TOHIT_DAMP 151 175 28 Weapon,Staff Any 2 true 24100 35000 38 +Vulnerable ACP_CURSE 51 100 3 Armor,Shield Any 2 false 0 0 -3 +Rusted ACP_CURSE 25 50 1 Armor,Shield Any 2 false 0 0 -2 +Fine ACP 20 30 1 Armor,Shield Any 2 true 20 100 2 +Strong ACP 31 40 3 Armor,Shield Any 2 true 120 200 3 +Grand ACP 41 55 6 Armor,Shield Any 2 true 220 300 5 +Valiant ACP 56 70 10 Armor,Shield Any 2 true 320 400 7 +Glorious ACP 71 90 14 Armor,Shield Good 2 true 420 600 9 +Blessed ACP 91 110 19 Armor,Shield Good 2 true 620 800 11 +Saintly ACP 111 130 24 Armor,Shield Good 2 true 820 1200 13 +Awesome ACP 131 150 28 Armor,Shield Good 2 true 1220 2000 15 +Holy ACP 151 170 35 Armor,Shield Good 2 true 5200 6000 17 +Godly ACP 171 200 60 Armor,Shield Good 2 true 6200 7000 20 +Red FIRERES 10 20 4 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 500 1500 2 +Crimson FIRERES 21 30 10 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 2100 3000 2 +Crimson FIRERES 31 40 16 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 3100 4000 2 +Garnet FIRERES 41 50 20 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 8200 12000 3 +Ruby FIRERES 51 60 26 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 17100 20000 5 +Blue LIGHTRES 10 20 4 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 500 1500 2 +Azure LIGHTRES 21 30 10 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 2100 3000 2 +Lapis LIGHTRES 31 40 16 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 3100 4000 2 +Cobalt LIGHTRES 41 50 20 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 8200 12000 3 +Sapphire LIGHTRES 51 60 26 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 17100 20000 5 +White MAGICRES 10 20 4 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 500 1500 2 +Pearl MAGICRES 21 30 10 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 2100 3000 2 +Ivory MAGICRES 31 40 16 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 3100 4000 2 +Crystal MAGICRES 41 50 20 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 8200 12000 3 +Diamond MAGICRES 51 60 26 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 17100 20000 5 +Topaz ALLRES 10 15 8 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 2000 5000 3 +Amber ALLRES 16 20 12 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 7400 10000 3 +Jade ALLRES 21 30 18 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 11000 15000 3 +Obsidian ALLRES 31 40 24 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 24000 40000 4 +Emerald ALLRES 41 50 31 Shield,Weapon,Staff,Bow Any 1 true 61000 75000 7 +Hyena's MANA_CURSE 11 25 4 Staff,Misc Any 1 false 100 1000 -2 +Frog's MANA_CURSE 1 10 1 Staff,Misc Evil 1 false 0 0 -2 +Spider's MANA 10 15 1 Staff,Misc Evil 1 true 500 1000 2 +Raven's MANA 15 20 5 Staff,Misc Any 1 true 1100 2000 3 +Snake's MANA 21 30 9 Staff,Misc Any 1 true 2100 4000 5 +Serpent's MANA 30 40 15 Staff,Misc Any 1 true 4100 6000 7 +Drake's MANA 41 50 21 Staff,Misc Any 1 true 6100 10000 9 +Dragon's MANA 51 60 27 Staff,Misc Any 1 true 10100 15000 11 +Wyrm's MANA 61 80 35 Staff Any 1 true 15100 19000 12 +Hydra's MANA 81 100 60 Staff Any 1 true 19100 30000 13 +Angel's SPLLVLADD 1 1 15 Staff Good 1 true 25000 25000 2 +Arch-Angel's SPLLVLADD 2 2 25 Staff Good 1 true 50000 50000 3 +Plentiful CHARGES 2 2 4 Staff Any 1 true 2000 2000 2 +Bountiful CHARGES 3 3 9 Staff Any 1 true 3000 3000 3 +Flaming FIREDAM 1 10 7 Weapon,Staff Any 1 true 5000 5000 2 +Lightning LIGHTDAM 2 20 18 Weapon,Staff Any 1 true 10000 10000 2 +Jester's JESTERS 1 1 7 Weapon Any 1 true 1200 1200 3 +Crystalline CRYSTALLINE 30 70 5 Weapon Any 1 true 1000 3000 3 +Doppelganger's DOPPELGANGER 81 95 11 Weapon,Staff Any 1 true 2000 2400 10 diff --git a/mods/Hellfire/txtdata/items/item_suffixes.tsv b/mods/Hellfire/txtdata/items/item_suffixes.tsv new file mode 100644 index 000000000..41e555c15 --- /dev/null +++ b/mods/Hellfire/txtdata/items/item_suffixes.tsv @@ -0,0 +1,99 @@ +name power power.value1 power.value2 minLevel itemTypes alignment chance useful minVal maxVal multVal +quality DAMMOD 1 2 2 Weapon,Staff,Bow Any 1 true 100 200 2 +maiming DAMMOD 3 5 7 Weapon,Staff,Bow Any 1 true 1300 1500 3 +slaying DAMMOD 6 8 15 Weapon Any 1 true 2600 3000 5 +gore DAMMOD 9 12 25 Weapon Any 1 true 4100 5000 8 +carnage DAMMOD 13 16 35 Weapon Any 1 true 5100 10000 10 +slaughter DAMMOD 17 20 60 Weapon Any 1 true 10100 15000 13 +pain GETHIT_CURSE 2 4 4 Armor,Shield,Misc Evil 1 false 0 0 -4 +tears GETHIT_CURSE 1 1 2 Armor,Shield,Misc Evil 1 false 0 0 -2 +health GETHIT 1 1 2 Armor,Shield,Misc Good 1 true 200 200 2 +protection GETHIT 2 2 6 Armor,Shield Good 1 true 400 800 4 +absorption GETHIT 3 3 12 Armor,Shield Good 1 true 1001 2500 10 +deflection GETHIT 4 4 20 Armor Good 1 true 2500 6500 15 +osmosis GETHIT 5 6 50 Armor Good 1 true 7500 10000 20 +frailty STR_CURSE 6 10 3 Armor,Shield,Weapon,Bow,Misc Evil 1 false 0 0 -3 +weakness STR_CURSE 1 5 1 Armor,Shield,Weapon,Staff,Bow,Misc Evil 1 false 0 0 -2 +strength STR 1 5 1 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 200 1000 2 +might STR 6 10 5 Armor,Shield,Weapon,Bow,Misc Any 1 true 1200 2000 3 +power STR 11 15 11 Armor,Shield,Weapon,Bow,Misc Any 1 true 2200 3000 4 +giants STR 16 20 17 Armor,Weapon,Bow,Misc Any 1 true 3200 5000 7 +titans STR 21 30 23 Weapon,Misc Any 1 true 5200 10000 10 +paralysis DEX_CURSE 6 10 3 Armor,Shield,Weapon,Bow,Misc Evil 1 false 0 0 -3 +atrophy DEX_CURSE 1 5 1 Armor,Shield,Weapon,Staff,Bow,Misc Evil 1 false 0 0 -2 +dexterity DEX 1 5 1 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 200 1000 2 +skill DEX 6 10 5 Armor,Shield,Weapon,Bow,Misc Any 1 true 1200 2000 3 +accuracy DEX 11 15 11 Armor,Shield,Weapon,Bow,Misc Any 1 true 2200 3000 4 +precision DEX 16 20 17 Armor,Weapon,Bow,Misc Any 1 true 3200 5000 7 +perfection DEX 21 30 23 Bow,Misc Any 1 true 5200 10000 10 +the fool MAG_CURSE 6 10 3 Armor,Shield,Weapon,Staff,Bow,Misc Evil 1 false 0 0 -3 +dyslexia MAG_CURSE 1 5 1 Armor,Shield,Weapon,Staff,Bow,Misc Evil 1 false 0 0 -2 +magic MAG 1 5 1 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 200 1000 2 +the mind MAG 6 10 5 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 1200 2000 3 +brilliance MAG 11 15 11 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 2200 3000 4 +sorcery MAG 16 20 17 Armor,Weapon,Staff,Bow,Misc Any 1 true 3200 5000 7 +wizardry MAG 21 30 23 Staff,Misc Any 1 true 5200 10000 10 +illness VIT_CURSE 6 10 3 Armor,Shield,Weapon,Staff,Bow,Misc Evil 1 false 0 0 -3 +disease VIT_CURSE 1 5 1 Armor,Shield,Weapon,Staff,Bow,Misc Evil 1 false 0 0 -2 +vitality VIT 1 5 1 Armor,Shield,Weapon,Staff,Bow,Misc Good 1 true 200 1000 2 +zest VIT 6 10 5 Armor,Shield,Weapon,Bow,Misc Good 1 true 1200 2000 3 +vim VIT 11 15 11 Armor,Shield,Weapon,Bow,Misc Good 1 true 2200 3000 4 +vigor VIT 16 20 17 Armor,Weapon,Bow,Misc Good 1 true 3200 5000 7 +life VIT 21 30 23 Misc Good 1 true 5200 10000 10 +trouble ATTRIBS_CURSE 6 10 12 Armor,Shield,Weapon,Staff,Bow,Misc Evil 1 false 0 0 -10 +the pit ATTRIBS_CURSE 1 5 5 Armor,Shield,Weapon,Staff,Bow,Misc Evil 1 false 0 0 -5 +the sky ATTRIBS 1 3 5 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 800 4000 5 +the moon ATTRIBS 4 7 11 Armor,Shield,Weapon,Staff,Bow,Misc Any 1 true 4800 8000 10 +the stars ATTRIBS 8 11 17 Armor,Weapon,Bow,Misc Any 1 true 8800 12000 15 +the heavens ATTRIBS 12 15 25 Weapon,Bow,Misc Any 1 true 12800 20000 20 +the zodiac ATTRIBS 16 20 30 Misc Any 1 true 20800 40000 30 +the vulture LIFE_CURSE 11 25 4 Armor,Shield,Misc Evil 1 false 0 0 -4 +the jackal LIFE_CURSE 1 10 1 Armor,Shield,Misc Evil 1 false 0 0 -2 +the fox LIFE 10 15 1 Armor,Shield,Misc Any 1 true 100 1000 2 +the jaguar LIFE 16 20 5 Armor,Shield,Misc Any 1 true 1100 2000 3 +the eagle LIFE 21 30 9 Armor,Shield,Misc Any 1 true 2100 4000 5 +the wolf LIFE 30 40 15 Armor,Shield,Misc Any 1 true 4100 6000 7 +the tiger LIFE 41 50 21 Armor,Shield,Misc Any 1 true 6100 10000 9 +the lion LIFE 51 60 27 Armor,Misc Any 1 true 10100 15000 11 +the mammoth LIFE 61 80 35 Armor Any 1 true 15100 19000 12 +the whale LIFE 81 100 60 Armor Any 1 true 19100 30000 13 +fragility DUR_CURSE 100 100 3 Armor,Shield,Weapon Evil 1 false 0 0 -4 +brittleness DUR_CURSE 26 75 1 Armor,Shield,Weapon Evil 1 false 0 0 -2 +sturdiness DUR 26 75 1 Armor,Shield,Weapon,Staff Any 1 true 100 100 2 +craftsmanship DUR 51 100 6 Armor,Shield,Weapon,Staff Any 1 true 200 200 2 +structure DUR 101 200 12 Armor,Shield,Weapon,Staff Any 1 true 300 300 2 +the ages INDESTRUCTIBLE 25 Armor,Shield,Weapon,Staff Any 1 true 600 600 5 +the dark LIGHT_CURSE 4 4 6 Armor,Weapon,Misc Evil 1 false 0 0 -3 +the night LIGHT_CURSE 2 2 3 Armor,Weapon,Misc Evil 1 false 0 0 -2 +light LIGHT 2 2 4 Armor,Weapon,Misc Good 1 true 750 750 2 +radiance LIGHT 4 4 8 Armor,Weapon,Misc Good 1 true 1500 1500 3 +flame FIRE_ARROWS 1 3 1 Bow Any 1 true 2000 2000 2 +fire FIRE_ARROWS 1 6 11 Bow Any 1 true 4000 4000 4 +burning FIRE_ARROWS 1 16 35 Bow Any 1 true 6000 6000 6 +shock LIGHT_ARROWS 1 6 13 Bow Any 1 true 6000 6000 2 +lightning LIGHT_ARROWS 1 10 21 Bow Any 1 true 8000 8000 4 +thunder LIGHT_ARROWS 1 20 60 Bow Any 1 true 12000 12000 6 +many DUR 100 100 3 Bow Any 1 true 750 750 2 +plenty DUR 200 200 7 Bow Any 1 true 1500 1500 3 +thorns THORNS 1 3 1 Armor,Shield Any 1 true 500 500 2 +corruption NOMANA 5 Armor,Shield,Weapon Evil 1 false -1000 -1000 2 +thieves ABSHALFTRAP 11 Armor,Shield,Misc Any 1 true 1500 1500 2 +the bear KNOCKBACK 5 Weapon,Staff,Bow Evil 1 true 750 750 2 +the bat STEALMANA 3 3 8 Weapon Any 1 true 7500 7500 3 +vampires STEALMANA 5 5 19 Weapon Any 1 true 15000 15000 3 +the leech STEALLIFE 3 3 8 Weapon Any 1 true 7500 7500 3 +blood STEALLIFE 5 5 19 Weapon Any 1 true 15000 15000 3 +piercing TARGAC 1 1 1 Weapon,Bow Any 1 true 1000 1000 3 +puncturing TARGAC 2 2 9 Weapon,Bow Any 1 true 2000 2000 6 +bashing TARGAC 3 3 17 Weapon Any 1 true 4000 4000 12 +readiness FASTATTACK 1 1 1 Weapon,Staff,Bow Any 1 true 2000 2000 2 +swiftness FASTATTACK 2 2 10 Weapon,Staff,Bow Any 1 true 4000 4000 4 +speed FASTATTACK 3 3 19 Weapon,Staff Any 1 true 8000 8000 8 +haste FASTATTACK 4 4 27 Weapon,Staff Any 1 true 16000 16000 16 +balance FASTRECOVER 1 1 1 Armor,Misc Any 1 true 2000 2000 2 +stability FASTRECOVER 2 2 10 Armor,Misc Any 1 true 4000 4000 4 +harmony FASTRECOVER 3 3 20 Armor,Misc Any 1 true 8000 8000 8 +blocking FASTBLOCK 1 1 5 Shield Any 1 true 4000 4000 4 +devastation DEVASTATION 1 1 1 Weapon,Staff,Bow Any 1 true 1200 1200 3 +decay DECAY 150 250 1 Weapon,Staff,Bow Any 1 true 200 200 2 +peril PERIL 1 1 5 Weapon,Staff,Bow Any 1 true 500 500 1 diff --git a/test/drlg_l1_test.cpp b/test/drlg_l1_test.cpp index 485fd529f..b22d89ba8 100644 --- a/test/drlg_l1_test.cpp +++ b/test/drlg_l1_test.cpp @@ -205,7 +205,7 @@ TEST(Drlg_l1, CreateL5Dungeon_crypt_1_2122696790) { LoadExpectedLevelData("hellfire/21-2122696790.dun"); - TestInitGame(); + TestInitGame(true, true, true); TestCreateDungeon(21, 2122696790, ENTRY_TWARPDN); EXPECT_EQ(ViewPosition, Point(61, 81)); @@ -217,7 +217,7 @@ TEST(Drlg_l1, CreateL5Dungeon_crypt_2_1191662129) { LoadExpectedLevelData("hellfire/22-1191662129.dun"); - TestInitGame(); + TestInitGame(true, true, true); Quests[Q_PWATER]._qactive = QUEST_NOTAVAIL; Quests[Q_BUTCHER]._qactive = QUEST_NOTAVAIL; @@ -231,7 +231,7 @@ TEST(Drlg_l1, CreateL5Dungeon_crypt_3_97055268) { LoadExpectedLevelData("hellfire/23-97055268.dun"); - TestInitGame(); + TestInitGame(true, true, true); TestCreateDungeon(23, 97055268, ENTRY_MAIN); EXPECT_EQ(ViewPosition, Point(71, 57)); @@ -243,7 +243,7 @@ TEST(Drlg_l1, CreateL5Dungeon_crypt_4_1324803725) { LoadExpectedLevelData("hellfire/24-1324803725.dun"); - TestInitGame(); + TestInitGame(true, true, true); TestCreateDungeon(24, 1324803725, ENTRY_MAIN); EXPECT_EQ(ViewPosition, Point(79, 47)); diff --git a/test/drlg_l3_test.cpp b/test/drlg_l3_test.cpp index 4242f1d68..f0f3bf8af 100644 --- a/test/drlg_l3_test.cpp +++ b/test/drlg_l3_test.cpp @@ -77,7 +77,7 @@ TEST(Drlg_l3, CreateL3Dungeon_hive_1_19770182) { LoadExpectedLevelData("hellfire/17-19770182.dun"); - TestInitGame(); + TestInitGame(true, true, true); TestCreateDungeon(17, 19770182, ENTRY_TWARPDN); EXPECT_EQ(ViewPosition, Point(75, 81)); @@ -89,7 +89,7 @@ TEST(Drlg_l3, CreateL3Dungeon_hive_2_1522546307) { LoadExpectedLevelData("hellfire/18-1522546307.dun"); - TestInitGame(); + TestInitGame(true, true, true); TestCreateDungeon(18, 1522546307, ENTRY_MAIN); EXPECT_EQ(ViewPosition, Point(47, 19)); @@ -101,7 +101,7 @@ TEST(Drlg_l3, CreateL3Dungeon_hive_3_125121312) { LoadExpectedLevelData("hellfire/19-125121312.dun"); - TestInitGame(); + TestInitGame(true, true, true); TestCreateDungeon(19, 125121312, ENTRY_MAIN); EXPECT_EQ(ViewPosition, Point(61, 25)); @@ -113,7 +113,7 @@ TEST(Drlg_l3, CreateL3Dungeon_hive_4_1511478689) { LoadExpectedLevelData("hellfire/20-1511478689.dun"); - TestInitGame(); + TestInitGame(true, true, true); TestCreateDungeon(20, 1511478689, ENTRY_MAIN); EXPECT_EQ(ViewPosition, Point(65, 41)); diff --git a/test/drlg_test.hpp b/test/drlg_test.hpp index feeb5c3eb..15b493406 100644 --- a/test/drlg_test.hpp +++ b/test/drlg_test.hpp @@ -51,7 +51,7 @@ void LoadExpectedLevelData(const char *fixture) ASSERT_EQ(WorldTileSize(DMAXX, DMAXY), GetDunSize(DunData.get())); } -void TestInitGame(bool fullQuests = true, bool originalCathedral = true) +void TestInitGame(bool fullQuests = true, bool originalCathedral = true, bool hellfire = false) { Players.resize(1); MyPlayer = &Players[0]; @@ -60,6 +60,13 @@ void TestInitGame(bool fullQuests = true, bool originalCathedral = true) sgGameInitInfo.fullQuests = fullQuests ? 1 : 0; gbIsMultiplayer = !fullQuests; + UnloadModArchives(); + if (hellfire) { + LoadModArchives({ { "Hellfire" } }); + } else { + LoadModArchives({}); + } + InitQuests(); }