Index: game/modules/tome/class/Trap.lua =================================================================== --- game/modules/tome/class/Trap.lua (revision 3932) +++ game/modules/tome/class/Trap.lua (working copy) @@ -56,7 +56,7 @@ -- do we know how to disarm? if who:knowTalent(who.T_TRAP_DISARM) or who:attr("can_disarm") then - local power = who:getTalentLevel(who.T_TRAP_DISARM) * who:getCun(25) + (who:attr("disarm_bonus") or 0) + local power = who:getTalentLevel(who.T_TRAP_DISARM) * who:getCun(25, true) + (who:attr("disarm_bonus") or 0) if who:checkHit(power, self.disarm_power) and (not self.faction or who:reactionToward(self) < 0) then return true end Index: game/modules/tome/class/Actor.lua =================================================================== --- game/modules/tome/class/Actor.lua (revision 3932) +++ game/modules/tome/class/Actor.lua (working copy) @@ -545,7 +545,7 @@ -- Try to detect traps if self:knowTalent(self.T_TRAP_DETECTION) then - local power = self:getTalentLevel(self.T_TRAP_DETECTION) * self:getCun(25) + local power = self:getTalentLevel(self.T_TRAP_DETECTION) * self:getCun(25, true) local grids = core.fov.circle_grids(self.x, self.y, 1, true) for x, yy in pairs(grids) do for y, _ in pairs(yy) do local trap = game.level.map(x, y, Map.TRAP) Index: game/modules/tome/class/interface/Combat.lua =================================================================== --- game/modules/tome/class/interface/Combat.lua (revision 3932) +++ game/modules/tome/class/interface/Combat.lua (working copy) @@ -425,7 +425,7 @@ end -- Riposte! - if not hitted and not target.dead and not evaded and not target:attr("stunned") and not target:attr("dazed") and not target:attr("stoned") and target:knowTalent(target.T_RIPOSTE) and rng.percent(target:getTalentLevel(target.T_RIPOSTE) * (5 + target:getDex(5))) then + if not hitted and not target.dead and not evaded and not target:attr("stunned") and not target:attr("dazed") and not target:attr("stoned") and target:knowTalent(target.T_RIPOSTE) and rng.percent(target:getTalentLevel(target.T_RIPOSTE) * (5 + target:getDex(5, true))) then game.logSeen(self, "%s ripostes!", target.name:capitalize()) target:attackTarget(self, nil, nil, true) end @@ -438,7 +438,7 @@ end -- Counter Attack! - if not hitted and not target.dead and not evaded and not target:attr("stunned") and not target:attr("dazed") and not target:attr("stoned") and target:knowTalent(target.T_COUNTER_ATTACK) and target:isUnarmed() and rng.percent(target:getTalentLevel(target.T_COUNTER_ATTACK) * (5 + target:getCun(5))) then + if not hitted and not target.dead and not evaded and not target:attr("stunned") and not target:attr("dazed") and not target:attr("stoned") and target:knowTalent(target.T_COUNTER_ATTACK) and target:isUnarmed() and rng.percent(target:getTalentLevel(target.T_COUNTER_ATTACK) * (5 + target:getCun(5, true))) then game.logSeen(self, "%s counters the attack!", target.name:capitalize()) local t = target:getTalentFromId(target.T_COUNTER_ATTACK) local damage = t.getDamage(target, t) @@ -446,7 +446,7 @@ end -- Defensive Throw! - if not hitted and not target.dead and not evaded and not target:attr("stunned") and not target:attr("dazed") and not target:attr("stoned") and target:knowTalent(target.T_DEFENSIVE_THROW) and rng.percent(target:getTalentLevel(target.T_DEFENSIVE_THROW) * (5 + target:getCun(5))) then + if not hitted and not target.dead and not evaded and not target:attr("stunned") and not target:attr("dazed") and not target:attr("stoned") and target:knowTalent(target.T_DEFENSIVE_THROW) and rng.percent(target:getTalentLevel(target.T_DEFENSIVE_THROW) * (5 + target:getCun(5, true))) then local t = target:getTalentFromId(target.T_DEFENSIVE_THROW) t.do_throw(target, self, t) end @@ -545,25 +545,25 @@ end function _M:combatAttack(weapon, ammo) local stats - if self.use_psi_combat then stats = (self:getWil(50) - 5) + (self:getCun(50) - 5) - else stats = (self:getStr(50) - 5) + (self:getDex(50) - 5) + if self.use_psi_combat then stats = (self:getWil(50, true) - 5) + (self:getCun(50, true) - 5) + else stats = (self:getStr(50, true) - 5) + (self:getDex(50, true) - 5) end return self:combatAttackBase(weapon, ammo) + stats end --- Gets the attack using only strength function _M:combatAttackStr(weapon, ammo) - return self:combatAttackBase(weapon, ammo) + (self:getStr(100) - 10) + return self:combatAttackBase(weapon, ammo) + (self:getStr(100, true) - 10) end --- Gets the attack using only dexterity function _M:combatAttackDex(weapon, ammo) - return self:combatAttackBase(weapon, ammo) + (self:getDex(100) - 10) + return self:combatAttackBase(weapon, ammo) + (self:getDex(100, true) - 10) end --- Gets the attack using only magic function _M:combatAttackMag(weapon, ammo) - return self:combatAttackBase(weapon, ammo) + (self:getMag(100) - 10) + return self:combatAttackBase(weapon, ammo) + (self:getMag(100, true) - 10) end --- Gets the armor penetration Index: game/modules/tome/class/FortressPC.lua =================================================================== --- game/modules/tome/class/FortressPC.lua (revision 3932) +++ game/modules/tome/class/FortressPC.lua (working copy) @@ -150,7 +150,7 @@ -- Try to detect traps if self:knowTalent(self.T_TRAP_DETECTION) then - local power = self:getTalentLevel(self.T_TRAP_DETECTION) * self:getCun(25) + local power = self:getTalentLevel(self.T_TRAP_DETECTION) * self:getCun(25, true) local grids = core.fov.circle_grids(self.x, self.y, 1, true) for x, yy in pairs(grids) do for y, _ in pairs(yy) do local trap = game.level.map(x, y, Map.TRAP) Index: game/modules/tome/data/talents/cunning/lethality.lua =================================================================== --- game/modules/tome/data/talents/cunning/lethality.lua (revision 3932) +++ game/modules/tome/data/talents/cunning/lethality.lua (working copy) @@ -78,7 +78,7 @@ tactical = { BUFF = 3 }, require = cuns_req3, getDuration = function(self, t) return 3 + math.ceil(self:getTalentLevel(t) * 1.5) end, - getDamage = function(self, t) return self:getWil(70) end, + getDamage = function(self, t) return self:getWil(70, true) end, action = function(self, t) self:setEffect(self.EFF_WILLFUL_COMBAT, t.getDuration(self, t), {power=t.getDamage(self, t)}) return true Index: game/modules/tome/data/talents/cunning/stealth.lua =================================================================== --- game/modules/tome/data/talents/cunning/stealth.lua (revision 3932) +++ game/modules/tome/data/talents/cunning/stealth.lua (working copy) @@ -27,7 +27,7 @@ allow_autocast = true, no_energy = true, tactical = { BUFF = 3 }, - getStealthPower = function(self, t) return 4 + self:getCun(10) * self:getTalentLevel(t) end, + getStealthPower = function(self, t) return 4 + self:getCun(10, true) * self:getTalentLevel(t) end, getRadius = function(self, t) return math.floor(10 - self:getTalentLevel(t) * 1.1) end, on_pre_use = function(self, t, silent) if self:isTalentActive(t.id) then return true end Index: game/modules/tome/data/talents/cunning/tactical.lua =================================================================== --- game/modules/tome/data/talents/cunning/tactical.lua (revision 3932) +++ game/modules/tome/data/talents/cunning/tactical.lua (working copy) @@ -71,7 +71,7 @@ local damage = t.getDamage(self, t) * 100 return ([[When you avoid a melee blow you have a %d%% chance to get a free, automatic unarmed attack against your foe for %d%% damage. The is considered a strike for the purpose of stance damage bonuses (if have any) and will only trigger while unarmed. - The chance of countering increases with the cunning stat.]]):format(self:getTalentLevel(t) * (5 + self:getCun(5)), damage) + The chance of countering increases with the cunning stat.]]):format(self:getTalentLevel(t) * (5 + self:getCun(5, true)), damage) end, } @@ -156,4 +156,4 @@ return ([[Systematically find the weaknesses in your opponents physical resists at the cost of 10%% of your physical damage. Each time you hit an opponenet with a melee attack you reduce their physical resistance by 5%% up to a maximum of %d%%. ]]):format(reduction) end, -} \ No newline at end of file +} Index: game/modules/tome/data/talents/cunning/survival.lua =================================================================== --- game/modules/tome/data/talents/cunning/survival.lua (revision 3932) +++ game/modules/tome/data/talents/cunning/survival.lua (working copy) @@ -25,7 +25,7 @@ points = 5, info = function(self, t) return ([[Your attention to detail allows you to detect traps around you (%d detection 'power').]]): - format(self:getTalentLevel(t) * self:getCun(25)) + format(self:getTalentLevel(t) * self:getCun(25, true)) end, } @@ -60,7 +60,7 @@ points = 5, info = function(self, t) return ([[You have learnt to disarm traps (%d disarm power).]]): - format(self:getTalentLevel(t) * self:getCun(25)) + format(self:getTalentLevel(t) * self:getCun(25, true)) end, } @@ -74,12 +74,12 @@ cooldown = 30, action = function(self, t) local dur = 5 + self:getWil(10) - local chance = 5 * self:getTalentLevel(t) + self:getCun(25) + self:getDex(25) + local chance = 5 * self:getTalentLevel(t) + self:getCun(25, true) + self:getDex(25, true) self:setEffect(self.EFF_EVASION, dur, {chance=chance}) return true end, info = function(self, t) return ([[Your quick wit allows you to see attacks before they come, granting you a %d%% chance to completely evade them for %d turns. - Duration increases with Willpower, and chance to evade with Cunning and Dexterity.]]):format(5 * self:getTalentLevel(t) + self:getCun(25) + self:getDex(25), 5 + self:getWil(10)) + Duration increases with Willpower, and chance to evade with Cunning and Dexterity.]]):format(5 * self:getTalentLevel(t) + self:getCun(25, true) + self:getDex(25, true), 5 + self:getWil(10)) end, } Index: game/modules/tome/data/talents/undeads/skeleton.lua =================================================================== --- game/modules/tome/data/talents/undeads/skeleton.lua (revision 3932) +++ game/modules/tome/data/talents/undeads/skeleton.lua (working copy) @@ -48,13 +48,13 @@ cooldown = 30, tactical = { DEFEND = 2 }, action = function(self, t) - self:setEffect(self.EFF_DAMAGE_SHIELD, 10, {power=50 + 70 * self:getTalentLevel(t) + self:getDex(350)}) + self:setEffect(self.EFF_DAMAGE_SHIELD, 10, {power=50 + 70 * self:getTalentLevel(t) + self:getDex(350, true)}) return true end, info = function(self, t) return ([[Creates a shield of bones absorbing %d damage. Lasts for 10 turns. The damage absorbed increases with dexterity.]]): - format(50 + 70 * self:getTalentLevel(t) + self:getDex(350)) + format(50 + 70 * self:getTalentLevel(t) + self:getDex(350, true)) end, } Index: game/modules/tome/data/talents/psionic/absorption.lua =================================================================== --- game/modules/tome/data/talents/psionic/absorption.lua (revision 3932) +++ game/modules/tome/data/talents/psionic/absorption.lua (working copy) @@ -32,7 +32,7 @@ end local function getEfficiency(self, t) - return 0.01*(50 + math.min(self:getCun(30), 50)) + return 0.01*(50 + math.min(self:getCun(30, true), 50)) end newTalent{ Index: game/modules/tome/data/talents/psionic/finer-energy-manipulations.lua =================================================================== --- game/modules/tome/data/talents/psionic/finer-energy-manipulations.lua (revision 3932) +++ game/modules/tome/data/talents/psionic/finer-energy-manipulations.lua (working copy) @@ -26,11 +26,11 @@ points = 5, tactical = { BUFF = 2 }, action = function(self, t) - self:setEffect(self.EFF_CONTROL, 5 + self:getTalentLevelRaw(t), {power=15 + math.ceil(self:getTalentLevel(t)*(1 + self:getCun(8)))}) + self:setEffect(self.EFF_CONTROL, 5 + self:getTalentLevelRaw(t), {power=15 + math.ceil(self:getTalentLevel(t)*(1 + self:getCun(8, true)))}) return true end, info = function(self, t) - local boost = 15 + math.ceil(self:getTalentLevel(t)*(1 + self:getCun(8))) + local boost = 15 + math.ceil(self:getTalentLevel(t)*(1 + self:getCun(8, true))) local dur = 5 + self:getTalentLevelRaw(t) return ([[Encase your body in a sheath of thought-quick forces, allowing you to control your body's movements directly without the inefficiency of dealing with crude mechanisms like nerves and muscles. Increases attack by %d and critical strike chance by %0.2f%% for %d turns. The effect scales with Cunning.]]): Index: game/modules/tome/data/talents/cursed/dark-sustenance.lua =================================================================== --- game/modules/tome/data/talents/cursed/dark-sustenance.lua (revision 3932) +++ game/modules/tome/data/talents/cursed/dark-sustenance.lua (working copy) @@ -179,7 +179,7 @@ require = cursed_wil_req3, points = 5, getDamageGain = function(self, t) - return math.sqrt(self:getTalentLevel(t)) * 5 + self:getWil(5) + return math.sqrt(self:getTalentLevel(t)) * 5 + self:getWil(5, true) end, info = function(self, t) local damageGain = t.getDamageGain(self, t) @@ -195,7 +195,7 @@ require = cursed_wil_req4, points = 5, getResistGain = function(self, t) - return math.sqrt(self:getTalentLevel(t)) * 22 + self:getWil(15) + return math.sqrt(self:getTalentLevel(t)) * 22 + self:getWil(15, true) end, getExtension = function(self, t) return math.floor(self:getTalentLevel(t) - 1) Index: game/modules/tome/data/talents/celestial/twilight.lua =================================================================== --- game/modules/tome/data/talents/celestial/twilight.lua (revision 3932) +++ game/modules/tome/data/talents/celestial/twilight.lua (working copy) @@ -28,7 +28,7 @@ positive = 15, tactical = { BUFF = 1 }, range = 10, - getNegativeGain = function(self, t) return 20 + self:getTalentLevel(t) * self:getCun(40) end, + getNegativeGain = function(self, t) return 20 + self:getTalentLevel(t) * self:getCun(40, true) end, action = function(self, t) if self:isTalentActive(self.T_DARKEST_LIGHT) then game.logPlayer(self, "You can't use Twilight while Darkest Light is active.") @@ -214,7 +214,7 @@ return true end - modifier = self:getCun(10) * self:getTalentLevel(t) + modifier = self:getCun(10, true) * self:getTalentLevel(t) local m = target:clone{ -- shader = "shadow_simulacrum", textures = { function() return _3DNoise, true end }, @@ -232,7 +232,7 @@ m.on_added_to_level = nil m.energy.value = 0 - m.life = m.life / (2 - (modifier / 50)) + m.life = m.life / (2 - math.min(modifier / 50, 1.9)) m.forceLevelup = function() end -- Handle special things m.on_die = nil Index: game/modules/tome/data/talents/techniques/field-control.lua =================================================================== --- game/modules/tome/data/talents/techniques/field-control.lua (revision 3932) +++ game/modules/tome/data/talents/techniques/field-control.lua (working copy) @@ -51,7 +51,7 @@ cooldown = 20, no_npc_use = true, action = function(self, t) - local rad = 5 + self:getCun(10) * self:getTalentLevel(t) + local rad = math.floor(5 + self:getCun(10, true) * self:getTalentLevel(t)) self:setEffect(self.EFF_SENSE, 3 + self:getTalentLevel(t), { range = rad, actor = 1, @@ -60,7 +60,7 @@ end, info = function(self, t) return ([[Sense foes around you in a radius of %d for %d turns. - The radius will increase with the Cunning stat]]):format(10 + self:getCun(10) * self:getTalentLevel(t), 3 + self:getTalentLevel(t)) + The radius will increase with the Cunning stat]]):format(math.floor(10 + self:getCun(10, true) * self:getTalentLevel(t)), 3 + self:getTalentLevel(t)) end, } @@ -112,7 +112,7 @@ tactical = { BUFF = 2 }, activate = function(self, t) return { - slow_projectiles = self:addTemporaryValue("slow_projectiles", 15 + self:getDex(10) * self:getTalentLevel(t)), + slow_projectiles = self:addTemporaryValue("slow_projectiles", 15 + self:getDex(10, true) * self:getTalentLevel(t)), } end, @@ -122,6 +122,6 @@ end, info = function(self, t) return ([[Your great dexterity allows you to see incoming projectiles (spells, arrows, ...), slowing them down by %d%%.]]): - format(15 + self:getDex(10) * self:getTalentLevel(t)) + format(15 + self:getDex(10, true) * self:getTalentLevel(t)) end, } Index: game/modules/tome/data/talents/techniques/unarmed-training.lua =================================================================== --- game/modules/tome/data/talents/techniques/unarmed-training.lua (revision 3932) +++ game/modules/tome/data/talents/techniques/unarmed-training.lua (working copy) @@ -92,7 +92,7 @@ mode = "passive", points = 5, getDuration = function(self, t) return math.ceil(self:getTalentLevel(t)/2) end, - getChance = function(self, t) return self:getTalentLevel(t) * (5 + self:getCun(5)) end, + getChance = function(self, t) return self:getTalentLevel(t) * (5 + self:getCun(5, true)) end, info = function(self, t) local duration = t.getDuration(self, t) local chance = t.getChance(self, t) Index: game/modules/tome/data/talents/techniques/unarmed-discipline.lua =================================================================== --- game/modules/tome/data/talents/techniques/unarmed-discipline.lua (revision 3932) +++ game/modules/tome/data/talents/techniques/unarmed-discipline.lua (working copy) @@ -116,7 +116,7 @@ local damagetwo = t.getDamageTwo(self, t) return ([[When you avoid a melee blow you have a %d%% chance to throw the target to the ground. If the throw lands the target will take %0.2f damage and be dazed for 2 turns or %0.2f damage and be stunned for 2 turns if grappled. The chance of throwing increases with the cunning stat and the damage will scale with the strength stat, dexterity, and cunning stats. - This is considered a grapple for the purposes of stance damage bonuses.]]):format(self:getTalentLevel(t) * (5 + self:getCun(5)), damDesc(self, DamageType.PHYSICAL, (damage)), damDesc(self, DamageType.PHYSICAL, (damagetwo))) + This is considered a grapple for the purposes of stance damage bonuses.]]):format(self:getTalentLevel(t) * (5 + self:getCun(5, true)), damDesc(self, DamageType.PHYSICAL, (damage)), damDesc(self, DamageType.PHYSICAL, (damagetwo))) end, } @@ -184,4 +184,4 @@ The knockback chance will increase with the strength stat and the damage will scale with the strength, dexterity, and cunning stats.]]) :format(damDesc(self, DamageType.PHYSICAL, (damage))) end, -} \ No newline at end of file +} Index: game/modules/tome/data/talents/techniques/weaponshield.lua =================================================================== --- game/modules/tome/data/talents/techniques/weaponshield.lua (revision 3932) +++ game/modules/tome/data/talents/techniques/weaponshield.lua (working copy) @@ -73,7 +73,7 @@ mode = "passive", points = 5, info = function(self, t) - return ([[When you block/avoid a melee blow you have a %d%% chance to get a free, automatic melee attack against your foe. Your chances increase with dexterity.]]):format(self:getTalentLevel(t) * (5 + self:getDex(5))) + return ([[When you block/avoid a melee blow you have a %d%% chance to get a free, automatic melee attack against your foe. Your chances increase with dexterity.]]):format(self:getTalentLevel(t) * (5 + self:getDex(5, true))) end, } @@ -192,8 +192,8 @@ stun = self:addTemporaryValue("stun_immune", 0.1 * self:getTalentLevel(t)), knock = self:addTemporaryValue("knockback_immune", 0.1 * self:getTalentLevel(t)), dam = self:addTemporaryValue("inc_damage", {[DamageType.PHYSICAL]=-20}), - def = self:addTemporaryValue("combat_def", 5 + (1 + self:getDex(4)) * self:getTalentLevel(t) + self:getTalentLevel(self.T_SHIELD_EXPERTISE) * 2), - armor = self:addTemporaryValue("combat_armor", 5 + (1 + self:getDex(4)) * self:getTalentLevel(t) + self:getTalentLevel(self.T_SHIELD_EXPERTISE)), + def = self:addTemporaryValue("combat_def", 5 + (1 + self:getDex(4, true)) * self:getTalentLevel(t) + self:getTalentLevel(self.T_SHIELD_EXPERTISE) * 2), + armor = self:addTemporaryValue("combat_armor", 5 + (1 + self:getDex(4, true)) * self:getTalentLevel(t) + self:getTalentLevel(self.T_SHIELD_EXPERTISE)), } end, deactivate = function(self, t, p) @@ -207,8 +207,8 @@ info = function(self, t) return ([[Enter a protective battle stance, increasing defense by %d and armor by %d at the cost of -20%% physical damage. The defense and armor increase is based on dexterity. It also grants resistance to stunning and knockback (%d%%).]]):format( - 5 + (1 + self:getDex(4)) * self:getTalentLevel(t) + self:getTalentLevel(self.T_SHIELD_EXPERTISE)* 2, - 5 + (1 + self:getDex(4)) * self:getTalentLevel(t) + self:getTalentLevel(self.T_SHIELD_EXPERTISE), + 5 + (1 + self:getDex(4, true)) * self:getTalentLevel(t) + self:getTalentLevel(self.T_SHIELD_EXPERTISE)* 2, + 5 + (1 + self:getDex(4, true)) * self:getTalentLevel(t) + self:getTalentLevel(self.T_SHIELD_EXPERTISE), 10 * self:getTalentLevel(t), 10 * self:getTalentLevel(t) ) end, @@ -292,7 +292,7 @@ return { max_life = self:addTemporaryValue("max_life", (10 + self:getCon() * 0.25) * self:getTalentLevel(t)), - def = self:addTemporaryValue("combat_def", 5 + self:getDex(4) * self:getTalentLevel(t)), + def = self:addTemporaryValue("combat_def", 5 + self:getDex(4, true) * self:getTalentLevel(t)), nomove = self:addTemporaryValue("never_move", 1), } end, @@ -305,7 +305,7 @@ info = function(self, t) return ([[You brace yourself for the final stand, increasing defense by %d and maximum life by %d, but making you unable to move. The increase in defense is based on Dexterity and life on Constitution.]]): - format(5 + self:getDex(4) * self:getTalentLevel(t), + format(5 + self:getDex(4, true) * self:getTalentLevel(t), (10 + self:getCon() * 0.25) * self:getTalentLevel(t)) end, } Index: game/modules/tome/data/talents/techniques/2hweapon.lua =================================================================== --- game/modules/tome/data/talents/techniques/2hweapon.lua (revision 3932) +++ game/modules/tome/data/talents/techniques/2hweapon.lua (working copy) @@ -75,8 +75,8 @@ return { stun = self:addTemporaryValue("stun_immune", 0.1 * self:getTalentLevel(t)), pin = self:addTemporaryValue("pin_immune", 0.1 * self:getTalentLevel(t)), - dam = self:addTemporaryValue("combat_dam", 5 + self:getStr(7) * self:getTalentLevel(t)), - atk = self:addTemporaryValue("combat_atk", 5 + self:getDex(7) * self:getTalentLevel(t)), + dam = self:addTemporaryValue("combat_dam", 5 + self:getStr(7, true) * self:getTalentLevel(t)), + atk = self:addTemporaryValue("combat_atk", 5 + self:getDex(7, true) * self:getTalentLevel(t)), def = self:addTemporaryValue("combat_def", -10), armor = self:addTemporaryValue("combat_armor", -10), } @@ -96,8 +96,8 @@ While berserking you are nearly unstoppable, granting %d%% stun and pinning resistance. Accuracy increase with your Dexterity stat and damage with your Strength stat]]): format( - 5 + self:getDex(7) * self:getTalentLevel(t), - 5 + self:getStr(7) * self:getTalentLevel(t), + 5 + self:getDex(7, true) * self:getTalentLevel(t), + 5 + self:getStr(7, true) * self:getTalentLevel(t), 10 * self:getTalentLevel(t) ) end, Index: game/modules/tome/data/talents/techniques/grappling.lua =================================================================== --- game/modules/tome/data/talents/techniques/grappling.lua (revision 3932) +++ game/modules/tome/data/talents/techniques/grappling.lua (working copy) @@ -27,8 +27,8 @@ tactical = { BUFF = 2 }, type_no_req = true, no_npc_use = true, -- They dont need it since it auto switches anyway - getSave = function(self, t) return 5 + self:getStr(20) end, - getDamage = function(self, t) return 20 + self:getStr(20) end, + getSave = function(self, t) return 5 + self:getStr(20, true) end, + getDamage = function(self, t) return 20 + self:getStr(20, true) end, activate = function(self, t) cancelStances(self) local ret = { @@ -296,4 +296,4 @@ The grapple effects and duration will be based off your grapple talent effect if you have it and the damage will scale with the strength stat.]]) :format(damDesc(self, DamageType.PHYSICAL, (takedown)), duration, damDesc(self, DamageType.PHYSICAL, (slam)), duration) end, -} \ No newline at end of file +} Index: game/modules/tome/data/talents/techniques/pugilism.lua =================================================================== --- game/modules/tome/data/talents/techniques/pugilism.lua (revision 3932) +++ game/modules/tome/data/talents/techniques/pugilism.lua (working copy) @@ -36,8 +36,8 @@ tactical = { BUFF = 2 }, type_no_req = true, no_npc_use = true, -- They dont need it since it auto switches anyway - getAttack = function(self, t) return 5 + self:getDex(20) end, - getDamage = function(self, t) return 20 + self:getDex(20) end, + getAttack = function(self, t) return 5 + self:getDex(20, true) end, + getDamage = function(self, t) return 20 + self:getDex(20, true) end, activate = function(self, t) cancelStances(self) local ret = { @@ -314,4 +314,4 @@ Earns one combo point. If your talent level is four or greater earns one combo point per blow that connects.]]) :format(damage) end, -} \ No newline at end of file +} Index: game/modules/tome/data/talents/techniques/archery.lua =================================================================== --- game/modules/tome/data/talents/techniques/archery.lua (revision 3932) +++ game/modules/tome/data/talents/techniques/archery.lua (working copy) @@ -89,10 +89,10 @@ return { move = self:addTemporaryValue("never_move", 1), speed = self:addTemporaryValue("combat_physspeed", -self:getTalentLevelRaw(t) * 0.05), - crit = self:addTemporaryValue("combat_physcrit", 7 + self:getTalentLevel(t) * self:getDex(10)), - atk = self:addTemporaryValue("combat_dam", 4 + self:getTalentLevel(t) * self:getDex(10)), - dam = self:addTemporaryValue("combat_atk", 4 + self:getTalentLevel(t) * self:getDex(10)), - apr = self:addTemporaryValue("combat_apr", 3 + self:getTalentLevel(t) * self:getDex(10)), + crit = self:addTemporaryValue("combat_physcrit", 7 + self:getTalentLevel(t) * self:getDex(10, true)), + atk = self:addTemporaryValue("combat_dam", 4 + self:getTalentLevel(t) * self:getDex(10, true)), + dam = self:addTemporaryValue("combat_atk", 4 + self:getTalentLevel(t) * self:getDex(10, true)), + apr = self:addTemporaryValue("combat_apr", 3 + self:getTalentLevel(t) * self:getDex(10, true)), } end, deactivate = function(self, t, p) @@ -107,8 +107,8 @@ info = function(self, t) return ([[You enter a calm, focused stance, increasing your damage(+%d), accuracy(+%d), armor penetration(+%d), and critical chance(+%d%%) but reducing your firing speed by %d%% and making you unable to move. The effects will increase with your Dexterity stat.]]): - format(4 + self:getTalentLevel(t) * self:getDex(10), 4 + self:getTalentLevel(t) * self:getDex(10), - 3 + self:getTalentLevel(t) * self:getDex(10), 7 + self:getTalentLevel(t) * self:getDex(10), + format(4 + self:getTalentLevel(t) * self:getDex(10, true), 4 + self:getTalentLevel(t) * self:getDex(10, true), + 3 + self:getTalentLevel(t) * self:getDex(10, true), 7 + self:getTalentLevel(t) * self:getDex(10, true), self:getTalentLevelRaw(t) * 5) end, } Index: game/modules/tome/data/talents/misc/npcs.lua =================================================================== --- game/modules/tome/data/talents/misc/npcs.lua (revision 3932) +++ game/modules/tome/data/talents/misc/npcs.lua (working copy) @@ -938,13 +938,13 @@ local tg = self:getTalentTarget(t) local x, y = self:getTarget(tg) if not x or not y then return nil end - self:project(tg, x, y, DamageType.PHYSKNOCKBACK, {dist=3+self:getTalentLevelRaw(t), dam=self:spellCrit(12 + self:getStr(50) * self:getTalentLevel(t))}, {type="archery"}) + self:project(tg, x, y, DamageType.PHYSKNOCKBACK, {dist=3+self:getTalentLevelRaw(t), dam=self:spellCrit(12 + self:getStr(50, true) * self:getTalentLevel(t))}, {type="archery"}) game:playSoundNear(self, "talents/ice") return true end, info = function(self, t) return ([[Throws a huge boulder at a target, damaging it for %0.2f and knocking it back. - The damage will increase with the Strength stat]]):format(12 + self:getStr(50) * self:getTalentLevel(t)) + The damage will increase with the Strength stat]]):format(12 + self:getStr(50, true) * self:getTalentLevel(t)) end, } @@ -1267,7 +1267,7 @@ {DamageType.DARKNESS, "dark"}, } tg.display={particle="bolt_elemental", trail="generictrail"} - self:projectile(tg, x, y, elem[1], math.floor(self:getMag(90) * self:getTalentLevel(t)), {type=elem[2]}) + self:projectile(tg, x, y, elem[1], math.floor(self:getMag(90, true) * self:getTalentLevel(t)), {type=elem[2]}) game:playSoundNear(self, "talents/arcane") return true end, Index: game/modules/tome/data/talents/misc/races.lua =================================================================== --- game/modules/tome/data/talents/misc/races.lua (revision 3932) +++ game/modules/tome/data/talents/misc/races.lua (working copy) @@ -190,7 +190,7 @@ game:playSoundNear(self, "talents/spell_generic2") local ret = { invis = self:addTemporaryValue("invis_on_hit", self:getTalentLevelRaw(t) * 5), - power = self:addTemporaryValue("invis_on_hit_power", 5 + self:getMag(20)), + power = self:addTemporaryValue("invis_on_hit_power", 5 + self:getMag(20, true)), talent = self:addTemporaryValue("invis_on_hit_disable", {[t.id]=1}), } return ret @@ -204,7 +204,7 @@ info = function(self, t) return ([[As the only immortal race of Eyal, Shaloren have learnt, over the long years, to use their innate inner magic to protect themselves. %d%% chance to become invisible (power %d) for 5 turns when hit by a blow doing at least 15%% of their total life.]]): - format(self:getTalentLevelRaw(t) * 5, 5 + self:getMag(20)) + format(self:getTalentLevelRaw(t) * 5, 5 + self:getMag(20, true)) end, } @@ -258,12 +258,12 @@ cooldown = function(self, t) return 50 - self:getTalentLevel(t) * 5 end, tactical = { ATTACK = 1, DEFEND = 1 }, action = function(self, t) - self:setEffect(self.EFF_ETERNAL_WRATH, 5, {power=7 + self:getWil(10)}) + self:setEffect(self.EFF_ETERNAL_WRATH, 5, {power=7 + self:getWil(10, true)}) return true end, info = function(self, t) return ([[Call upon the power of the Eternals, increasing all damage by %d%% and reducing all damage taken by %d%% for 5 turns. - The bonus will increase with the Willpower stat.]]):format(7 + self:getWil(10), 7 + self:getWil(10)) + The bonus will increase with the Willpower stat.]]):format(7 + self:getWil(10, true), 7 + self:getWil(10, true)) end, } @@ -443,7 +443,7 @@ cooldown = function(self, t) return 50 - self:getTalentLevel(t) * 5 end, range = 1, no_npc_use = true, - getRange = function(self, t) return math.floor(1 + self:getCon(4) + self:getTalentLevel(t)) end, + getRange = function(self, t) return math.floor(1 + self:getCon(4, true) + self:getTalentLevel(t)) end, action = function(self, t) local tg = {type="bolt", range=self:getTalentRange(t), nolock=true, talent=t} local x, y = self:getTarget(tg) @@ -546,12 +546,12 @@ cooldown = function(self, t) return 50 - self:getTalentLevel(t) * 4 end, tactical = { ATTACK = 2 }, action = function(self, t) - self:setEffect(self.EFF_ORC_FURY, 5, {power=10 + self:getWil(20)}) + self:setEffect(self.EFF_ORC_FURY, 5, {power=10 + self:getWil(20, true)}) return true end, info = function(self, t) return ([[Summons your lust for blood and destruction, increasing all damage by %d%% for 5 turns. - The bonus will increase with the Willpower stat.]]):format(10 + self:getWil(20)) + The bonus will increase with the Willpower stat.]]):format(10 + self:getWil(20, true)) end, } @@ -655,7 +655,7 @@ self:project(tg, x, y, function(px, py) local target = game.level.map(px, py, Map.ACTOR) if not target or target.dead then return end - if not target:canBe("instakill") or target.rank > 2 or target.undead or not target:checkHit(self:getWil(20) + self.level * 1.5, target.level) then + if not target:canBe("instakill") or target.rank > 2 or target.undead or not target:checkHit(self:getWil(20, true) + self.level * 1.5, target.level) then game.logSeen(target, "%s resists the mental assault!", target.name:capitalize()) return end Index: game/modules/tome/data/talents/gifts/summon-melee.lua =================================================================== --- game/modules/tome/data/talents/gifts/summon-melee.lua (revision 3932) +++ game/modules/tome/data/talents/gifts/summon-melee.lua (working copy) @@ -57,7 +57,7 @@ autolevel = "none", ai = "summoned", ai_real = "dumb_talented_simple", ai_state = { talent_in=5, }, stats = {str=0, dex=0, con=0, cun=0, wil=0, mag=0}, - inc_stats = { str=15 + (self:getWil(130) * self:getTalentLevel(t) / 5) + (self:getTalentLevel(t) * 2), dex=10 + self:getTalentLevel(t) * 2, mag=5, con=15 + self:getTalentLevelRaw(self.T_RESILIENCE)*2 }, + inc_stats = { str=15 + (self:getWil(130, true) * self:getTalentLevel(t) / 5) + (self:getTalentLevel(t) * 2), dex=10 + self:getTalentLevel(t) * 2, mag=5, con=15 + self:getTalentLevelRaw(self.T_RESILIENCE)*2 }, level_range = {self.level, self.level}, exp_worth = 0, global_speed = 1.2, @@ -84,7 +84,7 @@ Your summons inherit some of your stats: increased damage%%, stun/pin/confusion/blindness resistance, armour penetration. Strength stat will increase with your Willpower stat.]]) :format(math.ceil(self:getTalentLevel(t)) + 5 + self:getTalentLevelRaw(self.T_RESILIENCE), - 15 + (self:getWil(130) * self:getTalentLevel(t) / 5) + (self:getTalentLevel(t) * 2), + 15 + (self:getWil(130, true) * self:getTalentLevel(t) / 5) + (self:getTalentLevel(t) * 2), 10 + self:getTalentLevel(t) * 2, 15 + self:getTalentLevelRaw(self.T_RESILIENCE)*2) end, @@ -222,7 +222,7 @@ ai = "summoned", ai_real = "dumb_talented_simple", ai_state = { talent_in=2, }, global_speed=1.2, stats = {str=0, dex=0, con=0, cun=0, wil=0, mag=0}, - inc_stats = { str=25 + (self:getWil(140) * self:getTalentLevel(t) / 5) + (self:getTalentLevel(t) * 2), dex=18, con=10 + self:getTalentLevel(t) * 2 + self:getTalentLevelRaw(self.T_RESILIENCE)*2, }, + inc_stats = { str=25 + (self:getWil(140, true) * self:getTalentLevel(t) / 5) + (self:getTalentLevel(t) * 2), dex=18, con=10 + self:getTalentLevel(t) * 2 + self:getTalentLevelRaw(self.T_RESILIENCE)*2, }, desc = [[It is a cross between a human and a bull.]], resolvers.equip{ {type="weapon", subtype="battleaxe", auto_req=true}, }, @@ -248,7 +248,7 @@ Your summons inherit some of your stats: increased damage%%, stun/pin/confusion/blindness resistance, armour penetration. Strength stat will increase with your Willpower stat.]]) :format(self:getTalentLevel(t) + 2 + self:getTalentLevelRaw(self.T_RESILIENCE), - 25 + (self:getWil(140) * self:getTalentLevel(t) / 5) + (self:getTalentLevel(t) * 2), + 25 + (self:getWil(140, true) * self:getTalentLevel(t) / 5) + (self:getTalentLevel(t) * 2), 10 + self:getTalentLevel(t) * 2 + self:getTalentLevelRaw(self.T_RESILIENCE)*2) end, } @@ -300,7 +300,7 @@ autolevel = "none", ai = "summoned", ai_real = "dumb_talented_simple", ai_state = { talent_in=2, }, stats = {str=0, dex=0, con=0, cun=0, wil=0, mag=0}, - inc_stats = { str=25 + (self:getWil(120) * self:getTalentLevel(t) / 5) + (self:getTalentLevel(t) * 2), dex=18, con=10 + self:getTalentLevel(t) * 2 + self:getTalentLevelRaw(self.T_RESILIENCE)*2, }, + inc_stats = { str=25 + (self:getWil(120, true) * self:getTalentLevel(t) / 5) + (self:getTalentLevel(t) * 2), dex=18, con=10 + self:getTalentLevel(t) * 2 + self:getTalentLevelRaw(self.T_RESILIENCE)*2, }, desc = [[It is a massive animated statue.]], level_range = {self.level, self.level}, exp_worth = 0, @@ -328,7 +328,7 @@ Your summons inherit some of your stats: increased damage%%, stun/pin/confusion/blindness resistance, armour penetration. Strength stat will increase with your Willpower stat.]]) :format(math.ceil(self:getTalentLevel(t)) + 5 + self:getTalentLevelRaw(self.T_RESILIENCE), - 25 + (self:getWil(120) * self:getTalentLevel(t) / 5) + (self:getTalentLevel(t) * 2), + 25 + (self:getWil(120, true) * self:getTalentLevel(t) / 5) + (self:getTalentLevel(t) * 2), 10 + self:getTalentLevel(t) * 2 + self:getTalentLevelRaw(self.T_RESILIENCE)*2) end, } Index: game/modules/tome/data/talents/gifts/call.lua =================================================================== --- game/modules/tome/data/talents/gifts/call.lua (revision 3932) +++ game/modules/tome/data/talents/gifts/call.lua (working copy) @@ -39,7 +39,7 @@ end local dur = 17 - self:getTalentLevel(t) - local e = 10 + self:getWil(50) * self:getTalentLevel(t) + local e = 10 + self:getWil(50, true) * self:getTalentLevel(t) local tt = e / 2 local pt = (e - tt) / dur self:setEffect(self.EFF_MEDITATION, dur, {per_turn=pt, final=tt}) @@ -49,7 +49,7 @@ end, info = function(self, t) local dur = 17 - self:getTalentLevel(t) - local e = 10 + self:getWil(50) * self:getTalentLevel(t) + local e = 10 + self:getWil(50, true) * self:getTalentLevel(t) local tt = e / 2 local pt = (e - tt) / dur return ([[Meditate on your link with Nature. You are considered dazed for %d turns Index: game/modules/tome/data/general/npcs/vermin.lua =================================================================== --- game/modules/tome/data/general/npcs/vermin.lua (revision 3932) +++ game/modules/tome/data/general/npcs/vermin.lua (working copy) @@ -79,11 +79,11 @@ on_die = function(self, src) game.level.map:addEffect(self, self.x, self.y, 5, - engine.DamageType.BLIGHT, self:getStr(90), + engine.DamageType.BLIGHT, self:getStr(90, true), 2, 5, nil, engine.Entity.new{alpha=100, display='', color_br=30, color_bg=180, color_bb=60} ) game.logSeen(self, "%s exudes a corrupted gas as it dies.", self.name:capitalize()) end, -} \ No newline at end of file +} Index: game/modules/tome/data/general/npcs/sandworm.lua =================================================================== --- game/modules/tome/data/general/npcs/sandworm.lua (revision 3932) +++ game/modules/tome/data/general/npcs/sandworm.lua (working copy) @@ -159,7 +159,7 @@ on_die = function(self, src) game.level.map:addEffect(self, self.x, self.y, 5, - engine.DamageType.ACID, self:getStr(90), + engine.DamageType.ACID, self:getStr(90, true), 3, 5, nil, {type="vapour"} Index: game/modules/tome/data/general/objects/egos/wands.lua =================================================================== --- game/modules/tome/data/general/objects/egos/wands.lua (revision 3932) +++ game/modules/tome/data/general/objects/egos/wands.lua (working copy) @@ -119,7 +119,7 @@ local tg = {type="beam", range=6 + who:getMag(4)} local x, y = who:getTarget(tg) if not x or not y then return nil end - local dam = (40 + who:getMag(20)) * self.material_level + local dam = (40 + who:getMag(20, true)) * self.material_level who:project(tg, x, y, engine.DamageType.LIGHTNING, rng.avg(dam / 3, dam, 3)) local _ _, x, y = who:canProject(tg, x, y) game.level.map:particleEmitter(who.x, who.y, math.max(math.abs(x-who.x), math.abs(y-who.y)), "lightning", {tx=x-who.x, ty=y-who.y}) @@ -139,7 +139,7 @@ local tg = {type="beam", range=6 + who:getMag(4)} local x, y = who:getTarget(tg) if not x or not y then return nil end - local dam = (35 + who:getMag(20)) * self.material_level + local dam = (35 + who:getMag(20, true)) * self.material_level who:project(tg, x, y, engine.DamageType.FIRE, dam, {type="flame"}) game:playSoundNear(who, "talents/fire") game.logSeen(who, "%s uses %s!", who.name:capitalize(), self:getName{no_count=true}) @@ -157,7 +157,7 @@ local tg = {type="bolt", range=10 + who:getMag(10)} local x, y = who:getTarget(tg) if not x or not y then return nil end - local dam = (45 + who:getMag(25)) * self.material_level + local dam = (45 + who:getMag(25, true)) * self.material_level local elem = rng.table{ {engine.DamageType.FIRE, "flame"}, {engine.DamageType.COLD, "freeze"}, @@ -183,7 +183,7 @@ local tg = {default_target=who, type="hit", nowarning=true, range=6 + who:getMag(4), first_target="friend"} local x, y = who:getTarget(tg) if not x or not y then return nil end - local dam = (80 + who:getMag(50)) * self.material_level + local dam = (80 + who:getMag(50, true)) * self.material_level who:project(tg, x, y, engine.DamageType.HEAL, dam) game:playSoundNear(who, "talents/heal") game.logSeen(who, "%s uses %s!", who.name:capitalize(), self:getName{no_count=true}) Index: game/modules/tome/data/general/objects/egos/belt.lua =================================================================== --- game/modules/tome/data/general/objects/egos/belt.lua (revision 3932) +++ game/modules/tome/data/general/objects/egos/belt.lua (working copy) @@ -45,7 +45,7 @@ }, max_power = 120, power_regen = 1, use_power = { name = "create a temporary shield that absorbs damage", power = 100, use = function(self, who) - local power = 100 + who:getMag(120) + local power = 100 + who:getMag(120, true) who:setEffect(who.EFF_DAMAGE_SHIELD, 10, {power=power}) game.logSeen(who, "%s uses %s!", who.name:capitalize(), self:getName{no_count=true}) return true, nil, true @@ -478,4 +478,4 @@ combat_physresist = resolvers.mbonus_material(7, 3), combat_spellresist = resolvers.mbonus_material(7, 3), }, -} \ No newline at end of file +}