diff --git a/game/modules/tome/data/general/npcs/ghoul.lua b/game/modules/tome/data/general/npcs/ghoul.lua
index 32bb8b4620ddfd5b275bb0c3fb46c57701127c4f..d449de24ad908554f6a9093ced57ace5bc537324 100644
--- a/game/modules/tome/data/general/npcs/ghoul.lua
+++ b/game/modules/tome/data/general/npcs/ghoul.lua
@@ -119,3 +119,20 @@ newEntity{ base = "BASE_NPC_GHOUL",
 		[Talents.T_WEAKNESS_DISEASE]={base=3, every=9, max=7},
 	},
 }
+
+newEntity{ base = "BASE_NPC_GHOUL", define_as = "RISEN_CORPSE",
+	display = "z", color=colors.GREY, image="npc/undead_ghoul_ghoul.png",
+	name = "risen corpse",
+	desc = [[a body raised through dark magic]],
+	exp_worth = 1,
+	combat_armor = 5, combat_def = 3,
+	resolvers.equip{
+		{type="weapon", subtype="longsword", autoreq=true},
+	},
+	resolvers.talents{
+		[Talents.T_STUN]={base=3, every=9, max=7},
+		[Talents.T_BITE_POISON]={base=3, every=9, max=7},
+		[Talents.T_ROTTING_DISEASE]={base=4, every=9, max=7},
+		},     
+}
+
diff --git a/game/modules/tome/data/general/npcs/snow-giant.lua b/game/modules/tome/data/general/npcs/snow-giant.lua
index 800c8593cf56c1553708d481479e21cc67724ea5..1306343c6c7fc079ec2b2142e60ae90045fbbcb6 100644
--- a/game/modules/tome/data/general/npcs/snow-giant.lua
+++ b/game/modules/tome/data/general/npcs/snow-giant.lua
@@ -115,3 +115,35 @@ newEntity{ base = "BASE_NPC_SNOW_GIANT",
 
 	resolvers.drops{chance=100, nb=1, {ego_chance=10} },
 }
+
+newEntity{ base = "BASE_NPC_SNOW_GIANT",
+	define_as = "BURB_SNOW_GIANT",
+	name = "Burb the snow giant champion", color=colors.VIOLET, unique=true,
+	resolvers.nice_tile{image="invis.png", add_mos = {{image="npc/giant_ice_snow_giant_chieftain.png", display_h=2, display_y=-1}}},
+	desc = [[A maddened, enraged snow giant that towers over his comrades. You've heard legends mentioning this particular monstrosity; they say that when he's not rampaging around frothing at the mouth, he sits, almost childlike, engraving stories and mysterious patterns on any flat stone surface he can find.]],
+	level_range = {25, nil}, exp_worth = 10,
+	autolevel = "warriormage",
+	rarity = 10,
+	rank = 3.5,
+	life_rating = 25,
+	max_life = resolvers.rngavg(150,170),
+	combat_armor = 32, combat_def = 30,
+	on_melee_hit = {[DamageType.COLD]=resolvers.mbonus(25, 20)},
+	melee_project = {[DamageType.COLD]=resolvers.mbonus(25, 20)},
+	resolvers.talents{ 
+		[Talents.T_KNOCKBACK]={base=4, every=6, max=10},
+		[Talents.T_STUN]={base=5, every=6, max=10},
+		[Talents.T_THROW_BOULDER]={base=4, every=6, max=10},
+		[Talents.T_ICE_SHARDS]={base=4, every=6, max=8},
+		[Talents.T_UTTERCOLD]={base=4, every=6, max=8},
+		[Talents.T_FREEZE]={base=4, every=6, max=8},
+		[Talents.T_ICE_STORM]={base=4, every=6, max=8},
+		},
+	make_escort = {
+		{type="giant", subtype="ice", number=3},
+	},
+	lite = 1,
+	ai = "tactical",
+
+	resolvers.drops{chance=100, nb=1, {ego_chance=10} },
+}
diff --git a/game/modules/tome/data/gfx/shockbolt/npc/humanoid_orc_orc_fighter.png b/game/modules/tome/data/gfx/shockbolt/npc/humanoid_orc_orc_fighter.png
new file mode 100644
index 0000000000000000000000000000000000000000..af80efffc08307a5d46ac10cb2cc1761547c6b8b
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/npc/humanoid_orc_orc_fighter.png differ
diff --git a/game/modules/tome/data/gfx/shockbolt/npc/humanoid_orc_orc_master_assassin.png b/game/modules/tome/data/gfx/shockbolt/npc/humanoid_orc_orc_master_assassin.png
new file mode 100644
index 0000000000000000000000000000000000000000..4006e5762dace7a4485f2d56708fe2c4bd5f876b
Binary files /dev/null and b/game/modules/tome/data/gfx/shockbolt/npc/humanoid_orc_orc_master_assassin.png differ
diff --git a/game/modules/tome/data/maps/vaults/horror-chamber.lua b/game/modules/tome/data/maps/vaults/horror-chamber.lua
new file mode 100644
index 0000000000000000000000000000000000000000..0b3758f6a62ce77d706f15f3c1668a4434029805
--- /dev/null
+++ b/game/modules/tome/data/maps/vaults/horror-chamber.lua
@@ -0,0 +1,76 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009, 2010, 2011 Nicolas Casalini
+--
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
+--
+-- Nicolas Casalini "DarkGod"
+-- darkgod@te4.org
+
+-- Horror Chamber
+
+setStatusAll{no_teleport=true}
+
+startx = 2
+starty = 1
+
+rotates = {"default", "90", "180", "270", "flipx", "flipy"}
+
+-- tiles
+defineTile('.', "OLD_FLOOR")
+defineTile('#', "OLD_WALL")
+defineTile(' ', "FLOOR")
+defineTile('X', "HARDWALL")
+defineTile('+', "DOOR")
+defineTile('!', "DOOR_VAULT", nil, nil, nil, {room_map={special=false, room=false, can_open=true}})
+
+-- monsters
+defineTile('o', 'FLOOR', nil, {random_filter={subtype='orc', add_levels=10}})
+defineTile('h', 'OLD_FLOOR', nil, {random_filter={subtype='eldritch', add_levels=20}})
+defineTile('c', 'OLD_FLOOR', nil, {random_filter={subtype='temporal', add_levels=20}})
+defineTile('b', 'OLD_FLOOR', nil, {random_filter={name="bloated horror", add_levels=20}})
+
+-- loots
+defineTile('a', "OLD_FLOOR", {random_filter={type="armor", add_levels=10, tome_mod="vault"}}, nil)
+defineTile('w', "OLD_FLOOR", {random_filter={type="weapon", add_levels=10, tome_mod="vault"}}, nil)
+defineTile('r', 'OLD_FLOOR', {random_filter={add_levels=20, tome_mod="vault"}})
+defineTile('t', 'OLD_FLOOR', {random_filter={add_levels=20, tome_mod="gvault"}})
+
+-- monster + loots
+defineTile('l', 'OLD_FLOOR', {random_filter={add_levels=20, tome_mod="vault"}}, {random_filter={subtype='eldritch', add_levels=20}})
+defineTile('H', 'OLD_FLOOR', {random_filter={add_levels=20, tome_mod="gvault"}}, {random_filter={name="headless horror", add_levels=20}})
+defineTile('R', 'OLD_FLOOR', {random_filter={add_levels=20, tome_mod="gvault"}}, {random_filter={name="radiant horror", add_levels=20}})
+
+return {
+[[                    ]],
+[[XX!XXXXXXXXXXXXXXXXX]],
+[[Xo oX o   oX.a.wXooX]],
+[[Xo  +  o   +....+  X]],
+[[X o Xo  o  Xa.wwX  X]],
+[[X############..####X]],
+[[Xhc.#h.l##h##ab#.hrX]],
+[[Xr.r..h.#crc#..#.l#X]],
+[[Xl#..#..#....bw..##X]],
+[[Xl..h...#.####...h.X]],
+[[X###..######.r..h##X]],
+[[X##..##....c..#####X]],
+[[X###.r..#######tltlX]],
+[[X##c..####rrhr.r.rcX]],
+[[X####.##lth.#..R..tX]],
+[[XtHt#..#tt.rl...r.lX]],
+[[Xttt##.###b....#...X]],
+[[X.####.#####.##b...X]],
+[[Xr..#..r.r#...###.lX]],
+[[Xr.l..#...c.#..h.r#X]],
+[[XXXXXXXXXXXXXXXXXXXX]],
+}
diff --git a/game/modules/tome/data/maps/vaults/lich-lair.lua b/game/modules/tome/data/maps/vaults/lich-lair.lua
new file mode 100644
index 0000000000000000000000000000000000000000..76a5bbbdbbfbdfce4ef48b2f78f5b25b7040f359
--- /dev/null
+++ b/game/modules/tome/data/maps/vaults/lich-lair.lua
@@ -0,0 +1,56 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009, 2010, 2011 Nicolas Casalini
+--
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
+--
+-- Nicolas Casalini "DarkGod"
+-- darkgod@te4.org
+
+--32 chambers
+-- lich liar
+setStatusAll{no_teleport=true}
+
+startx = 9
+starty = 16
+
+rotates = {"default", "90", "180", "270", "flipx", "flipy"}
+
+defineTile('.', "FLOOR")
+defineTile('X', "HARDWALL")
+defineTile('!', "DOOR_VAULT", nil, nil, nil, {room_map={special=false, room=false, can_open=true}})
+
+defineTile('a', "FLOOR", nil, {random_filter={name="armoured skeleton warrior", add_levels=10}})
+defineTile('m', "FLOOR", nil, {random_filter={name="skeleton mage", add_levels=10}})
+defineTile('g', "FLOOR", nil, {random_filter={subtype="ghoul", add_levels=10}})
+defineTile('l', "FLOOR", nil, {random_filter={type = "undead", subtype = "lich",}})
+defineTile('$', "FLOOR", {random_filter={add_levels=20, tome_mod="gvault"}})
+
+return {
+[[XXXXXXXXXXXXXXXXX]],
+[[Xm.ggg..g..ggg.mX]],
+[[X.X...........X.X]],
+[[X..a.........a..X]],
+[[X...XXX.a.XXX...X]],
+[[X...X.......X...X]],
+[[X...X.a.l.a.X...X]],
+[[Xm.aX.......Xa.mX]],
+[[X...Xg..a..gX...X]],
+[[X...Xg$$$$$gX...X]],
+[[X...Xg$$$$$gX...X]],
+[[X...XXXXXXXXX...X]],
+[[Xm.a.a.a.a.a.a.mX]],
+[[X.X...........X.X]],
+[[Xm.............mX]],
+[[XXXXXXXX!XXXXXXXX]],
+}
\ No newline at end of file
diff --git a/game/modules/tome/data/maps/vaults/orc-hatred.lua b/game/modules/tome/data/maps/vaults/orc-hatred.lua
new file mode 100644
index 0000000000000000000000000000000000000000..d182d0d536591aa1dca3eb12c6310c92de350c16
--- /dev/null
+++ b/game/modules/tome/data/maps/vaults/orc-hatred.lua
@@ -0,0 +1,94 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009, 2010, 2011 Nicolas Casalini
+--
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
+--
+-- Nicolas Casalini "DarkGod"
+-- darkgod@te4.org
+
+--Hedrachi's "If You Don't Hate Orcs Now, You'll Hate Them After This" vault contest submission.
+
+startx = 0
+starty = 6
+
+setStatusAll{no_teleport=true}
+rotates = {"default", "90", "180", "270", "flipx", "flipy"}
+
+defineTile('u', mod.class.Grid.new{
+	define_as = "DOOR_OPENING_FLOOR",
+	type = "floor", subtype = "trapped_floor",
+	name = "floor", image = "terrain/marble_floor.png",
+	display = '.', color_r=255, color_g=255, color_b=255, back_color=colors.DARK_GREY,
+	grow = "WALL",
+	on_move = function(self, x, y, actor, forced)
+		if not actor.player then return end
+		if forced then return end
+		local g = game.zone:makeEntityByName(game.level, "terrain", "DOOR_OPEN")
+		game.zone:addEntity(game.level, g, "terrain", x - 4, y - 4)
+		game.zone:addEntity(game.level, g, "terrain", x + 4, y - 4)
+		game.zone:addEntity(game.level, g, "terrain", x + 4, y + 4)
+		game.zone:addEntity(game.level, g, "terrain", x - 4, y + 4)
+		game.nicer_tiles:updateAround(game.level, x - 4, y - 4)
+		game.nicer_tiles:updateAround(game.level, x + 4, y - 4)
+		game.nicer_tiles:updateAround(game.level, x + 4, y + 4)
+		game.nicer_tiles:updateAround(game.level, x - 4, y + 4)
+		game.logPlayer(actor, "Something in the floor clicks ominously.")
+		local g = game.zone:makeEntityByName(game.level, "terrain", "FLOOR")
+		game.zone:addEntity(game.level, g, "terrain", x, y)
+	end,
+},
+{random_filter={add_levels=10, tome_mod="gvault"}}
+)
+
+defineTile('+', mod.class.Grid.new{
+	define_as = "TRIGGERED_DOOR",
+	name = "sealed door", image = "terrain/sealed_door.png",
+	type = "door", subtype = 1,
+	display = '+', color=colors.WHITE, back_color=colors.DARK_UMBER,
+	notice = true,
+	always_remember = true,
+	block_sight = true,
+	does_block_move = true,
+}
+)
+
+defineTile('.', "FLOOR")
+defineTile('#', "HARDWALL")
+defineTile('X', "DOOR_VAULT")
+defineTile('&', "LAVA_FLOOR")
+
+defineTile('a', "FLOOR", {random_filter={add_levels=10, tome_mod="gvault"}}, {random_filter={add_levels=15, subtype = "orc", name = "orc cryomancer"}})
+defineTile('b', "FLOOR", {random_filter={add_levels=10, tome_mod="gvault"}}, {random_filter={add_levels=10, subtype = "orc", name = "orc pyromancer"}})
+defineTile('o', "FLOOR", nil, {random_filter={add_levels=3, subtype = "orc"}})
+defineTile('p', "FLOOR", {random_filter={add_levels=10, type = "money"}}, {random_filter={add_levels=5, subtype = "orc", name = "orc grand master assassin"}})
+defineTile('q', "FLOOR", nil, {random_filter={add_levels=5, subtype = "orc", name = "orc archer"}})
+defineTile('r', "FLOOR", nil, {random_filter={add_levels=5, subtype = "orc", name = "icy orc wyrmic"}})
+defineTile('s', "FLOOR", nil, {random_filter={add_levels=5, subtype = "orc", name = "fiery orc wyrmic"}})
+
+
+return {
+[[#############]],
+[[#a#...q...#b#]],
+[[##+.......+##]],
+[[#...r.o.s...#]],
+[[#...........#]],
+[[#....&&&o..p#]],
+[[X....&u&o..p#]],
+[[#....&&&o..p#]],
+[[#...........#]],
+[[#...s.o..r..#]],
+[[##+.......+##]],
+[[#b#...q...#a#]],
+[[#############]],
+}
diff --git a/game/modules/tome/data/maps/vaults/paladin-vs-vampire.lua b/game/modules/tome/data/maps/vaults/paladin-vs-vampire.lua
new file mode 100644
index 0000000000000000000000000000000000000000..5cd1bc24673c9eb89b6e745d273b84306ff1487f
--- /dev/null
+++ b/game/modules/tome/data/maps/vaults/paladin-vs-vampire.lua
@@ -0,0 +1,111 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009, 2010, 2011 Nicolas Casalini
+--
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
+--
+-- Nicolas Casalini "DarkGod"
+-- darkgod@te4.org
+
+--paladins vs. vampires!
+
+local Talents = require("engine.interface.ActorTalents")
+setStatusAll{no_teleport=true}
+
+
+defineTile('~', mod.class.Grid.new{
+	define_as = "NECRO",
+	name = "lava floor", image = "terrain/lava_floor.png",
+	display = '.', color=colors.RED, back_color=colors.DARK_GREY,
+	shader = "lava",
+	mindam = resolvers.mbonus(5, 15),
+	maxdam = resolvers.mbonus(10, 30),
+	on_stand = function(self, x, y, who)
+		local DT = engine.DamageType
+		local dam = DT:get(DT.RETCH).projector(self, x, y, DT.RETCH, rng.range(self.mindam, self.maxdam))
+		if not who.undead then game.logPlayer(who, "Dark energies course upwards through the lava.") end
+		if who.dead and not who.undead then
+			--add undead
+			local m = game.zone:makeEntityByName(game.level, "actor", "RISEN_CORPSE")
+			game.zone:addEntity(game.level, m, "actor", x, y)
+		end
+	end,
+})
+
+defineTile('S', "FLOOR", nil, mod.class.NPC.new{
+	type = "humanoid", subtype = "human",
+	display = "p", color=colors.GOLD,
+	name = "human sun-paladin",
+	faction = "sunwall", hard_faction = "sunwall",
+	body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1 },
+	desc = [[A Human in shining plate armour.]],
+	level_range = {10, 50}, exp_worth = 1,
+	rank = 2,
+	size_category = 3,
+	autolevel = "warriormage",
+	ai = "dumb_talented_simple", ai_state = { talent_in=3, },
+	stats = { str=12, dex=8, mag=6, con=10 },
+	positive_regen = 10,
+	max_life = resolvers.rngavg(140,170),
+	combat_armor = 10, combat_def = 10,
+	resolvers.equip{
+		{type="weapon", subtype="mace", autoreq=true},
+		{type="armor", subtype="shield", autoreq=true},
+		{type="armor", subtype="massive", autoreq=true},
+	},
+	resolvers.talents{
+		[Talents.T_ARMOUR_TRAINING]=3,
+		[Talents.T_CHANT_OF_FORTRESS]=3,
+		[Talents.T_SEARING_LIGHT]=2,
+		[Talents.T_MARTYRDOM]=2,
+		[Talents.T_WEAPON_OF_LIGHT]=2,
+		[Talents.T_FIREBEAM]=2,
+		[Talents.T_WEAPON_COMBAT]=4,
+		[Talents.T_HEALING_LIGHT]=2,
+	},
+	on_added = function(self)
+		self.energy.value = game.energy_to_act self:useTalent(self.T_WEAPON_OF_LIGHT)
+		self.energy.value = game.energy_to_act self:useTalent(self.T_CHANT_OF_FORTRESS)
+	end,
+}
+)
+
+defineTile('.', "FLOOR")
+defineTile('!', "DOOR_VAULT", nil, nil, nil, {room_map={special=false, room=false, can_open=true}})
+defineTile('+', "DOOR")
+defineTile('X', "HARDWALL")
+defineTile('v', "FLOOR", {random_filter={add_levels=5,tome_mod="vault"}}, {random_filter={add_levels=5, type="undead", subtype="vampire", name="vampire"}})
+defineTile('U', "FLOOR", {random_filter={add_levels=10, tome_mod="gvault"}}, {random_filter={add_levels=10, type="undead", subtype="vampire", name="master vampire"}})
+defineTile('V', "FLOOR", {random_filter={add_levels=15, tome_mod="gvault"}}, {random_filter={add_levels=15, type="undead", subtype="vampire", name="elder vampire"}})
+defineTile('L', "FLOOR", {random_filter={add_levels=20, tome_mod="gvault"}}, {random_filter={add_levels=20, type="undead", subtype="vampire", name="vampire lord"}})
+defineTile('W', "FLOOR", {random_filter={add_levels=15, tome_mod="gvault"}}, {random_filter={add_levels=15, type="undead", subtype="wight", name="grave wight"}})
+startx = 0
+starty = 6
+
+rotates = {"default", "90", "180", "270", "flipx", "flipy"}
+
+return {
+[[XXXXXXXXXXXXXXXXXXXXXXXXXXXXX]],
+[[X....X......................X]],
+[[X....X..~.~..v~..~.V........X]],
+[[X....X....~..~.~..~..XXXXX..X]],
+[[X....X..~.v.~...~...XXXXXX..X]],
+[[X..S.X..~.~~.v~.~..XXXXXXX..X]],
+[[X..S.+.~..~..~....LXXXXXXX..X]],
+[[!....+.~.~.~.v.~...XXXXXXX..X]],
+[[X..S.+..~..~.~.v.~..XXXXXX..X]],
+[[X..S.X...~..~..~..~..XXXXX..X]],
+[[X....X.~.~.~......~..W......X]],
+[[X....X.......~.~..V.........X]],
+[[XXXXXXXXXXXXXXXXXXXXXXXXXXXXX]],
+}
\ No newline at end of file
diff --git a/game/modules/tome/data/maps/vaults/rain-of-death.lua b/game/modules/tome/data/maps/vaults/rain-of-death.lua
new file mode 100644
index 0000000000000000000000000000000000000000..64c17515be41109338ef5e69fc3ea4157987179c
--- /dev/null
+++ b/game/modules/tome/data/maps/vaults/rain-of-death.lua
@@ -0,0 +1,52 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009, 2010, 2011 Nicolas Casalini
+--
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
+--
+-- Nicolas Casalini "DarkGod"
+-- darkgod@te4.org
+
+-- Rain of Death
+
+rotates = {"default", "90", "180", "270", "flipx", "flipy"}
+
+defineTile('.', "FLOOR")
+defineTile('X', "HARDWALL")
+defineTile('v', "LAVA")
+defineTile('!', "DOOR_VAULT", nil, nil, nil, {room_map={special=false, room=false, can_open=true}})
+
+-- All a are Skeleton Master Archer
+defineTile('a', "FLOOR", nil, {random_filter={name="skeleton master archer"}})
+
+defineTile('$', "FLOOR", {random_filter={add_levels=20, tome_mod="gvault"}})
+defineTile('*', "FLOOR", {random_filter={add_levels=20, tome_mod="uvault"}})
+
+return {
+[[XXXXXXX!!XXXXXXX]],
+[[X..v.av..v.av.$X]],
+[[X..vvvv..vvvv..X]],
+[[Xvv..........vvX]],
+[[X.v..........v.X]],
+[[Xav..........vaX]],
+[[Xvv..........vvX]],
+[[!......$X......!]],
+[[!......X*......!]],
+[[Xvv..........vvX]],
+[[X.v..........vaX]],
+[[Xav..........v.X]],
+[[Xvv..........vvX]],
+[[X..vvvv..vvvv..X]],
+[[X$.va.v..va.v..X]],
+[[XXXXXXX!!XXXXXXX]],
+}
diff --git a/game/modules/tome/data/maps/vaults/snow-giant-camp.lua b/game/modules/tome/data/maps/vaults/snow-giant-camp.lua
new file mode 100644
index 0000000000000000000000000000000000000000..5a9bf6becb16edd87a73a8e7b8dac3028ff7457a
--- /dev/null
+++ b/game/modules/tome/data/maps/vaults/snow-giant-camp.lua
@@ -0,0 +1,63 @@
+-- ToME - Tales of Maj'Eyal
+-- Copyright (C) 2009, 2010, 2011 Nicolas Casalini
+--
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
+--
+-- Nicolas Casalini "DarkGod"
+-- darkgod@te4.org
+
+-- Snow Giant Camp
+setStatusAll{no_teleport=true}
+rotates = {"default", "90", "180", "270", "flipx", "flipy"}
+
+defineTile('.', "FLOOR")
+defineTile(',', "ROCKY_GROUND")
+defineTile('#', "HARDWALL")
+defineTile('X', "MOUNTAIN_WALL")
+defineTile('+', "DOOR")
+defineTile('!', "DOOR_VAULT")
+
+defineTile('$', "FLOOR", {random_filter={add_levels=10, tome_mod="vault"}})
+defineTile('?', "FLOOR", {random_filter={add_levels=5, tome_mod="vault"}}, {random_filter={add_levels=5, type="giant", subtype="ice"}})
+defineTile('P', "ROCKY_GROUND", nil, {random_filter={name="snow giant"}})
+defineTile('T', "FLOOR", nil, {random_filter={add_levels=5, name="snow giant thunderer"}})
+defineTile('B', "FLOOR", nil, {random_filter={add_levels=5, name="snow giant boulder thrower"}})
+defineTile('C', "FLOOR", nil, {random_filter={add_levels=8, name="snow giant chieftain"}})
+defineTile('M', "FLOOR", nil, {random_filter={add_levels=8, name="snow giant chieftain", random_boss={nb_classes=1, rank=3.5, loot_quantity = 2}}})
+
+startx = 12
+starty = 19
+
+return {
+[[XX###############XXXXXXXX]],
+[[X,#...#$$$$$#...#XXXXXXXX]],
+[[X,#.....CMC.....#,,XXXXXX]],
+[[X,#BB.#.....#.TT#,,,,XXXX]],
+[[X,#####..C..#####,,,,,,XX]],
+[[X,,,,,###!###,,,,,,,,,,XX]],
+[[X,#,,,,,,,,,,,,,,###,,,XX]],
+[[X###,,,,,,,,,,,,##?##,,,X]],
+[[X#?+,,,,,,,,,P,,,#+#,,,,X]],
+[[X###,,#,,,,P,,,,,,,,,,,,X]],
+[[X,#,,###,,,,,,P,,,,,#,,,X]],
+[[X,,,,#?+,,P,,,,,,,,###,,X]],
+[[X,,,,###,,,,P,,,,,,+?#,,X]],
+[[X,,,,,#,,,,,,,,,,,,###,,X]],
+[[XX,,,,,,,,,,,,,,,,,,#,,XX]],
+[[XX,,,,#+#,,,,,,,,,,,,,,XX]],
+[[XXX,,##?##,,,,,,,,,,,,XXX]],
+[[XXXXXX###,,,,,,,,,,,,XXXX]],
+[[XXXXXXXXXX,,,,,,,XXXXXXXX]],
+[[XXXXXXXXXXXX,XXXXXXXXXXXX]],
+}
diff --git a/game/modules/tome/data/rooms/greater_vault.lua b/game/modules/tome/data/rooms/greater_vault.lua
index f457c0ca21a708794ee518e12e0e149d71a0780d..918a77f5242030b4081f3d3e4a758b43e1a80a46 100644
--- a/game/modules/tome/data/rooms/greater_vault.lua
+++ b/game/modules/tome/data/rooms/greater_vault.lua
@@ -21,7 +21,7 @@ local max_w, max_h = 50, 50
 local list = {
 	"double-t", "crypt", "treasure1", "diggers", "hillbert_curve", "quiet", "lightning-vault", "water-vault",
 	"32-chambers", "demon-nest-1", "demon-nest-2", "demon-nest-3", "frost-dragon-lair", "greater-money-vault",
-	"trapped-hexagon", "yin-yang", "zigzag-chambers",
+	"trapped-hexagon", "yin-yang", "zigzag-chambers", "rain-of-death", "paladin-vs-vampire", "orc-hatred", "lich-lair",
 }
 
 return function(gen, id, lev, old_lev)
diff --git a/game/modules/tome/data/zones/daikara/zone.lua b/game/modules/tome/data/zones/daikara/zone.lua
index e88a4fa5534e24e05b26b540fb238d2c4ee35c04..cbc991c6ca4f3cd056ede769876560dc01befeea 100644
--- a/game/modules/tome/data/zones/daikara/zone.lua
+++ b/game/modules/tome/data/zones/daikara/zone.lua
@@ -37,8 +37,9 @@ return {
 			class = "engine.generator.map.Roomer",
 			nb_rooms = 10,
 			edge_entrances = {2,8},
-			rooms = {"forest_clearing","rocky_snowy_trees"},
+			rooms = {"forest_clearing", "rocky_snowy_trees", "lesser_vault"},
 			rooms_config = {forest_clearing={pit_chance=5, filters={{}}}},
+			lesser_vaults_list = {"snow-giant-camp"},
 			['.'] = "ROCKY_GROUND",
 			['T'] = "ROCKY_SNOWY_TREE",
 			['#'] = "MOUNTAIN_WALL",
diff --git a/game/modules/tome/data/zones/dreadfell/grids.lua b/game/modules/tome/data/zones/dreadfell/grids.lua
index f89fdc86cb7e10a990d14318a76f62ca8096150d..12351c3734c4290b06eab8e7232dce6e7874e0ff 100644
--- a/game/modules/tome/data/zones/dreadfell/grids.lua
+++ b/game/modules/tome/data/zones/dreadfell/grids.lua
@@ -21,6 +21,7 @@ load("/data/general/grids/basic.lua")
 load("/data/general/grids/water.lua")
 load("/data/general/grids/forest.lua")
 load("/data/general/grids/lava.lua")
+load("/data/general/grids/mountain.lua")
 
 newEntity{
 	define_as = "LORE_NOTE",
diff --git a/game/modules/tome/data/zones/eruan/grids.lua b/game/modules/tome/data/zones/eruan/grids.lua
index 88b148b5f6409a93396fe18d6bdd441b7ecf6333..b314495c1b5000b37b78f87b23ed282d5d4bfde4 100644
--- a/game/modules/tome/data/zones/eruan/grids.lua
+++ b/game/modules/tome/data/zones/eruan/grids.lua
@@ -20,6 +20,7 @@
 load("/data/general/grids/basic.lua")
 load("/data/general/grids/water.lua")
 load("/data/general/grids/forest.lua")
+load("/data/general/grids/lava.lua")
 load("/data/general/grids/sand.lua")
 load("/data/general/grids/mountain.lua")
 
diff --git a/game/modules/tome/data/zones/eruan/zone.lua b/game/modules/tome/data/zones/eruan/zone.lua
index 3f5d38183b4b5e8114013e319a6616f4bcdb2d73..c84a0b0f9146228512346ad6bdc2c8987f488b71 100644
--- a/game/modules/tome/data/zones/eruan/zone.lua
+++ b/game/modules/tome/data/zones/eruan/zone.lua
@@ -51,7 +51,7 @@ return {
 
 			nb_rooms = {0,0,0,0,1},
 			rooms = {"greater_vault"},
-			greater_vaults_list = {"dragon_lair", "lava_island"},
+			greater_vaults_list = {"dragon_lair", "lava_island", "bandit-fortress", "horror-chamber"},
 			lite_room_chance = 100,
 		},
 		actor = {
diff --git a/game/modules/tome/data/zones/gorbat-pride/zone.lua b/game/modules/tome/data/zones/gorbat-pride/zone.lua
index 3c76187b52dfabd05f3b09426fef31a4d62fce30..7631f44dc119b40d7b16817e90f2800fe571b3c9 100644
--- a/game/modules/tome/data/zones/gorbat-pride/zone.lua
+++ b/game/modules/tome/data/zones/gorbat-pride/zone.lua
@@ -54,7 +54,7 @@ return {
 
 				nb_rooms = {0,0,0,1},
 				rooms = {"lesser_vault"},
-				lesser_vaults_list = {"orc-armoury", "double-t", "dragon_lair", "hostel"},
+				lesser_vaults_list = {"orc-armoury", "double-t", "dragon_lair", "hostel", "horror-chamber"},
 				lite_room_chance = 100,
 			},
 		},
@@ -69,7 +69,7 @@ return {
 		},
 	},
 	post_process = function(level)
-		for uid, e in pairs(level.entities) do e.faction="orc-pride" end
+		for uid, e in pairs(level.entities) do e.faction = e.hard_faction or "orc-pride" end
 	end,
 	levels =
 	{
diff --git a/game/modules/tome/data/zones/grushnak-pride/zone.lua b/game/modules/tome/data/zones/grushnak-pride/zone.lua
index 0ac9cca2628164d59598ae9777682d13cc32d575..ae066cb17a092c560b1128231bc59f0e4b52f13c 100644
--- a/game/modules/tome/data/zones/grushnak-pride/zone.lua
+++ b/game/modules/tome/data/zones/grushnak-pride/zone.lua
@@ -70,7 +70,7 @@ return {
 			game:placeRandomLoreObject("GARKUL_HISTORY"..(level.level/2))
 		end
 
-		for uid, e in pairs(level.entities) do e.faction="orc-pride" end
+		for uid, e in pairs(level.entities) do e.faction = e.hard_faction or "orc-pride" end
 	end,
 	levels =
 	{
diff --git a/game/modules/tome/data/zones/high-peak/zone.lua b/game/modules/tome/data/zones/high-peak/zone.lua
index 5d10b2c878b9e6ec3d4e5390030a11a01087ab9d..4edc27fd54c2dd131640ceed9d341b54bd93166f 100644
--- a/game/modules/tome/data/zones/high-peak/zone.lua
+++ b/game/modules/tome/data/zones/high-peak/zone.lua
@@ -74,7 +74,7 @@ return {
 	},
 	post_process = function(level)
 		game.player:grantQuest("high-peak")
-		for uid, e in pairs(level.entities) do e.faction="sorcerers" e.never_anger = true end
+		for uid, e in pairs(level.entities) do e.faction = e.hard_faction or "sorcerers" end
 
 		-- if we failed at charred scar (or did not do it at all) the gate of morning is destroyed and Aeryn turned to the service of the sorcerers
 		if level.level == 15 then
diff --git a/game/modules/tome/data/zones/rak-shor-pride/zone.lua b/game/modules/tome/data/zones/rak-shor-pride/zone.lua
index 70f009bd24be934a82e93810854938783281f86d..5b2a2df3404b03d7f59328759d233ae34479a1db 100644
--- a/game/modules/tome/data/zones/rak-shor-pride/zone.lua
+++ b/game/modules/tome/data/zones/rak-shor-pride/zone.lua
@@ -54,7 +54,7 @@ return {
 
 				nb_rooms = {0,0,0,1},
 				rooms = {"lesser_vault"},
-				lesser_vaults_list = {"orc-armoury", "double-t", "crypt", "hostel"},
+				lesser_vaults_list = {"orc-armoury", "double-t", "crypt", "hostel", "horror-chamber"},
 				lite_room_chance = 100,
 			},
 		},
@@ -69,7 +69,7 @@ return {
 		},
 	},
 	post_process = function(level)
-		for uid, e in pairs(level.entities) do e.faction="orc-pride" end
+		for uid, e in pairs(level.entities) do e.faction = e.hard_faction or "orc-pride" end
 	end,
 	levels =
 	{
diff --git a/game/modules/tome/data/zones/vor-pride/zone.lua b/game/modules/tome/data/zones/vor-pride/zone.lua
index cb8b1d5a4284ddcc852eb6b6cdeff6122863a3d4..88bf066455ded762042c03031d598482490d2c68 100644
--- a/game/modules/tome/data/zones/vor-pride/zone.lua
+++ b/game/modules/tome/data/zones/vor-pride/zone.lua
@@ -54,7 +54,7 @@ return {
 
 				nb_rooms = {0,0,0,1},
 				rooms = {"lesser_vault"},
-				lesser_vaults_list = {"orc-armoury", "double-t", "circle", "hostel", "orc-necromancer"},
+				lesser_vaults_list = {"orc-armoury", "double-t", "circle", "hostel", "orc-necromancer", "horror-chamber"},
 				lite_room_chance = 100,
 			},
 		},
@@ -72,7 +72,7 @@ return {
 		-- Place a lore note on each level
 		game:placeRandomLoreObject("ORC_HISTORY"..level.level)
 
-		for uid, e in pairs(level.entities) do e.faction="orc-pride" end
+		for uid, e in pairs(level.entities) do e.faction = e.hard_faction or "orc-pride" end
 	end,
 	levels =
 	{