diff --git a/game/engines/default/engine/Level.lua b/game/engines/default/engine/Level.lua
index e0c06618f5fe67e8c22e06523319760b0d4474e0..75f96397162663282770c3e93b03c600a5d5fb45 100644
--- a/game/engines/default/engine/Level.lua
+++ b/game/engines/default/engine/Level.lua
@@ -160,7 +160,7 @@ function _M:setEntitiesList(type, list, permanent)
 	else
 		self.entities_list[type] = list
 	end
-	print("Stored entities list", type, list)
+--	print("Stored entities list", type, list)
 end
 
 --- Gets an entity list for the level, this allows the Zone to pick objects/actors/...
diff --git a/game/engines/default/engine/interface/ActorTalents.lua b/game/engines/default/engine/interface/ActorTalents.lua
index 4c21f8bb704f5d08b4729cbb016d577fa389a32f..94fd23a0fda9185b0ee109a110422367f2d98682 100644
--- a/game/engines/default/engine/interface/ActorTalents.lua
+++ b/game/engines/default/engine/interface/ActorTalents.lua
@@ -263,7 +263,7 @@ end
 -- @param nb the amount to increase the raw talent level by, default 1
 -- @return true if the talent was learnt, nil and an error message otherwise
 function _M:learnTalent(t_id, force, nb)
-	print("[TALENT]", self.name, self.uid, "learning", t_id, force, nb)
+--	print("[TALENT]", self.name, self.uid, "learning", t_id, force, nb)
 	local t = _M.talents_def[t_id]
 
 	if not force then
diff --git a/game/engines/default/engine/resolvers.lua b/game/engines/default/engine/resolvers.lua
index 4896c6c8f34b04aa66a2bb2b3f74c269c4ad2ef5..1e7e270a8066beaf7aa6ec2e44fab550cf878efa 100644
--- a/game/engines/default/engine/resolvers.lua
+++ b/game/engines/default/engine/resolvers.lua
@@ -86,7 +86,7 @@ function resolvers.calc.talents(t, e)
 			level = level.base
 			lvls = true
 		end
-		print("Talent resolver for", e.name, ":", tid, "=>", level)
+--		print("Talent resolver for", e.name, ":", tid, "=>", level)
 		e:learnTalent(tid, true, level)
 	end
 	if lvls then e._levelup_talents = levelup_talents end
@@ -108,7 +108,7 @@ function resolvers.calc.rngtalent(t, e)
 		level = level.base
 		lvls = true
 	end
-	print("RNG Talent resolver for", e.name, ":", tid, "=>", level)
+--	print("RNG Talent resolver for", e.name, ":", tid, "=>", level)
 	e:learnTalent(tid, true, level)
 
 	if lvls then e._levelup_talents = levelup_talents end
diff --git a/game/modules/tome/class/Actor.lua b/game/modules/tome/class/Actor.lua
index bf86bbfb7135aece5341200ce27680c5316af773..c0f11528542a37424682f67415dbc37835046e4a 100644
--- a/game/modules/tome/class/Actor.lua
+++ b/game/modules/tome/class/Actor.lua
@@ -610,7 +610,7 @@ function _M:act()
 		end
 	end
 	if self:attr("stoned") then self.energy.value = 0 end
---	if self:attr("dazed") then self.energy.value = 0 end
+	if self:attr("dont_act") then self.energy.value = 0 end
 	if self:attr("sleep") and not self:attr("lucid_dreamer") then self.energy.value = 0 end
 	if self:attr("time_stun") then self.energy.value = 0 end
 	if self:attr("time_prison") then self.energy.value = 0 end
diff --git a/game/modules/tome/class/GameState.lua b/game/modules/tome/class/GameState.lua
index 919356aeb0ccc867aa0dcddcfef430fe7748a6dc..a8fdfc7eeb00b811de5586bc3b221f10f1cb1cbe 100644
--- a/game/modules/tome/class/GameState.lua
+++ b/game/modules/tome/class/GameState.lua
@@ -1007,7 +1007,7 @@ local loot_mod = {
 local default_drops = function(zone, level, what)
 	if zone.default_drops then return zone.default_drops end
 	local lev = util.bound(math.ceil(zone:level_adjust_level(level, "object") / 10), 1, 5)
-	print("[TOME ENTITY FILTER] making default loot table for", what, lev)
+--	print("[TOME ENTITY FILTER] making default loot table for", what, lev)
 	return table.clone(drop_tables[what][lev])
 end
 
@@ -1038,7 +1038,7 @@ function _M:entityFilterAlter(zone, level, type, filter)
 			t = table.clone(t)
 			if _G.type(filter.tome_mod) == "string" then filter.tome_mod = loot_mod[filter.tome_mod] end
 			for k, v in pairs(filter.tome_mod) do
-				print(" ***** LOOT MOD", k, v)
+--				print(" ***** LOOT MOD", k, v)
 				t[k] = (t[k] or 0) * v
 			end
 		end
diff --git a/game/modules/tome/class/Grid.lua b/game/modules/tome/class/Grid.lua
index 5a04a351e7c28eb4ea43d977f86b15619c989a91..0b2c34744431f6bbfd14b37d2fdc8ae44a034fab 100644
--- a/game/modules/tome/class/Grid.lua
+++ b/game/modules/tome/class/Grid.lua
@@ -54,6 +54,8 @@ function _M:block_move(x, y, e, act, couldpass)
 					if ret then
 						game.level.map(x, y, engine.Map.TERRAIN, game.zone.grid_list[self.door_opened])
 						game:playSoundNear({x=x,y=y}, {"ambient/door_creaks/creak_%d",1,4})
+
+						if game.level.map.attrs(x, y, "vault_id") and e.openVault then e:openVault(game.level.map.attrs(x, y, "vault_id")) end
 					end
 				end, "Open", "Leave")
 			end
@@ -64,6 +66,8 @@ function _M:block_move(x, y, e, act, couldpass)
 		else
 			game.level.map(x, y, engine.Map.TERRAIN, game.zone.grid_list[self.door_opened])
 			game:playSoundNear({x=x,y=y}, {"ambient/door_creaks/creak_%d",1,4})
+
+			if game.level.map.attrs(x, y, "vault_id") and e.openVault then e:openVault(game.level.map.attrs(x, y, "vault_id")) end
 		end
 		return true
 	elseif self.door_opened and not couldpass then
diff --git a/game/modules/tome/class/Player.lua b/game/modules/tome/class/Player.lua
index d00d61c06a9e1596f49a11c76bb0cf133284b05e..4fa241d2fdff0d66548a5213e1319e205ebacb51 100644
--- a/game/modules/tome/class/Player.lua
+++ b/game/modules/tome/class/Player.lua
@@ -201,6 +201,22 @@ function _M:describeFloor(x, y, force)
 	end
 end
 
+function _M:openVault(vault_id)
+	local v = game.level.vaults_list[vault_id]
+	if not v then return end
+
+	print("Vault id", vault_id, "opens:", v.x, v.y, v.w, v.h)
+	for i = v.x, v.x + v.w - 1 do for j = v.y, v.y + v.h - 1 do
+		if  game.level.map.attrs(i, j, "vault_id") == vault_id then
+			 game.level.map.attrs(i, j, "vault_id", false)
+			 local act = game.level.map(i, j, Map.ACTOR)
+			 if act and not act.player then
+			 	act:removeEffect(act.EFF_VAULTED, true, true)
+			 end
+		end
+	end end
+end
+
 function _M:move(x, y, force)
 	local ox, oy = self.x, self.y
 	local moved = mod.class.Actor.move(self, x, y, force)
@@ -217,6 +233,8 @@ function _M:move(x, y, force)
 		game.level.map.attrs(self.x, self.y, "walked", true)
 
 		if self.describeFloor then self:describeFloor(self.x, self.y) end
+
+		if not force and game.level.map.attrs(self.x, self.y, "vault_id") and not game.level.map.attrs(self.x, self.y, "vault_only_door_open") then self:openVault(game.level.map.attrs(self.x, self.y, "vault_id")) end
 	end
 
 --	if not force and ox == self.x and oy == self.y and self.tryPlayerSlide then
diff --git a/game/modules/tome/class/interface/ActorInscriptions.lua b/game/modules/tome/class/interface/ActorInscriptions.lua
index 8b483b58748516bf3c8ef94ccbc77dff11d175ad..9234b41506082851f961273d581a145574e1147f 100644
--- a/game/modules/tome/class/interface/ActorInscriptions.lua
+++ b/game/modules/tome/class/interface/ActorInscriptions.lua
@@ -99,7 +99,7 @@ function _M:setInscription(id, name, data, cooldown, vocal, src, bypass_max_same
 	if src and src.obj then data.item_name = src.obj:getName{do_color=true, no_count=true}:toTString() end
 	self.inscriptions_data[name] = data
 	self.inscriptions[id] = name
-	print("Inscribing on "..self.name..": "..tostring(name))
+--	print("Inscribing on "..self.name..": "..tostring(name))
 	self:learnTalent(self["T_"..name], true, 1, {no_unlearn=true})
 	local t = self:getTalentFromId(self["T_"..name])
 	if cooldown then self:startTalentCooldown(t) end
diff --git a/game/modules/tome/data/maps/vaults/amon-sul-crypt.lua b/game/modules/tome/data/maps/vaults/amon-sul-crypt.lua
index f23d93c546e5eb328255e994b599b03fb98edfe7..20b6ab5970911ff3bc682769d4acd5a58af53beb 100644
--- a/game/modules/tome/data/maps/vaults/amon-sul-crypt.lua
+++ b/game/modules/tome/data/maps/vaults/amon-sul-crypt.lua
@@ -17,7 +17,7 @@
 -- Nicolas Casalini "DarkGod"
 -- darkgod@te4.org
 
-setStatusAll{no_teleport=true}
+setStatusAll{no_teleport=true, vault_only_door_open=true}
 
 defineTile('.', "FLOOR")
 defineTile('#', "WALL")
diff --git a/game/modules/tome/data/maps/vaults/bandit-fortress.lua b/game/modules/tome/data/maps/vaults/bandit-fortress.lua
index 7c74cff6d204d8377d92b9480189d34ab2cd6967..298e7a80822638b6e6a8aeaa99681072b47fb942 100644
--- a/game/modules/tome/data/maps/vaults/bandit-fortress.lua
+++ b/game/modules/tome/data/maps/vaults/bandit-fortress.lua
@@ -18,7 +18,7 @@
 -- darkgod@te4.org
 
 --bandit fortress
-setStatusAll{no_teleport=true}
+setStatusAll{no_teleport=true, vault_only_door_open=true}
 rotates = {"default", "90", "180", "270", "flipx", "flipy"}
 defineTile('%', "WALL")
 defineTile('.', "FLOOR")
diff --git a/game/modules/tome/data/maps/vaults/circle.lua b/game/modules/tome/data/maps/vaults/circle.lua
index fddddad503f6ba18571964af877be6a59c63db9d..35349b00320a7affde9a50a10f3299b2e21ac2bb 100644
--- a/game/modules/tome/data/maps/vaults/circle.lua
+++ b/game/modules/tome/data/maps/vaults/circle.lua
@@ -17,7 +17,7 @@
 -- Nicolas Casalini "DarkGod"
 -- darkgod@te4.org
 
-setStatusAll{no_teleport=true}
+setStatusAll{no_teleport=true, vault_only_door_open=true}
 
 defineTile('.', "FLOOR")
 defineTile('X', "HARDWALL")
diff --git a/game/modules/tome/data/maps/vaults/diggers.lua b/game/modules/tome/data/maps/vaults/diggers.lua
index b74b8dc1fc6e50778dc5b7d3a43b42f0dc19de9e..9637fca902ab5bc654c1b04bafd347b2bb412ac2 100644
--- a/game/modules/tome/data/maps/vaults/diggers.lua
+++ b/game/modules/tome/data/maps/vaults/diggers.lua
@@ -17,7 +17,7 @@
 -- Nicolas Casalini "DarkGod"
 -- darkgod@te4.org
 
-setStatusAll{no_teleport=true}
+setStatusAll{no_teleport=true, vault_only_door_open=true}
 
 defineTile(';', "FLOOR", nil, nil, nil, {room_map={special=false, room=false, can_open=true}})
 defineTile('.', "FLOOR")
diff --git a/game/modules/tome/data/maps/vaults/dragon_lair.lua b/game/modules/tome/data/maps/vaults/dragon_lair.lua
index f261f4f9ab00e1ee920a110f0a57965d0e5bf797..20856126f40f91de75093797404ac220fb870a03 100644
--- a/game/modules/tome/data/maps/vaults/dragon_lair.lua
+++ b/game/modules/tome/data/maps/vaults/dragon_lair.lua
@@ -17,7 +17,7 @@
 -- Nicolas Casalini "DarkGod"
 -- darkgod@te4.org
 
-setStatusAll{no_teleport=true}
+setStatusAll{no_teleport=true, vault_only_door_open=true}
 
 startx = 25
 starty = 6
diff --git a/game/modules/tome/data/maps/vaults/forest-snake-pit.lua b/game/modules/tome/data/maps/vaults/forest-snake-pit.lua
index ad9555f99e93571efa6227d3a12452795f9ca032..11a17f932e3233c5312530d21facd8de1d4bf2f3 100644
--- a/game/modules/tome/data/maps/vaults/forest-snake-pit.lua
+++ b/game/modules/tome/data/maps/vaults/forest-snake-pit.lua
@@ -17,7 +17,7 @@
 -- Nicolas Casalini "DarkGod"
 -- darkgod@te4.org
 
-setStatusAll{no_teleport=true}
+setStatusAll{no_teleport=true, vault_only_door_open=true}
 
 rotates = {"default", "90", "180", "270", "flipx", "flipy"}
 
diff --git a/game/modules/tome/data/maps/vaults/greater-checkerboard.lua b/game/modules/tome/data/maps/vaults/greater-checkerboard.lua
index 170f9365ff8f610700c91718cb93c25ef540e99b..1d39a06c6567141806650c649d46f4be5d7f6207 100644
--- a/game/modules/tome/data/maps/vaults/greater-checkerboard.lua
+++ b/game/modules/tome/data/maps/vaults/greater-checkerboard.lua
@@ -17,7 +17,7 @@
 -- Nicolas Casalini "DarkGod"
 -- darkgod@te4.org
 
-setStatusAll{no_teleport=true}
+setStatusAll{no_teleport=true, vault_only_door_open=true}
 
 defineTile('.', "FLOOR")
 defineTile('#', "WALL")
diff --git a/game/modules/tome/data/maps/vaults/honey_glade.lua b/game/modules/tome/data/maps/vaults/honey_glade.lua
index 12c4600e4a05d2734cebc2a73386c7be691ed91b..02b129bb88b0346a71d71a4bf75efb9f723e0a27 100644
--- a/game/modules/tome/data/maps/vaults/honey_glade.lua
+++ b/game/modules/tome/data/maps/vaults/honey_glade.lua
@@ -17,7 +17,7 @@
 -- Nicolas Casalini "DarkGod"
 -- darkgod@te4.org
 
-setStatusAll{no_teleport=true}
+setStatusAll{no_teleport=true, vault_only_door_open=true}
 
 defineTile('!', "ROCK_VAULT", nil, nil, nil, {room_map={special=false, room=false, can_open=true}})
 defineTile(' ', "GRASS")
diff --git a/game/modules/tome/data/maps/vaults/horror-chamber.lua b/game/modules/tome/data/maps/vaults/horror-chamber.lua
index b7d94185e90a66cef2e12ea91565ba6c38404a2a..3e398f09f599dbdad8942bddef3f4170c4dba29a 100644
--- a/game/modules/tome/data/maps/vaults/horror-chamber.lua
+++ b/game/modules/tome/data/maps/vaults/horror-chamber.lua
@@ -19,7 +19,7 @@
 
 -- Horror Chamber
 
-setStatusAll{no_teleport=true}
+setStatusAll{no_teleport=true, vault_only_door_open=true}
 
 startx = 2
 starty = 1
diff --git a/game/modules/tome/data/maps/vaults/lava_island.lua b/game/modules/tome/data/maps/vaults/lava_island.lua
index 088926ca64aa02149a876072aec5cbb5cdd3810e..da3255dddb3f4a5439414145b1210249e49603e5 100644
--- a/game/modules/tome/data/maps/vaults/lava_island.lua
+++ b/game/modules/tome/data/maps/vaults/lava_island.lua
@@ -17,7 +17,7 @@
 -- Nicolas Casalini "DarkGod"
 -- darkgod@te4.org
 
-setStatusAll{no_teleport=true}
+setStatusAll{no_teleport=true, no_vaulted=true}
 
 rotates = {"default", "90", "180", "270", "flipx", "flipy"}
 
diff --git a/game/modules/tome/data/maps/vaults/loot-vault.lua b/game/modules/tome/data/maps/vaults/loot-vault.lua
index 33c7b6e454757b4ea6299d76116b957adf2f161b..f86d0268b3e5b2b160abd33881c19dc3c63eae65 100644
--- a/game/modules/tome/data/maps/vaults/loot-vault.lua
+++ b/game/modules/tome/data/maps/vaults/loot-vault.lua
@@ -16,7 +16,7 @@
 --
 -- Nicolas Casalini "DarkGod"
 -- darkgod@te4.org
-setStatusAll{no_teleport=true}
+setStatusAll{no_teleport=true, vault_only_door_open=true}
 
 rotates = {"default", "90", "180", "270", "flipx", "flipy"}
 
diff --git a/game/modules/tome/data/maps/vaults/mage-hideout.lua b/game/modules/tome/data/maps/vaults/mage-hideout.lua
index eba67bd8ecfbf5629f6552bb90a60604817e9ba2..df4c0a37ac14e1fc3064b5d4c870bb8501576fe1 100644
--- a/game/modules/tome/data/maps/vaults/mage-hideout.lua
+++ b/game/modules/tome/data/maps/vaults/mage-hideout.lua
@@ -17,7 +17,7 @@
 -- Nicolas Casalini "DarkGod"
 -- darkgod@te4.org
 
-setStatusAll{no_teleport=true}
+setStatusAll{no_teleport=true, no_vaulted=true}
 
 rotates = {"default", "90", "180", "270", "flipx", "flipy"}
 
diff --git a/game/modules/tome/data/maps/vaults/old-forest-swamp.lua b/game/modules/tome/data/maps/vaults/old-forest-swamp.lua
index 6839c069c3a98418d72cf5f9117ba356690ab71c..4c8110f6851371972d472caf13c6ab5ce1b973e5 100644
--- a/game/modules/tome/data/maps/vaults/old-forest-swamp.lua
+++ b/game/modules/tome/data/maps/vaults/old-forest-swamp.lua
@@ -17,7 +17,7 @@
 -- Nicolas Casalini "DarkGod"
 -- darkgod@te4.org
 
-setStatusAll{no_teleport=true}
+setStatusAll{no_teleport=true, no_vaulted=true}
 
 defineTile(',', "GRASS")
 defineTile(';', "GRASS_DARK1")
diff --git a/game/modules/tome/data/maps/vaults/orc-necromancer.lua b/game/modules/tome/data/maps/vaults/orc-necromancer.lua
index 7d4673cc1953c5f4c597d7c599dbcdc6dabc524b..bed278b2fde1bbef671a635f6165c791e106fdb3 100644
--- a/game/modules/tome/data/maps/vaults/orc-necromancer.lua
+++ b/game/modules/tome/data/maps/vaults/orc-necromancer.lua
@@ -17,7 +17,7 @@
 -- Nicolas Casalini "DarkGod"
 -- darkgod@te4.org
 
-setStatusAll{no_teleport=true}
+setStatusAll{no_teleport=true, vault_only_door_open=true}
 rotates = {"default", "90", "180", "270", "flipx", "flipy"}
 
 defineTile('.', "FLOOR")
diff --git a/game/modules/tome/data/maps/vaults/rat-nest.lua b/game/modules/tome/data/maps/vaults/rat-nest.lua
index 8b3fc652876e46cee26255f4f79a2ff343a7ecc9..76d176e2daa843f1902e48eea7f090a8d094bc41 100644
--- a/game/modules/tome/data/maps/vaults/rat-nest.lua
+++ b/game/modules/tome/data/maps/vaults/rat-nest.lua
@@ -17,7 +17,7 @@
 -- Nicolas Casalini "DarkGod"
 -- darkgod@te4.org
 
-setStatusAll{no_teleport=true}
+setStatusAll{no_teleport=true, no_vaulted=true}
 
 defineTile('.', "FLOOR")
 defineTile('D', "DOOR")
diff --git a/game/modules/tome/data/maps/vaults/skeleton-mage-cabal.lua b/game/modules/tome/data/maps/vaults/skeleton-mage-cabal.lua
index 563e4b66f273f3ea2baeaabb84e02c3a14aeaa0e..36822059a37fabeb0794e431a0a99e3ad84ee930 100644
--- a/game/modules/tome/data/maps/vaults/skeleton-mage-cabal.lua
+++ b/game/modules/tome/data/maps/vaults/skeleton-mage-cabal.lua
@@ -17,7 +17,7 @@
 -- Nicolas Casalini "DarkGod"
 -- darkgod@te4.org
 
-setStatusAll{no_teleport=true}
+setStatusAll{no_teleport=true, vault_only_door_open=true}
 
 defineTile('.', "FLOOR")
 defineTile('D', "DOOR")
diff --git a/game/modules/tome/data/maps/vaults/spider-den.lua b/game/modules/tome/data/maps/vaults/spider-den.lua
index 6d31a6119dd46c385a4aa754281afcb2d23ba2eb..a5bb2e27a03ecf838858ca4f0eed01a082c05075 100644
--- a/game/modules/tome/data/maps/vaults/spider-den.lua
+++ b/game/modules/tome/data/maps/vaults/spider-den.lua
@@ -17,7 +17,7 @@
 -- Nicolas Casalini "DarkGod"
 -- darkgod@te4.org
 
-setStatusAll{no_teleport=true}
+setStatusAll{no_teleport=true, vault_only_door_open=true}
 rotates = {"default", "90", "180", "270", "flipx", "flipy"}
 startx = 7
 starty = 0
diff --git a/game/modules/tome/data/maps/vaults/thief-hideout.lua b/game/modules/tome/data/maps/vaults/thief-hideout.lua
index 7f10a540349c782a46311e6aaf3b833d5904bbd9..6aa4c97313f848dc01c6d2ffb7ceb2c57470ee4a 100644
--- a/game/modules/tome/data/maps/vaults/thief-hideout.lua
+++ b/game/modules/tome/data/maps/vaults/thief-hideout.lua
@@ -17,7 +17,7 @@
 -- Nicolas Casalini "DarkGod"
 -- darkgod@te4.org
 
-setStatusAll{no_teleport=true}
+setStatusAll{no_teleport=true, vault_only_door_open=true}
 
 rotates = {"default", "90", "180", "270", "flipx", "flipy"}
 
diff --git a/game/modules/tome/data/maps/vaults/treasure1.lua b/game/modules/tome/data/maps/vaults/treasure1.lua
index 90149ecd586256ecb83b0a262ce0f57dc42148b6..797a2776711a931a915f7ce8326830cbdbe0f6c7 100644
--- a/game/modules/tome/data/maps/vaults/treasure1.lua
+++ b/game/modules/tome/data/maps/vaults/treasure1.lua
@@ -17,7 +17,7 @@
 -- Nicolas Casalini "DarkGod"
 -- darkgod@te4.org
 
-setStatusAll{no_teleport=true}
+setStatusAll{no_teleport=true, vault_only_door_open=true}
 
 defineTile(';', "FLOOR", nil, nil, nil, {room_map={special=false, room=false, can_open=true}})
 defineTile('.', "FLOOR")
diff --git a/game/modules/tome/data/maps/vaults/trickvault.lua b/game/modules/tome/data/maps/vaults/trickvault.lua
index 28807af6d4f556938b5680f6f769b6646a826bd3..98ebf2df07f00ccc2ae61b07375f5ce1800ebb60 100644
--- a/game/modules/tome/data/maps/vaults/trickvault.lua
+++ b/game/modules/tome/data/maps/vaults/trickvault.lua
@@ -25,7 +25,6 @@ setStatusAll{no_teleport=true}
 specialList("terrain", {
 	"/data/general/grids/basic.lua",
 	"/data/general/grids/lava.lua",
-	"/data/general/grids/.lua",
 })
 
 defineTile('#', "HARDWALL")
diff --git a/game/modules/tome/data/maps/vaults/troll-hideout.lua b/game/modules/tome/data/maps/vaults/troll-hideout.lua
index 8acd39334c6c1cf4a6fe57ebb3e8c8b34e8d73a9..18787248b092cc01107c379973d80a1dba3ffdc4 100644
--- a/game/modules/tome/data/maps/vaults/troll-hideout.lua
+++ b/game/modules/tome/data/maps/vaults/troll-hideout.lua
@@ -17,7 +17,7 @@
 -- Nicolas Casalini "DarkGod"
 -- darkgod@te4.org
 
-setStatusAll{no_teleport=true}
+setStatusAll{no_teleport=true, vault_only_door_open=true}
 
 rotates = {"default", "90", "180", "270", "flipx", "flipy"}
 
diff --git a/game/modules/tome/data/rooms/greater_vault.lua b/game/modules/tome/data/rooms/greater_vault.lua
index e06010327b5539e7bf5e4870d639202e8d64fd31..36d794ef0c65cd3b9afb068145cb8b915d7368da 100644
--- a/game/modules/tome/data/rooms/greater_vault.lua
+++ b/game/modules/tome/data/rooms/greater_vault.lua
@@ -44,12 +44,27 @@ return function(gen, id, lev, old_lev)
 	local w = vault_map.w
 	local h = vault_map.h
 	return { name="greater_vault-"..vaultid.."-"..w.."x"..h, w=w, h=h, generator = function(self, x, y, is_lit)
+		gen.level.vaults_list = gen.level.vaults_list or {}
+		gen.level.vaults_list[#gen.level.vaults_list+1] = {x=x, y=y, w=w, h=h}
+		local vaultuid = #gen.level.vaults_list
+
 		gen.map:import(vault_map, x, y)
 		-- Make it a room, and make it special so that we do not tunnel through
 		for i = x, x + w - 1 do for j = y, y + h - 1 do
 			gen.map.room_map[i][j].special = true
 			gen.map.room_map[i][j].room = id
 			gen.map.attrs(i, j, "no_decay", true)
+			gen.map.attrs(i, j, "vault_id", vaultuid)
+
+			-- Creatures in vaults dont get to act until it is opened
+			if not gen.map.attrs(i, j, "no_vaulted") and gen.map.room_map[i][j].add_entities then for _, rm in ipairs(gen.map.room_map[i][j].add_entities) do
+				if rm[1] == "actor" then
+					local act = rm[2]
+					if act and not act.player then
+						act:setEffect(act.EFF_VAULTED, 1, {})
+					end
+				end
+			end end
 		end end
 		if vault.gen_map.startx and vault.gen_map.starty then
 			gen.spots[#gen.spots+1] = {x=vault.gen_map.startx + x, y=vault.gen_map.starty + y, check_connectivity="entrance", type="vault", subtype="greater"}
diff --git a/game/modules/tome/data/rooms/lesser_vault.lua b/game/modules/tome/data/rooms/lesser_vault.lua
index fef77f3eab272f3ea3c87a68c5b75b760af80e2a..6a159f50da5b907faa54e12553cf3c1440e4c4ca 100644
--- a/game/modules/tome/data/rooms/lesser_vault.lua
+++ b/game/modules/tome/data/rooms/lesser_vault.lua
@@ -41,12 +41,27 @@ return function(gen, id, lev, old_lev)
 	local w = vault_map.w
 	local h = vault_map.h
 	return { name="lesser_vault-"..vaultid.."-"..w.."x"..h, w=w, h=h, generator = function(self, x, y, is_lit)
+		gen.level.vaults_list = gen.level.vaults_list or {}
+		gen.level.vaults_list[#gen.level.vaults_list+1] = {x=x, y=y, w=w, h=h}
+		local vaultuid = #gen.level.vaults_list
+
 		gen.map:import(vault_map, x, y)
 		-- Make it a room, and make it special so that we do not tunnel through
 		for i = x, x + w - 1 do for j = y, y + h - 1 do
 			gen.map.room_map[i][j].special = true
 			gen.map.room_map[i][j].room = id
 			gen.map.attrs(i, j, "no_decay", true)
+			gen.map.attrs(i, j, "vault_id", vaultuid)
+
+			-- Creatures in vaults dont get to act until it is opened
+			if not gen.map.attrs(i, j, "no_vaulted") and gen.map.room_map[i][j].add_entities then for _, rm in ipairs(gen.map.room_map[i][j].add_entities) do
+				if rm[1] == "actor" then
+					local act = rm[2]
+					if act and not act.player then
+						act:setEffect(act.EFF_VAULTED, 1, {})
+					end
+				end
+			end end
 		end end
 		if vault.gen_map.startx and vault.gen_map.starty then
 			gen.spots[#gen.spots+1] = {x=vault.gen_map.startx + x, y=vault.gen_map.starty + y, check_connectivity="entrance", type="vault", subtype="lesser"}
diff --git a/game/modules/tome/data/timed_effects/other.lua b/game/modules/tome/data/timed_effects/other.lua
index 097d567ca996e9db2829741878a6dacadc686d96..913e27cac26eb7d43059078dd66c9390770773ae 100644
--- a/game/modules/tome/data/timed_effects/other.lua
+++ b/game/modules/tome/data/timed_effects/other.lua
@@ -2100,3 +2100,23 @@ newEffect{
 	deactivate = function(self, eff)
 	end,
 }
+
+newEffect{
+	name = "VAULTED", image = "talents/time_prison.png",
+	desc = "In Vault",
+	long_desc = function(self, eff) return "The target is part of a vault and can not act until it has been openend." end,
+	decrease = 0, no_remove = true,
+	type = "other",
+	subtype = { vault=true },
+	status = "neutral",
+	parameters = {},
+	activate = function(self, eff)
+		self:effectTemporaryValue(eff, "invulnerable", 1)
+		self:effectTemporaryValue(eff, "dont_act", 1)
+		self:effectTemporaryValue(eff, "no_timeflow", 1)
+		self:effectTemporaryValue(eff, "status_effect_immune", 1)
+		self.energy.value = 0
+	end,
+	deactivate = function(self, eff)
+	end,
+}
diff --git a/game/modules/tome/data/zones/dreadfell/zone.lua b/game/modules/tome/data/zones/dreadfell/zone.lua
index deec144c21235c3031adf0d3aa091a55e84d6f3b..a98324ab2099e7bd00c76e655d1a8b47039a2738 100644
--- a/game/modules/tome/data/zones/dreadfell/zone.lua
+++ b/game/modules/tome/data/zones/dreadfell/zone.lua
@@ -37,7 +37,7 @@ return {
 			class = "engine.generator.map.Roomer",
 			nb_rooms = 10,
 			rooms = {"random_room", {"money_vault",5}, {"pit",7}, {"greater_vault",8}},
---			rooms = {"random_room", "greater_vault"},
+--			rooms = {"random_room", "lesser_vault"},
 --			greater_vaults_list = {"trickvault"},
 			rooms_config = {pit={filters={{type="undead"}}}},
 			lite_room_chance = 100,
diff --git a/game/modules/tome/resolvers.lua b/game/modules/tome/resolvers.lua
index 356232922e96ec68353d3c8a886b7908b0214f3c..7e8bf314f74f8fdbd671ce713eade5f86609b25f 100644
--- a/game/modules/tome/resolvers.lua
+++ b/game/modules/tome/resolvers.lua
@@ -54,7 +54,6 @@ function resolvers.calc.equip(t, e)
 			if filter.autoreq and rawget(o, "require") and rawget(o, "require").stat then
 --				print("Autorequire stats")
 				for s, v in pairs(rawget(o, "require").stat) do
-					print(s,v)
 					if e:getStat(s) < v then
 						e.unused_stats = e.unused_stats - (v - e:getStat(s))
 						e:incStat(s, v - e:getStat(s))
@@ -67,7 +66,7 @@ function resolvers.calc.equip(t, e)
 			end
 
 			-- Do not drop it unless it is an ego or better
-			if not o.unique then o.no_drop = true print(" * "..o.name.." => no drop") end
+			if not o.unique then o.no_drop = true --[[print(" * "..o.name.." => no drop")]] end
 			if filter.force_drop then o.no_drop = nil end
 			if filter.never_drop then o.no_drop = true end
 			game.zone:addEntity(game.level, o, "object")
@@ -215,7 +214,7 @@ function resolvers.calc.store(t, e)
 		return true
 	end
 	e.store = game:getStore(t)
-	print("[STORE] created for entity", t, e, e.name)
+--	print("[STORE] created for entity", t, e, e.name)
 
 	-- Delete the origin field
 	return nil
@@ -442,7 +441,7 @@ function resolvers.calc.sustains_at_birth(_, e)
 			local t = self:getTalentFromId(tid)
 			if t and t.mode == "sustained" then
 				self.energy.value = game.energy_to_act
-				print("===== activating sustain", self.name, tid)
+--				print("===== activating sustain", self.name, tid)
 				self:useTalent(tid)
 			end
 		end