# Пепельные луга

Изометрическая пиксельная RPG с сюжетом — и собственный жанронезависимый игровой движок под неё.

- **Движок**: свой (`packages/engine`), TypeScript, PixiJS 8 как низкоуровневый рендер-бэкенд. Спроектирован под переиспользование в других жанрах.
- **Игра**: одиночная сюжетная RPG (`apps/game`), сначала браузер, дальше — планы на Steam и Android.
- **Стек**: TypeScript (strict), Vite (dev + сборка), Vitest (тесты движка).

## Быстрый старт

```bash
npm install
npm run dev                          # http://localhost:5173
npm test                             # 158 юнит-тестов (движок + игра)
npm run build                        # прод-сборка
npm run art                          # перегенерация пиксель-арта
npm run maps                         # перегенерация карт-файлов (.map)
```

## Структура

```
docs/engine          # документация движка: архитектура, все подсистемы, рецепты
docs/demo.md         # проектная дока среза: матрица «подсистема → где показана»
docs/world.md        # библия мира: сеттинг, локации, персонажи, сюжет
docs/art-style.md    # арт-библия: палитра, размеры, стиль, чеклист ассетов
packages/engine      # движок: цикл, сцены, ввод, камера, изометрия, A*, сейвы,
                     #   диалоги, твины, GameState, UI-кит, частицы, аудио, карты
apps/game            # RPG: сцены, локации, NPC, диалоги, бой, сюжет
apps/game/assets     # пиксель-арт и карты (tools/pixelart, tools/maps)
tools/pixelart       # генератор арта: PNG из кода, палитра в одном месте
tools/audio          # генератор WAV: звуки и музыкальные петли из кода
tools/maps           # генерация карт-файлов через encodeMap (+тесты формата)
```

Правила: игра использует только публичный API `@rpg/engine`; движок ничего не знает о жанре игры; тёплый цвет в арте — только жизнь (цветы, бронза, огонь).

## Документация движка

Начни с `docs/engine/README.md` — там карта документации и принципы архитектуры.

| Файл | О чём |
|---|---|
| `getting-started.md` | новая игра на движке с нуля: bootstrap, сцены, ассеты |
| `core.md` | Engine, GameLoop, Tween, GameState, StateMachine, Settings |
| `render.md` | Renderer, pixel-perfect, Camera, IsoDepthLayer, частицы |
| `input.md` | действия, клавиатура, мышь, тач, геймпад |
| `maps.md` | изометрия, A*, формат карт (JSON+RLE), импорт из Tiled |
| `ui-and-dialogue.md` | UI-кит, шрифт VT323, DialogueRunner и формат графов |
| `assets-audio-save.md` | ассеты и атласы, аудио-шины, сейвы |
| `art-pipeline.md` | генератор арта, палитра, замена на рисованный |
| `recipes.md` | «как сделать»: локация, NPC, квест, анимация, частицы |

Правила: игра использует только публичный API `@rpg/engine`; движок ничего не знает о жанре игры; тёплый цвет в арте — только жизнь (цветы, бронза, огонь).

## Мир

Сорок лет назад Северные Печи горели девять дней — и пепел накрыл край. Пепел гасит звук
и цвет; против него работает только резонанс. Звонари прозванивают дороги, лунные
колокольчики пьют пепел из земли. Полная библия — в `docs/world.md`.

Первый акт — вертикальный срез-витрина движка: выжженные луга, Серые пруды, старейшина
Ирвин, безгласная торговка Мила, квест «Три цветка» и бой с пепельными сгустками
в реальном времени (удар-конус, резонанс, звук как ресурс). Управление: клик — идти/атаковать,
Space — удар (удержать — резонанс), I — сумка, F3 — отладка, Esc — меню/сейв.