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"})