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

more threaded weapons changes

parent a406d8c5
No related branches found
No related tags found
1 merge request!197More fixes
......@@ -75,86 +75,12 @@ newTalent{
}
newTalent{
name = "Braided Blade",
name = "Blink Blade",
type = {"chronomancy/blade-threading", 2},
require = chrono_req2,
points = 5,
cooldown = 8,
paradox = function (self, t) return getParadoxCost(self, t, 12) end,
tactical = { ATTACKAREA = {weapon = 2}, DISABLE = 3 },
requires_target = true,
speed = "weapon",
range = function(self, t) return 3 + math.floor(self:combatTalentLimit(t, 7, 0, 3)) end,
is_melee = true,
target = function(self, t)
return {type="beam", range=self:getTalentRange(t), talent=t, selffire=false }
end,
getDamage = function(self, t) return self:combatTalentWeaponDamage(t, 0.8, 1.3) end,
getDuration = function(self, t) return getExtensionModifier(self, t, math.floor(self:combatTalentScale(t, 3, 7))) end,
getPower = function(self, t) return self:combatTalentSpellDamage(t, 25, 40, getParadoxSpellpower(self, t)) end,
on_pre_use = function(self, t, silent) if not doWardenPreUse(self, "dual") then if not silent then game.logPlayer(self, "You require two weapons to use this talent.") end return false end return true end,
action = function(self, t)
local swap = doWardenWeaponSwap(self, t, "blade")
local tg = self:getTalentTarget(t)
local x, y = self:getTarget(tg)
if not x or not y then
if swap then doWardenWeaponSwap(self, t, "bow") end
return nil
end
local braid_targets = {}
local bow_done = false
self:project(tg, x, y, function(px, py, tg, self)
local target = game.level.map(px, py, Map.ACTOR)
if target then
local hit = self:attackTarget(target, DamageType.TEMPORAL, t.getDamage(self, t), true)
if hit then
if not bow_done then
bow_done = true
bow_warden(self, target)
end
if not target.dead and self:reactionToward(target) < 0 then
braid_targets[#braid_targets+1] = target
end
end
end
end)
-- if we hit more than one, braid them
if #braid_targets > 1 then
for i = 1, #braid_targets do
local target = braid_targets[i]
target:setEffect(target.EFF_BRAIDED, t.getDuration(self, t), {power=t.getPower(self, t), src=self, targets=braid_targets})
end
end
local _ _, _, _, x, y = self:canProject(tg, x, y)
game.level.map:particleEmitter(self.x, self.y, math.max(math.abs(x-self.x), math.abs(y-self.y)), "temporalbeam", {tx=x-self.x, ty=y-self.y})
game:playSoundNear(self, "talents/heal")
return true
end,
info = function(self, t)
local damage = t.getDamage(self, t) * 100
local duration = t.getDuration(self, t)
local power = t.getPower(self, t)
return ([[Attack all targets in a beam with your melee weapons for %d%% temporal weapon damage.
If two or more targets are hit by the beam you'll braid their lifelines for %d turns.
Braided targets take %d%% of all damage dealt to other braided targets.
The damage transferred by the braid effect and beam damage scales with your Spellpower.]])
:format(damage, duration, power)
end
}
newTalent{
name = "Blink Blade",
type = {"chronomancy/blade-threading", 3},
require = chrono_req3,
points = 5,
cooldown = 8,
paradox = function (self, t) return getParadoxCost(self, t, 12) end,
tactical = { ATTACKAREA = {weapon = 2}, ATTACK = {weapon = 2}, },
requires_target = true,
is_teleport = true,
......@@ -257,6 +183,80 @@ newTalent{
end
}
newTalent{
name = "Braided Blade",
type = {"chronomancy/blade-threading", 3},
require = chrono_req3,
points = 5,
cooldown = 8,
paradox = function (self, t) return getParadoxCost(self, t, 18) end,
tactical = { ATTACKAREA = {weapon = 2}, DISABLE = 3 },
requires_target = true,
speed = "weapon",
range = function(self, t) return 3 + math.floor(self:combatTalentLimit(t, 7, 0, 3)) end,
is_melee = true,
target = function(self, t)
return {type="beam", range=self:getTalentRange(t), talent=t, selffire=false }
end,
getDamage = function(self, t) return self:combatTalentWeaponDamage(t, 0.8, 1.3) end,
getDuration = function(self, t) return getExtensionModifier(self, t, math.floor(self:combatTalentScale(t, 3, 7))) end,
getPower = function(self, t) return self:combatTalentSpellDamage(t, 25, 40, getParadoxSpellpower(self, t)) end,
on_pre_use = function(self, t, silent) if not doWardenPreUse(self, "dual") then if not silent then game.logPlayer(self, "You require two weapons to use this talent.") end return false end return true end,
action = function(self, t)
local swap = doWardenWeaponSwap(self, t, "blade")
local tg = self:getTalentTarget(t)
local x, y = self:getTarget(tg)
if not x or not y then
if swap then doWardenWeaponSwap(self, t, "bow") end
return nil
end
local braid_targets = {}
local bow_done = false
self:project(tg, x, y, function(px, py, tg, self)
local target = game.level.map(px, py, Map.ACTOR)
if target then
local hit = self:attackTarget(target, DamageType.TEMPORAL, t.getDamage(self, t), true)
if hit then
if not bow_done then
bow_done = true
bow_warden(self, target)
end
if not target.dead and self:reactionToward(target) < 0 then
braid_targets[#braid_targets+1] = target
end
end
end
end)
-- if we hit more than one, braid them
if #braid_targets > 1 then
for i = 1, #braid_targets do
local target = braid_targets[i]
target:setEffect(target.EFF_BRAIDED, t.getDuration(self, t), {power=t.getPower(self, t), src=self, targets=braid_targets})
end
end
local _ _, _, _, x, y = self:canProject(tg, x, y)
game.level.map:particleEmitter(self.x, self.y, math.max(math.abs(x-self.x), math.abs(y-self.y)), "temporalbeam", {tx=x-self.x, ty=y-self.y})
game:playSoundNear(self, "talents/heal")
return true
end,
info = function(self, t)
local damage = t.getDamage(self, t) * 100
local duration = t.getDuration(self, t)
local power = t.getPower(self, t)
return ([[Attack all targets in a beam with your melee weapons for %d%% temporal weapon damage.
If two or more targets are hit by the beam you'll braid their lifelines for %d turns.
Braided targets take %d%% of all damage dealt to other braided targets.
The damage transferred by the braid effect and beam damage scales with your Spellpower.]])
:format(damage, duration, power)
end
}
newTalent{
name = "Blade Shear",
type = {"chronomancy/blade-threading", 4},
......
......@@ -30,7 +30,7 @@ newTalent{
require = chrono_req1,
points = 5,
cooldown = 6,
paradox = function (self, t) return getParadoxCost(self, t, 12) end,
paradox = function (self, t) return getParadoxCost(self, t, 8) end,
tactical = { ATTACK = {weapon = 4} },
requires_target = true,
range = archery_range,
......@@ -219,7 +219,7 @@ newTalent{
require = chrono_req3,
points = 5,
cooldown = 12,
paradox = function (self, t) return getParadoxCost(self, t, 24) end,
paradox = function (self, t) return getParadoxCost(self, t, 12) end,
tactical = { ATTACK = {weapon = 4} },
requires_target = true,
range = archery_range,
......@@ -278,7 +278,7 @@ newTalent{
newTalent{
name = "Arrow Threading",
type = {"chronomancy/bow-threading", 1},
type = {"chronomancy/bow-threading", 4},
require = chrono_req4,
mode = "passive",
points = 5,
......
......@@ -165,7 +165,8 @@ newTalent{
require = chrono_req_high3,
points = 5,
cooldown = 8,
tactical = { ATTACKAREA = { weapon = 3 } , DISABLE = 3 },
paradox = function (self, t) return getParadoxCost(self, t, 18) end,
tactical = { ATTACKAREA = { weapon = 3 } },
requires_target = true,
range = function(self, t)
if self:hasArcheryWeapon("bow") then return util.getval(archery_range, self, t) end
......@@ -173,8 +174,7 @@ newTalent{
end,
is_melee = function(self, t) return not self:hasArcheryWeapon("bow") end,
speed = function(self, t) return self:hasArcheryWeapon("bow") and "archery" or "weapon" end,
getDamage = function(self, t) return self:combatTalentWeaponDamage(t, 1.2, 1.9) end,
getTuning = function(self, t) return math.floor(self:combatTalentScale(t, 5, 10)) end,
getDamage = function(self, t) return self:combatTalentWeaponDamage(t, 1.1, 2.2) end,
on_pre_use = function(self, t, silent) if self:attr("disarmed") then if not silent then game.logPlayer(self, "You require a weapon to use this talent.") end return false end return true end,
target = function(self, t)
local tg = {type="beam", range=self:getTalentRange(t)}
......@@ -183,9 +183,6 @@ newTalent{
end
return tg
end,
archery_onhit = function(self, t, target, x, y)
tuneParadox(self, t, t.getTuning(self, t))
end,
action = function(self, t)
local tg = self:getTalentTarget(t)
local damage = t.getDamage(self, t)
......@@ -201,11 +198,7 @@ newTalent{
self:project(tg, self.x, self.y, function(px, py, tg, self)
local target = game.level.map(px, py, Map.ACTOR)
if target and target ~= self then
local hit = self:attackTarget(target, nil, dam, true)
-- Reduce Paradox
if hit then
tuneParadox(self, t, t.getTuning(self, t))
end
self:attackTarget(target, nil, dam, true)
end
end)
self:addParticles(Particles.new("meleestorm2", 1, {}))
......@@ -219,9 +212,8 @@ newTalent{
info = function(self, t)
local damage = t.getDamage(self, t) * 100
local tuneing = t.getTuning(self, t)
return ([[Attack with your bow or dual-weapons for %d%% damage. If you use your bow you'll shoot all targets in a beam. If you use your dual-weapons you'll attack all targets within a radius of one around you.
For each target hit you tune your Paradox up to %d towards your baseline.]])
:format(damage, tuning)
return ([[Attack with your bow or dual-weapons for %d%% damage. If you use your bow you'll shoot all targets in a beam. If you use your dual-weapons you'll attack all targets within a radius of one around you.]])
:format(damage)
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