diff --git a/game/engine/KeyBind.lua b/game/engine/KeyBind.lua
index b0cb4d51cf9a7dee199023b46abff38a5d32ffdf..29af2dff71f5b10d65a769d5f292055128042bf0 100644
--- a/game/engine/KeyBind.lua
+++ b/game/engine/KeyBind.lua
@@ -169,6 +169,8 @@ function _M:receiveKey(sym, ctrl, shift, alt, meta, unicode, isup)
 
 	if isup then return end
 
+	if self.any_key then self.any_key(sym, ctrl, shift, alt, meta, unicode, isup) end
+
 	local ks, us = self:makeKeyString(sym, ctrl, shift, alt, meta, unicode)
 --	print("[BIND]", sym, ctrl, shift, alt, meta, unicode, " :=: ", ks, us, " ?=? ", self.binds[ks], us and self.binds[us])
 	if self.binds[ks] and self.virtuals[self.binds[ks]] then
diff --git a/game/modules/tome/class/Game.lua b/game/modules/tome/class/Game.lua
index 82facdc2069d1a951c80218ebe7f727ee108e49a..423926415e4347eb3ae8686473999a8b786ab5c9 100644
--- a/game/modules/tome/class/Game.lua
+++ b/game/modules/tome/class/Game.lua
@@ -459,10 +459,13 @@ end
 
 function _M:setupCommands()
 	self.targetmode_key = engine.KeyBind.new()
-	self.targetmode_key:addCommands{ _SPACE=function() self:targetMode(false, false) end, }
+	self.targetmode_key:addCommands{ _SPACE=function() self:targetMode(false, false) self.tooltip_x, self.tooltip_y = nil, nil end, }
 	self.targetmode_key:addBinds
 	{
-		TACTICAL_DISPLAY = function() self:targetMode(false, false) end,
+		TACTICAL_DISPLAY = function()
+			self:targetMode(false, false)
+			self.tooltip_x, self.tooltip_y = nil, nil
+		end,
 		ACCEPT = function()
 			self:targetMode(false, false)
 			self.tooltip_x, self.tooltip_y = nil, nil
diff --git a/game/modules/tome/data/gfx/particles/lightning.lua b/game/modules/tome/data/gfx/particles/lightning.lua
index a5ffe199a8c55a22517afeec62081a62915ed009..64bdac64c95f73cca358762f6cb57287f98f6ebf 100644
--- a/game/modules/tome/data/gfx/particles/lightning.lua
+++ b/game/modules/tome/data/gfx/particles/lightning.lua
@@ -21,8 +21,9 @@
 local forks = {{}, {}}
 local m1 = forks[1]
 local m2 = forks[2]
-local tx = tx * 32
-local ty = ty * 32
+local tiles = math.ceil(math.sqrt(tx*tx+ty*ty))
+local tx = tx * engine.Map.tile_w
+local ty = ty * engine.Map.tile_h
 local breakdir = math.rad(rng.range(-8, 8))
 m1.bx = 0
 m1.by = 0
@@ -76,7 +77,7 @@ end, },
 function(self)
 	self.nb = (self.nb or 0) + 1
 	if self.nb < 4 then
-		self.ps:emit(1000)
+		self.ps:emit(230*tiles)
 	end
 end,
-4000
+4*230*tiles
diff --git a/game/modules/tome/data/talents/spells/air.lua b/game/modules/tome/data/talents/spells/air.lua
index 4b06487867b544b9d621ead44cbcc49cc069147c..974f6043f7e64da3b56ea3bb1cba89e0d6c92c8c 100644
--- a/game/modules/tome/data/talents/spells/air.lua
+++ b/game/modules/tome/data/talents/spells/air.lua
@@ -35,7 +35,7 @@ newTalent{
 		if not x or not y then return nil end
 		self:project(tg, x, y, DamageType.LIGHTNING, rng.avg(1, self:spellCrit(20 + self:combatSpellpower(0.8) * self:getTalentLevel(t)), 3))
 		local _ _, x, y = self:canProject(tg, x, y)
-		game.level.map:particleEmitter(self.x, self.y, 1, "lightning", {tx=x-self.x, ty=y-self.y})
+		game.level.map:particleEmitter(self.x, self.y, math.max(math.abs(x-self.x), math.abs(y-self.y)), "lightning", {tx=x-self.x, ty=y-self.y})
 		game:playSoundNear(self, "talents/lightning")
 		return true
 	end,
@@ -101,7 +101,7 @@ newTalent{
 			local tgr = {type="beam", range=self:getTalentRange(t), talent=t, x=sx, y=sy}
 			print("[Chain lightning] jumping from", sx, sy, "to", actor.x, actor.y)
 			self:project(tgr, actor.x, actor.y, DamageType.LIGHTNING, rng.avg(1, self:spellCrit(20 + self:combatSpellpower(0.8) * self:getTalentLevel(t)), 5))
-			game.level.map:particleEmitter(sx, sy, 1, "lightning", {tx=actor.x-sx, ty=actor.y-sy})
+			game.level.map:particleEmitter(sx, sy, math.max(math.abs(actor.x-sx), math.abs(actor.y-sy)), "lightning", {tx=actor.x-sx, ty=actor.y-sy})
 			sx, sy = actor.x, actor.y
 		end
 
@@ -193,7 +193,7 @@ newTalent{
 			table.remove(tgts, id)
 
 			self:project(tg, a.x, a.y, DamageType.LIGHTNING, rng.avg(1, self:spellCrit(20 + self:combatSpellpower(0.2) * self:getTalentLevel(t)), 3))
-			game.level.map:particleEmitter(self.x, self.y, 1, "lightning", {tx=a.x-self.x, ty=a.y-self.y})
+			game.level.map:particleEmitter(self.x, self.y, math.max(math.abs(a.x-self.x), math.abs(a.y-self.y)), "lightning", {tx=a.x-self.x, ty=a.y-self.y})
 			game:playSoundNear(self, "talents/lightning")
 		end
 	end,