Module:Constants: Difference between revisions

From Melvor Idle
(getModifiersText: Fix)
(getDescription: Initial implementation)
Line 905: Line 905:


return skillArray
return skillArray
end
-- From game version 1.1 onwards, some entities have custom descriptions, while
-- many are generated based on the modifiers associated to that entity. This
-- function handles that logic given a custom description (may be nil) and
-- a modifiers object
function p.getDescription(customDescription, modifiers)
if customDescription ~= nil then
return customDescription
else
return p.getModifiersText(modifiers, false)
end
end
end


return p
return p

Revision as of 10:00, 23 October 2022

Documentation for this module may be created at Module:Constants/doc

local p = {}

local Shared = require('Module:Shared')
local GameData = require('Module:GameData')

--Just hardcoding these because I guess that's where we're at
local modifierTypes = {
	["MeleeStrengthBonus"] = { text = "{V}% Melee Strength Bonus from Equipment", skills = {'Combat'} },
	["DamageToDungeonMonsters"] = { text = "{V}% Damage To Dungeon Monsters", skills = {'Combat'} },
	["GlobalMasteryXP"] = { text = "{V}% Global Mastery XP", skills = {'Woodcutting', 'Fishing', 'Firemaking', 'Cooking', 'Mining', 'Smithing', 'Thieving', 'Farming', 'Fletching', 'Crafting', 'Runecrafting', 'Herblore', 'Agility', 'Summoning', 'Astrology'} },
	["ChanceRandomPotionHerblore"] = { text = "{V}% chance to gain a second potion of a random tier", skills = {'Herblore'} },
	["FlatPrayerCostReduction"] = { text = "{V} Prayer Point Cost for Prayers", inverseSign = true, skills = {'Prayer'} },
	["MinEarthSpellDmg"] = { text = "{VX} Min Earth Spell Dmg", skills = {'Magic'} },
	["SlayerTaskLength"] = { text = "{V}% Slayer Task Length/Qty", skills = {'Slayer'} },
	["ChanceToDoubleLootCombat"] = { text = "{V}% Chance To Double Loot in Combat", skills = {'Combat'} },
	["GPFromAgility"] = { text = "{V}% GP From Agility", skills = {'Agility'} },
	["SkillXP"] = { text = "{V}% {SV0} Skill XP" },
	["MiningNodeHP"] = { text = "{V} Mining Node HP", skills = {'Mining'} },
	["FarmingYield"] = { text = "{V}% Farming Yield", skills = {'Farming'} },
	["GPFromMonstersFlat"] = { text = "{V} GP From Monsters", skills = {'Combat'} },
	["GlobalPreservationChance"] = { text = "{V}% Chance to Preserve Resources in Skills" },
	["RunePreservation"] = { text = "{V}% Rune Preservation", skills = {'Magic'} },
	["MaxHitpoints"] = { text = "{VX} Maximum Hitpoints", skills = {'Combat'} },
	["ChanceToDoubleItemsSkill"] = { text = "{V}% Chance to Double Items in {SV0}" },
	["autoSlayerUnlocked"] = { text = "{V} Auto Slayer Unlocked", skills = {'Slayer'} },
	["HitpointRegeneration"] = { text = "{V}% Hitpoint Regeneration", skills = {'Combat'} },
	["PotionChargesFlat"] = { text = "{V} Charges per Potion" },
	["SkillInterval"] = { text = "{VMS}s {SV0} Interval", isIncreaseNegative = true, isSkill = true },
	["BankSpace"] = { text = "{V} Bank Space" },
	["MinHitBasedOnMaxHit"] = { text = "{V}% of Maximum Hit added to Minimum Hit", skills = {'Combat'} },
	["DamageToSlayerTasks"] = { text = "{V}% Damage To Slayer Tasks", skills = {'Combat'} },
	["Lifesteal"] = { text = "{V}% Lifesteal", skills = {'Combat'} },
	["HPRegenFlat"] = { text = "{VX} Flat HP Regen", skills = {'Combat'} },
	["ChanceToDoubleOres"] = { text = "{V}% Chance to Double Ores in Mining", skills = {'Combat'} },
	["MonsterRespawnTimer"] = { text = "{VMS}s Monster Respawn Timer", isIncreaseNegative = true, skills = {'Combat'} },
	["SkillPreservationChance"] = { text = "{V}% Chance to Preserve Resources in {SV0}" },
	["DamageToCombatAreaMonsters"] = { text = "{V}% Damage To Combat Area Monsters", skills = {'Combat'} },
	["TreeCutLimit"] = { text = "{V} Tree Cut Limit", skills = {'Woodcutting'} },
	["EquipmentSets"] = { text = "{V} Equipment Sets" },
	["HiddenSkillLevel"] = { text = "{V} Hidden {SV0} Level" },
	["ChanceToPreservePrayerPoints"] = { text = "{V}% Chance To Preserve Prayer Points", skills = {'Prayer'} },
	["ReflectDamage"] = { text = "{V}% Reflect Damage", skills = {'Combat'} },
	["MeleeEvasion"] = { text = "{V}% Melee Evasion", skills = {'Combat'} },
	["DamageToSlayerAreaMonsters"] = { text = "{V}% Damage To Slayer Area Monsters", skills = {'Combat'} },
	["GPFromMonsters"] = { text = "{V}% GP From Monsters", skills = {'Combat'} },
	["MagicEvasion"] = { text = "{V}% Magic Evasion", skills = {'Combat'} },
	["DamageReduction"] = { text = "{V}% Damage Reduction", skills = {'Combat'} },
	["MinWaterSpellDmg"] = { text = "{VX} Min Water Spell Dmg", skills = {'Magic'} },
	["DamageToAllMonsters"] = { text = "{V}% Damage To All Monsters", skills = {'Combat'} },
	["golbinRaidIncreasedStartingRuneCount"] = { text = "{V} to starting Elemental Rune count" },
	["FoodHealingValue"] = { text = "{V}% Food Healing Value", skills = {'Combat'} },
	["MinFireSpellDmg"] = { text = "{VX} Min Fire Spell Dmg", skills = {'Magic'} },
	["SlayerCoins"] = { text = "{V}% Slayer Coins", skills = {'Slayer'} },
	["GPFromThievingFlat"] = { text = "{V} GP From Thieving", skills = {'Thieving'} },
	["GlobalAccuracy"] = { text = "{V}% Global Accuracy", skills = {'Combat'} },
	["SlayerAreaEffectNegationFlat"] = { text = "{V}% Flat Slayer Area Effect Negation", skills = {'Combat'} },
	["MagicAccuracyBonus"] = { text = "{V}% Magic Accuracy Bonus", skills = {'Combat'} },
	["SkillIntervalPercent"] = { text = "{V}% {SV0} Interval", isIncreaseNegative = true, isSkill = true },
	["GlobalSkillXP"] = { text = "{V}% Global Skill XP" },
	["MeleeAccuracyBonus"] = { text = "{V}% Melee Accuracy Bonus", skills = {'Combat'} },
	["DamageToBosses"] = { text = "{V}% Damage To Bosses", skills = {'Combat'} },
	["ChanceToPreservePotionCharge"] = { text = "{V}% Chance To Preserve Potion Charge" },
	["MaxHitPercent"] = { text = "{V}% Max Hit", skills = {'Combat'} },
	["AltMagicSkillXP"] = { text = "{V}% Alt. Magic Skill XP", skills = {'Magic'} },
	["MinAirSpellDmg"] = { text = "{VX} Min Air Spell Dmg", skills = {'Magic'} },
	["AutoEatEfficiency"] = { text = "{V}% Auto Eat Efficiency", skills = {'Combat'} },
	["GPFromThieving"] = { text = "{V}% GP From Thieving", skills = {'Thieving'} },
	["ChanceToDoubleItemsGlobal"] = { text = "{V}% Chance to Double Items Globally" },
	["GPGlobal"] = { text = "{V}% GP from all sources (Except Item Selling)", skills = {'Combat', 'Thieving', 'Agility'} },
	["RangedAccuracyBonus"] = { text = "{V} Ranged Accuracy Bonus", skills = {'Combat'} },
	["AutoEatThreshold"] = { text = "{V}% Auto Eat Threshold", skills = {'Combat'} },
	["freeBonfires"] = { text = "+ Automatically relight bonfires for free", skills = {'Firemaking'} },
	["AutoEatHPLimit"] = { text = "{V}% Auto Eat HP Limit", skills = {'Combat'} },
	["BankSpaceShop"] = { text = "{V} Bank Space from Shop" },
	["BirdNestDropRate"] = { text = "{V}% Bird Nest drop rate", skills = {'Woodcutting'} },
	["RangedEvasion"] = { text = "{V}% Ranged Evasion", skills = {'Combat'} },
	["ChanceDoubleHarvest"] = { text = "{V}% chance for double harvest", skills = {'Farming'} },
	["golbinRaidStartingWeapon"] = { text = "Start the Golbin Raid with an {VITEM}", unsigned = true },
	["AttackRolls"] = { text = "+Lucky Hit Chance (Roll twice, take the better result)", skills = {'Combat'} },
	["AmmoPreservation"] = { text = "{V}% Ammo Preservation", skills = {'Ranged'} },
	["RangedStrengthBonus"] = { text = "{V}% Ranged Strength Bonus from Equipment", skills = {'Combat'} },
	["MagicDamageBonus"] = { text = "{V}% Magic Damage Bonus from Equipment", skills = {'Combat'} },
	["MasteryXP"] = { text = "{V}% {SV0} Mastery XP" },
	["dungeonEquipmentSwapping"] = { text = "{V} Dungeon Equipment Swapping", skills = {'Combat'} },
	["SeeingGoldChance"] = { text = "{V}% chance for Silver Ore to also produce a Gold Bar when smithed", skills = {'Smithing'} },
	["ElementalRuneGain"] = { text = "{V} runes received when generating random elemental runes", skills = {'Runecrafting'} },
	["GPFromSales"] = { text = "{V}% GP From Sales" },
	["MaxHitFlat"] = { text = "{VX} Max Hit", skills = {'Combat'} },
	["ChanceNoDamageMining"] = { text = "{V}% chance to do zero damage to Ores and Rune Essence", skills = {'Mining'} },
	["ChanceForElementalRune"] = { text = "{V}% chance to receive random elemental runes per Runecraft", skills = {'Runecrafting'} },
	["ChanceToApplyBurn"] = { text = "{V}% Chance to apply Burn to Enemy in Combat", skills = {'Combat'} },
	["SummoningShardCost"] = { text = "{V} Shard Cost when creating Familiars in Summoning", skills = {'Summoning'}, isIncreaseNegative = true },
	["SummoningCreationCharges"] = { text = "{V} Base Quantity for Summoning Tablet Creation", skills = {'Summoning'} },
	["SummoningChargePreservation"] = { text = "{V}% Chance to preserve Summoning Charges", skills = {'Summoning'} },
	["GPOnEnemyHit"] = { text = "{V} GP Gained on successful Enemy Hit", skills = {'Combat'} },
	["AdditionalRunecraftCountRunes"] = { text = "{V} Additional Runes of the same type in Runecrafting", skills = {'Runecrafting'} },
	["ChanceAdditionalSkillResource"] = { text = "{V}% Chance to gain +1 additional resource in {SV0}. Cannot be doubled" },
	["AttackIntervalPercent"] = { text = "{V}% Attack Interval", isIncreaseNegative = true, skills = {'Combat'} },
	["summoningSynergy_0_1"] = {text = "Upon killing an Enemy, grants GP equal to {V}% of their highest base Evasion Rating.", skills = {"Combat",}},
	["summoningSynergy_0_6"] = {text = "Grants GP equal to {V}% of your MELEE damage dealt.", skills = {"Combat"}},
	["summoningSynergy_0_7"] = {text = "Grants GP equal to {V}% of your RANGED damage dealt.", skills = {"Combat"}},
	["summoningSynergy_0_8"] = {text = "Grants GP equal to {V}% of your MAGIC damage dealt.", skills = {"Combat"}},
	["summoningSynergy_0_12"] = {text = "Upon killing a Slayer Task Enemy, grants {V}% GP.", skills = {"Combat"}},
	["summoningSynergy_0_13"] = {text = "Upon being hit by an Enemy, grants GP equal to ({V} * Your Damage Reduction). This can only proc once every Enemy Attack Turn.", skills = {"Combat"}},
	["summoningSynergy_0_14"] = {text = "{VX100}% of regenerated health gained as GP", skills = {"Combat"}},
	["summoningSynergy_0_15"] = {text = "Upon killing an Enemy that is BURNING, grants {V}% GP.", skills = {"Combat"}},
	["summoningSynergy_1_2"] = {text = "When player has full HP, effects from the Occultist Familiar are tripled.", skills = {"Combat"}},
	["summoningSynergy_1_8"] = {text = "{V} Magic Defence Bonus.", skills = {"Combat"}},
	["summoningSynergy_1_12"] = {text = "If the Enemy is your current Slayer Task, {V}% Enemy Accuracy Rating.", skills = {"Combat"}, inverseSign = true},
	["summoningSynergy_1_13"] = {text = "Grants flat Melee & Ranged Defence Bonus equal to your Damage Reduction", skills = {"Combat"}},
	["summoningSynergy_1_14"] = {text = "If the Enemy has more combined Evasion Ratings than the Player, grants {V}% Hitpoint Regeneration.", skills = {"Combat"}},
	["summoningSynergy_1_15"] = {text = "If the Player is BURNING, grants {V} Melee, Ranged and Magic Defence Bonus.", skills = {"Combat"}},
	["summoningSynergy_2_12"] = {text = "Grants Slayer Coins equal to {V}% of HP leeched from Lifesteal.", skills = {"Slayer"}},
	["summoningSynergy_2_13"] = {text = "Upon attacking an Enemy, heals you for {V}% of your Damage Reduction. This can only proc once every 2 seconds.", skills = {"Combat"}},
	["summoningSynergy_2_15"] = {text = "Heals you for all damage dealt by the Wolf & Dragon Familiars.", skills = {"Combat"}},
	["summoningSynergy_3_4"] = {text = "{V}% chance per action in Woodcutting to gain a random Gem.", skills = {'Woodcutting'}},
	["summoningSynergy_3_5"] = {text = "{V}% Increased Special Item chance in Fishing. {V}% Increased chance to obtain a Bird Nests in Woodcutting.", skills = {'Fishing', 'Woodcutting'}},
	["summoningSynergy_3_9"] = {text = "{V}% chance to receive +1 Cooked Food in Cooking. Cannot be doubled.", skills = {'Cooking'}},
	["summoningSynergy_3_10"] = {text = "{V}% Runecrafting Preservation Chance when creating Staves.", skills = {'Runecrafting'}},
	["summoningSynergy_3_11"] = {text = "When successfully pickpocketing the Lumberjack in Thieving, grants {V} Bird Nest instead of GP.", skills = {'Thieving'}},
	["summoningSynergy_3_16"] = {text = "In Woodcutting, {V}% chance for a random Silver or Gold Jewelry to drop instead of a Bird Nest.", skills = {'Woodcutting'}},
	["summoningSynergy_3_17"] = {text = "{V}% chance to gain +1 Base Logs from Woodcutting, or produced Items from Smithing.", skills = {'Woodcutting', 'Smithing'}},
	["summoningSynergy_3_18"] = {text = "While the Bird Nest Potion is active in Woodcutting, grants {V} minimum Bird Nest.", skills = {'Woodcutting'}},
	["summoningSynergy_3_19"] = {text = "{V}% of Woodcutting Skill XP is earned as Firemaking Skill XP. Chance to double Logs is halved.", skills = {'Woodcutting', 'Firemaking'}},
	["summoningSynergy_4_5"] = {text = "When receiving a Gem from Mining or Fishing, there is a {V}% chance to get another random Gem.", skills = {'Fishing', 'Mining'}},
	["summoningSynergy_4_9"] = {text = "{V}% base burn chance in Cooking. Grants 100 Coal Ore when burning Food.", skills = {'Cooking'}},
	["summoningSynergy_4_10"] = {text = "Base quantity for Rune Essence in Mining is doubled.", skills = {'Mining'}},
	["summoningSynergy_4_11"] = {text = "When successfully pickpocketing the Miner in Thieving, {V}% chance to get a random Gem.", skills = {'Thieving'}},
	["summoningSynergy_4_16"] = {text = "Base quantity for Silver Ore & Gold Ore is doubled in Mining.", skills = {'Mining'}},
	["summoningSynergy_4_17"] = {text = "{V}% chance to receive a smithed verion of the Ore you are Mining.", skills = {'Mining'}},
	["summoningSynergy_4_18"] = {text = "While the Perfect Swing Potion is active in Mining, all Mining Nodes have {V} Max HP.", skills = {'Mining'}},
	["summoningSynergy_4_19"] = {text = "{V}% chance to receive a Diamond per action in Firemaking.", skills = {'Firemaking'}},
	["summoningSynergy_5_9"] = {text = "{V}% chance to receive an extra Fish as a Cooked version while Fishing.", skills = {'Fishing'}},
	["summoningSynergy_5_10"] = {text = "In Runecrafting, when creating a Combination Rune that requires Water Runes as an ingredient, produce {V} extra Combination Runes.", skills = {'Runecrafting'}},
	["summoningSynergy_5_11"] = {text = "-50% Thieving Skill Interval for Fisherman only. Also grants +2 Base Thieving Item Qty from Fisherman only.", skills = {'Thieving'}},
	["summoningSynergy_5_16"] = {text = "33% chance to gain a random Gem while creating Jewelry in Crafting.", skills = {'Crafting'}},
	["summoningSynergy_5_17"] = {text = "While creating Dragon Gear in Smithing, grants {V}% Smithing Preservation chance.", skills = {'Smithing'}},
	["summoningSynergy_5_18"] = {text = "{V}% charges when using the Fishermans Potion. Bonus is applied when new Potion is activated. Charges are used each Fishing action.", skills = {'Fishing'}},
	["summoningSynergy_6_7"] = {text = "While fighting a Ranged Enemy, grants {V} Melee Accuracy Bonus and {V} Melee Strength Bonus.", skills = {"Combat", 'Melee'}},
	["summoningSynergy_6_8"] = {text = "While fighting your current Slayer Task, grants {V}% of your Magic Max Hit as Minimum Damage.", skills = {"Combat", 'Magic'}},
	["summoningSynergy_6_12"] = {text = "While fighting your current Slayer Task, grants {V}% of your Melee Max Hit as Minimum Damage.", skills = {"Combat", 'Melee'}},
	["summoningSynergy_6_13"] = {text = "While fighting a Ranged Enemy, grants {V}% Damage Reduction.", skills = {"Combat"}},
	["summoningSynergy_6_14"] = {text = "While using a Melee Weapon, grants {V}% of your Melee Max Hit as Flat HP Regen.", skills = {"Combat", 'Melee'}},
	["summoningSynergy_6_15"] = {text = "If the Enemy is BURNING, effects from the Minotaur Familiar are tripled.", skills = {"Combat", 'Melee'}},
	["summoningSynergy_7_8"] = {text = "While fighting a Magic Enemy, grants {V} Ranged Accuracy Bonus and {V} Ranged Strength Bonus.", skills = {"Combat", 'Ranged'}},
	["summoningSynergy_7_12"] = {text = "While fighting your current Slayer Task, grants {V}% of your Ranged Max Hit as Minimum Damage.", skills = {"Combat", 'Ranged'}},
	["summoningSynergy_7_13"] = {text = "While fighting a Magic Enemy, grants {V}% Damage Reduction.", skills = {"Combat"}},
	["summoningSynergy_7_14"] = {text = "While using a Ranged Weapon, grants {V}% of your Ranged Max Hit as HP Regeneration.", skills = {"Combat", 'Ranged'}},
	["summoningSynergy_7_15"] = {text = "Your Ranged Attacks now have {V}% to inflict BURNING on the Enemy.", skills = {"Combat", 'Ranged'}},
	["summoningSynergy_8_12"] = {text = "Grants Slayer Coins equal to {V}% of your Magic Damage while on Slayer Task.", skills = {'Slayer'}},
	["summoningSynergy_8_13"] = {text = "While fighting a Melee Enemy, grants {V}% Damage Reduction.", skills = {"Combat"}},
	["summoningSynergy_8_14"] = {text = "Grants {V}% of your Max Hit as HP Regeneration if using a Magic Attack Style.", skills = {"Combat", 'Magic'}},
	["summoningSynergy_9_11"] = {text = "The Chef in Thieving now deals no damage to you.", skills = {'Thieving'}},
	["summoningSynergy_9_16"] = {text = "Crafting Recipes that require Dragonhide now use {V} quantity to create. Recipe cost cannot go below 1.", skills = {'Crafting'}, inverseSign = true},
	["summoningSynergy_9_17"] = {text = "{VMS}s Skill Interval for Cooking & Smithing.", inverseSign = true, skills = {'Cooking', 'Smithing'}},
	["summoningSynergy_9_18"] = {text = "Generous Cook Potions now provide {V}% charges. This bonus is applied when a new potion is activated.", skills = {'Cooking'}},
	["summoningSynergy_10_11"] = {text = "Successfully pickpocketting the Miner in Thieving will now grant {V} Rune Essence.", skills = {'Thieving'}},
	["summoningSynergy_10_16"] = {text = "{V}% chance to double when creating Leather, Hard Leather or Dragonhide Armour in Crafting.", skills = {'Crafting'}},
	["summoningSynergy_10_17"] = {text = "{V}% Smithing & Runecrafting Preservation Chance."},
	["summoningSynergy_10_18"] = {text = "While the Elemental Potion is active in Runecrafting, grants a chance to get random Combination Runes. The chance and quantity is equal to that of the Elemental Potion.", skills = {'Runecrafting'}},
	["summoningSynergy_10_19"] = {text = "Grants {V} Fire Runes while creating Elemental Runes.", skills = {'Runecrafting'}},
	["summoningSynergy_11_16"] = {text = "Upon receiving an item in Thieving, grants GP equal to {VX100}% of its sale price.", skills = {'Thieving'}},
	["summoningSynergy_11_17"] = {text = "Upon successfully pickpocketting an item from the Miner in Thieving, {V}% chance to receive a random Bar.", skills = {'Thieving'}},
	["summoningSynergy_11_18"] = {text = "{V}% chance to obtain a single Herb Sack while Thieving the Farmer, on top of the original item obtained.", skills = {'Thieving'}},
	["summoningSynergy_11_19"] = {text = "While Thieving any NPC, 50% chance to grant +100% GP, 35% chance to grant 4x Items, or 15% chance to receive no items or GP at all.", skills = {'Thieving'}},
	["summoningSynergy_12_13"] = {text = "While fighting your current Slayer Task, {V}% Damage Reduction.", skills = {"Combat"}},
	["summoningSynergy_12_14"] = {text = "While fighting your current Slayer Task, {V}% Hitpoints Regeneration.", skills = {"Combat"}},
	["summoningSynergy_13_14"] = {text = "{V}% Hitpoints Regeneration if you have less than 75% Current HP.", skills = {"Combat"}},
	["summoningSynergy_16_17"] = {text = "{V}% chance to preserve resources in Crafting when creating Rings or Amulets only.", skills = {'Crafting'}},
	["summoningSynergy_16_18"] = {text = "Crafting Potions now last twice as long. Bonus is applied when a new potion is activated. Charges are used per Crafting action.", skills = {'Crafting'}},
	["summoningSynergy_16_19"] = {text = "Burning Logs in Firemaking grants GP equal to {V+100}% of its base sale price.", skills = {'Firemaking'}},
	["summoningSynergy_17_18"] = {text = "While using the Seeing Gold Potion in Smithing, double Silver & Gold Bar output.", skills = {'Smithing'}},
	["summoningSynergy_17_19"] = {text = "{V} Coal required for Smithing Item production.", skills = {'Smithing'}, inverseSign = true},
	["summoningSynergy_18_19"] = {text = "While using the Controlled Heat Potions, +5% Firemaking Skill XP and Bonfire duration is doubled. Charges are used per Firemaking action.", skills = {'Firemaking'}},
	-- New 0.21 modifiers
	["AgilityObstacleCost"] = { text = "{V}% Agility Obstacle Build Costs", skills = {'Agility'}, isIncreaseNegative = true },
	["allowAttackAugmentingMagic"] = { text = "Magic Curses and Auroras can be used without a magic weapon", skills = {'Combat'} },
	["allowSignetDrops"] = { text = "Something else drops instead of Gold Topaz Ring" },
	["aprilFoolsDecreasedCarrotGang"] = { text = "{V} Carrot Gang reputation points", isIncreaseNegative = true, inverseSign = true, skills = {'Combat'} },
	["aprilFoolsDecreasedLemonGang"] = { text = "{V} Lemon Gang reputation points", isIncreaseNegative = true, inverseSign = true, skills = {'Combat'} },
	["aprilFoolsDecreasedMovementSpeed"] = { text = "{V} Movement Speed", isIncreaseNegative = true, inverseSign = true },
	["aprilFoolsDecreasedTeleportCost"] = { text = "{V}% Rune cost for Teleportation Spells", inverseSign = true },
	["aprilFoolsDecreasedUpdateDelay"] = { text = "{V} days next Major Update has been delayed", inverseSign = true },
	["aprilFoolsIncreasedCarrotGang"] = { text = "{V} Carrot Gang reputation points", skills = {'Combat'} },
	["aprilFoolsIncreasedLemonGang"] = { text = "{V} Lemon Gang reputation points", skills = {'Combat'} },
	["aprilFoolsIncreasedMovementSpeed"] = { text = "{V} Movement Speed" },
	["aprilFoolsIncreasedTeleportCost"] = { text = "{V}% Rune cost for Teleportation Spells", isIncreaseNegative = true },
	["aprilFoolsIncreasedUpdateDelay"] = { text = "{V} days next Major Update has been delayed", isIncreaseNegative = true },
	["AttackInterval"] = { text = "{VMS}s Attack Interval", isIncreaseNegative = true, skills = {'Combat'} },
	["autoBurying"] = { text = "Bones are automatically buried for {V+100}% of their prayer point value", unsigned = true, skills = {'Prayer'} },
	["autoLooting"] = { text = "Combat loot is automatically collected", skills = {'Combat'} },
	["bleedImmunity"] = { text = "{V}% chance to ignore bleed", skills = {'Combat'} },
	["BleedLifesteal"] = { text = "{V}% Bleed lifesteal", skills = {'Combat'} },
	["BonusCoalMining"] = { text = "{V} Coal Ore per Ore Mined. (Item doubling does not apply)", skills = {'Mining'} },
	["bonusCoalOnDungeonCompletion"] = { text = "1% chance to receive {V} Coal when completing a dungeon", skills = {'Combat'} },
	["burnImmunity"] = { text = "{V}% chance to ignore burn", skills = {'Combat'} },
	["BurnLifesteal"] = { text = "{V}% Burn lifesteal", skills = {'Combat'} },
	["bypassSlayerItems"] = { text = "Bypass Slayer Area item requirements", skills = {'Slayer'} },
	["ChanceToConvertSeedDrops"] = { text = "{V}% chance to convert combat seed drops to herbs", skills = {'Combat'} },
	["CompostPreservationChance"] = { text = "{V}% Chance to preserve Compost or Weird Gloop applied to Farming Plots when harvesting", skills = {'Farming'} },
	["Confusion"] = { text = "Take {V}% of remaining HP as damage on a succesful attack", isIncreaseNegative = true, skills = {'Combat'} },
	["curseImmunity"] = { text = "Immune to curses", skills = {'Combat'} },
	["DamageReductionPercent"] = { text = "{V}% increased damage reduction", skills = {'Combat'} },
	["DamageTaken"] = { text = "Take {V}% more Damage from attacks", isIncreaseNegative = true, skills = {'Combat'} },
	["debuffImmunity"] = { text = "Immune to debuffs", skills = {'Combat'} },
	["Decay"] = { text = "Take {V}% of Max HP as damage on a succesful attack", isIncreaseNegative = true, skills = {'Combat'} },
	["doubleItemsSkill"] = { text = "x{VMUL} Items received from {SV0}", unsigned = true },
	["doubleOresMining"] = { text = "x{VMUL} Ores received from Mining", unsigned = true, skills = {'Mining'} },
	["DragonBreathDamage"] = { text = "{V}% damage taken from dragonbreath", isIncreaseNegative = true, skills = {'Combat'} },
	["FiremakingCoalChance"] = { text = "{V}% chance to receive coal when burning logs in Firemaking", skills = {'Firemaking'} },
	["FlatMaxHitpoints"] = { text = "{VX} Maximum Hitpoints", skills = {'Hitpoints'} },
	["FlatMinHit"] = { text = "{VX} Minimum Hit", skills = {'Combat'} },
	["FlatReflectDamage"] = { text = "{VX} Reflect Damage", skills = {'Combat'} },
	["freeCompost"] = { text = "Composting crops in Farming is free", skills = {'Farming'} },
	["GlobalEvasion"] = { text = "{V}% increased Evasion Ratings", skills = {'Combat'} },
	["golbinRaidIncreasedMaximumAmmo"] = { text = "{V}% Maximum Ammo in Golbin Raid", skills = {'Combat'} },
	["golbinRaidIncreasedMaximumRunes"] = { text = "{V}% Maximum Runes in Golbin Raid", skills = {'Combat'} },
	["golbinRaidIncreasedMinimumFood"] = { text = "{V} Minimum Food in Golbin Raid", skills = {'Combat'} },
	["golbinRaidIncreasedPrayerLevel"] = { text = "{V} Prayer Levels in Golbin Raid", skills = {'Prayer'} },
	["golbinRaidIncreasedPrayerPointsStart"] = { text = "{V} Starting Prayer Points in Golbin Raid", skills = {'Prayer'} },
	["golbinRaidIncreasedPrayerPointsWave"] = { text = "{V} Prayer Points per Wave in Golbin Raid", skills = {'Prayer'} },
	["golbinRaidPassiveSlotUnlocked"] = { text = "Unlocked Passive Slot in Golbin Raid", skills = {'Combat'} },
	["golbinRaidPrayerUnlocked"] = { text = "Unlocked Prayer in Golbin Raid", skills = {'Prayer'} },
	["golbinRaidWaveSkipCostReduction"] = { text = "{V}% Golbin Raid wave Skip Cost", inverseSign = true, skills = {'Combat'} },
	["GPMultiplierCap"] = { text = "{VD}% maximum gp per damage dealt", skills = {'Combat'} },
	["GPMultiplierMin"] = { text = "{VD}% minimum gp per damage dealt", skills = {'Combat'} },
	["GPMultiplierPer1MGP"] = { text = "{VD}% GP per damage dealt for every 1M GP owned", skills = {'Combat'} },
	["itemProtection"] = { text = "Items are not lost on death", skills = {'Combat'} },
	["MagicCritChance"] = { text = "{V}% Magic critical hit chance", skills = {'Magic'} },
	["MagicLifesteal"] = { text = "{V}% Magic lifesteal", skills = {'Magic'} },
	["MagicMaxHit"] = { text = "{V}% Magic Max Hit", skills = {'Magic'} },
	["magicProtection"] = { text = "You have a set {V}% chance to dodge Magic attacks", skills = {'Magic'} },
	["MasteryPoolProgress"] = { text = "{V}% to effective Mastery Pool progress" },
	["MaxAirSpellDmg"] = { text = "{VX} Max Air Spell Dmg", skills = {'Magic'} },
	["MaxEarthSpellDmg"] = { text = "{VX} Max Earth Spell Dmg", skills = {'Magic'} },
	["MaxFireSpellDmg"] = { text = "{VX} Max Fire Spell Dmg", skills = {'Magic'} },
	["MaxWaterSpellDmg"] = { text = "{VX} Max Water Spell Dmg", skills = {'Magic'} },
	["MeleeCritChance"] = { text = "{V}% Melee critical hit chance", skills = {'Combat'} },
	["MeleeLifesteal"] = { text = "{V}% Melee Lifesteal", skills = {'Combat'} },
	["MeleeMaxHit"] = { text = "{V}% Melee Max Hit", skills = {'Combat'} },
	["meleeProtection"] = { text = "You have a set {V}% chance to dodge Melee attacks", skills = {'Combat'} },
	["MeleeStunThreshold"] = { text = "Melee attacks stun the target when they deal {V}% of max hit", skills = {'Combat'} },
	["MiningGemChance"] = { text = "{V}% Chance to receive gems from Mining (Does not work for Rune Essence)", skills = {'Combat'} },
	["OffItemChance"] = { text = "{V}% increased chance to receive an off-item (An item from a skill that is not the main resource you are gathering)" },
	["poisonImmunity"] = { text = "{V}% chance to ignore poison", skills = {'Combat'} },
	["PoisonLifesteal"] = { text = "{V}% Poison lifesteal", skills = {'Combat'} },
	["PrayerCost"] = { text = "{V}% Prayer Point Cost for Prayers", isIncreaseNegative = true, skills = {'Prayer'} },
	["RangedCritChance"] = { text = "{V}% Ranged critical hit chance", skills = {'Ranged'} },
	["RangedLifesteal"] = { text = "{V}% Ranged Lifesteal", skills = {'Ranged'} },
	["RangedMaxHit"] = { text = "{V}% Ranged Max Hit", skills = {'Ranged'} },
	["rangedProtection"] = { text = "You have a set {V}% chance to dodge Ranged attacks", skills = {'Ranged'} },
	["RebirthChance"] = { text = "{V}% chance to respawn with full hitpoints upon reaching 0 hitpoints", skills = {'Combat'} },
	["RedemptionPercent"] = { text = "{V}% of max hitpoints healed on redemption", skills = {'Combat'} },
	["RedemptionThreshold"] = { text = "{V}% redemption threshold", skills = {'Combat'} },
	["RolledReflectDamage"] = { text = "{S}0-{VX} Reflect Damage", unsigned = true, skills = {'Combat'} },
	["RuneProvision"] = { text = "Rune providing items provide {VMUL}x as many runes", unsigned = true, skills = {'Combat'} },
	["SecondaryFoodBurnChance"] = { text = "{V}% Secondary Chance to burn food when Cooking", isIncreaseNegative = true, skills = {'Cooking'} },
	["sleepImmunity"] = { text = "Immune to Sleep", skills = {'Combat'} },
	["SmithingCoalCost"] = { text = "{V}% Coal Costs for Smithing", skills = {'Smithing'}, isIncreaseNegative = true },
	["stunImmunity"] = { text = "{V}% chance to ignore Stuns and Freezes", skills = {'Combat'} },
	["summoningSynergy_9_19"] = { text = "" },
	-- 0.22 Modifiers
	["AllotmentSeedCost"] = { text = "{V} seed cost to plant Allotments in Farming", isIncreaseNegative = true, skills = {'Farming'} },
	["AltMagicRunePreservation"] = { text = "{V}% Rune Preservation for Alt. Magic Spells", skills = {'Magic'} },
	["autoEquipFoodUnlocked"] = { text = "Auto Equip Food Unlocked", skills = {'Combat', 'Cooking'} },
	["autoSwapFoodUnlocked"] = { text = "Auto Swap Food Unlocked", skills = {'Combat'} },
	["ChancePerfectCookFire"] = { text = "{V}% Perfect Cook chance for items cooked on Cooking Fire", skills = {'Cooking'} },
	["ChancePerfectCookFurnace"] = { text = "{V}% Perfect Cook chance for items cooked in Furnace", skills = {'Cooking'} },
	["ChancePerfectCookGlobal"] = { text = "{V}% Global Perfect Cook chance.", skills = {'Cooking'} },
	["ChancePerfectCookPot"] = { text = "{V}% Perfect Cook chance for items cooked in Pot", skills = {'Cooking'} },
	["ChanceSuccessfulCook"] = { text = "{V}% chance to successfully Cook an item.", skills = {'Cooking'} },
	["FishingSpecialChance"] = { text = "{V}% chance to receive Special Items from Fishing", skills = {'Fishing'} },
	["Frostburn"] = { text = "{V}% of Current HP taken as damage per Attack", isIncreaseNegative = true, skills = {'Combat'} },
	["masteryToken"] = { text = "Grants Mastery Pool XP equal to {V}% of the maximum Mastery Pool XP for the respective skill",
							 skills = {'Woodcutting', 'Fishing', 'Firemaking', 'Cooking', 'Mining', 'Smithing', 'Thieving', 'Farming',
							 					 'Fletching', 'Crafting', 'Runecrafting', 'Herblore', 'Agility', 'Summoning', 'Astrology'} },
	["MinThievingGP"] = { text = "{V}% minimum GP from Thieving", skills = {'Thieving'} },
	["RunecraftingEssencePreservation"] = { text = "{V}% chance to preserve resources when Runecrafting runes", skills = {'Runecrafting'} },
	["SummoningMaxHit"] = { text = "{V}% Summoning Max Hit", skills = {'Combat'} },
	["ThievingStealth"] = { text = "{V} Stealth while Thieving", skills = {'Thieving'} },
	-- 1.0 Modifiers
	["AfflictionChance"] = { text = "{V}% chance to apply affliction when attacking", skills = {'Combat'} },
	["allowLootContainerStacking"] = { text = "Items other than bones stack within the loot container", skills = {'Combat'} },
	["BaseStardustDropQty"] = { text = "{V} to base drop quantity of Stardust and Golden Stardust from Astrology", skills = {'Astrology'} },
	["BleedReflectChance"] = { text = "{V}% chance to inflict a bleed that does 100% of the attack's damage to attackers when hit", skills = {'Combat'} },
	["ChanceForDiamondFiremaking"] = { text = "{V}% chance to receive a Diamond per action in Firemaking (Cannot be doubled)", skills = {'Firemaking'} },
	["ChanceToApplyFrostburn"] = { text = "{V}% chance to apply Frostburn when attacking", skills = {'Combat'} },
	["ChanceToApplyPoison"] = { text = "{V}% chance to apply Poison when hitting with an attack", skills = {'Combat'} },
	["ChanceToIncreaseStunDuration"] = { text = "{V}% chance to increase the length of stuns inflicted by 1 turn", skills = {'Combat'} },
	["ChanceToPreserveFood"] = { text = "{V}% chance to Preserve Food when eaten", skills = {'Combat'} },
	["ElementalEffectChance"] = { text = "{V}% chance to apply Burn, Frostburn or Freeze when hitting with a Magic attack (once per turn)", skills = {'Combat'} },
	["EndOfTurnHealing2"] = { text = "{V}% of current hitpoints every 2 turns", skills = {'Combat'} },
	["EndOfTurnHealing3"] = { text = "{V}% of current hitpoints every 3 turns", skills = {'Combat'} },
	["EndOfTurnHealing5"] = { text = "{V}% of current hitpoints every 5 turns", skills = {'Combat'} },
	["freeProtectItem"] = { text = "The Protect Item Prayer costs nothing", skills = {'Prayer'} },
	["frostBurnImmunity"] = { text = "{V}% chance to ignore Frostburn", skills = {'Combat'} },
	["globalEvasionHPScaling"] = { text = "Evasion Ratings are multiplied by {V} times current Hitpoints percent", skills = {'Combat'} },
	["GPFromFiremaking"] = { text = "{V}% GP from Firemaking.", skills = {'Firemaking'} },
	["infiniteLootContainer"] = { text = "The loot container has an infinite amount of slots", skills = {'Combat'} },
	["magicImmunity"] = { text = "Immune to Magic attacks", skills = {'Combat'} },
	["meleeImmunity"] = { text = "Immune to Melee attacks", skills = {'Combat'} },
	["MeleeStunChance"] = { text = "{V}% chance to stun when hitting with a Melee attack (once per turn)", skills = {'Combat'} },
	["MinNatureSpellDamageBasedOnMaxHit"] = { text = "{V}% of Maximum Hit added to Minimum Hit when using Nature spells", skills = {'Combat'} },
	["NonMagicPoisonChance"] = { text = "{V}% chance to apply poison when hitting with a Melee or Ranged attack", skills = {'Combat'} },
	["OnHitSlowMagnitude"] = { text = "Inflict a slow that increases the target's attack interval by {V}% when hitting with an attack", skills = {'Combat'} },
	["otherStyleImmunity"] = { text = "Immune to all attack types other than their own", skills = {'Combat'} },
	["PoisonReflectChance"] = { text = "{V}% chance to poison attackers when hit", skills = {'Combat'} },
	["rangedImmunity"] = { text = "Immune to Ranged attacks", skills = {'Combat'} },
	["RegenerationInterval"] = { text = "{VMS}s Hitpoint Regeneration interval", isIncreaseNegative = true, skills = {'Combat'} },
	["slowImmunity"] = { text = "{V}% chance to ignore Slow effects", skills = {'Combat'} },
	["SurgeSpellAccuracy"] = { text = "{V}% Accuracy Rating when using Surge spells", skills = {'Combat'} },
	["SurgeSpellMaxHit"] = { text = "{V}% Max Hit when using Surge spells", skills = {'Combat'} },
	["TotalBleedDamage"] = { text = "{VX} total damage to bleeds inflicted", skills = {'Combat'} },
	-- The below are not present in 1.0 but are left here for now until everything is fully-migrated to 1.0
	["CombatStoppingThreshold"] = { text = "{V}% automatic combat stopping threshold", skills = {'Combat'} },
	["MagicCritMult"] = { text = "{V}% Magic critical hit multiplier", skills = {'Magic'} },
	["MeleeCritMult"] = { text = "{V}% Melee critical hit multiplier", skills = {'Combat'} },
	["RangedCritMult"] = { text = "{V}% Ranged critical hit multiplier", skills = {'Ranged'} },
	-- New 1.1 modifiers, TODO add actual descriptions and the sort
	["15SlowStunChance2Turns"] = { text = "TODO 15SlowStunChance2Turns", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["30Slow5TurnsChance"] = { text = "TODO 30Slow5TurnsChance", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["5DROnBeingHit"] = { text = "TODO 5DROnBeingHit", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["AbsorbingSkin"] = { text = "TODO AbsorbingSkin", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["AdditionalAshInFiremaking"] = { text = "TODO AdditionalAshInFiremaking", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["AgilityPillarCost"] = { text = "TODO AgilityPillarCost", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["allowNonMagicCurses"] = { text = "TODO allowNonMagicCurses", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["applyDespairCurseOnSpawn"] = { text = "TODO applyDespairCurseOnSpawn", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["applyMadnessCurseOnSpawn"] = { text = "TODO applyMadnessCurseOnSpawn", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["applyRandomCurseOnSpawn"] = { text = "TODO applyRandomCurseOnSpawn", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["applyTormentCurseOnSpawn"] = { text = "TODO applyTormentCurseOnSpawn", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["Assassin"] = { text = "TODO Assassin", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["bigRon"] = { text = "TODO bigRon", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["BleedDOTDamage"] = { text = "TODO BleedDOTDamage", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["BoltProduction"] = { text = "TODO BoltProduction", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["BonusFishingSpecialChance"] = { text = "TODO BonusFishingSpecialChance", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["BurnDOTDamage"] = { text = "TODO BurnDOTDamage", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["bypassAllSlayerItems"] = { text = "TODO bypassAllSlayerItems", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["ChanceAdditionalBarSmithing"] = { text = "TODO ChanceAdditionalBarSmithing", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["ChanceAdditionalPerfectItem"] = { text = "TODO ChanceAdditionalPerfectItem", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["ChanceDarkBlade"] = { text = "TODO ChanceDarkBlade", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["ChanceDoubleSlayerTaskKill"] = { text = "TODO ChanceDoubleSlayerTaskKill", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["ChanceExtraArrows"] = { text = "TODO ChanceExtraArrows", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["ChanceExtraCrossbows"] = { text = "TODO ChanceExtraCrossbows", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["ChanceExtraJavelins"] = { text = "TODO ChanceExtraJavelins", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["ChanceExtraMeteoriteOre"] = { text = "TODO ChanceExtraMeteoriteOre", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["ChanceExtraUnstrungBows"] = { text = "TODO ChanceExtraUnstrungBows", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["ChanceForArrowShaftsWoodcutting"] = { text = "TODO ChanceForArrowShaftsWoodcutting", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["ChanceForAshInFiremaking"] = { text = "TODO ChanceForAshInFiremaking", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["ChanceForAshInWoodcutting"] = { text = "TODO ChanceForAshInWoodcutting", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["ChanceForCharcoalInFiremaking"] = { text = "TODO ChanceForCharcoalInFiremaking", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["ChanceForOneExtraFish"] = { text = "TODO ChanceForOneExtraFish", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["ChanceForOneExtraOre"] = { text = "TODO ChanceForOneExtraOre", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["ChanceForQualitySuperiorGem"] = { text = "TODO ChanceForQualitySuperiorGem", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["ChanceForStardustInFiremaking"] = { text = "TODO ChanceForStardustInFiremaking", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["ChanceGoldenStardust"] = { text = "TODO ChanceGoldenStardust", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["ChanceItemToGoldFletching"] = { text = "TODO ChanceItemToGoldFletching", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["ChanceStardust"] = { text = "TODO ChanceStardust", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["ChanceStardustCuttingMagicLogs"] = { text = "TODO ChanceStardustCuttingMagicLogs", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["ChanceToApplyBurnWithRanged"] = { text = "TODO ChanceToApplyBurnWithRanged", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["ChanceToApplyDeadlyPoison"] = { text = "TODO ChanceToApplyDeadlyPoison", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["ChanceToApplyDeadlyPoisonWhenPoisoned"] = { text = "TODO ChanceToApplyDeadlyPoisonWhenPoisoned", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["ChanceToApplyDecayCurse"] = { text = "TODO ChanceToApplyDecayCurse", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["ChanceToApplyShock"] = { text = "TODO ChanceToApplyShock", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["ChanceToApplySleepToTargetWhenHit"] = { text = "TODO ChanceToApplySleepToTargetWhenHit", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["ChanceToAvoidCurses"] = { text = "TODO ChanceToAvoidCurses", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["ChanceToAvoidSleep"] = { text = "TODO ChanceToAvoidSleep", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["ChanceToAvoidStun"] = { text = "TODO ChanceToAvoidStun", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["ChanceToAvoidThievingStuns"] = { text = "TODO ChanceToAvoidThievingStuns", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["ChanceToDoubleLeatherDragonhideCrafting"] = { text = "TODO ChanceToDoubleLeatherDragonhideCrafting", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["ChanceToFindLostChest"] = { text = "TODO ChanceToFindLostChest", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["ChanceToFindMeteorite"] = { text = "TODO ChanceToFindMeteorite", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["ChanceToFindMushroomWoodcutting"] = { text = "TODO ChanceToFindMushroomWoodcutting", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["ChanceToIncreaseSleepDuration"] = { text = "TODO ChanceToIncreaseSleepDuration", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["ChanceToPreserveConsumable"] = { text = "TODO ChanceToPreserveConsumable", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["coalGainedOnCookingFailure"] = { text = "TODO coalGainedOnCookingFailure", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["CookingSuccessCap"] = { text = "TODO CookingSuccessCap", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["CraftingJewelryPreservation"] = { text = "TODO CraftingJewelryPreservation", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["CraftingJewelryRandomGemChance"] = { text = "TODO CraftingJewelryRandomGemChance", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["CraftingPotionCharges"] = { text = "TODO CraftingPotionCharges", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["CurseLifesteal"] = { text = "TODO CurseLifesteal", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["CyclopsCreationCharges"] = { text = "TODO CyclopsCreationCharges", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["DamageDealtIfPoisoned"] = { text = "TODO DamageDealtIfPoisoned", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["DamageReductionAgainstBosses"] = { text = "TODO DamageReductionAgainstBosses", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["DamageReductionAgainstMagic"] = { text = "TODO DamageReductionAgainstMagic", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["DamageReductionAgainstMelee"] = { text = "TODO DamageReductionAgainstMelee", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["DamageReductionAgainstRanged"] = { text = "TODO DamageReductionAgainstRanged", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["DamageReductionAgainstSlayerTasks"] = { text = "TODO DamageReductionAgainstSlayerTasks", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["DamageReductionWithMagic2HWeapon"] = { text = "TODO DamageReductionWithMagic2HWeapon", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["DamageTakenAddedAsPrayerPoints"] = { text = "TODO DamageTakenAddedAsPrayerPoints", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["DamageTakenPerAttack"] = { text = "TODO DamageTakenPerAttack", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["DamageTakenWhenAsleep"] = { text = "TODO DamageTakenWhenAsleep", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["DamageTakenWhenStunned"] = { text = "TODO DamageTakenWhenStunned", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["DeadlyPoisonDOTDamage"] = { text = "TODO DeadlyPoisonDOTDamage", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["DeadlyToxinsFromHerblore"] = { text = "TODO DeadlyToxinsFromHerblore", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["decreaseEnemyEvasionOnSleep"] = { text = "TODO decreaseEnemyEvasionOnSleep", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["decreaseEnemyEvasionOnStun"] = { text = "TODO decreaseEnemyEvasionOnStun", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["disableGoldenStardustDrops"] = { text = "TODO disableGoldenStardustDrops", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["disableHPRegeneration"] = { text = "TODO disableHPRegeneration", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["disableLifesteal"] = { text = "TODO disableLifesteal", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["disableSalamanderItemReduction"] = { text = "TODO disableSalamanderItemReduction", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["doubleBoneDrops"] = { text = "TODO doubleBoneDrops", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["doubleLifesteal"] = { text = "TODO doubleLifesteal", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["doubleLogProduction"] = { text = "TODO doubleLogProduction", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["doubleRuneEssenceMining"] = { text = "TODO doubleRuneEssenceMining", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["doubleSilverGoldMining"] = { text = "TODO doubleSilverGoldMining", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["doubleSilverGoldSmithingWithSeeingGold"] = { text = "TODO doubleSilverGoldSmithingWithSeeingGold", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["Duality"] = { text = "TODO Duality", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["EndOfTurnEvasion2"] = { text = "TODO EndOfTurnEvasion2", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["EndOfTurnMaxHealing2"] = { text = "TODO EndOfTurnMaxHealing2", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["EnemyDamageReduction"] = { text = "TODO EnemyDamageReduction", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["EvasionAgainstMagic"] = { text = "TODO EvasionAgainstMagic", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["EvasionAgainstMelee"] = { text = "TODO EvasionAgainstMelee", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["EvasionAgainstRanged"] = { text = "TODO EvasionAgainstRanged", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["EvasionBasedOnDR"] = { text = "TODO EvasionBasedOnDR", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["FiremakingLogGP"] = { text = "TODO FiremakingLogGP", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["FireRunesWhenMakingElementalRunes"] = { text = "TODO FireRunesWhenMakingElementalRunes", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["FishermansPotionCharges"] = { text = "TODO FishermansPotionCharges", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["FishingCookedChance"] = { text = "TODO FishingCookedChance", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["FlatBlockAttackBonus"] = { text = "TODO FlatBlockAttackBonus", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["FlatCraftingDragonhideCost"] = { text = "TODO FlatCraftingDragonhideCost", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["FlatFarmingYield"] = { text = "TODO FlatFarmingYield", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["FlatHPRegenBasedOnMagicMaxHit"] = { text = "TODO FlatHPRegenBasedOnMagicMaxHit", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["FlatHPRegenBasedOnMeleeMaxHit"] = { text = "TODO FlatHPRegenBasedOnMeleeMaxHit", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["FlatHPRegenBasedOnRangedMaxHit"] = { text = "TODO FlatHPRegenBasedOnRangedMaxHit", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["FlatMagicAccuracyBonusPerAttackInterval"] = { text = "TODO FlatMagicAccuracyBonusPerAttackInterval", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["FlatMagicAttackBonus"] = { text = "TODO FlatMagicAttackBonus", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["FlatMagicDefenceBonus"] = { text = "TODO FlatMagicDefenceBonus", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["FlatMeleeAccuracyBonusPerAttackInterval"] = { text = "TODO FlatMeleeAccuracyBonusPerAttackInterval", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["FlatMeleeDefenceBonus"] = { text = "TODO FlatMeleeDefenceBonus", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["FlatMeleeStrengthBonus"] = { text = "TODO FlatMeleeStrengthBonus", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["FlatMeleeStrengthBonusPerAttackInterval"] = { text = "TODO FlatMeleeStrengthBonusPerAttackInterval", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["FlatRangedAccuracyBonusPerAttackInterval"] = { text = "TODO FlatRangedAccuracyBonusPerAttackInterval", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["FlatRangedAttackBonus"] = { text = "TODO FlatRangedAttackBonus", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["FlatRangedDefenceBonus"] = { text = "TODO FlatRangedDefenceBonus", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["FlatRangedStrengthBonus"] = { text = "TODO FlatRangedStrengthBonus", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["FlatRangedStrengthBonusPerAttackInterval"] = { text = "TODO FlatRangedStrengthBonusPerAttackInterval", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["FlatSlashAttackBonus"] = { text = "TODO FlatSlashAttackBonus", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["FlatSmithingCoalCost"] = { text = "TODO FlatSmithingCoalCost", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["FlatStabAttackBonus"] = { text = "TODO FlatStabAttackBonus", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["FletchingBoltQuantity"] = { text = "TODO FletchingBoltQuantity", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["FletchingIntervalWithArrows"] = { text = "TODO FletchingIntervalWithArrows", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["freezeImmunity"] = { text = "TODO freezeImmunity", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["gainSlayerCoinsBasedOnEnemyCombatLevelMagic"] = { text = "TODO gainSlayerCoinsBasedOnEnemyCombatLevelMagic", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["gainSlayerCoinsBasedOnEnemyCombatLevelMelee"] = { text = "TODO gainSlayerCoinsBasedOnEnemyCombatLevelMelee", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["gainSlayerCoinsBasedOnEnemyCombatLevelRanged"] = { text = "TODO gainSlayerCoinsBasedOnEnemyCombatLevelRanged", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["GemVeinChance"] = { text = "TODO GemVeinChance", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["GenerousCookPotionCharges"] = { text = "TODO GenerousCookPotionCharges", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["giveRandomComboRunesRunecrafting"] = { text = "TODO giveRandomComboRunesRunecrafting", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["globalAccuracyHPScaling"] = { text = "TODO globalAccuracyHPScaling", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["GlobalSkillIntervalPercent"] = { text = "TODO GlobalSkillIntervalPercent", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["GlobalSleepChance"] = { text = "TODO GlobalSleepChance", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["GlobalStunChance"] = { text = "TODO GlobalStunChance", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["GPBasedOnEnemyCombatLevel"] = { text = "TODO GPBasedOnEnemyCombatLevel", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["GPBasedOnSummonDamage"] = { text = "TODO GPBasedOnSummonDamage", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["GPFromAgilityPerActiveObstacle"] = { text = "TODO GPFromAgilityPerActiveObstacle", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["GPFromBurningMonsters"] = { text = "TODO GPFromBurningMonsters", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["GPFromItemAlchemy"] = { text = "TODO GPFromItemAlchemy", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["GPFromMonstersFlatBasedOnEvasion"] = { text = "TODO GPFromMonstersFlatBasedOnEvasion", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["GPFromNegativeObstacles"] = { text = "TODO GPFromNegativeObstacles", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["GPFromSlayerTaskMonsters"] = { text = "TODO GPFromSlayerTaskMonsters", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["GPOnRegenBasedOnHPGain"] = { text = "TODO GPOnRegenBasedOnHPGain", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["GPPerDamage"] = { text = "TODO GPPerDamage", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["GPPerMagicDamage"] = { text = "TODO GPPerMagicDamage", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["GPPerMeleeDamage"] = { text = "TODO GPPerMeleeDamage", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["GPPerRangedDamage"] = { text = "TODO GPPerRangedDamage", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["GPWhenHitBasedOnDR"] = { text = "TODO GPWhenHitBasedOnDR", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["growingMadnessPassive"] = { text = "TODO growingMadnessPassive", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["halveDamageReduction"] = { text = "TODO halveDamageReduction", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["halvedWoodcuttingDoubleChance"] = { text = "TODO halvedWoodcuttingDoubleChance", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["HealingOnAttackBasedOnDR"] = { text = "TODO HealingOnAttackBasedOnDR", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["healOnHitBasedOnTargetDR"] = { text = "TODO healOnHitBasedOnTargetDR", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["HealWhenSleep"] = { text = "TODO HealWhenSleep", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["HealWhenStunned"] = { text = "TODO HealWhenStunned", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["HerbSackChanceThievingFarmer"] = { text = "TODO HerbSackChanceThievingFarmer", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["HitpointRegenerationAgainstSlayerTasks"] = { text = "TODO HitpointRegenerationAgainstSlayerTasks", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["HPRegenWhenEnemyHasMoreEvasion"] = { text = "TODO HPRegenWhenEnemyHasMoreEvasion", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["InfernalSpellAccuracy"] = { text = "TODO InfernalSpellAccuracy", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["JavelinProduction"] = { text = "TODO JavelinProduction", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["JavelinResourceCost"] = { text = "TODO JavelinResourceCost", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["LeprechaunCreationCharges"] = { text = "TODO LeprechaunCreationCharges", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["Leviathan"] = { text = "TODO Leviathan", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["LifestealBasedOnHPRegenEffectiveness"] = { text = "TODO LifestealBasedOnHPRegenEffectiveness", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["LightningSpellAccuracy"] = { text = "TODO LightningSpellAccuracy", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["MagicMaxHitBonusAgainstMelee"] = { text = "TODO MagicMaxHitBonusAgainstMelee", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["MagicMaxHitFlat"] = { text = "TODO MagicMaxHitFlat", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["MagicMinHitBasedOnMaxHitSlayerTask"] = { text = "TODO MagicMinHitBasedOnMaxHitSlayerTask", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["MasteryPoolCap"] = { text = "TODO MasteryPoolCap", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["MasteryXPFromNegativeObstacles"] = { text = "TODO MasteryXPFromNegativeObstacles", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["MaxHitPercentBasedOnDamageReduction"] = { text = "TODO MaxHitPercentBasedOnDamageReduction", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["MaxHitPercentBasedOnEnemyDamageReduction"] = { text = "TODO MaxHitPercentBasedOnEnemyDamageReduction", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["MaxHPBurnDamage"] = { text = "TODO MaxHPBurnDamage", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["MeleeMaxHitBasedOnMaxHitSlayerTask"] = { text = "TODO MeleeMaxHitBasedOnMaxHitSlayerTask", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["MeleeMaxHitBonusAgainstRanged"] = { text = "TODO MeleeMaxHitBonusAgainstRanged", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["MeleeMaxHitFlat"] = { text = "TODO MeleeMaxHitFlat", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["MeleeRangedDefenceBonusBasedOnDR"] = { text = "TODO MeleeRangedDefenceBonusBasedOnDR", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["MeteoriteOre"] = { text = "TODO MeteoriteOre", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["MinBirdNestQuantity"] = { text = "TODO MinBirdNestQuantity", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["MinimumBirdNestsWhenPotionActive"] = { text = "TODO MinimumBirdNestsWhenPotionActive", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["MinInfernalArchaicDmg"] = { text = "TODO MinInfernalArchaicDmg", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["MiningBarChance"] = { text = "TODO MiningBarChance", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["MiningNodeHPWithPerfectSwing"] = { text = "TODO MiningNodeHPWithPerfectSwing", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["MinLightningArchaicDmg"] = { text = "TODO MinLightningArchaicDmg", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["MinMeteorShowerSpellDamage"] = { text = "TODO MinMeteorShowerSpellDamage", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["MinPoisonArchaicDmg"] = { text = "TODO MinPoisonArchaicDmg", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["momentInTimePassive"] = { text = "TODO momentInTimePassive", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["NonCombatSkillXP"] = { text = "TODO NonCombatSkillXP", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["NonShardCostForEquippedTablets"] = { text = "TODO NonShardCostForEquippedTablets", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["PassiveCookInterval"] = { text = "TODO PassiveCookInterval", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["PlayerDamageReduction"] = { text = "TODO PlayerDamageReduction", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["PlayerRage"] = { text = "TODO PlayerRage", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["PoisonDOTDamage"] = { text = "TODO PoisonDOTDamage", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["PoisonSpellAccuracy"] = { text = "TODO PoisonSpellAccuracy", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["PrayerPointsWhenHit"] = { text = "TODO PrayerPointsWhenHit", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["Rage"] = { text = "TODO Rage", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["RandomBarChanceThievingMiner"] = { text = "TODO RandomBarChanceThievingMiner", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["RangedMaxHitBasedOnMaxHitSlayerTask"] = { text = "TODO RangedMaxHitBasedOnMaxHitSlayerTask", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["RangedMaxHitBonusAgainstMagic"] = { text = "TODO RangedMaxHitBonusAgainstMagic", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["RangedMaxHitFlat"] = { text = "TODO RangedMaxHitFlat", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["reducedTargetDamageRedcutionIfBleeding"] = { text = "TODO reducedTargetDamageRedcutionIfBleeding", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["reignOverTimePassive"] = { text = "TODO reignOverTimePassive", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["RunecraftingStavePreservation"] = { text = "TODO RunecraftingStavePreservation", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["RunecraftingWaterComboRunes"] = { text = "TODO RunecraftingWaterComboRunes", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["RuneEssenceThievingMiner"] = { text = "TODO RuneEssenceThievingMiner", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["SalamanderCreationCharges"] = { text = "TODO SalamanderCreationCharges", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["SCfromLifesteal"] = { text = "TODO SCfromLifesteal", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["shadowCloak"] = { text = "TODO shadowCloak", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["SkillMasteryXPPerAmeria"] = { text = "TODO SkillMasteryXPPerAmeria", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["SkillMasteryXPPerArachi"] = { text = "TODO SkillMasteryXPPerArachi", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["SkillMasteryXPPerDeedree"] = { text = "TODO SkillMasteryXPPerDeedree", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["SkillMasteryXPPerHyden"] = { text = "TODO SkillMasteryXPPerHyden", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["SkillMasteryXPPerIridan"] = { text = "TODO SkillMasteryXPPerIridan", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["SkillMasteryXPPerKo"] = { text = "TODO SkillMasteryXPPerKo", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["SkillMasteryXPPerQimican"] = { text = "TODO SkillMasteryXPPerQimican", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["SkillMasteryXPPerSyllia"] = { text = "TODO SkillMasteryXPPerSyllia", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["SkillMasteryXPPerVale"] = { text = "TODO SkillMasteryXPPerVale", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["SkillPreservationCap"] = { text = "TODO SkillPreservationCap", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["SlayerCoinsBasedOnTargetDR"] = { text = "TODO SlayerCoinsBasedOnTargetDR", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["SlayerCoinsPerDamage"] = { text = "TODO SlayerCoinsPerDamage", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["SlayerCoinsPerMagicDamageSlayerTask"] = { text = "TODO SlayerCoinsPerMagicDamageSlayerTask", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["SlayerCoinsPerPoisonDamage"] = { text = "TODO SlayerCoinsPerPoisonDamage", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["SlayerTaskMonsterAccuracy"] = { text = "TODO SlayerTaskMonsterAccuracy", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["SmithingDragonGearPreservation"] = { text = "TODO SmithingDragonGearPreservation", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["SummoningAttackLifesteal"] = { text = "TODO SummoningAttackLifesteal", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["SummoningCreationChargesForEquippedTablets"] = { text = "TODO SummoningCreationChargesForEquippedTablets", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["SummoningIntervalForOctopus"] = { text = "TODO SummoningIntervalForOctopus", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["SummoningIntervalPercentForEquippedTablets"] = { text = "TODO SummoningIntervalPercentForEquippedTablets", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["summoningSynergy_Bear_Devil"] = { text = "TODO summoningSynergy_Bear_Devil", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["summoningSynergy_Devil_Eagle"] = { text = "TODO summoningSynergy_Devil_Eagle", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["summoningSynergy_Ent_Leprechaun"] = { text = "TODO summoningSynergy_Ent_Leprechaun", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["summoningSynergy_Leprechaun_Devil"] = { text = "TODO summoningSynergy_Leprechaun_Devil", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["summoningSynergy_Mole_Leprechaun"] = { text = "TODO summoningSynergy_Mole_Leprechaun", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["summoningSynergy_Octopus_Leprechaun"] = { text = "TODO summoningSynergy_Octopus_Leprechaun", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["ThievingAreaUniqueChance"] = { text = "TODO ThievingAreaUniqueChance", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["ThievingAutoSellPrice"] = { text = "TODO ThievingAutoSellPrice", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["thievingChefNoDamage"] = { text = "TODO thievingChefNoDamage", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["ThievingStunIntervalPercent"] = { text = "TODO ThievingStunIntervalPercent", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["TownshipAridPlainsProduction"] = { text = "TODO TownshipAridPlainsProduction", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["TownshipBarProduction"] = { text = "TODO TownshipBarProduction", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["TownshipBlacksmithProduction"] = { text = "TODO TownshipBlacksmithProduction", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["TownshipBuildingCost"] = { text = "TODO TownshipBuildingCost", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["TownshipBuildingHappinessPenalties"] = { text = "TODO TownshipBuildingHappinessPenalties", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["TownshipClothingProduction"] = { text = "TODO TownshipClothingProduction", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["TownshipCoalProduction"] = { text = "TODO TownshipCoalProduction", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["TownshipCoalUsage"] = { text = "TODO TownshipCoalUsage", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["TownshipDeadStorage"] = { text = "TODO TownshipDeadStorage", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["TownshipDesertProduction"] = { text = "TODO TownshipDesertProduction", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["townshipDisableHunting"] = { text = "TODO townshipDisableHunting", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["TownshipEducation"] = { text = "TODO TownshipEducation", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["TownshipFarmProduction"] = { text = "TODO TownshipFarmProduction", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["TownshipFishingDockProduction"] = { text = "TODO TownshipFishingDockProduction", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["TownshipFoodProduction"] = { text = "TODO TownshipFoodProduction", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["TownshipFoodUsage"] = { text = "TODO TownshipFoodUsage", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["TownshipForestProduction"] = { text = "TODO TownshipForestProduction", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["TownshipGPProduction"] = { text = "TODO TownshipGPProduction", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["TownshipGrasslandsProduction"] = { text = "TODO TownshipGrasslandsProduction", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["TownshipHappiness"] = { text = "TODO TownshipHappiness", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["TownshipHealth"] = { text = "TODO TownshipHealth", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["TownshipHerbProduction"] = { text = "TODO TownshipHerbProduction", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["TownshipJungleProduction"] = { text = "TODO TownshipJungleProduction", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["TownshipLeatherProduction"] = { text = "TODO TownshipLeatherProduction", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["TownshipMagicEmporiumProduction"] = { text = "TODO TownshipMagicEmporiumProduction", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["TownshipMaxStorage"] = { text = "TODO TownshipMaxStorage", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["TownshipMountainsProduction"] = { text = "TODO TownshipMountainsProduction", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["TownshipOrchardProduction"] = { text = "TODO TownshipOrchardProduction", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["TownshipOreProduction"] = { text = "TODO TownshipOreProduction", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["TownshipPlankProduction"] = { text = "TODO TownshipPlankProduction", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["TownshipPopulationCap"] = { text = "TODO TownshipPopulationCap", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["TownshipPotionProduction"] = { text = "TODO TownshipPotionProduction", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["TownshipResourceProduction"] = { text = "TODO TownshipResourceProduction", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["TownshipRuneEssenceProduction"] = { text = "TODO TownshipRuneEssenceProduction", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["TownshipSnowlandsProduction"] = { text = "TODO TownshipSnowlandsProduction", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["TownshipStoneProduction"] = { text = "TODO TownshipStoneProduction", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["TownshipSwampProduction"] = { text = "TODO TownshipSwampProduction", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["TownshipTaxPerCitizen"] = { text = "TODO TownshipTaxPerCitizen", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["TownshipValleyProduction"] = { text = "TODO TownshipValleyProduction", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["TownshipWaterProduction"] = { text = "TODO TownshipWaterProduction", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["TownshipWoodcuttingProduction"] = { text = "TODO TownshipWoodcuttingProduction", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["TownshipWoodProduction"] = { text = "TODO TownshipWoodProduction", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["WoodcuttingGemChance"] = { text = "TODO WoodcuttingGemChance", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["WoodcuttingJewelryChance"] = { text = "TODO WoodcuttingJewelryChance", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["WoodcuttingXPAddedAsFiremakingXP"] = { text = "TODO WoodcuttingXPAddedAsFiremakingXP", isIncreaseNegative = false, inverseSign = false, skills = {} },
	["XPFromNegativeObstacles"] = { text = "TODO XPFromNegativeObstacles", isIncreaseNegative = false, inverseSign = false, skills = {} },
}


function p.getTriangleAttribute(attribute, attackerStyle, targetStyle, modeName)
	if type(attribute) ~= 'string' then
		error("Parameter 'attribute' must be a string", 2)
	elseif type(attackerStyle) ~= 'string' then
		error("Parameter 'attackerStyle' must be a string", 2)
	elseif type(targetStyle) ~= 'string' then
		error("Parameter 'targetStyle' must be a string", 2)
	elseif type(modeName) ~= 'string' then
		error("Parameter 'modeName' must be a string", 2)
	end
	
	local mode = GameData.getEntityByName('gamemodes', modeName)
	if mode == nil then
		error("Invalid gamemode '" .. mode .. "'", 2)
	end
	
	local attStyle, targStyle = string.lower(attackerStyle), string.lower(targetStyle)
	local validStyles = { 'magic', 'melee', 'ranged' }
	if not Shared.contains(validStyles, string.lower(attStyle)) then
		error("Invalid value for parameter 'attackerStyle'", 2)
	elseif not Shared.contains(validStyles, string.lower(targStyle)) then
		error("Invalid value for parameter 'targetStyle'", 2)
	end
	
	local combatTriangle = GameData.getEntityByID('combatTriangles', mode.combatTriangle)
	if combatTriangle == nil then
		error("No such combat triangle: " .. mode.combatTriangle)
	end
	local attrData = combatTriangle[attribute]
	if attrData == nil then
		error("No such attribute: " .. attribute)
	else
		return attrData[attStyle][targStyle]
	end
end

function p.getTriangleDamageModifier(attackerStyle, targetStyle, mode)
	return p.getTriangleAttribute('damageModifier', attackerStyle, targetStyle, mode)
end

--Syntax is like p.getTriangleDRModifier('Melee', 'Ranged', 'Normal')
--Returns a multiplier that can be multiplied with base DR to get the post-Triangle result
function p.getTriangleDRModifier(attackerStyle, targetStyle, mode)
	return p.getTriangleAttribute('reductionModifier', attackerStyle, targetStyle, mode)
end

function p.getDifficultyString(difficulty)
	return GameData.rawData.combatAreaDifficulties[difficulty + 1]
end

function p.getSkillName(skillID)
	local skill = GameData.getSkillData(skillID)
	if skill ~= nil then
		return skill.name
	end
end

function p.getSkillID(skillName)
	for i, skillData in ipairs(GameData.rawData.skillData) do
		if skillData.data.name == skillName then
			return skillData.skillID
		end
	end
end

function p.getEquipmentSlotName(id)
	return type(id) == 'number' and GameData.rawData.equipmentSlots[id] or 'Invalid'
end

function p.getEquipmentSlotID(name)
	return GameData.rawData.equipmentSlots[name]
end

function p.getCombatStyleName(styleNum)
	if type(styleNum) == 'number' then
		local styleName = GameData.rawData.attackTypes[styleNum]
		if styleName ~= nil then
			return Shared.titleCase(styleName)
		end
	elseif type(styleNum) == 'string' and type(GameData.rawData.attackTypes[string.lower(styleNum)]) == 'number' then
		return Shared.titleCase(styleNum)
	end
	return "ERROR: Invalid combat style[[Category:Pages with script errors]]"
end


--- Slayer functions
--
function p.getSlayerTierByID(tierID)
	if type(tierID) ~= 'number' then
		return nil
	else
		return GameData.rawData.slayerTiers[tierID + 1]
	end
end

function p.getSlayerTier(name)
	return GameData.getEntityByProperty('slayerTiers', 'display', name)
end

function p.getSlayerTierByLevel(level)
	if type(level) ~= 'number' or level < 1 then
		return "ERROR: Invalid Slayer level [[Category:Pages with script errors]]"
	end
	
	for i, tier in ipairs(GameData.rawData.slayerTiers) do
		if tier.minLevel <= level and (tier.maxLevel == nil or tier.maxLevel >= level) then
			return tier
		end
	end
end

--
-- the following functions just return subsets of the slayer functions above
--

function p.getSlayerTierName(tierID)
	if type(tierID) == 'number' then
		local tier = p.getSlayerTierByID(tierID)
		if tier ~= nil then
			return tier.display
		end
	end
	return "ERROR: Invalid Slayer tier[[Category:Pages with script errors]]"
end

function p.getSlayerTierNameByLevel(lvl)
	local tier = p.getSlayerTierByLevel(lvl)
	if type(tier) == 'table' then
		return tier.display
	else
		return "ERROR: Invalid Slayer tier[[Category:Pages with script errors]]"
	end
end

--
--- End of slayer functions

--Turns a modifier name like 'increasedMeleeAccuracyBonus' into several pieces of data:
--Base Name, Text, Sign, and IsNegative
--ex. "MeleeAccuracyBonus", "+{V}% Melee Accuracy", "+", false
function p.getModifierDetails(modifierName)
	local baseName = modifierName
	local isIncrease = true
	local isNegative = false
	local valueUnsigned = false

	if Shared.startsWith(modifierName, "increased") or Shared.startsWith(modifierName, "decreased") then
		baseName = string.sub(modifierName, 10)
		isIncrease = Shared.startsWith(modifierName, "increased")
	end

	local modifier = modifierTypes[baseName]
	if modifier == nil then
		return nil
	end

	local isPositive = isIncrease
	if modifier.isIncreaseNegative then
		isPositive = not isPositive
	end

	local sign = "+"
	if (not isIncrease and not modifier.inverseSign) or (isIncrease and modifier.inverseSign) then
		sign = "-"
	end

	if type(modifier.unsigned) == 'boolean' then valueUnsigned = modifier.unsigned end

	return baseName, modifier.text, sign, not isPositive, valueUnsigned, modifier
end

function p._getModifierText(modifier, value, doColor)
	if doColor == nil then doColor = true end
	local modName, modText, sign, isNegative, valueUnsigned = p.getModifierDetails(modifier)

	if modName == nil then
		return 'ERROR: Invalid modifier type for ' .. modifier .. '[[Category:Pages with script errors]]'
	end
	
	local formatModValue = function(value, rule)
			local ruleFunctions = {
				['V'] = function(val) return val end,
				['VD'] = function(val) return val / 10 end,
				['VMS'] = function(val) return val / 1000 end,
				['VX'] = function(val) return val * 10 end,
				['VX100'] = function(val) return val * 100 end,
				['V+100'] = function(val) return val + 100 end,
				['VMUL'] = function(val) return 2^val end,
				['VITEM'] = function(val)
						local item = GameData.getEntityByID('items', val)
						if item ~= nil then
							return item.name
						end
					end
			}
			local ruleFunc = ruleFunctions[rule] or ruleFunctions['V']
		
			if type(value) == 'table' then
				-- If table is a pair of values then format both & add a separator
				return ruleFunc(value[1]) .. '-' .. ruleFunc(value[2])
			else
				return ruleFunc(value)
			end
		end

	local valueArray, resultArray = nil, {}
	if type(value) ~= 'table' then
		valueArray = {value}
	else
		valueArray = value
	end

	for i, subVal in ipairs(valueArray) do
		local resultText = modText
		local modMagnitude = nil
		if type(subVal) == 'table' and subVal.skillID ~= nil then
			-- Modifier value is skill specific
			modMagnitude = subVal.value
			local skillName = p.getSkillName(subVal.skillID)
			if skillName ~= nil then
				resultText = string.gsub(resultText, '{SV0}', skillName)
			end
		else
			-- Modifier value is the magnitude only
			modMagnitude = subVal
		end

		local valSign = (valueUnsigned and '' or sign)
		resultText = string.gsub(resultText, '{(V[^}]*)}', function(rule) return valSign .. formatModValue(modMagnitude, rule) end)
		resultText = string.gsub(resultText, '{S}', sign)

		if doColor then
			local colorCode = (isNegative ~= nil and isNegative and 'color:red' or 'color:green')
			resultText = '<span style="' .. colorCode .. '">' .. resultText .. '</span>'
		end
		table.insert(resultArray, resultText)
	end

	return table.concat(resultArray, '<br/>')
end

function p.getModifierText(frame)
	local modifier = frame.args ~= nil and frame.args[1] or frame[1]
	local value = frame.args ~= nil and frame.args[2] or frame[2]
	local skill = frame.args ~= nil and frame.args.skill or frame.skill
	local doColor = frame.args ~= nil and frame.args[3] or frame[3]

	if doColor ~= nil then
		doColor = string.upper(doColor) ~= 'FALSE'
	end

	if skill ~= nil and skill ~= '' then
		value = {p.getSkillID(skill), value}
	end

	return p._getModifierText(modifier, value, doColor)
end

function p.getModifiersText(modifiers, doColor)
	if modifiers == nil or Shared.tableIsEmpty(modifiers) then
		return ''
	end

	local modArray = {}
	for bonus, value in pairs(modifiers) do
		table.insert(modArray, p._getModifierText(bonus, value, doColor))
	end
	return table.concat(modArray, "<br/>")
end

function p.getModifierSkills(modifiers)
	local skillArray = {}

	for modifier, value in ipairs(modifiers) do
		if type(value) == 'table' then
			for i, subVal in ipairs(value) do
				if type(subVal) == 'table' and subVal.skillID ~= nil then
					local skillName = p.getSkillName(subVal.skillID)
					if not Shared.contains(skillArray, skillName) then
						table.insert(skillArray, skillName)
					end
				end
			end
		end

		local baseName = p.getModifierDetails(modifier)
		if baseName == nil then
			return { 'ERROR: Modifier '..modifier..' is invalid' }
		end

		if modifierTypes[baseName].skills ~= nil then
			for i, skillName in Shared.skpairs(modifierTypes[baseName].skills) do
				if not Shared.contains(skillArray, skillName) then
					table.insert(skillArray, skillName)
				end
			end
		end
	end

	return skillArray
end

-- From game version 1.1 onwards, some entities have custom descriptions, while
-- many are generated based on the modifiers associated to that entity. This
-- function handles that logic given a custom description (may be nil) and
-- a modifiers object
function p.getDescription(customDescription, modifiers)
	if customDescription ~= nil then
		return customDescription
	else
		return p.getModifiersText(modifiers, false)
	end
end

return p