# Пепельные луга — арт-библия пиксель-арта

> Основа — `docs/world.md`. Ключевое правило арта из сеттинга:
> **тёплый цвет — только жизнь.** Золото колокольчика, бронза, огонь кузни.
> Всё остальное — серо-оливковое, ржавое, тёмное.

## 1. Палитра (32 цвета)

Движок и генератор (`apps/game/tools/pixelart/`) используют ровно эти цвета. Имя цвета — тоже
комментарий к настроению.

### Пепел (нейтраль)

| Слот | HEX | Роль |
|---|---|---|
| P0 | `#17171d` | контур, самая тёмная тень |
| P1 | `#23232b` | тень плащей, ночная сторона |
| P2 | `#2f2f38` | тёмный серый |
| P3 | `#3e3e48` | пепельный накат, тень тайлов |
| P4 | `#5b5b66` | базовый серый |
| P5 | `#767681` | светлая пыль |
| P6 | `#94949e` | пепельный бугор, свет |
| P5H| `#b2b2bb` | выгоревший свет (редко!) |

### Мёртвая трава (оливково-серая)

| Слот | HEX | Роль |
|---|---|---|
| G0 | `#343b2c` | тень травы |
| G1 | `#4a5340` | базовый луг |
| G2 | `#626c4c` | трава, свет |
| G2H| `#7d8662` | сухие стебли |

### Ржавчина и металл (индастриал)

| Слот | HEX | Роль |
|---|---|---|
| R0 | `#3a2822` | тёмная ржавчина, тень |
| R1 | `#5c3b2e` | базовая ржавчина |
| R2 | `#82503a` | светлая ржавчина |
| M0 | `#26262e` | тёмный металл |
| M1 | `#44454e` | сталь |
| M2 | `#61626c` | светлый металл |

### Вода (Серые пруды)

| Слот | HEX | Роль |
|---|---|---|
| W0 | `#22343c` | глубина |
| W1 | `#3b5e6b` | базовая |
| W2 | `#568590` | блики, рябь |

### Тепло (только жизнь!)

| Слот | HEX | Роль |
|---|---|---|
| B0 | `#8a6a2e` | бронза, тень |
| B1 | `#d99a32` | бронза, свет / цветок |
| B2 | `#f2cd68` | золото,highlight цветка и колоколов |
| F0 | `#d97f2b` | огонь кузни, уголёк |
| F1 | `#f2b45a` | огонь, свет |

### Люди и ткань

| Слот | HEX | Роль |
|---|---|---|
| C0 | `#3a4356` | плащ звонаря (тень) |
| C1 | `#4d5a72` | плащ звонаря (свет) |
| W3 | `#8a8f7d` | вощёное полотно, Мила |
| S0 | `#8a6d55` | кожа, тень |
| S1 | `#c9a689` | кожа, свет |
| T0 | `#5a4a3c` | шляпа/плащ Ирвина |
| T1 | `#77634f` | шляпа/плащ Ирвина, свет |

Правила палитры: чёрный/белый запрещены (крайности — P0 и P5H). B1/B2/F0/F1 занимают
не более 5% площади любого спрайта — золото должно быть событием, а не заливкой.

## 2. Формат и размеры

Источник номиналов — реестр `apps/game/tools/pixelart/sizes.mjs` (его читают
генераторы и линтер; рантайм берёт размер кадра из атласа — `AssetLoader.frameSize`).

- Тайл: ромб **32×16** (движок, `DEFAULT_ISO`).
- Персонаж: **16×24**, якорь — центр между ступней (низ спрайта = центр ромба тайла).
- Дерево (высокий объект): **32×48**, якорь — центр ствола у земли.
- Пропсы (бочки, тележка Милы, рельсы): 16×16 или 16×24, тоже якорь у земли.
- Крупные объекты (`props`, footprint w×h): спрайт покрывает весь footprint, якорь —
  низ-центр footprint'а (движок ставит сам). Слоты:
  - дом 2×2: **64×80** (footprint 64×32 + стены/крыша);
  - дом 3×3: **96×96**;
  - большое здание 4×4: **128×112**.
  Плотность пикселя — та же, что у тайлов и персонажей (1 px спрайта = 1 px мира):
  апскейл-болванки из AI-генерации в эти слоты не попадают — только как плейсхолдеры.
- AI-атласы персонажей: пайплайн `npm run aiart` (gen/build/promote, манифест
  `apps/game/tools/aiart/atlas-manifest.json`); в `assets/` — только после
  ручного апрува обзорного листа (`status: approved`). Палитра — параметр
  манифеста; по умолчанию эти 32 цвета.
- Шрифт интерфейса: системный monospace до появления пиксельного шрифта (8px в виртуальном разрешении).

## 3. Стиль

1. **Контур**: 1px `P0` только на внешнем силуэте; внутренние формы отделяются тенью, не контуром.
2. **Свет**: сверху-слева. Три тона на форму: тень → база → свет. Хайлайт — 1px, редко.
3. **Дизеринг**: разрешён шахматный 1px на границе двух тонов, не более 2px полосы.
4. **Цветы жизни**: цветок = 3 пикселя B1 + 1px B2 сверху. Никаких «нарисованных» лепестков крупнее.
5. **Механизмы**: ржавчина по нижним граням, сталь сверху. Пепел ложится на горизонтальные грани (P5 сверху рельсов).
6. **Анимация ходьбы**: 2 кадра (ноги в разнобой) + idle. Читается на 16×24 — крупность важнее плавности.
7. **Свет сцены — оверлей, не пиксели спрайта**: источники **прорезают** тёмный
   ambient-слой («тьма с прорезями»: RT-карта силы тьмы + erase-ступени, тон —
   лёгкая аддитивная подкраска) и в палитру спрайтов не входят. Цвет света — из
   тёплой гаммы жизни (F1 `#f2b45a` по умолчанию); холодный свет — только для
   неживого (резонанс башни — W2). Ночной ambient областей — глубокая синева
   (`#3e4658` и темнее), свет колокольчиков — B2 `#f2cd68`. Интенсивность
   источника ≤ 1.1, радиус ≤ 5 юнитов; «золото — событие, а не заливка» относится
   и к свету: гало — событие сцены, не фон. Виньетка (низкое hp, зона наката) и
   тёмные ауры зон — multiply-затемнение краёв/пятна, не рисуются в спрайты.

## 4. Ассеты и чеклист

Все PNG — из `apps/game/assets/`, генерируются `apps/game/tools/pixelart/gen.mjs`.

### Тайлы (32×16, id совпадает с `apps/game/src/data/map.ts`)

| id | файл | содержание |
|---|---|---|
| 0 | `tiles/grass.png` | серая трава, редкие сухие стебли |
| 1 | `tiles/path.png` | звонёная тропа: утоптанный пепел, светлее травы |
| 2 | `tiles/water.png` | Серый пруд: W1 база, блики W2 |
| 3 | `tiles/tree.png` | дерево Ржавой рощи — 32×48, tall-объект |
| 4 | `tiles/ash.png` | пепельный бугор: P4/P6 с тёмным ободом |
| 5 | `tiles/bellflower.png` | трава + цветок B1/B2 (квестовый тайл) |
| 6 | `tiles/tower.png` | башня Звенца — 32×80, tall-объект 2.5 юнита: бак на ногах-рельсах, колокол B0/B2 под баком |
| 7 | `tiles/house.png` | дом Звенца — 32×56, tall-объект 1.75 юнита: стены из вагонных щитов, крыша из шпал |
| 18 | `tiles/wire.png` | бухта кабеля рощи — 32×32, tall-объект 0.6 юнита: ржавые кольца R1/R2 по M1/M0 с тёмными сечениями |
| 19 | `tiles/rail.png` | рельсы разъезда — 32×16, ходовой: две нити R1/R2 по шпалам T0/T1 на утоптанном пепле |
| 20 | `tiles/stairs.png` | люк-ступени — 32×16, ходовой: тёмный провал P0 с тремя ступенями, ржавая кромка R1 |
| 21 | `tiles/machine.png` | Старая Машина — 32×80, tall-объект 2.5 юнита: железный корпус M0/M1 с ржавыми потёками, труба, тёмное устье с тлеющими углями F0/B0 (огонь — жизнь) |
| — | `tiles/house_big.png` | большой дом — 64×80, prop-объект footprint 2×2: два модуля щитов, козырёк над дверью, окна с переплётом |
| — | `tiles/chest.png` | сундук — 24×18, prop интерьеров: вощёное дерево T0/T1, бронзовая полоса по стыку крышки и замок B0/B1/B2 (см. `SIZES.prop.chest`) |
| — | `tiles/grass_2/3.png`, `tiles/path_2.png`, `tiles/ash_2.png` | варианты текстур 32×16 (та же палитра, другой seed шума) — микс по хэшу координат, в `tiles` не попадают |
| — | `tiles/decor_tuft/stone/bald.png` | декор 16×16, рисунок в ромб 16×8: кустик G1/G2/G2H, камешек P3/P5, проплешина G0/G1 — прозрачное поле, рисуются плашмя |

### Персонажи (16×24)

| файл | кадры | содержание |
|---|---|---|
| `chars/hero_down_1.png`, `hero_down_2.png` | ходьба вниз | звонарь: плащ C0/C1, шляпа T0, колокольчик B0 |
| `chars/hero_up_1.png`, `hero_up_2.png` | ходьба вверх | спина: узел плаща, лампа |
| `chars/hero_side_1.png`, `hero_side_2.png` | ходьба вправо | влево — горизонтальный флип |
| `chars/elder_irwin.png` | idle | длинный плащ T0/T1, борода S0, стилос |
| `chars/trader_mila.png` | idle | платок W3, тележка-ручка, ручной колокольчик B1 |
| `chars/fauna_deer_1.png`, `fauna_deer_2.png` | стоит/шаг | безгласный олень: серо-оливковый G1/G2, рога M2, без тёплых пикселей |

### Интерьер/UI (позже)

- Панель диалога: 9-patch, тёмный P1 с бронзовой окантовкой B0.
- Иконки: цветок, маска-полотно, колокольчик — 8×8.

## 5. Что где хранится

- `apps/game/tools/pixelart/gen.mjs` — генератор: пиксель-карты в ASCII + энкодер PNG (без зависимостей).
- `apps/game/assets/` — выход генератора, загружается `AssetLoader` по ключу = пути без расширения
  (`tiles/grass` → `assets/tiles/grass.png`).
- После замены сгенерированного арта на нарисованный руками имена файлов и размеры не меняются.