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,
}