# ТЗ: персонаж для BroV ## 0. Контекст **BroV** — маленькое приложение для macOS, которое живёт в «чёлке» (notch) MacBook. Внутри сидит персонаж-маскот. Он показывает, что делают ИИ-агенты (Claude Code и другие), просит подтвердить действия, болтает в чате и реагирует на пользователя. Название — игра слов: **BroV = «бровь»** (чёлка MacBook похожа на бровь) + «bro». Персонаж должен это обыгрывать. Сейчас в приложении стоит временная заглушка: болотно-зелёный бугристый комок с огромной сросшейся волосатой бровью, кровавыми глазами разного размера, зубастой ухмылкой, слюной, бородавками и шрамом со швами. Её нужно заменить на нормально придуманного персонажа. **Важно про технику.** Персонаж **рисуется кодом**: SwiftUI `Canvas`, векторные примитивы (эллипсы, кривые Безье, скруглённые прямоугольники, градиенты), 60–120 кадров/с. Картинок, спрайтов, Lottie или Rive нет. Анимация **параметрическая**: у движка есть набор чисел (поворот головы, сжатие, открытость глаз и т. п.), которые плавно меняются, и каждый кадр персонаж перерисовывается по этим числам. Значит, от тебя нужны не «кадры мультика», а **конструкция персонажа + раскадровки, привязанные к этим параметрам**. Код по твоему дизайну напишет другой ИИ (Claude). --- ## 1. Что нужно сдать (deliverables) 1. **Концепт и характер.** 3 варианта концепта (картинками), потом один финальный. Короткое описание характера: кто он, как двигается, чем бесит, чем мил. 2. **Character sheet** финального варианта: анфас, повороты головы влево/вправо (≈30°), взгляд вверх/вниз, вид в мелком размере (20 и 44 pt). 3. **Слоистый SVG** нейтральной позы (viewBox, описанный в разделе 3), каждый элемент отдельной группой с понятным `id`: `body`, `shading`, `brow`, `eye-left`, `eye-right`, `mouth`, `hand-left`, `hand-right`, `details` (бородавки, шрамы и т. п.). Только простые фигуры: `ellipse`, `rect rx`, `path` с кривыми Безье, `linearGradient`/`radialGradient`. Без фильтров, масок с растром, шрифтов и картинок. 4. **Все формы глаз** (13 штук, раздел 6) — SVG или чёткие эскизы с размерами. 5. **Все формы брови** по состояниям и эмоциям (раздел 7). 6. **Все формы рта** по состояниям, плюс «рот-щель» для режима коробки (раздел 11). 7. **Палитра** с HEX: основное тело, тени, обводки, глаза, бровь, рот, акценты. Плюс правило, как тело перекрашивается в цвет состояния (раздел 5). 8. **Раскадровки** каждой анимации из разделов 8–13: ключевые позы + тайминги в миллисекундах + какие параметры меняются. Формат описан в разделе 15. 9. **Аксессуары/наряды** (раздел 14): как каждый сидит на новой форме тела. 10. **Иконка приложения** (1024×1024, скруглённый квадрат macOS) и **иконка меню-бара** (одноцветный силуэт 22×16 pt, читается в 16 px). --- ## 2. Жёсткие ограничения - **Фон всегда чёрный**: чёлка — это чёрный остров у верхнего края экрана. Персонаж должен хорошо читаться на `#000`–`#16171B`. - **Размеры, в которых он живёт** (диаметр области персонажа): - 6 pt — спрятан в чёлке (почти точка); - 20 pt — бегунок полосы загрузки; - 24–30 pt — свёрнутый режим (compact) и мини-боты в «пилюлях» агентов; - 44–66 pt — основной размер в развёрнутой чёлке; - 120 pt — режим «на рабочем столе»; - 1024 — иконка. **Главный размер — 44–66 pt.** При 20–30 pt мелкие детали (волоски, вены, бородавки) должны пропадать, а силуэт, бровь и глаза — оставаться узнаваемыми. Опиши, какие детали скрывать ниже какого размера. - **Простота отрисовки**: держи в голове бюджет ~40 фигур на кадр для основного персонажа и ~10 для мини-бота. Без сложных текстур. - **Псевдо-3D**: голова «поворачивается» (yaw/pitch, раздел 4). Глаза, бровь и рот при повороте **съезжают по поверхности** и сплющиваются по краям, как на шаре. Значит, лицо должно лежать на условной сфере, а не быть плоской наклейкой. - **Тело перекрашивается**: мини-боты агентов заливаются сплошным цветом агента (синий, зелёный и т. д.). Дизайн должен работать и в «своих» цветах, и в однотонной заливке любого цвета. - **Лицензия**: нельзя делать похожим на Mochi из проекта Coucou (белый мягкий квадратик-моти с двумя чёрными глазами-пилюлями). Свой оригинальный персонаж. - **Настроение**: кринжовый, слегка жуткий, но обаятельный. Уровень «милый монстр / гадкий бро», не хоррор, от которого неприятно работать. --- ## 3. Система координат Холст квадратный, сторона `W`. Все размеры персонажа считаются от `R = 0.3 · W`. | Элемент | Значение | |---|---| | Центр тела | центр холста, чуть ниже: `cy = H/2 + 0.06R` | | Полуширина тела `rx` | `1.14 R` | | Полувысота тела `ry` | `0.88 R` | | Текущая форма тела | суперэллипс (скруглённый «squircle»), показатель ≈ 2.7 | | Глаза | на «сфере» на ±0.37 рад (≈21°) от центра по горизонтали, по вертикали чуть ниже центра (`eyeP = −0.12` рад) | | Размер глаза | ширина `0.25R`, высота `0.27R` | | Руки | эллипсы `0.60·ry × 0.52·ry`, прячутся за телом снизу по бокам | Форму тела **можно менять** (не обязательно squircle), но габариты держи примерно в `2.3R × 1.8R`: под них свёрстан весь интерфейс. Для SVG используй `viewBox="-1.5 -1.5 3 3"` с единицей = `R` и центром тела в (0, 0). Так размеры переносятся в код один в один. --- ## 4. Анимационные параметры движка Каждый кадр движок хранит эти числа и рисует персонажа по ним. Все раскадровки описывай через них. Можешь предложить **новые параметры** (например, `browAngle`, `mouthOpen`, `drool`), но явно их перечисли и опиши диапазон. | Параметр | Диапазон | Что делает | |---|---|---| | `yaw` | −0.65…0.65 рад | поворот головы влево-вправо (лицо съезжает по сфере) | | `pitch` | −0.5…0.5 рад | взгляд вверх-вниз | | `tilt` | ±0.2 рад | наклон всего тела (поворот вокруг центра) | | `roll` | 0…4π | «кувырок»: лицо прокручивается по сфере, полный оборот = 2π | | `sx`, `sy` | 0.78…1.28 | сжатие/растяжение тела (squash & stretch) | | `ox`, `oy` | ±0.3 (в долях R) | смещение тела (тряска, подпрыгивание) | | `open` | 0.06…1 | открытость глаз (моргание) | | `es` | 1…1.25 | масштаб глаз (удивление, наведение мыши) | | `tint` | 0…0.78 | насколько тело окрашено в цвет состояния (снизу вверх) | | `blush` | 0…1 | румянец | | `hands` | 0…1 | руки выдвинуты из-за тела | | `morph` | 0…1 | превращение тела в коробку-почтовый ящик (раздел 11) | | `slotH` | 0…0.5 (в долях R) | высота «рта-щели» коробки, на пружине | | `badgeS` | 0…1 | масштаб значка над головой (раздел 9) | | `physDx`, `physDy` | −1…1 | инерция для шапок и болтающихся деталей: отстают при движении | | `dancingLevel` | 0…1 | танец под музыку (раздел 12) | | `outfitPresence` | 0…1 | появление наряда | **Как меняются значения:** - **Твины по ключам:** `[цель, длительность мс, кривая]`, ключи идут друг за другом. Кривые: `out` (кубическое замедление), `inOut`, `back` (с перелётом и откатом, c1 = 1.7), `lin`. - **Плавное следование к цели** каждый кадр — для взгляда, наклона и дыхания. - **Пружины:** для рта-щели (период 0.25 с, затухание 0.6, лёгкий «клац») и для инерции аксессуаров (жёсткость 60, затухание 9). --- ## 5. Состояния (BotState) Состояние держится долго, пока агент в нём находится. У каждого есть цвет подкраски тела, форма глаз, значок, постоянное поведение и звук при входе. | Состояние | Когда | Цвет | Подкраска | Глаза | Значок | Постоянное поведение | При входе | |---|---|---|---|---|---|---|---| | `idle` | ничего не происходит | `#E6E9EE` | 0 | pill | — | следит глазами за курсором | моргание | | `working` | агент работает | `#3B9EFF` | 0.72 | pill | три точки (синие) | следит за курсором | моргание, звук `work` | | `thinking` | модель думает | `#8B5CF6` | 0.72 | pill | три точки | смотрит вверх-вправо (задумчиво) | звук `think` | | `searching` | поиск | `#6365F2` | 0.72 | pill | три точки | **сканирует**: голова ходит влево-вправо `yaw = sin(2.6t)·0.6` | звук `search` | | `approval` | ждёт разрешения | `#F5A524` | 0.78 | wide | «!» | **подпрыгивает** `oy = −|sin(5.2t)|·0.07` | прыжок `oy`: −0.2 за 150 мс (out) → 0 за 300 мс (back), звук `approval` | | `question` | агент задал вопрос | `#22D3EE` | 0.75 | pill | «?» | голова наклонена `tilt = 0.17` | моргание, звук `question` | | `error` | ошибка | `#F4505E` | 0.78 | flat | точка | — | тряска `ox`: 0.08 (50 мс) → −0.08 (70) → 0.05 (70) → 0 (90), звук `error` | | `finished` | готово | `#34D499` | 0.35 | happy | точка | — | **кувырок** на 1 оборот за 950 мс + 5 искр через 0.5 с, звук `finish` | | `ratelimit` | упёрся в лимит | `#FB923C` | 0.72 | tired | точка | **потеет**: капли пота | капля пота, звук `rate` | | `sleeping` | давно без дела | `#94A2B8` | 0.32 | closed | — | **дышит** (sy ±0.035, sx в противофазе, частота 1.8), смотрит чуть вниз, летят «Z» | звук `sleep` | | `dizzy` | его 3 раза шлёпнули | `#F472B6` | 0.70 | spiral | — | голова мотается `yaw = sin(9t)·0.25` | **2 кувырка** за 1300 мс, звук `dizzy` | Подкраска: поверх основного градиента тела снизу вверх идёт градиент цвета состояния (непрозрачность `0.72·tint` внизу → 0 вверху). Цвет переключается плавно, примерно за полсекунды. **Задача:** - для каждого состояния нарисуй позу: бровь, рот, глаза и особые детали (например, при `error` пар из ушей, при `ratelimit` высунутый язык); - скажи, как подкраска ложится на твою палитру; - если хочешь заменить подкраску другим приёмом (свечение, цвет брови и т. п.), предложи. --- ## 6. Формы глаз (EyeShape) Глаз рисуется в своей локальной системе: центр (0, 0), ширина `w`, высота `h`, сплющивание по сфере применяет движок. Нужен дизайн всех 13 форм: | Форма | Где используется | Сейчас выглядит как | |---|---|---| | `pill` | норма | вертикальная пилюля; при моргании сплющивается до `max(h·open, 0.3w)` | | `wide` | approval | pill ×1.16 по ширине, ×1.12 по высоте | | `dot` | эмоция «удивлён» | маленький круг 0.9w | | `line` | «раздражён» (после шлепка) | короткая наклонная полоска, наклон ±0.2 рад к центру | | `flat` | error | горизонтальная полоска | | `happy` | finished, «счастлив», танец | дуга-«улыбка» ∩ | | `closed` | sleeping | дуга ∪, закрытые глаза | | `spiral` | dizzy | **вращающаяся** спираль (2.2 витка, крутится с частотой 9 рад/с, левый и правый в разные стороны) | | `heart` | «любовь» | красное сердце `#FF4D6D` | | `star` | «гордость» | **вращающаяся** жёлтая звезда `#F7B32B` | | `tired` | ratelimit, «зевок» | полуприкрытый глаз с веком | | `wink` | «подмигивание» | левый открыт (pill), правый — дуга happy | | `cup` | коробка, когда файл над ней | «чашка»: плоский верх, скруглённый низ | У нормального глаза обязательно должен быть **зрачок или явное направление взгляда**: он смотрит на курсор мыши. --- ## 7. Бровь (новый ключевой элемент) Раз персонаж «бровь», бровь должна быть **главным выразительным органом**, сильнее глаз. Нужно: - **дизайн брови**: моно-бровь или две, волосатая или гладкая, толщина, цвет; - **позы брови** для каждого из 11 состояний и 7 эмоций: - угол центра (вниз = злость, вверх = тревога); - подъём краёв; - асимметрия (одна бровь вверх — вопрос); - **анимации брови:** - «поиграть бровями» (быстрый двойной подъём, ~300 мс) — для приветствия и наведения мыши; - подёргивание в ожидании (approval); - бровь «уползает» в сторону при головокружении; - бровь «падает» при засыпании; - новый параметр `browRaise` (−1…1), `browAngle` (−1…1), `browWiggle` или свои — опиши. --- ## 8. Постоянные (фоновые) поведения Работают всегда, поверх состояний: 1. **Взгляд за курсором:** `yaw → lookX·0.62`, `pitch → lookY·0.5`, где `lookX/Y` — нормализованное направление на курсор (−1…1). Плавно, с коэффициентом `1 − 0.0025^dt`. 2. **Моргание:** каждые 2.2–5.4 с случайно. Моргание = `open`: 0.06 за 70 мс (inOut) → 1 за 130 мс (out). В 22 % случаев двойное (второе через 230 мс). Не моргает во сне и при головокружении. 3. **Дыхание** (только `sleeping` у основного): sy = 1 + sin(1.8t)·0.035, sx = 1 − sin(1.8t)·0.02. 4. **Пульс мини-ботов:** sy = 1 + sin(2.2t)·0.04, sx = 1 − sin(2.2t)·0.02, у каждого своя фаза. 5. **Блуждающий взгляд мини-ботов:** мышь игнорируют, каждые 0.5–2 с смотрят в случайную точку. 6. **Фоновые частицы:** раз в 1.3 с — «Z» во сне; капля пота (50 %) при ratelimit. 7. **Инерция аксессуаров** (`physDx/Dy`): шапки и помпоны отстают при повороте головы, прыжке и кувырке. **Задача:** предложи 2–4 своих фоновых «тика», которые делают персонажа живым и кринжовым. Например: - в простое иногда ковыряет в носу или чешет бровь; - слюна медленно капает; - раз в минуту оглядывается. Для каждого укажи частоту, длительность и параметры. --- ## 9. Значок над головой (badge) Маленький кружок слева сверху от тела (≈ на `−0.72R` по X). Типы: - `dots` — три точки, работа/мышление; - `bang` — «!», ждёт тебя; - `question` — «?»; - `dot` — просто точка-индикатор. Смена значка: старый уменьшается до 0 за 90 мс, новый вырастает до 1 за 280 мс (back). **Задача:** дизайн значков в стиле персонажа. Можно предложить заменить значок на действие самого персонажа, например бровь изгибается в «?». --- ## 10. Одноразовые анимации и эмоции Тайминги ниже — **текущие**. Их можно менять, но в том же формате. ### 10.1 Squash (шлепок по телу, приземление) - `sy`: 0.78 (70 мс, out) → 1.1 (130, out) → 1 (170, inOut); - `sx`: 1.16 (70) → 0.95 (130) → 1 (170); - плюс толчок пружины аксессуаров вниз. ### 10.2 Шлепок пользователем (slap) - Клик по персонажу → squash + толчок вбок + глаза `line` на 800 мс + звук `slap`, затем `annoyed`. - **3 шлепка за 1.7 с → состояние `dizzy`** (2 кувырка, спирали в глазах). - **Задача:** реакция на 1-й, 2-й и 3-й шлепок по нарастающей (бровь, рот, слюна летит?). ### 10.3 Кувырок (roll) - Лицо прокручивается по «сфере» на `2π · turns`: `finished` — 1 оборот за 950 мс, `dizzy` — 2 оборота за 1300 мс, кривая inOut. В конце — squash. - **Задача:** как ведут себя бровь, рот и детали при кувырке. Сейчас лицо просто «уезжает за горизонт» шара и выезжает с другой стороны. ### 10.4 Эмоции (BotEmote) Временные, по умолчанию 1.8 с. Глаза меняются на форму из таблицы, плюс движение: | Эмоция | Глаза | Движение | Частицы | Звук | |---|---|---|---|---| | `love` | heart | румянец 1 (300 мс) → держит → 0 (300 мс); прыжок `oy` −0.1 (160) → 0 (300, back) | 4 сердца | `love` | | `surprised` | dot | прыжок `oy` −0.3 (140) → 0 (380, back); глаза `es` 1.25 (120) → 1 (500) | — | — | | `proud` | star | squash; наклон −0.14 (220) → держит → 0 (280); румянец 0.7 | 5 звёзд | `proud` | | `wink` | wink | наклон 0.12 (160) → держит → 0 (240) | — | `wink` | | `yawn` | tired → closed через 0.7 с | sy 1.12 / sx 0.94 за 500 мс и обратно | 2 «Z» | `yawn` | | `happy` | happy | румянец 0.6 (200) → 0 (600) | — | — | | `annoyed` | line (800 мс) | — | — | `annoyed` | **Задача:** раскадровка каждой эмоции с бровью и ртом. Можно добавить 2–3 новые кринжовые эмоции, например: - `disgust` — блевок; - `smug` — самодовольная бровь; - `cringe` — сжимается и отворачивается. ### 10.5 Частицы Типы: `heart`, `star`, `spark`, `sweat`, `z`. - Рождаются над головой (y ≈ −0.7…−0.9 R), летят вверх со скоростью 0.45–0.8 R/с. - Небольшой случайный разлёт, живут 1.3–1.8 с, вращаются. - В группе каждая следующая стартует на 140 мс позже. - `z` смещены вправо. **Задача:** стиль частиц под персонажа. Можно заменить: вместо сердец — сердца с каплей, вместо искр — брызги слюны и т. п. ### 10.6 Мини-боты: периодические выходки У мини-ботов (24–30 pt, однотонные) с постоянной эмоцией раз в 2–5 с: - `happy` — подскок `oy` −0.30 (120) → 0.03 (200) → 0 (160, back) со squash; - `annoyed` — резкое мотание головой `yaw`: −0.65 → 0.65 → −0.5 → 0.4 → −0.2 → 0 (50/90/80/75/70/140 мс); - `wink` — подмигнул и наклонил голову на 0.55 с; - `love` — 2 сердца + покачивание. **Задача:** как выглядит мини-версия (упрощённый силуэт, бровь обязательна). --- ## 11. Загрузка файла: тело → почтовый ящик Пользователь тащит файл на чёлку, и персонаж **превращается в коробку с прорезью-ртом**, «глотает» файл и жуёт. - `morph` 0 → 1: контур тела плавно перетекает из своей формы в скруглённый прямоугольник `1.0R × 0.94R` (полуразмеры), радиус углов `0.42R`. - Подкраска уходит, глаза опускаются на `0.14·ry·morph` и становятся «плоскими» (сплющивание по сфере исчезает). - **Прорезь-рот** (`slotH`, на пружине): ширина `1.8R·morph`, верх у крышки коробки. - Позиции: 0 = закрыт, 0.20 = приоткрыт (файл рядом), 0.42 = открыт (файл над прорезью), 0.50 = максимум. - Белый ободок у крышки, внутри тёмный градиент, светлая нижняя губа. - Глаза: `cup`, когда файл над коробкой; `happy`, пока жуёт. - **Глоток (gulp):** - рот 0.42 → через 460 мс закрывается и 800 мс жуёт; - тело: `sy` 0.78 (80) → 1.18 (130) → 1 (220, back), `sx` 1.28 → 0.92 → 1, моргание; - звук `gulp`. - **Таймлайн загрузки** (секунды от входа файла в зону): | Момент | Время, с | Что происходит | |---|---|---| | следит за файлом | до 1.95 | коробка ездит по горизонтали за курсором | | DROP | 1.95 | пользователь отпустил файл | | засасывание | 2.03–2.33 | файл втягивается в прорезь | | рот закрыт | 2.42 | | | жевание | 2.60–2.88 | | | уменьшение | до 3.23 | коробка сжимается в точку 20 pt | | полоса загрузки | с 3.00 | появляется полоса | | прогресс | с 3.25 | точка-персонаж едет по полосе как бегунок | **Задача:** - как выглядит **коробка в стиле персонажа**: бровь остаётся над прорезью? прорезь с зубами? - раскадровка глотка и жевания; - как выглядит 20-pt бегунок. --- ## 12. Танец (Apple Music) Когда играет музыка, персонаж танцует на 112 BPM: - подскок `0.20R·|sin(π·beat)|`; - покачивание по X `0.08R·sin(π·beat)`; - наклон `0.10·sin(π·beat)`; - при приземлении приплющивание (sx +4.5 %, sy −6 %); - глаза `happy`; - вход за 0.3 с, выход за 0.5 с; - точка вращения — низ тела. **Задача:** движения брови и рта в танце (бровь качается в такт?). --- ## 13. Приветствие и появление ### 13.1 Приветствие при запуске (отдельная сцена, остров 640×150 pt, персонаж 58 pt в центре) | Время, с | Что происходит | |---|---| | 0–0.85 | выезжает из чёлки вниз | | 0.85–1.30 | осматривается, моргает | | 1.30–1.45 | **«поп»** — выпрыгивает, растягиваясь | | 1.45–2.40 | **машет правой рукой** (вверх-вправо), левая покачивается; руки — эллипсы, которые выдвигаются из-за тела | | 2.40 | довольные глаза (`happy`/`content`) | | 2.45–2.70 | прячет руки (вниз-влево) | | 2.72 | появляется значок | | 2.85–3.45 | съезжает вниз-вправо на своё место | | 3.70 | второе моргание | | 3.85–4.15 | подкраска цветом | | 4.60 | конец сцены | | 4.90 | автоуход (остров сворачивается за 0.34 с) | ### 13.2 Короткое «привет» (greet), когда пользователь вернулся - 0 с: глаза `happy` на 2 с, прыжок `oy` −0.06 (220) → 0 (220, back); - 0.25 с: руки выдвигаются (280 мс), лёгкий squash, звук `greet`; - 0.45–1.55 с: **машет правой рукой**: - рука поднимается к уровню глаз за 180 мс; - потом осциллирует с частотой 13 рад/с (x ±0.06, y ±0.14 высоты тела, поворот ±0.35); - тело покачивается `tilt = −0.06 + sin(2π·1.2t)·0.07`; - 0.55 с и 1.50 с: моргания; - 1.55 с: руки прячутся (200 мс); - 1.75 с: короткие `happy`-глаза. - Если пользователь кликнул во время приветствия, руки прячутся за 150 мс. **Задача:** - дизайн рук (сейчас это просто эллипсы цвета тела, торчащие снизу по бокам); - раскадровка приветствия с бровью («поиграть бровями» вместо или вместе с маханием?). ### 13.3 Прятки в чёлке - **hidden:** персонаж 6 pt, почти невидим. - **compact:** при наведении на чёлку выглядывает (24–30 pt). - **expanded:** чёлка раскрывается, персонаж 44–66 pt слева. **Задача:** как он «выглядывает» из чёлки. Может, сначала из-под края показывается только бровь? --- ## 14. Наряды (гардероб) Правый клик → гардероб. Наряды: - `partyHat`, `beanie`, `crown`, `sunglasses`, `roundGlasses`, `bow`, `scarf`, `witchHat`, `pumpkin` (перекрашивает тело в оранжевый), `santaHat`, `bunnyEars`; - `auto` — по сезону: 31.12–2.01 праздничный колпак, 1–26.12 колпак Санты, октябрь ведьмина шляпа, Пасха уши кролика, 21.06–31.08 очки. Анимация: старый наряд исчезает за 180 мс → новый появляется за 350 мс с перелётом → squash. Шапки и помпоны болтаются по `physDx/physDy`. **Задача:** - адаптируй каждый наряд под новую форму головы и бровь (очки поверх брови? шапка на брови?); - предложи 3–5 своих кринжовых нарядов (бигуди, золотая цепь «бро», накладные усы, ободок с глазами и т. п.). --- ## 15. Формат раскадровок Для каждой анимации — таблица ключей: ``` Анимация: approval-вход Длительность: 450 мс, однократно Звук: approval (в 0 мс) | t, мс | параметр | значение | кривая | комментарий | |-------|---------------|----------|--------|------------------------------| | 0 | oy | 0 | | старт | | 150 | oy | -0.2 | out | подпрыгнул | | 450 | oy | 0 | back | приземлился с перелётом | | 0 | browAngle | 0 | | | | 120 | browAngle | 0.8 | out | бровь резко вниз — «ну?!» | | 0..∞ | mouthOpen | 0.3+0.1·sin(12t) | — | орёт, пока ждёт | Ключевые позы: [картинка 1: t=0] [картинка 2: t=150] [картинка 3: t=450] ``` - Новые параметры (бровь, рот, слюна и т. д.) — с диапазоном и описанием «что значит 0, что значит 1». - Для постоянных поведений — формула от времени `t` (как в разделе 8). - Позы — картинками. --- ## 16. Звуки (для синхронизации) Звуки уже есть (28 штук), раскадровки к ним привязывай по моменту: `annoyed, approval, approve, attach, blip, close, dizzy, error, finish, greet, greeting, gulp, hover, love, open, peek, pop, proud, question, rate, search, send, slap, sleep, think, tick, wink, work, yawn` Если для новых эмоций нужны новые звуки — опиши их словами: длительность, характер. Например: «отрыжка 0.4 с, низкая». --- ## 17. Чек-лист приёмки - [ ] Узнаваем силуэтом при 24 pt на чёрном. - [ ] Бровь — главный выразительный элемент, читается при 30 pt. - [ ] Все 11 состояний различимы с первого взгляда. - [ ] Все 13 форм глаз нарисованы. - [ ] Работает в однотонной заливке любого цвета (мини-боты). - [ ] Лицо корректно «едет по шару» при yaw ±0.65 и pitch ±0.5. - [ ] Есть вариант-коробка (morph = 1) с прорезью-ртом. - [ ] Руки, частицы, значки, наряды — в одном стиле. - [ ] Только векторные примитивы и градиенты, без растра. - [ ] Не похож на Mochi из Coucou. - [ ] Иконка 1024 и иконка меню-бара.