Skip to content

Add network mode option for Kinetic Fusillade effective attack rate#9885

Open
hackoh wants to merge 2 commits into
PathOfBuildingCommunity:devfrom
hackoh:kinetic-fusillade-network-mode
Open

Add network mode option for Kinetic Fusillade effective attack rate#9885
hackoh wants to merge 2 commits into
PathOfBuildingCommunity:devfrom
hackoh:kinetic-fusillade-network-mode

Conversation

@hackoh

@hackoh hackoh commented Jun 12, 2026

Copy link
Copy Markdown

Description of the problem being solved:

Kinetic Fusillade's max effective attack rate depends on the network mode: in-game testing showed that Lockstep rounds the projectile fire delay up to server ticks while Predictive does not (see #9362 and #9452, where this difference was discovered and is already noted in a code comment and shown in the Calcs breakdown). However:

  • Only the Lockstep value is actually used for DPS (via dpsMultiplier scaling), so players on Predictive see a pessimistic DPS and wrong breakpoints.
  • The sidebar Attack Rate always shows the raw attack speed, even when a large part of it is wasted, which is misleading when comparing gear or tree changes.
  • The cap is not applied to the "1 Projectile" skill part at all.

This PR adds a "Network mode" (Lockstep / Predictive) option to the Configuration tab, shown only when Kinetic Fusillade or Kinetic Fusillade of Detonation is socketed, defaulting to Lockstep (current behaviour).

Implementation notes:

  • The cap is now applied by clamping output.Speed to the selected mode's max effective rate. For the "All Projectiles" part this is mathematically equivalent to the previous dpsMultiplier scaling (avg × APS × count × cap/APS ≡ avg × min(APS, cap) × count), but it additionally makes the sidebar Attack Rate, ailment calcs and the "1 Projectile" part consistent with the effective rate.
  • The previous dpsMultiplier efficiency scaling is removed, since keeping both would double-count the penalty.
  • The Calcs breakdown still shows both Lockstep and Predictive numbers, and now also displays which mode is selected.
  • src/Data/Skills/act_int.lua and src/Export/Skills/act_int.txt are kept in sync.

Steps taken to verify a working solution:

  • Verified that Total DPS in Lockstep mode is bit-identical before/after this change on a 12-projectile ballista build (confirms the equivalence of the two capping approaches).
  • Verified that switching to Predictive removes the server-tick rounding on the same build (effective APS cap 7.58 → 8.34, above the build's 8.29 raw APS, Total DPS +9.4%).
  • Verified that attack speed changes (e.g. toggling Haste) now propagate to DPS proportionally while below the cap, and are correctly treated as wasted above it.
  • Verified the Configuration option only appears when a Kinetic Fusillade gem is socketed.

Link to a build that showcases this PR:

https://pobb.in/4mxi3Ncmborf

Before screenshot:

Sidebar shows the raw attack rate (8.29) even though most of it is wasted:

Breakdown shows both modes but there is no way to choose which one applies:

After screenshot:

Lockstep (default) — Total DPS is identical to before; the sidebar Attack Rate now shows the effective rate:

Predictive — server-tick rounding removed (+9.4% DPS on this build):

Breakdown now shows the selected mode:

local added 2 commits June 12, 2026 16:10
Kinetic Fusillade's max effective attack rate differs between network
modes: Lockstep rounds the projectile fire delay up to server ticks
while Predictive does not. The calculation already derived both values
but only used the Lockstep one, and only to scale dpsMultiplier for the
"All Projectiles" part, so the sidebar Attack Rate still showed the raw
(wasted) attack speed.

Changes:
- Add a "Network mode" list option (Lockstep/Predictive) to the
  Configuration tab, shown only when Kinetic Fusillade or Kinetic
  Fusillade of Detonation is used. Defaults to Lockstep.
- Cap output.Speed at the selected mode's max effective rate so the
  sidebar Attack Rate, DPS and downstream calcs (ailments) reflect it.
- Remove the dpsMultiplier efficiency scaling, as capping output.Speed
  is mathematically equivalent for part 1 (avg * APS * count * cap/APS
  == avg * min(APS, cap) * count) and would otherwise double-count the
  penalty. The cap now also applies to the "1 Projectile" part.
- Show the selected mode in the Max Effective APS breakdown.
src/Data/Skills/act_int.lua is generated from src/Export/Skills/act_int.txt,
so the same changes are applied to the export source to keep them in sync.
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.

1 participant