From fe6d369cb70d99d36e24cb4e2535fd0e24303dce Mon Sep 17 00:00:00 2001 From: Kalle <38327916+Sendouc@users.noreply.github.com> Date: Thu, 24 Sep 2026 21:44:58 +0300 Subject: [PATCH] Add IA Squid Roll effect to analyzer Closes #961 --- app/features/build-analyzer/analyzer-types.ts | 1 + .../build-analyzer/core/stats.test.ts | 11 ++++++++++ app/features/build-analyzer/core/stats.ts | 21 +++++++++++++++++++ .../build-analyzer/routes/analyzer.tsx | 6 ++++++ .../2026-09-24-analyzer-squid-roll-speed.md | 5 +++++ locales/da/analyzer.json | 1 + locales/de/analyzer.json | 1 + locales/en/analyzer.json | 1 + locales/es-ES/analyzer.json | 1 + locales/es-US/analyzer.json | 1 + locales/fr-CA/analyzer.json | 1 + locales/fr-EU/analyzer.json | 1 + locales/he/analyzer.json | 1 + locales/it/analyzer.json | 1 + locales/ja/analyzer.json | 1 + locales/ko/analyzer.json | 1 + locales/nl/analyzer.json | 1 + locales/pl/analyzer.json | 1 + locales/pt-BR/analyzer.json | 1 + locales/ru/analyzer.json | 1 + locales/zh/analyzer.json | 1 + 21 files changed, 60 insertions(+) create mode 100644 changelog/2026-09-24-analyzer-squid-roll-speed.md diff --git a/app/features/build-analyzer/analyzer-types.ts b/app/features/build-analyzer/analyzer-types.ts index 1c1111386..80e39cbed 100644 --- a/app/features/build-analyzer/analyzer-types.ts +++ b/app/features/build-analyzer/analyzer-types.ts @@ -325,6 +325,7 @@ export interface AnalyzedBuild { shotAutofireSpreadAir?: Stat; shotAutofireSpreadGround?: number; squidSurgeChargeFrames: Stat; + squidRollSpeedRetained: Stat; subDefPointSensorMarkedTimeInSeconds: Stat; subDefInkMineMarkedTimeInSeconds: Stat; diff --git a/app/features/build-analyzer/core/stats.test.ts b/app/features/build-analyzer/core/stats.test.ts index 06628aa93..5a997baf7 100644 --- a/app/features/build-analyzer/core/stats.test.ts +++ b/app/features/build-analyzer/core/stats.test.ts @@ -229,6 +229,17 @@ describe("Analyze build", () => { expect(analyzed.stats.jumpHeightInEnemyInk.value).toBe(1.1); }); + test("IA removes the speed loss of consecutive Squid Rolls", () => { + const analyzed = buildStats({ + weaponSplId: 40, + abilityPoints: new Map([["IA", 57]]), + hasTacticooler: false, + }); + + expect(analyzed.stats.squidRollSpeedRetained.baseValue).toBe(85); + expect(analyzed.stats.squidRollSpeedRetained.value).toBe(100); + }); + test("Accounts for Jr. big ink tank with main weapon ink consumption %", () => { const analyzedJr = buildStats({ weaponSplId: 10, diff --git a/app/features/build-analyzer/core/stats.ts b/app/features/build-analyzer/core/stats.ts index 9dfc29d81..616dec4ed 100644 --- a/app/features/build-analyzer/core/stats.ts +++ b/app/features/build-analyzer/core/stats.ts @@ -156,6 +156,7 @@ export function buildStats({ shotAutofireSpreadAir: shotAutofireSpreadAir(input), shotAutofireSpreadGround: mainWeaponParams.Variable_Stand_DegSwerve, squidSurgeChargeFrames: squidSurgeChargeFrames(input), + squidRollSpeedRetained: squidRollSpeedRetained(input), subDefPointSensorMarkedTimeInSeconds: subDefPointSensorMarkedTimeInSeconds(input), subDefInkMineMarkedTimeInSeconds: subDefInkMineMarkedTimeInSeconds(input), @@ -1232,6 +1233,26 @@ function squidSurgeChargeFrames( }; } +function squidRollSpeedRetained( + args: StatFunctionInput, +): AnalyzedBuild["stats"]["squidRollSpeedRetained"] { + const SQUID_ROLL_SPEED_RETAINED_ABILITY = "IA"; + const { baseEffect, effect } = abilityPointsToEffects({ + abilityPoints: apFromMap({ + abilityPoints: args.abilityPoints, + ability: SQUID_ROLL_SPEED_RETAINED_ABILITY, + }), + key: "Somersault_MoveVelKd", + weapon: args.mainWeaponParams, + }); + + return { + baseValue: effectToRounded(baseEffect * 100, 1), + value: effectToRounded(effect * 100, 1), + modifiedBy: SQUID_ROLL_SPEED_RETAINED_ABILITY, + }; +} + function damageTakenInEnemyInkPerSecond( args: StatFunctionInput, ): AnalyzedBuild["stats"]["damageTakenInEnemyInkPerSecond"] { diff --git a/app/features/build-analyzer/routes/analyzer.tsx b/app/features/build-analyzer/routes/analyzer.tsx index 6b501addb..8600c6484 100644 --- a/app/features/build-analyzer/routes/analyzer.tsx +++ b/app/features/build-analyzer/routes/analyzer.tsx @@ -922,6 +922,12 @@ function BuildAnalyzerPage() { stat={statKeyToTuple("squidSurgeChargeFrames")} title={t("analyzer:stat.squidSurgeChargeFrames")} /> +