diff --git a/game/modules/tome/class/Game.lua b/game/modules/tome/class/Game.lua
index 10a933d670ce387d487e43989c9a4e7f14ff297c..593746e3519a27d6d3a63682fdcb2319bc99750f 100644
--- a/game/modules/tome/class/Game.lua
+++ b/game/modules/tome/class/Game.lua
@@ -578,7 +578,9 @@ function _M:setupCommands()
 		[{"_d","ctrl"}] = function()
 			if config.settings.tome.cheat then
 				self.player:forceLevelup(50)
-				self:changeLevel(1, "vor-pride")
+				self.player.esp.all = 1
+				self.player.esp.range = 50
+				self:changeLevel(1, "eruan")
 --				self.player:grantQuest("escort-duty")
 			end
 		end,
diff --git a/game/modules/tome/data/autolevel_schemes.lua b/game/modules/tome/data/autolevel_schemes.lua
index 182fe9c5d3f3c5709b80f7226d806541f8003916..44823c1f078858ddaa837be7cb75710dd9f320bb 100644
--- a/game/modules/tome/data/autolevel_schemes.lua
+++ b/game/modules/tome/data/autolevel_schemes.lua
@@ -69,3 +69,7 @@ end}
 Autolevel:registerScheme{ name = "alchemy-golem", levelup = function(self)
 	self:learnStats{ self.STAT_STR, self.STAT_STR, self.STAT_DEX, self.STAT_CON }
 end}
+
+Autolevel:registerScheme{ name = "drake", levelup = function(self)
+	self:learnStats{ self.STAT_STR, self.STAT_WIL, self.STAT_DEX }
+end}
diff --git a/game/modules/tome/data/general/npcs/all.lua b/game/modules/tome/data/general/npcs/all.lua
index c5335ee96a05cfe1c4a962a4994f1d58d1a40341..bbcd931d39b3e9b68c03e17bb3fbb4cdcd333638 100644
--- a/game/modules/tome/data/general/npcs/all.lua
+++ b/game/modules/tome/data/general/npcs/all.lua
@@ -36,6 +36,7 @@ loadIfNot("/data/general/npcs/ghoul.lua")
 loadIfNot("/data/general/npcs/jelly.lua")
 loadIfNot("/data/general/npcs/minotaur.lua")
 loadIfNot("/data/general/npcs/molds.lua")
+loadIfNot("/data/general/npcs/multihued-drake.lua")
 --loadIfNot("/data/general/npcs/mummy.lua")
 loadIfNot("/data/general/npcs/ooze.lua")
 loadIfNot("/data/general/npcs/orc-grushnak.lua")
diff --git a/game/modules/tome/data/general/npcs/multihued-drake.lua b/game/modules/tome/data/general/npcs/multihued-drake.lua
new file mode 100644
index 0000000000000000000000000000000000000000..27719c21039b7017e7dc88e7f67635013e85526e
--- /dev/null
+++ b/game/modules/tome/data/general/npcs/multihued-drake.lua
@@ -0,0 +1,124 @@
+-- ToME - Tales of Middle-Earth
+-- Copyright (C) 2009, 2010 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
+
+local Talents = require("engine.interface.ActorTalents")
+
+newEntity{
+	define_as = "BASE_NPC_MULTIHUED_DRAKE",
+	type = "dragon", subtype = "multihued",
+	display = "D", color=colors.PURPLE,
+	shader = "quad_hue",
+
+	body = { INVEN = 10, MAINHAND=1, OFFHAND=1, BODY=1 },
+	resolvers.drops{chance=100, nb=1, {type="money"} },
+
+	infravision = 20,
+	life_rating = 18,
+	rank = 2,
+	size_category = 5,
+
+	autolevel = "drake",
+	ai = "dumb_talented_simple", ai_state = { talent_in=1, },
+	energy = { mod=1 },
+	stats = { str=20, dex=20, mag=30, con=16 },
+
+	knockback_immune = 1,
+	stun_immune = 1,
+	poison_immune = 0.5,
+}
+
+newEntity{ base = "BASE_NPC_MULTIHUED_DRAKE",
+	name = "multi-hued drake hatchling", color=colors.PURPLE, display="d",
+	desc = [[A drake hatchling, not too powerful in itself, but it usually comes with its brothers and sisters.]],
+	level_range = {15, nil}, exp_worth = 1,
+	rarity = 7,
+	rank = 1, size_category = 2,
+	max_life = resolvers.rngavg(60,80),
+	combat_armor = 5, combat_def = 0,
+	on_melee_hit = {[DamageType.FIRE]=resolvers.mbonus(7, 3), [DamageType.COLD]=resolvers.mbonus(7, 3)},
+	combat = { dam=resolvers.rngavg(25,35), atk=15, apr=5, dammod={str=0.6} },
+
+	resists = { [DamageType.PHYSICAL] = 20, [DamageType.FIRE] = 20, [DamageType.COLD] = 20, [DamageType.ACID] = 20, [DamageType.LIGHTNING] = 20, },
+
+	make_escort = {
+		{type="dragon", subtype="multihued", name="multi-hued drake hatchling", number=3, no_subescort=true},
+	},
+	resolvers.talents{
+		[Talents.T_ICE_CLAW]=1,
+	}
+}
+
+newEntity{ base = "BASE_NPC_MULTIHUED_DRAKE",
+	name = "multi-hued drake", color=colors.PURPLE, display="D",
+	desc = [[A mature multi-hued drake, armed with many deadly breath weapons and nasty claws.]],
+	level_range = {25, nil}, exp_worth = 1,
+	rarity = 8,
+	max_life = resolvers.rngavg(150,170),
+	combat_armor = 12, combat_def = 0,
+	on_melee_hit = {[DamageType.FIRE]=resolvers.mbonus(10, 5), [DamageType.COLD]=resolvers.mbonus(10, 5)},
+	combat = { dam=resolvers.rngavg(35,45), atk=15, apr=25, dammod={str=1} },
+
+	resists = { [DamageType.PHYSICAL] = 30, [DamageType.FIRE] = 30, [DamageType.COLD] = 30, [DamageType.ACID] = 30, [DamageType.LIGHTNING] = 30, },
+
+	resolvers.talents{
+		[Talents.T_ICE_CLAW]=3,
+		[Talents.T_WING_BUFFET]=3,
+
+		[Talents.T_FIRE_BREATH]=4,
+		[Talents.T_ICE_BREATH]=4,
+		[Talents.T_SAND_BREATH]=4,
+		[Talents.T_POISON_BREATH]=4,
+		[Talents.T_LIGHTNING_BREATH]=4,
+		[Talents.T_ACID_BREATH]=4,
+	},
+}
+
+newEntity{ base = "BASE_NPC_MULTIHUED_DRAKE",
+	name = "greater multi-hued wyrm", color=colors.VIOLET, display="D",
+	desc = [[An old and powerful multi-hued drake, armed with many deadly breath weapons and nasty claws.]],
+	level_range = {35, nil}, exp_worth = 1,
+	rarity = 12,
+	rank = 3,
+	max_life = resolvers.rngavg(220,250),
+	combat_armor = 30, combat_def = 30,
+	on_melee_hit = {[DamageType.FIRE]=resolvers.mbonus(10, 5), [DamageType.COLD]=resolvers.mbonus(10, 5), [DamageType.LIGHTNING]=resolvers.mbonus(10, 5), [DamageType.ACID]=resolvers.mbonus(10, 5)},
+	combat = { dam=resolvers.rngavg(50,70), atk=25, apr=25, dammod={str=1.1} },
+
+	resists = { [DamageType.PHYSICAL] = 40, [DamageType.FIRE] = 40, [DamageType.COLD] = 40, [DamageType.ACID] = 40, [DamageType.LIGHTNING] = 40, },
+
+	summon = {
+		{type="dragon", subtype="multihued", number=2, hasxp=false},
+		{type="dragon", subtype="multihued", number=3, hasxp=false},
+	},
+
+	resolvers.talents{
+		[Talents.T_SUMMON]=1,
+
+		[Talents.T_ICE_CLAW]=5,
+		[Talents.T_WING_BUFFET]=5,
+		[Talents.T_DEVOURING_FLAME]=3,
+
+		[Talents.T_FIRE_BREATH]=8,
+		[Talents.T_ICE_BREATH]=8,
+		[Talents.T_SAND_BREATH]=8,
+		[Talents.T_POISON_BREATH]=8,
+		[Talents.T_LIGHTNING_BREATH]=8,
+		[Talents.T_ACID_BREATH]=8,
+	},
+}
diff --git a/game/modules/tome/data/talents/gifts/cold-drake.lua b/game/modules/tome/data/talents/gifts/cold-drake.lua
index 1b9180af07867b35fa0fef5d7dbfc51da6158947..a040e4d51cb7c345882b88bc236410ef9cdd3ca3 100644
--- a/game/modules/tome/data/talents/gifts/cold-drake.lua
+++ b/game/modules/tome/data/talents/gifts/cold-drake.lua
@@ -132,9 +132,9 @@ newTalent{
 	tactical = {
 		ATTACKAREA = 10,
 	},
-	range = 4,
+	range = function(self, t) return 4 + self:getTalentLevelRaw(t) end,
 	action = function(self, t)
-		local tg = {type="cone", range=0, radius=4 + self:getTalentLevelRaw(t), friendlyfire=false, talent=t}
+		local tg = {type="cone", range=0, radius=self:getTalentRange(t), friendlyfire=false, talent=t}
 		local x, y = self:getTarget(tg)
 		if not x or not y then return nil end
 		self:project(tg, x, y, DamageType.ICE, 30 + self:getStr(50) * self:getTalentLevel(t), {type="freeze"})
diff --git a/game/modules/tome/data/talents/gifts/fire-drake.lua b/game/modules/tome/data/talents/gifts/fire-drake.lua
index 3b0cc038dc407b28cd435e2ab17ad05d1ffef414..d07ff40b331d66a209752375bddb578bc9539bca 100644
--- a/game/modules/tome/data/talents/gifts/fire-drake.lua
+++ b/game/modules/tome/data/talents/gifts/fire-drake.lua
@@ -115,9 +115,9 @@ newTalent{
 	tactical = {
 		ATTACKAREA = 10,
 	},
-	range = 4,
+	range = function(self, t) return 4 + self:getTalentLevelRaw(t) end,
 	action = function(self, t)
-		local tg = {type="cone", range=0, radius=4 + self:getTalentLevelRaw(t), friendlyfire=false, talent=t}
+		local tg = {type="cone", range=0, radius=self:getTalentRange(t), friendlyfire=false, talent=t}
 		local x, y = self:getTarget(tg)
 		if not x or not y then return nil end
 		self:project(tg, x, y, DamageType.FIREBURN, 30 + self:getStr(65) * self:getTalentLevel(t), {type="flame"})
diff --git a/game/modules/tome/data/talents/gifts/sand-drake.lua b/game/modules/tome/data/talents/gifts/sand-drake.lua
index 6f35313ecd9caf6f6e18910acb1555a4ce025480..18e019c1900d07ab31711f040afed4ba7c1f3501 100644
--- a/game/modules/tome/data/talents/gifts/sand-drake.lua
+++ b/game/modules/tome/data/talents/gifts/sand-drake.lua
@@ -119,9 +119,9 @@ newTalent{
 	tactical = {
 		ATTACKAREA = 10,
 	},
-	range = 4,
+	range = function(self, t) return 4 + self:getTalentLevelRaw(t) end,
 	action = function(self, t)
-		local tg = {type="cone", range=0, radius=4 + self:getTalentLevelRaw(t), friendlyfire=false, talent=t}
+		local tg = {type="cone", range=0, radius=self:getTalentRange(t), friendlyfire=false, talent=t}
 		local x, y = self:getTarget(tg)
 		if not x or not y then return nil end
 		self:project(tg, x, y, DamageType.SAND, {dur=2+self:getTalentLevelRaw(t), dam=10 + self:getStr() * 0.3 * self:getTalentLevel(t)}, {type="flame"})
diff --git a/game/modules/tome/data/talents/gifts/summon-distance.lua b/game/modules/tome/data/talents/gifts/summon-distance.lua
index 9789a0403021d85b9141ce6379895b5f62eb9259..e683565e5fae3dd1be34c084a087bf8dfc9f899d 100644
--- a/game/modules/tome/data/talents/gifts/summon-distance.lua
+++ b/game/modules/tome/data/talents/gifts/summon-distance.lua
@@ -49,9 +49,9 @@ newTalent{
 	tactical = {
 		ATTACKAREA = 10,
 	},
-	range = 4,
+	range = 5,
 	action = function(self, t)
-		local tg = {type="cone", range=0, radius=5, friendlyfire=false, talent=t}
+		local tg = {type="cone", range=0, radius=self:getTalentRange(t), friendlyfire=false, talent=t}
 		local x, y = self:getTarget(tg)
 		if not x or not y then return nil end
 		self:project(tg, x, y, DamageType.ACID, 30 + self:getWil(50) * self:getTalentLevel(t), {type="acid"})
@@ -75,9 +75,9 @@ newTalent{
 	tactical = {
 		ATTACKAREA = 10,
 	},
-	range = 4,
+	range = 5,
 	action = function(self, t)
-		local tg = {type="cone", range=0, radius=5, friendlyfire=false, talent=t}
+		local tg = {type="cone", range=0, radius=self:getTalentRange(t), friendlyfire=false, talent=t}
 		local x, y = self:getTarget(tg)
 		if not x or not y then return nil end
 		self:project(tg, x, y, DamageType.LIGHTNING, rng.range(1, 30 + self:getWil(80) * self:getTalentLevel(t)), {type="lightning_explosion"})
@@ -101,9 +101,9 @@ newTalent{
 	tactical = {
 		ATTACKAREA = 10,
 	},
-	range = 4,
+	range = 5,
 	action = function(self, t)
-		local tg = {type="cone", range=0, radius=5, friendlyfire=false, talent=t}
+		local tg = {type="cone", range=0, radius=self:getTalentRange(t), friendlyfire=false, talent=t}
 		local x, y = self:getTarget(tg)
 		if not x or not y then return nil end
 		self:project(tg, x, y, DamageType.POISON, 30 + self:getWil(70) * self:getTalentLevel(t), {type="slime"})