Решили: вспышка защиты играет, когда щит поглотил хоть сколько-нибудь урона
(shieldAbsorbed = ShieldDamage > 0), а не только когда удар не прошёл вовсе. Цвет вспышки — своя роль
--gm-color-combat-block-flash (золото), интерфейс защиты остаётся на --gm-color-combat-shield (лёд).
Яркость обычная: HDR-вариант снят.
Почему: прежнее условие HpDamage <= 0 && ShieldDamage > 0 описывало полный блок, а щит «Оплота»
даёт 50 единиц плюс 7.5% недостающего HP против авто-атаки на 109 — целиком удар он съедает редко.
Событие «щит сработал» из-за этого почти не показывалось, и в бою читалось как «эффект пропадает».
Разделение теперь такое: shieldAbsorbed отвечает за вспышку, blocked (полное поглощение) — за то,
что гаснут искры и отброс, потому что удар в тело не вошёл.
Грабли (три моих подряд, все про объём и про способ):
- Взяла шире просьбы. Просили золото «на юните» — я перекрасила роль защиты целиком, и золотыми стали полоса щита и цифра поглощённого. Правильно было завести вторую роль сразу: цвет интерфейса и цвет события на теле — разные факты.
- Сделала ярче, чем просили. HDR-флар (яркость 2.2) выглядел как пересвет; нужна была прежняя
яркость синего, только другой оттенок. Мёртвые
ShieldFlareи_blockFlashBrightnessудалены, а не оставлены «на будущее». - Правка снимка палитры мимо USS — поймана тестом
Снимок_совпадает_с_токенами_в_USS, подробности в записи «Defence Turns Gold».
Не проверено тестами на момент записи: сборка Guildmaster.Tests.EditMode не компилируется из-за
чужой незавершённой правки в дереве (WindupAutoAttackTests зовёт DamageRequest.Raw, поле называется
RawDamage). Пока она красная, редактор крутит старые сборки, и в игре изменения не видны — это не
дефект правок, а состояние дерева.
Владелец правды: CombatPresenter (условие shieldAbsorbed против blocked),
CombatColorPalette.BlockFlash, UI/Theme/tokens.semantic.uss (обе роли).