Решили: у периодического лечения появилось убывание по стакам — _stackFalloffPct. Первый стак идёт целиком, каждый следующий со скидкой (у «Грибного покрова» Друида — 30%). Рядом завёлся потолок на число РАЗНЫХ эффектов с триггер-тегом, засчитываемых за одну детонацию (_maxTriggerUniques).

Почему: линейные стаки делают силу кита функцией отряда, а не его самого. У Друида взрыв лечит за каждый уникальный яд на цели: с шестью источниками яда в команде он лечил бы вшестеро, ничего не меняя в себе. Убывание оставляет первый стак весомым — ради него и стоит брать кита, — а гору стаков превращает в затухающий хвост.

Сказано: «Друид - сделай макс количество разных ядов - до 3 шт. Сделай не более 4 стаков эффекта. Повысь сильно хил за 1 стак и понизь за последующие на 30%» (2026-08-04, сессия 86077da2).

Грабли:

  • Сумму стаков считаем циклом, а не степенью. Mathf.Pow в детерминированной симуляции — лишний источник расхождения между платформами, а стаков единицы: цикл дешевле и честнее.
  • Убывание живёт в компоненте, а не в вызывающем. Стаки набиваются повторным наложением (StackRule.Stack), и точка, где известно их число, ровно одна — тик компонента. Считать скидку снаружи значило бы завести второго владельца формулы.

Владелец правды: PeriodicHealComponent.EffectiveStacks, AbilityData.MaxTriggerUniques, AbilitySystem.ApplyAllWithTag.