diff --git a/game/modules/tome/class/Player.lua b/game/modules/tome/class/Player.lua
index 65ea22ea60dae1e7fd7f83d3e4893e387ed7b168..d0d94e9741aa50ada2eb680dfc7797dba1051679 100644
--- a/game/modules/tome/class/Player.lua
+++ b/game/modules/tome/class/Player.lua
@@ -574,6 +574,25 @@ function _M:playerFOV()
 		end, true, true, true)
 	end
 
+	-- See everything and ignore all forms of blocking, dev mode feature
+	if self:attr("omnivision") then
+		self:computeFOV(self:attr("omnivision"), "we_need_useless_string_not_nil", function(x, y)
+			local ok = false
+			if game.level.map(x, y, game.level.map.ACTOR) then ok = true end
+			if game.level.map(x, y, game.level.map.OBJECT) then ok = true end
+			if game.level.map(x, y, game.level.map.TRAP) then
+				game.level.map(x, y, game.level.map.TRAP):setKnown(self, true, x, y)
+				game.level.map.remembers(x, y, true)
+				game.level.map:updateMap(x, y)
+				ok = true
+			end
+
+			if ok then
+				game.level.map.seens(x, y, 0.6)
+			end
+		end, true, true, true)
+	end
+
 	-- Handle arcane eye
 	if self:hasEffect(self.EFF_ARCANE_EYE) then
 		local eff = self:hasEffect(self.EFF_ARCANE_EYE)
diff --git a/game/modules/tome/data/timed_effects/other.lua b/game/modules/tome/data/timed_effects/other.lua
index 2f94a4d6b87201b61f7d6c5cb398317737d7bd99..aeef9bf466073b776af9e503ad4fddf002120ecc 100644
--- a/game/modules/tome/data/timed_effects/other.lua
+++ b/game/modules/tome/data/timed_effects/other.lua
@@ -3975,6 +3975,23 @@ newEffect{
 	end,
 }
 
+newEffect{
+	name = "OMNIVISION", image = "talents/track.png",
+	desc = "Sensing Everything",
+	long_desc = function(self, eff) return "Improves senses, allowing the detection of everything." end,
+	type = "other",
+	subtype = { sense=true },
+	status = "beneficial",
+	parameters = { range=10,},
+	activate = function(self, eff)
+		self:effectTemporaryValue(eff, "omnivision", eff.range)
+		game.level.map.changed = true
+	end,
+	deactivate = function(self, eff)
+
+	end,
+}
+
 newEffect{
 	name = "DOZING", image = "talents/sleep.png",
 	desc = "Dozing",
@@ -3988,4 +4005,4 @@ newEffect{
 	end,
 	deactivate = function(self, eff)
 	end,
-}
\ No newline at end of file
+}
diff --git a/game/modules/tome/dialogs/debug/DebugMain.lua b/game/modules/tome/dialogs/debug/DebugMain.lua
index a4388b959be8cd0c75012fb7a2a1259e17a4be9d..f4c6116e1720f9eab335ccf5880c7adadd40175e 100644
--- a/game/modules/tome/dialogs/debug/DebugMain.lua
+++ b/game/modules/tome/dialogs/debug/DebugMain.lua
@@ -93,6 +93,9 @@ function _M:use(item)
 				end
 			end
 		end
+		game.player:setEffect(game.player.EFF_OMNIVISION, 100, {
+			range = 200,
+		})
 	elseif act == "change_level" then
 		game:registerDialog(GetQuantity.new("Zone: "..game.zone.name, "Level 1-"..game.zone.max_level, game.level.level, game.zone.max_level, function(qty)
 			game:changeLevel(qty)