diff --git a/game/modules/tome/class/Actor.lua b/game/modules/tome/class/Actor.lua index ba682e64c3412412331983ac465d9d89fdbdd48d..41ade7a08b01fbcc3b6f1dcb04fdccc3371e5e0d 100644 --- a/game/modules/tome/class/Actor.lua +++ b/game/modules/tome/class/Actor.lua @@ -92,6 +92,7 @@ function _M:init(t, no_default) t.life_rating = t.life_rating or 10 t.mana_rating = t.mana_rating or 4 + t.vim_rating = t.vim_rating or 4 t.stamina_rating = t.stamina_rating or 3 t.positive_negative_rating = t.positive_negative_rating or 3 @@ -119,6 +120,7 @@ function _M:init(t, no_default) t.stamina_regen = t.stamina_regen or 0.3 -- Stamina regens slower than mana t.life_regen = t.life_regen or 0.25 -- Life regen real slow t.equilibrium_regen = t.equilibrium_regen or 0 -- Equilibrium does not regen + t.vim_regen = t.vim_regen or 0 -- Vim does not regen t.positive_regen = t.positive_regen or -0.2 -- Positive energy slowly decays t.negative_regen = t.negative_regen or -0.2 -- Positive energy slowly decays @@ -525,10 +527,17 @@ function _M:onTakeHit(value, src) game.logSeen(self, "The displacement shield teleports the damage to %s!", self.displacement_shield_target.name) self.displacement_shield = self.displacement_shield - value self.displacement_shield_target:takeHit(value, src) + self:removeEffect(self.EFF_BONE_SHIELD) value = 0 end end + if self:isTalentActive(self.T_BONE_SHIELD) then + local t = self:getTalentFromId(self.T_BONE_SHIELD) + t.absorb(self, t, self:isTalentActive(self.T_BONE_SHIELD)) + value = 0 + end + -- Mount takes some damage ? local mount = self:hasMount() if mount and mount.mount.share_damage then @@ -640,6 +649,7 @@ end function _M:resetToFull() self.life = self.max_life self.mana = self.max_mana + self.vim = self.max_vim self.stamina = self.max_stamina self.equilibrium = 0 end @@ -690,6 +700,7 @@ function _M:levelup() end self.max_life = self.max_life + math.max(self:getRankLifeAdjust(rating), 1) + self:incMaxVim(self.vim_rating) self:incMaxMana(self.mana_rating) self:incMaxStamina(self.stamina_rating) self:incMaxPositive(self.positive_negative_rating) diff --git a/game/modules/tome/data/general/npcs/orc-rak-shor.lua b/game/modules/tome/data/general/npcs/orc-rak-shor.lua index 120a655265cb82aa9961b9958767e75f37b0bcdd..7f34508e080083f24871ac1f86049a4c32e83cfb 100644 --- a/game/modules/tome/data/general/npcs/orc-rak-shor.lua +++ b/game/modules/tome/data/general/npcs/orc-rak-shor.lua @@ -113,7 +113,7 @@ newEntity{ base = "BASE_NPC_ORC_RAK_SHOR", [Talents.T_BLOOD_GRASP]=5, [Talents.T_CURSE_OF_VULNERABILITY]=5, [Talents.T_BLIGHTZONE]=3, --- [Talents.T_BONE_SHIELD]=5, + [Talents.T_BONE_SHIELD]=5, [Talents.T_BLOOD_SPRAY]=4, }, } diff --git a/game/modules/tome/data/gfx/particles/bone_shield.lua b/game/modules/tome/data/gfx/particles/bone_shield.lua new file mode 100644 index 0000000000000000000000000000000000000000..341b302cb4c13effcdaf20f6acf850b7ca99e136 --- /dev/null +++ b/game/modules/tome/data/gfx/particles/bone_shield.lua @@ -0,0 +1,43 @@ +-- ToME - Tales of Middle-Earth +-- Copyright (C) 2009, 2010 Nicolas Casalini +-- +-- This program is free software: you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see <http://www.gnu.org/licenses/>. +-- +-- Nicolas Casalini "DarkGod" +-- darkgod@te4.org + +local ad = rng.range(0, 360) +local a = math.rad(ad) +local r = 18 + +return { generator = function() + return { + life = 20, + size = 4, sizev = 0, sizea = 0, + + x = r * math.cos(a), xv = 0, xa = 0, + y = r * math.sin(a), yv = 0, ya = 0, + dir = 0, dirv = 0, dira = 0, + vel = 0, velv = 0, vela = 0, + + r = rng.range(220, 255)/255, rv = 0, ra = 0, + g = rng.range(220, 255)/255, gv = 0, ga = 0, + b = rng.range(220, 255)/255, gv = 0, ga = 0, + a = rng.range(230, 225)/255, av = 0, aa = 0, + } +end, }, +function(self) + self.ps:emit(1) +end, +1 diff --git a/game/modules/tome/data/talents/misc/npcs.lua b/game/modules/tome/data/talents/misc/npcs.lua index 5d43b88d404931cde1e730892f24433f9b9eca65..ab8c4fe7d0636496380377b5c26becad79ca721f 100644 --- a/game/modules/tome/data/talents/misc/npcs.lua +++ b/game/modules/tome/data/talents/misc/npcs.lua @@ -975,3 +975,45 @@ newTalent{ The resistances will decrease with Magic stat.]]):format(self:combatTalentSpellDamage(t, 10, 85)) end, } + +newTalent{ + name = "Bone Shield", + type = {"corruption/other", 1}, + points = 5, + mode = "sustained", no_sustain_autoreset = true, + cooldown = 60, + sustain_vim = 70, + tactical = { + DEFEND = 10, + }, + absorb = function(self, t, p) + game.logPlayer(self, "Your bone shield absorbs the damage!") + self:removeParticles(table.remove(p.particles)) + if #p.particles <= 0 then + local old = self.energy.value + self.energy.value = 100000 + self:useTalent(t.id) + self.energy.value = old + end + end, + activate = function(self, t) + local nb = math.floor(self:getTalentLevel(t)) + + local ps = {} + for i = 1, nb do ps[#ps+1] = self:addParticles(Particles.new("bone_shield", 1)) end + + game:playSoundNear(self, "talents/spell_generic2") + return { + particles = ps, + } + end, + deactivate = function(self, t, p) + for i, particle in ipairs(p.particles) do self:removeParticles(particle) end + return true + end, + info = function(self, t) + return ([[Bone shields start circling around you, they will each absorb fully one attack. + %d shield(s) will be generated.]]): + format(math.floor(self:getTalentLevel(t))) + end, +}