using System;
using UnityEngine;

// Token: 0x0200008F RID: 143
public class Manual : MonoBehaviour
{
	// Token: 0x06000E07 RID: 3591 RVA: 0x001078F0 File Offset: 0x00105AF0
	public void GetDescription(bool showNumbers, string n, Character character, out string text, out bool isSkill, out bool isStat, out float skillLevel)
	{
		text = "";
		skillLevel = 0f;
		isSkill = false;
		isStat = false;
		this.str.Clear();
		showNumbers = true;
		if (n == "Aura")
		{
			this.DescHeader("Aura");
			this.str.Append("Constitution and mental hardiness.\n\nAura contributes to maximum Health and Spirit Absorption as well as Intercession checks, Pagan Spell Potency, Pagan Resistance, Music Resistance and unarmored evasion.");
			text = this.str.ToString();
			isStat = true;
			return;
		}
		if (n == "Agility")
		{
			this.DescHeader("Agility");
			this.str.Append("Quickness and balance while walking, jumping and sneaking.\n\nAgility influences Action Speed, Move Speed and Carrying Weight, Chance to Evade, Sneaking Duration, and resisting environmental ground hazards.");
			text = this.str.ToString();
			isStat = true;
			return;
		}
		if (n == "Strength")
		{
			this.DescHeader("Strength");
			this.str.Append("Power and vigor in combat and movement.\n\nStrength influences Chance to Hit and Damage for most weapon types, and also impacts Carrying Weight and Move Speed during combat.");
			text = this.str.ToString();
			isStat = true;
			return;
		}
		if (n == "Sensory")
		{
			this.DescHeader("Sensory");
			this.str.Append("Sensitivity to nature, creatures and the moods and humors of other Vollings.\n\nSensory contributes to Vision and Sight Radiuses, Music Potency, Chance to Bind creatures, Bartering prices, Chance to Hit with Elyxirs and Slings, unarmored evasion and searching checks.");
			text = this.str.ToString();
			isStat = true;
			return;
		}
		if (n == "Pagan")
		{
			if (!Records.x.banquetIsle)
			{
				this.DescHeader("Pagan");
				this.str.Append("Connection to Vol needed to cast Pagan magic.\n\nPagan affects Spirit absorption rate, Difficulty Checks for spells and Move Speed during combat.");
			}
			else
			{
				this.DescHeader("Occult");
				this.str.Append("Ability to cast magic.\n\nOccult affects maximum Spirit absorption rate, Difficulty Checks for spells and Move Speed during combat.");
			}
			text = this.str.ToString();
			isStat = true;
			return;
		}
		if (n == "Dexterity")
		{
			this.DescHeader("Dexterity");
			this.str.Append("Precision and accuracy.\n\nDexterity influences Chance to Hit for many weapons types, and is also used to determine success with Repairing, Lockpicking, Music Potency, and unarmored evasion, and improves Carrying Weight.");
			text = this.str.ToString();
			isStat = true;
			return;
		}
		if (n == "Short Sword")
		{
			this.DescHeader("Short Sword");
			string text2 = "ShortSword";
			string text3 = "Dexterity";
			string text4 = "Strength";
			if (character)
			{
				string text5;
				float num;
				text3 = character.stats.GetHitChanceStat(text2, out text5, out num, 1f);
				float num2;
				string text6;
				text4 = character.stats.GetDmgStat(text2, out num2, out text6, 1f);
			}
			this.str.Append("Skill using and repairing short swords and daggers. Short swords are one-handed weapons that lend themselves to speed and evasion, and cannot be used by Yetis.\n\nA higher skill improves Chance to Hit and increases damage inflicted. Shorts swords use ");
			this.str.Append(text3);
			this.str.Append(" to land hits, ");
			this.str.Append(text4);
			this.str.Append(" to inflict damage, and Agility for Attack Speed. Most short swords and daggers have little impact on evasion, but are not well suited to break armor.");
			text = this.str.ToString();
			isSkill = true;
			if (showNumbers)
			{
				skillLevel = character.stats.GetSkillProgress(4);
			}
			return;
		}
		if (n == "Long Sword")
		{
			this.DescHeader("Long Sword");
			string text7 = "Sword";
			string text8 = "Dexterity";
			string text9 = "Strength";
			if (character)
			{
				string text10;
				float num3;
				text8 = character.stats.GetHitChanceStat(text7, out text10, out num3, 1f);
				float num4;
				string text11;
				text9 = character.stats.GetDmgStat(text7, out num4, out text11, 1f);
			}
			this.str.Append("Skill using and repairing using two-handed long swords. Two-handed weapons deal more damage and can break armor, but inhibit evasion to a greater degree. Only Yetis can carry a shield with a long sword.\n\nA higher skill improves Chance to Hit and increases damage inflicted. Long swords use ");
			this.str.Append(text8);
			this.str.Append(" to land hits, ");
			this.str.Append(text9);
			this.str.Append(" to inflict damage, and Agility for Attack Speed.");
			text = this.str.ToString();
			isSkill = true;
			if (showNumbers)
			{
				skillLevel = character.stats.GetSkillProgress(5);
			}
			return;
		}
		if (n == "Scepter")
		{
			this.DescHeader("Scepter");
			string text12 = "Scepter";
			string text13 = "Dexterity";
			string text14 = "Strength";
			if (character)
			{
				string text15;
				float num5;
				text13 = character.stats.GetHitChanceStat(text12, out text15, out num5, 1f);
				float num6;
				string text16;
				text14 = character.stats.GetDmgStat(text12, out num6, out text16, 1f);
			}
			this.str.Append("Skill using and repairing scepters, clubs and staffs of one-handed and two-handed varieties. Scepters are well suited to breaking armor, although two-handed scepters will inhibit evasion.\n\nA higher skill improves Chance to Hit and increases damage inflicted. Sceptors use ");
			this.str.Append(text13);
			this.str.Append(" to land hits, ");
			this.str.Append(text14);
			this.str.Append(" inflict damage, and Agility for Attack Speed.");
			text = this.str.ToString();
			isSkill = true;
			if (showNumbers)
			{
				skillLevel = character.stats.GetSkillProgress(6);
			}
			return;
		}
		if (n == "Whip")
		{
			this.DescHeader("Whips");
			string text17 = "Whip";
			string text18 = "Dexterity";
			string text19 = "Strength";
			if (character)
			{
				string text20;
				float num7;
				text18 = character.stats.GetHitChanceStat(text17, out text20, out num7, 1f);
				float num8;
				string text21;
				text19 = character.stats.GetDmgStat(text17, out num8, out text21, 1f);
			}
			this.str.Append("Skill using and repairing whips. Whips are one-handed weapons that can yield high damage but take longer to use, and cannot be used by Yetis. They also cannot be paired with a second weapon for a Multi-Hand attack.\n\nA higher skill improves Chance to Hit and increases damage inflicted. Whips use ");
			this.str.Append(text18);
			this.str.Append(" to land hits, ");
			this.str.Append(text19);
			this.str.Append(" to inflict damage, and Agility for Attack Speed.");
			text = this.str.ToString();
			isSkill = true;
			if (showNumbers)
			{
				skillLevel = character.stats.GetSkillProgress(35);
			}
			return;
		}
		if (n == "Ax" || n == "Axe")
		{
			this.DescHeader("Ax");
			string text22 = "Ax";
			string text23 = "Dexterity";
			string text24 = "Strength";
			if (character)
			{
				string text25;
				float num9;
				text23 = character.stats.GetHitChanceStat(text22, out text25, out num9, 1f);
				float num10;
				string text26;
				text24 = character.stats.GetDmgStat(text22, out num10, out text26, 1f);
			}
			this.str.Append("Skill using and repairing axes. Axes are one-handed weapons and cannot be used by Yetis.\n\nA higher skill improves Chance to Hit and increases damage inflicted. Axes use ");
			this.str.Append(text23);
			this.str.Append(" to land hits, ");
			this.str.Append(text24);
			this.str.Append(" to inflict damage, and Agility for Attack Speed.");
			text = this.str.ToString();
			isSkill = true;
			if (showNumbers)
			{
				skillLevel = character.stats.GetSkillProgress(7);
			}
			return;
		}
		if (n == "Pole")
		{
			this.DescHeader("Pole");
			string text27 = "Pole";
			string text28 = "Dexterity";
			string text29 = "Strength";
			if (character)
			{
				string text30;
				float num11;
				text28 = character.stats.GetHitChanceStat(text27, out text30, out num11, 1f);
				float num12;
				string text31;
				text29 = character.stats.GetDmgStat(text27, out num12, out text31, 1f);
			}
			this.str.Append("Skill using and repairing polearms. Only Yetis can carry shields with pole weapons, which are otherwise two-handed weapons that deal heavy damage and break armor but inhibit evasion.\n\nA higher skill improves Chance to Hit and increases damage inflicted. Poles use ");
			this.str.Append(text28);
			this.str.Append(" to land hits, ");
			this.str.Append(text29);
			this.str.Append(" to inflict damage, and Agility for Attack Speed.");
			text = this.str.ToString();
			isSkill = true;
			if (showNumbers)
			{
				skillLevel = character.stats.GetSkillProgress(8);
			}
			return;
		}
		if (n == "Slings")
		{
			this.DescHeader("Slings");
			string text32 = "Sling";
			string text33 = "Dexterity";
			if (character)
			{
				string text34;
				float num13;
				text33 = character.stats.GetHitChanceStat(text32, out text34, out num13, 1f);
				float num14;
				string text35;
				character.stats.GetDmgStat(text32, out num14, out text35, 1f);
			}
			this.str.Append("Skill using and repairing slings. A sling can be loaded with a commonly found stone, which deals damage and breaks armor, or a Rivi-Wrap, which clouds the target with a variety of ailments.\n\nA higher skill improves Chance to Hit and increases damage inflicted. Slings use ");
			this.str.Append(text33);
			this.str.Append(" to land hits and Agility for Attack Speed.\n\nSlingstones are too delicate to be used by Yetis.");
			text = this.str.ToString();
			isSkill = true;
			if (showNumbers)
			{
				skillLevel = character.stats.GetSkillProgress(11);
			}
			return;
		}
		if (n == "Bow")
		{
			this.DescHeader("Bow");
			string text36 = "Bow";
			string text37 = "Dexterity";
			string text38 = "Strength";
			if (character)
			{
				string text39;
				float num15;
				text37 = character.stats.GetHitChanceStat(text36, out text39, out num15, 1f);
				float num16;
				string text40;
				text38 = character.stats.GetDmgStat(text36, out num16, out text40, 1f);
			}
			this.str.Append("Skill using and repairing bows. Yeti hands are too large to manage a quiver of arrows, and will not use a bow.\n\nA higher skill improves Chance to Hit and increases damage inflicted. Bows use ");
			this.str.Append(text37);
			this.str.Append(" to land hits, ");
			this.str.Append(text38);
			this.str.Append(" to inflict damage, and Agility for Attack Speed.");
			text = this.str.ToString();
			isSkill = true;
			if (showNumbers)
			{
				skillLevel = character.stats.GetSkillProgress(10);
			}
			return;
		}
		if (n == "Hand-To-Hand")
		{
			this.DescHeader("Unarmed Fighting");
			string text41 = "Hand-to-Hand";
			string text42 = "Dexterity";
			string text43 = "Strength";
			if (character)
			{
				string text44;
				float num17;
				text42 = character.stats.GetHitChanceStat(text41, out text44, out num17, 1f);
				float num18;
				string text45;
				text43 = character.stats.GetDmgStat(text41, out num18, out text45, 1f);
			}
			this.str.Append("Skill using fists in combat.\n\nA higher skill improves Chance to Hit and increases damage inflicted. Unarmed attacks use ");
			this.str.Append(text42);
			this.str.Append(" to land hits, ");
			this.str.Append(text43);
			this.str.Append(" to inflict damage, and Agility for Attack Speed.");
			text = this.str.ToString();
			isSkill = true;
			if (showNumbers)
			{
				skillLevel = character.stats.GetSkillProgress(13);
			}
			return;
		}
		if (n == "Multi-Hand")
		{
			this.DescHeader("Multi-Hand Fighting");
			this.str.Append("Skill using two weapons to attack twice in a row.\n\nThe second lighter attack uses Multi-Hand skill instead of weapon's skill in Chance to Hit check.");
			text = this.str.ToString();
			isSkill = true;
			if (showNumbers)
			{
				skillLevel = character.stats.GetSkillProgress(9);
			}
			return;
		}
		if (n == "Elixirs")
		{
			this.DescHeader("Elyxirs");
			string text46 = "Elixir";
			string text47 = "Dexterity";
			if (character)
			{
				string text48;
				float num19;
				text47 = character.stats.GetHitChanceStat(text46, out text48, out num19, 1f);
				float num20;
				string text49;
				character.stats.GetDmgStat(text46, out num20, out text49, 1f);
			}
			this.str.Append("Skill throwing elyxir vials and globes. Elyxir vials are lined with minerals that explode on impact. Elyxir globes are filled with alcoholic mixtures that cover a target or their armor in a variety of debilitating ailments.\n\nA higher skill improves accuracy and increases damage. Elyxirs use ");
			this.str.Append(text47);
			this.str.Append(" to land hits and Agility for Attack Speed.");
			this.str.Append("\n\nElyxir vials are too delicate to be used by Yetis.");
			text = this.str.ToString();
			isSkill = true;
			if (showNumbers)
			{
				skillLevel = character.stats.GetSkillProgress(12);
			}
			return;
		}
		if (n == "Robes")
		{
			this.DescHeader("Robes");
			this.str.Append("Ease and effectiveness of wearing pagan robes. Robes are ineffective as armor, but enhance the wearer's Pagan Potency.\n\nA higher skill increases likelihood of evading damage from physical attacks.");
			text = this.str.ToString();
			isSkill = true;
			if (showNumbers)
			{
				skillLevel = character.stats.GetSkillProgress(0);
			}
			return;
		}
		if (n == "Crimscale")
		{
			this.DescHeader("Crimscale Armor");
			this.str.Append("Ease and effectiveness of wearing the lightweight crimscale armor, which offers protection physical damage but reduces evasion ability.\n\nA higher skill increases likelihood of evading damage from physical attacks.");
			text = this.str.ToString();
			isSkill = true;
			if (showNumbers)
			{
				skillLevel = character.stats.GetSkillProgress(2);
			}
			return;
		}
		if (n == "Pearl")
		{
			this.DescHeader("Pearl Armor");
			this.str.Append("Ease and effectiveness of wearing pearl armor, a material of medium weight and offer decent protection without entirely sacrificing speed and evasion ability.\n\nA higher skill increases likelihood of evading damage from physical attacks.");
			text = this.str.ToString();
			isSkill = true;
			if (showNumbers)
			{
				skillLevel = character.stats.GetSkillProgress(1);
			}
			return;
		}
		if (n == "Stonewood")
		{
			this.DescHeader("Stonewood Armor");
			this.str.Append("Ease and effectiveness of wearing heavy stonewood armor, which offers the best protection but weighs down attack times and movement speed and has the highest reduction in evasion ability.\n\nA higher skill increases likelihood of evading damage from physical attacks.");
			text = this.str.ToString();
			isSkill = true;
			if (showNumbers)
			{
				skillLevel = character.stats.GetSkillProgress(3);
			}
			return;
		}
		if (n == "Bindings")
		{
			this.DescHeader("Intercessions");
			this.str.Append("Call down divine power to enchant weapons and jewelry with gifts of the gods.\n\nA higher skill allows you to use and wear items with stronger effects. Wearing enchanted items requires Aura, and is penalized by a high Pagan.");
			text = this.str.ToString();
			isSkill = true;
			if (showNumbers)
			{
				skillLevel = character.stats.GetSkillProgress(16);
			}
			return;
		}
		if (n == "Fauna")
		{
			if (Links.x.diorama.sceneName != "F4_BanquetIsle")
			{
				this.DescHeader("Fauna Spells");
				this.str.Append("Pagan skill controlling hidden creatures of the forest.\n\nA higher skill improves likelihood to cast Fauna spells and increases potency of a spell's effects. Pagan spells need Pagan to cast difficult spells, and Pagan and Aura determines spell power.");
				if (!showNumbers)
				{
					this.str.Append("\n\nStarting spells: Frog Trap, Corpse Nest");
				}
			}
			else
			{
				this.DescHeader("Flesh Spells");
				this.str.Append("A school of magic gifted from the Carrion God, lord of the halls of the dead and revered most devoutly by Lachovinians.\n\nA higher skill improves likelihood to cast Flesh spells and increases potency of a spell's effects.");
			}
			text = this.str.ToString();
			isSkill = true;
			if (showNumbers)
			{
				skillLevel = character.stats.GetSkillProgress(17);
			}
			return;
		}
		if (n == "Vines")
		{
			if (Links.x.diorama.sceneName != "F4_BanquetIsle")
			{
				this.DescHeader("Vine Spells");
				this.str.Append("Pagan skill manipulating the undergrowth of vines below the soil.\n\nA higher skill improves likelihood to cast Vines spells and increases potency of a spell's effects. Pagan spells need Pagan to cast difficult spells, and Pagan and Aura determines spell power.");
				if (!showNumbers)
				{
					this.str.Append("\n\nStarting spells: Entangle, Vine Prison");
				}
			}
			else
			{
				this.DescHeader("Morphing Spells");
				this.str.Append("A school of magic gifted from the Trickster God that allows a spellcaster to change shape and form as he and his creatures do.\n\nA higher skill improves likelihood to cast Morphing spells and increases potency of a spell's effects.");
			}
			text = this.str.ToString();
			isSkill = true;
			if (showNumbers)
			{
				skillLevel = character.stats.GetSkillProgress(18);
			}
			return;
		}
		if (n == "Spores")
		{
			if (Links.x.diorama.sceneName != "F4_BanquetIsle")
			{
				this.DescHeader("Spore Spells");
				this.str.Append("Pagan skill shifting rocks and stones.\n\nA higher skill improves likelihood to cast Spore spells and increases potency of a spell's effects. Pagan spells need Pagan to cast difficult spells, and Pagan and Aura determines spell power.");
				if (!showNumbers)
				{
					this.str.Append("\n\nStarting spells: Curing Spores, Fragrant Spore");
				}
			}
			else
			{
				this.DescHeader("Illumination Spells");
				this.str.Append("A school of magic gifted from Necholai, the Moon God. Beloved in the Staglands, Necholai has gathered a devoted legion of followers that call down celestial powers to blight their enemies and bless their friends.\n\nA higher skill improves likelihood to cast Illumination spells and increases potency of a spell's effects.");
			}
			text = this.str.ToString();
			isSkill = true;
			if (showNumbers)
			{
				skillLevel = character.stats.GetSkillProgress(19);
			}
			return;
		}
		if (n == "Small Shield")
		{
			this.DescHeader("Small Shield");
			this.str.Append("Skill using and repairing small shields and bucklers. Shields cannot be used with two-handed weapons like Long Swords and Polearms, except when used by a Yeti.\n\nA higher skill improves likelihood to block physical attacks. Shields block damage but reduce evasion abilities.");
			text = this.str.ToString();
			isSkill = true;
			if (showNumbers)
			{
				skillLevel = character.stats.GetSkillProgress(15);
			}
			return;
		}
		if (n == "Large Shield")
		{
			this.DescHeader("Large Shield");
			this.str.Append("Skill using and repairing large shields. Shields cannot be used with two-handed weapons like Long Swords and Polearms, except when used by a Yeti.\n\nA higher skill improves likelihood to block physical attacks. Shields block damage but reduce evasion abilities.");
			text = this.str.ToString();
			isSkill = true;
			if (showNumbers)
			{
				skillLevel = character.stats.GetSkillProgress(14);
			}
			return;
		}
		if (n == "Charm Fish")
		{
			this.DescHeader("Bind Fish Creatures");
			this.str.Append("Skill binding creatures of the sea.\n\nA higher skill increases likelihood to bind. Binding uses Sensory to persuade creatures to join your side.");
			text = this.str.ToString();
			isSkill = true;
			if (showNumbers)
			{
				skillLevel = character.stats.GetSkillProgress(23);
			}
			return;
		}
		if (n == "Charm Forest")
		{
			this.DescHeader("Bind Forest Creatures");
			this.str.Append("Skill binding creatures of the forest.\n\nA higher skill increases likelihood to bind. Binding uses Sensory to persuade creatures to join your side.");
			text = this.str.ToString();
			isSkill = true;
			if (showNumbers)
			{
				skillLevel = character.stats.GetSkillProgress(24);
			}
			return;
		}
		if (n == "Charm Shrooms")
		{
			this.DescHeader("Bind Shroom Creatures");
			this.str.Append("Skill with binding shroom-descendent creatures.\n\nA higher skill increases likelihood to bind. Binding uses Sensory to persuade creatures to join your side.");
			text = this.str.ToString();
			isSkill = true;
			if (showNumbers)
			{
				skillLevel = character.stats.GetSkillProgress(25);
			}
			return;
		}
		if (n == "Flute")
		{
			this.DescHeader("Flute");
			this.str.Append("Skill playing the flute to inspire your friends.\n\nA higher skill increases likelihood to influence listeners and potency of songs. Playing music uses Sensory and Dexterity to determine song potency.");
			if (!showNumbers)
			{
				this.str.Append("\n\nStarting Songs: Invigorate, Hasten");
			}
			text = this.str.ToString();
			isSkill = true;
			if (showNumbers)
			{
				skillLevel = character.stats.GetSkillProgress(26);
			}
			return;
		}
		if (n == "Horn")
		{
			this.DescHeader("Horn");
			this.str.Append("Skill playing the horn to distact and deter enemies close enough to hear you.\n\nA higher skill increases potency of songs. Playing music uses Sensory and Dexterity to determine song potency.");
			if (!showNumbers)
			{
				this.str.Append("\n\nStarting Songs: Fumble, Untrained");
			}
			text = this.str.ToString();
			isSkill = true;
			if (showNumbers)
			{
				skillLevel = character.stats.GetSkillProgress(27);
			}
			return;
		}
		if (n == "Shepard Pipes")
		{
			this.DescHeader("Shepard Pipes");
			this.str.Append("Skill playing the pipes to summon creatures to fight at your side.\n\nA higher skill increases potency of songs. Playing music uses Sensory and Dexterity to determine song potency.");
			if (!showNumbers)
			{
				this.str.Append("\n\nStarting Songs: Summon Bee, Summon Cat");
			}
			text = this.str.ToString();
			isSkill = true;
			if (showNumbers)
			{
				skillLevel = character.stats.GetSkillProgress(29);
			}
			return;
		}
		if (n == "Lockpicking")
		{
			this.DescHeader("Lockpicking");
			this.str.Append("Skill picking locks on doors, cabinets and chests without making a sound.\n\nA higher skill increases likelihood to successfully pick locks. Lockpicking uses Dexterity to overcome difficult locks.");
			text = this.str.ToString();
			isSkill = true;
			if (showNumbers)
			{
				skillLevel = character.stats.GetSkillProgress(20);
			}
			return;
		}
		if (n == "Sneaking")
		{
			this.DescHeader("Sneaking");
			this.str.Append("Ability to move without being seen or heard.\n\nA higher skill increases duration of invisibility. Sneaking skill is improved with a higher natural Agility and Sensory.");
			text = this.str.ToString();
			isSkill = true;
			if (showNumbers)
			{
				skillLevel = character.stats.GetSkillProgress(21);
			}
			return;
		}
		if (n == "Bartering")
		{
			this.DescHeader("Bartering");
			this.str.Append("Persuasive aptitude to charm merchants to sell goods at a profitable deal.\n\nA higher skill increases discounted prices. Bartering skill is improved with a high Sensory.");
			text = this.str.ToString();
			isSkill = true;
			if (showNumbers)
			{
				skillLevel = character.stats.GetSkillProgress(22);
			}
			return;
		}
		if (n == "Health")
		{
			this.DescHeader("Health");
			this.str.Append("Overall measure of wellness.\n\nMaximum Health is based on background traits ");
			this.str.Append("and Aura");
			this.str.Append(".");
			if (showNumbers)
			{
				this.str.Append("\n\n");
				this.str.Append(character.stats.lifeBase);
				this.SBP();
				this.str.Append("Background");
				this.CPlus();
				this.str.Append(character.stats.HealthAura());
				this.SBP();
				this.str.Append("AUR/10");
				this.CB();
			}
			text = this.str.ToString();
			return;
		}
		if (n == "Spirit")
		{
			this.DescHeader("Spirit Absorption");
			this.str.Append("Rate which you absorb spirit after killing another creature.\n\nSpirit absorption wells from background traits");
			this.str.Append(", Aura");
			if (Links.x.diorama.sceneName != "F4_BanquetIsle")
			{
				this.str.Append(" and Pagan");
			}
			else
			{
				this.str.Append(" and Occult");
			}
			this.str.Append(".");
			if (showNumbers)
			{
				this.str.Append("\n\n");
				this.str.Append(character.stats.magicPointsBase);
				this.SBP();
				this.str.Append("Background");
				this.CPlus();
				this.str.Append(character.stats.SpiritAura());
				this.SBP();
				this.str.Append("AUR/100");
				this.CPlus();
				this.str.Append(character.stats.SpiritPagan());
				this.SBP();
				this.str.Append("PAG/50");
				this.CPlus();
				this.str.Append(character.stats.spiritAbsorption);
				this.SBP();
				this.str.Append("Mods");
				this.CB();
			}
			text = this.str.ToString();
			return;
		}
		if (n == "Natural Armor")
		{
			this.DescHeader("Natural Armor");
			this.str.Append("Vollings and animals have a natural armor that can be increased by equipping armor.\n\nArmor reduced damage taken from physical attacks.");
			text = this.str.ToString();
			return;
		}
		if (n == "Rally Speed")
		{
			this.DescHeader("Rally Speed");
			this.str.Append("Rate at which you help your party fill your Rally meter. When the meter is full, you and your companions can chain together powerful attacks.");
			this.str.Append("\n\nRally speed is improved by background traits and modifiers.");
			if (showNumbers)
			{
				this.str.Append("\n\n");
				this.str.Append(character.stats.rallyBase);
				this.SBP();
				this.str.Append("Background");
				this.CPlus();
				this.str.Append(character.stats.R1(character.stats.rallySpeed));
				this.SBP();
				this.str.Append(" modifiers");
				this.CB();
			}
			text = this.str.ToString();
			return;
		}
		if (n == "Max Stamina")
		{
			this.DescHeader("Stamina");
			this.str.Append("Pool of energy needed dodge attacks and to kick, charge and pin enemies.");
			if (showNumbers)
			{
				this.str.Append("\n\n");
				this.str.Append(character.stats.maxStamina + character.stats.maxStaminaAdd);
				this.SBP();
				this.str.Append("Background");
				this.CB();
			}
			text = this.str.ToString();
			return;
		}
		if (n == "Vision")
		{
			this.DescHeader("Vision");
			this.str.Append("How far vision extends.\n\nRadius of sight is based on background traits");
			this.str.Append(" and Sensory");
			this.str.Append(", and is influenced by the time of day.");
			if (showNumbers)
			{
				this.str.Append("\n\n");
				this.str.Append(character.stats.sightRadiusBase);
				this.SBP();
				this.str.Append("Background");
				this.CPlus();
				this.str.Append(character.stats.SightRadiusSensory(false));
				this.SBP();
				this.str.Append("SEN/5");
				if (character.stats.Blind() < 0f)
				{
					this.CPlus();
					this.str.Append(Mathf.Abs(character.stats.Blind()));
					this.SBP();
					this.str.Append("Vision Modifiers");
					this.str.Append("]</color>) * ");
				}
				else if (character.stats.Blind() > 0f)
				{
					this.CPlus();
					this.str.Append(Mathf.Abs(character.stats.Blind()));
					this.SBP();
					this.str.Append("Vision Modifiers");
					this.str.Append("]</color>) * ");
				}
				else
				{
					this.str.Append("]</color>) * ");
				}
				this.str.Append(character.stats.SightRadiusTOD(false, false));
				this.SBP();
				this.str.Append("Time of Day factor");
				this.CB();
			}
			text = this.str.ToString();
			return;
		}
		if (n == "Hearing")
		{
			this.DescHeader("Hearing");
			this.str.Append("How far hearing extends.\n\nHearing distance is based on background traits");
			this.str.Append(", Sensory");
			this.str.Append("and deafness ailments");
			this.str.Append(".");
			if (showNumbers)
			{
				this.str.Append("\n\n");
				this.str.Append(character.stats.hearingRadiusBase);
				this.SBP();
				this.str.Append("Background");
				this.CPlus();
				this.str.Append(character.stats.HearingRadiusSensory(false));
				this.SBP();
				this.str.Append("SEN/5");
				this.CPlus();
				this.str.Append(character.stats.Deaf());
				this.SBP();
				this.str.Append("Deafness");
				this.CB();
			}
			text = this.str.ToString();
			return;
		}
		if (n == "Weight")
		{
			this.DescHeader("Weight");
			this.str.Append("Total weight is determined by background traits");
			this.str.Append(" and weight of bags and equipped items");
			this.str.Append(".");
			if (showNumbers)
			{
				this.str.Append("\n\n");
				this.str.Append(character.stats.weightBase);
				this.SBP();
				this.str.Append("Background");
				this.CPlus();
				this.str.Append(character.inventoryBag.weight);
				this.SBP();
				this.str.Append("Bag + Equipment Weight");
				this.CP();
			}
			text = this.str.ToString();
			return;
		}
		if (n == "Carrying Weight")
		{
			this.DescHeader("Carrying Capacity");
			this.str.Append("Maximum weight that can be packed or equipped is based on Strength");
			this.str.Append(", Dexterity and Agility");
			this.str.Append(".");
			if (showNumbers)
			{
				this.str.Append("\n\n");
				this.str.Append(character.stats.CarryWeightStrength());
				this.SBP();
				this.str.Append("STR*7");
				this.CPlus();
				this.str.Append(character.stats.CarryWeightDex());
				this.SBP();
				this.str.Append("DEX*2");
				this.CPlus();
				this.str.Append(character.stats.CarryWeightAgility());
				this.SBP();
				this.str.Append("AGL*2");
				this.CP();
			}
			text = this.str.ToString();
			return;
		}
		if (n == "Reputation")
		{
			this.DescHeader("Reputation");
			this.str.Append("Level of trust and credit amongst villagers, guards and merchants. Reputation will decrease if the party betrays their duty to protect the Pavura's land.");
			text = this.str.ToString();
			return;
		}
		if (n == "Chance to Hit")
		{
			this.DescHeader("Chance to Hit");
			string text50 = "Dexterity";
			string text51 = "Bows";
			if (character)
			{
				string mainSkill = character.invRow1._MainSkill;
				string text52;
				float num21;
				text50 = character.stats.GetHitChanceStat(mainSkill, out text52, out num21, 1f);
				text51 = this.DisplayName(mainSkill);
			}
			this.str.Append("Ability to hit a target while attacking with a ranged or melee weapon.\n\nSuccess with ");
			this.str.Append(text51);
			this.str.Append(" is determined by ");
			this.str.Append(text50);
			this.str.Append(" and weapon's skill. The outcome of your hit chance roll will increase your damage (shown as Hit Chance Severity in Damage Calculation).");
			if (showNumbers)
			{
				this.str.Append("\n\n");
				if (character.stats.HandCount() > 1f)
				{
					this.str.Append("Right Hand\n");
				}
				this.str.Append(character.stats.HitChanceCalculation(0));
				if (character.stats.HandCount() > 1f)
				{
					this.str.Append("\n\n");
					this.str.Append("Left Hand\n");
					this.str.Append(character.stats.HitChanceCalculation(1));
				}
			}
			text = this.str.ToString();
			return;
		}
		if (n == "Chance to Evade")
		{
			this.DescHeader("Chance to Evade");
			this.str.Append("Ability to evade an attack.\n\nEvasion is determined by Agility, skill of armor worn and skill of shield carried. If no armor is worn or shield carried, evasion is determined by Dexterity, Aura and Sensory.");
			if (showNumbers)
			{
				this.str.Append("\n\n");
				this.str.Append(character.stats.EvadeChanceCalculation(0f, 0f, true));
			}
			text = this.str.ToString();
			return;
		}
		if (n == "Damage")
		{
			text = "\n.";
			this.DescHeader("Damage");
			string text53 = "Strength";
			if (character)
			{
				string mainSkill2 = character.invRow1._MainSkill;
				float num22;
				string text54;
				text53 = character.stats.GetDmgStat(mainSkill2, out num22, out text54, 1f);
			}
			this.str.Append("Damage is based on ");
			this.str.Append(text53);
			this.str.Append(", weapon quality and durability");
			this.str.Append(" and the difference between the attack's Chance to Hit and the target's Chance to Evade (Hit Chance Severity).\n\nDamage will be reduced by your target's armor and increased when a target is fatigued.");
			if (showNumbers)
			{
				this.str.Append("\n\n");
				this.str.Append(character.stats.DamageCalculation(true, 0f, 0f, 0f, false, 1f, "Attack", false, false, null));
			}
			text = this.str.ToString();
			return;
		}
		if (n == "Hit Chance Bindings")
		{
			this.DescHeader("Intercession Power");
			this.str.Append("Ability to enchant and wear jewelry and weapons with gifts of the gods. \n\nAn enchanted item will remain dormant unless the wearer's Aura and Intercessions skill (minus Pagan > 10) is greater than the item's difficulty.");
			if (showNumbers)
			{
				this.str.Append("\n\n");
				this.str.Append(character.stats.IntercessionCalculation());
			}
			text = this.str.ToString();
			return;
		}
		if (n == "Hit Chance Fauna")
		{
			if (Links.x.diorama.sceneName != "F4_BanquetIsle")
			{
				this.DescHeader("Difficulty Check (Fauna)");
				this.str.Append("Ability to cast Fauna spells against a spell's difficulty level. \n\nSuccessful casting is determined by a combination of Pagan");
				this.str.Append(" and skill factor.");
				if (showNumbers)
				{
					float num23 = 0f;
					float num24 = 0f;
					character.stats.PaganTotals(out num23, out num24, "Fauna", false, true);
					this.str.Append("\n\n");
					float num25 = character.stats.PaganMods(true);
					if (num25 != 0f)
					{
						this.str.Append("(");
					}
					this.str.Append(character.stats.PaganHit(true));
					this.SBP();
					this.str.Append("PAG/5");
					if (num25 != 0f)
					{
						this.CPlus();
						this.str.Append(num25);
						this.SBP();
						this.str.Append("Casting Mods");
						this.str.Append("]</color>) +");
					}
					else
					{
						this.CPlus();
					}
					this.str.Append(num24);
					this.SBP();
					this.str.Append("Fauna");
					this.str.Append("/10");
					this.CB();
				}
			}
			else
			{
				this.DescHeader("Difficulty Check (Flesh)");
				this.str.Append("Ability to cast Flesh spells against a spell's difficulty level. \n\nSuccessful casting is determined by a combination of Occult");
				this.str.Append(" and skill factor.");
				if (showNumbers)
				{
					float num26 = 0f;
					float num27 = 0f;
					character.stats.PaganTotals(out num26, out num27, "Fauna", false, true);
					this.str.Append("\n\n");
					float num28 = character.stats.PaganMods(true);
					if (num28 != 0f)
					{
						this.str.Append("(");
					}
					this.str.Append(character.stats.PaganHit(true));
					this.SBP();
					this.str.Append("OCC/5");
					if (num28 != 0f)
					{
						this.CPlus();
						this.str.Append(num28);
						this.SBP();
						this.str.Append("Casting Mods");
						this.str.Append("]</color>) +");
					}
					else
					{
						this.CPlus();
					}
					this.str.Append(num27);
					this.SBP();
					this.str.Append("Flesh");
					this.str.Append("/10");
					this.CB();
				}
			}
			text = this.str.ToString();
			return;
		}
		if (n == "Hit Chance Vines")
		{
			if (Links.x.diorama.sceneName != "F4_BanquetIsle")
			{
				this.DescHeader("Difficulty Check (Vines)");
				this.str.Append("Ability to cast Vine spells against a spell's difficulty level. \n\nSuccessful casting is determined by a combination of Pagan");
				this.str.Append(" and skill factor.");
				if (showNumbers)
				{
					float num29 = 0f;
					float num30 = 0f;
					character.stats.PaganTotals(out num29, out num30, "Vines", false, true);
					this.str.Append("\n\n");
					float num31 = character.stats.PaganMods(true);
					if (num31 != 0f)
					{
						this.str.Append("(");
					}
					this.str.Append(character.stats.PaganHit(true));
					this.SBP();
					this.str.Append("PAG/5");
					if (num31 != 0f)
					{
						this.CPlus();
						this.str.Append(num31);
						this.SBP();
						this.str.Append("Casting Mods");
						this.str.Append("]</color>) +");
					}
					else
					{
						this.CPlus();
					}
					this.str.Append(num30);
					this.SBP();
					this.str.Append("Vines");
					this.str.Append("/10");
					this.CB();
				}
			}
			else
			{
				this.DescHeader("Difficulty Check (Morphing)");
				this.str.Append("Ability to cast Morphing spells against a spell's difficulty level. \n\nSuccessful casting is determined by a combination of Occult");
				this.str.Append(" and skill factor.");
				if (showNumbers)
				{
					float num32 = 0f;
					float num33 = 0f;
					character.stats.PaganTotals(out num32, out num33, "Fauna", false, true);
					this.str.Append("\n\n");
					float num34 = character.stats.PaganMods(true);
					if (num34 != 0f)
					{
						this.str.Append("(");
					}
					this.str.Append(character.stats.PaganHit(true));
					this.SBP();
					this.str.Append("OCC/5");
					if (num34 != 0f)
					{
						this.CPlus();
						this.str.Append(num34);
						this.SBP();
						this.str.Append("Casting Mods");
						this.str.Append("]</color>) +");
					}
					else
					{
						this.CPlus();
					}
					this.str.Append(num33);
					this.SBP();
					this.str.Append("Morphing");
					this.str.Append("/10");
					this.CB();
				}
			}
			text = this.str.ToString();
			return;
		}
		if (n == "Hit Chance Spores")
		{
			if (Links.x.diorama.sceneName != "F4_BanquetIsle")
			{
				this.DescHeader("Difficulty Check (Spores)");
				this.str.Append("Ability to cast Spore spells against a spell's difficulty level. \n\nSuccessful casting is determined by a combination of Pagan");
				this.str.Append(" and skill factor.");
				if (showNumbers)
				{
					float num35 = 0f;
					float num36 = 0f;
					character.stats.PaganTotals(out num35, out num36, "Spores", false, true);
					this.str.Append("\n\n");
					float num37 = character.stats.PaganMods(true);
					if (num37 != 0f)
					{
						this.str.Append("(");
					}
					this.str.Append(character.stats.PaganHit(true));
					this.SBP();
					this.str.Append("PAG/5");
					if (num37 != 0f)
					{
						this.CPlus();
						this.str.Append(num37);
						this.SBP();
						this.str.Append("Casting Mods");
						this.str.Append("]</color>) +");
					}
					else
					{
						this.CPlus();
					}
					this.str.Append(num36);
					this.SBP();
					this.str.Append("Spores");
					this.str.Append("/10");
					this.CB();
				}
			}
			else
			{
				this.DescHeader("Difficulty Check (Illumination)");
				this.str.Append("Ability to cast Illumination spells against a spell's difficulty level. \n\nSuccessful casting is determined by a combination of Occult");
				this.str.Append(" and skill factor.");
				if (showNumbers)
				{
					float num38 = 0f;
					float num39 = 0f;
					character.stats.PaganTotals(out num38, out num39, "Fauna", false, true);
					this.str.Append("\n\n");
					float num40 = character.stats.PaganMods(true);
					if (num40 != 0f)
					{
						this.str.Append("(");
					}
					this.str.Append(character.stats.PaganHit(true));
					this.SBP();
					this.str.Append("OCC/5");
					if (num40 != 0f)
					{
						this.CPlus();
						this.str.Append(num40);
						this.SBP();
						this.str.Append("Casting Mods");
						this.str.Append("]</color>) +");
					}
					else
					{
						this.CPlus();
					}
					this.str.Append(num39);
					this.SBP();
					this.str.Append("Illumination");
					this.str.Append("/10");
					this.CB();
				}
			}
			text = this.str.ToString();
			return;
		}
		if (n == "Pagan Potency")
		{
			if (Links.x.diorama.sceneName != "F4_BanquetIsle")
			{
				this.DescHeader("Pagan Hit Chance");
				this.str.Append("Power of effects of pagan spells against a target.\n\nPotency is based on Aura, Pagan");
			}
			else
			{
				this.DescHeader("Magic Hit Chance");
				this.str.Append("Power of effects of spells against a target.\n\nPotency is based on Aura, Occult");
			}
			this.str.Append(", enhanced equipment and the spell's overpower strength.");
			if (showNumbers)
			{
				this.str.Append("\n\n");
				this.str.Append(character.stats.PaganPowerCalculation(true, 0f, false));
			}
			text = this.str.ToString();
			return;
		}
		if (n == "Pagan Resistance")
		{
			if (Links.x.diorama.sceneName != "F4_BanquetIsle")
			{
				this.DescHeader("Pagan Resistance");
			}
			else
			{
				this.DescHeader("Magic Resistance");
			}
			this.str.Append("Ability to reduce the effects of spells.\n\nResistance is based on Aura");
			this.str.Append(" and enhanced armor");
			this.str.Append(".");
			if (showNumbers)
			{
				this.str.Append("\n\n");
				this.str.Append(character.stats.PaganResistCalculation(true, 0f, ""));
			}
			text = this.str.ToString();
			return;
		}
		if (n == "Music Influence")
		{
			this.DescHeader("Music Potency");
			this.str.Append("Song's chance to influence anyone in listening radius.\n\nPotency is based on Sensory and Dexterity and instrument quality, and can be blocked by target's music resistance.");
			if (showNumbers)
			{
				this.str.Append("\n\n");
				this.str.Append(character.stats.InstrumentPowerCalculation(true, "", 0f, false, 0f, ""));
			}
			text = this.str.ToString();
			return;
		}
		if (n == "Music Resistance")
		{
			this.DescHeader("Music Resistance");
			this.str.Append("Capacity to resist influence of music.\n\nResistance is based on Aura and Sensory");
			this.str.Append(".");
			if (showNumbers)
			{
				this.str.Append("\n\n");
				this.str.Append(character.stats.InstrumentResistCalculation(true, 0f));
			}
			text = this.str.ToString();
			return;
		}
		if (n == "Move Speed")
		{
			this.DescHeader("Combat Move Speed");
			this.str.Append("Movement speed while engaging with enemies.\n\nSpeed is determined by");
			this.str.Append(" Strength, Agility");
			if (Links.x.diorama.sceneName != "F4_BanquetIsle")
			{
				this.str.Append(", Pagan");
			}
			else
			{
				this.str.Append(", Occult");
			}
			this.str.Append(" and bag weight.");
			this.str.Append(".");
			if (showNumbers)
			{
				this.str.Append("\n\n");
				float num41 = character.stats.MoveSpeedMod();
				if (num41 != 0f)
				{
					this.str.Append("(");
				}
				this.str.Append("(");
				this.str.Append(character.stats.StrengthMS());
				this.SBP();
				this.str.Append("STR/10");
				this.CPlus();
				this.str.Append(character.stats.AglMS());
				this.SBP();
				this.str.Append("AGL/10");
				this.CPlus();
				this.str.Append(character.stats.PaganMS());
				this.SBP();
				this.str.Append("PAG/10");
				this.CB();
				this.str.Append(") * ");
				this.str.Append(character.stats.BagWeightMS());
				this.SBP();
				this.str.Append("Bag and Equipment Mobility");
				if (num41 != 0f)
				{
					this.str.Append(") * ");
					this.str.Append(character.stats.GetMoveMod());
					this.SBP();
					this.str.Append("Bonuses & Ailments");
				}
				this.CB();
			}
			text = this.str.ToString();
			return;
		}
		if (n == "Sailing Speed")
		{
			this.DescHeader("Sailing Speed");
			this.str.Append("Speed that the party's boat will travel over the water.\n\nSpeed is impacted by weight factor ");
			float num42 = 0f;
			float num43 = 0f;
			float num44 = 0f;
			float num45 = 0f;
			this.str.Append(", boro bonuses");
			this.str.Append("and boat's built-in speed");
			this.str.Append(".");
			if (showNumbers)
			{
				this.str.Append("\n\n");
				this.str.Append(Links.x.gaia.boat.speed);
				this.SBP();
				this.str.Append("Boat Speed");
				this.CPlus();
				Links.x.fellowship.GetSailingSpeed(out num42, out num43, out num44, out num45);
				this.str.Append(num45);
				this.SBP();
				this.str.Append("Boro Bonus");
				this.CMin();
				this.str.Append(num42);
				this.SBP();
				this.str.Append("Weight Penalty");
				this.CB();
			}
			text = this.str.ToString();
			return;
		}
		if (n == "Attack Speed")
		{
			this.DescHeader("Action Speed");
			this.str.Append("Time needed to prepare an action.\n\nSpeed is determined by equipped weapon's speed");
			this.str.Append(", Agility");
			this.str.Append(" and weapon skill factor. Using two weapons will result in an averaged attack speed.");
			if (showNumbers)
			{
				this.str.Append("\n\n");
				int currentHand = character.stats.GetCurrentHand();
				this.str.Append(character.stats.BaseAtkSpeed(currentHand));
				this.SBP();
				this.str.Append("Weapon Speed");
				this.CMin();
				this.str.Append(character.stats.SkillAS(currentHand));
				this.SBP();
				this.str.Append(character.stats.MainSkill(character.stats.GetCurrentHand()));
				this.str.Append("/400");
				this.CMin();
				this.str.Append(character.stats.AglAS(true));
				this.SBP();
				this.str.Append("AGL/75");
				if (character.stats.actionTimeMod != 0f)
				{
					if (character.stats.actionTimeMod < 0f)
					{
						this.CMin();
					}
					else
					{
						this.CPlus();
					}
					this.str.Append(Mathf.Abs(character.stats.R1(character.stats.actionTimeMod)));
					this.SBP();
					this.str.Append("Bonuses & Ailments");
					this.CB();
				}
				else
				{
					this.CB();
				}
			}
			text = this.str.ToString();
			return;
		}
		if (n == "AC")
		{
			this.DescHeader("Armor");
			this.str.Append("Protection from physical attacks. Vollings and animals have a natural armor that can be increased by equipping armor, although equipped armor will become less effective as you take hits and will need to be patched or repaired at a blacksmith.");
			if (showNumbers)
			{
				this.str.Append("\n\n");
				float num46 = character.stats.ArmorNumber(true, false);
				float num47 = character.stats.ArmorNumber(true, true);
				this.str.Append(character.stats.ArmorAura(1));
				this.str.Append("%");
				this.SBP();
				this.str.Append("Aura/4");
				this.CMin();
				this.str.Append(Mathf.Round(num46 * 10f));
				this.str.Append("%");
				this.SBP();
				this.str.Append("Combined Armor Number");
				if (character.stats.ArmorReduction() > 0f)
				{
					this.CPlus();
					this.str.Append(Mathf.Round(character.stats.ArmorReduction() * 10f));
					this.str.Append("%");
					this.SBP();
					this.str.Append("Natural Armor Reduction Ailment");
				}
				if (character.stats.ArmorReduction() < 0f)
				{
					this.CPlus();
					this.str.Append(Mathf.Round(character.stats.ArmorReduction() * 10f));
					this.str.Append("%");
					this.SBP();
					this.str.Append("Natural Armor Bonus");
				}
				this.CMin();
				this.str.Append(character.stats.R1(num46 * 10f - num47 * 10f));
				this.str.Append("%");
				this.SBP();
				this.str.Append("Armor Condition Reductions");
				this.CB();
			}
			text = this.str.ToString();
			return;
		}
		if (n == "Charm Forest Creatures")
		{
			this.DescHeader("Chance to Bind Forest Creatures");
			this.str.Append("Ability to enthrall forest creatures and avoid conflict.\n\nChance to Bind is based on Sensory and skill factor versus a target's health factor, Sensory and Aura, and the number of other creatures in your party.\n\nIf your check fails by less than 2, you can roll a 1d5 to try to bind.");
			if (showNumbers)
			{
				this.str.Append("\n\n");
				this.str.Append(character.stats.CharmingCalculation("Forest"));
			}
			text = this.str.ToString();
			return;
		}
		if (n == "Charm Fish Creatures")
		{
			this.DescHeader("Chance to Bind Fish Creatures");
			this.str.Append("Ability to enthrall fish creatures and avoid conflict.\n\nChance to Bind is based on Sensory and skill factor versus a target's health factor, Sensory and Aura, and the number of other creatures in your party.\n\nIf your check fails by less than 2, you can roll a 1d5 to try to bind.");
			if (showNumbers)
			{
				this.str.Append("\n\n");
				float num48 = (float)character.stats.Charming();
				this.str.Append(character.stats.CharmSen(true));
				this.SBP();
				this.str.Append("SEN/30");
				if (num48 != 0f)
				{
					this.CPlus();
					this.str.Append(num48);
					this.SBP();
					this.str.Append("Bind Mods");
					this.str.Append("]</color> + ");
				}
				else
				{
					this.CPlus();
				}
				this.str.Append(character.stats.CharmSkill("Fish"));
				this.SBP();
				this.str.Append("Skill");
				this.str.Append("/20");
				this.CB();
			}
			text = this.str.ToString();
			return;
		}
		if (n == "Charm Shroom Creatures")
		{
			this.DescHeader("Chance to Bind Shroom Creatures");
			this.str.Append("Ability to enthrall shroom creatures and avoid conflict.\n\nChance to Bind is based on Sensory and skill factor versus a target's health factor, Sensory and Aura, and the number of other creatures in your party.\n\nIf your check fails by less than 2, you can roll a 1d5 to try to bind.");
			if (showNumbers)
			{
				this.str.Append("\n\n");
				float num49 = (float)character.stats.Charming();
				this.str.Append(character.stats.CharmSen(true));
				this.SBP();
				this.str.Append("SEN/30");
				if (num49 != 0f)
				{
					this.CPlus();
					this.str.Append(num49);
					this.SBP();
					this.str.Append("Bind Mods");
					this.str.Append("]</color> + ");
				}
				else
				{
					this.CPlus();
				}
				this.str.Append(character.stats.CharmSkill("Shroom"));
				this.SBP();
				this.str.Append("Skill");
				this.str.Append("/20");
				this.CB();
			}
			text = this.str.ToString();
			return;
		}
		if (n == "Charm Chance")
		{
			this.DescHeader("Chance to Bind");
			this.str.Append("Ability to enthrall shroom, forest and fish creatures and avoid conflict.\n\nChance to Bind is based on Sensory and skill factor versus a target's health factor, Sensory and Aura, and the number of other creatures in your party.\n\nIf your check fails by less than 2, you can roll a 1d5 to try to bind.");
			if (showNumbers)
			{
				this.str.Append("\n\n");
				float num50 = (float)character.stats.Charming();
				this.str.Append(character.stats.CharmSen(true));
				this.SBP();
				this.str.Append("SEN/30");
				if (num50 != 0f)
				{
					this.CPlus();
					this.str.Append(num50);
					this.SBP();
					this.str.Append("Bind Mods");
					this.str.Append("]</color> + ");
				}
				else
				{
					this.CPlus();
				}
				this.str.Append(character.stats.CharmSkill(""));
				this.SBP();
				this.str.Append("Skill");
				this.str.Append("/20");
				this.CB();
			}
			text = this.str.ToString();
			return;
		}
		if (n == "Bartering Discount")
		{
			this.DescHeader("Bartering Discount");
			this.str.Append("Ability to persuade merchants to sell their items for less. (Bartering is not used by peddlers.)\n\nDisposition is based on Sensory, bartering skill factor and glamor versus the merchant's Sensory factor.\n\nA merchant of the same race will favor you, as will a merchant in a town that has granted you a banner. Disturbing the town's peace will result in raised prices.");
			if (showNumbers)
			{
				this.str.Append("\n\n");
				this.str.Append(character.stats.DispSen());
				this.SBP();
				this.str.Append("SEN/15");
				this.CPlus();
				this.str.Append(character.stats.DispSkill());
				this.SBP();
				this.str.Append("Skill");
				this.str.Append("/6");
				this.CPlus();
				this.str.Append(character.stats.R1((float)character.GetGlam() / 2f));
				this.SBP();
				this.str.Append("Jewelry Glamor/2");
				this.CB();
			}
			text = this.str.ToString();
			return;
		}
		if (n == "Weapon Repair")
		{
			this.DescHeader("Weapon Repair");
			this.str.Append("Ability to repair damaged weapons with blacksmith tools.\n\nRepair success is based on Dexterity");
			this.str.Append(" and proficiency in the skill of the weapon being repaired");
			this.str.Append(".\n\nA higher skill and Dexterity will result in increased amounts of weapon damage reversed.");
			if (showNumbers)
			{
				this.str.Append("\n\n");
				this.str.Append(character.stats.RepairCalculations(true, ""));
			}
			text = this.str.ToString();
			return;
		}
		if (n == "Armor Repair")
		{
			this.DescHeader("Armor Repair");
			this.str.Append("Ability to patch damaged armor.\n\nRepair success is based on Dexterity");
			this.str.Append(" and proficiency in the skill of the armor being patched");
			this.str.Append(".\n\nA higher skill and Dexterity will result in increased amounts of armor damage reversed.");
			if (showNumbers)
			{
				this.str.Append("\n\n");
				this.str.Append(character.stats.SocketingCalculations(true, ""));
			}
			text = this.str.ToString();
			return;
		}
		if (n == "Fletching")
		{
			this.DescHeader("Fletching & Crafting");
			this.str.Append("Ability to craft slingstones, arrows and elyxir vials from various branches, fangs, claws, scales and natural resources.\n\nFletching & Crafting success is based on Dexterity");
			this.str.Append(" and proficiency in Slings, Bow or Elyxirs");
			this.str.Append(".\n\nA higher skill and Dexterity will result in arrows and slingstones that inflict increased damage.");
			if (showNumbers)
			{
				this.str.Append("\n\n");
				this.str.Append(character.stats.FletchingCalculations(true, ""));
			}
			text = this.str.ToString();
			return;
		}
		if (n == "Sneaking Duration")
		{
			this.DescHeader("Sneaking Duration");
			this.str.Append("Length of time to walk without making a sound or being seen.\n\nSneaking duration is determined by Sensory, Agility, your racial bonus and Sneaking skill. Attacking while sneaking cannot be evaded, and Chance to Hit is augmented with your Sneaking skill.");
			if (showNumbers)
			{
				this.str.Append("\n\n");
				this.str.Append(character.stats.SearchingCalculation(true));
			}
			text = this.str.ToString();
			return;
		}
		if (n == "Lockpick")
		{
			this.DescHeader("Lockpicking Chance to Succeed");
			this.str.Append("Ability to open locked doors, cabinets and chests noiselessly.\n\nLockpicking success is based on Dexterity and Lockpicking skill.\n\nIf your check fails by less than 1, you can roll a 1d5 for a lucky break.");
			if (showNumbers)
			{
				this.str.Append("\n\n");
				this.str.Append(character.stats.LockpickingCalculation(true));
			}
			text = this.str.ToString();
			return;
		}
		if (n == "Creature Searching")
		{
			this.DescHeader("Tracking Sensitivity");
			this.str.Append("Successful observation of tracks and signs of animal habitations.\n\nSearching success is based on Sensory");
			this.str.Append(" and highest binding skill factor");
			this.str.Append(".\n\nIf your check fails by less than 2, you can roll a 1d5 for a lucky break.");
			if (showNumbers)
			{
				this.str.Append("\n\n");
				this.str.Append(character.stats.SearchCalculation("Charmer"));
			}
			text = this.str.ToString();
			return;
		}
		if (n == "Search Environment")
		{
			this.DescHeader("Environment Searching Sensitivity");
			this.str.Append("Successful observation of something amiss in the environment.\n\nSearching success is based on Sensory");
			this.str.Append(" and highest rogue skill factor");
			this.str.Append(".\n\nIf your check fails by less than 2, you can roll a 1d5 for a lucky break.");
			if (showNumbers)
			{
				this.str.Append("\n\n");
				this.str.Append(character.stats.SearchCalculation("Rogue"));
			}
			text = this.str.ToString();
			return;
		}
		if (n == "Ghost Resistance")
		{
			this.DescHeader("Ghost Resistance");
			this.str.Append("Ability to resist the effects of brushes with ghosts.");
			if (showNumbers)
			{
				this.str.Append("\n\nRoll:\n");
				this.str.Append(character.stats.GhostResistAur(false));
				this.SBP();
				this.str.Append("AUR");
				this.CB();
				this.str.Append(" vs. ");
				this.str.Append("1d");
				this.str.Append(character.stats.GhostRollMax());
			}
			text = this.str.ToString();
			return;
		}
		if (n == "Ameythevian")
		{
			this.DescHeader("Ameythevians");
			this.str.Append("Ameythevians are characterized by their purple-tinted skin and web-like ears, the result of centuries passed in their watery, purple-fogged homeland. They tend to be an easy-going and open folk, giving and gaining trust as easily as their famous breweries add coins to their coffers.");
		}
		if (n == "Varuchov")
		{
			this.DescHeader("Varuchovs");
			this.str.Append("Varuchovs are by nature a secretive race, living largely underground among mushrooms in large, poorly lit caverns. What stories they share tell of beautiful marble domes and shimmering tunnels built by great, proud Houses.");
		}
		if (n == "Yeti")
		{
			this.DescHeader("Yetis");
			this.str.Append("When a dryad crafts a Yeti, Vol itself both celebrates and mourns, as for every beloved Yeti that springs forth, an ill-natured Yetturga is also born somewhere in the world. Yetis are communal creatures with innate strength and an unrivaled capacity for spellcasting arts.\n\nThe hulking yetis struggle to use small weapons, projectiles and shields, and prefer to carry two-handed weapons in one hand.");
		}
		if (n == "Taratorith")
		{
			this.DescHeader("Taratoriths");
			this.str.Append("Taratoriths are known to be taciturn and unyielding to outsiders. Recognizable from their distinctively reptilian hair strands, they hail from a dry and rugged highland and value their riders and herders nearly as highly as their ubiquitous traveling merchants.");
		}
		if (n == "Pasaaren")
		{
			this.DescHeader("Pasaarens");
			this.str.Append("Pasaarens hail from the Pasaaren Gardens, and though they are unafraid to travel the lengths of Vol, they often return to their lush, tree-filled jungle filled with floating structures blessed by their goddess, Quaniteva. With their bird-like feet they are naturally agile, and well adapted to resolving conflicts quickly.");
		}
		if (n == "Ameythevian_Merchant")
		{
			this.DescHeader("Merchant");
			this.str.Append("Peddlers of goods.");
		}
		if (n == "Ameythevian_Farmer")
		{
			this.DescHeader("Farmer");
			this.str.Append("Workers of the soil.");
		}
		if (n == "Ameythevian_Cleric")
		{
			this.DescHeader("Cleric");
			this.str.Append("Dedicants to the gods.");
		}
		if (n == "Ameythevian_Brewer")
		{
			this.DescHeader("Brewer");
			this.str.Append("Distillers and fermenters.");
		}
		if (n == "Ameythevian_Sailor")
		{
			this.DescHeader("Sailor");
			this.str.Append("Lovers of the sea.");
		}
		if (n == "Ameythevian_Servant")
		{
			this.DescHeader("Servant");
			this.str.Append("Attenders of others.");
		}
		if (n == "Ameythevian_Entertainer")
		{
			this.DescHeader("Entertainer");
			this.str.Append("Amusers of courts and servants alike.");
		}
		if (n == "Taratorith_Merchant")
		{
			this.DescHeader("Merchant");
			this.str.Append("Peddlers of goods.");
		}
		if (n == "Taratorith_Artisan")
		{
			this.DescHeader("Artisan");
			this.str.Append("Manipulators of glass, metal and stone.");
		}
		if (n == "Taratorith_Farmer")
		{
			this.DescHeader("Farmer");
			this.str.Append("Workers of the soil.");
		}
		if (n == "Taratorith_Cleric")
		{
			this.DescHeader("Cleric");
			this.str.Append("Dedicants to the gods.");
		}
		if (n == "Taratorith_Rider")
		{
			this.DescHeader("Rider");
			this.str.Append("Scouts of the hills.");
		}
		if (n == "Taratorith_Herder")
		{
			this.DescHeader("Herder");
			this.str.Append("Boro herders in the rocky wastes.");
		}
		if (n == "Varuchov_Merchant")
		{
			this.DescHeader("Merchant");
			this.str.Append("Peddlers of goods.");
		}
		if (n == "Varuchov_Farmer")
		{
			this.DescHeader("Farmer");
			this.str.Append("Workers of the soil.");
		}
		if (n == "Varuchov_Expeditioner")
		{
			this.DescHeader("Expeditioner");
			this.str.Append("Breakers of new mines.");
		}
		if (n == "Varuchov_Miner")
		{
			this.DescHeader("Miner");
			this.str.Append("Workers of rock and stone.");
		}
		if (n == "Varuchov_Hunter")
		{
			this.DescHeader("Hunter");
			this.str.Append("Gatherers of meat and shroomfat.");
		}
		if (n == "Varuchov_Weaver")
		{
			this.DescHeader("Weaver");
			this.str.Append("Masters of the loom.");
		}
		if (n == "Pasaaren_Merchant")
		{
			this.DescHeader("Merchant");
			this.str.Append("Peddlers of goods.");
		}
		if (n == "Pasaaren_Gardener")
		{
			this.DescHeader("Gardener");
			this.str.Append("Growers of flowers, shrubs and trees.");
		}
		if (n == "Pasaaren_Hunter")
		{
			this.DescHeader("Hunter");
			this.str.Append("Gatherers of meat and fish.");
		}
		if (n == "Pasaaren_Cleric")
		{
			this.DescHeader("Cleric");
			this.str.Append("Dedicants to the gods.");
		}
		if (n == "Pasaaren_Justice")
		{
			this.DescHeader("Justice");
			this.str.Append("Scholars of right and wrong.");
		}
		if (n == "Pasaaren_Politician")
		{
			this.DescHeader("Politician");
			this.str.Append("Leaders of communities.");
		}
		if (n == "Pasaaren_Artisan")
		{
			this.DescHeader("Artisan");
			this.str.Append("Manipulators of glass, metal and stone.");
		}
		if (n == "Yeti_Pine")
		{
			this.DescHeader("Pine");
			this.str.Append("Raised from a pine grove.");
		}
		if (n == "Yeti_Maple")
		{
			this.DescHeader("Maple");
			this.str.Append("Raised from a maple grove.");
		}
		if (n == "Yeti_Willow")
		{
			this.DescHeader("Willow");
			this.str.Append("Raised under a willow tree.");
		}
		if (n == "Yeti_Birch")
		{
			this.DescHeader("Birch");
			this.str.Append("Raised in a birch grove.");
		}
		if (n == "Yeti_Date")
		{
			this.DescHeader("Date");
			this.str.Append("Raised under a date palm.");
		}
		if (n == "Tank")
		{
			this.str.Append("<font=Bold>Tank</font>\n");
			this.str.Append("Frontline fighter with the armor and melee skills to withstand heavy attacks");
		}
		if (n == "Glass Cannon")
		{
			this.str.Append("<font=Bold>Glass Cannon</font>\n");
			this.str.Append("...");
		}
		if (n == "Archer")
		{
			this.str.Append("<font=Bold>Archer</font>\n");
			this.str.Append("...");
		}
		if (n == "Rogue")
		{
			this.str.Append("<font=Bold>Rogue</font>\n");
			this.str.Append("...");
		}
		if (n == "Buffer")
		{
			this.str.Append("<font=Bold>Buffer</font>\n");
			this.str.Append("...");
		}
		if (n == "Summoner")
		{
			this.str.Append("<font=Bold>Summoner</font>\n");
			this.str.Append("...");
		}
		if (n == "Berserker")
		{
			this.str.Append("<font=Bold>Berserker</font>\n");
			this.str.Append("...");
		}
		if (n == "Pagan 1")
		{
			this.str.Append("<font=Bold>Pagan Master</font>\n");
			this.str.Append("...");
		}
		if (n == "Pagan 2")
		{
			this.str.Append("<font=Bold>Pagan Artist</font>\n");
			this.str.Append("...");
		}
		if (n == "Create")
		{
			this.str.Append("<font=Bold>Custom Archetype</font>\n");
			this.str.Append("...");
		}
		if (Links.x.creation)
		{
			if (n == "SummonRaven")
			{
				this.DescHeader("Pipes Song: Summon Rave");
				this.str.Append("Summon a raven for a quick attack.");
			}
			if (n == "SummonBat")
			{
				this.DescHeader("Pipes Song: Summon Bat");
				this.str.Append("Summon an albino bat for a quick attack.");
			}
			if (n == "Rally")
			{
				this.DescHeader("Flute Song: Invigorate");
				this.str.Append("Increase strength for all allies nearby.");
			}
			if (n == "ActionSpeedUp")
			{
				this.DescHeader("Flute Song: Hasten");
				this.str.Append("Companions attack faster during combat.");
			}
			if (n == "SkillsDown")
			{
				this.DescHeader("Horn Song: Untrained");
				this.str.Append("Enemies receive skill reduction.");
			}
			if (n == "HitChanceDown")
			{
				this.DescHeader("Horn Song: Fumble");
				this.str.Append("Lower hit chance for enemies.");
			}
			if (n == "CorpseNest")
			{
				this.DescHeader("Fauna Spell: Corpse Nest");
				this.str.Append("Draw a nest from a corpse that holds a swarm of nettled bees.");
			}
			if (n == "FrogTrap")
			{
				this.DescHeader("Fauna Spell: Frog Trap");
				this.str.Append("Send exploding frogs out from the ground in random directions.");
			}
			if (n == "PukeSpores")
			{
				this.DescHeader("Spore Spell: Toxic Spore");
				this.str.Append("Litter the ground with toxic mushrooms that amplify existing ailments.");
			}
			if (n == "SporeFloat")
			{
				this.DescHeader("Spore Spel: Float");
				this.str.Append("Create a churning spore cloud below you or a companion's feet to float above the ground.");
			}
			if (n == "SlipSlime")
			{
				this.DescHeader("Spore Spell: Mold Field");
				this.str.Append("Create a field of slippery mold.");
			}
			if (n == "VinePrison")
			{
				this.DescHeader("Vines Spell: Vine Prison");
				this.str.Append("Trap a target in a cage of vines.");
			}
			if (n == "Entangle")
			{
				this.DescHeader("Vines Spell: Entangle");
				this.str.Append("Coax dormant vines to spring forth from the ground below.");
			}
		}
		text = this.str.ToString();
	}

	// Token: 0x06000E08 RID: 3592 RVA: 0x0010BBB8 File Offset: 0x00109DB8
	public string GetEffectDescription(Library.Effects effect, float sourceLevel, int jewelrySlot)
	{
		this.str.Clear();
		bool flag = false;
		bool flag2 = false;
		string text = ", </color>";
		if (effect == null)
		{
			Debug.Log("Effect is null ");
			return "";
		}
		int num = 0;
		if (jewelrySlot > 0 || effect._IsIntercession)
		{
			num = 1;
		}
		if (effect._Knockback > 0f)
		{
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Knock back");
		}
		if (effect._Stun > 0)
		{
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Stuns");
		}
		if (effect._Confuse > 0)
		{
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Causes confusion");
		}
		if (effect._StuckInPlace > 0)
		{
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Cannot move");
		}
		if (effect._Script == "Float")
		{
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Floating a half-pole off the ground");
			flag2 = true;
		}
		if (effect._Flee > 0)
		{
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Flees");
		}
		if (effect._Invisible > 0f)
		{
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Invisibility");
		}
		if (effect._AddActionTime != 0f)
		{
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			if (effect._AddActionTime > 0f)
			{
				this.str.Append("Stall action time");
			}
			else
			{
				this.str.Append("Bump action time");
			}
		}
		if (effect._Charming > 0f)
		{
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			float num2 = Records.x.GetPotencyAdd("Charming", sourceLevel, num);
			if (effect._Charming < 0f)
			{
				num2 *= -1f;
			}
			float num3 = effect._Charming + num2;
			if (num3 > 0f)
			{
				this.str.Append("Binding +");
			}
			else
			{
				this.str.Append("Binding ");
			}
			this.str.Append(num3);
		}
		if (effect._Artistry > 0f)
		{
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			float num2 = Records.x.GetPotencyAdd("Artistry", sourceLevel, num);
			if (effect._Artistry < 0f)
			{
				num2 *= -1f;
			}
			float num4 = effect._Artistry + num2;
			if (num4 > 0f)
			{
				this.str.Append("Artistry +");
			}
			else
			{
				this.str.Append("Artistry ");
			}
			this.str.Append(num4);
		}
		if (effect._NimbleFingers > 0f)
		{
			float num2 = Records.x.GetPotencyAdd("NimbleFingers", sourceLevel, num);
			if (effect._NimbleFingers < 0f)
			{
				num2 *= -1f;
			}
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			float num5 = effect._NimbleFingers + num2;
			if (num5 > 0f)
			{
				this.str.Append("Nimble Fingers +");
			}
			else
			{
				this.str.Append("Nimble Fingers ");
			}
			this.str.Append(num5);
		}
		if (effect._Silent > 0f)
		{
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Silencing");
		}
		if (effect._Deaf > 0f)
		{
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Hearing");
		}
		if (effect._Blind > 0f)
		{
			float num2 = Records.x.GetPotencyAdd("SightHearing", sourceLevel, num);
			if (effect._Blind < 0f)
			{
				num2 *= -1f;
			}
			float num6 = effect._Blind + num2;
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append(num6);
			this.str.Append("Vision");
		}
		if (effect._ReduceStun > 0f)
		{
			float num2 = Records.x.GetPotencyAdd("ReduceStun", sourceLevel, num);
			if (effect._ReduceStun < 0f)
			{
				num2 *= -1f;
			}
			float num7 = effect._ReduceStun + num2;
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append(num7);
			this.str.Append("% stun time reduction");
		}
		if (effect._ReduceArmor != 0f)
		{
			float num2 = Records.x.GetPotencyAdd("ReduceArmor", sourceLevel, num);
			if (effect._ReduceArmor < 0f)
			{
				num2 *= -1f;
			}
			float num8 = effect._ReduceArmor + num2;
			if (num == 0)
			{
				if (num8 > 0f)
				{
					num8 = Mathf.Ceil(num8);
				}
				else
				{
					num8 = Mathf.Floor(num8);
				}
			}
			else
			{
				num8 = Mathf.Round(num8);
			}
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			if (num8 > 0f)
			{
				this.str.Append("Break Armor Pieces (");
				this.str.Append(num8);
				this.str.Append(")");
			}
			else
			{
				this.str.Append("Repair Armor Durability Pieces (");
				this.str.Append(num8 * -1f);
				this.str.Append(")");
			}
		}
		if (effect._ReduceEqArmor != 0f)
		{
			float num2 = Records.x.GetPotencyAdd("ReduceEqArmor", sourceLevel, num);
			if (effect._ReduceEqArmor < 0f)
			{
				num2 *= -1f;
			}
			float num9 = effect._ReduceEqArmor + num2;
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			if (num9 > 0f)
			{
				this.str.Append("Weaken equipped armor -");
			}
			else
			{
				num9 *= -1f;
				this.str.Append("Strengthen equipped armor ");
			}
			this.str.Append(num9);
		}
		if (effect._AddStamina != 0f)
		{
			float num2 = Records.x.GetPotencyAdd("Stamina", sourceLevel, num);
			if (effect._AddStamina < 0f)
			{
				num2 *= -1f;
			}
			float num10 = effect._AddStamina + num2;
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			if (num10 < 0f)
			{
				this.str.Append("Drain stamina ");
			}
			else
			{
				this.str.Append("Regain stamina +");
			}
			this.str.Append(num10);
		}
		if (effect._RallySpeed != 0f)
		{
			float num2 = Records.x.GetPotencyAdd("RallySpeed", sourceLevel, num);
			if (effect._RallySpeed < 0f)
			{
				num2 *= -1f;
			}
			float num11 = effect._RallySpeed + num2;
			num11 = Mathf.Round(num11 * 10f) * 0.1f;
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Fill Rally Bars Faster ");
			if (num11 > 0f)
			{
				this.str.Append("+");
			}
			this.str.Append(num11);
		}
		if (effect._RallyFill != 0f)
		{
			float rallyFill = effect._RallyFill;
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			if (rallyFill == 1f)
			{
				this.str.Append("Gain Rally Bar");
			}
			else
			{
				this.str.Append("Gain Double Rally Bars");
			}
		}
		if (effect._MoveSpeed != 0f)
		{
			float num2 = Records.x.GetPotencyAdd("MoveSpeed", sourceLevel, num);
			if (effect._MoveSpeed < 0f)
			{
				num2 *= -1f;
			}
			float num12 = effect._MoveSpeed + num2;
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Move Speed ");
			if (num12 > 0f)
			{
				this.str.Append("increased ");
			}
			else
			{
				this.str.Append("reduced ");
			}
			this.str.Append(Mathf.Round(Mathf.Abs(num12) * 10f));
			this.str.Append("%");
		}
		if (effect._Name.Contains("Summon"))
		{
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			Library.Abilities abilityRow = Links.x.library.GetAbilityRow(effect._Name);
			this.str.Append(abilityRow._Description);
		}
		if (effect._StrFlat != 0f)
		{
			float num2 = Records.x.GetPotencyAdd("Stats", sourceLevel, num);
			if (effect._StrFlat < 0f)
			{
				num2 *= -1f;
			}
			float num13 = effect._StrFlat + num2;
			if (num == 0)
			{
				if (num13 > 0f)
				{
					num13 = Mathf.Ceil(num13);
				}
				else
				{
					num13 = Mathf.Floor(num13);
				}
			}
			else
			{
				num13 = Mathf.Round(num13);
			}
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Strength ");
			if (num13 > 0f)
			{
				this.str.Append("+");
			}
			this.str.Append(num13);
		}
		if (effect._StrDC != 0f)
		{
			float num2 = Records.x.GetPotencyAdd("StatsDice", sourceLevel, num);
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Strength dice ");
			if (effect._StrDC > 0f)
			{
				this.str.Append("+");
			}
			this.str.Append(effect._StrDC);
			this.str.Append("d");
			this.str.Append(effect._StrDS + num2);
		}
		if (effect._DexFlat != 0f)
		{
			float num2 = Records.x.GetPotencyAdd("Stats", sourceLevel, num);
			if (effect._DexFlat < 0f)
			{
				num2 *= -1f;
			}
			float num14 = effect._DexFlat + num2;
			if (num == 0)
			{
				if (num14 > 0f)
				{
					num14 = Mathf.Ceil(num14);
				}
				else
				{
					num14 = Mathf.Floor(num14);
				}
			}
			else
			{
				num14 = Mathf.Round(num14);
			}
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Dexterity ");
			if (num14 > 0f)
			{
				this.str.Append("+");
			}
			this.str.Append(num14);
		}
		if (effect._DexDC != 0f)
		{
			float num2 = Records.x.GetPotencyAdd("StatsDice", sourceLevel, num);
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Dexterity dice ");
			if (effect._DexDC > 0f)
			{
				this.str.Append("+");
			}
			this.str.Append(effect._DexDC);
			this.str.Append("d");
			this.str.Append(effect._DexDS + num2);
		}
		if (effect._AglFlat != 0f)
		{
			float num2 = Records.x.GetPotencyAdd("Stats", sourceLevel, num);
			if (effect._AglFlat < 0f)
			{
				num2 *= -1f;
			}
			float num15 = effect._AglFlat + num2;
			if (num == 0)
			{
				if (num15 > 0f)
				{
					num15 = Mathf.Ceil(num15);
				}
				else
				{
					num15 = Mathf.Floor(num15);
				}
			}
			else
			{
				num15 = Mathf.Round(num15);
			}
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Agility ");
			if (num15 > 0f)
			{
				this.str.Append("+");
			}
			this.str.Append(num15);
		}
		if (effect._AglDC != 0f)
		{
			float num2 = Records.x.GetPotencyAdd("StatsDice", sourceLevel, num);
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Strength dice ");
			if (effect._AglDC > 0f)
			{
				this.str.Append("+");
			}
			this.str.Append(effect._AglDC);
			this.str.Append("d");
			this.str.Append(effect._AglDS + num2);
		}
		if (effect._AurFlat != 0f)
		{
			float num2 = Records.x.GetPotencyAdd("Stats", sourceLevel, num);
			if (effect._AurFlat < 0f)
			{
				num2 *= -1f;
			}
			float num16 = effect._AurFlat + num2;
			if (num == 0)
			{
				if (num16 > 0f)
				{
					num16 = Mathf.Ceil(num16);
				}
				else
				{
					num16 = Mathf.Floor(num16);
				}
			}
			else
			{
				num16 = Mathf.Round(num16);
			}
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Aura ");
			if (num16 > 0f)
			{
				this.str.Append("+");
			}
			this.str.Append(num16);
		}
		if (effect._AurDC != 0f)
		{
			float num2 = Records.x.GetPotencyAdd("StatsDice", sourceLevel, num);
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Aura dice ");
			if (effect._AurDC > 0f)
			{
				this.str.Append("+");
			}
			this.str.Append(effect._AurDC);
			this.str.Append("d");
			this.str.Append(effect._AurDS + num2);
		}
		if (effect._PagFlat != 0f)
		{
			float num2 = Records.x.GetPotencyAdd("Stats", sourceLevel, num);
			if (effect._PagFlat < 0f)
			{
				num2 *= -1f;
			}
			float num17 = effect._PagFlat + num2;
			if (num == 0)
			{
				if (num17 > 0f)
				{
					num17 = Mathf.Ceil(num17);
				}
				else
				{
					num17 = Mathf.Floor(num17);
				}
			}
			else
			{
				num17 = Mathf.Round(num17);
			}
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Pagan ");
			if (num17 > 0f)
			{
				this.str.Append("+");
			}
			this.str.Append(num17);
		}
		if (effect._PagDC != 0f)
		{
			float num2 = Records.x.GetPotencyAdd("StatsDice", sourceLevel, num);
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Pagan dice ");
			if (effect._PagDC > 0f)
			{
				this.str.Append("+");
			}
			this.str.Append(effect._PagDC);
			this.str.Append("d");
			this.str.Append(effect._PagDS + num2);
		}
		if (effect._SenFlat != 0f)
		{
			float num2 = Records.x.GetPotencyAdd("Stats", sourceLevel, num);
			if (effect._SenFlat < 0f)
			{
				num2 *= -1f;
			}
			float num18 = effect._SenFlat + num2;
			if (num == 0)
			{
				if (num18 > 0f)
				{
					num18 = Mathf.Ceil(num18);
				}
				else
				{
					num18 = Mathf.Floor(num18);
				}
			}
			else
			{
				num18 = Mathf.Round(num18);
			}
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Sensory ");
			if (num18 > 0f)
			{
				this.str.Append("+");
			}
			this.str.Append(num18);
		}
		if (effect._SenDC != 0f)
		{
			float num2 = Records.x.GetPotencyAdd("StatsDice", sourceLevel, num);
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Strength dice ");
			if (effect._SenDC > 0f)
			{
				this.str.Append("+");
			}
			this.str.Append(effect._SenDC);
			this.str.Append("d");
			this.str.Append(effect._SenDS + num2);
		}
		if (effect._DmgFlat != 0f)
		{
			float num2 = Records.x.GetPotencyAdd("FlatMods", sourceLevel, num);
			if (effect._DmgFlat < 0f)
			{
				num2 *= -1f;
			}
			float num19 = effect._DmgFlat + num2;
			num19 = Mathf.Round(num19 * 10f) * 0.1f;
			if (num == 0)
			{
				if (num19 > 0f)
				{
					num19 = Mathf.Ceil(num19);
				}
				else
				{
					num19 = Mathf.Floor(num19);
				}
			}
			else
			{
				num19 = Mathf.Round(num19);
			}
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Physical Damage ");
			if (num19 > 0f)
			{
				this.str.Append("+");
			}
			this.str.Append(Mathf.Ceil(num19));
		}
		if (effect._DmgDC != 0f)
		{
			float num2 = Records.x.GetPotencyAdd("ModsDice", sourceLevel, num);
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Damage dice ");
			if (effect._DmgDC > 0f)
			{
				this.str.Append("+");
			}
			this.str.Append(effect._DmgDC);
			this.str.Append("d");
			this.str.Append(effect._DmgDS + num2);
		}
		if (effect._MPotencyFlat != 0f)
		{
			float num2 = Records.x.GetPotencyAdd("FlatMods", sourceLevel, num);
			if (effect._MPotencyFlat < 0f)
			{
				num2 *= -1f;
			}
			float num20 = effect._MPotencyFlat + num2;
			num20 = Mathf.Round(num20 * 10f) * 0.1f;
			if (num == 0)
			{
				if (num20 > 0f)
				{
					num20 = Mathf.Ceil(num20);
				}
				else
				{
					num20 = Mathf.Floor(num20);
				}
			}
			else
			{
				num20 = Mathf.Round(num20);
			}
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Pagan Potency ");
			if (num20 > 0f)
			{
				this.str.Append("+");
			}
			this.str.Append(num20);
		}
		if (effect._MPotencyDC != 0f)
		{
			float num2 = Records.x.GetPotencyAdd("ModsDice", sourceLevel, num);
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Pagan Potency dice ");
			if (effect._MPotencyDC > 0f)
			{
				this.str.Append("+");
			}
			this.str.Append(effect._MPotencyDC);
			this.str.Append("d");
			this.str.Append(effect._MPotencyDS + num2);
		}
		if (effect._HitFlat != 0f)
		{
			float num2 = Records.x.GetPotencyAdd("HitChance", sourceLevel, num);
			if (effect._HitFlat < 0f)
			{
				num2 *= -1f;
			}
			float num21 = effect._HitFlat + num2;
			num21 = Mathf.Round(num21 * 10f) * 0.1f;
			if (num == 0)
			{
				if (num21 > 0f)
				{
					num21 = Mathf.Ceil(num21);
				}
				else
				{
					num21 = Mathf.Floor(num21);
				}
			}
			else
			{
				num21 = Mathf.Round(num21);
			}
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Hit Chance ");
			if (num21 > 0f)
			{
				this.str.Append("+");
			}
			this.str.Append(num21);
		}
		if (effect._HitDC != 0f)
		{
			float num2 = Records.x.GetPotencyAdd("ModsDice", sourceLevel, num);
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Hit Chance dice ");
			if (effect._HitDC > 0f)
			{
				this.str.Append("+");
			}
			this.str.Append(effect._HitDC);
			this.str.Append("d");
			this.str.Append(effect._HitDS + num2);
		}
		if (effect._MHitFlat != 0f)
		{
			float num2 = Records.x.GetPotencyAdd("FlatMods", sourceLevel, num);
			if (effect._MHitFlat < 0f)
			{
				num2 *= -1f;
			}
			float num22 = effect._MHitFlat + num2;
			num22 = Mathf.Round(num22 * 10f) * 0.1f;
			if (num == 0)
			{
				if (num22 > 0f)
				{
					num22 = Mathf.Ceil(num22);
				}
				else
				{
					num22 = Mathf.Floor(num22);
				}
			}
			else
			{
				num22 = Mathf.Round(num22);
			}
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Pagan Hit Chance ");
			if (num22 > 0f)
			{
				this.str.Append("+");
			}
			this.str.Append(num22);
		}
		if (effect._MHitDC != 0f)
		{
			float num2 = Records.x.GetPotencyAdd("ModsDice", sourceLevel, num);
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Pagan Hit Chance dice ");
			if (effect._MHitDC > 0f)
			{
				this.str.Append("+");
			}
			this.str.Append(effect._MHitDC);
			this.str.Append("d");
			this.str.Append(effect._MHitDS + num2);
		}
		if (effect._EvadeFlat != 0f)
		{
			float num2 = Records.x.GetPotencyAdd("EvadeChance", sourceLevel, num);
			if (effect._EvadeFlat < 0f)
			{
				num2 *= -1f;
			}
			float num23 = this.R2(effect._EvadeFlat + num2);
			num23 = Mathf.Round(num23 * 10f) * 0.1f;
			if (num == 0)
			{
				if (num23 > 0f)
				{
					num23 = Mathf.Ceil(num23);
				}
				else
				{
					num23 = Mathf.Floor(num23);
				}
			}
			else
			{
				num23 = Mathf.Round(num23);
			}
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Evade Chance ");
			if (num23 > 0f)
			{
				this.str.Append("+");
			}
			this.str.Append(num23);
		}
		if (effect._EvadeDC != 0f)
		{
			float num2 = Records.x.GetPotencyAdd("ModsDice", sourceLevel, num);
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Evade Chance dice ");
			if (effect._EvadeDC > 0f)
			{
				this.str.Append("+");
			}
			this.str.Append(effect._EvadeDC);
			this.str.Append("d");
			this.str.Append(effect._EvadeDS + num2);
		}
		if (effect._BlockFlat != 0f)
		{
			float num2 = Records.x.GetPotencyAdd("BlockChance", sourceLevel, num);
			if (effect._BlockFlat < 0f)
			{
				num2 *= -1f;
			}
			float num24 = effect._BlockFlat + num2;
			num24 = Mathf.Round(num24 * 10f) * 0.1f;
			if (num == 0)
			{
				if (num24 > 0f)
				{
					num24 = Mathf.Ceil(num24);
				}
				else
				{
					num24 = Mathf.Floor(num24);
				}
			}
			else
			{
				num24 = Mathf.Round(num24);
			}
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Block Chance ");
			if (num24 > 0f)
			{
				this.str.Append("+");
			}
			this.str.Append(num24);
		}
		if (effect._BlockDC != 0f)
		{
			float num2 = Records.x.GetPotencyAdd("ModsDice", sourceLevel, num);
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Block Chance dice ");
			if (effect._BlockDC > 0f)
			{
				this.str.Append("+");
			}
			this.str.Append(effect._BlockDC);
			this.str.Append("d");
			this.str.Append(effect._BlockDS + num2);
		}
		if (effect._PaganResistVines != 0f)
		{
			float num2 = Records.x.GetPotencyAdd("FlatMods", sourceLevel, num);
			if (effect._PaganResistVines < 0f)
			{
				num2 *= -1f;
			}
			float num25 = effect._PaganResistVines + num2;
			num25 = Mathf.Round(num25 * 10f) * 0.1f;
			if (num == 0)
			{
				if (num25 > 0f)
				{
					num25 = Mathf.Ceil(num25);
				}
				else
				{
					num25 = Mathf.Floor(num25);
				}
			}
			else
			{
				num25 = Mathf.Round(num25);
			}
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Resist Pagan Vine Spells ");
			if (num25 > 0f)
			{
				this.str.Append("+");
			}
			this.str.Append(num25);
		}
		if (effect._PaganResistSpores != 0f)
		{
			float num2 = Records.x.GetPotencyAdd("FlatMods", sourceLevel, num);
			if (effect._PaganResistSpores < 0f)
			{
				num2 *= -1f;
			}
			float num26 = effect._PaganResistSpores + num2;
			num26 = Mathf.Round(num26 * 10f) * 0.1f;
			if (num == 0)
			{
				if (num26 > 0f)
				{
					num26 = Mathf.Ceil(num26);
				}
				else
				{
					num26 = Mathf.Floor(num26);
				}
			}
			else
			{
				num26 = Mathf.Round(num26);
			}
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Resist Pagan Spore Spells ");
			if (num26 > 0f)
			{
				this.str.Append("+");
			}
			this.str.Append(num26);
		}
		if (effect._PaganResistFauna != 0f)
		{
			float num2 = Records.x.GetPotencyAdd("FlatMods", sourceLevel, num);
			if (effect._PaganResistFauna < 0f)
			{
				num2 *= -1f;
			}
			float num27 = effect._PaganResistFauna + num2;
			num27 = Mathf.Round(num27 * 10f) * 0.1f;
			if (num == 0)
			{
				if (num27 > 0f)
				{
					num27 = Mathf.Ceil(num27);
				}
				else
				{
					num27 = Mathf.Floor(num27);
				}
			}
			else
			{
				num27 = Mathf.Round(num27);
			}
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Resist Pagan Fauna Spells ");
			if (num27 > 0f)
			{
				this.str.Append("+");
			}
			this.str.Append(num27);
		}
		if (effect._MusicResistance != 0f)
		{
			float num2 = Records.x.GetPotencyAdd("FlatMods", sourceLevel, num);
			if (effect._MusicResistance < 0f)
			{
				num2 *= -1f;
			}
			float num28 = effect._MusicResistance + num2;
			num28 = Mathf.Round(num28 * 10f) * 0.1f;
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Resist Song Influence ");
			if (num28 > 0f)
			{
				this.str.Append("+");
			}
			this.str.Append(Mathf.Ceil(num28));
		}
		if (effect._Balance != 0f)
		{
			float num2 = Records.x.GetPotencyAdd("FlatMods", sourceLevel, num);
			if (effect._Balance < 0f)
			{
				num2 *= -1f;
			}
			float num29 = effect._Balance + num2;
			num29 = Mathf.Round(num29 * 10f) * 0.1f;
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Balance ");
			if (num29 > 0f)
			{
				this.str.Append("+");
			}
			this.str.Append(num29);
		}
		if (effect._ActionTime != 0f)
		{
			float num2 = Records.x.GetPotencyAdd("ActionTime", sourceLevel, num);
			if (effect._ActionTime < 0f)
			{
				num2 *= -1f;
			}
			float num30 = effect._ActionTime + num2;
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			if (num30 > 0f)
			{
				this.str.Append("Action Time reduced by ");
				this.str.Append(Mathf.Round(num30 * 10f) / 10f);
				this.str.Append(" seconds");
			}
			else
			{
				this.str.Append("Action Time lengthened by ");
				this.str.Append(Mathf.Round(num30 * -1f * 10f) / 10f);
				this.str.Append(" seconds");
			}
		}
		if (effect._Spirit != 0f)
		{
			float num2 = Records.x.GetPotencyAdd("Spirit", sourceLevel, num);
			if (effect._Spirit < 0f)
			{
				num2 *= -1f;
			}
			float num31 = effect._Spirit + num2;
			if (num == 0)
			{
				if (num31 > 0f)
				{
					num31 = Mathf.Ceil(num31);
				}
				else
				{
					num31 = Mathf.Floor(num31);
				}
			}
			else
			{
				num31 = Mathf.Round(num31);
			}
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Spirit ");
			if (num31 > 0f)
			{
				this.str.Append("+");
			}
			this.str.Append(num31);
			if (effect._StaminaSpeed == 0f)
			{
				flag2 = true;
			}
		}
		if (effect._Fatigue != 0f)
		{
			float num2 = Records.x.GetPotencyAdd("Stamina", sourceLevel, num);
			if (effect._Fatigue < 0f)
			{
				num2 *= -1f;
			}
			float num32 = effect._Fatigue + num2;
			if (num == 0)
			{
				if (num32 > 0f)
				{
					num32 = Mathf.Ceil(num32);
				}
				else
				{
					num32 = Mathf.Floor(num32);
				}
			}
			else
			{
				num32 = Mathf.Round(num32);
			}
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Fatigue ");
			if (num32 < 0f)
			{
				this.str.Append("+");
			}
			else
			{
				this.str.Append("-");
			}
			this.str.Append(num32);
			if (effect._StaminaSpeed == 0f)
			{
				flag2 = true;
			}
		}
		if (effect._SpiritAbsorption != 0f)
		{
			float num2 = Records.x.GetPotencyAdd("SpiritAbsorb", sourceLevel, num);
			if (effect._SpiritAbsorption < 0f)
			{
				num2 *= -1f;
			}
			float num33 = effect._SpiritAbsorption + num2;
			if (num == 0)
			{
				if (num33 > 0f)
				{
					num33 = Mathf.Ceil(num33);
				}
				else
				{
					num33 = Mathf.Floor(num33);
				}
			}
			else
			{
				num33 = Mathf.Round(num33);
			}
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Spirit Absorption");
			if (num33 > 0f)
			{
				this.str.Append("+");
			}
			this.str.Append(num33);
		}
		if (effect._StaminaSpeed != 0f)
		{
			float num2 = Records.x.GetPotencyAdd("StaminaSpeed", sourceLevel, num);
			if (effect._StaminaSpeed < 0f)
			{
				num2 *= -1f;
			}
			float num34 = effect._StaminaSpeed + num2;
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			num34 = Mathf.Round(num34 * 10f) / 10f;
			if (effect._StaminaSpeed % 1f != 0f)
			{
				if (num34 < 0f)
				{
					this.str.Append("Slow stamina recovery x");
				}
				else
				{
					this.str.Append("Increase stamina recovery x");
				}
			}
			else if (num34 < 0f)
			{
				this.str.Append("Slow fatigue recovery by ");
				this.str.Append(num34 * -1f);
			}
			else
			{
				this.str.Append("Increase fatigue recovery x");
				this.str.Append(num34);
			}
		}
		if (effect._StaminaReduceMult != 0f)
		{
			float num2 = Records.x.GetPotencyAdd("StaminaReduce", sourceLevel, num);
			if (effect._StaminaReduceMult < 0f)
			{
				num2 *= -1f;
			}
			float num35 = effect._StaminaReduceMult + num2;
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			num35 = Mathf.Round(num35 * 10f) / 10f;
			this.str.Append("x");
			this.str.Append(num35 * -1f);
			this.str.Append(" fatigue from hits, actions and movement");
		}
		if (effect._Health != 0f)
		{
			float num2 = Records.x.GetPotencyAdd("Health", sourceLevel, num);
			if (effect._Health < 0f)
			{
				num2 *= -1f;
			}
			float num36 = effect._Health + num2;
			if (num == 0)
			{
				if (num36 > 0f)
				{
					num36 = Mathf.Ceil(num36);
				}
				else
				{
					num36 = Mathf.Floor(num36);
				}
			}
			else
			{
				num36 = Mathf.Round(num36);
			}
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			if (num36 > 0f)
			{
				this.str.Append("Health ");
			}
			else if (effect._Name.Contains("Frog") || effect._Name.Contains("Poison") || effect._Name.Contains("ElixirRed"))
			{
				this.str.Append("Poison Damage (Unblockable) ");
			}
			else
			{
				this.str.Append("Damage ");
			}
			if (num36 > 0f)
			{
				this.str.Append("+");
			}
			this.str.Append(Mathf.Ceil(num36));
			if (effect._StaminaSpeed == 0f)
			{
				flag2 = true;
			}
		}
		if (effect._HealthMax != 0f)
		{
			float num2 = Records.x.GetPotencyAdd("Health", sourceLevel, num);
			if (effect._HealthMax < 0f)
			{
				num2 *= -1f;
			}
			float num37 = effect._HealthMax + num2;
			if (num == 0)
			{
				if (num37 > 0f)
				{
					num37 = Mathf.Ceil(num37);
				}
				else
				{
					num37 = Mathf.Floor(num37);
				}
			}
			else
			{
				num37 = Mathf.Round(num37);
			}
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Health Max ");
			if (num37 > 0f)
			{
				this.str.Append("+");
			}
			this.str.Append(Mathf.Ceil(num37));
			flag2 = true;
		}
		if (effect._RemoveAilments)
		{
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Removes harmful ailments");
			if (effect._StaminaSpeed == 0f)
			{
				flag2 = true;
			}
		}
		bool overTime = effect._OverTime;
		if (effect._Script == "SkillsDown")
		{
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Reduces all skills by ");
			this.str.Append(Mathf.Round((float)effect._Level + Records.x.GetPotencyAdd("SkillsDown", sourceLevel, num)));
		}
		if (effect._Script.Contains("AmplifyWounds"))
		{
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			flag = true;
			this.str.Append("Increases existing ailments");
		}
		if (effect._Script.Contains("PukeSpore"))
		{
			if (flag)
			{
				this.str.Append("<color ");
				this.str.Append(Links.x.characterSheet.hoverColor);
				this.str.Append(">");
				this.str.Append(text);
			}
			this.str.Append("Increases existing ailments");
		}
		float num38 = effect._OverallTime;
		if (effect._IsSong)
		{
			num38 += (float)Mathf.RoundToInt(Records.x.GetPotencyAdd("Time", sourceLevel, num));
		}
		if (effect._OverallTime == 0.001f && !effect._IsSong)
		{
			flag2 = true;
		}
		if ((effect._Name.Contains("Elixir") || effect._Name.Contains("Dart")) && effect._OverallTime <= 1f)
		{
			flag2 = true;
		}
		if (effect._TerrainReq != "" && effect._TerrainReq == "Water")
		{
			this.str.Append(" when over wet surfaces");
		}
		if (!flag2 && num38 > 0f)
		{
			float num39 = Records.x.ShowSeconds((int)num38);
			if (Mathf.Round(num39) > 0f)
			{
				this.str.Append(" for ");
				if (num39 < 60f)
				{
					this.str.Append(Mathf.Round(num39));
					if (num39 == 1f)
					{
						this.str.Append(" second");
					}
					else
					{
						this.str.Append(" seconds");
					}
				}
				else
				{
					float num40 = num39 / 60f;
					num40 = Mathf.Round(num40);
					this.str.Append(num40);
					if (num40 != 1f)
					{
						this.str.Append(" minutes remaining");
					}
					else
					{
						this.str.Append(" minute remaining");
					}
				}
			}
		}
		return this.str.ToString();
	}

	// Token: 0x06000E09 RID: 3593 RVA: 0x0010F150 File Offset: 0x0010D350
	private void DescHeader(string n)
	{
		this.str.Append("<font=Bold><size=1.5em><color=#988D7D>");
		this.str.Append(n);
		this.str.Append("</color></size></font>");
		this.str.Append("\n");
	}

	// Token: 0x06000E0A RID: 3594 RVA: 0x0010F19D File Offset: 0x0010D39D
	public void OP()
	{
		this.str.Append("<color=#504B41>(");
	}

	// Token: 0x06000E0B RID: 3595 RVA: 0x0010F1B0 File Offset: 0x0010D3B0
	public void CP()
	{
		this.str.Append(")</color>");
	}

	// Token: 0x06000E0C RID: 3596 RVA: 0x0010F1C3 File Offset: 0x0010D3C3
	public void SP()
	{
		this.str.Append(" ");
	}

	// Token: 0x06000E0D RID: 3597 RVA: 0x0010F1D6 File Offset: 0x0010D3D6
	public void SOP()
	{
		this.str.Append(" <color=#504B41>(");
	}

	// Token: 0x06000E0E RID: 3598 RVA: 0x0010F1E9 File Offset: 0x0010D3E9
	public void SBP()
	{
		this.str.Append(" <color=#504B41>[");
	}

	// Token: 0x06000E0F RID: 3599 RVA: 0x0010F1FC File Offset: 0x0010D3FC
	public void CB()
	{
		this.str.Append("]</color>");
	}

	// Token: 0x06000E10 RID: 3600 RVA: 0x0010F20F File Offset: 0x0010D40F
	public void CPlus()
	{
		this.str.Append("]</color> + ");
	}

	// Token: 0x06000E11 RID: 3601 RVA: 0x0010F222 File Offset: 0x0010D422
	public void CMult()
	{
		this.str.Append("]</color> * ");
	}

	// Token: 0x06000E12 RID: 3602 RVA: 0x0010F235 File Offset: 0x0010D435
	public void CMin()
	{
		this.str.Append("]</color> - ");
	}

	// Token: 0x06000E13 RID: 3603 RVA: 0x0010F248 File Offset: 0x0010D448
	public string DisplayName(string mainSkill)
	{
		string text = mainSkill;
		if (mainSkill == "Whip")
		{
			text = "Whip";
		}
		if (mainSkill == "Pole")
		{
			text = "Pole";
		}
		if (mainSkill == "Scepter")
		{
			text = "Scepter";
		}
		if (mainSkill == "Sword" || mainSkill == "LongSword")
		{
			text = "Long Sword";
		}
		if (mainSkill == "ShortSword")
		{
			text = "Short Sword";
		}
		if (mainSkill == "Sling")
		{
			text = "Slings";
		}
		if (mainSkill == "Ax")
		{
			text = "Ax";
		}
		if (mainSkill == "Bow")
		{
			text = "Bow";
		}
		if (mainSkill == "Bindings")
		{
			text = "Intercessions";
		}
		if (mainSkill == "Fauna")
		{
			text = "Fauna Spells";
		}
		if (mainSkill == "Vines")
		{
			text = "Vine Spells";
		}
		if (mainSkill == "Spores")
		{
			text = "Spore Spells";
		}
		if (mainSkill == "Elixir")
		{
			text = "Elyxirs";
		}
		if (mainSkill == "LargeShield")
		{
			text = "Large Shields";
		}
		if (mainSkill == "SmallShield")
		{
			text = "Small Shields";
		}
		if (mainSkill == "Crimscale")
		{
			text = "Crimscale Armor";
		}
		if (mainSkill == "Robes")
		{
			text = "Robes";
		}
		if (mainSkill == "Stonewood")
		{
			text = "Stonewood Armor";
		}
		if (mainSkill == "Pearl")
		{
			text = "Pearl Armor";
		}
		if (mainSkill == "Hand-to-Hand")
		{
			text = "Unarmed";
		}
		if (mainSkill == "Flute")
		{
			text = "Flute";
		}
		if (mainSkill == "Pipe")
		{
			text = "Shepard Pipes";
		}
		if (mainSkill == "Horn")
		{
			text = "Horn";
		}
		if (mainSkill == "Charm")
		{
			text = "Binding";
		}
		return text;
	}

	// Token: 0x06000E14 RID: 3604 RVA: 0x0010F430 File Offset: 0x0010D630
	public string DisplayNameFromIndex(int index, Character c)
	{
		if (index == 0)
		{
			return "Robes";
		}
		if (index == 1)
		{
			return "Pearl";
		}
		if (index == 2)
		{
			if (!c)
			{
				return "Crimscale";
			}
			if (!c.stats.animal)
			{
				return "Crimscale";
			}
			return "Hide";
		}
		else if (index == 3)
		{
			if (!c)
			{
				return "Stonewood";
			}
			if (!c.stats.animal)
			{
				return "Stonewood";
			}
			return "Hide";
		}
		else
		{
			if (index == 4)
			{
				return "Short Sword";
			}
			if (index == 5)
			{
				return "Long Sword";
			}
			if (index == 6)
			{
				return "Scepters";
			}
			if (index == 7)
			{
				return "Ax";
			}
			if (index == 8)
			{
				return "Pole";
			}
			if (index == 9)
			{
				return "Multi-Hand Fighting";
			}
			if (index == 10)
			{
				return "Bow";
			}
			if (index == 11)
			{
				return "Slings";
			}
			if (index == 12)
			{
				return "Elyxirs";
			}
			if (index == 13)
			{
				return "Unarmed";
			}
			if (index == 14)
			{
				return "Large Shield";
			}
			if (index == 15)
			{
				return "Small Shield";
			}
			if (index == 16)
			{
				return "Intercessions";
			}
			if (index == 17)
			{
				return "Fauna Spells";
			}
			if (index == 18)
			{
				return "Vine Spells";
			}
			if (index == 19)
			{
				return "Spore Spells";
			}
			if (index == 20)
			{
				return "Lockpicking";
			}
			if (index == 21)
			{
				return "Sneaking";
			}
			if (index == 22)
			{
				return "Bartering";
			}
			if (index == 23)
			{
				return "Binding Fish Creatures";
			}
			if (index == 24)
			{
				return "Binding Forest Creatures";
			}
			if (index == 25)
			{
				return "Binding Shroom Creatures";
			}
			if (index == 26)
			{
				return "Flute";
			}
			if (index == 27)
			{
				return "Horn";
			}
			if (index == 28)
			{
				return "Drum";
			}
			if (index == 29)
			{
				return "Shepard Pipes";
			}
			if (index == 30)
			{
				return "Words of Power: Melee";
			}
			if (index == 31)
			{
				return "Words of Power: Range";
			}
			if (index == 32)
			{
				return "Words of Power: Defense";
			}
			if (index == 33)
			{
				return "None";
			}
			if (index == 34)
			{
				return "None";
			}
			if (index == 35)
			{
				return "Whips";
			}
			return "";
		}
	}

	// Token: 0x06000E15 RID: 3605 RVA: 0x0010F606 File Offset: 0x0010D806
	public float R2(float x)
	{
		return Mathf.Round(x * 100f) / 100f;
	}

	// Token: 0x04001682 RID: 5762
	private StringFast str = new StringFast(64);
}
