Skip to content
Snippets Groups Projects
Commit d540dc03 authored by DarkGod's avatar DarkGod
Browse files

Merge branch 'NecroBuffs' into 'master'

Necro buffs

Few QoL changes and buffs to Necromancer. Empathy now helps minions not kill each other. Level 3 and up of Aura Mastery has a 25% chance to return souls from minions on death if they're inside the aura. Animus Hoarder is passive to reduce mana and soul strains early. Chill of the Tomb has a 100% chance to create a wisp if it kills a friendly necrotic minion while Will o' the Wisp is sustained for synergy. Lowered overall mana costs and cooldowns on non-locked trees slightly to prevent as many dead turns. Possibly more tweaks later, but this is it for now.

See merge request !393
parents c7509a2f 11c9277c
No related branches found
No related tags found
1 merge request!393Necro buffs
Pipeline #
......@@ -442,10 +442,16 @@ setDefaultProjector(function(src, x, y, type, dam, state)
end
end
--Dark Empathy (Reduce damage against summoner)
if src.necrotic_minion_be_nice and src.summoner == target then
dam = dam * (1 - src.necrotic_minion_be_nice)
end
--Dark Empathy (Reduce damage against other minions)
if src.necrotic_minion_be_nice and target.summoner and src.summoner == target.summoner then
dam = dam * (1 - src.necrotic_minion_be_nice)
end
-- Curse of Misfortune: Unfortunate End (chance to increase damage enough to kill)
if src and src.hasEffect and src:hasEffect(src.EFF_CURSE_OF_MISFORTUNE) then
local eff = src:hasEffect(src.EFF_CURSE_OF_MISFORTUNE)
......
......@@ -54,21 +54,13 @@ newTalent{
name = "Animus Hoarder",
type = {"spell/animus",2},
require = spells_req2,
mode = "sustained",
mode = "passive",
points = 5,
sustain_mana = 50,
cooldown = 30,
tactical = { BUFF = 3 },
getMax = function(self, t) return math.floor(self:combatTalentScale(t, 2, 8)) end,
getChance = function(self, t) return math.floor(self:combatTalentScale(t, 10, 80)) end,
activate = function(self, t)
local ret = {}
self:talentTemporaryValue(ret, "max_soul", t.getMax(self, t))
self:talentTemporaryValue(ret, "extra_soul_chance", t.getChance(self, t))
return ret
end,
deactivate = function(self, t, p)
return true
passives = function(self, t, p)
self:talentTemporaryValue(p, "extra_soul_chance", t.getChance(self, t))
self:talentTemporaryValue(p, "max_soul", t.getMax(self, t))
end,
info = function(self, t)
local max, chance = t.getMax(self, t), t.getChance(self, t)
......@@ -83,8 +75,8 @@ newTalent{
type = {"spell/animus",3},
require = spells_req3,
points = 5,
mana = 50,
soul = 4,
mana = 45,
soul = 2,
cooldown = 15,
range = 6,
proj_speed = 20,
......
......@@ -52,9 +52,23 @@ newTalent{
local damage = t.getDamage(self, t)
local radius = self:getTalentRadius(t)
return ([[Conjures up a bolt of cold that moves toward the target and explodes into a chilly circle of death, doing %0.2f cold damage in a radius of %d.
The damage will increase with your Spellpower.]]):
The damage will increase with your Spellpower.
Additionally, when Will o' the Wisp is sustained, minions killed by this spell will spawn Wisps.]]):
format(damDesc(self, DamageType.COLD, damage), radius)
end,
callbackOnKill = function(self, t, target, death_note)
if not death_note then return end
if not death_note.source_talent then return end
if not death_note.source_talent == self:getTalentFromId(self.T_CHILL_OF_THE_TOMB) then return end
local talent = self:isTalentActive(self.T_WILL_O__THE_WISP)
if talent then
if target.summoner and (target.summoner == self) and target.necrotic_minion then
local wisp = self:getTalentFromId(self.T_WILL_O__THE_WISP)
-- Handle any % chances or whatever you want involved here
wisp.summon(self, wisp, self:isTalentActive(self.T_WILL_O__THE_WISP).dam, target, self, true)
end
end
end,
}
newTalent{
......@@ -67,8 +81,9 @@ newTalent{
cooldown = 30,
tactical = { BUFF = 3 },
getParams = function(self, t) return util.bound(30 + self:getTalentLevel(t) * 10, 30, 100), 20 + self:combatTalentSpellDamage(t, 25, 300) end,
summon = function(self, t, dam, src, killer)
if not killer or not killer.faction or self:reactionToward(killer) >= 0 or self.dead then return end
summon = function(self, t, dam, src, killer, grave)
if not killer or not killer.faction or (self:reactionToward(killer) >= 0 and not grave) or self.dead then return end
game.logPlayer(game.player, "Step 2")
local minion = require("mod.class.NPC").new{
name = "will o' the wisp",
type = "undead", subtype = "ghost",
......@@ -103,10 +118,11 @@ newTalent{
local x, y = util.findFreeGrid(src.x or self.x, src.y or self.y, 5, true, {[Map.ACTOR]=true})
if minion and x and y then
necroSetupSummon(self, minion, x, y, lev, true)
minion.on_die = nil
--minion.on_die = nil
minion.on_act = nil
minion:setTarget(killer)
if not grave then minion:setTarget(killer) end
end
return true
end,
activate = function(self, t)
local chance, dam = t.getParams(self, t)
......
......@@ -57,8 +57,8 @@ newTalent{
type = {"spell/necrosis",2},
require = spells_req2,
points = 5,
mana = 70,
cooldown = 30,
mana = 60,
cooldown = 25,
tactical = { ATTACK = { ARCANE = 3 }, DISABLE = 2 },
range = 7,
requires_target = true,
......@@ -90,8 +90,8 @@ newTalent{
require = spells_req3,
points = 5,
random_ego = "attack",
mana = 35,
cooldown = 20,
mana = 30,
cooldown = 18,
tactical = { HEAL = 2 },
is_heal = true,
getHeal = function(self, t) return self:combatLimit(self:combatTalentSpellDamage(t, 10, 70), 100, 20, 0, 66.7, 46.7) end, --Limit to <100%
......
......@@ -823,7 +823,8 @@ newTalent{
self:forceUseTalent(self.T_NECROTIC_AURA, {ignore_energy=true, ignore_cd=true, no_equilibrium_fail=true, no_paradox_fail=true})
end,
info = function(self, t)
return ([[Your dark power radiates further as you grow stronger. Increases the radius of your necrotic aura by %d, and reduces the decay rate of your minions outside the aura by %d%%.]]):
return ([[Your dark power radiates further as you grow stronger. Increases the radius of your necrotic aura by %d, and reduces the decay rate of your minions outside the aura by %d%%.
At level 3, necrotic minions inside your aura have a 25%% chance to refund their soul on death. If a minion turns into a will o' the wisp then the wisp will have that chance instead.]]):
format(math.floor(t.getbonusRadius(self, t)), math.min(7, self:getTalentLevelRaw(t)))
end,
}
......@@ -873,7 +874,7 @@ newTalent{
getPerc = function(self, t) return self:combatTalentSpellDamage(t, 15, 80) end,
info = function(self, t)
return ([[You share your powers with your minions, granting them %d%% of your resistances and saves.
In addition all damage done by your minions to you is reduced by %d%%.
In addition all damage done by your minions to you or your other minions is reduced by %d%%.
The effect will increase with your Spellpower.]]):
format(t.getPerc(self, t), self:getTalentLevelRaw(t) * 20)
end,
......
......@@ -29,8 +29,8 @@ newTalent{
require = spells_req1,
points = 5,
random_ego = "attack",
mana = 12,
cooldown = 4,
mana = 10,
cooldown = 3,
tactical = { ATTACK = { DARKNESS = 2 } },
range = 10,
reflectable = true,
......@@ -81,8 +81,8 @@ newTalent{
type = {"spell/nightfall",2},
require = spells_req2,
points = 5,
mana = 45,
cooldown = 18,
mana = 40,
cooldown = 16,
tactical = { ATTACKAREA = { DARKNESS = 2 }, DISABLE = { confusion = 1.5, blind = 1.5 } },
range = 6,
radius = 3,
......@@ -129,8 +129,8 @@ newTalent{
require = spells_req3,
points = 5,
random_ego = "attack",
mana = 40,
cooldown = 12,
mana = 30,
cooldown = 10,
direct_hit = true,
tactical = { ATTACKAREA = { DARKNESS = 2 }, DISABLE = { knockback = 2 }, ESCAPE = { knockback = 1 } },
range = 0,
......
......@@ -222,11 +222,17 @@ function necroSetupSummon(self, m, x, y, level, no_control, no_decay)
local src = self.summoner
local w = src:isTalentActive(src.T_WILL_O__THE_WISP)
local p = src:isTalentActive(src.T_NECROTIC_AURA)
if not w or not p or not self.x or not self.y or not src.x or not src.y or core.fov.distance(self.x, self.y, src.x, src.y) > self.summoner.necrotic_aura_radius then return end
if not rng.percent(w.chance) then return end
local t = src:getTalentFromId(src.T_WILL_O__THE_WISP)
t.summon(src, t, w.dam, self, killer)
if not p or not self.x or not self.y or not src.x or not src.y or core.fov.distance(self.x, self.y, src.x, src.y) > self.summoner.necrotic_aura_radius then return end
if w and rng.percent(w.chance) then
local t = src:getTalentFromId(src.T_WILL_O__THE_WISP)
ret = t.summon(src, t, w.dam, self, killer, false)
if ret then return end
end
if src:getTalentLevel(src.T_AURA_MASTERY) >= 3 and rng.percent(25) then
src:incSoul(1)
src.changed = true
game.logPlayer(src, "A soul returns to %s.", src.name)
end
end
-- Summons never flee
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment