diff --git a/game/modules/tome/data/talents/cursed/dark-sustenance.lua b/game/modules/tome/data/talents/cursed/dark-sustenance.lua
index 8bd68da571c90a28a91a3c2d4148fb53e9899f99..5c5c19cfcc05d0878f1dcbc7092e2e3c0f1f495b 100644
--- a/game/modules/tome/data/talents/cursed/dark-sustenance.lua
+++ b/game/modules/tome/data/talents/cursed/dark-sustenance.lua
@@ -113,7 +113,7 @@ newTalent{
 
 		if target and not target.dead then
 			local lifeSteal = t.getLifeSteal(self, t)
-			self:project({type="hit", x=target.x,y=target.y}, target.x, target.y, DamageType.DEVOUR_LIFE, { dam=lifeSteal })
+			self:project({type="hit", talent=t, x=target.x,y=target.y}, target.x, target.y, DamageType.DEVOUR_LIFE, { dam=lifeSteal })
 
 			game.level.map:particleEmitter(self.x, self.y, math.max(math.abs(target.x-self.x), math.abs(target.y-self.y)), "dark_torrent", {tx=target.x-self.x, ty=target.y-self.y})
 			--local dx, dy = target.x - self.x, target.y - self.y
diff --git a/game/modules/tome/data/talents/cursed/darkness.lua b/game/modules/tome/data/talents/cursed/darkness.lua
index 224c2bceade5f854faf1b19e3eea433f08026746..25bbe28aff2a5b8aba55232dff2fb6b2d780261a 100644
--- a/game/modules/tome/data/talents/cursed/darkness.lua
+++ b/game/modules/tome/data/talents/cursed/darkness.lua
@@ -223,7 +223,7 @@ newTalent{
 				local actor = game.level.map(self.x, self.y, Map.ACTOR)
 				if actor and actor ~= self.summoner and (not actor.summoner or actor.summoner ~= self.summoner) then
 					self.projecting = true -- simplest way to indicate that this damage should not be amplified by the in creeping dark bonus
-					self.summoner:project(actor, actor.x, actor.y, engine.DamageType.DARKNESS, self.damage)
+					self.summoner:project({type="hit", range=self:getTalentRange(t), talent=self:getTalentFromId(self.T_CREEPING_DARKNESS)}, actor.x, actor.y, engine.DamageType.DARKNESS, self.damage)
 					self.projecting = false
 				end
 
@@ -394,7 +394,7 @@ newTalent{
 				-- your will ignores friendly targets (except for knockback hits)
 				local target = game.level.map(x, y, Map.ACTOR)
 				if target then
-					self:project(target, target.x, target.y, DamageType.DARKNESS, damage)
+					self:project({type="hit", range=self:getTalentRange(t), talent=t}, target.x, target.y, DamageType.DARKNESS, damage)
 					if rng.percent(25) then
 						if not target.dead and target:canBe("blind") then
 							target:setEffect(target.EFF_BLINDED, 3, {apply_power=self:combatMindpower(), min_dur=1})
diff --git a/game/modules/tome/data/talents/cursed/force-of-will.lua b/game/modules/tome/data/talents/cursed/force-of-will.lua
index b6a86824093fb83886597e2b2a438e7199d882b7..1a9ac52be4649e15f2c7247ffdf81c67a27de5b0 100644
--- a/game/modules/tome/data/talents/cursed/force-of-will.lua
+++ b/game/modules/tome/data/talents/cursed/force-of-will.lua
@@ -22,11 +22,11 @@
 -- knockback: distance to knockback
 -- knockbackDamage: when knockback strikes something, both parties take damage - percent of damage * remaining knockback
 -- power: used to determine the initial radius of particles
-local function forceHit(self, target, sourceX, sourceY, damage, knockback, knockbackDamage, power, max)
+local function forceHit(self, t, target, sourceX, sourceY, damage, knockback, knockbackDamage, power, max)
 	-- apply initial damage
 	if damage > 0 then
 		damage = self:mindCrit(damage)
-		self:project(target, target.x, target.y, DamageType.PHYSICAL, damage)
+		self:project({type="hit", range=10, talent=t}, target.x, target.y, DamageType.PHYSICAL, damage)
 		game.level.map:particleEmitter(target.x, target.y, 1, "force_hit", {power=power, dx=target.x - sourceX, dy=target.y - sourceY})
 	end
 
@@ -66,12 +66,12 @@ local function forceHit(self, target, sourceX, sourceY, damage, knockback, knock
 
 				-- take partial damage
 				local blockDamage = damage * util.bound(knockback * (knockbackDamage / 100), 0, 1.5)
-				self:project(target, target.x, target.y, DamageType.PHYSICAL, blockDamage)
+				self:project({type="hit", range=10, talent=t}, target.x, target.y, DamageType.PHYSICAL, blockDamage)
 
 				if nextTarget then
 					-- start a new force hit with the knockback damage and current knockback
 					if max > 0 then
-						forceHit(self, nextTarget, sourceX, sourceY, blockDamage, knockback, knockbackDamage, power / 2, max - 1)
+						forceHit(self, t, nextTarget, sourceX, sourceY, blockDamage, knockback, knockbackDamage, power / 2, max - 1)
 					end
 				end
 
@@ -128,7 +128,7 @@ newTalent{
 		local power = 1 --(1 - ((distance - 1) / range))
 		local damage = t.getDamage(self, t) * power
 		local knockback = t.getKnockback(self, t)
-		forceHit(self, target, self.x, self.y, damage, knockback, 7, power, 10)
+		forceHit(self, t, target, self.x, self.y, damage, knockback, 7, power, 10)
 		return true
 	end,
 	on_learn = function(self, t)
@@ -266,7 +266,7 @@ newTalent{
 					local localDamage = damage * power
 					local dazeDuration = t.getDazeDuration(self, t)
 
-					forceHit(self, target, blastX, blastY, damage, math.max(0, knockback - distance), 7, power, 10)
+					forceHit(self, t, target, blastX, blastY, damage, math.max(0, knockback - distance), 7, power, 10)
 					if target:canBe("stun") then
 						target:setEffect(target.EFF_DAZED, dazeDuration, {src=self})
 					end
@@ -351,7 +351,7 @@ newTalent{
 			-- Randomly take targets
 			for i = 1, hitCount do
 				local target, index = rng.table(targets)
-				forceHit(self, target, target.x, target.y, damage, knockback, 7, 0.6, 10)
+				forceHit(self, t, target, target.x, target.y, damage, knockback, 7, 0.6, 10)
 			end
 		end
 
diff --git a/game/modules/tome/data/talents/cursed/punishments.lua b/game/modules/tome/data/talents/cursed/punishments.lua
index 792295bd099f8a735267a68ffb7fc406990f22f6..bf19249a78f09794828040b582b269446ce0d178 100644
--- a/game/modules/tome/data/talents/cursed/punishments.lua
+++ b/game/modules/tome/data/talents/cursed/punishments.lua
@@ -53,7 +53,7 @@ newTalent{
 			damage = damage * math.pow(spreadFactor, #targets - 1)
 		end
 		for i, t in ipairs(targets) do
-			self:project({type="hit", x=t.x,y=t.y}, t.x, t.y, DamageType.MIND, { dam=damage, crossTierChance=25 })
+			self:project({type="hit", talent=t, x=t.x,y=t.y}, t.x, t.y, DamageType.MIND, { dam=damage, crossTierChance=25 })
 			game.level.map:particleEmitter(t.x, t.y, 1, "reproach", { dx = self.x - t.x, dy = self.y - t.y })
 		end