Решили: форму удара получает ТОЛЬКО автоатака. Урон способностей и эффектов её не рисует, а удар без паспорта источника не рисует и подавно. Плюс рецепты клипов костяного рига теперь сами пишут разметку взмаха и гвардии.
Почему: контракт таким и был — HitFormCoverageTests спрашивает архетип формы у АВТОАТАК, — а спавн
в презентере стоял на IsDirectHit, то есть ловил ещё и урон способностей. Способность оружием не машет
и способа доставки не называет: Воспламенение мечника приходило типом Fire, архетип не резолвился, и
консоль ругалась на дефект контента, которого нет. Отвергнуто: заводить признак «удар оружием» в
AbilityData и метить им все абилки — дороже, а язык способностей всё равно будет свой.
Вторым слоем чинилась асимметрия: IsRanged отвечает «не дальний» и на «источника не существует», из-за
чего безымянный урон (горение, шипы) молча получал язык ближнего боя — в консоли это выглядело как «у
мили-удара юнита 0 тип урона Fire». Паспорт источника теперь спрашивается явно: нет его — нет и формы,
потому что неизвестно даже, чем бьют.
Сказано: «У способностей не надо форму удара рисовать. Форма пока что только для автоатак.» и «У нас нет НИ ОДНОГО милишника с чистым типом урона. У нас везде есть физ урон от которого можно оттакливаться. Если говорить про Аркану, то догадываюсь что там арканновый танк? Он должен дамажить вообще дробящим с автоатак, лишь с умения арканой.» (2026-08-04, сессия 06e45474). Проверено по ассетам: все шесть жаловавшихся китов бьют физикой (Blunt/Slash/Pierce), элемент приходил только от способностей.
Грабли: BoneUnitClipRecipes переписывает список событий клипа ЦЕЛИКОМ, поэтому регенерация стёрла бы
всю разметку взмаха и гвардии — маркеры дописаны в рецепты. Хуже другое: рецепт Block() разошёлся с
ассетом (в нём подъём на 0.117 с и оседание вместо возврата, на диске — 0.25 с и возврат в стойку),
то есть кнопка «Rebuild bone unit clips» затрёт живой клип старым. Владельцем клипа отныне считается
АССЕТ, рецепт — леса первичной сборки; предупреждение стоит в докстринге самого рецепта.
Владелец правды: CombatPresenter.SpawnHitForm, HitFormFactory.ResolveKind,
тест HitFormCoverageTests, докстринг BoneUnitClipRecipes.Block.