Skip to content
Snippets Groups Projects
Commit d720e32f authored by Eric Wykoff's avatar Eric Wykoff
Browse files

arrow echoes done

parent cf45b68e
No related branches found
No related tags found
No related merge requests found
......@@ -64,12 +64,11 @@ newTalent{
type = {"chronomancy/bow-threading", 2},
require = chrono_req2,
points = 5,
cooldown = 12,
cooldown = 6,
paradox = function (self, t) return getParadoxCost(self, t, 10) end,
tactical = { ATTACK = {weapon = 4} },
requires_target = true,
range = archery_range,
radius = function(self, t) return math.floor(self:combatTalentScale(t, 2.3, 3.7)) end,
speed = 'archery',
getDamage = function(self, t) return self:combatTalentWeaponDamage(t, 1, 1.5) end,
getClones = function(self, t) return self:getTalentLevel(t) >= 5 and 3 or self:getTalentLevel(t) >= 3 and 2 or 1 end,
......@@ -140,8 +139,8 @@ newTalent{
info = function(self, t)
local damage = t.getDamage(self, t) * 100
local clones = t.getClones(self, t)
return ([[Fire upon the target for %d%% damage and summon up to %d temporal clones (depending on available space) that will each fire a single shot before returning to their timelines.
These clones are out of phase with normal reality and deal 50%% damage but shoot through friendly targets.
return ([[Fire upon the target for %d%% damage and call up to %d wardens (depending on available space) that will each fire a single shot before returning to their timelines.
The wardens are out of phase with normal reality and deal 50%% damage but shoot through friendly targets.
At talent level three and five you can summon an additional clone.]])
:format(damage, clones)
end
......@@ -238,7 +237,7 @@ newTalent{
local damage = t.getDamage(self, t) * 100
local radius = self:getTalentRadius(t)
local aoe = t.getDamageAoE(self, t)
return ([[Fire a shot doing %d%% damage. When the arrow reaches its destination it will draw in enemies in a radius of %d and inflict %0.2f physical damage.
return ([[Fire an arrow for %d%% weapon damage. When the arrow reaches its destination it will draw in enemies in a radius of %d and inflict %0.2f physical damage.
Each target moved beyond the first deals an additional %0.2f physical damage (up to %0.2f bonus damage).
Targets take reduced damage the further they are from the epicenter (20%% less per tile).
The additional damage scales with your Spellpower.]])
......@@ -247,47 +246,61 @@ newTalent{
}
newTalent{
name = "Arrow Echo",
name = "Arrow Echoes",
type = {"chronomancy/bow-threading", 4},
require = chrono_req4,
points = 5,
cooldown = 6,
cooldown = 12,
paradox = function (self, t) return getParadoxCost(self, t, 10) end,
tactical = { BUFF = 2 },
direct_hit = true,
tactical = { ATTACK = {weapon = 4} },
requires_target = true,
range = 10,
no_energy = true,
target = function (self, t)
return {type="hit", range=self:getTalentRange(t), talent=t}
range = archery_range,
speed = 'archery',
target = function(self, t)
return {type="bolt", range=self:getTalentRange(t), talent=t, friendlyfire=false, friendlyblock=false}
end,
getDuration = function(self, t) return getExtensionModifier(self, t, math.floor(self:combatTalentScale(t, 8, 16))) end,
getAttack = function(self, t) return self:combatTalentSpellDamage(t, 10, 100, getParadoxSpellpower(self, t)) end,
getCrit = function(self, t) return self:combatTalentSpellDamage(t, 5, 50, getParadoxSpellpower(self, t)) end,
getDuration = function(self, t) return getExtensionModifier(self, t, math.floor(self:combatTalentScale(t, 2, 4))) end,
getDamage = function(self, t) return self:combatTalentWeaponDamage(t, 1, 1.5) end,
archery_onhit = function(self, t, target, x, y)
game:onTickEnd(function()blade_warden(self, target)end)
if self:hasEffect(self.EFF_ECHOING_SHOT) then
end
game:onTickEnd(function() blade_warden(self, target) end)
end,
doEcho = function(self, t, eff)
game:onTickEnd(function()
local target = eff.target
local targets = self:archeryAcquireTargets({type="bolt"}, {one_shot=true, x=target.x, y=target.y, infinite=true, no_energy = true})
if not targets then return end
self:archeryShoot(targets, t, {type="bolt", start_x=eff.x, start_y=eff.y}, {mult=t.getDamage(self, t)})
eff.shots = eff.shots - 1
end)
end,
action = function(self, t)
local swap = doWardenWeaponSwap(self, "bow")
-- Grab our target so we can set our echo
local tg = self:getTalentTarget(t)
local tx, ty = self:getTarget(tg)
if not tx or not ty then return nil end
local _ _, tx, ty = self:canProject(tg, tx, ty)
local target = game.level.map(tx, ty, Map.ACTOR)
if not target then return end
local x, y, target = self:getTarget(tg)
if not x or not y or not target then if swap == true then doWardenWeaponSwap(self, "blade") end return nil end
local __, x, y = self:canProject(tg, x, y)
-- Sanity check
if not self:hasLOS(x, y) then
game.logSeen(self, "You do not have line of sight.")
return nil
end
self:setEffect(self.EFF_WARDEN_S_FOCUS, t.getDuration(self, t), {target=target, atk=t.getAttack(self, t), crit=t.getCrit(self, t)})
self:setEffect(self.EFF_ARROW_ECHOES, t.getDuration(self, t), {shots=t.getDuration(self, t), x=self.x, y=self.y, target=target})
local targets = self:archeryAcquireTargets(self:getTalentTarget(t), {one_shot=true, x=x, y=y, no_energy=true})
if not targets then return end
self:archeryShoot(targets, t, {type="bolt"}, {mult=t.getDamage(self, t)})
return true
end,
info = function(self, t)
local duration = t.getDuration(self, t)
local atk = t.getAttack(self, t)
local crit = t.getCrit(self, t)
return ([[Activate to focus fire on the target. For the next %d turns most of your ranged weapon attacks will automatically aim at this target, as well as Temporal Assault teleports and Blended Threads clones.
Additionally you gain +%d accuracy and +%d%% critical hit rate when attacking this target.
The accuracy and critical hit rate bonuses will scale with your Spellpower.]])
:format(duration, atk, crit)
local damage = t.getDamage(self, t) * 100
return ([[Fire an arrow for %d%% weapon damage at the target. Over the next %d turns you'll fire up to %d additional arrows at this target from your original location.
These echoed shots do not consume ammo.]])
:format(damage, duration, duration)
end
}
\ No newline at end of file
......@@ -281,9 +281,9 @@ newTalent{
end,
info = function(self, t)
local damage_penalty = t.getDamagePenalty(self, t)
return ([[When you hit with a blade-threading or a bow-threading talent a warden will appear from another timeline and shoot or attack a random enemy.
return ([[When you hit with a blade-threading or a bow-threading talent a warden may appear (depending on available space) from another timeline 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.
Each of these effects can only occur once per turn.]])
Each of these effects can only occur once per turn and the wardens return to their own timeline after attacking.]])
:format(damage_penalty)
end
}
......
......@@ -3452,4 +3452,27 @@ newEffect{
end,
deactivate = function(self, eff)
end,
}
newEffect{
name = "ARROW_ECHOES", image = "talents/arrow_echoes.png",
desc = "Arrow Echoes",
long_desc = function(self, eff) return ("Each turn will fire an arrow at %s."):format(eff.target.name) end,
type = "magical",
subtype = { time=true },
status = "beneficial",
on_gain = function(self, err) return nil, "+Arrow Echoes" end,
on_lose = function(self, err) return nil, "-Arrow Echoes" end,
parameters = { shots = 1 },
on_timeout = function(self, eff)
if eff.shots <= 0 or eff.target.dead or core.fov.distance(self.x, self.y, eff.target.x, eff.target.y) > 10 then
self:removeEffect(self.EFF_ARROW_ECHOES)
else
self:callTalent(self.T_ARROW_ECHOES, "doEcho", eff)
end
end,
activate = function(self, eff)
end,
deactivate = function(self, eff)
end,
}
\ No newline at end of file
......@@ -3251,4 +3251,6 @@ newEffect{
end,
activate = function(self, eff)
end,
deactivate = function(self, eff)
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