Skip to content

Valako, Storm's Embrace and Tasalio, Cleansing Water Ascendancy nodes applying effects twice #9481

Closed

Description

@zlohner

Check version

  • I'm running the latest version of Path of Building and I've verified this by checking the changelog

Check for duplicates

  • I've checked for duplicate open and closed issues by using the search function of the issue tracker

Check for support

  • I've checked that the calculation is supposed to be supported. If it isn't please open a feature request instead (Red text is a feature request).

What platform are you running Path of Building on?

Windows

What is the value from the calculation in-game?

In-game when I wear a chest giving +~25000 Fire Resistance and use other items/passive points giving +10 to Max Fire Res while having Valako, Storm's Embrace and Tasalio, Cleansing Water Chieftain ascendancy nodes, I get +10 to Max Cold/Lightning Res, and +~12500 Cold/Lightning Res.

What is the value from the calculation in Path of Building?

In Path of Building when I do the same, as well as equip Foulborn Choir of the Storm (Mana is increased by 50% of Overcapped Lightning Resistance variant), "Fire to Cold/Lightning Max Resistance Conversion" and "Fire to Cold/Lightning Resistance Conversion" values show up twice in the resistance calcs, and I end up with +20 to Max Cold/Lightning Res (showing as 90 while Max Fire Res shows as 85), and +~25000 Cold/Lightning Resistance.

How to reproduce the issue

Select Chieftain Ascendancy
Allocate Tasalio, Cleansing Water and Valako, Storm's Embrace ascendancy nodes
Add Foulborn Choir of the Storm (Mana is increased by 50% of Overcapped Lightning Resistance variant) as an item and equip it.
add "+25000 to Fire Resistance" and "+ 10 to Maximum Fire Resistance" as custom modifiers

PoB for PoE1 build code

https://pobb.in/AFpShXUm00yR

Screenshots

No response

Activity

  1. Peechey commented on Feb 24, 2026

    @Peechey
    Contributor

    Similar/duplicate of #9410 but keeping up for extra test case

  2. nidan-gaming commented on Mar 10, 2026

    @nidan-gaming

    Confirming this bug. Latest version of PoB seems to count Valako and Tasalio ascendancy nodes twice while a legacy Foulborn Choir of the Storm is equipped.

    The current version of Foulborn Choir of the Storm is not yet supported in PoB, and the mana is calculated correctly, but resistances are not - using a custom modifier to adjust the Tasalio effect seems to also incorrectly affect the mana from Choir. Adding a custom mod for the Tasalio node but changing its value to 25% (instead of 50%) seems to incorrectly cut total mana by half.

    Image

    As shown in this photo (using the aforementioned custom modifier), the approximate total mana should be 1809 * 64.92 (6392% increased) = ~117440.28 (my mana in game), but the calculation instead uses 32.92 as the multiplier, exactly 3200% below (reduced from) the correct amount. (1809 * 32.92 = 59,552.28 - the correct multiplier for 59561 mana would be 32.925 or 3292.5% increased). All other stats calculate correctly, and seem to use the correct mana value for subsequent calculation; for example, my total ES is correct in this case.

    Image

    With the Tasalio node allocated on the tree (and no custom modifier), as shown above, the mana calculates correctly, but anything scaling off of the total mana appears to double; increased damage from Transfiguration of Mind is doubled, increased Energy Shield from sources of Mana as Extra ES are doubled, etc. Not entirely sure how this happens, but it seems the variable for total mana behind the scenes is double what it should be, while it displays the correct total mana; or similarly, when using the custom modifier, calculates everything else correctly, but shows only half of the correct total mana value.

    For anyone else trying to test in PoB while this bug persists, I have been de-allocating the ascendancy nodes and adding the following custom configuration lines below.

    The Valako node is unfortunately not a scalable value as far as I was able to tell, and using the max res modifier from Melding of the Flesh does have some limitations; if below 90% max res, and a source of non-fire max res is added (such as a sapphire/topaz flask, an ally with Purity of Ice/Lightning, etc), it will not correctly add this as your Fire max res is still the highest. It's pretty close, though, under most circumstances.

    #==fix for bugged PoB values==
    #"fix" valako/tasalio
    Modifiers to Fire Resistance also apply to Cold and Lightning Resistances at 25% of their Value
    Elemental Resistances are capped by your highest Maximum Elemental Resistance instead
    #fix small ascendancy node since it's unallocated
    +15% to Fire Resistance
    Regenerate 0.5% of Life per second

  3. EminGul commented on Mar 12, 2026

    @EminGul
    Contributor

    @nidan-gaming Do you happen to have a build code/pobb.in link? It would be helpful to have another test case, thanks.

  4. TsunamiMommy commented on Mar 15, 2026

    @TsunamiMommy

    I can confirm this bug as well. But, there is another twist. The legacy Foulborn Choir of the storm amulet is bugged in game to show double the mana that it should. So, we have a case of PoB applying Tasalio/Valako twice, and the game itself not showing the correct mana values in the UI on top of modifying all the stat values in the game incorrectly. The ES value of characters using any mana gained as extra ES is a telltale sign that something isn't right. If we math out the values with the mana at half, they line up with the ES conversions in the game. It also maths out if we apply the calculations manually. But in game, we somehow get double the mana that we should, on top of PoB giving double mana (Which it shouldn't). Here is a build of mine that clearly demonstrates the issue. https://pobb.in/V41O4IvnojAr Note that based on the res values we should only be getting around 6400% increased maximum mana. This should result in an in game value of roughly half of what it is. Also, the Energy shield values in game line up with the correct mana calculation based on res, but all the UI doesn't reflect this when it comes to scaling damage (with arcane cloak), and stubborn student. Instead, we get doubled armour and Damage values instead. I'm not sure if it's the UI that's bugged or the game is somehow bugged and applying the mana increases twice... Either way, it's broken. So my build should only have ~60k mana and in game my es lines up with that at 70816 es. Which is pretty much dead on the money (there are a few rounding errors due to PoB though).

  5. nidan-gaming commented on Mar 15, 2026

    @nidan-gaming

    The legacy Foulborn Choir of the storm amulet is bugged in game to show double the mana that it should. So, we have a case of PoB applying Tasalio/Valako twice, and the game itself not showing the correct mana values in the UI on top of modifying all the stat values in the game incorrectly.

    This is not correct; the in-game mana values are correct, it's just wrong in PoB. The Foulborn Choir of the Storm interaction in PoB calculates total mana as if the resistances were correct from Tasalio, but Tasalio gives twice as much resistance as it should and subsequent calculations seem to re-calculate your total mana using the higher resistance, thus everything else that is calculated from the mana/resists is treated as if there is twice as much (eg. increased evasion from cold res, or mana as extra ES is doubled).

    In an empty level 100 PoB using the Choir of the Storm and the 25k fire resist chest, there is 673 base mana with PoB showing 12,547% increased mana from the Choir mod (it should only be 6232% - since the resistances are halved and you lose a little bit more than half the overcapped value). However, PoB shows the total mana correctly at 42,830 (6264% total increased with a perfectly rolled amulet with the Crusader anoint). If you use the custom config modifiers I put in my previous comment, you can see the correct total increase%, but then PoB shows mana as if the resistances were halved yet again (21,580).

    Here is a "blank" PoB you can use to demonstrate my above explanation. https://pobb.in/Rsa1zcDfVPkJ
    The custom configuration modifiers are included, but disabled with a # at the start. Unallocate the ascendancy nodes and re-enable the modifiers in the custom config to compare the difference between the "correct" calculations and the current PoB implementation. You can also edit the custom modifier to either 25%/50% to compare between the "correct" values - 25% calculates everything else correctly, while 50% (the value on Tasalio) will calculate only the mana correctly.

    @TsunamiMommy

    Here is a build of mine that clearly demonstrates the issue. https://pobb.in/V41O4IvnojAr Note that based on the res values we should only be getting around 6400% increased maximum mana. This should result in an in game value of roughly half of what it is. Also, the Energy shield values in game line up with the correct mana calculation based on res, but all the UI doesn't reflect this when it comes to scaling damage (with arcane cloak), and stubborn student. Instead, we get doubled armour and Damage values instead. I'm not sure if it's the UI that's bugged or the game is somehow bugged and applying the mana increases twice... Either way, it's broken. So my build should only have ~60k mana and in game my es lines up with that at 70816 es. Which is pretty much dead on the money (there are a few rounding errors due to PoB though).

    As mentioned before, with the PoB bug in question, you are experiencing a PoB bug rather than an in-game bug. Your mana in-game is calculated correctly, but PoB shows you having twice as much resistance from Tasalio than you are supposed to; your PoB has over 25000 lightning resistance, meaning Choir of the Storm is calculating that you should have over 12500% increased mana.

    Image

    The total mana calculation on the Calcs screen, however, uses the correct multiplier, despite listing a higher increased mana value - showing total mana that should match up with the in-game values:

    Image

    however, any calculations that are made based on your maximum mana are doubled, such as your Mana as Extra ES modifiers that you mentioned; it is re-calculating those values as if your mana were increased by the the 12714% increase listed in PoB rather than the correct 6398% (which PoB does use to calculate your total mana). You can see the correct calculations for everything except your mana by removing one Forbidden jewel and adding the following custom modifier:
    Modifiers to Fire Resistance also apply to Cold and Lightning Resistances at 25% of their Value

    This makes everything else calculate correctly, including your ES/damage numbers (since PoB is calculating everything else as if you have the correct amount of mana with the custom modifier), just that PoB will show you half of the correct mana value. You should actually have ~116k mana in game (the mana PoB shows with Tasalio), and ~70k ES (the ES PoB shows with the custom modifier).

    All of the math seems to be correct in-game when calculated by hand, so there's no issue in PoE itself, just the order of operations that PoB uses with these modifiers.

  6. TsunamiMommy commented on Mar 15, 2026

    @TsunamiMommy

    You're correct. I mistakenly assumed that the mana value in PoB was correct when it clearly isn't. Thanks for the clarification. I did the mana calculated by hand and they come out to what they are in game. We still need to fix Tasalio math with the foulborn choir of the storm equipped, as it's being incorrectly applied with the item equipped.

  7. TsunamiMommy commented on Mar 15, 2026

    @TsunamiMommy

    Found the issue. With the foulborn modifier, the calcs.resistance function is being incorrectly called twice, which then results in a doubling of the expected resistances. This is why we only see the problem when we add that amulet.

  8. TsunamiMommy commented on Mar 15, 2026

    @TsunamiMommy

    So a temporary fix I did was to use ReplaceMod instead of NewMod for the resistance conversion modifiers, so the mods get replaced on rerun of the calcs.resistance() function, which seems to be the expected behavior based on the call sites (though a dev could correct this if it's not intended). That fix could result in issues if there are valid stacking sources of conversion in the future, as it could lead to the mods being replaced rather than summed. Here is the code I modified in CalcDefense.lua

    -- Performs resistance calculations
    function calcs.resistances(actor)
    	local modDB = actor.modDB
    	local output = actor.output
    	local breakdown = actor.breakdown
    	output["PhysicalResist"] = 0
    
    	-- Process Resistance conversion mods
    	for _, resFrom in ipairs(resistTypeList) do
    		local maxRes
    		for _, resTo in ipairs(resistTypeList) do
    			local conversionRate = modDB:Sum("BASE", nil, resFrom.."MaxResConvertTo"..resTo) / 100
    			if conversionRate ~= 0 then
    				if not maxRes then
    					maxRes = 0
    					for _, mod in ipairs(modDB:Tabulate("BASE", nil, resFrom.."ResistMax")) do
    						if mod.mod.source ~= "Base" then
    							maxRes = maxRes + mod.value
    						end
    					end
    				end
    				if maxRes ~= 0 then
    					modDB:ReplaceMod(resTo.."ResistMax", "BASE", maxRes * conversionRate, resFrom.." To "..resTo.." Max Resistance Conversion")
    				end
    			end
    		end
    	end
    
    	for _, resFrom in ipairs(resistTypeList) do
    		local res
    		for _, resTo in ipairs(resistTypeList) do
    			local conversionRate = modDB:Sum("BASE", nil, resFrom.."ResConvertTo"..resTo) / 100
    			if conversionRate ~= 0 then
    				if not res then
    					res = 0
    					for _, mod in ipairs(modDB:Tabulate("BASE", nil, resFrom.."Resist")) do
    						if mod.mod.source ~= "Base" then
    							res = res + mod.value
    						end
    					end
    				end
    				if res ~= 0 then
    					modDB:ReplaceMod(resTo.."Resist", "BASE", res * conversionRate, resFrom.." To "..resTo.." Resistance Conversion")
    				end
    				for _, mod in ipairs(modDB:Tabulate("INC", nil, resFrom.."Resist")) do
    					modDB:ReplaceMod(resTo.."Resist", "INC", mod.value * conversionRate, mod.mod.source)
    				end
    				for _, mod in ipairs(modDB:Tabulate("MORE", nil, resFrom.."Resist")) do
    					modDB:ReplaceMod(resTo.."Resist", "MORE", mod.value * conversionRate, mod.mod.source)
    				end
    			end
    		end
    	end
    
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions