From f3183ea6bbdd93c15c5cdb9d335d3fbd05f1166f Mon Sep 17 00:00:00 2001
From: dg <dg@51575b47-30f0-44d4-a5cc-537603b46e54>
Date: Sat, 28 May 2011 09:06:57 +0000
Subject: [PATCH] Six new vaults from the vault contest and a new unique for
 the winner, Burbs Lull

git-svn-id: http://svn.net-core.org/repos/t-engine4@3482 51575b47-30f0-44d4-a5cc-537603b46e54
---
 game/modules/tome/data/general/npcs/ghoul.lua |  17 +++
 .../tome/data/general/npcs/snow-giant.lua     |  32 +++++
 .../npc/humanoid_orc_orc_fighter.png          | Bin 0 -> 8933 bytes
 .../npc/humanoid_orc_orc_master_assassin.png  | Bin 0 -> 7813 bytes
 .../tome/data/maps/vaults/horror-chamber.lua  |  76 ++++++++++++
 .../tome/data/maps/vaults/lich-lair.lua       |  56 +++++++++
 .../tome/data/maps/vaults/orc-hatred.lua      |  94 +++++++++++++++
 .../data/maps/vaults/paladin-vs-vampire.lua   | 111 ++++++++++++++++++
 .../tome/data/maps/vaults/rain-of-death.lua   |  52 ++++++++
 .../tome/data/maps/vaults/snow-giant-camp.lua |  63 ++++++++++
 .../modules/tome/data/rooms/greater_vault.lua |   2 +-
 game/modules/tome/data/zones/daikara/zone.lua |   3 +-
 .../tome/data/zones/dreadfell/grids.lua       |   1 +
 game/modules/tome/data/zones/eruan/grids.lua  |   1 +
 game/modules/tome/data/zones/eruan/zone.lua   |   2 +-
 .../tome/data/zones/gorbat-pride/zone.lua     |   4 +-
 .../tome/data/zones/grushnak-pride/zone.lua   |   2 +-
 .../tome/data/zones/high-peak/zone.lua        |   2 +-
 .../tome/data/zones/rak-shor-pride/zone.lua   |   4 +-
 .../tome/data/zones/vor-pride/zone.lua        |   4 +-
 20 files changed, 515 insertions(+), 11 deletions(-)
 create mode 100644 game/modules/tome/data/gfx/shockbolt/npc/humanoid_orc_orc_fighter.png
 create mode 100644 game/modules/tome/data/gfx/shockbolt/npc/humanoid_orc_orc_master_assassin.png
 create mode 100644 game/modules/tome/data/maps/vaults/horror-chamber.lua
 create mode 100644 game/modules/tome/data/maps/vaults/lich-lair.lua
 create mode 100644 game/modules/tome/data/maps/vaults/orc-hatred.lua
 create mode 100644 game/modules/tome/data/maps/vaults/paladin-vs-vampire.lua
 create mode 100644 game/modules/tome/data/maps/vaults/rain-of-death.lua
 create mode 100644 game/modules/tome/data/maps/vaults/snow-giant-camp.lua

diff --git a/game/modules/tome/data/general/npcs/ghoul.lua b/game/modules/tome/data/general/npcs/ghoul.lua
index 32bb8b4620..d449de24ad 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 800c8593cf..1306343c6c 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
GIT binary patch
literal 8933
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

literal 0
HcmV?d00001

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
GIT binary patch
literal 7813
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
X2N*(d#ss6900000NkvXXu0mjf;Y3R#

literal 0
HcmV?d00001

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 0000000000..0b3758f6a6
--- /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 0000000000..76a5bbbdbb
--- /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 0000000000..d182d0d536
--- /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 0000000000..5cd1bc2467
--- /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 0000000000..64c17515be
--- /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 0000000000..5a9bf6becb
--- /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 f457c0ca21..918a77f524 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 e88a4fa553..cbc991c6ca 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 f89fdc86cb..12351c3734 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 88b148b5f6..b314495c1b 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 3f5d38183b..c84a0b0f91 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 3c76187b52..7631f44dc1 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 0ac9cca262..ae066cb17a 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 5d10b2c878..4edc27fd54 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 70f009bd24..5b2a2df340 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 cb8b1d5a42..88bf066455 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 =
 	{
-- 
GitLab