Skip to content
Snippets Groups Projects
Commit c3598eb1 authored by Samuel Wegner's avatar Samuel Wegner
Browse files

Add proc chance to Warden's Call

Previously, Warden's Call would always create a clone after a
successful attack. This was somewhat overpowered, but more importantly
it exacerbated the memory leak issue with temporal clones.

Now, Warden's Call activation is chance-based, capping at 53% chance at
5/5 talent level with 1.3 mastery. To compensate for the reduced
activation rate, the damage penalty on the clones has been reduced.

This should (hopefully) reduce the skill's performance degradation by
roughly half. When the memory leak is fixed, we can re-evaluate whether
the activation chance is still needed or if it should be increased.
However, I think this is probably better for game balance anyway. The
skill in its original form was stronger than other talents such as
Greater Weapon Focus, which is already considered strong by the
community.

This could be pushed back to v1.3.2 with the other cloning changes.
parent 0a21c4de
No related branches found
No related tags found
No related merge requests found
......@@ -253,7 +253,7 @@ doWardenWeaponSwap = function(self, t, type, silent)
end
if swap == true then
local old_inv_access = self.no_inventory_access -- Make sure clones can swap
local old_inv_access = self.no_inventory_access -- Make sure clones can swap
self.no_inventory_access = nil
self:attr("no_sound", 1)
self:quickSwitchWeapons(true, "warden", silent)
......
......@@ -269,7 +269,9 @@ newTalent{
mode = "passive",
points = 5,
remove_on_clone = true,
getDamagePenalty = function(self, t) return 100 - self:combatTalentLimit(t, 80, 10, 60) end,
getChance = function(self, t) return self:combatTalentLimit(t, 65, 30, 50) end,
--getDamagePenalty = function(self, t) return 100 - self:combatTalentLimit(t, 80, 10, 60) end,
getDamagePenalty = function(self, t) return 100 - self:combatTalentLimit(t, 95, 60, 80) end,
findTarget = function(self, t)
local tgts = {}
local grids = core.fov.circle_grids(self.x, self.y, 10, true)
......@@ -301,6 +303,8 @@ newTalent{
if hitted then
if self.turn_procs.wardens_call then
return
elseif not rng.percent(t.getChance(self, t)) then
return
else
self.turn_procs.wardens_call = true
end
......@@ -323,6 +327,7 @@ newTalent{
local tx, ty = util.findFreeGrid(wf.x, wf.y, 1, true, {[Map.ACTOR]=true})
if tx and ty then
m.blended_target = wf
game.logSeen(self, "%s calls forth a temporal warden from another timeline.", self.name:capitalize())
game.zone:addEntity(game.level, m, "actor", tx, ty)
end
end
......@@ -333,8 +338,9 @@ newTalent{
local a, id = rng.tableRemove(tgts)
-- look for space
local tx, ty = util.findFreeGrid(a.x, a.y, 1, true, {[Map.ACTOR]=true})
if tx and ty then
m.blended_target = a
if tx and ty then
m.blended_target = a
game.logSeen(self, "%s calls forth a temporal warden from another timeline.", self.name:capitalize())
game.zone:addEntity(game.level, m, "actor", tx, ty)
break
else
......@@ -349,6 +355,8 @@ newTalent{
if hitted then
if self.turn_procs.wardens_call then
return
elseif not rng.percent(t.getChance(self, t)) then
return
else
self.turn_procs.wardens_call = true
end
......@@ -396,6 +404,7 @@ newTalent{
local tx, ty = find_space(self, target, m)
if tx and ty then
m.blended_target = wf
game.logSeen(self, "%s calls forth a temporal warden from another timeline.", self.name:capitalize())
game.zone:addEntity(game.level, m, "actor", tx, ty)
end
else
......@@ -405,6 +414,7 @@ newTalent{
local tx, ty = find_space(self, target, m)
if tx and ty then
m.blended_target = a
game.logSeen(self, "%s calls forth a temporal warden from another timeline.", self.name:capitalize())
game.zone:addEntity(game.level, m, "actor", tx, ty)
end
end
......@@ -413,10 +423,10 @@ newTalent{
end
end,
info = function(self, t)
local damage_penalty = t.getDamagePenalty(self, t)
return ([[When you hit with a melee or arrow attack a warden may appear from another timeline, depending on available space, and shoot or attack a random enemy.
The wardens are out of phase with this reality and deal %d%% less damage but the bow warden's arrows will pass through friendly targets.
This effect can only occur once per turn and the wardens return to their own timeline after attacking.]])
:format(damage_penalty)
return ([[When you hit with a melee or arrow attack, there is a %d%% chance that a warden will appear from another timeline to attack a random enemy.
The summoned warden will attempt a melee attack if you made an arrow attack, or an arrow attack if you made a melee attack.
These wardens are out of phase with your reality and deal %d%% less damage, and their arrows will pass through friendly targets.
A warden can only be summoned this way once per turn and they return to their own timeline after attacking.]])
:format(t.getChance(self, t), t.getDamagePenalty(self, t))
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