diff --git a/game/modules/tome/data/general/npcs/horror.lua b/game/modules/tome/data/general/npcs/horror.lua index 9167897ebfd48d7c24fbe1dd37cb42604123660f..21535d1e4fd6e9d82f3879d9f830ca1058dcde27 100644 --- a/game/modules/tome/data/general/npcs/horror.lua +++ b/game/modules/tome/data/general/npcs/horror.lua @@ -73,9 +73,9 @@ newEntity{ base = "BASE_NPC_HORROR", }, talent_cd_reduction = {[Talents.T_BLINDSIDE]=4}, - + resolvers.inscriptions(1, {"regeneration infusion"}), - + resolvers.talents{ --[Talents.T_BONE_GRAB]={base=4, every=10}, [Talents.T_BLINDSIDE]={base=5, every=12}, @@ -90,18 +90,18 @@ newEntity{ base = "BASE_NPC_HORROR", [Talents.T_WEAPON_COMBAT]={base=5, every=10, max=10}, [Talents.T_WEAPONS_MASTERY]={base=3, every=10, max=10}, }, - + resolvers.sustains_at_birth(), - on_takehit = function(self, value, src) + on_takehit = function(self, value, src) if value >= (self.max_life * 0.1) then self:forceUseTalent(self.T_SUMMON, {ignore_energy=true, ignore_cd=true}) end return value end, - + summon = { - {type="vermin", subtype="worms", name="carrion worm mass", number=2, hasxp=false}, + {type="vermin", subtype="worms", name="carrion worm mass", number=1, hasxp=false}, }, } @@ -127,7 +127,7 @@ newEntity{ base = "BASE_NPC_HORROR", [Talents.T_MIND_SEAR]={base=4, every=14, max=7}, [Talents.T_TELEKINETIC_BLAST]={base=4, every=14, max=7}, }, - + resolvers.inscriptions(1, {"shielding rune"}), resolvers.sustains_at_birth(), @@ -173,9 +173,9 @@ newEntity{ base = "BASE_NPC_HORROR", [Talents.T_SHADOW_BLAST]={base=4, every=8, max=8}, [Talents.T_HYMN_OF_SHADOWS]={base=3, every=9, max=8}, }, - + resolvers.inscriptions(1, {"shielding rune"}), - + resolvers.sustains_at_birth(), } @@ -209,10 +209,10 @@ newEntity{ base = "BASE_NPC_HORROR", [Talents.T_TAKE_DOWN]={base=4, every=5, max=8}, [Talents.T_CRUSHING_HOLD]={base=4, every=5, max=8}, }, - + resolvers.inscriptions(1, {"healing infusion"}), --resolvers.inscriptions(2, "rune"), - + -- Add eyes on_added_to_level = function(self) local eyes = {} @@ -484,7 +484,7 @@ newEntity{ base = "BASE_NPC_HORROR", combat = { dam=resolvers.levelup(resolvers.rngavg(20,30), 1, 1.2), atk=resolvers.rngavg(10,20), apr=5, dammod={str=1} }, resists = { [DamageType.TEMPORAL] = 5}, - + make_escort = { {type="horror", subtype="temporal", name="temporal devourer", number=2, no_subescort=true}, }, @@ -560,7 +560,7 @@ newEntity{ base = "BASE_NPC_HORROR", make_escort = { {type="horror", subtype="temporal", name="temporal dredge", number=3, no_subescort=true}, }, - + resolvers.inscriptions(1, {"shielding rune"}), resolvers.inscriptions(1, "infusion"), @@ -600,7 +600,7 @@ newEntity{ base = "BASE_NPC_HORROR", resolvers.inscriptions(1, "rune"), resolvers.inscriptions(1, "infusion"), - + resolvers.sustains_at_birth(), } diff --git a/game/modules/tome/data/quests/paradoxology.lua b/game/modules/tome/data/quests/paradoxology.lua index d3eb25f1fd9f15200de4bd2a11a669485978b6be..f307bed45943fd7a1df2504cd8923365ac354001 100644 --- a/game/modules/tome/data/quests/paradoxology.lua +++ b/game/modules/tome/data/quests/paradoxology.lua @@ -74,12 +74,16 @@ generate = function(self, player, x, y) a:learnTalent(a.T_DAMAGE_SHUNT, true, 3) a:learnTalent(a.T_FLAWED_DESIGN, true, 4) a:learnTalent(a.T_QUANTUM_SPIKE, true, 3) + a:learnTalent(a.T_SEVER_LIFELINE, true, 5) a.talent_cd_reduction = a.talent_cd_reduction or {} a.talent_cd_reduction[a.T_STATIC_HISTORY] = 15 + a.talents_cd[a.T_SEVER_LIFELINE] = 20 a:forceLevelup(a.level + 7) + a:incIncStat("wil", 200) + a.on_die = function(self) local o = game.zone:makeEntityByName(game.level, "object", "RUNE_RIFT") o:identify(true) @@ -116,6 +120,8 @@ generate = function(self, player, x, y) self.on_die = nil self:die() + who.changed = true + who.life = math.max(who.life, who.max_life * 0.3) return true end end diff --git a/game/modules/tome/data/talents/misc/npcs.lua b/game/modules/tome/data/talents/misc/npcs.lua index 2f2bb734c46b394d9b0a9fe23f98df8242ef7dbc..286cb3a6ba6b79ba98755733ee3bcb9a589b583f 100644 --- a/game/modules/tome/data/talents/misc/npcs.lua +++ b/game/modules/tome/data/talents/misc/npcs.lua @@ -1332,6 +1332,37 @@ newTalent{ end, } +newTalent{ + name = "Sever Lifeline", + type = {"chronomancy/other", 1}, + points = 5, + paradox = 1, + cooldown = 20, + tactical = { + ATTACK = 1000, + }, + range = 10, + direct_hit = true, + requires_target = true, + getDamage = function(self, t) return self:combatTalentSpellDamage(t, 20, 220) * 10000 *getParadoxModifier(self, pm) end, + 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 + local _ _, x, y = self:canProject(tg, x, y) + if not x or not y then return nil end + local target = game.level.map(x, y, Map.ACTOR) + if not target then return nil end + + target:setEffect(target.EFF_SEVER_LIFELINE, 4, {src=self, power=t.getDamage(self, t)}) + game:playSoundNear(self, "talents/arcane") + return true + end, + info = function(self, t) + return ([[Start to sever the lifeline of the target. If after 4 turns the target is still in line of sight, it will die.]]) + end, +} + newTalent{ name = "Call of Amakthel", type = {"technique/other", 1}, diff --git a/game/modules/tome/data/timed_effects.lua b/game/modules/tome/data/timed_effects.lua index 4b89270a2d4c4b09f9f165437127e0d0e1abbe0d..4630f97b91dd1442e8071bb7719545cc947c7d62 100644 --- a/game/modules/tome/data/timed_effects.lua +++ b/game/modules/tome/data/timed_effects.lua @@ -4080,3 +4080,19 @@ newEffect{ DamageType:get(DamageType.ARCANE).projector(eff.src, self.x, self.y, DamageType.ARCANE, dam) end, } + +newEffect{ + name = "SEVER_LIFELINE", + desc = "Sever Lifeline", + long_desc = function(self, eff) return ("The target lifeline is being cut. When the effect ends %0.2f temporal damage will hit the target."):format(eff.power) end, + type = "time", + status = "detrimental", + parameters = {power=10000}, + on_gain = function(self, err) return "#Target# lifeline is being severed!", "+Sever Lifeline" end, + deactivate = function(self, eff) + if not eff.src or eff.src.dead then return end + if not eff.src:hasLOS(self.x, self.y) then return end + if eff.dur >= 1 then return end + DamageType:get(DamageType.TEMPORAL).projector(eff.src, self.x, self.y, DamageType.TEMPORAL, eff.power) + end, +}