diff --git a/game/modules/tome/class/Player.lua b/game/modules/tome/class/Player.lua
index 5ecaff7e00045cc52fd6ba6a6e2ca2e434102783..4e4a816586b6739f9b1454900dbbad2f2ba448f5 100644
--- a/game/modules/tome/class/Player.lua
+++ b/game/modules/tome/class/Player.lua
@@ -276,8 +276,15 @@ local arcane_eye_true_seeing = function() return true, 100 end
 function _M:playerFOV()
 	-- Clean FOV before computing it
 	game.level.map:cleanFOV()
+
+	-- Do wilderness stuff, nothing else
+	if game.zone.wilderness then
+		self:computeFOV(game.zone.wilderness_see_radius, "block_sight", function(x, y, dx, dy, sqdist) game.level.map:applyLite(x, y, wild_fovdist[sqdist]) end, true, true, true)
+		return
+	end
+
 	-- Compute ESP FOV, using cache
-	if not game.zone.wilderness then self:computeFOV(self.esp.range or 10, "block_esp", function(x, y) game.level.map:applyESP(x, y, 0.6) end, true, true, true) end
+	self:computeFOV(self.esp.range or 10, "block_esp", function(x, y) game.level.map:applyESP(x, y, 0.6) end, true, true, true)
 
 	-- Handle Sense spell, a simple FOV, using cache. Note that this means some terrain features can be made to block sensing
 	if self:attr("detect_range") then
@@ -373,15 +380,11 @@ function _M:playerFOV()
 
 		-- Compute both the normal and the lite FOV, using cache
 		-- Do it last so it overrides others
-		if game.zone.wilderness_see_radius then
-			self:computeFOV(game.zone.wilderness_see_radius, "block_sight", function(x, y, dx, dy, sqdist) game.level.map:applyLite(x, y, wild_fovdist[sqdist]) end, true, true, true)
-		else
-			self:computeFOV(self.sight or 10, "block_sight", function(x, y, dx, dy, sqdist)
-				game.level.map:apply(x, y, fovdist[sqdist])
-			end, true, false, true)
-			if self.lite <= 0 then game.level.map:applyLite(self.x, self.y)
-			else self:computeFOV(self.lite, "block_sight", function(x, y, dx, dy, sqdist) game.level.map:applyLite(x, y) end, true, true, true) end
-		end
+		self:computeFOV(self.sight or 10, "block_sight", function(x, y, dx, dy, sqdist)
+			game.level.map:apply(x, y, fovdist[sqdist])
+		end, true, false, true)
+		if self.lite <= 0 then game.level.map:applyLite(self.x, self.y)
+		else self:computeFOV(self.lite, "block_sight", function(x, y, dx, dy, sqdist) game.level.map:applyLite(x, y) end, true, true, true) end
 	end
 end
 
diff --git a/game/modules/tome/data/damage_types.lua b/game/modules/tome/data/damage_types.lua
index c0a106e965baa683c841ba4a145ff0d6b91fd775..48005b1ab1ffa217866794dd281d30899a10c9de 100644
--- a/game/modules/tome/data/damage_types.lua
+++ b/game/modules/tome/data/damage_types.lua
@@ -121,13 +121,13 @@ setDefaultProjector(function(src, x, y, type, dam, tmp, no_martyr)
 
 		local sx, sy = game.level.map:getTileToScreen(x, y)
 		if target:takeHit(dam, src) then
-			if rsrc == game.player or rtarget == game.player or game.party:hasMember(rsrc) or game.party:hasMember(rtarget) then
+			if game.level.map.seens(x, y) and (rsrc == game.player or rtarget == game.player or game.party:hasMember(rsrc) or game.party:hasMember(rtarget)) then
 				game.flyers:add(sx, sy, 30, (rng.range(0,2)-1) * 0.5, -3, "Kill!", {255,0,255})
 			end
 		elseif not DamageType:get(type).hideFlyer then
-			if rsrc == game.player or game.party:hasMember(rsrc) then
+			if game.level.map.seens(x, y) and (rsrc == game.player or game.party:hasMember(rsrc)) then
 				game.flyers:add(sx, sy, 30, (rng.range(0,2)-1) * 0.5, -3, tostring(-math.ceil(dam)), {0,255,0})
-			elseif rtarget == game.player or game.party:hasMember(rtarget) then
+			elseif game.level.map.seens(x, y) and (rtarget == game.player or game.party:hasMember(rtarget)) then
 				game.flyers:add(sx, sy, 30, (rng.range(0,2)-1) * 0.5, -3, tostring(-math.ceil(dam)), {255,0,0})
 			end
 		end