diff --git a/game/engines/default/engine/ai/talented.lua b/game/engines/default/engine/ai/talented.lua
index b2bd43fe2b4e0c181c4fc31ff625f0ba2f0eef38..bee35b1c7bde906d5d6ed4cbbd457bc680f247b1 100644
--- a/game/engines/default/engine/ai/talented.lua
+++ b/game/engines/default/engine/ai/talented.lua
@@ -30,7 +30,7 @@ newAI("dumb_talented", function(self)
 --		print(self.name, self.uid, "dumb ai talents can try use", t.name, tid, "::", t.mode, not self:isTalentCoolingDown(t), target_dist <= self:getTalentRange(t), self:preUseTalent(t, true), self:canProject({type="bolt"}, self.ai_target.actor.x, self.ai_target.actor.y))
 		-- For dumb AI assume we need range and LOS
 		-- No special check for bolts, etc.
-		local total_range = self:getTalentRange(t) + self:getTalentRadius(t)
+		local total_range = (self:getTalentRange(t) or 0) + (self:getTalentRadius(t) or 0)
 		local tg = {type=util.getval(t.direct_hit, self, t) and "hit" or "bolt", range=total_range}
 		if t.mode == "activated" and not t.no_npc_use and
 		   not self:isTalentCoolingDown(t) and self:preUseTalent(t, true, true) and
diff --git a/game/modules/tome/ai/tactical.lua b/game/modules/tome/ai/tactical.lua
index 2d78bfcd3a11d6b9acfcc903fd69a656c87f9189..2323a973956863307ed65e31f7d8d29806a04f33 100644
--- a/game/modules/tome/ai/tactical.lua
+++ b/game/modules/tome/ai/tactical.lua
@@ -83,7 +83,7 @@ newAI("use_tactical", function(self)
 			local tg = self:getTalentTarget(t)
 			local default_tg = {type=util.getval(t.direct_hit, self, t) and "hit" or "bolt"}
 			-- Only assume range... some talents may no require LOS, etc
-			local within_range = target_dist and target_dist <= (self:getTalentRange(t) + self:getTalentRadius(t))
+			local within_range = target_dist and target_dist <= ((self:getTalentRange(t) or 0) + (self:getTalentRadius(t) or 0))
 			if t.mode == "activated" and not t.no_npc_use and
 			   not self:isTalentCoolingDown(t) and self:preUseTalent(t, true, true) and
 			   (not self:getTalentRequiresTarget(t) or within_range)