From 6198dc2cb1eb0bb6426e1880eb1a19c609c222d8 Mon Sep 17 00:00:00 2001 From: dg <dg@51575b47-30f0-44d4-a5cc-537603b46e54> Date: Fri, 28 May 2010 23:50:59 +0000 Subject: [PATCH] all sustained talents deactivate if the ressoruce they depend on reaches 0 changed all speed mods to be a percent and compute them right (+100% means twice as fast not infinitely faster) git-svn-id: http://svn.net-core.org/repos/t-engine4@711 51575b47-30f0-44d4-a5cc-537603b46e54 --- game/modules/tome/class/Actor.lua | 13 +++++++++++++ game/modules/tome/class/Game.lua | 6 +++--- game/modules/tome/class/Store.lua | 2 ++ game/modules/tome/data/talents/spells/temporal.lua | 12 ++++++------ .../tome/data/talents/techniques/archery.lua | 8 ++++---- .../data/talents/techniques/combat-techniques.lua | 8 ++++---- .../tome/data/talents/techniques/dualweapon.lua | 4 ++-- 7 files changed, 34 insertions(+), 19 deletions(-) diff --git a/game/modules/tome/class/Actor.lua b/game/modules/tome/class/Actor.lua index 8bf01481a5..1daa10e984 100644 --- a/game/modules/tome/class/Actor.lua +++ b/game/modules/tome/class/Actor.lua @@ -131,6 +131,19 @@ function _M:act() self.changed = true + -- If ressources are too low, disable sustains + if self.mana < 1 or self.stamina < 1 then + for tid, _ in pairs(self.sustain_talents) do + local t = self:getTalentFromId(tid) + if (t.sustain_mana and self.mana < 1) or (t.sustain_stamina and self.stamina < 1) then + local old = self.energy.value + self.energy.value = 100000 + self:useTalent(tid) + self.energy.value = old + end + end + end + -- Cooldown talents self:cooldownTalents() -- Regen resources diff --git a/game/modules/tome/class/Game.lua b/game/modules/tome/class/Game.lua index 3d2e21b4f0..6419623c6d 100644 --- a/game/modules/tome/class/Game.lua +++ b/game/modules/tome/class/Game.lua @@ -280,9 +280,9 @@ function _M:changeLevel(lev, zone) self.zone:getLevel(self, lev, old_lev) -- Decay level ? - if self.level.last_turn and self.level.data.decay and self.level.last_turn + self.level.data.decay[1] < game.turn then - local nb_actor, remain_actor = self.level:decay(Map.ACTOR, function(e) return not e.unique and self.level.last_turn + rng.range(self.level.data.decay[1], self.level.data.decay[2]) < game.turn end) - local nb_object, remain_object = self.level:decay(Map.OBJECT, function(e) return not e.unique and self.level.last_turn + rng.range(self.level.data.decay[1], self.level.data.decay[2]) < game.turn end) + if self.level.last_turn and self.level.data.decay and self.level.last_turn + self.level.data.decay[1] < game.turn * 10 then + local nb_actor, remain_actor = self.level:decay(Map.ACTOR, function(e) return not e.unique and self.level.last_turn + rng.range(self.level.data.decay[1], self.level.data.decay[2]) < game.turn * 10 end) + local nb_object, remain_object = self.level:decay(Map.OBJECT, function(e) return not e.unique and self.level.last_turn + rng.range(self.level.data.decay[1], self.level.data.decay[2]) < game.turn * 10 end) local gen = self.zone:getGenerator("actor", self.level) if gen.regenFrom then gen:regenFrom(remain_actor) end diff --git a/game/modules/tome/class/Store.lua b/game/modules/tome/class/Store.lua index 221eff0706..14050d1423 100644 --- a/game/modules/tome/class/Store.lua +++ b/game/modules/tome/class/Store.lua @@ -33,6 +33,8 @@ function _M:init(t, no_default) t.buy_percent = t.buy_percent or 10 t.sell_percent = t.sell_percent or 100 Store.init(self, t, no_default) + + if self.store and self.store.restock_after then self.store.restock_after = self.store.restock_after * 10 end end --- Called on object purchase diff --git a/game/modules/tome/data/talents/spells/temporal.lua b/game/modules/tome/data/talents/spells/temporal.lua index ab2c408bb0..f282343d6b 100644 --- a/game/modules/tome/data/talents/spells/temporal.lua +++ b/game/modules/tome/data/talents/spells/temporal.lua @@ -58,13 +58,13 @@ newTalent{ local tg = {type="hit", range=self:getTalentRange(t), talent=t} local x, y = self:getTarget(tg) if not x or not y then return nil end - self:project(tg, x, y, DamageType.SLOW, util.bound((self:combatSpellpower(0.15) * self:getTalentLevel(t)) / 100, 0.1, 0.4), {type="manathrust"}) + self:project(tg, x, y, DamageType.SLOW, -1 + 1 / (1 + self:getTalentLevel(t) * 0.07), {type="manathrust"}) game:playSoundNear(self, "talents/spell_generic") return true end, info = function(self, t) - return ([[Decreases the target's global speed by %.2f for 7 turns. - The speed decrease improves with the Magic stat]]):format(util.bound((self:combatSpellpower(0.15) * self:getTalentLevel(t)) / 100, 0.1, 0.4)) + return ([[Decreases the target's global speed by %d%% for 7 turns. + The speed decrease improves with the Magic stat]]):format(self:getTalentLevel(t) * 7) end, } @@ -81,7 +81,7 @@ newTalent{ }, activate = function(self, t) game:playSoundNear(self, "talents/spell_generic") - local power = util.bound((self:combatSpellpower(0.5) * self:getTalentLevel(t)) / 100, 0.1, 2) + local power = 1 - 1 / (1 + self:getTalentLevel(t) * 0.07) return { speed = self:addTemporaryValue("energy", {mod=power}), } @@ -91,8 +91,8 @@ newTalent{ return true end, info = function(self, t) - return ([[Increases the caster's global speed by %.2f. - The speed increase improves with the Magic stat]]):format(util.bound((self:combatSpellpower(0.5) * self:getTalentLevel(t)) / 100, 0.1, 2)) + return ([[Increases the caster's global speed by %d%%. + The speed increase improves with the Magic stat]]):format(self:getTalentLevel(t) * 7) end, } diff --git a/game/modules/tome/data/talents/techniques/archery.lua b/game/modules/tome/data/talents/techniques/archery.lua index 2068d1c817..a5e0b8941f 100644 --- a/game/modules/tome/data/talents/techniques/archery.lua +++ b/game/modules/tome/data/talents/techniques/archery.lua @@ -73,7 +73,7 @@ newTalent{ return { move = self:addTemporaryValue("never_move", 1), - speed = self:addTemporaryValue("combat_physspeed", self:combatSpeed(weapon.combat) * (self:getTalentLevelRaw(t) * 0.1)), + speed = self:addTemporaryValue("combat_physspeed", self:combatSpeed(weapon.combat) - 1 / (1 + self:getTalentLevel(t) * 0.1)), 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)), @@ -90,7 +90,7 @@ newTalent{ return true end, info = function(self, t) - return ([[You enter a calm, focused stance, increasing your damage(+%d), attack(+%d), armor peneration(+%d), and critical chance(+%d%%)---but reducing your firing speed by %d%% and making you unable to move.]]): + return ([[You enter a calm, focused stance, increasing your damage(+%d), attack(+%d), armor peneration(+%d), and critical chance(+%d%%) but reducing your firing speed by %d%% and making you unable to move.]]): 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), self:getTalentLevelRaw(t) * 10) @@ -113,7 +113,7 @@ newTalent{ end return { - speed = self:addTemporaryValue("combat_physspeed", -self:combatSpeed(weapon.combat) * (self:getTalentLevelRaw(t) * 0.14)), + speed = self:addTemporaryValue("combat_physspeed", -self:combatSpeed(weapon.combat) + 1 / (1 + self:getTalentLevel(t) * 0.09)), atk = self:addTemporaryValue("combat_dam", -8 - self:getTalentLevelRaw(t) * 2.4), dam = self:addTemporaryValue("combat_atk", -8 - self:getTalentLevelRaw(t) * 2.4), crit = self:addTemporaryValue("combat_physcrit", -8 - self:getTalentLevelRaw(t) * 2.4), @@ -128,7 +128,7 @@ newTalent{ end, info = function(self, t) return ([[You switch to a fluid and fast battle stance, increasing your firing speed by %d%% at the cost of your accuracy(%d), damage(%d), and critical chance(%d).]]): - format(self:getTalentLevelRaw(t) * 14, -8 - self:getTalentLevelRaw(t) * 2.4, -8 - self:getTalentLevelRaw(t) * 2.4, -8 - self:getTalentLevelRaw(t) * 2.4) + format(self:getTalentLevelRaw(t) * 9, -8 - self:getTalentLevelRaw(t) * 2.4, -8 - self:getTalentLevelRaw(t) * 2.4, -8 - self:getTalentLevelRaw(t) * 2.4) end, } diff --git a/game/modules/tome/data/talents/techniques/combat-techniques.lua b/game/modules/tome/data/talents/techniques/combat-techniques.lua index 739e2ccdbd..759813ebb1 100644 --- a/game/modules/tome/data/talents/techniques/combat-techniques.lua +++ b/game/modules/tome/data/talents/techniques/combat-techniques.lua @@ -30,7 +30,7 @@ newTalent{ sustain_stamina = 30, activate = function(self, t) return { - speed = self:addTemporaryValue("combat_physspeed", self:combatSpeed() * (self:getTalentLevel(t) * 0.08)), + speed = self:addTemporaryValue("combat_physspeed", self:combatSpeed() - 1 / (1 + self:getTalentLevel(t) * 0.08)), atk = self:addTemporaryValue("combat_atk", 4 + (self:getTalentLevel(t) * self:getDex()) / 15), crit = self:addTemporaryValue("combat_physcrit", 4 + (self:getTalentLevel(t) * self:getDex()) / 25), } @@ -43,7 +43,7 @@ newTalent{ end, info = function(self, t) return ([[You focus your strikes, reducing your attack speed by %d%% and increasing your attack by %d and critical chance by %d%%.]]): - format(self:combatSpeed() * (self:getTalentLevel(t) * 8), 4 + (self:getTalentLevel(t) * self:getDex()) / 15, 4 + (self:getTalentLevel(t) * self:getDex()) / 25) + format((self:getTalentLevel(t) * 8), 4 + (self:getTalentLevel(t) * self:getDex()) / 15, 4 + (self:getTalentLevel(t) * self:getDex()) / 25) end, } @@ -55,11 +55,11 @@ newTalent{ stamina = 25, require = techs_strdex_req2, action = function(self, t) - self:setEffect(self.EFF_SPEED, 5, {power=1 + self:getTalentLevel(t) / 7}) + self:setEffect(self.EFF_SPEED, 5, {power=1 - (1 / (1 + self:getTalentLevel(t) * 0.06))}) return true end, info = function(self, t) - return ([[Through rigorous training you have learned to focus your actions for a short while, increasing your speed by %0.2f for 5 turns.]]):format(1 + self:getTalentLevel(t) / 7) + return ([[Through rigorous training you have learned to focus your actions for a short while, increasing your speed by %d%% for 5 turns.]]):format(self:getTalentLevel(t) * 6) end, } diff --git a/game/modules/tome/data/talents/techniques/dualweapon.lua b/game/modules/tome/data/talents/techniques/dualweapon.lua index 68b9e33523..da9b4bc119 100644 --- a/game/modules/tome/data/talents/techniques/dualweapon.lua +++ b/game/modules/tome/data/talents/techniques/dualweapon.lua @@ -83,7 +83,7 @@ newTalent{ end return { - combat_physspeed = self:addTemporaryValue("combat_physspeed", -self:combatSpeed(weapon.combat) * (self:getTalentLevel(t) * 0.14)), + combat_physspeed = self:addTemporaryValue("combat_physspeed", -self:combatSpeed(weapon.combat) + 1 / (1 + self:getTalentLevel(t) * 0.09)), stamina_regen = self:addTemporaryValue("stamina_regen", -6), } end, @@ -95,7 +95,7 @@ newTalent{ info = function(self, t) local weapon, offweapon = self:hasDualWeapon() weapon = weapon or {} - return ([[Increases attack speed by %d%%, but drains stamina quickly.]]):format(self:combatSpeed(weapon.combat) * (self:getTalentLevel(t) * 14)) + return ([[Increases attack speed by %d%%, but drains stamina quickly.]]):format(self:combatSpeed(weapon.combat) * (self:getTalentLevel(t) * 9)) end, } -- GitLab