From 68d29ebdd473eef161f685f5be3a29a19bf0505c Mon Sep 17 00:00:00 2001 From: Xaver-DaRed Date: Wed, 7 Jan 2026 00:58:35 +0100 Subject: [PATCH] Don't reset "Nuke wall" on different element application Based on further testing from original source https://www.youtube.com/watch?v=PW7wuobIB0A --- scripts/globals/spells/damage_spell.lua | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/scripts/globals/spells/damage_spell.lua b/scripts/globals/spells/damage_spell.lua index 9f03adffeaf..d49612bb873 100644 --- a/scripts/globals/spells/damage_spell.lua +++ b/scripts/globals/spells/damage_spell.lua @@ -1046,32 +1046,29 @@ xi.spells.damage.calculateIfMagicBurstBonus = function(caster, target, spellId, end -- Consecutive Elemental Damage Penalty. Most commonly known as "Nuke Wall". -xi.spells.damage.calculateNukeWallFactor = function(target, spellElement, finalDamage) +local function calculateNukeWallFactor(target, spellElement, finalDamage) local nukeWallFactor = 1 -- Initial check. if not target:isNM() or -- Target is not an NM. spellElement <= xi.element.NONE or -- Action isn't elemental. - finalDamage < 0 -- Action hals target. + finalDamage < 0 -- Action heals target. then return nukeWallFactor end -- Calculate current effect potency and apply it to nukeWallFactor. local potency = 0 + local effect = target:getStatusEffect(xi.effect.NUKE_WALL) - if target:hasStatusEffect(xi.effect.NUKE_WALL) then - local effect = target:getStatusEffect(xi.effect.NUKE_WALL) - + if effect then -- Current nuke wall effect. - if spellElement == effect:getSubPower() then - potency = effect:getPower() + potency = effect:getPower() - -- Effect potency is reduced by 20% after 1 second and remains stable for the remaining time, unless refreshed. - if effect:getTimeRemaining() <= 4000 then - potency = utils.clamp(potency - 2000, 0, 4000) -- Potency is reduced by 2000 (20%) after first second has happened. Can't go below 0. - end + -- Effect potency is reduced by 20% after 1 second and remains stable for the remaining time, unless refreshed. + if effect:getTimeRemaining() <= 4000 then + potency = utils.clamp(potency - 2000, 0, 4000) -- Potency is reduced by 2000 (20%) after first second has happened. Can't go below 0. end -- Rayke effect. @@ -1223,10 +1220,8 @@ xi.spells.damage.useDamageSpell = function(caster, target, spell) finalDamage = math.floor(finalDamage * magicBurstBonus) -- Handle "Nuke Wall". It must be handled after all previous calculations, but before clamp. - if absorb > 0 then - local nukeWallFactor = xi.spells.damage.calculateNukeWallFactor(target, spellElement, finalDamage) - finalDamage = math.floor(finalDamage * nukeWallFactor) - end + local nukeWallFactor = calculateNukeWallFactor(target, spellElement, finalDamage) + finalDamage = math.floor(finalDamage * nukeWallFactor) -- Handle Magic Absorb message and HP recovery. if finalDamage < 0 then