diff --git a/game/modules/tome/data/talents/chronomancy/anomalies.lua b/game/modules/tome/data/talents/chronomancy/anomalies.lua index 7a992eb300f4859e07657e3dea348aca11a03661..8b4e67486950344d29035aeacf592861a0e82685 100644 --- a/game/modules/tome/data/talents/chronomancy/anomalies.lua +++ b/game/modules/tome/data/talents/chronomancy/anomalies.lua @@ -101,10 +101,7 @@ end -- Check for effects when hit by an anomaly -- This is called before immunity is checked checkAnomalyTriggers = function(self, target) - if target:hasEffect(target.EFF_ATTENUATE) then - local eff = target:hasEffect(target.EFF_ATTENUATE) - eff.src:callTalent(eff.src.T_ATTENUATE, "doAnomaly", target, eff) - end + end -- Teleportation diff --git a/game/modules/tome/data/talents/chronomancy/flux.lua b/game/modules/tome/data/talents/chronomancy/flux.lua index 793d9c7c71f18c6adefa0f461388492af347e32a..ec974d6fdd5a3f03b7321ffa09ac7a6a52c2dba9 100644 --- a/game/modules/tome/data/talents/chronomancy/flux.lua +++ b/game/modules/tome/data/talents/chronomancy/flux.lua @@ -73,7 +73,7 @@ newTalent{ local absorb = cb.value * 0.3 local paradox = absorb * t.getPercent(self, t) - self:setEffect(self.EFF_REALITY_SMEARING, t.getDuration(self, t), {paradox=paradox/t.getDuration(self, t), no_ct_effect=true}) + self:setEffect(self.EFF_REALITY_SMEARING, t.getDuration(self, t), {paradox=paradox/t.getDuration(self, t)}) game:delayedLogMessage(self, nil, "reality smearing", "#LIGHT_BLUE##Source# converts damage to paradox!") game:delayedLogDamage(src, self, 0, ("#LIGHT_BLUE#(%d converted)#LAST#"):format(absorb), false) cb.value = cb.value - absorb @@ -111,7 +111,7 @@ newTalent{ getDamage = function(self, t) return self:combatTalentSpellDamage(t, 25, 290, getParadoxSpellpower(self, t)) end, getDuration = function(self, t) return getExtensionModifier(self, t, 4) end, target = function(self, t) - return {type="ball", range=self:getTalentRange(t), radius=self:getTalentRadius(t), selffire=self:spellFriendlyFire(), nowarning=true, talent=t} + return {type="ball", range=self:getTalentRange(t), radius=self:getTalentRadius(t), nowarning=true, talent=t} end, requires_target = true, direct_hit = true, @@ -129,7 +129,11 @@ newTalent{ self:project(tg, x, y, function(px, py) local target = game.level.map(px, py, Map.ACTOR) if not target then return end - target:setEffect(target.EFF_ATTENUATE, t.getDuration(self, t), {power=damage/4, src=self, apply_power=getParadoxSpellpower(self, t)}) + if target:isTalentActive(target.T_REALITY_SMEARING) then + target:setEffect(target.EFF_ATTENUATE, t.getDuration(self, t), {power=damage/4, src=self}) + else + target:setEffect(target.EFF_ATTENUATE, t.getDuration(self, t), {power=damage/4, src=self, apply_power=getParadoxSpellpower(self, t)}) + end end) game.level.map:particleEmitter(x, y, tg.radius, "generic_sploom", {rm=200, rM=230, gm=20, gM=30, bm=50, bM=80, am=35, aM=90, radius=tg.radius, basenb=120}) @@ -141,7 +145,8 @@ newTalent{ local damage = t.getDamage(self, t) local duration = t.getDuration(self, t) local radius = self:getTalentRadius(t) - return ([[Deals %0.2f temporal damage over %d turns to all targets in a radius of %d. If the target is hit by an Anomaly the remaining damage will be done instantly. + return ([[Deals %0.2f temporal damage over %d turns to all targets in a radius of %d. Targets with Reality Smearing active will instead be healed for 40%% of the damage dealt. + If a target is reduced below 20%% life while Attenuate is active it may be instantly slain. The damage will scale with your Spellpower.]]):format(damDesc(self, DamageType.TEMPORAL, damage), duration, radius) end, } diff --git a/game/modules/tome/data/timed_effects/magical.lua b/game/modules/tome/data/timed_effects/magical.lua index 29413f35096f931b5c6a651d70cd2c6d9933fe13..e8573f5c2c22496eae4b09f976678d274cf8481b 100644 --- a/game/modules/tome/data/timed_effects/magical.lua +++ b/game/modules/tome/data/timed_effects/magical.lua @@ -3286,8 +3286,23 @@ newEffect{ old_eff.power = (olddam + newdam) / dur return old_eff end, + callbackOnHit = function(self, eff, cb, src) + if cb.value <= 0 then return cb.value end + + -- Kill it!! + if not self.dead and not self:isTalentActive(self.T_REALITY_SMEARING) and self:canBe("instakill") and self.life > 0 and self.life < self.max_life * 0.2 then + game.logSeen(self, "%s has been removed from the timeline!", self.name:capitalize()) + self:die(src) + end + + return cb.value + end, on_timeout = function(self, eff) - DamageType:get(DamageType.TEMPORAL).projector(eff.src, self.x, self.y, DamageType.TEMPORAL, eff.power) + if self:isTalentActive(self.T_REALITY_SMEARING) then + self:heal(eff.power * 0.4, eff) + else + DamageType:get(DamageType.TEMPORAL).projector(eff.src, self.x, self.y, DamageType.TEMPORAL, eff.power) + end end, }