diff --git a/game/modules/tome/data/talents/gifts/summon-augmentation.lua b/game/modules/tome/data/talents/gifts/summon-augmentation.lua
index c9f51ceab51ef8f5739562b89d94c0f5d56f0fa5..d7ecab2562013b326dbf151307061877d81a94fe 100644
--- a/game/modules/tome/data/talents/gifts/summon-augmentation.lua
+++ b/game/modules/tome/data/talents/gifts/summon-augmentation.lua
@@ -67,6 +67,14 @@ newTalent{
 		end
 	end,
 --]]
+	explodeDamage = function(self,t) return self:combatTalentMindDamage(t, 30, 250) end,
+	explodeBleed = function(self,t) return self:combatTalentMindDamage(t, 30, 350) end,
+	explodeBurn = function(self,t) return self:combatTalentMindDamage(t, 30, 300) end,
+	explodeFire = function(self,t) return self:combatTalentMindDamage(t, 10, 70) end,
+	knockbackDamage = function(self,t) return self:combatTalentMindDamage(t, 30, 150) end,
+	knockbackDist = function(self,t) return 4 end,
+	shellShiedling = function(self,t) return self:combatTalentMindDamage(t, 10, 35) end,
+	explodePin = function(self,t) return 3 end,
 	action = function(self, t)
 		local tg = {type="hit", range=self:getTalentRange(t), talent=t, first_target="friend"}
 		local tx, ty, target = self:getTarget(tg)
@@ -97,19 +105,19 @@ newTalent{
 	info = function(self, t)
 		local radius = self:getTalentRadius(t)
 		return ([[Destroys one of your summons, making it detonate in radius of %d.
-		- Ritch Flamespitter: Explodes into a fireball
-		- Hydra: Explodes into a ball of lightning, acid or poison
-		- Rimebark: Explodes into an iceball
-		- Fire Drake: Generates a cloud of fire
-		- War Hound: Explodes into a ball of physical damage
-		- Jelly: Explodes into a ball of slowing slime
-		- Minotaur: Explodes into a sharp ball, cutting all creatures
-		- Stone Golem: Knocks back all creatures
-		- Turtle: Grants a small shell shield to all friendly creatures
-		- Spider: Pins all foes around
+		- Ritch Flamespitter: Explodes into a fireball dealing %d damage
+		- Hydra: Explodes into a ball of %d lightning, acid or poison damage, chosen at random
+		- Rimebark: Explodes into an iceball dealing %d ice damage, possibly freezing damaged foes
+		- Fire Drake: Explodes into a cloud of lingering fire, dealing %d damage per turn
+		- War Hound: Explodes into a ball dealing %d physical damage
+		- Jelly: Explodes into a ball of slowing slime, dealing %d nature damage and slowing foes by 15%%
+		- Minotaur: Explodes into a sharp ball, cutting all creatures for %0.1f bleeding damage per turn for 6 turns
+		- Stone Golem: Knocks back all creatures %d tiles and deals %d physical damage
+		- Turtle: Grants a small shell shield to all friendly creatures, granting %d%% all resist
+		- Spider: Pins all foes around for %d turns
 		In addition, a random summon will come off cooldown.
 		Hostile effects will not hit you or your other summons.
-		The effects improve with your Willpower.]]):format(radius)
+		The effects improve with your mindpower, and can crit.]]):format(radius, t.explodeBurn(self,t), t.explodeDamage(self,t), t.explodeBurn(self,t), t.explodeFire(self,t), t.explodeDamage(self, t), t.explodeDamage(self,t), t.explodeBleed(self,t) / 6, t.knockbackDist(self,t), t.knockbackDamage(self,t), t.shellShiedling(self,t), t.explodePin(self,t))
 	end,
 }
 
diff --git a/game/modules/tome/data/talents/gifts/summon-distance.lua b/game/modules/tome/data/talents/gifts/summon-distance.lua
index a3271487a25277d784cba4ef968cb424012aabcf..b039e29158eda6d0daaa119d63a8acfe8469bcd2 100644
--- a/game/modules/tome/data/talents/gifts/summon-distance.lua
+++ b/game/modules/tome/data/talents/gifts/summon-distance.lua
@@ -404,7 +404,8 @@ newTalent{
 	on_pre_use_ai = aiSummonPreUse,
 	on_detonate = function(self, t, m)
 		local tg = {type="ball", range=self:getTalentRange(t), friendlyfire=false, radius=self:getTalentRadius(t), talent=t, x=m.x, y=m.y}
-		self:project(tg, m.x, m.y, DamageType.FIREBURN, self:mindCrit(self:combatTalentMindDamage(t, 30, 300)))
+		local explodeBurn = self:callTalent(self.T_DETONATE,"explodeBurn")
+		self:project(tg, m.x, m.y, DamageType.FIREBURN, self:mindCrit(explodeBurn))
 		game.level.map:particleEmitter(m.x, m.y, tg.radius, "ball_fire", {radius=tg.radius})
 	end,
 	on_arrival = function(self, t, m)
@@ -518,7 +519,8 @@ newTalent{
 	on_pre_use_ai = aiSummonPreUse,
 	on_detonate = function(self, t, m)
 		local tg = {type="ball", range=self:getTalentRange(t), friendlyfire=false, radius=self:getTalentRadius(t), talent=t, x=m.x, y=m.y}
-		self:project(tg, m.x, m.y, rng.table{DamageType.LIGHTNING,DamageType.ACID,DamageType.POISON}, self:mindCrit(self:combatTalentMindDamage(t, 30, 250)), {type="flame"})
+		local explodeDamage = self:callTalent(self.T_RESILIENCE,"explodeDamage")
+		self:project(tg, m.x, m.y, rng.table{DamageType.LIGHTNING,DamageType.ACID,DamageType.POISON}, self:mindCrit(explodeDamage), {type="flame"})
 	end,
 	on_arrival = function(self, t, m)
 		local tg = {type="ball", range=self:getTalentRange(t), radius=self:getTalentRadius(t), talent=t, x=m.x, y=m.y}
@@ -639,7 +641,8 @@ newTalent{
 	on_pre_use_ai = aiSummonPreUse,
 	on_detonate = function(self, t, m)
 		local tg = {type="ball", range=self:getTalentRange(t), friendlyfire=false, radius=self:getTalentRadius(t), talent=t, x=m.x, y=m.y}
-		self:project(tg, m.x, m.y, DamageType.ICE, self:mindCrit(self:combatTalentMindDamage(t, 30, 300)), {type="freeze"})
+		local explodeDamage = self:callTalent(self.T_RESILIENCE,"explodeBurn")
+		self:project(tg, m.x, m.y, DamageType.ICE, self:mindCrit(explodeDamage), {type="freeze"})
 	end,
 	on_arrival = function(self, t, m)
 		local tg = {type="ball", range=self:getTalentRange(t), radius=self:getTalentRadius(t), talent=t, x=m.x, y=m.y}
@@ -753,9 +756,10 @@ newTalent{
 	end,
 	on_pre_use_ai = aiSummonPreUse,
 	on_detonate = function(self, t, m)
+		local explodeFire = self:callTalent(self.T_DETONATE,"explodeFire")
 		game.level.map:addEffect(self,
 			m.x, m.y, 6,
-			DamageType.FIRE, self:mindCrit(self:combatTalentMindDamage(t, 10, 70)),
+			DamageType.FIRE, self:mindCrit(explodeFire),
 			self:getTalentRadius(t),
 			5, nil,
 			{type="inferno"},
diff --git a/game/modules/tome/data/talents/gifts/summon-melee.lua b/game/modules/tome/data/talents/gifts/summon-melee.lua
index f52297cdc0b707047cd5c30b4f63fd018b8352d2..8257c10387e3b81d2efd2a1a7cb12941387e0126 100644
--- a/game/modules/tome/data/talents/gifts/summon-melee.lua
+++ b/game/modules/tome/data/talents/gifts/summon-melee.lua
@@ -97,7 +97,8 @@ newTalent{
 	on_pre_use_ai = aiSummonPreUse,
 	on_detonate = function(self, t, m)
 		local tg = {type="ball", range=self:getTalentRange(t), friendlyfire=false, radius=self:getTalentRadius(t), talent=t, x=m.x, y=m.y}
-		self:project(tg, m.x, m.y, DamageType.PHYSICAL, self:mindCrit(self:combatTalentMindDamage(t, 30, 250)), {type="flame"})
+		local explodeDamage = self:callTalent(self.T_DETONATE,"explodeDamage")
+		self:project(tg, m.x, m.y, DamageType.PHYSICAL, self:mindCrit(explodeDamage), {type="flame"})
 	end,
 	on_arrival = function(self, t, m)
 		local tg = {type="ball", range=self:getTalentRange(t), radius=self:getTalentRadius(t), talent=t, x=m.x, y=m.y}
@@ -204,7 +205,8 @@ newTalent{
 	on_pre_use_ai = aiSummonPreUse,
 	on_detonate = function(self, t, m)
 		local tg = {type="ball", range=self:getTalentRange(t), friendlyfire=false, radius=self:getTalentRadius(t), talent=t, x=m.x, y=m.y}
-		self:project(tg, m.x, m.y, DamageType.SLIME, self:mindCrit(self:combatTalentMindDamage(t, 30, 200)), {type="flame"})
+		local explodeDamage = self:callTalent(self.T_DETONATE, "explodeDamage")
+		self:project(tg, m.x, m.y, DamageType.SLIME, self:mindCrit(explodeDamage), {type="flame"})
 	end,
 	on_arrival = function(self, t, m)
 		local tg = {type="ball", range=self:getTalentRange(t), radius=self:getTalentRadius(t), talent=t, x=m.x, y=m.y}
@@ -322,7 +324,8 @@ newTalent{
 	on_pre_use_ai = aiSummonPreUse,
 	on_detonate = function(self, t, m)
 		local tg = {type="ball", range=self:getTalentRange(t), friendlyfire=false, radius=self:getTalentRadius(t), talent=t, x=m.x, y=m.y}
-		self:project(tg, m.x, m.y, DamageType.BLEED, self:mindCrit(self:combatTalentMindDamage(t, 30, 350)), {type="flame"})
+		local explodeBleed = self:callTalent(self.T_DETONATE, "explodeBleed")
+		self:project(tg, m.x, m.y, DamageType.BLEED, self:mindCrit(explodeBleed), {type="flame"})
 	end,
 	on_arrival = function(self, t, m)
 		local tg = {type="ball", range=self:getTalentRange(t), radius=self:getTalentRadius(t), talent=t, x=m.x, y=m.y}
@@ -434,7 +437,9 @@ newTalent{
 	on_pre_use_ai = aiSummonPreUse,
 	on_detonate = function(self, t, m)
 		local tg = {type="ball", range=self:getTalentRange(t), friendlyfire=false, radius=self:getTalentRadius(t), talent=t, x=m.x, y=m.y}
-		self:project(tg, m.x, m.y, DamageType.PHYSKNOCKBACK, {dam=self:mindCrit(self:combatTalentMindDamage(t, 30, 150)), dist=4}, {type="flame"})
+		local distance = self:callTalent(self.T_DETONATE, "knockbackDist")
+		local knockbackDamage = self:callTalent(self.T_DETONATE, "knockbackDamage")
+		self:project(tg, m.x, m.y, DamageType.PHYSKNOCKBACK, {dam=self:mindCrit(knockbackDamage), dist=dist}, {type="flame"})
 	end,
 	on_arrival = function(self, t, m)
 		local tg = {type="ball", range=self:getTalentRange(t), radius=self:getTalentRadius(t), talent=t, x=m.x, y=m.y}
diff --git a/game/modules/tome/data/talents/gifts/summon-utility.lua b/game/modules/tome/data/talents/gifts/summon-utility.lua
index 80ae4325ee9b82b66ca201526133ce5b318af4b2..464e9445184d86d431635b885bdf7a03d07af4c6 100644
--- a/game/modules/tome/data/talents/gifts/summon-utility.lua
+++ b/game/modules/tome/data/talents/gifts/summon-utility.lua
@@ -110,10 +110,11 @@ newTalent{
 	on_pre_use_ai = aiSummonPreUse,
 	on_detonate = function(self, t, m)
 		local tg = {type="ball", range=self:getTalentRange(t), radius=self:getTalentRadius(t), talent=t, x=m.x, y=m.y, ignore_nullify_all_friendlyfire=true}
+		local shellShielding = self:callTalent(self.T_DETONATE,"shellShielding")
 		self:project(tg, m.x, m.y, function(px, py)
 			local target = game.level.map(px, py, Map.ACTOR)
 			if not target or self:reactionToward(target) < 0 then return end
-			target:setEffect(target.EFF_SHELL_SHIELD, 4, {power=self:mindCrit(self:combatTalentMindDamage(t, 10, 35))})
+			target:setEffect(target.EFF_SHELL_SHIELD, 4, {power=self:mindCrit(shellShielding)})
 		end, nil, {type="flame"})
 	end,
 	summonTime = function(self, t) return math.floor(self:combatScale(self:getTalentLevel(t), 5, 0, 10, 5)) + self:callTalent(self.T_RESILIENCE, "incDur") end,
@@ -234,12 +235,13 @@ newTalent{
 	end,
 	on_pre_use_ai = aiSummonPreUse,
 	on_detonate = function(self, t, m)
+		local explodePin = self:callTalent(self.T_DETONATE,"explodePin")
 		local tg = {type="ball", range=self:getTalentRange(t), friendlyfire=false, radius=self:getTalentRadius(t), talent=t, x=m.x, y=m.y}
 		self:project(tg, m.x, m.y, function(px, py)
 			local target = game.level.map(px, py, Map.ACTOR)
 			if not target or self:reactionToward(target) >= 0 then return end
 			if target:canBe("pin") then
-				target:setEffect(target.EFF_PINNED, 3, {apply_power=self:mindCrit(self:combatMindpower())})
+				target:setEffect(target.EFF_PINNED, explodePin, {apply_power=self:mindCrit(self:combatMindpower())})
 			end
 		end, nil, {type="flame"})
 	end,