From 6b5e64a56df18016358f53c68002fe2a969c8a95 Mon Sep 17 00:00:00 2001
From: dg <dg@51575b47-30f0-44d4-a5cc-537603b46e54>
Date: Tue, 6 Mar 2012 14:10:34 +0000
Subject: [PATCH] Rewrote, rebalanced, and added many weapon egos Two-handed
 wepaons now have a small eqo multiplier Daggers now have a small ego penalty
 Gaping maw is now anti-magic Withering orbs and allettas diadem now psionic
 Halfling foot now arcane, hareskin sling now nature Stop talent now properly
 accounts for paradox level Foresight now properly senses actors Greater
 weapon egos generally less powerful Lesser weapon egos generally more
 powerful New anti-magic egos Resolve equilebrium and stamina regen more in
 line with other forms of regen for these resource types Added costs to ranged
 egos Set many artifact material levels to be more in line with their level
 range (should improve drops) Buffed many artifacts Reduced infravision given
 by many items Infravision and heightened senses no longer stack Fixed cease
 to exist double paradox cost

git-svn-id: http://svn.net-core.org/repos/t-engine4@4954 51575b47-30f0-44d4-a5cc-537603b46e54
---
 game/modules/tome/class/Actor.lua             |   30 +-
 game/modules/tome/class/Object.lua            |   46 +-
 game/modules/tome/class/Player.lua            |    7 +-
 game/modules/tome/class/interface/Combat.lua  |   49 +-
 game/modules/tome/data/damage_types.lua       |   28 +-
 .../tome/data/general/objects/2haxes.lua      |    1 +
 .../tome/data/general/objects/2hmaces.lua     |    1 +
 .../tome/data/general/objects/2hswords.lua    |    1 +
 .../tome/data/general/objects/2htridents.lua  |    1 +
 .../data/general/objects/boss-artifacts.lua   |   50 +-
 .../tome/data/general/objects/bows.lua        |    2 +-
 .../tome/data/general/objects/egos/ammo.lua   |   15 +-
 .../data/general/objects/egos/mindstars.lua   |  254 +++++
 .../tome/data/general/objects/egos/weapon.lua | 1004 ++++++++++++-----
 .../tome/data/general/objects/knifes.lua      |    1 +
 .../tome/data/general/objects/mindstars.lua   |    2 +-
 .../tome/data/general/objects/slings.lua      |    2 +-
 .../data/general/objects/world-artifacts.lua  |  197 ++--
 .../tome/data/talents/chronomancy/paradox.lua |    5 +-
 .../talents/chronomancy/speed-control.lua     |    2 +-
 .../tome/data/talents/gifts/antimagic.lua     |   22 +-
 .../modules/tome/data/timed_effects/other.lua |    2 +-
 .../tome/data/timed_effects/physical.lua      |   25 +
 game/modules/tome/dialogs/CharacterSheet.lua  |    2 +-
 game/modules/tome/resolvers.lua               |    4 +
 25 files changed, 1337 insertions(+), 416 deletions(-)

diff --git a/game/modules/tome/class/Actor.lua b/game/modules/tome/class/Actor.lua
index 93969e1214..f69c3441f3 100644
--- a/game/modules/tome/class/Actor.lua
+++ b/game/modules/tome/class/Actor.lua
@@ -1249,14 +1249,28 @@ function _M:onTakeHit(value, src)
 	end
 
 	if self:attr("damage_shield") then
-		-- Absorb damage into the shield
-		self.damage_shield_absorb = self.damage_shield_absorb or 0
-		if value <= self.damage_shield_absorb then
-			self.damage_shield_absorb = self.damage_shield_absorb - value
-			value = 0
+		-- Phased attack?
+		if src and src:attr("damage_shield_penetrate") then
+			local adjusted_value = value * (1 - (util.bound(src.damage_shield_penetrate, 0, 100) / 100))
+			self.damage_shield_absorb = self.damage_shield_absorb or 0
+			if adjusted_value <= self.damage_shield_absorb then
+				self.damage_shield_absorb = self.damage_shield_absorb - adjusted_value
+				value = value - adjusted_value
+			else
+				adjusted_value = adjusted_value - self.damage_shield_absorb
+				value = value + adjusted_value
+				self.damage_shield_absorb = 0
+			end
 		else
-			value = value - self.damage_shield_absorb
-			self.damage_shield_absorb = 0
+			-- Absorb damage into the shield
+			self.damage_shield_absorb = self.damage_shield_absorb or 0
+			if value <= self.damage_shield_absorb then
+				self.damage_shield_absorb = self.damage_shield_absorb - value
+				value = 0
+			else
+				value = value - self.damage_shield_absorb
+				self.damage_shield_absorb = 0
+			end
 		end
 
 		-- If we are at the end of the capacity, release the time shield damage
@@ -2595,7 +2609,7 @@ function _M:preUseTalent(ab, silent, fake)
 	-- Spells can fail
 	if (ab.is_spell and not self:isTalentActive(ab.id)) and not fake and self:attr("spell_failure") then
 		if rng.percent(self:attr("spell_failure")) then
-			if not silent then game.logPlayer(self, "You fail to cast %s!", ab.name) end
+			if not silent then game.logSeen(self, "%s's %s has been disrupted by anti-magic forces!", self.name:capitalize(), ab.name) end
 			self:useEnergy()
 			return false
 		end
diff --git a/game/modules/tome/class/Object.lua b/game/modules/tome/class/Object.lua
index b1769b2986..2e25cc5e75 100644
--- a/game/modules/tome/class/Object.lua
+++ b/game/modules/tome/class/Object.lua
@@ -128,7 +128,7 @@ function _M:descAttribute(attr)
 		local stat, i = next(self.wielder.resists)
 		return (i and i > 0 and "+"..i or tostring(i)).."%"
 	elseif attr == "REGEN" then
-		local i = self.wielder.mana_regen or self.wielder.stamina_regen or self.wielder.life_regen or self.wielder.hate_regen
+		local i = self.wielder.mana_regen or self.wielder.stamina_regen or self.wielder.life_regen or self.wielder.hate_regen or self.wielder.positive_regen
 		return ("%s%0.2f/turn"):format(i > 0 and "+" or "-", math.abs(i))
 	elseif attr == "COMBAT" then
 		local c = self.combat
@@ -475,6 +475,24 @@ function _M:getTextualDesc(compare_with)
 		if special ~= "" then
 			desc:add(found and {"color","WHITE"} or {"color","GREEN"}, "Special effect when this weapon hits: "..special, {"color","LAST"}, true)
 		end
+		
+		special = ""
+		if combat.special_on_crit then
+			special = combat.special_on_crit.desc
+		end
+		found = false
+		for i, v in ipairs(compare_with or {}) do
+			if v[field] and v[field].special_on_crit then
+				if special ~= v[field].special_on_crit.desc then
+					desc:add({"color","RED"}, "Special effect when this weapon crits: "..v[field].special_on_crit.desc, {"color","LAST"}, true)
+				else
+					found = true
+				end
+			end
+		end
+		if special ~= "" then
+			desc:add(found and {"color","WHITE"} or {"color","GREEN"}, "Special effect when this weapon crits: "..special, {"color","LAST"}, true)
+		end
 
 		found = false
 		for i, v in ipairs(compare_with or {}) do
@@ -490,6 +508,8 @@ function _M:getTextualDesc(compare_with)
 		end
 
 		compare_fields(combat, compare_with, field, "travel_speed", "%+d%%", "Travel speed: ", 1, false, false, add_table)
+		
+		compare_fields(combat, compare_with, field, "phase_power", "%+d%%", "Damage Shield penetration: ", 1, false, false, add_table)
 
 		if combat.tg_type and combat.tg_type == "beam" then
 			desc:add({"color","YELLOW"}, ("Shots beam through all targets."), {"color","LAST"}, true)
@@ -504,8 +524,23 @@ function _M:getTextualDesc(compare_with)
 				local col = (DamageType.dam_def[item] and DamageType.dam_def[item].text_color or "#WHITE#"):toTString()
 				return col[2], (" %s"):format(DamageType.dam_def[item].name),{"color","LAST"}
 			end)
+		
+		compare_table_fields(combat, compare_with, field, "burst_on_hit", "%+d", "Burst (radius 1) on hit: ", function(item)
+				local col = (DamageType.dam_def[item] and DamageType.dam_def[item].text_color or "#WHITE#"):toTString()
+				return col[2], (" %s"):format(DamageType.dam_def[item].name),{"color","LAST"}
+			end)
+			
+		compare_table_fields(combat, compare_with, field, "burst_on_crit", "%+d", "Burst (radius 2) on crit: ", function(item)
+				local col = (DamageType.dam_def[item] and DamageType.dam_def[item].text_color or "#WHITE#"):toTString()
+				return col[2], (" %s"):format(DamageType.dam_def[item].name),{"color","LAST"}
+			end)
+		
+		compare_table_fields(combat, compare_with, field, "convert_damage", "%d%%", "Damage conversion: ", function(item)
+				local col = (DamageType.dam_def[item] and DamageType.dam_def[item].text_color or "#WHITE#"):toTString()
+				return col[2], (" %s"):format(DamageType.dam_def[item].name),{"color","LAST"}
+			end)
 
-		compare_table_fields(combat, compare_with, field, "inc_damage_type", "%+d%%", "Damage against: ", function(item)
+		compare_table_fields(combat, compare_with, field, "inc_damage_type", "%+d%% ", "Damage against: ", function(item)
 				local _, _, t, st = item:find("^([^/]+)/?(.*)$")
 				if st and st ~= "" then
 					return st:capitalize()
@@ -760,6 +795,7 @@ function _M:getTextualDesc(compare_with)
 		compare_fields(w, compare_with, field, "stamina_regen", "%+.2f", "Stamina each turn: ")
 		compare_fields(w, compare_with, field, "mana_regen", "%+.2f", "Mana each turn: ")
 		compare_fields(w, compare_with, field, "hate_regen", "%+.2f", "Hate each turn: ")
+		compare_fields(w, compare_with, field, "positive_regen", "%+.2f", "P.Energy each turn: ")
 
 		compare_fields(w, compare_with, field, "stamina_regen_on_hit", "%+.2f", "Stamina when hit: ")
 		compare_fields(w, compare_with, field, "mana_regen_on_hit", "%+.2f", "Mana when hit: ")
@@ -943,6 +979,8 @@ function _M:getTextualDesc(compare_with)
 		end
 	end
 
+
+	
 	local use_desc = self:getUseDesc()
 	if use_desc then desc:merge(use_desc:toTString()) end
 	return desc
@@ -1010,6 +1048,10 @@ function _M:getDesc(name_param, compare_with, never_compare)
 	if self.encumber then
 		desc:add({"color",0x67,0xAD,0x00}, ("%0.2f Encumbrance."):format(self.encumber), {"color", "LAST"})
 	end
+	if self.ego_bonus_mult then
+		desc:add(true)
+		desc:add({"color",0x67,0xAD,0x00}, ("%0.2f Ego Multiplier."):format(1 + self.ego_bonus_mult), {"color", "LAST"})
+	end
 
 	desc:add(true, true)
 
diff --git a/game/modules/tome/class/Player.lua b/game/modules/tome/class/Player.lua
index b08987a28f..80439c461a 100644
--- a/game/modules/tome/class/Player.lua
+++ b/game/modules/tome/class/Player.lua
@@ -406,9 +406,10 @@ function _M:playerFOV()
 
 		-- Handle infravision/heightened_senses which allow to see outside of lite radius but with LOS
 		if self:attr("infravision") or self:attr("heightened_senses") then
-			local rad = (self.heightened_senses or 0) + (self.infravision or 0)
-			local rad2 = math.max(1, math.floor(rad / 4))
-			self:computeFOV(rad, "block_sight", function(x, y, dx, dy, sqdist) if game.level.map(x, y, game.level.map.ACTOR) then game.level.map.seens(x, y, fovdist[sqdist]) end end, true, true, true)
+			local rad1 = math.max((self.heightened_senses or 0), (self.infravision or 0))
+			rad1 = math.min(rad, self.sight)
+			local rad2 = math.max(1, math.floor(rad1 / 4))
+			self:computeFOV(rad1, "block_sight", function(x, y, dx, dy, sqdist) if game.level.map(x, y, game.level.map.ACTOR) then game.level.map.seens(x, y, fovdist[sqdist]) end end, true, true, true)
 			self:computeFOV(rad2, "block_sight", function(x, y, dx, dy, sqdist) game.level.map:applyLite(x, y, fovdist[sqdist]) end, true, true, true)
 		end
 
diff --git a/game/modules/tome/class/interface/Combat.lua b/game/modules/tome/class/interface/Combat.lua
index 52d8e622e1..7ecf23027c 100644
--- a/game/modules/tome/class/interface/Combat.lua
+++ b/game/modules/tome/class/interface/Combat.lua
@@ -364,7 +364,35 @@ function _M:attackTargetWith(target, weapon, damtype, mult, force_dam)
 		end
 
 		if crit then game.logSeen(self, "#{bold}#%s performs a critical strike!#{normal}#", self.name:capitalize()) end
-		DamageType:get(damtype).projector(self, target.x, target.y, damtype, math.max(0, dam))
+
+		-- Phasing, percent of weapon damage bypasses shields
+		if weapon and weapon.phasing then
+			self:attr("damage_shield_penetrate", weapon.phasing)
+		end
+
+		-- Damage conversion?
+		-- Reduces base damage but converts it into another damage type
+		local conv_dam
+		local conv_damtype
+		if weapon and weapon.convert_damage then
+			for typ, conv in pairs(weapon.convert_damage) do
+				if dam > 0 then
+					conv_dam = math.min(dam, dam * (conv / 100))
+					conv_damtype = typ
+					dam = dam - conv_dam
+					DamageType:get(conv_damtype).projector(self, target.x, target.y, conv_damtype, math.max(0, conv_dam))
+				end
+			end
+		end
+
+		if dam > 0 then
+			DamageType:get(damtype).projector(self, target.x, target.y, damtype, math.max(0, dam))
+		end
+
+		if weapon and weapon.phasing then
+			self:attr("damage_shield_penetrate", -weapon.phasing)
+		end
+
 		hitted = true
 	else
 		local srcname = game.level.map.seens(self.x, self.y) and self.name:capitalize() or "Something"
@@ -481,6 +509,20 @@ function _M:attackTargetWith(target, weapon, damtype, mult, force_dam)
 		self.shattering_impact_last_turn = game.turn
 	end
 
+	-- Burst on Hit
+	if hitted and crit and weapon.burst_on_hit then
+		for typ, dam in pairs(weapon.burst_on_hit) do
+			self:project({type="ball", radius=1, friendlyfire=false}, target.x, target.y, typ, dam)
+		end
+	end
+
+	-- Critical Burst (generally more damage then burst on hit and larger radius)
+	if hitted and crit and weapon.burst_on_crit then
+		for typ, dam in pairs(weapon.burst_on_crit) do
+			self:project({type="ball", radius=2, friendlyfire=false}, target.x, target.y, typ, dam)
+		end
+	end
+
 	-- Onslaught
 	if hitted and self:attr("onslaught") then
 		local dir = util.getDir(target.x, target.y, self.x, self.y) or 6
@@ -549,6 +591,11 @@ function _M:attackTargetWith(target, weapon, damtype, mult, force_dam)
 		weapon.special_on_hit.fct(weapon, self, target)
 	end
 
+	if hitted and crit and not target.dead and weapon and weapon.special_on_crit and weapon.special_on_crit.fct then
+		weapon.special_on_crit.fct(weapon, self, target)
+	end
+
+
 	-- Poison coating
 	if hitted and not target.dead and self.vile_poisons and next(self.vile_poisons) and target:canBe("poison") then
 		local tid = rng.table(table.keys(self.vile_poisons))
diff --git a/game/modules/tome/data/damage_types.lua b/game/modules/tome/data/damage_types.lua
index b55f95dd1d..df251839c7 100644
--- a/game/modules/tome/data/damage_types.lua
+++ b/game/modules/tome/data/damage_types.lua
@@ -595,7 +595,7 @@ newDamageType{
 
 -- Fire damage + DOT
 newDamageType{
-	name = "fireburn", type = "FIREBURN",
+	name = "fire burn", type = "FIREBURN", text_color = "#LIGHT_RED#",
 	projector = function(src, x, y, type, dam)
 		local dur = 3
 		local perc = 50
@@ -705,7 +705,7 @@ newDamageType{
 
 -- Cold damage + freeze chance
 newDamageType{
-	name = "ice", type = "ICE",
+	name = "ice", type = "ICE", text_color = "#1133F3#",
 	projector = function(src, x, y, type, dam)
 		local realdam = DamageType:get(DamageType.COLD).projector(src, x, y, DamageType.COLD, dam)
 		if rng.percent(25) then
@@ -765,7 +765,7 @@ newDamageType{
 
 -- Acid damage + blind chance
 newDamageType{
-	name = "acid blind", type = "ACID_BLIND",
+	name = "acid blind", type = "ACID_BLIND", text_color = "#GREEN#",
 	projector = function(src, x, y, type, dam)
 		local realdam = DamageType:get(DamageType.ACID).projector(src, x, y, DamageType.ACID, dam)
 		local target = game.level.map(x, y, Map.ACTOR)
@@ -799,7 +799,7 @@ newDamageType{
 
 -- Lightning damage + daze chance
 newDamageType{
-	name = "lightning daze", type = "LIGHTNING_DAZE",
+	name = "lightning daze", type = "LIGHTNING_DAZE", text_color = "#ROYAL_BLUE#",
 	projector = function(src, x, y, type, dam)
 		if _G.type(dam) == "number" then dam = {dam=dam, daze=25} end
 		local realdam = DamageType:get(DamageType.LIGHTNING).projector(src, x, y, DamageType.LIGHTNING, dam.dam)
@@ -987,7 +987,7 @@ newDamageType{
 
 -- Poisoning damage
 newDamageType{
-	name = "poison", type = "POISON",
+	name = "poison", type = "POISON", text_color = "#LIGHT_GREEN#",
 	projector = function(src, x, y, t, dam)
 		local power
 		if type(dam) == "table" then
@@ -1041,8 +1041,9 @@ newDamageType{
 
 -- Insidious poison: prevents healing
 newDamageType{
-	name = "insidious poison", type = "INSIDIOUS_POISON",
+	name = "insidious poison", type = "INSIDIOUS_POISON", text_color = "#LIGHT_GREEN#",
 	projector = function(src, x, y, type, dam)
+		if _G.type(dam) == "number" then dam = {dam=dam, dur=7, heal_factor=dam} end
 		DamageType:get(DamageType.NATURE).projector(src, x, y, DamageType.NATURE, dam.dam / dam.dur)
 		local target = game.level.map(x, y, Map.ACTOR)
 		if target and target:canBe("poison") then
@@ -1079,12 +1080,13 @@ newDamageType{
 
 -- Slime damage
 newDamageType{
-	name = "slime", type = "SLIME",
+	name = "slime", type = "SLIME", text_color = "#LIGHT_GREEN#",
 	projector = function(src, x, y, type, dam)
-		DamageType:get(DamageType.NATURE).projector(src, x, y, DamageType.NATURE, dam)
+		if _G.type(dam) == "number" then dam = {dam=dam, power=0.15} end
+		DamageType:get(DamageType.NATURE).projector(src, x, y, DamageType.NATURE, dam.dam)
 		local target = game.level.map(x, y, Map.ACTOR)
 		if target then
-			target:setEffect(target.EFF_SLOW, 3, {power=0.15, no_ct_effect=true})
+			target:setEffect(target.EFF_SLOW, 3, {power=dam.power, no_ct_effect=true})
 		end
 	end,
 }
@@ -1613,7 +1615,7 @@ newDamageType{
 
 -- Temporal + Stat damage
 newDamageType{
-	name = "clock", type = "CLOCK",
+	name = "reverse aging", type = "CLOCK",
 	projector = function(src, x, y, type, dam)
 		local target = game.level.map(x, y, Map.ACTOR)
 		if target then
@@ -1627,7 +1629,7 @@ newDamageType{
 
 -- Temporal Over Time
 newDamageType{
-	name = "wasting", type = "WASTING",
+	name = "wasting", type = "WASTING", text_color = "#LIGHT_STEEL_BLUE#",
 	projector = function(src, x, y, type, dam)
 		local target = game.level.map(x, y, Map.ACTOR)
 		local dur = 3
@@ -1670,7 +1672,7 @@ newDamageType{
 				if target:canBe("stun") then
 					target:setEffect(target.EFF_STUNNED, 3, {apply_power=src:combatSpellpower()})
 				else
-					game.logSeen(target, "%s resists the daze!", target.name:capitalize())
+					game.logSeen(target, "%s resists the stun!", target.name:capitalize())
 				end
 			elseif chance == 2 then
 				if target:canBe("blind") then
@@ -1966,7 +1968,7 @@ newDamageType{
 }
 
 newDamageType{
-	name = "manaburn", type = "MANABURN",
+	name = "manaburn", type = "MANABURN", text_color = "#PURPLE#",
 	projector = function(src, x, y, type, dam)
 		local target = game.level.map(x, y, Map.ACTOR)
 		if target then
diff --git a/game/modules/tome/data/general/objects/2haxes.lua b/game/modules/tome/data/general/objects/2haxes.lua
index 8c926212fe..511b19dcc4 100644
--- a/game/modules/tome/data/general/objects/2haxes.lua
+++ b/game/modules/tome/data/general/objects/2haxes.lua
@@ -31,6 +31,7 @@ newEntity{
 	combat = { talented = "axe", damrange = 1.5, physspeed = 1, sound = {"actions/melee", pitch=0.6, vol=1.2}, sound_miss = {"actions/melee", pitch=0.6, vol=1.2} },
 	desc = [[Massive two-handed battleaxes.]],
 	twohanded = true,
+	ego_bonus_mult = 0.2,
 	randart_able = { attack=40, physical=80, spell=20, def=10, misc=10 },
 	egos = "/data/general/objects/egos/weapon.lua", egos_chance = { prefix=resolvers.mbonus(40, 5), suffix=resolvers.mbonus(40, 5) },
 }
diff --git a/game/modules/tome/data/general/objects/2hmaces.lua b/game/modules/tome/data/general/objects/2hmaces.lua
index caa4e8eccc..36b3239460 100644
--- a/game/modules/tome/data/general/objects/2hmaces.lua
+++ b/game/modules/tome/data/general/objects/2hmaces.lua
@@ -31,6 +31,7 @@ newEntity{
 	combat = { talented = "mace", damrange = 1.5, physspeed = 1, sound = {"actions/melee", pitch=0.6, vol=1.2}, sound_miss = {"actions/melee", pitch=0.6, vol=1.2} },
 	desc = [[Massive two-handed maul.]],
 	twohanded = true,
+	ego_bonus_mult = 0.2,
 	randart_able = { attack=40, physical=80, spell=20, def=10, misc=10 },
 	egos = "/data/general/objects/egos/weapon.lua", egos_chance = { prefix=resolvers.mbonus(40, 5), suffix=resolvers.mbonus(40, 5) },
 }
diff --git a/game/modules/tome/data/general/objects/2hswords.lua b/game/modules/tome/data/general/objects/2hswords.lua
index 1697ce0369..5eb6082d5c 100644
--- a/game/modules/tome/data/general/objects/2hswords.lua
+++ b/game/modules/tome/data/general/objects/2hswords.lua
@@ -31,6 +31,7 @@ newEntity{
 	desc = [[Massive two-handed swords.]],
 	twohanded = true,
 	metallic = true,
+	ego_bonus_mult = 0.2,
 	randart_able = { attack=40, physical=80, spell=20, def=10, misc=10 },
 	egos = "/data/general/objects/egos/weapon.lua", egos_chance = { prefix=resolvers.mbonus(40, 5), suffix=resolvers.mbonus(40, 5) },
 }
diff --git a/game/modules/tome/data/general/objects/2htridents.lua b/game/modules/tome/data/general/objects/2htridents.lua
index 51c58e9b6f..0143b12bb3 100644
--- a/game/modules/tome/data/general/objects/2htridents.lua
+++ b/game/modules/tome/data/general/objects/2htridents.lua
@@ -33,6 +33,7 @@ newEntity{
 	desc = [[A two-handed massive trident.
 Tridents require the exotic weapons mastery talent to use correctly.]],
 	twohanded = true,
+	ego_bonus_mult = 0.2,
 	randart_able = { attack=40, physical=80, spell=20, def=10, misc=10 },
 	egos = "/data/general/objects/egos/weapon.lua", egos_chance = { prefix=resolvers.mbonus(40, 5), suffix=resolvers.mbonus(40, 5) },
 }
diff --git a/game/modules/tome/data/general/objects/boss-artifacts.lua b/game/modules/tome/data/general/objects/boss-artifacts.lua
index 159483ce98..68fec8024a 100644
--- a/game/modules/tome/data/general/objects/boss-artifacts.lua
+++ b/game/modules/tome/data/general/objects/boss-artifacts.lua
@@ -68,7 +68,7 @@ newEntity{ base = "BASE_LITE", define_as = "WINTERTIDE_PHIAL",
 	rarity = 200,
 	encumber = 2,
 	cost = 50,
-	material_level = 2,
+	material_level = 1,
 
 	wielder = {
 		lite = 1,
@@ -114,6 +114,7 @@ newEntity{ base = "BASE_AMULET",
 	level_range = {32, 42},
 	rarity = 220,
 	cost = 190,
+	material_level = 3,
 	wielder = {
 		inc_stats = { [Stats.STAT_MAG] = 5, [Stats.STAT_WIL] = 4, [Stats.STAT_CUN] = 3 },
 		combat_spellpower = 7,
@@ -143,6 +144,7 @@ newEntity{ base = "BASE_LEATHER_BOOT",
 	desc = [[A pair of leather boots. Cold to the touch, they radiate a cold blue light.]],
 	require = { stat = { dex=16 }, },
 	level_range = {10, 18},
+	material_level = 2,
 	rarity = 220,
 	cost = 40,
 
@@ -169,6 +171,7 @@ newEntity{ base = "BASE_HELM",
 	desc = [[Traces of a dragon's power still remain in this bleached and cracked skull.]],
 	require = { stat = { wil=24 }, },
 	level_range = {45, 50},
+	material_level = 5,
 	rarity = 280,
 	cost = 200,
 
@@ -311,7 +314,7 @@ newEntity{ base = "BASE_RING",
 	level_range = {15, 23},
 	rarity = 250,
 	cost = 500,
-	material_level = 4,
+	material_level = 2,
 	wielder = {
 		max_stamina = 25,
 		combat_def = 6,
@@ -338,7 +341,7 @@ newEntity{ base = "BASE_HELM",
 	level_range = {12, 22},
 	rarity = 200,
 	cost = 20,
-	material_level = 3,
+	material_level = 2,
 	skullcracker_mult = 5,
 
 	wielder = {
@@ -454,6 +457,7 @@ newEntity{ base = "BASE_CLOTH_ARMOR",
 	level_range = {40, 50},
 	rarity = 280,
 	cost = 500,
+	material_level = 5,
 	wielder = {
 		inc_stats = { [Stats.STAT_MAG] = 5, [Stats.STAT_WIL] = 4, [Stats.STAT_CUN] = 3 },
 		see_invisible = 10,
@@ -480,6 +484,7 @@ newEntity{ base = "BASE_WARAXE",
 	level_range = {35, 45},
 	rarity = 290,
 	cost = 375,
+	material_level = 4,
 	combat = {
 		dam = 55,
 		apr = 15,
@@ -504,6 +509,7 @@ newEntity{ base = "BASE_STAFF",
 	level_range = {1, 10},
 	rarity = 200,
 	cost = 60,
+	material_level = 1,
 	combat = {
 		dam = 10,
 		apr = 0,
@@ -533,6 +539,7 @@ newEntity{ base = "BASE_AMULET",
 	level_range = {40, 50},
 	rarity = 220,
 	cost = 3000,
+	material_level = 5,
 	wielder = {
 		see_invisible = 20,
 		silence_immune = 0.8,
@@ -555,6 +562,7 @@ newEntity{ base = "BASE_STAFF",
 	level_range = {40, 50},
 	rarity = 210,
 	encumber = 2.5,
+	material_level = 5,
 	cost = 500,
 	combat = {
 		dam = 35,
@@ -579,6 +587,7 @@ newEntity{ base = "BASE_AMULET",
 	level_range = {20, 28},
 	rarity = 220,
 	cost = 5000,
+	material_level = 3,
 	wielder = {
 		see_invisible = 10,
 		blind_immune = 1,
@@ -671,6 +680,7 @@ newEntity{ base = "BASE_GREATMAUL",
 	desc = [[This is a big, nasty-looking tree trunk that Bill the Troll used as a weapon. It could still serve this purpose, should you be strong enough to wield it!]],
 	require = { stat = { str=25 }, },
 	level_range = {1, 10},
+	material_level = 1,
 	rarity = 200,
 	metallic = false,
 	cost = 70,
@@ -695,6 +705,7 @@ newEntity{ base = "BASE_SHIELD",
 	desc = [[Though tarnished and spattered with blood, the emblem of the Sun still manages to shine through on this shield.]],
 	require = { stat = { str=39 }, },
 	level_range = {35, 45},
+	material_level = 4,
 	rarity = 240,
 	cost = 120,
 
@@ -1001,6 +1012,7 @@ newEntity{ base = "BASE_WARAXE",
 	desc = [[A small but sharp axe, with a handle made of polished bone.  The blade has chopped through the skulls of many, and has been stained a deep crimson.]],
 	require = { stat = { str=18 }, },
 	level_range = {5, 12},
+	material_level = 1,
 	rarity = 220,
 	cost = 50,
 	combat = {
@@ -1024,7 +1036,7 @@ newEntity{ base = "BASE_DIGGER",
 	desc = [[A huge tooth taken from the Mouth, in the Deep Bellow.]],
 	level_range = {5, 12},
 	cost = 50,
-	material_level = 3,
+	material_level = 1,
 	digspeed = 12,
 	wielder = {
 		inc_damage = { [DamageType.BLIGHT] = 4 },
@@ -1060,7 +1072,7 @@ newEntity{ base = "BASE_HEAVY_BOOTS",
 }
 
 newEntity{ base = "BASE_BATTLEAXE",
-	power_source = {nature=true,},
+	power_source = {nature=true, antimagic=true},
 	define_as = "GAPING_MAW",
 	name = "The Gaping Maw", color = colors.SLATE, image = "object/artifact/battleaxe_the_gaping_maw.png",
 	unided_name = "huge granite battleaxe", unique = true,
@@ -1069,7 +1081,7 @@ newEntity{ base = "BASE_BATTLEAXE",
 	rarity = 300,
 	require = { stat = { str=60 }, },
 	cost = 650,
-	material_level = 4,
+	material_level = 5,
 	combat = {
 		dam = 72,
 		apr = 4,
@@ -1078,20 +1090,26 @@ newEntity{ base = "BASE_BATTLEAXE",
 		melee_project={[DamageType.SLIME] = 50, [DamageType.ACID] = 50},
 	},
 	wielder = {
-		inc_stats = { [Stats.STAT_STR] = 6, [Stats.STAT_WIL] = 6, },
-		inc_damage={
-			[DamageType.NATURE] = 15,
-		},
 		talent_cd_reduction= {
 			[Talents.T_SWALLOW] = 2,
 			[Talents.T_MANA_CLASH] = 2,
 			[Talents.T_ICE_CLAW] = 1,
 		},
 	},
+	on_wear = function(self, who)
+		if who:attr("forbid_arcane") then
+			local Stats = require "engine.interface.ActorStats"
+			local DamageType = require "engine.DamageType"
+	
+			self:specialWearAdd({"wielder","inc_damage"}, {[DamageType.NATURE]=15})
+			self:specialWearAdd({"wielder","inc_stats"}, { [Stats.STAT_STR] = 6, [Stats.STAT_WIL] = 6, })
+			game.logPlayer(who, "#DARK_GREEN#You feel like Nature's Wrath incarnate!")
+		end
+	end,
 }
 
 newEntity{ base = "BASE_AMULET",
-	power_source = {nature=true},
+	power_source = {psionic=true},
 	define_as = "WITHERING_ORBS",
 	unique = true,
 	name = "Withering Orbs", color = colors.WHITE, image = "object/artifact/artifact_jewelry_withering_orbs.png",
@@ -1127,7 +1145,7 @@ Though clearly a powerful piece, it must once have been much greater.]],
 	rarity = 200,
 	require = { stat = { str=35 }, },
 	cost = 500,
-	material_level = 5,
+	material_level = 3,
 	wielder = {
 		combat_def = 10,
 		combat_armor = 15,
@@ -1150,7 +1168,7 @@ Though clearly a powerful piece, it must once have been much greater.]],
 }
 
 newEntity{ base = "BASE_LEATHER_CAP", -- No armor training requirement
-	power_source = {nature=true},
+	power_source = {psionic=true},
 	define_as = "ALETTA_DIADEM",
 	name = "Aletta's Diadem", unique=true, unided_name="jeweled diadem", image = "object/artifact/diadem_alettas_diadem.png",
 	desc = [[A filigree of silver set with many small jewels, this diadem seems radiant - ethereal almost. But its touch seems to freeze your skin and brings wild thoughts to your mind. You want to drop it, throw it away, and yet you cannot resist thinking of what powers it might bring you.
@@ -1173,7 +1191,7 @@ Is this temptation a weak will on your part, or some domination from the artifac
 }
 
 newEntity{ base = "BASE_SLING",
-	power_source = {technique=true},
+	power_source = {nature=true},
 	define_as = "HARESKIN_SLING",
 	name = "Hare-Skin Sling", unique=true, unided_name = "hare-skin sling", image = "object/artifact/sling_hareskin_sling.png",
 	desc = [[This well-tended sling is made from the leather and sinews of a large hare. It feels smooth to the touch yet very durable. Some say that the skin of a hare brings luck and fortune.
@@ -1182,7 +1200,7 @@ Hard to tell if that really helped its former owner, but it's clear that the ski
 	rarity = 200,
 	require = { stat = { dex=35 }, },
 	cost = 50,
-	material_level = 4,
+	material_level = 3,
 	use_no_energy = true,
 	combat = {
 		range = 10,
@@ -1200,7 +1218,7 @@ Hard to tell if that really helped its former owner, but it's clear that the ski
 }
 
 newEntity{ base = "BASE_TOOL_MISC",
-	power_source = {nature=true},
+	power_source = {arcane=true},
 	define_as = "LUCKY_FOOT",
 	unique = true,
 	name = "Prox's Lucky Halfling Foot", color = colors.WHITE,
diff --git a/game/modules/tome/data/general/objects/bows.lua b/game/modules/tome/data/general/objects/bows.lua
index 43b95d1f7d..c604aefa94 100644
--- a/game/modules/tome/data/general/objects/bows.lua
+++ b/game/modules/tome/data/general/objects/bows.lua
@@ -105,7 +105,7 @@ newEntity{
 	type = "ammo", subtype="arrow",
 	add_name = " (#COMBAT_AMMO#)",
 	display = "{", color=colors.UMBER, image = resolvers.image_material("arrow", "wood"),
-	encumber = 5,
+	encumber = 3,
 	rarity = 11,
 	combat = {
 		talented = "bow",
diff --git a/game/modules/tome/data/general/objects/egos/ammo.lua b/game/modules/tome/data/general/objects/egos/ammo.lua
index 77f431b0cd..b206d2304e 100644
--- a/game/modules/tome/data/general/objects/egos/ammo.lua
+++ b/game/modules/tome/data/general/objects/egos/ammo.lua
@@ -25,6 +25,7 @@ newEntity{
 	keywords = {quick=true},
 	level_range = {1, 50},
 	rarity = 5,
+	cost = 6,
 	wielder = {
 		ammo_reload_speed = resolvers.mbonus_material(4, 1),
 	},
@@ -36,6 +37,7 @@ newEntity{
 	keywords = {capacity=true},
 	level_range = {1, 50},
 	rarity = 5,
+	cost = 6,
 	combat = {
 		capacity = resolvers.generic(function(e) return e.combat.capacity * rng.float(1.3, 1.6) end),
 	},
@@ -47,6 +49,7 @@ newEntity{
 	keywords = {self=true},
 	level_range = {1, 50},
 	rarity = 5,
+	cost = 6,
 	combat = {
 		ammo_regen = resolvers.mbonus_material(3, 1),
 	},
@@ -62,6 +65,7 @@ newEntity{
 	level_range = {1, 50},
 	rarity = 7,
 	greater_ego = 1,
+	cost = 6,
 	combat = {
 		capacity = resolvers.generic(function(e) return e.combat.capacity * rng.float(1.2, 1.5) end),
 	},
@@ -77,6 +81,7 @@ newEntity{
 	level_range = {1, 50},
 	rarity = 7,
 	greater_ego = 1,
+	cost = 6,
 	combat = {
 		ammo_regen = resolvers.mbonus_material(3, 1),
 	},
@@ -95,6 +100,7 @@ newEntity{
 	level_range = {1, 50},
 	rarity = 7,
 	greater_ego = 1,
+	cost = 6,
 	combat = {
 		ammo_regen = resolvers.mbonus_material(3, 1),
 		capacity = resolvers.generic(function(e) return e.combat.capacity * rng.float(1.2, 1.5) end),
@@ -110,6 +116,7 @@ newEntity{
 	keywords = {fire=true},
 	level_range = {1, 50},
 	rarity = 5,
+	cost = 6,
 	combat = {
 		ranged_project={[DamageType.FIRE] = resolvers.mbonus_material(20, 5)},
 	},
@@ -120,6 +127,7 @@ newEntity{
 	keywords = {ice=true},
 	level_range = {15, 50},
 	rarity = 5,
+	cost = 6,
 	combat = {
 		ranged_project={[DamageType.ICE] = resolvers.mbonus_material(10, 4)},
 	},
@@ -130,6 +138,7 @@ newEntity{
 	keywords = {cunning=true},
 	level_range = {1, 50},
 	rarity = 5,
+	cost = 6,
 	combat = {
 		ranged_project={[DamageType.ACID] = resolvers.mbonus_material(20, 5)},
 	},
@@ -140,6 +149,7 @@ newEntity{
 	keywords = {lightning=true},
 	level_range = {1, 50},
 	rarity = 5,
+	cost = 6,
 	combat = {
 		ranged_project={[DamageType.LIGHTNING] = resolvers.mbonus_material(20, 5)},
 	},
@@ -151,6 +161,7 @@ newEntity{
 	keywords = {slime=true},
 	level_range = {10, 50},
 	rarity = 5,
+	cost = 6,
 	combat = {
 		ranged_project={[DamageType.SLIME] = resolvers.mbonus_material(10, 4)},
 	},
@@ -163,6 +174,7 @@ newEntity{
 	level_range = {1, 50},
 	rarity = 3,
 	cost = 4,
+	cost = 6,
 	combat = {
 		atk = resolvers.mbonus_material(20, 5),
 	},
@@ -192,6 +204,7 @@ newEntity{
 	keywords = {wind=true},
 	level_range = {10, 50},
 	rarity = 7,
+	cost = 6,
 	combat = {
 		travel_speed = 200,
 	},
@@ -203,7 +216,7 @@ newEntity{
 	keywords = {annihilation=true},
 	level_range = {30, 50},
 	greater_ego = 1,
-	cost = 1,
+	cost = 6,
 	rarity = 15,
 	combat = {
 		dam = resolvers.mbonus_material(10, 2),
diff --git a/game/modules/tome/data/general/objects/egos/mindstars.lua b/game/modules/tome/data/general/objects/egos/mindstars.lua
index 30c54b95fd..b0b353ca69 100644
--- a/game/modules/tome/data/general/objects/egos/mindstars.lua
+++ b/game/modules/tome/data/general/objects/egos/mindstars.lua
@@ -31,3 +31,257 @@ newEntity{
 		combat_mindpower = resolvers.mbonus_material(16, 3),
 	},
 }
+
+-------------------------------------------------------
+--Nature and Antimagic---------------------------------
+-------------------------------------------------------
+ newEntity{
+	power_source = {arcane=true},
+	power_source = {nature=true},
+	name = "summoner's	", prefix=true, instant_resolve=true,
+	keywords = {summoners=true},
+	level_range = {1, 50},
+	rarity = 4,
+	cost = 8,
+	wielder = {
+		combat_mindpower = resolvers.mbonus_material(16, 3),
+	},
+}
+
+newEntity{
+	power_source = {nature=true},
+	name = "druid's ", prefix=true, instant_resolve=true,
+	keywords = {druid=true},
+	level_range = {1, 50},
+	rarity = 4,
+	cost = 8,
+	wielder = {
+		combat_mindpower = resolvers.mbonus_material(16, 3),
+	},
+}
+
+newEntity{
+	power_source = {nature=true},
+	name = "nature's ", prefix=true, instant_resolve=true,
+	keywords = {nature=true},
+	level_range = {1, 50},
+	rarity = 4,
+	cost = 8,
+	wielder = {
+		combat_mindpower = resolvers.mbonus_material(16, 3),
+	},
+}
+
+newEntity{
+	power_source = {nature=true},
+	name = "wyrmic's ", prefix=true, instant_resolve=true,
+	keywords = {wyrmic=true},
+	level_range = {1, 50},
+	rarity = 4,
+	cost = 8,
+	wielder = {
+		combat_mindpower = resolvers.mbonus_material(16, 3),
+	},
+}
+
+newEntity{
+	power_source = {nature=true},
+	name = " of harmony", suffix=true, instant_resolve=true,
+	keywords = {harmony=true},
+	level_range = {1, 50},
+	rarity = 4,
+	cost = 8,
+	wielder = {
+		combat_mindpower = resolvers.mbonus_material(16, 3),
+	},
+}
+
+newEntity{
+	power_source = {nature=true},
+	name = "fire-drake's ", prefix=true, instant_resolve=true,
+	keywords = {fire=true},
+	level_range = {30, 50},
+	greater_ego = 1,
+	rarity = 40,
+	cost = 40,
+	wielder = {
+		combat_mindpower = resolvers.mbonus_material(16, 3),
+	},
+}
+
+newEntity{
+	power_source = {nature=true},
+	name = "cold-drake's ", prefix=true, instant_resolve=true,
+	keywords = {cold=true},
+	level_range = {30, 50},
+	greater_ego = 1,
+	rarity = 40,
+	cost = 40,
+	wielder = {
+		combat_mindpower = resolvers.mbonus_material(16, 3),
+	},
+}
+
+newEntity{
+	power_source = {nature=true},
+	name = "storm-drake's ", prefix=true, instant_resolve=true,
+	keywords = {storm=true},
+	level_range = {30, 50},
+	greater_ego = 1,
+	rarity = 40,
+	cost = 40,
+	wielder = {
+		combat_mindpower = resolvers.mbonus_material(16, 3),
+	},
+}
+
+newEntity{
+	power_source = {nature=true},
+	name = "sand-drake's ", prefix=true, instant_resolve=true,
+	keywords = {storm=true},
+	level_range = {30, 50},
+	greater_ego = 1,
+	rarity = 40,
+	cost = 40,
+	wielder = {
+		combat_mindpower = resolvers.mbonus_material(16, 3),
+	},
+}
+
+newEntity{
+	power_source = {nature=true},
+	name = " of calling", suffix=true, instant_resolve=true,
+	keywords = {calling=true},
+	level_range = {30, 50},
+	greater_ego = 1,
+	rarity = 40,
+	cost = 40,
+	wielder = {
+		combat_mindpower = resolvers.mbonus_material(16, 3),
+	},
+}
+
+newEntity{
+	power_source = {nature=true},
+	name = " of the arch-druid", suffix=true, instant_resolve=true,
+	keywords = {archdruid=true},
+	level_range = {30, 50},
+	greater_ego = 1,
+	rarity = 40,
+	cost = 40,
+	wielder = {
+		combat_mindpower = resolvers.mbonus_material(16, 3),
+	},
+}
+
+newEntity{
+	power_source = {nature=true},
+	name = " of the great-wyrm", suffix=true, instant_resolve=true,
+	keywords = {wyrm=true},
+	level_range = {30, 50},
+	greater_ego = 1,
+	rarity = 40,
+	cost = 40,
+	wielder = {
+		combat_mindpower = resolvers.mbonus_material(16, 3),
+	},
+}
+
+-------------------------------------------------------
+--Psionic----------------------------------------------
+-------------------------------------------------------
+newEntity{
+	power_source = {psionic=true},
+	name = "gifted ", prefix=true, instant_resolve=true,
+	keywords = {gifted=true},
+	level_range = {1, 50},
+	rarity = 4,
+	cost = 8,
+	wielder = {
+		combat_mindpower = resolvers.mbonus_material(16, 3),
+	},
+}
+
+newEntity{
+	power_source = {psionic=true},
+	name = "psychic's ", prefix=true, instant_resolve=true,
+	keywords = {psychic=true},
+	level_range = {1, 50},
+	rarity = 4,
+	cost = 8,
+	wielder = {
+		combat_mindpower = resolvers.mbonus_material(16, 3),
+	},
+}
+
+newEntity{
+	power_source = {psionic=true},
+	name = " of clarity", suffix=true, instant_resolve=true,
+	keywords = {power=true},
+	level_range = {1, 50},
+	rarity = 4,
+	cost = 8,
+	wielder = {
+		combat_mindpower = resolvers.mbonus_material(16, 3),
+	},
+}
+
+newEntity{
+	power_source = {psionic=true},
+	name = " of nightmares", suffix=true, instant_resolve=true,
+	keywords = {night=true},
+	level_range = {1, 50},
+	rarity = 4,
+	cost = 8,
+	wielder = {
+		combat_mindpower = resolvers.mbonus_material(16, 3),
+	},
+}
+
+newEntity{
+	power_source = {psionic=true},
+ 	name = " of power", suffix=true, instant_resolve=true,
+ 	keywords = {power=true},
+ 	level_range = {1, 50},
+	wielder = {
+ 		combat_mindpower = resolvers.mbonus_material(16, 3),
+ 	},
+ }
+
+newEntity{
+	power_source = {psionic=true},
+	name = " of shrouds", suffix=true, instant_resolve=true,
+	keywords = {shrouds=true},
+	level_range = {1, 50},
+	rarity = 4,
+	cost = 8,
+	wielder = {
+		combat_mindpower = resolvers.mbonus_material(16, 3),
+	},
+}
+
+newEntity{
+	power_source = {psionic=true},
+	name = "spire dragon's ", prefix=true, instant_resolve=true,
+	keywords = {spire=true},
+	level_range = {30, 50},
+	greater_ego = 1,
+	rarity = 40,
+	cost = 40,
+	wielder = {
+		combat_mindpower = resolvers.mbonus_material(16, 3),
+	},
+}
+
+newEntity{
+	power_source = {psionic=true},
+	name = " of convergence", suffix=true, instant_resolve=true,
+	keywords = {conv=true},
+	level_range = {30, 50},
+	greater_ego = 1,
+	rarity = 40,
+	cost = 40,
+	wielder = {
+		combat_mindpower = resolvers.mbonus_material(16, 3),
+	},
+}
\ No newline at end of file
diff --git a/game/modules/tome/data/general/objects/egos/weapon.lua b/game/modules/tome/data/general/objects/egos/weapon.lua
index 22d8fd0e59..a81e7674a3 100644
--- a/game/modules/tome/data/general/objects/egos/weapon.lua
+++ b/game/modules/tome/data/general/objects/egos/weapon.lua
@@ -22,140 +22,172 @@
 local Stats = require "engine.interface.ActorStats"
 local Talents = require "engine.interface.ActorTalents"
 
-newEntity{
-	power_source = {arcane=true},
-	name = "flaming ", prefix=true, instant_resolve=true,
-	keywords = {flaming=true},
+-- Idea: Giant(technique, chance to stun on hit and increased weight), Sharp, Jagged, Deft  (of deftness-quick swap),
+-- Wolf, Bear, Snake based nature egos (maybe wolf could summon wolves),
+-- TODO: Talk to Darkgod about instant_resolve
+-------------------------------------------------------
+-- Techniques------------------------------------------
+-------------------------------------------------------
+-- Craftsmanship based egos multiply the bonuses on any other ego applied and may have other minor bonuses based on item type
+--[[newEntity{
+	power_source = {technique=true},
+	name = "fine ", prefix=true, instant_resolve=true,
+	keywords = {fine=true},
 	level_range = {1, 50},
-	rarity = 5,
-	combat = {
-		melee_project={[DamageType.FIRE] = resolvers.mbonus_material(25, 4)},
-	},
-}
-newEntity{
-	power_source = {arcane=true},
-	name = "icy ", prefix=true, instant_resolve=true,
-	keywords = {icy=true},
-	level_range = {15, 50},
-	rarity = 5,
+	rarity = 60,
+	cost = 30,
+	ego_bonus_mult = 0.2,
 	combat = {
-		melee_project={[DamageType.ICE] = resolvers.mbonus_material(15, 4)},
+		dam = 2,
+		apr = 2,
+		physcrit = 2,
 	},
 }
+
 newEntity{
-	power_source = {nature=true},
-	name = "acidic ", prefix=true, instant_resolve=true,
-	keywords = {acidic=true},
+	power_source = {technique=true},
+	name = " of quality", suffix=true, instant_resolve=true,
+	keywords = {quality=true},
 	level_range = {1, 50},
-	rarity = 5,
+	rarity = 60,
+	cost = 30,
+	ego_bonus_mult = 0.2,
 	combat = {
-		melee_project={[DamageType.ACID] = resolvers.mbonus_material(25, 4)},
+		dam = 2,
+		apr = 2,
+		physcrit = 2,
 	},
 }
+
 newEntity{
-	power_source = {arcane=true},
-	name = "shocking ", prefix=true, instant_resolve=true,
-	keywords = {shocking=true},
-	level_range = {1, 50},
-	rarity = 5,
+	power_source = {technique=true},
+	name = "exceptional ", prefix=true, instant_resolve=true,
+	keywords = {except=true},
+	greater_ego = 1,
+	level_range = {25, 50},
+	rarity = 60,
+	cost = 60,
+	ego_bonus_mult = 0.4,
 	combat = {
-		melee_project={[DamageType.LIGHTNING] = resolvers.mbonus_material(25, 4)},
+		dam = 4,
+		apr = 4,
+		physcrit = 4,
 	},
 }
 
 newEntity{
-	power_source = {nature=true},
-	name = "poisonous ", prefix=true, instant_resolve=true,
-	keywords = {poisonous=true},
-	level_range = {1, 50},
-	rarity = 5,
+	power_source = {technique=true},
+	name = " of the master", suffix=true, instant_resolve=true,
+	keywords = {master=true},
+	greater_ego = 1,
+	level_range = {25, 50},
+	rarity = 60,
+	cost = 60,
+	ego_bonus_mult = 0.4,
 	combat = {
-		melee_project={[DamageType.POISON] = resolvers.mbonus_material(45, 6)},
+		dam = 4,
+		apr = 4,
+		physcrit = 4,
 	},
-}
-
+}]]--
+-- Lesser
 newEntity{
-	power_source = {nature=true},
-	name = "slime-covered ", prefix=true, instant_resolve=true,
-	keywords = {slime=true},
-	level_range = {10, 50},
+	power_source = {technique=true},
+	name = "balanced ", prefix=true, instant_resolve=true,
+	keywords = {balanced=true},
+	level_range = {1, 50},
 	rarity = 5,
-	combat = {
-		melee_project={[DamageType.SLIME] = resolvers.mbonus_material(45, 6)},
+	cost = 15,
+	wielder={
+		combat_atk = resolvers.mbonus_material(10, 2),
+		combat_def = resolvers.mbonus_material(10, 2),
 	},
 }
 
 newEntity{
 	power_source = {technique=true},
-	name = " of accuracy", suffix=true, instant_resolve=true,
-	keywords = {accuracy=true},
+	name = " of crippling", suffix=true, instant_resolve=true,
+	keywords = {crippling=true},
 	level_range = {1, 50},
 	rarity = 3,
 	cost = 4,
-	wielder={combat_atk = resolvers.mbonus_material(20, 5)},
+	wielder = {
+		combat_physcrit = resolvers.mbonus_material(10, 2),
+	},
+	combat = {
+		special_on_crit = {desc="cripple the target", fct=function(combat, who, target)
+			local power = 5 + (who:combatPhysicalpower()/5)
+			target:setEffect(target.EFF_CRIPPLE, 4, {src=who, atk=power, dam=power, apply_power=who:combatAttack(combat)})
+		end},
+	},
 }
 
 newEntity{
-	power_source = {arcane=true},
-	name = "phase ", prefix=true, instant_resolve=true,
-	keywords = {phase=true},
+	power_source = {technique=true},
+	name = " of massacre", suffix=true, instant_resolve=true,
+	keywords = {massacre=true},
 	level_range = {1, 50},
 	rarity = 3,
-	cost = 6,
-	combat={apr = resolvers.mbonus_material(20, 5)},
+	cost = 4,
+	combat = {
+		dam = resolvers.mbonus_material(10, 2),
+	},
 }
 
+-- Greater 
 newEntity{
-	power_source = {arcane=true},
-	name = "elemental ", prefix=true, instant_resolve=true,
-	keywords = {elemental=true},
-	level_range = {35, 50},
+	power_source = {technique=true},
+	name = "quick ", prefix=true, instant_resolve=true,
+	keywords = {quick=true},
+	level_range = {30, 50},
 	greater_ego = 1,
 	rarity = 25,
-	cost = 35,
-	combat = {
-		melee_project={
-			[DamageType.FIRE] = resolvers.mbonus_material(25, 4),
-			[DamageType.ICE] = resolvers.mbonus_material(15, 4),
-			[DamageType.ACID] = resolvers.mbonus_material(25, 4),
-			[DamageType.LIGHTNING] = resolvers.mbonus_material(25, 4),
+	cost = 30,
+	combat = { physspeed = -0.1 },
+	wielder = {
+		combat_atk = resolvers.mbonus_material(10, 2),
+		inc_stats = {
+			[Stats.STAT_DEX] = resolvers.mbonus_material(6, 1),
 		},
 	},
 }
 
 newEntity{
 	power_source = {technique=true},
-	name = " of massacre", suffix=true, instant_resolve=true,
-	keywords = {massacre=true},
-	level_range = {1, 50},
-	rarity = 3,
-	cost = 4,
-	combat = {
-		dam = resolvers.mbonus_material(15, 5),
+	name = "warbringer's ", prefix=true, instant_resolve=true,
+	keywords = {warbringer=true},
+	level_range = {30, 50},
+	greater_ego = 1,
+	rarity = 30,
+	cost = 40,
+	wielder = {
+		inc_stats = {
+			[Stats.STAT_CON] = resolvers.mbonus_material(6, 1),
+		},
+		disarm_immune = resolvers.mbonus_material(25, 5, function(e, v) v=v/100 return 0, v end),
+		combat_dam = resolvers.mbonus_material(10, 2),
+		resists_pen = {
+			[DamageType.PHYSICAL] = resolvers.mbonus_material(10, 2),
+		},
 	},
 }
 
 newEntity{
-	power_source = {arcane=true},
-	name = " of torment", suffix=true, instant_resolve=true,
-	keywords = {torment=true},
-	level_range = {15, 50},
-	rarity = 18,
-	cost = 22,
-	combat = {
-		special_on_hit = {desc="10% chance to torment the target", fct=function(combat, who, target)
-			if not rng.percent(10) then return end
-			local eff = rng.table{"stun", "blind", "pin", "teleport", "stone", "confusion", "silence", "knockback"}
-			if not target:canBe(eff) then return end
-			if not target:checkHit(who:combatAttack(combat), target:combatPhysicalResist(), 15) then return end
-			if eff == "stun" then target:setEffect(target.EFF_STUNNED, 3, {})
-			elseif eff == "blind" then target:setEffect(target.EFF_BLINDED, 3, {})
-			elseif eff == "pin" then target:setEffect(target.EFF_PINNED, 3, {})
-			elseif eff == "confusion" then target:setEffect(target.EFF_CONFUSED, 3, {power=60})
-			elseif eff == "silence" then target:setEffect(target.EFF_SILENCED, 3, {})
-			elseif eff == "knockback" then target:knockback(who.x, who.y, 3)
-			elseif eff == "teleport" then target:teleportRandom(target.x, target.y, 10)
-			end
+	power_source = {technique=true},
+	name = " of evisceration", suffix=true, instant_resolve=true ,
+	keywords = {evisc=true},
+	level_range = {30, 50},
+	greater_ego = 1,
+	rarity = 20,
+	cost = 40,
+	wielder = {
+		combat_physcrit = resolvers.mbonus_material(10, 2),
+		combat_dam = resolvers.mbonus_material(10, 2),
+	},
+	combat = { 
+		special_on_crit = {desc="wounds the target", fct=function(combat, who, target)
+			local dam = 5 + (who:combatPhysicalpower()/5)
+			target:setEffect(target.EFF_DEEP_WOUND, 7, {src=who, heal_factor=dam * 2, power=dam, apply_power=who:combatAttack()})
 		end},
 	},
 }
@@ -171,369 +203,781 @@ newEntity{
 	wielder = {
 		combat_atk = resolvers.mbonus_material(10, 2),
 		inc_damage = {
-			[DamageType.PHYSICAL] = resolvers.mbonus_material(15, 4),
+			[DamageType.PHYSICAL] = resolvers.mbonus_material(10, 2),
 		},
 		inc_stats = {
-			[Stats.STAT_DEX] = resolvers.mbonus_material(4, 3),
-			[Stats.STAT_STR] = resolvers.mbonus_material(4, 3),
+			[Stats.STAT_STR] = resolvers.mbonus_material(6, 1),
 		},
-		stamina_regen_on_hit = resolvers.mbonus_material(23, 7, function(e, v) v=v/10 return 0, v end),
+		stamina_regen_on_hit = resolvers.mbonus_material(20, 5, function(e, v) v=v/10 return 0, v end),
 	},
-	combat = {
-		apr = resolvers.mbonus_material(8, 1),
+}
+
+newEntity{
+	power_source = {technique=true},
+	name = " of ruin", suffix=true, instant_resolve=true,
+	keywords = {ruin=true},
+	level_range = {30, 50},
+	greater_ego = 1,
+	rarity = 20,
+	cost = 25,
+	wielder = {
+		combat_physcrit = resolvers.mbonus_material(10, 2),
+		combat_critical_power = resolvers.mbonus_material(10, 10),
+		combat_apr = resolvers.mbonus_material(10, 2),
 	},
 }
 
 newEntity{
-	power_source = {arcane=true},
-	name = " of corruption", suffix=true, instant_resolve=true,
-	keywords = {corruption=true},
-	level_range = {35, 50},
+	power_source = {technique=true},
+	name = " of shearing", suffix=true, instant_resolve=true,
+	keywords = {shearing=true},
+	level_range = {30, 50},
 	greater_ego = 1,
 	rarity = 20,
-	cost = 35,
+	cost = 40,
+	wielder = {
+		combat_apr = resolvers.mbonus_material(10, 2),
+		inc_damage = {
+			[DamageType.PHYSICAL] = resolvers.mbonus_material(10, 2),
+		},
+		resists_pen = {
+			[DamageType.PHYSICAL] = resolvers.mbonus_material(10, 2),
+		},
+	},
+}
+
+-------------------------------------------------------
+-- Arcane Egos-----------------------------------------
+-------------------------------------------------------
+newEntity{
+	power_source = {arcane=true},
+	name = "acidic ", prefix=true, instant_resolve=true,
+	keywords = {acidic=true},
+	level_range = {1, 50},
+	rarity = 5,
+	cost = 10,
 	combat = {
 		melee_project={
-			[DamageType.BLIGHT] = resolvers.mbonus_material(25, 4),
-			[DamageType.DARKNESS] = resolvers.mbonus_material(25, 4),
+			[DamageType.ACID] = resolvers.mbonus_material(15, 4)
 		},
+		special_on_crit = {desc="splashes the target", fct=function(combat, who, target)
+			local power = 5 + (who:combatSpellpower()/10)
+			target:setEffect(target.EFF_ACID_SPLASH, 5, {src=who, dam=power, atk=power, armor=power})
+		end},
 	},
-	wielder = {
-		see_invisible = resolvers.mbonus_material(20, 5),
-		combat_physcrit = resolvers.mbonus_material(10, 4),
+}
+
+newEntity{
+	power_source = {arcane=true},
+	name = "flaming ", prefix=true, instant_resolve=true,
+	keywords = {flaming=true},
+	level_range = {1, 50},
+	rarity = 5,
+	cost = 10,
+	combat = {
+		burst_on_hit={
+			[DamageType.FIRE] = resolvers.mbonus_material(15, 4)
+		},
 	},
 }
 
 newEntity{
-	power_source = {technique=true},
-	name = " of crippling", suffix=true, instant_resolve=true,
-	keywords = {crippling=true},
+	power_source = {arcane=true},
+	name = "icy ", prefix=true, instant_resolve=true,
+	keywords = {icy=true},
+	level_range = {15, 50},
+	rarity = 5,
+	cost = 10,
+	combat = {
+		melee_project={
+			[DamageType.ICE] = resolvers.mbonus_material(15, 4)
+		},
+	},
+}
+
+newEntity{
+	power_source = {arcane=true},
+	name = "arcing ", prefix=true, instant_resolve=true,
+	keywords = {shocking=true},
 	level_range = {1, 50},
-	rarity = 3,
-	cost = 4,
-	wielder = {
-		combat_physcrit = resolvers.mbonus_material(7, 3),
+	rarity = 5,
+	cost = 10,
+	combat = {
+		melee_project={
+			[DamageType.LIGHTNING] = resolvers.mbonus_material(15, 4),
+		},
+		special_on_hit = {desc="25% chance for lightning to arc to a second target", fct=function(combat, who, target)
+			if not rng.percent(25) then return end
+			local tgts = {}
+			local x, y = target.x, target.y
+			local grids = core.fov.circle_grids(x, y, 5, true)
+			for x, yy in pairs(grids) do for y, _ in pairs(grids[x]) do
+				local a = game.level.map(x, y, engine.Map.ACTOR)
+				if a and a ~= target and who:reactionToward(a) < 0 then
+					tgts[#tgts+1] = a
+				end
+			end end
+
+			-- Randomly take targets
+			local tg = {type="beam", range=5, friendlyfire=false}
+			if #tgts <= 0 then return end
+			local a, id = rng.table(tgts)
+			table.remove(tgts, id)
+			local dam = 30 + (who:combatSpellpower())
+			
+			who:project(tg, a.x, a.y, engine.DamageType.LIGHTNING, rng.avg(1, dam, 3))
+			game.level.map:particleEmitter(x, y, math.max(math.abs(a.x-x), math.abs(a.y-y)), "lightning", {tx=a.x-x, ty=a.y-y})
+			game:playSoundNear(who, "talents/lightning")
+		end},
 	},
 }
 
 newEntity{
-	power_source = {nature=true},
+	power_source = {arcane=true},
 	name = " of daylight", suffix=true, instant_resolve=true,
 	keywords = {daylight=true},
 	level_range = {1, 50},
-	rarity = 3,
-	cost = 4,
+	rarity = 10,
+	cost = 20,
 	combat = {
-		melee_project={[DamageType.LIGHT] = resolvers.mbonus_material(45, 6)},
+		melee_project={[DamageType.LIGHT] = resolvers.mbonus_material(15, 4)},
+		inc_damage_type = {undead=resolvers.mbonus_material(25, 5)},
 	},
 }
 
 newEntity{
-	power_source = {technique=true},
-	name = " of defense", suffix=true, instant_resolve=true,
-	keywords = {defense=true},
+	power_source = {arcane=true},
+	name = " of phasing", suffix=true, instant_resolve=true,
+	keywords = {phase=true},
 	level_range = {1, 50},
-	rarity = 3,
-	cost = 4,
+	rarity = 15,
+	cost = 30,
+	combat={
+		apr = resolvers.mbonus_material(10, 2),
+		phasing = resolvers.mbonus_material(50, 10)
+	},
+}
+
+newEntity{
+	power_source = {arcane=true},
+	name = " of vileness", suffix=true, instant_resolve=true,
+	keywords = {vile=true},
+	level_range = {1, 50},
+	rarity = 15,
+	cost = 30,
+	combat={
+		melee_project = {
+			[DamageType.BLIGHT] = resolvers.mbonus_material(15, 4)
+		},
+		burst_on_crit = {
+			[DamageType.CORRUPTED_BLOOD] = resolvers.mbonus_material(25, 5),
+		},
+	},
+}
+
+newEntity{
+	power_source = {arcane=true},
+	name = " of paradox", suffix=true, instant_resolve=true,
+	keywords = {paradox=true},
+	level_range = {1, 50},
+	rarity = 15,
+	cost = 30,
 	wielder = {
-		combat_def = resolvers.mbonus_material(7, 3),
+		resists={
+			[DamageType.TEMPORAL] = resolvers.mbonus_material(15, 5),
+		},
+		on_melee_hit = {
+			[DamageType.TEMPORAL] = resolvers.mbonus_material(10, 2),
+		},
+	},
+	combat = {
+		melee_project = {
+			[DamageType.TEMPORAL] = resolvers.mbonus_material(15, 4)
+		},
 	},
 }
 
+-- Greater Egos
 newEntity{
-	power_source = {technique=true},
-	name = " of ruin", suffix=true, instant_resolve=true,
-	keywords = {ruin=true},
-	level_range = {15, 50},
+	power_source = {arcane=true},
+	name = "elemental ", prefix=true, instant_resolve=true,
+	keywords = {elemental=true},
+	level_range = {35, 50},
+	greater_ego = 1,
+	rarity = 25,
+	cost = 35,
+	combat = {
+		convert_damage ={
+			[DamageType.FIRE] = resolvers.mbonus_material(25, 10),
+			[DamageType.COLD] = resolvers.mbonus_material(25, 10),
+			[DamageType.ACID] = resolvers.mbonus_material(25, 10),
+			[DamageType.LIGHTNING] = resolvers.mbonus_material(25, 10),
+		},
+		special_on_hit = {desc="random elemental effect", fct=function(combat, who, target)
+			local dam = 20 + (who:combatSpellpower()/5)
+			local tg = {type="hit", range=1}
+			local elem = rng.table{
+				{engine.DamageType.FIREBURN, "flame"},
+				{engine.DamageType.ICE, "freeze"},
+				{engine.DamageType.LIGHTNING_DAZE, "lightning_explosion"},
+				{engine.DamageType.ACID_BLIND, "acid"},
+			}
+			who:project(tg, target.x, target.y, elem[1], rng.avg(dam / 2, dam, 3), {type=elem[2]})		
+		end},
+	},
+}
+
+newEntity{
+	power_source = {arcane=true},
+	name = "plaguebringer's ", prefix=true, instant_resolve=true,
+	keywords = {plague=true},
+	level_range = {30, 50},
+	greater_ego = 1,
+	rarity = 30,
+	cost = 60,
+	wielder = {
+		disease_immune = resolvers.mbonus_material(25, 10, function(e, v) v=v/100 return 0, v end),
+	},
+	combat = {
+		melee_project = {
+			[DamageType.BLIGHT] = resolvers.mbonus_material(15, 4),
+		},
+		talent_on_hit = { [Talents.T_EPIDEMIC] = {level=1, chance=10} },
+	},
+}
+
+newEntity{
+	power_source = {arcane=true},
+	name = " of corruption", suffix=true, instant_resolve=true,
+	keywords = {corruption=true},
+	level_range = {30, 50},
+	greater_ego = 1,
+	rarity = 35,
+	cost = 40,
+	combat = {
+		melee_project={
+			[DamageType.BLIGHT] = resolvers.mbonus_material(15, 4),
+			[DamageType.DARKNESS] = resolvers.mbonus_material(15, 4),
+		},
+		special_on_hit = {desc="20% chance to curse the target", fct=function(combat, who, target)
+			if not rng.percent(20) then return end
+			local eff = rng.table{"vuln", "defenseless", "impotence", "death", }
+			if not target:checkHit(who:combatSpellpower(), target:combatSpellResist()) then return end
+			if eff == "vuln" then target:setEffect(target.EFF_CURSE_VULNERABILITY, 2, {power=20})
+			elseif eff == "defenseless" then target:setEffect(target.EFF_CURSE_DEFENSELESSNESS, 2, {power=20})
+			elseif eff == "impotence" then target:setEffect(target.EFF_CURSE_IMPOTENCE, 2, {power=20})
+			elseif eff == "death" then target:setEffect(target.EFF_CURSE_DEATH, 2, {src=who, power=20})
+			end
+		end},
+	},
+}
+
+newEntity{
+	power_source = {arcane=true},
+	name = " of the mystic", suffix=true, instant_resolve=true,
+	keywords = {mystic=true},
+	level_range = {30, 50},
 	greater_ego = 1,
-	rarity = 20,
-	cost = 25,
+	rarity = 30,
+	cost = 30,
 	wielder = {
+		combat_spellcrit = resolvers.mbonus_material(10, 2),
 		inc_stats = {
-			[Stats.STAT_STR] = resolvers.mbonus_material(4, 3),
+			[Stats.STAT_MAG] = resolvers.mbonus_material(6, 1),
+			[Stats.STAT_WIL] = resolvers.mbonus_material(6, 1),
 		},
-		combat_physcrit = resolvers.mbonus_material(7, 3),
-		combat_critical_power = resolvers.mbonus_material(10, 10),
-		combat_apr = resolvers.mbonus_material(7, 3),
 	},
+}
 
+-------------------------------------------------------
+-- Nature/Antimagic Egos:------------------------------
+-------------------------------------------------------
+newEntity{
+	power_source = {nature=true},
+	name = "huntsmen's ", prefix=true, instant_resolve=true,
+	keywords = {hunt=true},
+	level_range = {1, 50},
+	rarity = 10,
+	cost = 20,
+	combat = {
+		melee_project={[DamageType.NATURE] = resolvers.mbonus_material(15, 4)},
+		inc_damage_type = {animal=resolvers.mbonus_material(25, 5)},
+	},
 }
 
 newEntity{
-	power_source = {technique=true},
-	name = "quick ", prefix=true, instant_resolve=true,
-	keywords = {quick=true},
-	level_range = {20, 50},
-	greater_ego = 1,
-	rarity = 25,
-	cost = 30,
-	combat = { physspeed = -0.1 },
-	wielder = {
-		combat_atk = resolvers.mbonus_material(20, 2),
-		inc_stats = {
-			[Stats.STAT_DEX] = resolvers.mbonus_material(4, 3),
-			[Stats.STAT_CUN] = resolvers.mbonus_material(4, 3),
+	power_source = {nature=true},
+	name = "insidious ", prefix=true, instant_resolve=true,
+	keywords = {insid=true},
+	level_range = {10, 50},
+	rarity = 5,
+	cost = 15,
+	combat = {
+		melee_project={
+			[DamageType.INSIDIOUS_POISON] = resolvers.mbonus_material(48, 8), -- this gets divided by 7 for damage
 		},
 	},
 }
 
 newEntity{
-	power_source = {arcane=true},
-	name = "mystic ", prefix=true, instant_resolve=true,
-	keywords = {mystic=true},
-	level_range = {20, 50},
-	greater_ego = 1,
-	rarity = 20,
-	cost = 30,
-	wielder = {
-		combat_spellcrit = resolvers.mbonus_material(7, 3),
-		inc_stats = {
-			[Stats.STAT_MAG] = resolvers.mbonus_material(4, 3),
-			[Stats.STAT_WIL] = resolvers.mbonus_material(4, 3),
+	power_source = {nature=true},
+	name = " of erosion", suffix=true, instant_resolve=true,
+	keywords = {erosion=true},
+	level_range = {1, 50},
+	rarity = 5,
+	cost = 15,
+	combat = {
+		melee_project={
+			[DamageType.NATURE] = resolvers.mbonus_material(15, 4),
+			[DamageType.WASTING] = resolvers.mbonus_material(15, 4),
 		},
 	},
 }
 
 newEntity{
-	power_source = {technique=true},
+	power_source = {nature=true},
 	name = "blazebringer's ", prefix=true, instant_resolve=true,
 	keywords = {blaze=true},
-	level_range = {10, 50},
+	level_range = {30, 50},
 	greater_ego = 1,
-	rarity = 35,
+	rarity = 45,
 	cost = 40,
 	wielder = {
-		on_melee_hit = {
-			[DamageType.FIRE] = resolvers.mbonus_material(20, 5),
-		},
+		global_speed_add = resolvers.mbonus_material(10, 5, function(e, v) v=v/100 return 0, v end),
 		resists_pen = {
-			[DamageType.FIRE] = resolvers.mbonus_material(20, 5),
+			[DamageType.FIRE] = resolvers.mbonus_material(10, 2),
 		},
 	},
 	combat = {
-		melee_project = {
-			[DamageType.FIRE] = resolvers.mbonus_material(46, 5),
+		convert_damage = { 
+			[DamageType.FIREBURN] = resolvers.mbonus_material(25, 5, function(e, v) v=math.min(50, v) return 0, v end),
 		},
 	},
 }
 
 newEntity{
-	power_source = {technique=true},
-	name = "glacial ", prefix=true, instant_resolve=true,
-	keywords = {glacial=true},
+	power_source = {nature=true},
+	name = "caustic ", prefix=true, instant_resolve=true,
+	keywords = {caustic=true},
 	level_range = {30, 50},
 	greater_ego = 1,
 	rarity = 45,
 	cost = 40,
 	wielder = {
-		on_melee_hit = {
-			[DamageType.ICE] = resolvers.mbonus_material(20, 5),
-		},
+		life_regen = resolvers.mbonus_material(20, 5, function(e, v) v=v/10 return 0, v end),
 		resists_pen = {
-			[DamageType.COLD] = resolvers.mbonus_material(20, 5),
+			[DamageType.ACID] = resolvers.mbonus_material(10, 2),
 		},
 	},
 	combat = {
-		melee_project = {
-			[DamageType.COLD] = resolvers.mbonus_material(46, 5),
+		convert_damage = { 
+			[DamageType.ACID_BLIND] = resolvers.mbonus_material(25, 5, function(e, v) v=math.min(50, v) return 0, v end),
 		},
 	},
 }
 
 newEntity{
-	power_source = {technique=true},
+	power_source = {nature=true},
 	name = "thunderous ", prefix=true, instant_resolve=true,
 	keywords = {thunder=true},
-	level_range = {10, 50},
+	level_range = {30, 50},
 	greater_ego = 1,
-	rarity = 35,
+	rarity = 45,
 	cost = 40,
 	wielder = {
-		on_melee_hit = {
-			[DamageType.LIGHTNING] = resolvers.mbonus_material(20, 5),
+		inc_stats = {
+			[Stats.STAT_STR] = resolvers.mbonus_material(3, 1),
+			[Stats.STAT_DEX] = resolvers.mbonus_material(3, 1),
+			[Stats.STAT_MAG] = resolvers.mbonus_material(3, 1),
+			[Stats.STAT_WIL] = resolvers.mbonus_material(3, 1),
+			[Stats.STAT_CUN] = resolvers.mbonus_material(3, 1),
+			[Stats.STAT_CON] = resolvers.mbonus_material(3, 1),
 		},
 		resists_pen = {
-			[DamageType.LIGHTNING] = resolvers.mbonus_material(20, 5),
+			[DamageType.LIGHTNING] = resolvers.mbonus_material(10, 2),
 		},
 	},
 	combat = {
-		melee_project = {
-			[DamageType.LIGHTNING] = resolvers.mbonus_material(46, 5),
+		convert_damage = { 
+			[DamageType.LIGHTNING_DAZE] = resolvers.mbonus_material(25, 5, function(e, v) v=math.min(50, v) return 0, v end),
 		},
 	},
 }
 
 newEntity{
-	power_source = {technique=true},
-	name = "caustic ", prefix=true, instant_resolve=true,
-	keywords = {caustic=true},
-	level_range = {10, 50},
+	power_source = {nature=true},
+	name = "glacial ", prefix=true, instant_resolve=true,
+	keywords = {glacial=true},
+	level_range = {30, 50},
 	greater_ego = 1,
-	rarity = 35,
+	rarity = 45,
 	cost = 40,
 	wielder = {
-		on_melee_hit = {
-			[DamageType.ACID] = resolvers.mbonus_material(20, 5),
-		},
+		combat_armor = resolvers.mbonus_material(10, 2),
 		resists_pen = {
-			[DamageType.ACID] = resolvers.mbonus_material(20, 5),
+			[DamageType.COLD] = resolvers.mbonus_material(10, 2),
 		},
 	},
 	combat = {
-		melee_project = {
-			[DamageType.ACID] = resolvers.mbonus_material(46, 5),
+		convert_damage = { 
+			[DamageType.ICE] = resolvers.mbonus_material(25, 5, function(e, v) v=math.min(50, v) return 0, v end),
 		},
 	},
 }
 
 newEntity{
 	power_source = {nature=true},
-	name = "vile ", prefix=true, instant_resolve=true,
-	keywords = {vile=true},
+	name = " of gravity", suffix=true, instant_resolve=true,
+	keywords = {gravity=true},
 	level_range = {30, 50},
 	greater_ego = 1,
-	rarity = 45,
-	cost = 40,
+	rarity = 30,
+	cost = 30,
 	wielder = {
-		on_melee_hit = {
-			[DamageType.SLIME] = resolvers.mbonus_material(20, 5),
-		},
-		resists_pen = {
-			[DamageType.NATURE] = resolvers.mbonus_material(20, 5),
+		inc_damage = {
+			[DamageType.PHYSICAL] = resolvers.mbonus_material(10, 2),
 		},
 	},
 	combat = {
-		melee_project = {
-			[DamageType.SLIME] = resolvers.mbonus_material(46, 5),
-		},
+		melee_project={
+			[DamageType.GRAVITY] = resolvers.mbonus_material(15, 4),
+		},
+		special_on_hit = {desc="25% chance to crush the target", fct=function(combat, who, target)
+			if not rng.percent(25) then return end
+			if target:attr("never_move") then
+				local tg = {type="hit", range=1}
+				who:project(tg, target.x, target.y, engine.DamageType.IMPLOSION, 10 + who:combatMindpower()/4)
+			elseif target:canBe("pin") then
+				target:setEffect(target.EFF_PINNED, 3, {src=who, apply_power=who:combatAttack(combat)})
+			else
+				game.logSeen(target, "%s resists the pin!", target.name:capitalize())
+			end
+		end},
 	},
 }
 
 newEntity{
-	power_source = {technique=true},
-	name = "warbringer's ", prefix=true, instant_resolve=true,
-	keywords = {warbringer=true},
+	power_source = {nature=true},
+	name = " of nature", suffix=true, instant_resolve=true,
+	keywords = {nature=true},
 	level_range = {30, 50},
 	greater_ego = 1,
-	rarity = 30,
+	rarity = 45,
 	cost = 40,
 	wielder = {
-		inc_stats = {
-			[Stats.STAT_CON] = resolvers.mbonus_material(9, 1),
-		},
-		disarm_immune = resolvers.mbonus_material(25, 10, function(e, v) v=v/100 return 0, v end),
-		combat_dam = resolvers.mbonus_material(15, 5),
+		resists = { all = resolvers.mbonus_material(10, 2) },
 		resists_pen = {
-			[DamageType.PHYSICAL] = resolvers.mbonus_material(15, 5),
+			[DamageType.NATURE] = resolvers.mbonus_material(10, 2),
+		},
+	},
+	combat = {
+		convert_damage = { 
+			[DamageType.POISON] = resolvers.mbonus_material(25, 4),
 		},
 	},
 }
 
+-- Antimagic
 newEntity{
-	power_source = {technique=true},
-	name = " of shearing", suffix=true, instant_resolve=true,
-	keywords = {shearing=true},
-	level_range = {20, 50},
-	greater_ego = 1,
+	power_source = {antimagic=true},
+	name = "manaburning ", prefix=true, instant_resolve=true,
+	keywords = {manaburning=true},
+	level_range = {1, 50},
 	rarity = 20,
 	cost = 40,
-	wielder = {
-		combat_apr = resolvers.mbonus_material(15, 5),
-		inc_damage = {
-			[DamageType.PHYSICAL] = resolvers.mbonus_material(10, 5),
-		},
-		resists_pen = {
-			[DamageType.PHYSICAL] = resolvers.mbonus_material(15, 5),
+	combat = {
+		melee_project = {
+			[DamageType.MANABURN] = resolvers.mbonus_material(25, 8),
 		},
 	},
 }
 
 newEntity{
-	power_source = {arcane=true},
-	name = " of plague", suffix=true, instant_resolve=true,
-	keywords = {plague=true},
-	level_range = {20, 50},
-	greater_ego = 1,
-	rarity = 30,
-	cost = 60,
-	max_power = 80, power_regen = 1,
-	use_talent = { id = Talents.T_EPIDEMIC, level = 4, power = 80 },
-	wielder = {
-		inc_stats = {
-			[Stats.STAT_CON] = resolvers.mbonus_material(10, 5, function(e, v) return 0, -v end),
-			[Stats.STAT_MAG] = resolvers.mbonus_material(5, 1),
-		},
-		disease_immune = resolvers.mbonus_material(55, 10, function(e, v) v=v/100 return 0, v end),
+	power_source = {antimagic=true},
+	name = "slime-covered ", prefix=true, instant_resolve=true,
+	keywords = {slime=true},
+	level_range = {1, 50},
+	rarity = 20,
+	cost = 15,
+	combat = {
+		melee_project={[DamageType.SLIME] = resolvers.mbonus_material(15, 4)},
 	},
+}
+
+newEntity{
+	power_source = {antimagic=true},
+	name = " of banishment", suffix=true, instant_resolve=true,
+	keywords = {banishment=true},
+	level_range = {1, 50},
+	rarity = 20,
+	cost = 20,
 	combat = {
-		melee_project = {
-			[DamageType.BLIGHT] = resolvers.mbonus_material(46, 5),
-		},
+		inc_stats = { [Stats.STAT_WIL] = resolvers.mbonus_material(6, 1), },
+		inc_damage_type = {demon=resolvers.mbonus_material(25, 5)},
 	},
 }
 
 newEntity{
-	power_source = {technique=true},
-	name = " of projection", suffix=true, instant_resolve=true,
-	keywords = {projection=true},
+	power_source = {antimagic=true},
+	name = " of purging", suffix=true, instant_resolve=true,
+	keywords = {purging=true},
+	level_range = {1, 50},
+	rarity = 20,
+	cost = 20,
+	combat = {
+		melee_project={[DamageType.NATURE] = resolvers.mbonus_material(15, 4)},
+		special_on_hit = {desc="25% chance to remove a magical effect", fct=function(combat, who, target)
+			if not rng.percent(25) then return end
+			-- Go through all spell effects
+			for eff_id, p in pairs(target.tmp) do
+				local e = target.tempeffect_def[eff_id]
+				if e.type == "magical" then
+					effs[#effs+1] = {"effect", eff_id}
+				end
+			end
+
+			-- Go through all sustained spells
+			for tid, act in pairs(target.sustain_talents) do
+				if act then
+					local talent = target:getTalentFromId(tid)
+					if talent.is_spell then effs[#effs+1] = {"talent", tid} end
+				end
+			end
+			
+			local eff = rng.tableRemove(effs)
+
+			if eff[1] == "effect" then
+				target:removeEffect(eff[2])
+			else
+				target:forceUseTalent(eff[2], {ignore_energy=true})
+			end
+		end},
+	},
+}
+
+newEntity{
+	power_source = {antimagic=true},
+	name = "inquisitor's ", prefix=true, instant_resolve=true,
+	keywords = {inquisitors=true},
 	level_range = {30, 50},
+	rarity = 45,
 	greater_ego = 1,
-	rarity = 30,
-	cost = 60,
-	max_power = 20, power_regen = 1,
-	use_talent = { id = Talents.T_WAVE_OF_POWER, level = 4, power = 12 },
+	cost = 40,
+	combat = {
+		melee_project = {
+			[DamageType.MANABURN] = resolvers.mbonus_material(25, 8),
+		},
+		special_on_crit = {desc="burns latenet spell energy", fct=function(combat, who, target)
+			local turns = 1 + math.ceil(who:combatMindpower() / 20)
+			if not who:checkHit(who:combatMindpower(), target:combatMentalResist()) then game.logSeen(target, "%s resists!", target.name:capitalize()) return nil end
+			
+			local tids = {}
+			for tid, lev in pairs(target.talents) do
+				local t = target:getTalentFromId(tid)
+				if t and not target.talents_cd[tid] and t.mode == "activated" and t.is_spell and not t.innate then tids[#tids+1] = t end
+			end
+			
+			local t = rng.tableRemove(tids)
+			if not t then return nil end
+			local damage = t.mana or t.vim or t.positive or t.negative or t.paradox or 0
+			target.talents_cd[t.id] = turns
+			
+			local tg = {type="hit", range=1}
+			who:project(tg, target.x, target.y, engine.DamageType.ARCANE, damage)
+			
+			game.logSeen(target, "%s's %s has been burned!", target.name:capitalize(), t.name)
+		end},
+	},
 }
 
 newEntity{
-	power_source = {technique=true},
-	name = " of sacrifice", suffix=true, instant_resolve=true,
-	keywords = {sacrifice=true},
-	level_range = {20, 50},
+	power_source = {antimagic=true},
+	name = " of disruption", suffix=true, instant_resolve=true,
+	keywords = {disruption=true},
+	level_range = {30, 50},
 	greater_ego = 1,
-	rarity = 20,
+	rarity = 50,
 	cost = 40,
-	max_power = 80, power_regen = 1,
-	use_talent = { id = Talents.T_LIFE_TAP, level = 3, power = 80 },
 	wielder = {
-		combat_physcrit = resolvers.mbonus_material(4, 3),
-		combat_dam = resolvers.mbonus_material(12, 3),
+		},
+	combat = {
+		inc_damage_type = {
+			undead=resolvers.mbonus_material(25, 5), 
+			construct=resolvers.mbonus_material(25, 5),
+		},
+		special_on_hit = {desc="disrupts spell-casting", fct=function(combat, who, target)
+			target:setEffect(target.EFF_SPELL_DISRUPTION, 10, {src=who, power = 10, max = 50, apply_power=who:combatMindpower()})
+		end},
 	},
 }
 
 newEntity{
-	power_source = {arcane=true},
-	name = " of paradox", suffix=true, instant_resolve=true,
-	keywords = {paradox=true},
-	level_range = {1, 50},
+	power_source = {antimagic=true},
+	name = " of the leech", suffix=true, instant_resolve=true,
+	keywords = {leech=true},
+	level_range = {30, 50},
 	greater_ego = 1,
-	rarity = 15,
-	cost = 30,
+	rarity = 50,
+	cost = 40,
 	wielder = {
-		resists={
-			[DamageType.TEMPORAL] = resolvers.mbonus_material(15, 5),
-		},
 		on_melee_hit = {
-			[DamageType.TEMPORAL] = resolvers.mbonus_material(10, 5),
+			[DamageType.SLIME] = resolvers.mbonus_material(15, 4),
 		},
 	},
 	combat = {
-		melee_project = {
-			[DamageType.TEMPORAL] = resolvers.mbonus_material(46, 5),
+		melee_project={[DamageType.SLIME] = resolvers.mbonus_material(15, 4)},
+		special_on_hit = {desc="leeches stamina from the target", fct=function(combat, who, target)
+			if target and target:getStamina() > 0 then
+				local leech = who:combatMindpower() / 50
+				local leeched = math.min(leech, target:getStamina())
+				who:incStamina(leeched)
+				target:incStamina(-leeched)
+			end				
+		end},
+	},
+}
+
+-------------------------------------------------------
+-- Psionic Egos: --------------------------------------
+-------------------------------------------------------
+newEntity{
+	power_source = {psionic=true},
+	name = "hateful ", prefix=true, instant_resolve=true,
+	keywords = {hateful=true},
+	level_range = {1, 50},
+	rarity = 10,
+	cost = 20,
+	combat = {
+		melee_project={[DamageType.DARKNESS] = resolvers.mbonus_material(15, 4)},
+		inc_damage_type = {humanoid=resolvers.mbonus_material(25, 5)},
+	},
+}
+
+newEntity{
+	power_source = {psionic=true},
+	name = "thought-forged ", prefix=true, instant_resolve=true,
+	keywords = {thought=true},
+	level_range = {1, 50},
+	rarity = 5,
+	cost = 10,
+	combat = {
+		melee_project={
+			[DamageType.MIND] = resolvers.mbonus_material(15, 4),
+		},
+		convert_damage = { 
+			[DamageType.MIND] = resolvers.mbonus_material(25, 5),
 		},
 	},
 }
 
 newEntity{
-	power_source = {nature=true, antimagic=true},
-	name = "manaburning ", prefix=true, instant_resolve=true,
-	keywords = {manaburning=true},
+	power_source = {psionic=true},
+	name = " of amnesia", suffix=true, instant_resolve=true,
+	keywords = {forgotten=true},
 	level_range = {10, 50},
-	greater_ego = 1,
-	rarity = 25,
-	cost = 40,
+	rarity = 25, -- very rare because no one can remember how to make them...  haha
+	cost = 15,
+	wielder = {
+		on_melee_hit = {
+			[DamageType.MIND] = resolvers.mbonus_material(15, 4),
+		},
+	},
 	combat = {
-		melee_project = {
-			[DamageType.MANABURN] = resolvers.mbonus_material(50, 15),
+		special_on_hit = {desc="25% chance to put talents on cooldown", fct=function(combat, who, target)
+			if not rng.percent(25) then return nil end
+			local turns = 1 + math.ceil(who:combatMindpower() / 20)
+			local number = 2 + math.ceil(who:combatMindpower() / 50)
+			if not who:checkHit(who:combatMindpower(), target:combatMentalResist()) then game.logSeen(target, "%s resists!", target.name:capitalize()) return nil end
+			
+			local tids = {}
+			for tid, lev in pairs(target.talents) do
+				local t = target:getTalentFromId(tid)
+				if t and not target.talents_cd[tid] and t.mode == "activated" and not t.innate then tids[#tids+1] = t end
+			end
+			
+			for i = 1, number do
+				local t = rng.tableRemove(tids)
+				if not t then break end
+				target.talents_cd[t.id] = turns
+				game.logSeen(target, "%s has temporarily forgotten %s!", target.name:capitalize(), t.name)
+			end
+		end},
+	},
+}
+
+newEntity{
+	power_source = {psionic=true},
+	name = " of projection", suffix=true, instant_resolve=true,
+	keywords = {projection=true},
+	level_range = {1, 50},
+	rarity = 5,
+	cost = 15,
+	max_power = 6, power_regen = 1,
+	use_power = { name = "project an attack as mind damage", power = 6,
+		use = function(self, who)
+			local tg = {type="bolt", range=5}
+			local x, y = who:getTarget(tg)
+			if not x or not y then return nil end
+			local _ _, x, y = who:canProject(tg, x, y)
+			local target = game.level.map(x, y, engine.Map.ACTOR)
+			if target then
+				who:attackTarget(target, engine.DamageType.MIND, 1, true)
+			else
+				return
+			end
+			return {id=true, used=true}
+		end
+	},
+	combat = {	
+		melee_project={
+			[DamageType.MIND] = resolvers.mbonus_material(15, 4),
+		},
+	},
+}
+
+newEntity{
+	power_source = {psionic=true},
+	name = "psychic's ", prefix=true, instant_resolve=true,
+	keywords = {psychic=true},
+	level_range = {30, 50},
+	greater_ego = 1,
+	rarity = 30,
+	cost = 30,
+	wielder = {
+		combat_mindcrit = resolvers.mbonus_material(10, 2),
+		inc_stats = {
+			[Stats.STAT_CUN] = resolvers.mbonus_material(6, 1),
+			[Stats.STAT_WIL] = resolvers.mbonus_material(6, 1),
+		},
+	},
+}
+
+newEntity{
+	power_source = {psionic=true},
+	name = " of torment", suffix=true, instant_resolve=true,
+	keywords = {torment=true},
+	level_range = {30, 50},
+	greater_ego = 1,
+	rarity = 30,
+	cost = 30,
+	wielder = {
+		resists_pen = {
+			[DamageType.MIND] = resolvers.mbonus_material(10, 2),
+			[DamageType.DARKNESS] = resolvers.mbonus_material(10, 2),
 		},
 	},
+	combat = {
+		special_on_hit = {desc="20% chance to torment the target", fct=function(combat, who, target)
+			if not rng.percent(20) then return end
+			local eff = rng.table{"stun", "blind", "pin", "confusion", "silence",}
+			if not target:canBe(eff) then return end
+			if not target:checkHit(who:combatMindpower(), target:combatMentalResist()) then return end
+			if eff == "stun" then target:setEffect(target.EFF_STUNNED, 3, {})
+			elseif eff == "blind" then target:setEffect(target.EFF_BLINDED, 3, {})
+			elseif eff == "pin" then target:setEffect(target.EFF_PINNED, 3, {})
+			elseif eff == "confusion" then target:setEffect(target.EFF_CONFUSED, 3, {power=60})
+			elseif eff == "silence" then target:setEffect(target.EFF_SILENCED, 3, {})
+			end
+		end},
+	},
 }
diff --git a/game/modules/tome/data/general/objects/knifes.lua b/game/modules/tome/data/general/objects/knifes.lua
index da79b57621..99d67f1359 100644
--- a/game/modules/tome/data/general/objects/knifes.lua
+++ b/game/modules/tome/data/general/objects/knifes.lua
@@ -29,6 +29,7 @@ newEntity{
 	metallic = true,
 	combat = { talented = "knife", damrange = 1.3, physspeed = 1, sound = {"actions/melee", pitch=1.2, vol=1.2}, sound_miss = {"actions/melee", pitch=1.2, vol=1.2} },
 	desc = [[Sharp, short and deadly.]],
+	ego_bonus_mult = -0.2,
 	randart_able = { attack=40, physical=80, spell=20, def=10, misc=10 },
 	egos = "/data/general/objects/egos/weapon.lua", egos_chance = { prefix=resolvers.mbonus(40, 5), suffix=resolvers.mbonus(40, 5) },
 }
diff --git a/game/modules/tome/data/general/objects/mindstars.lua b/game/modules/tome/data/general/objects/mindstars.lua
index 8be411ed38..c055ecb4c8 100644
--- a/game/modules/tome/data/general/objects/mindstars.lua
+++ b/game/modules/tome/data/general/objects/mindstars.lua
@@ -25,7 +25,7 @@ newEntity{
 	display = "!", color=colors.LIGHT_RED, image = resolvers.image_material("mindstar", "wood"),
 	moddable_tile = resolvers.moddable_tile("mindstar"),
 	randart_able = { attack=10, physical=40, spell=1, def=10, misc=10 },
-	encumber = 5,
+	encumber = 3,
 	rarity = 4,
 	power_source = {nature=true},
 	combat = {
diff --git a/game/modules/tome/data/general/objects/slings.lua b/game/modules/tome/data/general/objects/slings.lua
index 8a2397cc86..4d0fe6ec71 100644
--- a/game/modules/tome/data/general/objects/slings.lua
+++ b/game/modules/tome/data/general/objects/slings.lua
@@ -104,7 +104,7 @@ newEntity{
 	type = "ammo", subtype="shot",
 	add_name = " (#COMBAT_AMMO#)",
 	display = "{", color=colors.UMBER, image = resolvers.image_material("shot", "metal"),
-	encumber = 5,
+	encumber = 3,
 	rarity = 11,
 	combat = { talented = "sling", damrange = 1.2},
 	proj_image = resolvers.image_material("shot_s", "metal"),
diff --git a/game/modules/tome/data/general/objects/world-artifacts.lua b/game/modules/tome/data/general/objects/world-artifacts.lua
index 1f03c8bb47..5b11009326 100644
--- a/game/modules/tome/data/general/objects/world-artifacts.lua
+++ b/game/modules/tome/data/general/objects/world-artifacts.lua
@@ -37,7 +37,7 @@ newEntity{ base = "BASE_STAFF",
 	rarity = 170,
 	desc = [[This unique-looking staff is carved with runes of destruction.]],
 	cost = 200,
-	material_level = 3,
+	material_level = 2,
 
 	require = { stat = { mag=24 }, },
 	combat = {
@@ -66,7 +66,7 @@ newEntity{ base = "BASE_STAFF",
 	rarity = 200,
 	desc = [[A powerful staff sent in secret to Angolwen by the Shaloren, to aid their fighting of the plagues following the Spellblaze.]],
 	cost = 200,
-	material_level = 2,
+	material_level = 1,
 
 	require = { stat = { mag=24 }, },
 	combat = {
@@ -157,7 +157,7 @@ newEntity{ base = "BASE_STAFF",
 	rarity = 220,
 	desc = [[A thick staff with a heavy knob on the end.  It was said to be used by the grand alchemist Bolbum in the Age of Allure.  Much renowned is the fear of his students for their master, and the high rate of cranial injuries amongst them.  Bolbum died with seven daggers in his back and his much-cursed staff went missing after.]],
 	cost = 300,
-	material_level = 4,
+	material_level = 3,
 
 	require = { stat = { mag=38 }, },
 	combat = {
@@ -305,10 +305,10 @@ newEntity{ base = "BASE_AMULET",
 	rarity = 200,
 	cost = 90,
 	material_level = 2,
-
 	wielder = {
 		max_encumber = 20,
 		fatigue = -20,
+		avoid_pressure_traps = 1,
 	},
 }
 
@@ -333,6 +333,16 @@ newEntity{ base = "BASE_AMULET",
 	},
 	max_power = 60, power_regen = 1,
 	use_talent = { id = Talents.T_JUGGERNAUT, level = 2, power = 30 },
+	on_wear = function(self, who)
+		if who.descriptor and who.descriptor.race == "Halfling" then
+			local Talents = require "engine.interface.ActorStats"
+		
+			self:specialWearAdd({"wielder", "talents_types_mastery"}, { ["technique/battle-tactics"] = 0.2 })
+			self:specialWearAdd({"wielder","combat_armor"}, 5)
+			self:specialWearAdd({"wielder","combat_crit_reduction"}, 10)
+			game.logPlayer(who, "#LIGHT_BLUE#You feel invincible!")
+		end
+	end,
 }
 
 newEntity{ base = "BASE_AMULET", define_as = "SET_GARKUL_TEETH",
@@ -344,7 +354,7 @@ newEntity{ base = "BASE_AMULET", define_as = "SET_GARKUL_TEETH",
 	level_range = {40, 50},
 	rarity = 300,
 	cost = 1000,
-	material_level = 4,
+	material_level = 5,
 	wielder = {
 		inc_stats = {
 			[Stats.STAT_STR] = 10,
@@ -395,7 +405,20 @@ newEntity{ base = "BASE_LITE",
 	},
 	wielder = {
 		lite = 4,
+		healing_factor = 0.1,
+		talent_cd_reduction= {
+			[Talents.T_HEALING_LIGHT] = 1,
+			[Talents.T_BATHE_IN_LIGHT] = 1,
+			[Talents.T_BARRIER] = 2,
+			[Talents.T_PROVIDENCE] = 5,
+		},
 	},
+	on_wear = function(self, who)
+		if who.descriptor and who.descriptor.subclass == "Sun Paladin" then
+			self:specialWearAdd({"wielder", "positive_regen"}, 0.2)
+			game.logPlayer(who, "#GOLD#You feel a swell of positive energy!")
+		end
+	end,
 }
 
 newEntity{ base = "BASE_LITE",
@@ -407,6 +430,7 @@ newEntity{ base = "BASE_LITE",
 	color=colors.YELLOW,
 	encumber = 1,
 	rarity = 250,
+	material_level = 3,
 	desc = [[The first Halfling mages during the Age of Allure discovered how to capture the Sunlight and infuse gems with it.
 This star is the culmination of their craft. Light radiates from its ever-shifting yellow surface.]],
 	cost = 400,
@@ -433,12 +457,13 @@ newEntity{ base = "BASE_LITE",
 	color = colors.RED,
 	encumber = 1,
 	rarity = 300,
+	material_level = 4,
 	desc = [[This dark red heart still beats despite being seperated from its owner.  It also snuffs out any light source that comes near it.]],
 	cost = 100,
 
 	wielder = {
 		lite = -1000,
-		infravision = 7,
+		infravision = 6,
 		resists_cap = { [DamageType.LIGHT] = 10 },
 		resists = { [DamageType.LIGHT] = 30 },
 	},
@@ -459,7 +484,7 @@ newEntity{ base = "BASE_LITE",
 	desc = [[Said to have once belonged to Inquisitor Marcus Dunn during the Spellhunt this fist sized quartz crystal glows constantly with a soft white light and was rumoured to be a great aid in meditation, helping focus the mind, body, and soul of the owner as well as protecting them from the foulest of magics.
 It seems somebody well versed in antimagic could use it to its fullest potential.]],
 	cost = 100,
-	material_level = 4,
+	material_level = 5,
 
 	wielder = {
 		lite = 4,
@@ -617,7 +642,7 @@ newEntity{ base = "BASE_GREATSWORD",
 	desc = [[Farian was King Toknor's captain, and fought by his side in the great Battle of Last Hope.  However, when he returned after the battle to find his hometown burnt in an orcish pyre, a madness overtook him.  The desire for vengeance made him quit the army and strike out on his own, lightly armoured and carrying nought but his sword.  Most thought him dead until the reports came back of a fell figure tearing through the orcish encampments, slaughtering all before him and mercilessly butchering the corpses after.  It is said his blade drank the blood of 100 orcs each day until finally all of Maj'Eyal was cleared of their presence.  When the final orc was slain and no more were to be found, Farian at the last turned the blade on himself and stuck it through his chest.  Those nearby said his body shook with convulsions as he did so, though they could not tell whether he was laughing or crying.]],
 	cost = 400,
 	require = { stat = { str=40, wil=20 }, },
-	material_level = 5,
+	material_level = 3,
 	combat = {
 		dam = 42,
 		apr = 4,
@@ -633,7 +658,7 @@ newEntity{ base = "BASE_GREATSWORD",
 }
 
 newEntity{ base = "BASE_KNIFE",
-	power_source = {technique=true},
+	power_source = {arcane=true},
 	unique = true,
 	name = "Unerring Scalpel", image = "object/artifact/unerring_scalpel.png",
 	unided_name = "long sharp scalpel",
@@ -642,12 +667,13 @@ newEntity{ base = "BASE_KNIFE",
 	rarity = 200,
 	require = { stat = { cun=16 }, },
 	cost = 80,
-	material_level = 3,
+	material_level = 1,
 	combat = {
 		dam = 15,
-		apr = 10,
+		apr = 25,
 		physcrit = 0,
 		dammod = {dex=0.55, str=0.45},
+		phasing = 50,
 	},
 	wielder = {combat_atk=20},
 }
@@ -663,7 +689,7 @@ newEntity{ base = "BASE_LEATHER_BOOT",
 	level_range = {1, 20},
 	rarity = 200,
 	cost = 100,
-	material_level = 3,
+	material_level = 2,
 	wielder = {
 		combat_armor = 1,
 		combat_def = 2,
@@ -693,7 +719,7 @@ newEntity{ base = "BASE_SHIELD",
 	rarity = 300,
 	require = { stat = { str=28 }, },
 	cost = 350,
-	material_level = 5,
+	material_level = 4,
 	special_combat = {
 		dam = 58,
 		physcrit = 4.5,
@@ -721,7 +747,7 @@ newEntity{ base = "BASE_SHIELD",
 	rarity = 270,
 	require = { stat = { str=37 }, },
 	cost = 300,
-	material_level = 4,
+	material_level = 3,
 	special_combat = {
 		dam = 48,
 		physcrit = 4.5,
@@ -746,7 +772,7 @@ newEntity{ base = "BASE_LIGHT_ARMOR",
 	rarity = 270,
 	cost = 200,
 	require = { stat = { str=22 }, },
-	material_level = 4,
+	material_level = 3,
 	wielder = {
 		combat_def = 6,
 		combat_armor = 7,
@@ -817,7 +843,7 @@ newEntity{ base = "BASE_HELM",
 	level_range = {20, 28},
 	rarity = 240,
 	cost = 700,
-	material_level = 3,
+	material_level = 2,
 	wielder = {
 		lite = 1,
 		combat_armor = 6,
@@ -825,6 +851,9 @@ newEntity{ base = "BASE_HELM",
 		blind_immune = 0.3,
 		confusion_immune = 0.3,
 		inc_stats = { [Stats.STAT_WIL] = 3, [Stats.STAT_MAG] = 4, },
+		inc_damage={
+			[DamageType.LIGHT] = 8,
+		},
 	},
 	max_power = 30, power_regen = 1,
 	use_talent = { id = Talents.T_SUN_FLARE, level = 3, power = 30 },
@@ -869,7 +898,7 @@ newEntity{ base = "BASE_KNIFE",
 	rarity = 200,
 	require = { stat = { cun=25 }, },
 	cost = 250,
-	material_level = 3,
+	material_level = 2,
 	combat = {
 		dam = 25,
 		apr = 10,
@@ -956,7 +985,7 @@ newEntity{ base = "BASE_RING",
 	name = "Ring of the War Master", color = colors.DARK_GREY, image = "object/artifact/ring_of_war_master.png",
 	unided_name = "blade-edged ring",
 	desc = [[A blade-edged ring that radiates power. As you put it on, strange thoughts of pain and destruction come to your mind.]],
-	level_range = {15, 30},
+	level_range = {40, 50},
 	rarity = 200,
 	cost = 500,
 	material_level = 5,
@@ -1041,7 +1070,7 @@ newEntity{ base = "BASE_MACE",
 	name = "Crooked Club", color = colors.GREEN, image = "object/artifact/weapon_crooked_club.png",
 	unided_name = "weird club",
 	desc = [[An oddly twisted club with a hefty weight on the end.]],
-	level_range = {3, 12},
+	level_range = {12, 20},
 	rarity = 192,
 	require = { stat = { str=20 }, },
 	cost = 250,
@@ -1066,7 +1095,7 @@ newEntity{ base = "BASE_MACE",
 	rarity = 340,
 	require = { stat = { str=42 } },
 	cost = 350,
-	material_level = 4,
+	material_level = 3,
 	combat = {
 		dam = 40,
 		apr = 4,
@@ -1111,7 +1140,7 @@ newEntity{ base = "BASE_HELM",
 	level_range = {37, 45},
 	rarity = 280,
 	cost = 400,
-	material_level = 5,
+	material_level = 4,
 	wielder = {
 		inc_stats = { [Stats.STAT_STR] = 5, [Stats.STAT_CON] = 5, [Stats.STAT_LCK] = -4, },
 		combat_def = 5,
@@ -1132,7 +1161,7 @@ newEntity{ base = "BASE_HELM",
 	level_range = {20, 35},
 	rarity = 280,
 	cost = 300,
-	material_level = 5,
+	material_level = 3,
 	wielder = {
 		inc_stats = { [Stats.STAT_CON] = 3, [Stats.STAT_WIL] = 10, },
 		combat_def = 3,
@@ -1178,7 +1207,7 @@ newEntity{ base = "BASE_GAUNTLETS",
 	level_range = {40, 50},
 	rarity = 300,
 	cost = 2000,
-	material_level = 3,
+	material_level = 5,
 	wielder = {
 		inc_stats = { [Stats.STAT_STR] = 6, [Stats.STAT_MAG] = 6 },
 		inc_damage = { [DamageType.PHYSICAL] = 10 },
@@ -1233,7 +1262,7 @@ Finally The Scorpion was defeated by the alchemist Nessylia, who went to face th
 }
 
 newEntity{ base = "BASE_GLOVES",
-	power_source = {nature=true},
+	power_source = {nature=true}, define_as = "SET_GIANT_WRAPS",
 	unique = true,
 	name = "Snow Giant Wraps", color = colors.SANDY_BROWN, image = "object/artifact/snow_giant_arm_wraps.png",
 	unided_name = "fur-lined leather wraps",
@@ -1241,7 +1270,7 @@ newEntity{ base = "BASE_GLOVES",
 	level_range = {15, 25},
 	rarity = 200,
 	cost = 500,
-	material_level = 1,
+	material_level = 3,
 	wielder = {
 		inc_stats = { [Stats.STAT_STR] = 4, },
 		resists = { [DamageType.COLD]= 10, [DamageType.LIGHTNING] = 10, },
@@ -1259,6 +1288,40 @@ newEntity{ base = "BASE_GLOVES",
 	},
 	max_power = 6, power_regen = 1,
 	use_talent = { id = Talents.T_THROW_BOULDER, level = 2, power = 6 },
+	
+	set_list = { {"define_as", "SET_MIGHTY_GIRDLE"} },
+	on_set_complete = function(self, who)
+		self:specialSetAdd({"wielder","combat_dam"}, 10)
+		self:specialSetAdd({"wielder","combat_physresist"}, 10)
+	end,
+}
+
+newEntity{ base = "BASE_LEATHER_BELT",
+	power_source = {technique=true}, define_as = "SET_MIGHTY_GIRDLE",
+	unique = true,
+	name = "Mighty Girdle", image = "object/artifact/belt_mighty_girdle.png",
+	unided_name = "massive, stained girdle",
+	desc = [[This girdle is enchanted with mighty wards against expanding girth. Whatever the source of its wondrous strength, it will prove of great aid in the transport of awkward burdens.]],
+	color = colors.LIGHT_RED,
+	level_range = {1, 25},
+	rarity = 170,
+	cost = 350,
+	material_level = 2,
+	wielder = {
+		knockback_immune = 0.4,
+		max_encumber = 70,
+		combat_armor = 4,
+	},
+	
+	set_list = { {"define_as", "SET_GIANT_WRAPS"} },
+	on_set_complete = function(self, who)
+		self:specialSetAdd({"wielder","max_life"}, 100)
+		self:specialSetAdd({"wielder","size_category"}, 2)
+		game.logPlayer(who, "#GOLD#You grow to immense size!")
+	end,
+	on_set_broken = function(self, who)
+		game.logPlayer(who, "#LIGHT_BLUE#You feel a lot smaller...")
+	end,
 }
 
 newEntity{ base = "BASE_GAUNTLETS",
@@ -1270,7 +1333,7 @@ newEntity{ base = "BASE_GAUNTLETS",
 	level_range = {25, 35},
 	rarity = 250,
 	cost = 1000,
-	material_level = 5,
+	material_level = 3,
 	require = nil,
 	wielder = {
 		inc_stats = { [Stats.STAT_MAG] = 4, },
@@ -1345,7 +1408,7 @@ It was made by Humans for Humans; only they can harness the true power of the ro
 	level_range = {12, 22},
 	rarity = 220,
 	cost = 150,
-	material_level = 3,
+	material_level = 2,
 	wielder = {
 		inc_damage = {[DamageType.ARCANE]=10},
 		inc_stats = { [Stats.STAT_MAG] = 6 },
@@ -1373,7 +1436,7 @@ newEntity{ base = "BASE_CLOTH_ARMOR",
 	level_range = {20, 30},
 	rarity = 300,
 	cost = 280,
-	material_level = 4,
+	material_level = 3,
 	wielder = {
 		inc_damage = {[DamageType.FIRE]=20},
 		combat_def = 8,
@@ -1394,7 +1457,7 @@ newEntity{ base = "BASE_CLOTH_ARMOR",
 	level_range = {30, 40},
 	rarity = 290,
 	cost = 550,
-	material_level = 5,
+	material_level = 4,
 	moddable_tile = "special/robe_of_the_archmage",
 	moddable_tile_big = true,
 	wielder = {
@@ -1422,7 +1485,7 @@ newEntity{ base = "BASE_CLOTH_ARMOR",
 	level_range = {30, 40},
 	rarity = 310,
 	cost = 540,
-	material_level = 5,
+	material_level = 4,
 	wielder = {
 		inc_damage = {[DamageType.TEMPORAL]=20},
 		combat_def = 9,
@@ -1531,7 +1594,7 @@ newEntity{ base = "BASE_WAND",
 	elec_proof = true,
 	add_name = false,
 
-	material_level = 5,
+	material_level = 2,
 
 	max_power = 75, power_regen = 1,
 	use_power = { name = "shoot a cone of fire", power = 20,
@@ -1591,7 +1654,7 @@ newEntity{ base = "BASE_BATTLEAXE",
 	rarity = 300,
 	cost = 400,
 	level_range = {20, 35},
-	material_level = 4,
+	material_level = 3,
 	combat = {
 		dam = 52,
 		apr = 21,
@@ -1617,19 +1680,26 @@ newEntity{ base = "BASE_WARAXE",
 	rarity = 235,
 	require = { stat = { str=40, dex=24 }, },
 	cost = 330,
-	material_level = 4,
+	material_level = 3,
+	wielder = {
+		combat_armor = 20,
+		resists_pen = {
+			[DamageType.COLD] = 20,
+		},
+	},
 	combat = {
 		dam = 33,
 		apr = 4.5,
 		physcrit = 7,
 		dammod = {str=1},
-		melee_project={[DamageType.COLD] = 25},
-	},
-	wielder = {
-		combat_atk = 15,
+		convert_damage = { 
+			[DamageType.ICE] = 50,
+		},
 	},
+	talent_on_hit = { [Talents.T_ICE_BREATH] = {level=2, chance=15} },
 }
 
+
 newEntity{ base = "BASE_WHIP",
 	power_source = {nature=true},
 	unided_name = "metal whip",
@@ -1637,39 +1707,24 @@ newEntity{ base = "BASE_WHIP",
 	desc = [[A long whip of linked metal joints finished with a viciously sharp barb leaking venomous poison.]],
 	require = { stat = { dex=28 }, },
 	cost = 150,
+	rarity = 340,
+	level_range = {20, 30},
 	material_level = 3,
 	combat = {
 		dam = 28,
 		apr = 8,
 		physcrit = 5,
 		dammod = {dex=1},
-		melee_project={[DamageType.POISON] = 22},
+		melee_project={[DamageType.POISON] = 22, [DamageType.BLEED] = 22},
+		talent_on_hit = { T_DISARM = {level=3, chance=10} },
 	},
 	wielder = {
 		combat_atk = 10,
 		see_invisible = 9,
+		see_stealth = 9,
 	},
 }
 
-newEntity{ base = "BASE_LEATHER_BELT",
-	power_source = {technique=true},
-	unique = true,
-	name = "Mighty Girdle", image = "object/artifact/belt_mighty_girdle.png",
-	unided_name = "massive, stained girdle",
-	desc = [[This girdle is enchanted with mighty wards against expanding girth. Whatever the source of its wondrous strength, it will prove of great aid in the transport of awkward burdens.]],
-	color = colors.LIGHT_RED,
-	level_range = {1, 25},
-	rarity = 170,
-	cost = 350,
-	material_level = 5,
-	wielder = {
-		knockback_immune = 0.4,
-		max_encumber = 70,
-		combat_armor = 4,
-	},
-}
-
-
 newEntity{ base = "BASE_LEATHER_BELT",
 	power_source = {nature=true},
 	unique = true,
@@ -1680,7 +1735,7 @@ newEntity{ base = "BASE_LEATHER_BELT",
 	level_range = {20, 30},
 	rarity = 200,
 	cost = 450,
-	material_level = 5,
+	material_level = 2,
 	wielder = {
 		inc_stats = { [Stats.STAT_CUN] = 7, [Stats.STAT_WIL] = 8, },
 		combat_mindpower = 12,
@@ -1730,7 +1785,7 @@ newEntity{ base = "BASE_LEATHER_BELT",
 	level_range = {5, 14},
 	rarity = 120,
 	cost = 75,
-	material_level = 3,
+	material_level = 1,
 	wielder = {
 		inc_stats = { [Stats.STAT_WIL] = 3,  },
 		resists = {
@@ -1753,7 +1808,7 @@ newEntity{ base = "BASE_LIGHT_ARMOR",
 	rarity = 230,
 	require = { stat = { str=22 }, },
 	cost = 250,
-	material_level = 3,
+	material_level = 2,
 	wielder = {
 		inc_stats = { [Stats.STAT_STR] = 2, [Stats.STAT_CON] = 2 },
 
@@ -1790,7 +1845,7 @@ newEntity{ base = "BASE_LIGHT_ARMOR",
 		combat_def = 12,
 		fatigue = 7,
 		max_life = 40,
-		infravision = 6,
+		infravision = 3,
 		talents_types_mastery = { ["cunning/stealth"] = -0.2, },
 	},
 }
@@ -1806,7 +1861,7 @@ newEntity{ base = "BASE_LIGHT_ARMOR",
 	rarity = 350,
 	require = { stat = { str=20 }, {wil=20} },
 	cost = 350,
-	material_level = 4,
+	material_level = 2,
 	wielder = {
 		inc_stats = { [Stats.STAT_WIL] = 3, [Stats.STAT_CON] = 4 },
 
@@ -1840,7 +1895,7 @@ newEntity{ base = "BASE_HEAVY_ARMOR",
 	rarity = 190,
 	require = { stat = { str=14 }, },
 	cost = 200,
-	material_level = 1,
+	material_level = 2,
 	wielder = {
 		inc_stats = { [Stats.STAT_CON] = 2, [Stats.STAT_STR] = 2 },
 		resists = {
@@ -1960,12 +2015,12 @@ newEntity{ base = "BASE_GREATSWORD",
 	unided_name = "three-edged sword",
 	desc = [[The wise ones say that truth is a three-edged sword. And sometimes, the truth hurts.]],
 	level_range = {25, 32},
-	require = { stat = { str=26, wil=26, cun=26 }, },
+	require = { stat = { str=18, wil=18, cun=18 }, },
 	color = colors.GOLD,
 	encumber = 12,
 	cost = 350,
 	rarity = 240,
-	material_level = 4,
+	material_level = 3,
 	moddable_tile = "special/golden_sword_right",
 	moddable_tile_big = true,
 	combat = {
@@ -2263,7 +2318,7 @@ newEntity{ base = "BASE_AMULET",
 	material_level = 4,
 	metallic = false,
 	wielder = {
-		infravision = 5,
+		infravision = 3,
 		resists = { [DamageType.LIGHT] = -25 },
 		resists_cap = { [DamageType.LIGHT] = -25 },
 		blind_immune = 1,
@@ -2283,7 +2338,7 @@ newEntity{ base = "BASE_CLOAK",
 	level_range = {40, 50},
 	rarity = 400,
 	cost = 300,
-	material_level = 3,
+	material_level = 5,
 	wielder = {
 		resists_cap = {
 			[DamageType.FIRE] = 5,
@@ -2310,10 +2365,10 @@ newEntity{ base = "BASE_DIGGER",
 	name = "Pick of Dwarven Emperors", color = colors.GREY, image = "object/artifact/pick_of_dwarven_emperors.png",
 	unided_name = "crude iron pickaxe",
 	desc = [[This ancient pickaxe was used to pass down dwarven legends from one generation to the next.  Every bit of the head and shaft are covered in runes that recount the stories of the dwarven people.]],
-	level_range = {26, 35},
+	level_range = {40, 50},
 	rarity = 290,
 	cost = 150,
-	material_level = 3,
+	material_level = 5,
 	digspeed = 12,
 	wielder = {
 		resists_pen = { [DamageType.PHYSICAL] = 10, },
@@ -2406,7 +2461,7 @@ Touching the cloth you feel a sense of knowledge and power from bygone ages, yet
 	max_power = 40, power_regen = 1,
 	set_list = { {"define_as", "SET_STAFF_CHANNELERS"} },
 	on_set_complete = function(self, who)
-local Talents = require "engine.interface.ActorTalents"
+		local Talents = require "engine.interface.ActorTalents"
 		self.use_talent = { id = Talents.T_METAFLOW, level = 3, power = 40 }
 		game.player:learnLore("channelers-set")
 	end,
@@ -2426,7 +2481,7 @@ newEntity{ base = "BASE_ARROW",
 	level_range = {20, 40},
 	rarity = 300,
 	cost = 100,
-	material_level = 3,
+	material_level = 4,
 	require = { stat = { dex=24 }, },
 	combat = {
 		capacity = 6,
diff --git a/game/modules/tome/data/talents/chronomancy/paradox.lua b/game/modules/tome/data/talents/chronomancy/paradox.lua
index fe420b5acd..1e1ca16851 100644
--- a/game/modules/tome/data/talents/chronomancy/paradox.lua
+++ b/game/modules/tome/data/talents/chronomancy/paradox.lua
@@ -91,10 +91,9 @@ newTalent{
 			return true
 		end
 	
-		-- Manualy start cooldown and spend paradox before the chronoworld is made
+		-- Manualy start cooldown before the chronoworld is made
 		game.player:startTalentCooldown(t)
-		game.player:incParadox(t.paradox * (1 + (game.player.paradox / 300)))
-	
+		
 		-- set up chronoworld next, we'll load it when the target dies in class\actor
 		game:onTickEnd(function()
 			game:chronoClone("cease_to_exist")
diff --git a/game/modules/tome/data/talents/chronomancy/speed-control.lua b/game/modules/tome/data/talents/chronomancy/speed-control.lua
index d8bb4cbf1c..52321a0036 100644
--- a/game/modules/tome/data/talents/chronomancy/speed-control.lua
+++ b/game/modules/tome/data/talents/chronomancy/speed-control.lua
@@ -54,7 +54,7 @@ newTalent{
 		return {type="ball", range=self:getTalentRange(t), radius=self:getTalentRadius(t), selffire=self:spellFriendlyFire(), talent=t}
 	end,
 	getDuration = function(self, t) return 2 + math.ceil(((self:getTalentLevel(t) / 2)) * getParadoxModifier(self, pm)) end,
-	getDamage = function(self, t) return self:combatTalentSpellDamage(t, 20, 170) end,
+	getDamage = function(self, t) return self:combatTalentSpellDamage(t, 20, 170)  * getParadoxModifier(self, pm) end,
 	action = function(self, t)
 		local tg = self:getTalentTarget(t)
 		local x, y = self:getTarget(tg)
diff --git a/game/modules/tome/data/talents/gifts/antimagic.lua b/game/modules/tome/data/talents/gifts/antimagic.lua
index 853c2b180d..b91a24d441 100644
--- a/game/modules/tome/data/talents/gifts/antimagic.lua
+++ b/game/modules/tome/data/talents/gifts/antimagic.lua
@@ -23,28 +23,26 @@ newTalent{
 	require = gifts_req1,
 	mode = "passive",
 	points = 5,
+	getRegen = function(self, t) return 1 + (self:combatTalentMindDamage(t, 1, 10) /10) end,
+	getResist = function(self, t) return self:combatTalentMindDamage(t, 10, 40) end,
 	on_absorb = function(self, t, damtype)
 		if not DamageType:get(damtype).antimagic_resolve then return end
 
 		if not self:isTalentActive(self.T_ANTIMAGIC_SHIELD) then
-			local equi = 1 + self:combatTalentMindDamage(t, 10, 5)
-			local stamina = 1 + self:combatTalentMindDamage(t, 10, 10)
-			self:incEquilibrium(-equi)
-			self:incStamina(stamina)
+			self:incEquilibrium(-t.getRegen(self, t))
+			self:incStamina(t.getRegen(self, t))
 		end
-		self:setEffect(self.EFF_RESOLVE, 7, {damtype=damtype, res=self:combatTalentMindDamage(t, 10, 40)})
+		self:setEffect(self.EFF_RESOLVE, 7, {damtype=damtype, res=t.getResist(self, t)})
 		game.logSeen(self, "%s is invigorated by the attack!", self.name:capitalize())
 	end,
 	info = function(self, t)
+		local resist = t.getResist(self, t)
+		local regen = t.getRegen(self, t)
 		return ([[You stand in the way of magical damage. That which does not kill you makes you stronger.
 		Each time you are hit by a magical damage you get a %d%% resistance to this elemental for 7 turns.
-		If antimagic shield is not active you also absorb part of the impact and use it to fuel your own powers, decreasing your equilibrium by %d and increasing your stamina by %d.
+		If antimagic shield is not active you also absorb part of the impact and use it to fuel your own powers, decreasing your equilibrium and increasing your stamina by %0.2f.
 		The effects will increase with your Mindpower.]]):
-		format(
-			self:combatTalentMindDamage(t, 10, 40),
-			1 + self:combatTalentMindDamage(t, 10, 5),
-			1 + self:combatTalentMindDamage(t, 10, 10)
-		)
+		format(	resist, regen )
 	end,
 }
 
@@ -124,7 +122,7 @@ newTalent{
 	require = gifts_req4,
 	points = 5,
 	equilibrium = 10,
-	cooldown = 6,
+	cooldown = 8,
 	range = 10,
 	tactical = { ATTACK = { ARCANE = 3 } },
 	direct_hit = true,
diff --git a/game/modules/tome/data/timed_effects/other.lua b/game/modules/tome/data/timed_effects/other.lua
index aa342820c3..4c1d708475 100644
--- a/game/modules/tome/data/timed_effects/other.lua
+++ b/game/modules/tome/data/timed_effects/other.lua
@@ -336,7 +336,7 @@ newEffect{
 			if game._chronoworlds then game._chronoworlds = nil end
 			if game.player:knowTalent(game.player.T_FORESIGHT) then
 				local t = game.player:getTalentFromId(game.player.T_FORESIGHT)
-				t.do_precog_foresight(self, t)
+				t.do_precog_foresight(game.player, t)
 			end
 			game.player.energy.value = game.energy_to_act
 			game.paused = true
diff --git a/game/modules/tome/data/timed_effects/physical.lua b/game/modules/tome/data/timed_effects/physical.lua
index 932992d6e4..53c9ff9008 100644
--- a/game/modules/tome/data/timed_effects/physical.lua
+++ b/game/modules/tome/data/timed_effects/physical.lua
@@ -1615,3 +1615,28 @@ newEffect{
 	end,
 }
 
+newEffect{
+	name = "SPELL_DISRUPTION", image = "talents/mana_clash.png",
+	desc = "Spell Disruption",
+	--display_desc = function(self, eff) return eff.cur_power.."% Spell Disruption" end,
+	long_desc = function(self, eff) return ("The target has a %d%% chance to fail any spell it casts and a chance each turn to lose spell sustains."):format(eff.cur_power) end,
+	type = "physical",
+	subtype = { antimagic=true },
+	status = "beneficial",
+	parameters = { power=10, max=50 },
+	on_merge = function(self, old_eff, new_eff)
+		self:removeTemporaryValue("spell_failure", old_eff.tmpid)
+		old_eff.cur_power = math.min(old_eff.cur_power + new_eff.power, new_eff.max)
+		old_eff.tmpid = self:addTemporaryValue("spell_failure", old_eff.cur_power)
+
+		old_eff.dur = new_eff.dur
+		return old_eff
+	end,
+	activate = function(self, eff)
+		eff.cur_power = eff.power
+		eff.tmpid = self:addTemporaryValue("spell_failure", eff.power)
+	end,
+	deactivate = function(self, eff)
+		self:removeTemporaryValue("spell_failure", eff.tmpid)
+	end,
+}
diff --git a/game/modules/tome/dialogs/CharacterSheet.lua b/game/modules/tome/dialogs/CharacterSheet.lua
index bb9a91936f..bc00a89c49 100644
--- a/game/modules/tome/dialogs/CharacterSheet.lua
+++ b/game/modules/tome/dialogs/CharacterSheet.lua
@@ -409,7 +409,7 @@ function _M:drawDialog(kind, actor_to_compare)
 		if text then
 			self:mouseTooltip(self.TOOLTIP_VISION_SIGHT,  s:drawColorStringBlended(self.font, ("Vision range   : #00ff00#%s"):format(text), w, h, 255, 255, 255, true)) h = h + self.font_h
 		end
-		text = compare_fields(player, actor_to_compare, function(actor) return (actor:attr("infravision") or actor:attr("heightened_senses")) and (actor.heightened_senses or 0) + (actor.infravision or 0) end, "%d", "%+.0f")
+		text = compare_fields(player, actor_to_compare, function(actor) return (actor:attr("infravision") or actor:attr("heightened_senses")) and math.max((actor.heightened_senses or 0), (actor.infravision or 0)) end, "%d", "%+.0f")
 		if text then
 			self:mouseTooltip(self.TOOLTIP_VISION_INFRA,  s:drawColorStringBlended(self.font, ("Infravision    : #00ff00#%s"):format(text), w, h, 255, 255, 255, true)) h = h + self.font_h
 		end
diff --git a/game/modules/tome/resolvers.lua b/game/modules/tome/resolvers.lua
index d0428067e2..2f5b2db449 100644
--- a/game/modules/tome/resolvers.lua
+++ b/game/modules/tome/resolvers.lua
@@ -260,6 +260,10 @@ function resolvers.calc.mbonus_material(t, e)
 		e.cost = e.cost + ap
 		v = nv or v
 	end
+	
+	if e.ego_bonus_mult then
+		v = math.ceil(v * (1 + e.ego_bonus_mult))
+	end
 
 	return v
 end
-- 
GitLab