Сейчас
Defold runtime
World · UI direction
Один и тот же экран 430×932. Слева — честный кадр из Defold. Справа — арт-направление для следующей итерации: изменено только свечение Aiko, а остальная композиция сохранена пиксель-в-пиксель.

В целом это animated selection frameUI VFX. Отдельные картинки внутри него — спрайты. В Defold они лежат в атласе и отображаются как дочерние GUI box nodes карточки. Это не одна тяжёлая анимация, а композиция четырёх простых слоёв.
Прозрачный PNG с широким мягким bloom. Режим смешивания SCREEN; меняется только alpha.
Тонкая резкая рамка. Для карточек одного размера — обычный sprite; 9-slice нужен только для растягиваемых панелей.
Одна маленькая маска плюс GUI material. Shader гонит яркий участок по периметру без десятков полноразмерных кадров.
2–4 редкие частицы только при выборе. Это опциональный GUI ParticleFX, не постоянный снег вокруг карточки.
heroSelectionFx.ts — самостоятельный UI-компонент, принадлежащий карточке.hero-card-aura.png, hero-card-edge.png и hero-card-flow-mask.png — прозрачные assets в существующем menu_ui.atlas.hero-selection.material + fragment shader — двигают свет по маске через параметр phase.heroChoiceCard.ts сообщает только setSelected(true/false); сам эффект не знает про API, героев или навигацию.// heroSelectionFx.ts — схема, а не дублирование логики карточки
gui.set_blend_mode(aura, gui.BLEND_SCREEN)
gui.set_blend_mode(flow, gui.BLEND_ADD)
gui.set_material(flow, 'hero_selection_fx')
setSelected(true)
// root: scale 1 → 1.12 once
// aura: alpha 0 → .90, then .58 ↔ .90
// edge: alpha 0 → .98
update(dt)
// phase = (phase + dt / 3.2) % 1
gui.set(flow, 'effect_params', vmath.vector4(phase, intensity, 0, 0))
Опирается на официальные возможности Defold: GUI nodes, blend modes и Slice 9, stable GUI API, GUI material constants. Flipbook тоже возможен, но для непрерывного travelling light shader легче и экономнее по памяти.