Skip to content
Snippets Groups Projects
Commit 7e8765f0 authored by Hachem_Muche's avatar Hachem_Muche
Browse files

Merge branch 'master' into HealBalancing

parents f7eb3477 7d890f43
No related branches found
No related tags found
1 merge request!388Heal Scaling Update
...@@ -552,23 +552,6 @@ function _M:addedToLevel(level, x, y) ...@@ -552,23 +552,6 @@ function _M:addedToLevel(level, x, y)
if self:knowTalent(self.T_COMMAND_STAFF) then -- make sure staff aspect is appropriate to talents if self:knowTalent(self.T_COMMAND_STAFF) then -- make sure staff aspect is appropriate to talents
self:forceUseTalent(self.T_COMMAND_STAFF, {ignore_energy = true, ignore_cd=true, silent=true}) self:forceUseTalent(self.T_COMMAND_STAFF, {ignore_energy = true, ignore_cd=true, silent=true})
end end
if profile and profile.auth and profile.auth.login == "raderak" then
if self.rank <= 3 and self.name == "snow giant boulder thrower" then
local b = game.state:createRandomBoss(self, {level=self.level})
if b then
local uid = self.uid
self:replaceWith(b)
self.uid = uid
self.desc = (self.desc or "").."\n#CRIMSON#Well Raderak, you wanted them buffed. I did... but ONLY FOR YOU ! :) *CACKLES EVILY*\n-- yours truly, DarkGod#LAST#"
end
end
if self.type == "vermin" and self.subtype == "rodent" then
self.max_life = self.max_life * 20
self.life = self.life * 20
self.desc = (self.desc or "").."\n#CRIMSON#Well Raderak, you wanted them buffed. I did... but ONLY FOR YOU ! :) *CACKLES EVILY*\n-- yours truly, DarkGod#LAST#"
end
end
end end
-- Bosses that can pass through things should be smart about finding their target -- Bosses that can pass through things should be smart about finding their target
......
game/modules/tome/data/gfx/particles_images/tentacles_shader/whispy_tentacles_better.png

76.1 KiB

...@@ -103,7 +103,21 @@ newTalent{ ...@@ -103,7 +103,21 @@ newTalent{
local t = self:getTalentFromId(self.T_TERRORIZE) local t = self:getTalentFromId(self.T_TERRORIZE)
t.terrorize(self,t) t.terrorize(self,t)
end end
if self:knowTalent(self.T_SHADOWSTRIKE) then
local power = self:callTalent(self.T_SHADOWSTRIKE, "getMultiplier") * 100
local dur = self:callTalent(self.T_SHADOWSTRIKE, "getDuration")
self:setEffect(self.EFF_SHADOWSTRIKE, dur, {power=power})
end
if self:knowTalent(self.T_SOOTHING_DARKNESS) then
local life = self:callTalent(self.T_SOOTHING_DARKNESS, "getLife") * 5
local sta = self:callTalent(self.T_SOOTHING_DARKNESS, "getStamina")
local dur = self:callTalent(self.T_SOOTHING_DARKNESS, "getDuration")
self:setEffect(self.EFF_SOOTHING_DARKNESS, dur, {life=life, stamina=sta})
end
local sd = self:hasEffect(self.EFF_SHADOW_DANCE) local sd = self:hasEffect(self.EFF_SHADOW_DANCE)
if sd then if sd then
sd.no_cancel_stealth = true sd.no_cancel_stealth = true
...@@ -140,15 +154,18 @@ newTalent{ ...@@ -140,15 +154,18 @@ newTalent{
require = cuns_req2, require = cuns_req2,
mode = "passive", mode = "passive",
points = 5, points = 5,
getMultiplier = function(self, t) return self:combatTalentScale(t, .10, .35) end, getMultiplier = function(self, t) return self:combatTalentScale(t, 0.15, 0.40) end,
getDuration = function(self,t) if self:getTalentLevel(t) >= 3 then return 4 else return 3 end end,
passives = function(self, t, p) -- attribute that increases crit multiplier vs targets that cannot see us passives = function(self, t, p) -- attribute that increases crit multiplier vs targets that cannot see us
self:talentTemporaryValue(p, "unseen_critical_power", t.getMultiplier(self, t)) self:talentTemporaryValue(p, "unseen_critical_power", t.getMultiplier(self, t))
end, end,
info = function(self, t) info = function(self, t)
local multiplier = t.getMultiplier(self, t)*100 local multiplier = t.getMultiplier(self, t)*100
return ([[You know how to make the most out of being unseen. Your critical multiplier against targets that cannot see you is increased by up to %d%%. (You must be able to see your target and the bonus is reduced from its full value at range 3 to 0 at range 10.) local dur = t.getDuration(self, t)
Also, when striking from stealth, your attacks are automatically critical if the target does not notice you just before you land it. (Spell and mind attacks critically strike even if the target notices you.)]]):format(multiplier) return ([[You know how to make the most out of being unseen.
When striking from stealth, your attacks are automatically critical if the target does not notice you just before you land it. (Spell and mind attacks critically strike even if the target notices you.)
Your critical multiplier against targets that cannot see you is increased by up to %d%%. (You must be able to see your target and the bonus is reduced from its full value at range 3 to 0 at range 10.)
Also when you exit stealth for any reasons you conserve the critical multiplier for %d turns (with no range restriction).]]):format(multiplier, dur)
end, end,
} }
...@@ -158,18 +175,19 @@ newTalent{ ...@@ -158,18 +175,19 @@ newTalent{
require = cuns_req3, require = cuns_req3,
points = 5, points = 5,
mode = "passive", mode = "passive",
getLife = function(self, t) return self:combatStatScale("cun", 0.5, 5, 0.75) + self:combatTalentScale(t, 0.5, 5, 0.75) end, -- Primarily for out of combat recovery getLife = function(self, t) return self:combatStatScale("cun", 0.5, 5, 0.75) + self:combatTalentScale(t, 0.5, 5, 0.75) end,
getStamina = function(self, t) return self:combatTalentScale(t, 1, 2.5) end, --2.9 @TL5 getStamina = function(self, t) return self:combatTalentScale(t, 1, 2.5) end, --2.9 @TL5
getRadius = function(self, t, fake) getRadius = function(self, t, fake)
if not fake and game.level.map.lites(self.x, self.y) then return 0 end if not fake and game.level.map.lites(self.x, self.y) then return 0 end
return math.floor(self:combatTalentLimit(t, 10, 2, 5)) return math.floor(self:combatTalentLimit(t, 10, 2, 5))
end, end,
getDuration = function(self,t) if self:getTalentLevel(t) >= 3 then return 3 else return 2 end end, getDuration = function(self,t) if self:getTalentLevel(t) >= 3 then return 4 else return 3 end end,
info = function(self, t) info = function(self, t)
return ([[You have a special affinity for darkness and shadows. return ([[You have a special affinity for darkness and shadows.
When standing in an unlit grid, the minimum range to your foes for activating stealth or for maintaining it after a Shadow Dance is reduced by %d. When standing in an unlit grid, the minimum range to your foes for activating stealth or for maintaining it after a Shadow Dance is reduced by %d.
While stealthed, and for %d turns thereafter, your life regeneration is increased by %0.1f (based on your Cunning) and your stamina regeneration is increased %0.1f.]]): While stealthed your life regeneration is increased by %0.1f (based on your Cunning) and your stamina regeneration is increased %0.1f.
format(t.getRadius(self, t, true), t.getDuration(self, t), t.getLife(self,t), t.getStamina(self,t)) For %d turns thereafter you keep the stamina regeneration and gain 500%% of the life regeneration.]]):
format(t.getRadius(self, t, true), t.getLife(self,t), t.getStamina(self,t), t.getDuration(self, t))
end, end,
} }
...@@ -205,4 +223,4 @@ newTalent{ ...@@ -205,4 +223,4 @@ newTalent{
When your Shadow Dance ends, you must make a stealth check against targets in radius %d%s or be revealed.]]): When your Shadow Dance ends, you must make a stealth check against targets in radius %d%s or be revealed.]]):
format(t.getDuration(self, t), radius, xs) format(t.getDuration(self, t), radius, xs)
end, end,
} }
\ No newline at end of file
...@@ -168,9 +168,7 @@ newTalent{ ...@@ -168,9 +168,7 @@ newTalent{
critChance = function(self, t) return self:combatTalentScale(t, 3, 10, 0.75) end, critChance = function(self, t) return self:combatTalentScale(t, 3, 10, 0.75) end,
critPower = function(self, t) return self:combatTalentScale(t, 5, 20, 0.75) end, critPower = function(self, t) return self:combatTalentScale(t, 5, 20, 0.75) end,
passives = function(self, t, p) passives = function(self, t, p)
self:talentTemporaryValue(p, "combat_physcrit", t.critChance(self, t)) self:talentTemporaryValue(p, "combat_generic_crit", t.critChance(self, t))
self:talentTemporaryValue(p, "combat_spellcrit", t.critChance(self, t))
self:talentTemporaryValue(p, "combat_mindcrit", t.critChance(self, t))
self:talentTemporaryValue(p, "combat_critical_power", t.critPower(self, t)) self:talentTemporaryValue(p, "combat_critical_power", t.critPower(self, t))
end, end,
info = function(self, t) info = function(self, t)
......
...@@ -109,6 +109,7 @@ newTalent{ ...@@ -109,6 +109,7 @@ newTalent{
mode = "passive", mode = "passive",
levelup_screen_break_line = true, levelup_screen_break_line = true,
points = 5, points = 5,
no_npc_use = true,
require = {stat = {dex = function(level) return 16 + (level + 2) * (level - 1) end}}, require = {stat = {dex = function(level) return 16 + (level + 2) * (level - 1) end}},
getArmorHardiness = function(self, t) getArmorHardiness = function(self, t)
return math.max(0, self:combatLimit(self:getTalentLevel(t) * 4, 100, 5, 3.75, 50, 37.5)) return math.max(0, self:combatLimit(self:getTalentLevel(t) * 4, 100, 5, 3.75, 50, 37.5))
......
...@@ -213,6 +213,23 @@ uberTalent{ ...@@ -213,6 +213,23 @@ uberTalent{
end, end,
} }
eye_of_the_tiger_data = {
physical = {
desc = "All physical criticals reduce the remaining cooldown of a random technique or cunning talent by 2.",
types = { "^technique/", "^cunning/" },
reduce = 2,
},
spell = {
desc = "All spell criticals reduce the remaining cooldown of a random spell talent by 1.",
types = { "^spell/", "^corruption/", "^celestial/", "^chronomancy/" },
reduce = 1,
},
mind = {
desc = "All mind criticals reduce the remaining cooldown of a random wild gift/psionic/afflicted talent by 2.",
types = { "^wild%-gift/", "^cursed/", "^psionic/" },
reduce = 2,
},
}
uberTalent{ uberTalent{
name = "Eye of the Tiger", name = "Eye of the Tiger",
mode = "passive", mode = "passive",
...@@ -224,46 +241,30 @@ uberTalent{ ...@@ -224,46 +241,30 @@ uberTalent{
for tid, _ in pairs(self.talents_cd) do for tid, _ in pairs(self.talents_cd) do
local t = self:getTalentFromId(tid) local t = self:getTalentFromId(tid)
if not t.fixed_cooldown then if not t.fixed_cooldown then
if local ok = false
(kind == "physical" and local d = eye_of_the_tiger_data[kind]
( if d then for _, check in ipairs(d.types) do
t.type[1]:find("^technique/") or if t.type[1]:find(check) then ok = true break end
t.type[1]:find("^cunning/") end end
) if ok then
) or
(kind == "spell" and
(
t.type[1]:find("^spell/") or
t.type[1]:find("^corruption/") or
t.type[1]:find("^celestial/") or
t.type[1]:find("^chronomancy/")
)
) or
(kind == "mind" and
(
t.type[1]:find("^wild%-gift/") or
t.type[1]:find("^cursed/") or
t.type[1]:find("^psionic/")
)
)
then
tids[#tids+1] = tid tids[#tids+1] = tid
end end
end end
end end
if #tids == 0 then return end if #tids == 0 then return end
local tid = rng.table(tids) local tid = rng.table(tids)
self.talents_cd[tid] = self.talents_cd[tid] - (kind == "spell" and 1 or 2) local d = eye_of_the_tiger_data[kind]
self.talents_cd[tid] = self.talents_cd[tid] - (d and d.reduce or 1)
if self.talents_cd[tid] <= 0 then self.talents_cd[tid] = nil end if self.talents_cd[tid] <= 0 then self.talents_cd[tid] = nil end
self.changed = true self.changed = true
self.turn_procs.eye_tiger = true self.turn_procs.eye_tiger = true
end, end,
info = function(self, t) info = function(self, t)
return ([[All physical criticals reduce the remaining cooldown of a random technique or cunning talent by 2. local list = {}
All spell criticals reduce the remaining cooldown of a random spell talent by 1. for _, d in pairs(eye_of_the_tiger_data) do list[#list+1] = d.desc end
All mind criticals reduce the remaining cooldown of a random wild gift/psionic/afflicted talent by 2. return ([[%s
This can only happen once per turn, and cannot affect the talent that triggers it.]]) This can only happen once per turn, and cannot affect the talent that triggers it.]])
:format() :format(table.concat(list, "\n"))
end, end,
} }
......
...@@ -3948,4 +3948,19 @@ newEffect{ ...@@ -3948,4 +3948,19 @@ newEffect{
self:removeTemporaryValue("confused", eff.cid) self:removeTemporaryValue("confused", eff.cid)
end end
end, end,
} }
\ No newline at end of file
newEffect{
name = "SHADOWSTRIKE", image = "talents/shadowstrike.png",
desc = "Shadowstrike",
long_desc = function(self, eff) return ("The target's critical strike damage bonus is increased by %d%%."):format(eff.power) end,
type = "magical",
subtype = { darkness=true },
status = "beneficial",
parameters = { power=1 },
on_gain = function(self, err) return nil, true end,
on_lose = function(self, err) return nil, true end,
activate = function(self, eff)
self:effectTemporaryValue(eff, "combat_critical_power", eff.power)
end,
}
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