From 3a9ce4ab94df8d4ee66d9930c9f9a4c43e2bec89 Mon Sep 17 00:00:00 2001
From: dg <dg@51575b47-30f0-44d4-a5cc-537603b46e54>
Date: Thu, 29 Jul 2010 11:50:11 +0000
Subject: [PATCH] Added multi-hued dragons to the generic set of monsters,
 beware of the Greater Multi-hued Wyrm .. it is quite nasty

git-svn-id: http://svn.net-core.org/repos/t-engine4@945 51575b47-30f0-44d4-a5cc-537603b46e54
---
 game/modules/tome/class/Game.lua              |   4 +-
 game/modules/tome/data/autolevel_schemes.lua  |   4 +
 game/modules/tome/data/general/npcs/all.lua   |   1 +
 .../data/general/npcs/multihued-drake.lua     | 124 ++++++++++++++++++
 .../tome/data/talents/gifts/cold-drake.lua    |   4 +-
 .../tome/data/talents/gifts/fire-drake.lua    |   4 +-
 .../tome/data/talents/gifts/sand-drake.lua    |   4 +-
 .../data/talents/gifts/summon-distance.lua    |  12 +-
 8 files changed, 144 insertions(+), 13 deletions(-)
 create mode 100644 game/modules/tome/data/general/npcs/multihued-drake.lua

diff --git a/game/modules/tome/class/Game.lua b/game/modules/tome/class/Game.lua
index 10a933d670..593746e351 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 182fe9c5d3..44823c1f07 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 c5335ee96a..bbcd931d39 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 0000000000..27719c2103
--- /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 1b9180af07..a040e4d51c 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 3b0cc038dc..d07ff40b33 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 6f35313ecd..18e019c190 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 9789a04030..e683565e5f 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"})
-- 
GitLab