Add support for the Infernal Legion skill#2377
Draft
turlockmike wants to merge 3 commits into
Draft
Conversation
Some skills inflict an ailment as though dealing damage without actually hitting (e.g. Infernal Legion's burn "ignites as though dealing X"). Add a generic skillData flag, pseudoHitAilment, for such skills: - The skill inflicts only the ailment it represents: the restriction lives in canDoAilment, so on-hit ailment sources (a Poison support, etc.) can't ride along on the notional damage. This works the same for every ailment. - The hit itself deals no damage: hit outputs are zeroed after the ailment has been derived from the stored hit damage, so only the ailment/DoT counts toward DPS (and Full DPS aggregation). No skill sets the flag yet; Infernal Legion support builds on this.
Model the PoE2 Infernal Legion burn as a hidden minion skill granted by the Infernal Legion supports and Catha's Brilliance, which share the support_minions_ignite_for_%_max_life stat. PoE1's PoB models Infernal Legion as a FireDot aura (same shape as Righteous Fire) because the PoE1 support dealt fire damage per second. PoE2 changed the mechanic to an Ignite, which a plain DoT can't express (ailment magnitude, crit via Critical Weakness, ignite stacking). Keep the PoE1 hidden-skill architecture but change the payload: - The burn is a pseudo-hit Ignite: X% of the minion's maximum life is fed in as notional base fire damage, run through the normal damage pipeline, then discarded as a hit (pseudoHitAilment). - Fixed ignite cadence (~0.8/sec via timeOverride, matched to in-game timing); with the 4s ignite duration this drives the rolling-ignite stack potential. - Crit: no innate crit chance, so it crits only from enemy Critical Weakness; the minion's increased crit chance and crit damage each apply at half effectiveness; 50% base crit damage bonus instead of the minion's 100%. - Full DPS evaluates the IL extra skill even when another minion skill is selected, feeding the strongest-ignite comparison.
The IL extra-skill ignite was written straight into the Full DPS roll-up, so it was not part of the captured pass snapshot: a cached replay (item/tree comparison with unchanged inputs) silently dropped the ignite and understated Full DPS. Record the IL result as its own actor in the pass instead - mergeStats feeds it into the best-ignite comparison on live and cached merges alike, and the source column now names the skill (the old path set an unused global, leaving the Best Ignite DPS source blank).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Depends on #2376 (pseudo-hit support for ailment sources) and includes its commit — only the last two commits are new here. Second slice of splitting up #2320.
Description of the problem being solved:
The Infernal Legion supports and Catha's Brilliance make minions Ignite enemies for a percentage of the minion's maximum life (
support_minions_ignite_for_%_max_life). None of this was modelled, so IL minion builds showed no ignite at all. (Infernal Legion III was removed from the game in the current patch but is still present in the exported data; its statMap is updated for consistency and will drop out with the next GGPK export.)PoE1's PoB models Infernal Legion as a hidden minion skill with a
FireDotpayload (same shape as Righteous Fire), which was correct there because the PoE1 support dealt fire damage per second. PoE2 changed the mechanic to a real Ignite, which a plain DoT can't express — ailment magnitude, crit, ignite stacking. This PR keeps the PoE1 hidden-skill architecture (including theMultiplier:InfernalLegionBaseDamagewiring that already exists) and changes the payload:pseudoHitAilment, from Add pseudo-hit support for ailment sources #2376), so conversion/gain-as-extra and damage scaling behave like a real hit while hit DPS stays 0.timeOverridepins ~0.8 ignites/sec (matched to in-game timing); with the 4s ignite duration this drives the rolling-ignite stack potential.Deliberately excluded per the #2320 review, coming as separate PRs: Frost Bomb exposure, Aggravated Ignite, the Scouring Flame / Stormfire minion statMaps, and the "Minions have increased Magnitude of Damaging Ailments" parser line.
Steps taken to verify a working solution:
spec/System/TestInfernalLegion_spec.lua(7 tests): pseudo-hit deals no hit damage but ignites; 1.5x crit multiplier; half-effective increased crit damage; end-to-end ailment magnitude scaling; crit/ignite unchanged when Full DPS runs offence a second time; the IL ignite survives a cached Full DPS replay; no poison can ride the pseudo-hit.Link to a build that showcases this PR:
Import code for the reference minion army build (its full numbers also use the follow-up PRs above):
Build export code
Before screenshot:
After screenshot: