From d6e96e17ad5f9a42cec2ed9ddfb14ffc09f470a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Wed, 10 Apr 2024 16:54:16 -0500 Subject: [PATCH] feat: spall liner --- src/app/tools/compare/page.tsx | 28 +++++++++++++++++++ .../[id]/components/Characteristics/index.tsx | 1 + src/core/blitzkrieg/provisionDefinitions.ts | 2 ++ src/core/blitzkrieg/tankCharacteristics.ts | 8 +++++- 4 files changed, 38 insertions(+), 1 deletion(-) diff --git a/src/app/tools/compare/page.tsx b/src/app/tools/compare/page.tsx index 3d678e999..a5b1f8e4e 100644 --- a/src/app/tools/compare/page.tsx +++ b/src/app/tools/compare/page.tsx @@ -5,11 +5,13 @@ import { CaretRightIcon, CaretSortIcon, ComponentPlaceholderIcon, + InfoCircledIcon, PlusIcon, TrashIcon, } from '@radix-ui/react-icons'; import { Button, + Callout, Dialog, Flex, Heading, @@ -76,6 +78,15 @@ export default function Page() { const awaitedProvisionDefinitions = use(provisionDefinitions); const deltaMode = useComparePersistent((state) => state.deltaMode); const crewSkills = useCompareTemporary((state) => state.crewSkills); + const haveReactive = members.some((member) => + member.consumables.includes(33), + ); + const haveDynamicArmor = members.some((member) => + member.consumables.includes(73), + ); + const haveSpallLiner = members.some((member) => + member.provisions.includes(101), + ); const stats = useMemo( () => members.map((thisMember) => @@ -97,6 +108,11 @@ export default function Page() { member.key !== thisMember.key && member.consumables.includes(73), ), + applySpallLiner: members.some( + (member) => + member.key !== thisMember.key && + member.provisions.includes(101), + ), }, { equipmentDefinitions: awaitedEquipmentDefinitions, @@ -514,6 +530,18 @@ export default function Page() { return ( + {(haveReactive || haveDynamicArmor || haveSpallLiner) && ( + + + + + + Consumables like Reactive Armor and Dynamic Armor System and + provisions like Spall Liner may reduce other tanks' damage. + + + )} + ( asset('definitions/provisions.cdon.lz4'), ); + +provisionDefinitions.then(console.log); diff --git a/src/core/blitzkrieg/tankCharacteristics.ts b/src/core/blitzkrieg/tankCharacteristics.ts index e610a2a1b..a925f8aad 100644 --- a/src/core/blitzkrieg/tankCharacteristics.ts +++ b/src/core/blitzkrieg/tankCharacteristics.ts @@ -40,6 +40,7 @@ export function tankCharacteristics( stockGun, applyReactive, applyDynamicArmor, + applySpallLiner, }: { tank: TankDefinition; turret: TurretDefinition; @@ -59,6 +60,7 @@ export function tankCharacteristics( camouflage: boolean; applyReactive: boolean; applyDynamicArmor: boolean; + applySpallLiner: boolean; }, { modelDefinitions, @@ -138,7 +140,11 @@ export function tankCharacteristics( const intraClipCoefficient = coefficient([hasShellReloadBoost, -0.3]); const damageCoefficient = coefficient([hasTungsten, 0.15]) * - coefficient([applyReactive, -0.2], [applyDynamicArmor, -0.1]); + coefficient( + [applyReactive, -0.2], + [applyDynamicArmor, -0.1], + [applySpallLiner && shell.type === 'he', -0.2], + ); const reloadCoefficient = (coefficient([hasRammer, -0.07]) * coefficient([true, degressiveStat(crewMemberMastery)])) /