diff --git a/game/modules/tome/data/birth/classes/corrupted.lua b/game/modules/tome/data/birth/classes/corrupted.lua index 9518dcee4b9603936fbc4006a1ebd2bac7ef4252..b522ebca062c10b2395e4e78bbc1b979cf770426 100644 --- a/game/modules/tome/data/birth/classes/corrupted.lua +++ b/game/modules/tome/data/birth/classes/corrupted.lua @@ -48,18 +48,18 @@ newBirthDescriptor{ stats = { str=5, mag=3, dex=1, }, talents_types = { ["technique/combat-training"]={true, 0.3}, + ["cunning/survival"]={false, 0.1}, ["corruption/sanguisuge"]={true, 0.3}, ["corruption/reaving-combat"]={true, 0.3}, ["corruption/scourge"]={true, 0.3}, ["corruption/plague"]={true, 0.3}, - ["corruption/hexes"]={true, 0.3}, - ["corruption/curses"]={true, 0.3}, + ["corruption/hexes"]={false, 0.3}, + ["corruption/curses"]={false, 0.3}, ["corruption/bone"]={true, 0.3}, }, talents = { [ActorTalents.T_CORRUPTED_STRENGTH] = 1, [ActorTalents.T_WEAPON_COMBAT] = 1, - [ActorTalents.T_VIRULENT_DISEASE] = 1, [ActorTalents.T_BLOOD_SACRIFICE] = 1, [ActorTalents.T_REND] = 1, }, diff --git a/game/modules/tome/data/birth/classes/mage.lua b/game/modules/tome/data/birth/classes/mage.lua index d9c6a9d1e5d3b8dd425e13a546d04ce29f27cb68..1c5227e7b6f0327957a95c7533d079350dd94ae9 100644 --- a/game/modules/tome/data/birth/classes/mage.lua +++ b/game/modules/tome/data/birth/classes/mage.lua @@ -36,8 +36,6 @@ newBirthDescriptor{ }, }, copy = { - -- All mages are of angolwen faction - faction = "angolwen", mana_regen = 0.5, mana_rating = 7, resolvers.generic(function(e) @@ -79,6 +77,8 @@ newBirthDescriptor{ [ActorTalents.T_TELEPORT_ANGOLWEN]=1, }, copy = { + -- All mages are of angolwen faction + faction = "angolwen", max_life = 90, life_rating = 10, resolvers.equip{ id=true, @@ -182,6 +182,8 @@ newBirthDescriptor{ [ActorTalents.T_TELEPORT_ANGOLWEN]=1, }, copy = { + -- All mages are of angolwen faction + faction = "angolwen", max_life = 90, life_rating = 10, resolvers.equip{ id=true, @@ -227,6 +229,8 @@ newBirthDescriptor{ [ActorTalents.T_TELEPORT_ANGOLWEN]=1, }, copy = { + -- All mages are of angolwen faction + faction = "angolwen", max_life = 90, life_rating = 10, resolvers.equip{ id=true, @@ -268,6 +272,8 @@ newBirthDescriptor{ [ActorTalents.T_TELEPORT_ANGOLWEN]=1, }, copy = { + -- All mages are of angolwen faction + faction = "angolwen", max_life = 90, life_rating = 10, resolvers.equip{ id=true, diff --git a/game/modules/tome/data/talents/corruptions/bone.lua b/game/modules/tome/data/talents/corruptions/bone.lua index aac3547802f10e1bebacd8df7c7b82a9d54ed0ae..32aa99c7fe161b312905b37c2d84939b642c6cd1 100644 --- a/game/modules/tome/data/talents/corruptions/bone.lua +++ b/game/modules/tome/data/talents/corruptions/bone.lua @@ -25,6 +25,7 @@ newTalent{ vim = 13, cooldown = 4, range = 20, + random_ego = "attack", action = function(self, t) local tg = {type="beam", range=self:getTalentRange(t), talent=t} local x, y = self:getTarget(tg) @@ -89,6 +90,7 @@ newTalent{ points = 5, vim = 25, cooldown = 12, + random_ego = "attack", range = function(self, t) return self:getTalentLevelRaw(t) end, action = function(self, t) local tg = {type="ball", radius=self:getTalentRange(t), friendlyfire=false} diff --git a/game/modules/tome/data/talents/corruptions/corruptions.lua b/game/modules/tome/data/talents/corruptions/corruptions.lua index cb22bd0568106f96f1cedf8fe2babe948aec1ae9..93b2bf783c951db96b640a9e572a833b85a1e96e 100644 --- a/game/modules/tome/data/talents/corruptions/corruptions.lua +++ b/game/modules/tome/data/talents/corruptions/corruptions.lua @@ -73,3 +73,4 @@ load("/data/talents/corruptions/scourge.lua") load("/data/talents/corruptions/plague.lua") load("/data/talents/corruptions/reaving-combat.lua") load("/data/talents/corruptions/bone.lua") +load("/data/talents/corruptions/curses.lua") diff --git a/game/modules/tome/data/talents/corruptions/curses.lua b/game/modules/tome/data/talents/corruptions/curses.lua new file mode 100644 index 0000000000000000000000000000000000000000..c36be2053fccbe6f650040ac5d55a8886400cef8 --- /dev/null +++ b/game/modules/tome/data/talents/corruptions/curses.lua @@ -0,0 +1,130 @@ +-- 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 + +newTalent{ + name = "Curse of Defenselessness", + type = {"corruption/curses", 1}, + require = corrs_req1, + 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_DEFENSELESSNESS, 10, {power=self:combatTalentSpellDamage(t, 30, 60)}) + end + end) + game:playSoundNear(self, "talents/slime") + return true + end, + info = function(self, t) + return ([[Curses your target, decreasing its defense and saves by %d. + The defense and saves will decrease with Magic stat.]]):format(self:combatTalentSpellDamage(t, 10, 30)) + end, +} + +newTalent{ + name = "Curse of Impotence", + type = {"corruption/curses", 2}, + require = corrs_req2, + 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_IMPOTENCE, 10, {power=self:combatTalentSpellDamage(t, 10, 30)}) + end + end) + game:playSoundNear(self, "talents/slime") + return true + end, + info = function(self, t) + return ([[Curses your target, decreasing all damage done by %d%%. + The damage will decrease with Magic stat.]]):format(self:combatTalentSpellDamage(t, 10, 30)) + end, +} + +newTalent{ + name = "Curse of Death", + type = {"corruption/curses", 3}, + require = corrs_req3, + 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_DEATH, 10, {src=self, dam=self:combatTalentSpellDamage(t, 10, 70)}) + end + end) + game:playSoundNear(self, "talents/slime") + return true + end, + info = function(self, t) + return ([[Curses your target, stopping any natural healing and dealing %0.2f darkness damage each turn. + The resistances will decrease with Magic stat.]]):format(self:combatTalentSpellDamage(t, 10, 70)) + end, +} + +newTalent{ + name = "Curse of Vulnerability", + type = {"corruption/curses", 4}, + require = corrs_req4, + 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, 60)}) + end + end) + game:playSoundNear(self, "talents/slime") + return true + end, + info = function(self, t) + return ([[Curses your target, decreasing all its resistances by %d%%. + The resistances will decrease with Magic stat.]]):format(self:combatTalentSpellDamage(t, 10, 60)) + end, +} diff --git a/game/modules/tome/data/talents/corruptions/plague.lua b/game/modules/tome/data/talents/corruptions/plague.lua index 0bd62915a2b60953998f167fb129aa8ec2e4ef42..4d0bfe819ef8bad91eb7b52d8cf543ad19afb11a 100644 --- a/game/modules/tome/data/talents/corruptions/plague.lua +++ b/game/modules/tome/data/talents/corruptions/plague.lua @@ -24,6 +24,7 @@ newTalent{ points = 5, vim = 8, cooldown = 3, + random_ego = "attack", range = function(self, t) return 5 + math.floor(self:getTalentLevel(t) * 1.3) end, action = function(self, t) local tg = {type="bolt", range=self:getTalentRange(t)} diff --git a/game/modules/tome/data/talents/misc/npcs.lua b/game/modules/tome/data/talents/misc/npcs.lua index ab18d115df92a0695ef87cb0ea0ad6d1807f07ea..7eabd18d62820d8a574e01858dc915952f54b4ad 100644 --- a/game/modules/tome/data/talents/misc/npcs.lua +++ b/game/modules/tome/data/talents/misc/npcs.lua @@ -951,31 +951,3 @@ newTalent{ The damage will increase with Magic stat.]]):format(self:combatTalentSpellDamage(t, 10, 170), 20 + self:getTalentLevel(t) * 10, self:combatTalentSpellDamage(t, 10, 220)) end, } - -newTalent{ - name = "Curse of Vulnerability", - type = {"corruption/other", 1}, - points = 5, - cooldown = 20, - vim = 20, - range = 20, - random_ego = "utility", - 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 1df06e1f66f00e730021022e46eed5beec765c94..f70dafa29fda1226528dbb3605ef65b99a257992 100644 --- a/game/modules/tome/data/timed_effects.lua +++ b/game/modules/tome/data/timed_effects.lua @@ -1014,6 +1014,66 @@ newEffect{ end, } +newEffect{ + name = "CURSE_IMPOTENCE", + desc = "Curse of Impotence", + 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("inc_damage", { + all = -eff.power, + }) + end, + deactivate = function(self, eff) + self:removeTemporaryValue("inc_damage", eff.tmpid) + end, +} + +newEffect{ + name = "CURSE_DEFENSELESSNESS", + desc = "Curse of Defenselessness", + 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.def = self:addTemporaryValue("combat_def", eff.power) + eff.mental = self:addTemporaryValue("combat_mentalresist", eff.power) + eff.spell = self:addTemporaryValue("combat_spellresist", eff.power) + eff.physical = self:addTemporaryValue("combat_physresist", eff.power) + end, + deactivate = function(self, eff) + self:removeTemporaryValue("combat_def", eff.def) + self:removeTemporaryValue("combat_mentalresist", eff.mental) + self:removeTemporaryValue("combat_spellresist", eff.spell) + self:removeTemporaryValue("combat_physresist", eff.physical) + end, +} + +newEffect{ + name = "CURSE_DEATH", + desc = "Curse of Death", + 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, + -- Damage each turn + on_timeout = function(self, eff) + DamageType:get(DamageType.DARKNESS).projector(eff.src, self.x, self.y, DamageType.DARKNESS, eff.dam) + end, + activate = function(self, eff) + eff.tmpid = self:addTemporaryValue("life_regen", -self.life_regen) + end, + deactivate = function(self, eff) + self:removeTemporaryValue("life_regen", eff.tmpid) + end, +} + newEffect{ name = "CONTINUUM_DESTABILIZATION", desc = "Continuum Destabilization", diff --git a/ideas/blight.ods b/ideas/blight.ods index e7555b1e25832ed7d0df40f893d1d241caf14fad..f418d00bdb5459417c4a20a77359f5b4c5d9d55e 100644 Binary files a/ideas/blight.ods and b/ideas/blight.ods differ diff --git a/ideas/classes.ods b/ideas/classes.ods index 510e4c6cbb25c102bb566395953945349f16bf29..229ca095f1bdf6e146cd66ba1cfca99cfe5006bf 100644 Binary files a/ideas/classes.ods and b/ideas/classes.ods differ