This is how I would rewrite it. Trade the weapon hit for some strength based physical damage and lowered cooldown and stamina cost.
Code: Select all
newTalent{
name = "Rush",
type = {"technique/combat-techniques-active", 2},
message = "@Source@ rushes out!",
require = techs_strdex_req2,
points = 5,
random_ego = "attack",
stamina = 20,
cooldown = 20,
tactical = { ATTACK = 1, CLOSEIN = 3 },
requires_target = true,
range = function(self, t) return math.floor(5 + self:getTalentLevelRaw(t)) end,
getDamage = function(self, t) return self:combatTalentStatDamage(t, "str", 20, 200) end,
action = function(self, t)
if self:attr("never_move") then game.logPlayer(self, "You can not do that currently.") return end
local tg = {type="hit", range=self:getTalentRange(t)}
local x, y, target = self:getTarget(tg)
if not x or not y or not target then return nil end
if core.fov.distance(self.x, self.y, x, y) > self:getTalentRange(t) then return nil end
local block_actor = function(_, bx, by) return game.level.map:checkEntity(bx, by, Map.TERRAIN, "block_move", self) end
local l = self:lineFOV(x, y, block_actor)
local lx, ly, is_corner_blocked = l:step(block_actor)
if is_corner_blocked or game.level.map:checkAllEntities(lx, ly, "block_move", self) then
game.logPlayer(self, "You are too close to build up momentum!")
return
end
local tx, ty = lx, ly
lx, ly, is_corner_blocked = l:step(block_actor)
while lx and ly do
if is_corner_blocked or game.level.map:checkAllEntities(lx, ly, "block_move", self) then break end
tx, ty = lx, ly
lx, ly, is_corner_blocked = l:step(block_actor)
end
local ox, oy = self.x, self.y
self:move(tx, ty, true)
if config.settings.tome.smooth_move > 0 then
self:resetMoveAnim()
self:setMoveAnim(ox, oy, 8, 5)
end
-- Attack ?
if core.fov.distance(self.x, self.y, x, y) == 1 then
if target:checkHit(self:combatAttack(), target:combatDefense(), 0, 95, 5 - self:getTalentLevel(t) / 2) then
self:project(target, target.x, target.y, DamageType.PHYSICAL, t.getDamage(self, t))
if target:canBe("stun") then
-- Daze, no save
target:setEffect(target.EFF_DAZED, 3, {})
end
end
return true
end,
info = function(self, t)
local damage = t.getDamage(self, t)
return ([[Rushes toward your target with incredible speed and attempt to daze it with a vicious shoulder check that deals %0.2f physical damage.
If the attack hits the target is dazed for 3 turns.
You must rush from at least 2 tiles away.]]):format(damDesc(self, DamageType.PHYSICAL, (damage)))
end,
}