Skip to content
Snippets Groups Projects
Commit 60427106 authored by dg's avatar dg
Browse files

60% of will and cunning now used to determine Beyond the Flesh damage

Swapped Shield Discipline effect with Absorption mastery effect
Swapped Aura Discipline effect with Projection mastery effect
Augmentation tooltip fixed, nerfed slightly
Base shields don't absorb as much energy per point of damage. Spiked shields absorb much more.
Auras drain less energy
Base shields nerfed, spikes buffed
Base shields absorb lower percentage of incoming damage
Spiked shields apply to 100% of incoming damage
Nerf Reshape Weapon slightly
Reshape Weapon and Reshape Armor have 0 cost
Shields don't use turn
Auras do more damage


git-svn-id: http://svn.net-core.org/repos/t-engine4@2598 51575b47-30f0-44d4-a5cc-537603b46e54
parent 7261cb33
No related branches found
No related tags found
No related merge requests found
......@@ -502,6 +502,7 @@ function _M:combatDamage(weapon)
if self.use_psi_combat and stat == "dex" then stat = "cun" end
totstat = totstat + self:getStat(stat) * mod
end
if self.use_psi_combat then totstat = totstat * 0.6 end
local add = 0
if self:knowTalent(Talents.T_ARCANE_DESTRUCTION) then
......
......@@ -23,12 +23,12 @@ local function getShieldStrength(self, t)
add = getGemLevel(self)*(1 + 0.1*(self:getTalentLevel(self.T_FOCUSED_CHANNELING) or 0))
end
--return 2 + (1+ self:getWil(8))*self:getTalentLevel(t) + add
return self:combatTalentIntervalDamage(t, "wil", 3, 60) + add
return self:combatTalentIntervalDamage(t, "wil", 3, 50) + add
end
local function getSpikeStrength(self, t)
local ss = getShieldStrength(self, t)
return 75*self:getTalentLevel(t) + ss*math.sqrt(ss)
return 75*self:getTalentLevel(t) + 2*ss*math.sqrt(ss)
end
newTalent{
......@@ -39,16 +39,17 @@ newTalent{
points = 5,
sustain_psi = 30,
cooldown = function(self, t)
return 20 - 2*(self:getTalentLevelRaw(self.T_ABSORPTION_MASTERY) or 0)
return 20 - 2*(self:getTalentLevelRaw(self.T_SHIELD_DISCIPLINE) or 0)
end,
range = 10,
no_energy = true,
tactical = { DEFEND = 2 },
--called when damage gets absorbed by kinetic shield
ks_on_damage = function(self, t, damtype, dam)
local mast = 20 - (2*self:getTalentLevel(self.T_ABSORPTION_MASTERY) or 0) - 0.4*getGemLevel(self)
local mast = 30 - (2*self:getTalentLevel(self.T_SHIELD_DISCIPLINE) or 0) - 0.4*getGemLevel(self)
local total_dam = dam
local absorbable_dam = 0.01*(60 + math.min(self:getCun(50), 40))* total_dam
local absorbable_dam = 0.01*(60 + math.min(self:getCun(30), 40))* total_dam
local guaranteed_dam = total_dam - absorbable_dam
dam = absorbable_dam
if damtype ~= DamageType.PHYSICAL and damtype ~= DamageType.ACID then return total_dam end
......@@ -81,9 +82,9 @@ newTalent{
--called when damage gets absorbed by kinetic shield spike
kss_on_damage = function(self, t, damtype, dam)
local mast = 20 - (2*self:getTalentLevel(self.T_ABSORPTION_MASTERY) or 0) - 0.4*getGemLevel(self)
local mast = 30 - (2*self:getTalentLevel(self.T_SHIELD_DISCIPLINE) or 0) - 0.4*getGemLevel(self)
local total_dam = dam
local absorbable_dam = 0.01*(60 + math.min(self:getCun(50), 40))* total_dam
local absorbable_dam = 1*total_dam
local guaranteed_dam = total_dam - absorbable_dam
dam = absorbable_dam
......@@ -91,10 +92,10 @@ newTalent{
-- Absorb damage into the shield
if dam <= self.kinspike_shield_absorb then
self.kinspike_shield_absorb = self.kinspike_shield_absorb - dam
self:incPsi(2 + dam/mast)
self:incPsi(2 + 2*dam/mast)
dam = 0
else
self:incPsi(2 + self.kinspike_shield_absorb/mast)
self:incPsi(2 + 2*self.kinspike_shield_absorb/mast)
dam = dam - self.kinspike_shield_absorb
self.kinspike_shield_absorb = 0
end
......@@ -112,10 +113,10 @@ newTalent{
info = function(self, t)
local s_str = getShieldStrength(self, t)
local spike_str = getSpikeStrength(self, t)
local mast = 20 - (2*self:getTalentLevel(self.T_ABSORPTION_MASTERY) or 0) - 0.4*getGemLevel(self)
local absorb = 60 + math.min(self:getCun(50), 40)
local mast = 30 - (2*self:getTalentLevel(self.T_SHIELD_DISCIPLINE) or 0) - 0.4*getGemLevel(self)
local absorb = 60 + math.min(self:getCun(30), 40)
return ([[Surround yourself with a shield that will absorb at most %d physical or acid damage per attack. Deactivating the shield spikes it up to a temporary (five turns) %d point shield. The effect will increase with your Willpower stat.
Every time your shield absorbs damage, you gain two points of energy plus an additional point for every %d points of damage absorbed.
Every time your shield absorbs damage, you gain two points of energy plus an additional point for every %d points of damage absorbed. Spiked shields absorb energy more efficiently.
%d%% of any given attack is subject to absorption by this shield. The rest gets through as normal. Improve this by increasing Cunning.]]):
format(s_str, spike_str, mast, absorb)
end,
......@@ -131,16 +132,17 @@ newTalent{
points = 5,
sustain_psi = 30,
cooldown = function(self, t)
return 20 - 2*(self:getTalentLevelRaw(self.T_ABSORPTION_MASTERY) or 0)
return 20 - 2*(self:getTalentLevelRaw(self.T_SHIELD_DISCIPLINE) or 0)
end,
range = 10,
no_energy = true,
tactical = { DEFEND = 2 },
--called when damage gets absorbed by thermal shield
ts_on_damage = function(self, t, damtype, dam)
local mast = 20 - (2*self:getTalentLevel(self.T_ABSORPTION_MASTERY) or 0) - 0.4*getGemLevel(self)
local mast = 30 - (2*self:getTalentLevel(self.T_SHIELD_DISCIPLINE) or 0) - 0.4*getGemLevel(self)
local total_dam = dam
local absorbable_dam = 0.01*(60 + math.min(self:getCun(50), 40))* total_dam
local absorbable_dam = 0.01*(60 + math.min(self:getCun(30), 40))* total_dam
local guaranteed_dam = total_dam - absorbable_dam
dam = absorbable_dam
if damtype ~= DamageType.FIRE and damtype ~= DamageType.COLD then return total_dam end
......@@ -172,9 +174,9 @@ newTalent{
--called when damage gets absorbed by thermal shield spike
tss_on_damage = function(self, t, damtype, dam)
local mast = 20 - (2*self:getTalentLevel(self.T_ABSORPTION_MASTERY) or 0) - 0.4*getGemLevel(self)
local mast = 30 - (2*self:getTalentLevel(self.T_SHIELD_DISCIPLINE) or 0) - 0.4*getGemLevel(self)
local total_dam = dam
local absorbable_dam = 0.01*(60 + math.min(self:getCun(50), 40))* total_dam
local absorbable_dam = 1* total_dam
local guaranteed_dam = total_dam - absorbable_dam
dam = absorbable_dam
......@@ -182,10 +184,10 @@ newTalent{
-- Absorb damage into the shield
if dam <= self.thermspike_shield_absorb then
self.thermspike_shield_absorb = self.thermspike_shield_absorb - dam
self:incPsi(2 + dam/mast)
self:incPsi(2 + 2*dam/mast)
dam = 0
else
self:incPsi(2 + self.thermspike_shield_absorb/mast)
self:incPsi(2 + 2*self.thermspike_shield_absorb/mast)
dam = dam - self.thermspike_shield_absorb
self.thermspike_shield_absorb = 0
end
......@@ -203,10 +205,10 @@ newTalent{
info = function(self, t)
local s_str = getShieldStrength(self, t)
local spike_str = getSpikeStrength(self, t)
local mast = 20 - (2*self:getTalentLevel(self.T_ABSORPTION_MASTERY) or 0) - 0.4*getGemLevel(self)
local absorb = 60 + math.min(self:getCun(50), 40)
local mast = 30 - (2*self:getTalentLevel(self.T_SHIELD_DISCIPLINE) or 0) - 0.4*getGemLevel(self)
local absorb = 60 + math.min(self:getCun(30), 40)
return ([[Surround yourself with a shield that will absorb at most %d thermal damage per attack. Deactivating the shield spikes it up to a temporary (five turns) %d point shield. The effect will increase with your Willpower stat.
Every time your shield absorbs damage, you gain two points of energy plus an additional point for every %d points of damage absorbed.
Every time your shield absorbs damage, you gain two points of energy plus an additional point for every %d points of damage absorbed. Spiked shields absorb energy more efficiently.
%d%% of any given attack is subject to absorption by this shield. The rest gets through as normal. Improve this by increasing Cunning.]]):
format(s_str, spike_str, mast, absorb)
end,
......@@ -220,16 +222,17 @@ newTalent{
points = 5,
sustain_psi = 30,
cooldown = function(self, t)
return 20 - 2*(self:getTalentLevelRaw(self.T_ABSORPTION_MASTERY) or 0)
return 20 - 2*(self:getTalentLevelRaw(self.T_SHIELD_DISCIPLINE) or 0)
end,
range = 10,
no_energy = true,
tactical = { DEFEND = 2 },
--called when damage gets absorbed by charged shield
cs_on_damage = function(self, t, damtype, dam)
local mast = 20 - (2*self:getTalentLevel(self.T_ABSORPTION_MASTERY) or 0) - 0.4*getGemLevel(self)
local mast = 30 - (2*self:getTalentLevel(self.T_SHIELD_DISCIPLINE) or 0) - 0.4*getGemLevel(self)
local total_dam = dam
local absorbable_dam = 0.01*(60 + math.min(self:getCun(50), 40))* total_dam
local absorbable_dam = 0.01*(60 + math.min(self:getCun(30), 40))* total_dam
local guaranteed_dam = total_dam - absorbable_dam
dam = absorbable_dam
if damtype ~= DamageType.LIGHTNING and damtype ~= DamageType.BLIGHT then return total_dam end
......@@ -261,19 +264,19 @@ newTalent{
--called when damage gets absorbed by charged shield spike
css_on_damage = function(self, t, damtype, dam)
local mast = 20 - (2*self:getTalentLevel(self.T_ABSORPTION_MASTERY) or 0) - 0.4*getGemLevel(self)
local mast = 30 - (2*self:getTalentLevel(self.T_SHIELD_DISCIPLINE) or 0) - 0.4*getGemLevel(self)
local total_dam = dam
local absorbable_dam = 0.01*(60 + math.min(self:getCun(50), 40))* total_dam
local absorbable_dam = 1* total_dam
local guaranteed_dam = total_dam - absorbable_dam
dam = absorbable_dam
if damtype == DamageType.LIGHTNING or damtype == DamageType.BLIGHT then
-- Absorb damage into the shield
if dam <= self.chargespike_shield_absorb then
self.chargespike_shield_absorb = self.chargespike_shield_absorb - dam
self:incPsi(2 + dam/mast)
self:incPsi(2 + 2*dam/mast)
dam = 0
else
self:incPsi(2 + self.chargespike_shield_absorb/mast)
self:incPsi(2 + 2*self.chargespike_shield_absorb/mast)
dam = dam - self.chargespike_shield_absorb
self.chargespike_shield_absorb = 0
end
......@@ -291,10 +294,10 @@ newTalent{
info = function(self, t)
local s_str = getShieldStrength(self, t)
local spike_str = getSpikeStrength(self, t)
local mast = 20 - (2*self:getTalentLevel(self.T_ABSORPTION_MASTERY) or 0) - 0.4*getGemLevel(self)
local absorb = 60 + math.min(self:getCun(50), 40)
local mast = 30 - (2*self:getTalentLevel(self.T_SHIELD_DISCIPLINE) or 0) - 0.4*getGemLevel(self)
local absorb = 60 + math.min(self:getCun(30), 40)
return ([[Surround yourself with a shield that will absorb at most %d lightning or blight damage per attack. Deactivating the shield spikes it up to a temporary (five turns) %d point shield. The effect will increase with your Willpower stat.
Every time your shield absorbs damage, you gain two points of energy plus an additional point for every %d points of damage absorbed.
Every time your shield absorbs damage, you gain two points of energy plus an additional point for every %d points of damage absorbed. Spiked shields absorb energy more efficiently.
%d%% of any given attack is subject to absorption by this shield. The rest gets through as normal. Improve this by increasing Cunning.]]):
format(s_str, spike_str, mast, absorb)
end,
......@@ -304,12 +307,25 @@ newTalent{
name = "Absorption Mastery",
type = {"psionic/absorption", 4},
require = psi_wil_req2,
cooldown = function(self, t)
return 120 - self:getTalentLevel(t)*12
end,
psi = 15,
points = 5,
mode = "passive",
no_energy = true,
tactical = { BUFF = 3 },
action = function(self, t)
if self.talents_cd[self.T_KINETIC_SHIELD] == nil and self.talents_cd[self.T_THERMAL_SHIELD] == nil and self.talents_cd[self.T_CHARGED_SHIELD] == nil then
return
else
self.talents_cd[self.T_KINETIC_SHIELD] = nil
self.talents_cd[self.T_THERMAL_SHIELD] = nil
self.talents_cd[self.T_CHARGED_SHIELD] = nil
return true
end
end,
info = function(self, t)
local cooldown = 2*self:getTalentLevelRaw(t)
local mast = 2*self:getTalentLevel(t)
return ([[Your expertise in the art of energy absorption grows. Shield cooldowns are all reduced by %d turns, and the amount of damage absorption required to gain a point of energy is reduced by %0.2f.]]):
format(cooldown, mast)
return ([[When activated, brings all shields off cooldown. Additional talent points spent in Absorption Mastery allow it to be used more frequently.]])
end,
}
......@@ -97,7 +97,7 @@ newTalent{
end,
action = function(self, t)
local tg = {default_target=self, type="ball", nolock=true, pass_terrain=false, nowarning=true, range=self:getTalentRange(t), radius=0, requires_knowledge=false}
x, y = self:getTarget(tg)
local x, y = self:getTarget(tg)
if not x or not y then return nil end
-- Target code does not restrict the target coordinates to the range, it lets the project function do it
-- but we cant ...
......@@ -146,10 +146,10 @@ newTalent{
end,
action = function(self, t)
if self:getTalentLevelRaw(t) < 5 then
local tg = {type="beam", range=self:getTalentRange(t), friendlyfire=false, talent=t}
local tg = {type="beam", range=self:getTalentRange(t), nolock=true, talent=t}
local x, y = self:getTarget(tg)
if not x or not y then return nil end
if self:hasLOS(x, y) and not game.level.map:checkEntity(x, y, Map.TERRAIN, "block_move") and not game.level.map:checkEntity(x, y, Map.ACTOR, "block_move") then
if self:hasLOS(x, y) and not game.level.map:checkEntity(x, y, Map.TERRAIN, "block_move") then
local dam = self:spellCrit(self:combatTalentMindDamage(t, 20, 600))
self:project(tg, x, y, DamageType.BATTER, self:spellCrit(rng.avg(2*dam/3, dam, 3)))
local _ _, x, y = self:canProject(tg, x, y)
......
......@@ -43,19 +43,19 @@ newTalent{
type = {"psionic/finer-energy-manipulations", 2},
require = psi_cun_req2,
cooldown = 1,
psi = 100,
psi = 0,
points = 5,
no_npc_use = true,
action = function(self, t)
self:showInventory("Reshape which weapon?", self:getInven("INVEN"), function(o) return o.type == "weapon" and not o.fully_reshaped end, function(o, item)
--o.wielder = o.wielder or {}
if (o.old_atk or 0) < math.floor(self:getTalentLevel(t)*(1 + self:getWil(4))) then
if (o.old_atk or 0) < math.floor(self:getTalentLevel(t)*(1 + self:getWil(3))) then
o.combat.atk = (o.combat.atk or 0) - (o.old_atk or 0)
o.combat.dam = (o.combat.dam or 0) - (o.old_dam or 0)
o.combat.atk = (o.combat.atk or 0) + math.floor(self:getTalentLevel(t)*(1 + self:getWil(4)))
o.combat.dam = (o.combat.dam or 0) + math.floor(self:getTalentLevel(t)*(1 + self:getWil(4)))
o.old_atk = math.floor(self:getTalentLevel(t)*(1 + self:getWil(4)))
o.old_dam = math.floor(self:getTalentLevel(t)*(1 + self:getWil(4)))
o.combat.atk = (o.combat.atk or 0) + math.floor(self:getTalentLevel(t)*(1 + self:getWil(3)))
o.combat.dam = (o.combat.dam or 0) + math.floor(self:getTalentLevel(t)*(1 + self:getWil(3)))
o.old_atk = math.floor(self:getTalentLevel(t)*(1 + self:getWil(3)))
o.old_dam = math.floor(self:getTalentLevel(t)*(1 + self:getWil(3)))
game.logPlayer(self, "You reshape your %s.", o:getName{do_colour=true, no_count=true})
if not o.been_reshaped then
o.name = "reshaped" .. " "..o.name..""
......@@ -70,7 +70,7 @@ newTalent{
info = function(self, t)
return ([[Manipulate forces on the molecular level to realign, rebalance, and hone your weapon. Permanently increases the attack and damage of any weapon by %d.
This value scales with Willpower.]]):
format(math.floor(self:getTalentLevel(t)*(1 + self:getWil(4))))
format(math.floor(self:getTalentLevel(t)*(1 + self:getWil(3))))
end,
}
......@@ -79,7 +79,7 @@ newTalent{
type = {"psionic/finer-energy-manipulations", 3},
require = psi_cun_req3,
cooldown = 1,
psi = 100,
psi = 0,
points = 5,
no_npc_use = true,
action = function(self, t)
......
......@@ -67,69 +67,28 @@ newTalent{
name = "Shield Discipline",
type = {"psionic/mental-discipline", 3},
require = psi_wil_req3,
cooldown = function(self, t)
return 120 - self:getTalentLevel(t)*12
end,
psi = 15,
points = 5,
no_energy = true,
tactical = { BUFF = 3 },
action = function(self, t)
if self.talents_cd[self.T_KINETIC_SHIELD] == nil and self.talents_cd[self.T_THERMAL_SHIELD] == nil and self.talents_cd[self.T_CHARGED_SHIELD] == nil then
return
else
self.talents_cd[self.T_KINETIC_SHIELD] = (self.talents_cd[self.T_KINETIC_SHIELD] or 0) - 10 - 2 * self:getTalentLevelRaw(t)
self.talents_cd[self.T_THERMAL_SHIELD] = (self.talents_cd[self.T_THERMAL_SHIELD] or 0) - 10 - 2 * self:getTalentLevelRaw(t)
self.talents_cd[self.T_CHARGED_SHIELD] = (self.talents_cd[self.T_CHARGED_SHIELD] or 0) - 10 - 2 * self:getTalentLevelRaw(t)
return true
end
end,
mode = "passive",
info = function(self, t)
return ([[When activated, reduces the cooldowns of all shields by %d. Additional talent points spent in Shield Discipline improve this value and allow it to be used more frequently.]]):
format(10+self:getTalentLevelRaw(t)*2)
local cooldown = 2*self:getTalentLevelRaw(t)
local mast = 2*self:getTalentLevel(t)
return ([[Your expertise in the art of energy absorption grows. Shield cooldowns are all reduced by %d turns, and the amount of damage absorption required to gain a point of energy is reduced by %0.2f.]]):
format(cooldown, mast)
end,
}
newTalent{
name = "Aura Discipline",
type = {"psionic/mental-discipline", 4},
require = psi_wil_req4,
cooldown = function(self, t)
return 120 - self:getTalentLevel(t)*12
end,
psi = 15,
points = 5,
no_energy = true,
tactical = { BUFF = 2 },
action = function(self, t)
if self.talents_cd[self.T_KINETIC_AURA] == nil and self.talents_cd[self.T_THERMAL_AURA] == nil and self.talents_cd[self.T_CHARGED_AURA] == nil then
return
else
if self:isTalentActive(self.T_CONDUIT) then
local auras = self:isTalentActive(self.T_CONDUIT)
if not auras.k_aura_on then
self.talents_cd[self.T_KINETIC_AURA] = (self.talents_cd[self.T_KINETIC_AURA] or 0) - 4 - 1 * self:getTalentLevelRaw(t)
end
if not auras.t_aura_on then
self.talents_cd[self.T_THERMAL_AURA] = (self.talents_cd[self.T_THERMAL_AURA] or 0) - 4 - 1 * self:getTalentLevelRaw(t)
end
if not auras.c_aura_on then
self.talents_cd[self.T_CHARGED_AURA] = (self.talents_cd[self.T_CHARGED_AURA] or 0) - 4 - 1 * self:getTalentLevelRaw(t)
end
else
self.talents_cd[self.T_KINETIC_AURA] = (self.talents_cd[self.T_KINETIC_AURA] or 0) - 4 - 1 * self:getTalentLevelRaw(t)
self.talents_cd[self.T_THERMAL_AURA] = (self.talents_cd[self.T_THERMAL_AURA] or 0) - 4 - 1 * self:getTalentLevelRaw(t)
self.talents_cd[self.T_CHARGED_AURA] = (self.talents_cd[self.T_CHARGED_AURA] or 0) - 4 - 1 * self:getTalentLevelRaw(t)
end
return true
end
end,
mode = "passive",
info = function(self, t)
local red = 4 + self:getTalentLevelRaw(t)
return ([[When activated, reduces the cooldown of all auras by %d. Additional talent points spent in Aura Discipline improve this value and allow it to be used more frequently.]]):
format(red)
local cooldown = self:getTalentLevelRaw(t)
local mast = (self:getTalentLevel(t) or 0)
return ([[Your expertise in the art of energy projection grows.
Aura cooldowns are all reduced by %d turns. Aura damage drains energy more slowly (+%0.2f damage required to lose a point of energy).]]):format(cooldown, mast)
end,
}
......@@ -103,7 +103,7 @@ newTalent{
sustain_psi = 30,
remove_on_zero = true,
cooldown = function(self, t)
return 15 - (self:getTalentLevelRaw(self.T_PROJECTION_MASTERY) or 0)
return 15 - (self:getTalentLevelRaw(self.T_AURA_DISCIPLINE) or 0)
end,
tactical = { ATTACKAREA = 2 },
range = 1,
......@@ -114,14 +114,14 @@ newTalent{
add = getGemLevel(self)*(1 + 0.1*(self:getTalentLevel(self.T_FOCUSED_CHANNELING) or 0))
end
--return 5 + (1+ self:getWil(5))*self:getTalentLevel(t) + add
return self:combatTalentIntervalDamage(t, "wil", 6, 40) + add
return self:combatTalentIntervalDamage(t, "wil", 6, 50) + add
end,
getKnockback = function(self, t)
return 3 + math.floor(self:getTalentLevel(t))
end,
do_kineticaura = function(self, t)
local mast = 3 + (self:getTalentLevel(self.T_PROJECTION_MASTERY) or 0) + getGemLevel(self)
local mast = 5 + (self:getTalentLevel(self.T_AURA_DISCIPLINE) or 0) + getGemLevel(self)
local dam = t.getAuraStrength(self, t)
local tgts = {}
local grids = core.fov.circle_grids(self.x, self.y, 1, true)
......@@ -154,7 +154,7 @@ newTalent{
game.logPlayer(self, "The aura dissipates without producing a spike.")
return true
end
local tg = {type="hit", range=self:getTalentRange(t)}
local tg = {type="hit", nolock=true, range=self:getTalentRange(t)}
local x, y, target = self:getTarget(tg)
if not x or not y then return nil end
local actor = game.level.map(x, y, Map.ACTOR)
......@@ -171,7 +171,7 @@ newTalent{
info = function(self, t)
local dam = t.getAuraStrength(self, t)
local spikedam = 50 + 0.25 * dam * dam
local mast = 3 + (self:getTalentLevel(self.T_PROJECTION_MASTERY) or 0) + getGemLevel(self)
local mast = 5 + (self:getTalentLevel(self.T_AURA_DISCIPLINE) or 0) + getGemLevel(self)
local spikecost = t.sustain_psi - 2*getGemLevel(self)
return ([[Fills the air around you with reactive currents of force that do %d physical damage to all who approach. All damage done by the aura will drain one point of energy per %0.2f points of damage dealt.
When deactivated, if you have at least %d energy, a massive spike of kinetic energy is released, smashing a target for %d physical damage and sending it flying. Telekinetically wielding a gem instead of a weapon will result in improved spike efficiency.
......@@ -189,7 +189,7 @@ newTalent{
sustain_psi = 40,
remove_on_zero = true,
cooldown = function(self, t)
return 15 - (self:getTalentLevelRaw(self.T_PROJECTION_MASTERY) or 0)
return 15 - (self:getTalentLevelRaw(self.T_AURA_DISCIPLINE) or 0)
end,
tactical = { ATTACKAREA = 2 },
range = function(self, t)
......@@ -206,11 +206,11 @@ newTalent{
add = getGemLevel(self)*(1 + 0.1*(self:getTalentLevel(self.T_FOCUSED_CHANNELING) or 0))
end
--return 5 + (1+ self:getWil(5))*self:getTalentLevel(t) + add
return self:combatTalentIntervalDamage(t, "wil", 6, 40) + add
return self:combatTalentIntervalDamage(t, "wil", 6, 50) + add
end,
do_thermalaura = function(self, t)
local mast = 3 + (self:getTalentLevel(self.T_PROJECTION_MASTERY) or 0) + getGemLevel(self)
local mast = 5 + (self:getTalentLevel(self.T_AURA_DISCIPLINE) or 0) + getGemLevel(self)
local dam = t.getAuraStrength(self, t)
local tgts = {}
local grids = core.fov.circle_grids(self.x, self.y, 1, true)
......@@ -245,7 +245,7 @@ newTalent{
return true
end
local tg = {type="beam", range=self:getTalentRange(t), talent=t, display={particle="bolt_fire", trail="firetrail"}}
local tg = {type="beam", nolock=true, range=self:getTalentRange(t), talent=t, display={particle="bolt_fire", trail="firetrail"}}
local x, y = self:getTarget(tg)
if not x or not y then return nil end
local actor = game.level.map(x, y, Map.ACTOR)
......@@ -262,7 +262,7 @@ newTalent{
info = function(self, t)
local dam = t.getAuraStrength(self, t)
local spikedam = 50 + 0.4 * dam * dam
local mast = 3 + (self:getTalentLevel(self.T_PROJECTION_MASTERY) or 0) + getGemLevel(self)
local mast = 5 + (self:getTalentLevel(self.T_PROJECTION_MASTERY) or 0) + getGemLevel(self)
local spikecost = t.sustain_psi - 2*getGemLevel(self)
return ([[Fills the air around you with reactive currents of furnace-like heat that do %d fire damage to all who approach. All damage done by the aura will drain one point of energy per %0.2f points of damage dealt.
When deactivated, if you have at least %d energy, a massive spike of thermal energy is released as a tunnel of superheated air. Anybody caught in it will suffer %d fire damage. Telekinetically wielding a gem instead of a weapon will result in improved spike efficiency.
......@@ -280,7 +280,7 @@ newTalent{
sustain_psi = 50,
remove_on_zero = true,
cooldown = function(self, t)
return 15 - (self:getTalentLevelRaw(self.T_PROJECTION_MASTERY) or 0)
return 15 - (self:getTalentLevelRaw(self.T_AURA_DISCIPLINE) or 0)
end,
tactical = { ATTACKAREA = 2 },
range = function(self, t)
......@@ -297,10 +297,10 @@ newTalent{
add = getGemLevel(self)*(1 + 0.1*(self:getTalentLevel(self.T_FOCUSED_CHANNELING) or 0))
end
--return 5 + (1+ self:getWil(5))*self:getTalentLevel(t) + add
return self:combatTalentIntervalDamage(t, "wil", 6, 40) + add
return self:combatTalentIntervalDamage(t, "wil", 6, 50) + add
end,
do_chargedaura = function(self, t)
local mast = 3 + (self:getTalentLevel(self.T_PROJECTION_MASTERY) or 0) + getGemLevel(self)
local mast = 5 + (self:getTalentLevel(self.T_AURA_DISCIPLINE) or 0) + getGemLevel(self)
local dam = t.getAuraStrength(self, t)
local tgts = {}
local grids = core.fov.circle_grids(self.x, self.y, 1, true)
......@@ -335,7 +335,7 @@ newTalent{
return true
end
local tg = {type="bolt", range=self:getTalentRange(t), talent=t}
local tg = {type="bolt", nolock=true, range=self:getTalentRange(t), talent=t}
local fx, fy = self:getTarget(tg)
if not fx or not fy then return nil end
......@@ -390,7 +390,7 @@ newTalent{
info = function(self, t)
local dam = t.getAuraStrength(self, t)
local spikedam = 50 + 0.4 * dam * dam
local mast = 3 + (self:getTalentLevel(self.T_PROJECTION_MASTERY) or 0) + getGemLevel(self)
local mast = 5 + (self:getTalentLevel(self.T_AURA_DISCIPLINE) or 0) + getGemLevel(self)
local spikecost = t.sustain_psi - 2*getGemLevel(self)
local nb = 3 + self:getTalentLevelRaw(t)
return ([[Fills the air around you with crackling energy, doing %d lightning damage to all who stand nearby. All damage done by the aura will drain one point of energy per %0.2f points of damage dealt.
......@@ -403,12 +403,39 @@ newTalent{
name = "Projection Mastery",
type = {"psionic/projection", 4},
require = psi_wil_req4,
cooldown = function(self, t)
return 120 - self:getTalentLevel(t)*12
end,
psi = 15,
points = 5,
mode = "passive",
no_energy = true,
tactical = { BUFF = 2 },
action = function(self, t)
if self.talents_cd[self.T_KINETIC_AURA] == nil and self.talents_cd[self.T_THERMAL_AURA] == nil and self.talents_cd[self.T_CHARGED_AURA] == nil then
return
else
if self:isTalentActive(self.T_CONDUIT) then
local auras = self:isTalentActive(self.T_CONDUIT)
if not auras.k_aura_on then
self.talents_cd[self.T_KINETIC_AURA] = nil
end
if not auras.t_aura_on then
self.talents_cd[self.T_THERMAL_AURA] = nil
end
if not auras.c_aura_on then
self.talents_cd[self.T_CHARGED_AURA] = nil
end
else
self.talents_cd[self.T_KINETIC_AURA] = nil
self.talents_cd[self.T_THERMAL_AURA] = nil
self.talents_cd[self.T_CHARGED_AURA] = nil
end
return true
end
end,
info = function(self, t)
local cooldown = self:getTalentLevelRaw(t)
local mast = (self:getTalentLevel(t) or 0)
return ([[Your expertise in the art of energy projection grows.
Aura cooldowns are all reduced by %d turns. Aura damage drains energy more slowly (+%0.2f damage required to lose a point of energy).]]):format(cooldown, mast)
return ([[When activated, brings all auras off cooldown. Additional talent points spent in Projection Mastery allow it to be used more frequently.]])
end,
}
......@@ -66,8 +66,8 @@ newTalent{
sustain_psi = 10,
tactical = { BUFF = 2 },
activate = function(self, t)
local str_power = math.floor(0.06*self:getTalentLevel(t)*self:getWil())
local dex_power = math.floor(0.06*self:getTalentLevel(t)*self:getCun())
local str_power = math.floor(0.05*self:getTalentLevel(t)*self:getWil())
local dex_power = math.floor(0.05*self:getTalentLevel(t)*self:getCun())
return {
stats = self:addTemporaryValue("inc_stats", {
[self.STAT_STR] = str_power,
......@@ -80,9 +80,9 @@ newTalent{
return true
end,
info = function(self, t)
local inc = 10*self:getTalentLevel(t)
local str_power = math.floor(0.06*self:getTalentLevel(t)*self:getWil())
local dex_power = math.floor(0.06*self:getTalentLevel(t)*self:getCun())
local inc = 5*self:getTalentLevel(t)
local str_power = math.floor(0.05*self:getTalentLevel(t)*self:getWil())
local dex_power = math.floor(0.05*self:getTalentLevel(t)*self:getCun())
return ([[While active, you give your flesh and blood body a little aid in the form of precisely applied mental forces. Increases Strength and Dexterity by %d%% of your Willpower and Cunning, respectively.
Strength increased by %d
Dexterity increased by %d]]):
......
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