diff --git a/game/modules/tome/class/Actor.lua b/game/modules/tome/class/Actor.lua index 1c1fb340325f4ab39b5afa89cb4a6a308de94a5e..5f3476796f848cfce5aaf56ed27c8dc449b63c20 100644 --- a/game/modules/tome/class/Actor.lua +++ b/game/modules/tome/class/Actor.lua @@ -5548,6 +5548,22 @@ function _M:worthExp(target) end end +--- Burn arcane resources +-- @param damage how much to burn +-- @return how much have been burned +function _M:burnArcaneResources(damage) + local mana = math.min(self:getMana(), damage) + local vim = math.min(self:getVim(), damage/2) + local pos = math.min(self:getPositive(), damage/4) + local neg = math.min(self:getNegative(), damage/4) + self:incMana(-mana) + self:incVim(-vim) + self:incPositive(-pos) + self:incNegative(-neg) + + return math.max(mana, vim * 2, pos * 4, neg * 4) +end + --- Find effects based on a filter, up to nb. function _M:effectsFilter(t, nb) local effs = {} diff --git a/game/modules/tome/data/damage_types.lua b/game/modules/tome/data/damage_types.lua index e92c651a92e67582ab5402e17ab338478bf70a69..14164a3fc95df7f153ad0abddc8aef250f9ceaef 100644 --- a/game/modules/tome/data/damage_types.lua +++ b/game/modules/tome/data/damage_types.lua @@ -2030,23 +2030,7 @@ newDamageType{ projector = function(src, x, y, type, dam) local target = game.level.map(x, y, Map.ACTOR) if target then - -- Note: Standardize this conversion somewhere in Actor.lua - local mana = dam - local vim = dam / 2 - local positive = dam / 4 - local negative = dam / 4 - - mana = math.min(target:getMana(), mana) - vim = math.min(target:getVim(), vim) - positive = math.min(target:getPositive(), positive) - negative = math.min(target:getNegative(), negative) - - target:incMana(-mana) - target:incVim(-vim) - target:incPositive(-positive) - target:incNegative(-negative) - - local dam = math.max(mana, vim * 2, positive * 4, negative * 4) + dam = target.burnArcaneResources and target:burnArcaneResources(dam) or 0 return DamageType:get(DamageType.ARCANE).projector(src, x, y, DamageType.ARCANE, dam) end return 0 @@ -3046,22 +3030,7 @@ newDamageType{ projector = function(src, x, y, type, dam) local target = game.level.map(x, y, Map.ACTOR) if target then - local mana = dam - local vim = dam / 2 - local positive = dam / 4 - local negative = dam / 4 - - mana = math.min(target:getMana(), mana) - vim = math.min(target:getVim(), vim) - positive = math.min(target:getPositive(), positive) - negative = math.min(target:getNegative(), negative) - - target:incMana(-mana) - target:incVim(-vim) - target:incPositive(-positive) - target:incNegative(-negative) - - local dam = math.max(mana, vim * 2, positive * 4, negative * 4) + dam = target.burnArcaneResources and target:burnArcaneResources(dam) or 0 return DamageType:get(DamageType.ARCANE).projector(src, x, y, DamageType.ARCANE, dam) end return 0