Skip to content
Snippets Groups Projects
Commit 1b44ddbf authored by Lisa Greene's avatar Lisa Greene
Browse files

Tune celestial talent scaling

parent e76983a6
No related branches found
No related tags found
1 merge request!663Misc talent scaling changes
Showing
with 35 additions and 28 deletions
...@@ -35,7 +35,7 @@ newTalent{ ...@@ -35,7 +35,7 @@ newTalent{
tactical = { DEFEND = 2 }, tactical = { DEFEND = 2 },
range = 0, range = 0,
getResists = function(self, t) return self:combatTalentSpellDamage(t, 5, 60) end, getResists = function(self, t) return self:combatTalentSpellDamage(t, 5, 60) end,
getLifePct = function(self, t) return self:combatTalentLimit(t, 1, 0.10, 0.20) end, getLifePct = function(self, t) return self:combatTalentLimit(t, 1, 0.125, 0.25) end,
sustain_slots = 'celestial_chant', sustain_slots = 'celestial_chant',
activate = function(self, t) activate = function(self, t)
local power = t.getResists(self, t) local power = t.getResists(self, t)
...@@ -158,7 +158,7 @@ newTalent{ ...@@ -158,7 +158,7 @@ newTalent{
range = 0, range = 0,
getResists = function(self, t) return self:combatTalentSpellDamage(t, 10, 30) end, getResists = function(self, t) return self:combatTalentSpellDamage(t, 10, 30) end,
getDamageChange = function(self, t) getDamageChange = function(self, t)
return -self:combatTalentLimit(t, 50, 14, 30) -- Limit < 50% damage reduction return -self:combatTalentLimit(t, 50, 15, 33) -- Limit < 50% damage reduction
end, end,
getSpellResists = function(self, t) return self:combatTalentSpellDamage(t, 5, 60) end, getSpellResists = function(self, t) return self:combatTalentSpellDamage(t, 5, 60) end,
sustain_slots = 'celestial_chant', sustain_slots = 'celestial_chant',
......
...@@ -181,7 +181,7 @@ newTalent{ ...@@ -181,7 +181,7 @@ newTalent{
negative = 15, negative = 15,
getDamage = function(self, t) return self:combatTalentSpellDamage(t, 10, 75) end, getDamage = function(self, t) return self:combatTalentSpellDamage(t, 10, 75) end,
getSlow = function(self, t) return 50 end, getSlow = function(self, t) return 50 end,
getDuration = function(self, t) return self:combatTalentLimit(t, 15, 1, 10) end, getDuration = function(self, t) return self:combatTalentLimit(t, 15, 3.5, 10) end,
getSlowDur = function(self, t) return self:combatTalentLimit(t, 7, 2, 5) end, getSlowDur = function(self, t) return self:combatTalentLimit(t, 7, 2, 5) end,
on_pre_use = function(self, t, silent) on_pre_use = function(self, t, silent)
if not game.level then return end if not game.level then return end
......
...@@ -130,8 +130,8 @@ newTalent{ ...@@ -130,8 +130,8 @@ newTalent{
rnd_boss_restrict = function(self, t, data) return true end, -- martyrdom is fine on fixedbosses specifically given the talents but let's avoid it on randbosses rnd_boss_restrict = function(self, t, data) return true end, -- martyrdom is fine on fixedbosses specifically given the talents but let's avoid it on randbosses
tactical = { BUFF = 2 }, tactical = { BUFF = 2 },
range = 10, range = 10,
getMartyrDamage = function(self, t) return self:combatTalentLimit(t, 50, 5, 25) end, --Limit < 50% getMartyrDamage = function(self, t) return self:combatTalentLimit(t, 50, 10, 25) end, --Limit < 50%
getLifeDamage = function(self, t) return self:combatTalentLimit(t, 1.0, 0.1, 0.8) end, -- Limit < 100% getLifeDamage = function(self, t) return self:combatTalentScale(t, 0.55, 0.95) end, -- Limit < 100%
getMaxDamage = function(self, t) return self:combatTalentSpellDamage(t, 10, 400) end, getMaxDamage = function(self, t) return self:combatTalentSpellDamage(t, 10, 400) end,
getDamage = function(self, t) getDamage = function(self, t)
local damage = (self:attr("weapon_of_wrath_life") or t.getLifeDamage(self, t)) * (self.max_life - math.max(0, self.life)) -- avoid problems with die_at local damage = (self:attr("weapon_of_wrath_life") or t.getLifeDamage(self, t)) * (self.max_life - math.max(0, self.life)) -- avoid problems with die_at
...@@ -183,7 +183,7 @@ newTalent{ ...@@ -183,7 +183,7 @@ newTalent{
sustain_positive = 20, sustain_positive = 20,
cooldown = 30, cooldown = 30,
tactical = { DEFEND = 2 }, tactical = { DEFEND = 2 },
getLife = function(self, t) return self.max_life * self:combatTalentLimit(t, 1.5, 0.09, 0.4) end, -- Limit < 150% max life (to survive a large string of hits between turns) getLife = function(self, t) return self.max_life * self:combatTalentLimit(t, 1.5, 0.2, 0.5) end, -- Limit < 150% max life (to survive a large string of hits between turns)
activate = function(self, t) activate = function(self, t)
game:playSoundNear(self, "talents/heal") game:playSoundNear(self, "talents/heal")
local ret = {} local ret = {}
......
...@@ -74,7 +74,7 @@ newTalent{ ...@@ -74,7 +74,7 @@ newTalent{
tactical = { DISABLE=2, HEAL=2 }, tactical = { DISABLE=2, HEAL=2 },
range = 5, range = 5,
requires_target = true, requires_target = true,
getPower = function(self, t) return self:combatTalentLimit(t, 100, 15, 50) end, --Limit < 100% getPower = function(self, t) return self:combatTalentLimit(t, 100, 20, 50) end, --Limit < 100%
on_pre_use = function(self, t, silent) if not self:hasTwoHandedWeapon() then if not silent then game.logPlayer(self, "You require a two handed weapon to use this talent.") end return false end return true end, on_pre_use = function(self, t, silent) if not self:hasTwoHandedWeapon() then if not silent then game.logPlayer(self, "You require a two handed weapon to use this talent.") end return false end return true end,
action = function(self, t) action = function(self, t)
local tg = {type="hit", range=self:getTalentRange(t)} local tg = {type="hit", range=self:getTalentRange(t)}
......
...@@ -384,7 +384,7 @@ newTalent{ ...@@ -384,7 +384,7 @@ newTalent{
points = 5, points = 5,
mode = "passive", mode = "passive",
getMaxStacks = function(self, t) return self:combatTalentLimit(t, 6, 2, 5) end, getMaxStacks = function(self, t) return self:combatTalentLimit(t, 6, 2, 5) end,
getTurns = function(self, t) return self:combatTalentLimit(t, 10, 1, 7) end, getTurns = function(self, t) return self:combatTalentLimit(t, 10, 4, 7) end,
info = function(self, t) info = function(self, t)
return ([[Up to 3 times per turn when one of your glyphs triggers you feel a surge of celestial power, increasing your darkness and light resistance and affinity by 5%% for %d turns, stacking up to %d times.]]):tformat(t.getTurns(self, t), t.getMaxStacks(self, t)) return ([[Up to 3 times per turn when one of your glyphs triggers you feel a surge of celestial power, increasing your darkness and light resistance and affinity by 5%% for %d turns, stacking up to %d times.]]):tformat(t.getTurns(self, t), t.getMaxStacks(self, t))
end, end,
......
...@@ -229,7 +229,7 @@ newTalent{ ...@@ -229,7 +229,7 @@ newTalent{
base_tactical = {defend=1}, -- could check base immunities here base_tactical = {defend=1}, -- could check base immunities here
adept_deac_tactical = {defend = -0.5}, -- adept tactic adjustments when deactivating (negated) adept_deac_tactical = {defend = -0.5}, -- adept tactic adjustments when deactivating (negated)
range = 10, range = 10,
getImmunities = function(self, t) return self:combatTalentLimit(t, 1, 0.16, 0.4) end, -- Limit < 100% getImmunities = function(self, t) return self:combatTalentLimit(t, 1, 0.2, 0.45) end, -- Limit < 100%
callbackOnActBase = function(self, t) callbackOnActBase = function(self, t)
if self:isTalentActive(self.T_HYMN_NOCTURNALIST) then if self:isTalentActive(self.T_HYMN_NOCTURNALIST) then
local t2 = self:getTalentFromId(self.T_HYMN_NOCTURNALIST) local t2 = self:getTalentFromId(self.T_HYMN_NOCTURNALIST)
...@@ -300,7 +300,7 @@ newTalent{ ...@@ -300,7 +300,7 @@ newTalent{
range = 5, range = 5,
getDamage = function(self, t) return self:combatTalentSpellDamage(t, 7, 80) end, getDamage = function(self, t) return self:combatTalentSpellDamage(t, 7, 80) end,
getTargetCount = function(self, t) return math.floor(self:combatTalentScale(t, 1, 5)) end, getTargetCount = function(self, t) return math.floor(self:combatTalentScale(t, 1, 5)) end,
getNegativeDrain = function(self, t) return self:combatTalentLimit(t, 0, 8, 3) end, -- Limit > 0, no regen at high levels getNegativeDrain = function(self, t) return self:combatTalentLimit(t, 0, 7, 3) end, -- Limit > 0, no regen at high levels
target = function(self, t) -- for AI only target = function(self, t) -- for AI only
return {type="ball", friendlyfire=false, friendlyblock=false, radius=self:getTalentRange(t), range=0, talent=t} return {type="ball", friendlyfire=false, friendlyblock=false, radius=self:getTalentRange(t), range=0, talent=t}
end, end,
......
...@@ -28,9 +28,9 @@ newTalent{ ...@@ -28,9 +28,9 @@ newTalent{
require = divi_req_high1, require = divi_req_high1,
points = 5, points = 5,
radius = function(self, t) return self:combatTalentLimit(t, 14, 4, 10) end, radius = function(self, t) return self:combatTalentLimit(t, 14, 4, 10) end,
getResist = function(self, t) return self:combatTalentLimit(t, 100, 25, 75) end, getResist = function(self, t) return self:combatTalentLimit(t, 100, 25, 67) end,
getLightResist = function(self, t) return self:combatTalentScale(t, 15, 35) end, getLightResist = function(self, t) return self:combatTalentScale(t, 15, 35) end,
getAffinity = function(self, t) return self:combatTalentLimit(t, 50, 15, 30) end, getAffinity = function(self, t) return self:combatTalentLimit(t, 50, 15, 33) end,
passives = function(self, t, p) passives = function(self, t, p)
self:talentTemporaryValue(p, "radiance_aura", radianceRadius(self)) self:talentTemporaryValue(p, "radiance_aura", radianceRadius(self))
self:talentTemporaryValue(p, "blind_immune", t.getResist(self, t) / 100) self:talentTemporaryValue(p, "blind_immune", t.getResist(self, t) / 100)
...@@ -113,7 +113,7 @@ newTalent{ ...@@ -113,7 +113,7 @@ newTalent{
tactical = { ATTACKAREA = {LIGHT=1} }, tactical = { ATTACKAREA = {LIGHT=1} },
sustain_positive = 10, sustain_positive = 10,
getDamage = function(self, t) return self:combatTalentSpellDamage(t, 3, 35) end, getDamage = function(self, t) return self:combatTalentSpellDamage(t, 3, 35) end,
getDaze = function(self, t) return self:combatTalentLimit(t, 35, 5, 25) end, getDaze = function(self, t) return self:combatTalentLimit(t, 35, 8, 25) end,
updateParticle = function(self, t) updateParticle = function(self, t)
local p = self:isTalentActive(self.T_SEARING_SIGHT) local p = self:isTalentActive(self.T_SEARING_SIGHT)
if not p then return end if not p then return end
......
...@@ -136,7 +136,7 @@ newTalent{ ...@@ -136,7 +136,7 @@ newTalent{
mode = "passive", mode = "passive",
points = 5, points = 5,
getCrit = function(self, t) return self:combatTalentScale(t, 2, 10, 0.75) end, getCrit = function(self, t) return self:combatTalentScale(t, 2, 10, 0.75) end,
getProcChance = function(self, t) return self:combatTalentLimit(t, 100, 30, 75) end, getProcChance = function(self, t) return self:combatTalentLimit(t, 100, 40, 75) end,
passives = function(self, t, p) passives = function(self, t, p)
self:talentTemporaryValue(p, "combat_spellcrit", t.getCrit(self, t)) self:talentTemporaryValue(p, "combat_spellcrit", t.getCrit(self, t))
self:talentTemporaryValue(p, "combat_physcrit", t.getCrit(self, t)) self:talentTemporaryValue(p, "combat_physcrit", t.getCrit(self, t))
...@@ -186,9 +186,9 @@ newTalent{ ...@@ -186,9 +186,9 @@ newTalent{
return self.ai_target.actor and self:hasLOS(self.ai_target.actor.x, self.ai_target.actor.y) return self.ai_target.actor and self:hasLOS(self.ai_target.actor.x, self.ai_target.actor.y)
end, end,
range = 10, range = 10,
getCap = function(self, t) return self:combatTalentLimit(t, 30, 90, 70) end, getCap = function(self, t) return self:combatTalentLimit(t, 30, 85, 55) end,
getHaste = function(self, t) return math.min(0.5, self:combatTalentSpellDamage(t, 0.1, 0.4)) end, getHaste = function(self, t) return math.min(0.5, self:combatTalentSpellDamage(t, 0.1, 0.4)) end,
getCD = function(self, t) return self:combatLimit(self:combatTalentSpellDamage(t, 5, 450), 0.5, .03, 32, .35, 350) end, -- Limit < 50% cooldown reduction getCD = function(self, t) return self:combatLimit(self:combatTalentSpellDamage(t, 5, 450), 0.5, .065, 32, .38, 350) end, -- Limit < 50% cooldown reduction
action = function(self, t) action = function(self, t)
self:setEffect(self.EFF_SUNCLOAK, 6, {cap=t.getCap(self, t), haste=t.getHaste(self, t), cd=t.getCD(self, t)}) self:setEffect(self.EFF_SUNCLOAK, 6, {cap=t.getCap(self, t), haste=t.getHaste(self, t), cd=t.getCD(self, t)})
game:playSoundNear(self, "talents/flame") game:playSoundNear(self, "talents/flame")
......
...@@ -202,7 +202,7 @@ newTalent{ ...@@ -202,7 +202,7 @@ newTalent{
end, end,
getDamage = function(self, t) return self:combatTalentSpellDamage(t, 10, 250) end, getDamage = function(self, t) return self:combatTalentSpellDamage(t, 10, 250) end,
getDuration = function(self, t) return 4 end, getDuration = function(self, t) return 4 end,
getPower = function(self, t) return self:combatTalentLimit(t, 1, 0.2, 0.7) end, getPower = function(self, t) return self:combatTalentLimit(t, 1, 0.4, 0.7) end,
getTargetCount = function(self, t) return math.floor(self:combatTalentScale(t, 1, 5)) end, getTargetCount = function(self, t) return math.floor(self:combatTalentScale(t, 1, 5)) end,
action = function(self, t) action = function(self, t)
local damInc = (self:combatGetDamageIncrease(DamageType.DARKNESS, true)) * t.getPower(self, t) local damInc = (self:combatGetDamageIncrease(DamageType.DARKNESS, true)) * t.getPower(self, t)
......
...@@ -168,7 +168,7 @@ newTalent{ ...@@ -168,7 +168,7 @@ newTalent{
return {type="ball", range=self:getTalentRange(t), radius=self:getTalentRadius(t), talent=t, selffire=false} return {type="ball", range=self:getTalentRange(t), radius=self:getTalentRadius(t), talent=t, selffire=false}
end, end,
getConfuseDuration = function(self, t) return math.min(10, math.floor(self:combatScale(self:getTalentLevel(t) + self:getCun(5), 2, 0, 12, 10))) end, getConfuseDuration = function(self, t) return math.min(10, math.floor(self:combatScale(self:getTalentLevel(t) + self:getCun(5), 2, 0, 12, 10))) end,
getConfuseEfficency = function(self, t) return self:combatTalentLimit(t, 60, 15, 45) end, -- Limit < 60% (slightly better than most confusion effects) getConfuseEfficency = function(self, t) return math.min(50, self:combatTalentScale(t, 20, 45)) end,
getDamage = function(self, t) return self:combatTalentSpellDamage(t, 1, 100) end, -- Mostly for the crit synergy getDamage = function(self, t) return self:combatTalentSpellDamage(t, 1, 100) end, -- Mostly for the crit synergy
action = function(self, t) action = function(self, t)
local tg = self:getTalentTarget(t) local tg = self:getTalentTarget(t)
......
...@@ -55,7 +55,7 @@ newTalent{ ...@@ -55,7 +55,7 @@ newTalent{
mode = "passive", mode = "passive",
points = 5, points = 5,
random_boss_rarity = 50, -- make sure a reasonable number of randbosses don't take this random_boss_rarity = 50, -- make sure a reasonable number of randbosses don't take this
cdReduc = function(self, t) return self:combatTalentLimit(t, 100, 10, 40) end, cdReduc = function(self, t) return self:combatTalentLimit(t, 100, 15, 40, false, 1.0) end,
passives = function(self, t, p) -- slight nerf to compensate for trap disarming ability? passives = function(self, t, p) -- slight nerf to compensate for trap disarming ability?
self:talentTemporaryValue(p, "use_object_cooldown_reduce", t.cdReduc(self, t)) self:talentTemporaryValue(p, "use_object_cooldown_reduce", t.cdReduc(self, t))
end, end,
...@@ -81,7 +81,7 @@ newTalent{ ...@@ -81,7 +81,7 @@ newTalent{
points = 5, points = 5,
random_ego = "utility", random_ego = "utility",
cooldown = 20, cooldown = 20,
radius = function(self, t) return math.floor(self:combatScale(self:getCun(10, true) * self:getTalentLevel(t), 5, 0, 55, 50)) end, radius = function(self, t) return math.floor(self:combatScale(self:getCun(10, true) * self:getTalentLevel(t), 5, 5, 35, 55)) end,
getDuration = function(self, t) return math.floor(self:combatTalentScale(t, 4, 8)) end, getDuration = function(self, t) return math.floor(self:combatTalentScale(t, 4, 8)) end,
no_npc_use = true, no_npc_use = true,
no_break_stealth = true, no_break_stealth = true,
...@@ -108,8 +108,8 @@ newTalent{ ...@@ -108,8 +108,8 @@ newTalent{
random_boss_rarity = 50, -- make sure a reasonable number of randbosses don't take this random_boss_rarity = 50, -- make sure a reasonable number of randbosses don't take this
mode = "passive", mode = "passive",
trapDetect = function(self, t) return math.max(0, self:combatScale(self:getTalentLevel(t) * self:getCun(25, true), 5, 3.75, 35, 125, 0.25)) end, -- bonus trap detection power trapDetect = function(self, t) return math.max(0, self:combatScale(self:getTalentLevel(t) * self:getCun(25, true), 5, 3.75, 35, 125, 0.25)) end, -- bonus trap detection power
critResist = function(self, t) return self:combatTalentScale(t, 1.3, 5) end, critResist = function(self, t) return self:combatTalentScale(t, 3.5, 12) end,
getUnseenReduction = function(self, t) return self:combatTalentLimit(t, 1, .1, .25) end, -- Limit < 100% getUnseenReduction = function(self, t) return self:combatTalentLimit(t, 1, .15, .33, false, 1.0) end, -- Limit < 100%
savePenalty = function(self, t) return self:combatLimit(self:getTalentLevel(t) * self:getCun(25, true), 5, 20, 0, 10, 125) end, --Limit: best is save @ -5 savePenalty = function(self, t) return self:combatLimit(self:getTalentLevel(t) * self:getCun(25, true), 5, 20, 0, 10, 125) end, --Limit: best is save @ -5
callbackOnStatChange = function(self, t, stat, v) callbackOnStatChange = function(self, t, stat, v)
if stat == self.STAT_CUN then -- force recalculation of bonuses if stat == self.STAT_CUN then -- force recalculation of bonuses
...@@ -131,7 +131,7 @@ newTalent{ ...@@ -131,7 +131,7 @@ newTalent{
info = function(self, t) info = function(self, t)
return ([[You have an enhanced sense of self preservation, and your keen intuition allows you to sense dangers others miss. return ([[You have an enhanced sense of self preservation, and your keen intuition allows you to sense dangers others miss.
Your ability to detect traps is enhanced (+%d detect 'power'). Your ability to detect traps is enhanced (+%d detect 'power').
Attacks against you have a %0.1f%% reduced chance to be critical hits, and damage bonuses attackers gain against you for being unseen are reduced by %d%%. Critical attacks against you have %0.1f%% reduced bonus damage, and damage bonuses attackers gain against you for being unseen are reduced by %d%%.
You also gain an additional chance (at your normal save %+d, effective) to resist detrimental status effects that can be resisted. You also gain an additional chance (at your normal save %+d, effective) to resist detrimental status effects that can be resisted.
The detection and additional save chance improve with Cunning.]]): The detection and additional save chance improve with Cunning.]]):
tformat(t.trapDetect(self, t), t.critResist(self, t), t.getUnseenReduction(self, t)*100, -t.savePenalty(self, t)) tformat(t.trapDetect(self, t), t.critResist(self, t), t.getUnseenReduction(self, t)*100, -t.savePenalty(self, t))
......
...@@ -467,18 +467,25 @@ uberTalent{ ...@@ -467,18 +467,25 @@ uberTalent{
-- Re-used icon -- Re-used icon
uberTalent{ uberTalent{
name = "Adept", name = "Adept", image = "talents/meditation.png",
mode = "passive", mode = "passive",
cant_steal = true, cant_steal = true,
info = function(self, t) info = function(self, t)
return ([[You are adept at many different skills, granting you +1.5 to all known talent levels. return ([[Your talent masteries are increased by 0.3. Note that many talents will not benefit from this increase.]])
This works on already known talents and those that you will learn afterwards.]]):tformat() :format()
end, end,
passives = function(self, t, p) passives = function(self, t, tmptable)
self:talentTemporaryValue(p, "all_talents_bonus_level", 1.5) self:talentTemporaryValue(tmptable, "talents_mastery_bonus", {all = 0.3})
if not self._updating_adept then
self._updating_adept = true
self:updateAllTalentsPassives()
self._updating_adept = nil
end
end, end,
} }
uberTalent{ uberTalent{
name = "Tricks of the Trade", name = "Tricks of the Trade",
mode = "passive", mode = "passive",
......
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