From 483acb0194149c1052ebdc63168df27755cb6c7e Mon Sep 17 00:00:00 2001 From: dg <dg@51575b47-30f0-44d4-a5cc-537603b46e54> Date: Tue, 10 Aug 2010 22:33:19 +0000 Subject: [PATCH] Fixed the exit of Eruan Orc necromancers have new powers in Rak'Shor Pride Orc blood mages have appeared in Rak'Shor Pride git-svn-id: http://svn.net-core.org/repos/t-engine4@1006 51575b47-30f0-44d4-a5cc-537603b46e54 --- game/modules/tome/class/Game.lua | 8 +-- .../tome/data/general/npcs/orc-rak-shor.lua | 28 +++++++- .../modules/tome/data/gfx/particles/blood.lua | 38 ++++++++++ .../tome/data/gfx/particles/bolt_blood.lua | 51 +++++++++++++ .../tome/data/gfx/particles/bolt_slime.lua | 51 +++++++++++++ game/modules/tome/data/talents/misc/npcs.lua | 72 +++++++++++++++++++ game/modules/tome/data/timed_effects.lua | 18 +++++ game/modules/tome/data/zones/eruan/zone.lua | 2 +- .../tome/data/zones/flooded-cave/zone.lua | 2 +- 9 files changed, 261 insertions(+), 9 deletions(-) create mode 100644 game/modules/tome/data/gfx/particles/blood.lua create mode 100644 game/modules/tome/data/gfx/particles/bolt_blood.lua create mode 100644 game/modules/tome/data/gfx/particles/bolt_slime.lua diff --git a/game/modules/tome/class/Game.lua b/game/modules/tome/class/Game.lua index 811aaef28f..39a9eb9ada 100644 --- a/game/modules/tome/class/Game.lua +++ b/game/modules/tome/class/Game.lua @@ -475,10 +475,10 @@ function _M:setupCommands() self.player.esp.range = 50 self.player.inc_damage.all = 100000 -- self:changeLevel(15, "high-peak") - self:changeLevel(1, "town-gates-of-morning") --- self:changeLevel(1, "wilderness-arda-fareast") --- game.memory_levels["wilderness-arda-fareast-1"] = game.level --- self.player:grantQuest("orc-pride") +-- self:changeLevel(1, "town-gates-of-morning") + self:changeLevel(1, "wilderness-arda-fareast") + game.memory_levels["wilderness-arda-fareast-1"] = game.level + self.player:grantQuest("orc-pride") -- self.player:grantQuest("escort-duty") end end, diff --git a/game/modules/tome/data/general/npcs/orc-rak-shor.lua b/game/modules/tome/data/general/npcs/orc-rak-shor.lua index 218d24c77d..1e8f474d59 100644 --- a/game/modules/tome/data/general/npcs/orc-rak-shor.lua +++ b/game/modules/tome/data/general/npcs/orc-rak-shor.lua @@ -39,8 +39,8 @@ newEntity{ open_door = true, - autolevel = "warrior", - ai = "dumb_talented_simple", ai_state = { talent_in=3, }, + autolevel = "caster", + ai = "dumb_talented_simple", ai_state = { talent_in=1, }, energy = { mod=1 }, stats = { str=20, dex=8, mag=6, con=16 }, } @@ -67,6 +67,28 @@ newEntity{ base = "BASE_NPC_ORC_RAK_SHOR", resolvers.talents{ [Talents.T_SUMMON]=1, --- [Talents.T_]=3, + [Talents.T_SOUL_ROT]=5, + }, +} + +newEntity{ base = "BASE_NPC_ORC_RAK_SHOR", + name = "orc blood mage", color=colors.CRIMSON, + desc = [[An orc dressed in black robes. He mumbles is a harsh tongue.]], + level_range = {27, nil}, exp_worth = 1, + rarity = 2, + max_life = resolvers.rngavg(110,120), life_rating = 12, + resolvers.equip{ + {type="weapon", subtype="staff", autoreq=true}, + {type="armor", subtype="cloth", autoreq=true}, + }, + combat_armor = 0, combat_def = 5, + + -- Nullify their cooldowns + talent_cd_reduction={[Talents.T_SOUL_ROT]=2, [Talents.T_BLOOD_GRASP]=4, }, + + resolvers.talents{ + [Talents.T_SOUL_ROT]=5, + [Talents.T_BLOOD_GRASP]=5, + [Talents.T_CURSE_OF_VULNERABILITY]=5, }, } diff --git a/game/modules/tome/data/gfx/particles/blood.lua b/game/modules/tome/data/gfx/particles/blood.lua new file mode 100644 index 0000000000..44959dadda --- /dev/null +++ b/game/modules/tome/data/gfx/particles/blood.lua @@ -0,0 +1,38 @@ +-- 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 + +return { + base = 1000, + + angle = { 0, 360 }, anglev = { 2000, 4000 }, anglea = { 200, 600 }, + + life = { 5, 10 }, + size = { 2, 5 }, sizev = {0, 0}, sizea = {0, 0}, + + r = {80, 200}, rv = {0, 10}, ra = {0, 0}, + g = {0, 0}, gv = {0, 0}, ga = {0, 0}, + b = {0, 0}, bv = {0, 0}, ba = {0, 0}, + a = {255, 255}, av = {0, 0}, aa = {0, 0}, + +}, function(self) + self.nb = (self.nb or 0) + 1 + if self.nb < 4 then + self.ps:emit(100) + end +end diff --git a/game/modules/tome/data/gfx/particles/bolt_blood.lua b/game/modules/tome/data/gfx/particles/bolt_blood.lua new file mode 100644 index 0000000000..b71c3cf4c5 --- /dev/null +++ b/game/modules/tome/data/gfx/particles/bolt_blood.lua @@ -0,0 +1,51 @@ +-- 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 + +return { generator = function() + local radius = 0 + local sradius = (radius + 0.5) * (engine.Map.tile_w + engine.Map.tile_h) / 2 + local ad = rng.float(0, 360) + local a = math.rad(ad) + local r = rng.float(0, sradius / 6) + local x = r * math.cos(a) + local y = r * math.sin(a) + local bx = math.floor(x / engine.Map.tile_w) + local by = math.floor(y / engine.Map.tile_h) + local static = rng.percent(40) + + return { + trail = 1, + life = 6, + size = 3, sizev = 0, sizea = 0, + + x = x, xv = 0, xa = 0, + y = y, yv = 0, ya = 0, + dir = a, dirv = 0, dira = 0, + vel = sradius / 2 / 6, velv = 0, vela = 0, + + r = rng.range(180, 220)/255, rv = 0, ra = 0, + g = 0, gv = 0, ga = 0, + b = 0, bv = 0, ba = 0, + a = rng.range(80, 220)/255, av = 0, aa = 0, + } +end, }, +function(self) + self.ps:emit(30) +end, +30*6 diff --git a/game/modules/tome/data/gfx/particles/bolt_slime.lua b/game/modules/tome/data/gfx/particles/bolt_slime.lua new file mode 100644 index 0000000000..78127f36e8 --- /dev/null +++ b/game/modules/tome/data/gfx/particles/bolt_slime.lua @@ -0,0 +1,51 @@ +-- 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 + +return { generator = function() + local radius = 0 + local sradius = (radius + 0.5) * (engine.Map.tile_w + engine.Map.tile_h) / 2 + local ad = rng.float(0, 360) + local a = math.rad(ad) + local r = rng.float(0, sradius / 6) + local x = r * math.cos(a) + local y = r * math.sin(a) + local bx = math.floor(x / engine.Map.tile_w) + local by = math.floor(y / engine.Map.tile_h) + local static = rng.percent(40) + + return { + trail = 1, + life = 6, + size = 3, sizev = 0, sizea = 0, + + x = x, xv = 0, xa = 0, + y = y, yv = 0, ya = 0, + dir = a, dirv = 0, dira = 0, + vel = sradius / 2 / 6, velv = 0, vela = 0, + + r = 0, rv = 0, ra = 0, + g = rng.range(80, 200)/255, gv = 0, ga = 0, + b = 0, bv = 0, ba = 0, + a = rng.range(80, 220)/255, av = 0, aa = 0, + } +end, }, +function(self) + self.ps:emit(30) +end, +30*6 diff --git a/game/modules/tome/data/talents/misc/npcs.lua b/game/modules/tome/data/talents/misc/npcs.lua index cdc7fe1d99..949e75a6a1 100644 --- a/game/modules/tome/data/talents/misc/npcs.lua +++ b/game/modules/tome/data/talents/misc/npcs.lua @@ -20,6 +20,7 @@ -- race & classes newTalentType{ type="technique/other", name = "other", hide = true, description = "Talents of the various entities of the world." } newTalentType{ no_silence=true, type="spell/other", name = "other", hide = true, description = "Talents of the various entities of the world." } +newTalentType{ no_silence=true, type="corruption/other", name = "other", hide = true, description = "Talents of the various entities of the world." } newTalentType{ type="wild-gift/other", name = "other", hide = true, description = "Talents of the various entities of the world." } newTalentType{ type="other/other", name = "other", hide = true, description = "Talents of the various entities of the world." } newTalentType{ type="undead/other", name = "other", hide = true, description = "Talents of the various entities of the world." } @@ -843,3 +844,74 @@ newTalent{ The damage will increase with Willpower and Cunning stats.]]):format(self:combatTalentMindDamage(t, 10, 170)) end, } + +newTalent{ + name = "Soul Rot", + type = {"corruption/other", 1}, + points = 5, + cooldown = 3, + vim = 10, + range = 20, + proj_speed = 10, + action = function(self, t) + local tg = {type="bolt", range=self:getTalentRange(t), talent=t, display={particle="bolt_slime"}} + local x, y = self:getTarget(tg) + if not x or not y then return nil end + self:projectile(tg, x, y, DamageType.BLIGHT, self:spellCrit(self:combatTalentSpellDamage(t, 20, 250)), {type="slime"}) + game:playSoundNear(self, "talents/slime") + return true + end, + info = function(self) + return ([[Projects a bolt of pure blight, doing %0.2f blight damage. + The damage will increase with Magic stat.]]):format(self:combatTalentSpellDamage(t, 20, 250)) + end, +} + +newTalent{ + name = "Blood Grasp", + type = {"corruption/other", 1}, + points = 5, + cooldown = 5, + vim = 20, + range = 20, + proj_speed = 20, + action = function(self, t) + local tg = {type="bolt", range=self:getTalentRange(t), talent=t, display={particle="bolt_blood"}} + local x, y = self:getTarget(tg) + if not x or not y then return nil end + self:projectile(tg, x, y, DamageType.DRAINLIFE, {dam=self:spellCrit(self:combatTalentSpellDamage(t, 10, 220)), healfactor=0.5}, {type="blood"}) + game:playSoundNear(self, "talents/slime") + return true + end, + info = function(self) + return ([[Projects a bolt of corrupted blood doing %0.2f blight damage and healing the caster for half the damage done. + The damage will increase with Magic stat.]]):format(self:combatTalentSpellDamage(t, 10, 220)) + end, +} + +newTalent{ + name = "Curse of Vulnerability", + type = {"corruption/other", 1}, + points = 5, + cooldown = 20, + vim = 20, + range = 20, + action = function(self, t) + local tg = {type="hit", range=self:getTalentRange(t), talent=t} + local x, y = self:getTarget(tg) + if not x or not y then return nil end + self:project(tg, x, y, function(tx, ty) + local target = game.level.map(tx, ty, Map.ACTOR) + if not target then return end + if target:checkHit(self:combatSpellpower(), target:combatSpellResist(), 0, 95, 15) then + target:setEffect(target.EFF_CURSE_VULNERABILITY, 10, {power=self:combatTalentSpellDamage(t, 10, 85)}) + end + end) + game:playSoundNear(self, "talents/slime") + return true + end, + info = function(self) + return ([[Curses your target, + The resistances will decrease with Magic stat.]]):format(self:combatTalentSpellDamage(t, 10, 85)) + end, +} diff --git a/game/modules/tome/data/timed_effects.lua b/game/modules/tome/data/timed_effects.lua index 21aef45e33..73a0d64079 100644 --- a/game/modules/tome/data/timed_effects.lua +++ b/game/modules/tome/data/timed_effects.lua @@ -943,3 +943,21 @@ newEffect{ end end, } + +newEffect{ + name = "CURSE_VULNERABILITY", + desc = "Curse of Vulnerability", + type = "curse", + status = "detrimental", + parameters = { power=10 }, + on_gain = function(self, err) return "#Target# is cursed.", "+Curse" end, + on_lose = function(self, err) return "#Target# is no longer cursed.", "-Curse" end, + activate = function(self, eff) + eff.tmpid = self:addTemporaryValue("resists", { + all = -eff.power, + }) + end, + deactivate = function(self, eff) + self:removeTemporaryValue("resists", eff.tmpid) + end, +} diff --git a/game/modules/tome/data/zones/eruan/zone.lua b/game/modules/tome/data/zones/eruan/zone.lua index 166bb17166..7695e69820 100644 --- a/game/modules/tome/data/zones/eruan/zone.lua +++ b/game/modules/tome/data/zones/eruan/zone.lua @@ -64,7 +64,7 @@ return { { [1] = { generator = { map = { - up = "UP_WILDERNESS", + up = "UP_WILDERNESS_FAR_EAST", }, }, }, [5] = { diff --git a/game/modules/tome/data/zones/flooded-cave/zone.lua b/game/modules/tome/data/zones/flooded-cave/zone.lua index a3277fb2b7..c647deafc6 100644 --- a/game/modules/tome/data/zones/flooded-cave/zone.lua +++ b/game/modules/tome/data/zones/flooded-cave/zone.lua @@ -62,7 +62,7 @@ return { { [1] = { generator = { map = { - up = "UP_WILDERNESS", + up = "UP_WILDERNESS_FAR_EAST", }, }, }, [2] = { -- GitLab