Skip to content

Fix spectre buffs only applying from the selected spectre - #10225

Open
canuysal wants to merge 1 commit into
PathOfBuildingCommunity:devfrom
canuysal:fix_multiple_spectre_buffs
Open

Fix spectre buffs only applying from the selected spectre#10225
canuysal wants to merge 1 commit into
PathOfBuildingCommunity:devfrom
canuysal:fix_multiple_spectre_buffs

Conversation

@canuysal

Copy link
Copy Markdown
Contributor

Raise Spectre now instantiates every spectre in the spectre list so their buff, aura and curse skills are applied, instead of only the ones from the spectre currently selected on the skill. The selected spectre is still the only one used for minion DPS and defence calculations.

Fixes #9308.

Description of the problem being solved:

When Raise Spectre is enabled, only the spectre currently selected on the skill (defaulting to the first one in the Manage Spectres list) had its buff, aura and curse skills applied. For example, with Perfect Blood Demon, Perfect Forest Tiger and Perfect Guardian Turtle in the list, the Tiger's Haste and the Turtle's Determination were never applied unless that specific spectre was selected as the active minion. The only workaround was socketing one Raise Spectre gem per spectre.

Raise Spectre now instantiates every spectre in the spectre list so their buff, aura and curse skills are applied, instead of only the ones from the spectre currently selected on the skill. The selected spectre is still the only one used for minion DPS and defence calculations. Corpse-granted mods (ally/player/minion modifiers and the beast spectre condition) are also now applied from every spectre in the list rather than just the selected one.

This is based on the approach from the unmerged add_spectre-skill-buffs branch by @LocalIdentity (26cb0d1), rebased and adapted to the current dev codebase, with skillTypes/minionSkillTypes additionally carried into the temporary skill copy so support compatibility checks behave the same as for the main minion.

Steps taken to verify a working solution:

  • Added a regression test (spec/System/TestSpectreBuffs_spec.lua) reproducing the exact scenario above; it fails on current dev (Haste/Determination missing) and passes with this change
  • Full test suite passes in the official test container: 524 successes, 0 failures
  • Manually verified in the app that adding Perfect Forest Tiger and Perfect Guardian Turtle alongside Perfect Blood Demon now grants Haste and Determination to both the player and minions, and that removing spectres removes their buffs

Link to a build that showcases this PR:

Add perfect forest tiger - perfect blood demon, and perfect guardian turtle. Buffs should also affect players (turtle)
https://pobb.in/_S9pWnHIblbX

Before screenshot:

image image

After screenshot:

image

Raise Spectre now instantiates every spectre in the spectre list so their
buff, aura and curse skills are applied, instead of only the ones from the
spectre currently selected on the skill. The selected spectre is still the
only one used for minion DPS and defence calculations.
-- Instantiate the other spectres in the spectre list so their buff skills can be applied
if isSpectre then
activeSkill.spectreListMinions = activeSkill.spectreListMinions or { }
for _, spectreType in ipairs(minionList) do

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P1] Temporary spectres can exceed the active limit

Codex found that this changed loop activates every library entry for every Raise Spectre group without enforcing the calculated spectre limit. The supplied regression already uses three spectre types with a level-20 gem whose ActiveSpectreLimit is 2. In a five-entry reproducer, all five temporary minions are created and the overflow entries grant PDR, Onslaught, and three curses. This can materially inflate player and minion calculations whenever the library is larger than the available slots. Would it make sense to represent the actually active spectre types explicitly—or select them deterministically—and cap that set to ActiveSpectreLimit before downstream processing? An overflow regression could then confirm that extra library entries contribute no effects.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants