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)])) /