diff --git a/packages/core/src/blitzkit/resolvePenetrationCoefficient.ts b/packages/core/src/blitzkit/resolvePenetrationCoefficient.ts index 9b1b5d474..da3b644be 100644 --- a/packages/core/src/blitzkit/resolvePenetrationCoefficient.ts +++ b/packages/core/src/blitzkit/resolvePenetrationCoefficient.ts @@ -1,16 +1,21 @@ -import { ShellType } from "../protos"; +import { Equalizer, ShellType } from "../protos"; export function resolvePenetrationCoefficient( calibratedShells: boolean, + equalize: boolean, type: ShellType, + equalizerObj?: Equalizer, ) { - if (!calibratedShells) return 1; + const calibrated = calibratedShells + ? type === ShellType.SHELL_TYPE_AP + ? 1.08 + : type === ShellType.SHELL_TYPE_APCR + ? 1.05 + : type === ShellType.SHELL_TYPE_HEAT + ? 1.13 + : 1.08 + : 1; + const equalizer = (equalize ? equalizerObj?.penetration : undefined) ?? 1; - return type === ShellType.SHELL_TYPE_AP - ? 1.08 - : type === ShellType.SHELL_TYPE_APCR - ? 1.05 - : type === ShellType.SHELL_TYPE_HEAT - ? 1.13 - : 1.08; + return calibrated * equalizer; } diff --git a/packages/website/src/components/Armor/components/PrimaryArmorSceneComponent/index.tsx b/packages/website/src/components/Armor/components/PrimaryArmorSceneComponent/index.tsx index 0daf46b1d..fe90d75fb 100644 --- a/packages/website/src/components/Armor/components/PrimaryArmorSceneComponent/index.tsx +++ b/packages/website/src/components/Armor/components/PrimaryArmorSceneComponent/index.tsx @@ -151,7 +151,12 @@ export function PrimaryArmorSceneComponent({ material.uniforms.penetration.value = penetration * - resolvePenetrationCoefficient(hasCalibratedShells, shell.type) * + resolvePenetrationCoefficient( + hasCalibratedShells, + Duel.state.equalize, + shell.type, + Duel.state.antagonist.tank.equalizer, + ) * equalize; if (!noInvalidate) invalidate(); diff --git a/packages/website/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubExternal/index.tsx b/packages/website/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubExternal/index.tsx index 36edc60d9..9adbf0cef 100644 --- a/packages/website/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubExternal/index.tsx +++ b/packages/website/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubExternal/index.tsx @@ -85,7 +85,12 @@ export function SpacedArmorSubExternal({ material.uniforms.penetration.value = penetration * - resolvePenetrationCoefficient(hasCalibratedShells, shell.type) * + resolvePenetrationCoefficient( + hasCalibratedShells, + Duel.state.equalize, + shell.type, + Duel.state.antagonist.tank.equalizer, + ) * equalize; } diff --git a/packages/website/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubSpaced/index.tsx b/packages/website/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubSpaced/index.tsx index fa1a6007e..d30e1074b 100644 --- a/packages/website/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubSpaced/index.tsx +++ b/packages/website/src/components/Armor/components/SpacedArmorSceneComponent/components/SpacedArmorSubSpaced/index.tsx @@ -95,7 +95,12 @@ export function SpacedArmorSubSpaced({ material.uniforms.penetration.value = penetration * - resolvePenetrationCoefficient(hasCalibratedShells, shell.type) * + resolvePenetrationCoefficient( + hasCalibratedShells, + Duel.state.equalize, + shell.type, + Duel.state.antagonist.tank.equalizer, + ) * equalize; } diff --git a/packages/website/src/components/Armor/components/SpacedArmorSceneComponent/index.tsx b/packages/website/src/components/Armor/components/SpacedArmorSceneComponent/index.tsx index 38b42f959..ffd6133b8 100644 --- a/packages/website/src/components/Armor/components/SpacedArmorSceneComponent/index.tsx +++ b/packages/website/src/components/Armor/components/SpacedArmorSceneComponent/index.tsx @@ -18,6 +18,7 @@ import { import { degToRad } from "three/src/math/MathUtils.js"; import { hasEquipment } from "../../../../core/blitzkit/hasEquipment"; import { jsxTree } from "../../../../core/blitzkit/jsxTree"; +import { defaultEqualizer } from "../../../../core/blitzkit/tankToDuelMember"; import { discardClippingPlane } from "../../../../core/three/discardClippingPlane"; import { Duel } from "../../../../stores/duel"; import { @@ -88,9 +89,12 @@ export function SpacedArmorSceneComponent({ const { customShell } = Tankopedia.state; const shell = customShell ?? Duel.state.antagonist.shell; const { equalize } = Duel.state; - const equalizer = - (equalize ? Duel.state.antagonist.tank.equalizer?.damage : undefined) ?? - 1; + const protagonistEqualizer = + (equalize ? Duel.state.protagonist.tank.equalizer : undefined) ?? + defaultEqualizer; + const antagonistEqualizer = + (equalize ? Duel.state.antagonist.tank.equalizer : undefined) ?? + defaultEqualizer; const cameraNormal = camera.position.clone().sub(point).normalize(); const shot: Shot = { splashRadius: @@ -118,8 +122,14 @@ export function SpacedArmorSceneComponent({ ); const penetration = shell.penetration!.near * - resolvePenetrationCoefficient(hasCalibratedShells, shell.type); - const thicknessCoefficient = hasEnhancedArmor ? 1.03 : 1; + resolvePenetrationCoefficient( + hasCalibratedShells, + equalize, + shell.type, + antagonistEqualizer, + ); + const thicknessCoefficient = + (hasEnhancedArmor ? 1.03 : 1) * protagonistEqualizer.armor; const filteredIntersections = intersections.filter( (intersection) => "type" in intersection.object.userData && @@ -371,7 +381,7 @@ export function SpacedArmorSceneComponent({ } } - shot.damage *= equalizer; + shot.damage *= antagonistEqualizer.damage; return shot; }, diff --git a/packages/website/src/components/Tankopedia/HeroSection/components/Options/index.tsx b/packages/website/src/components/Tankopedia/HeroSection/components/Options/index.tsx index 15133b1f1..94e022c70 100644 --- a/packages/website/src/components/Tankopedia/HeroSection/components/Options/index.tsx +++ b/packages/website/src/components/Tankopedia/HeroSection/components/Options/index.tsx @@ -102,6 +102,7 @@ export function Options({ thicknessRange, canvas, skeleton }: OptionsProps) { value: ( resolvePenetrationCoefficient( hasCalibratedShells, + false, antagonistShell.type, ) * antagonistShell.penetration!.near ).toFixed(0), diff --git a/packages/website/src/core/blitzkit/tankCharacteristics.ts b/packages/website/src/core/blitzkit/tankCharacteristics.ts index 3f26ba388..afdbe9554 100644 --- a/packages/website/src/core/blitzkit/tankCharacteristics.ts +++ b/packages/website/src/core/blitzkit/tankCharacteristics.ts @@ -181,11 +181,10 @@ export function tankCharacteristics( (coefficient([hasGunRammer, -0.05]) * coefficient([true, degressiveStat(loaderMastery)])) / coefficient([hasAdrenaline && gun.gun_type!.$case === "regular", 0.17]); - const penetrationCoefficient = - coefficient([ - hasCalibratedShells, - resolvePenetrationCoefficient(true, shell.type) - 1, - ]) * equalizer.penetration; + const penetrationCoefficient = coefficient([ + hasCalibratedShells, + resolvePenetrationCoefficient(true, equalize, shell.type, equalizer) - 1, + ]); const healthCoefficient = coefficient( [hasSandbagArmor, 0.03],