Phase 11 summary: 51 new tests (562 total), 7 new/modified files. Core systems: GreatCycleState, RunTrace, WorldTrace ECS, RenewalScene, cycle narrative, Mycelium maturation, CradleScene/UIScene/GameScene integration. Co-authored-by: Cursor <cursoragent@cursor.com>
249 lines
16 KiB
Markdown
249 lines
16 KiB
Markdown
# Synthesis — Implementation Plan
|
||
|
||
## Overview
|
||
|
||
**Target:** Vertical Slice — один полный ран через один биом (Каталитические Пустоши)
|
||
**Approach:** Каждая фаза даёт тестируемый, играбельный инкремент
|
||
**Method:** Полностью агентная разработка (AI пишет код, проверяет через Playwright и vitest)
|
||
|
||
---
|
||
|
||
## Phase 0: Project Setup ✅
|
||
|
||
**Цель:** Собираемый, запускаемый проект с dev-инструментарием
|
||
|
||
| # | Задача | Статус |
|
||
|---|--------|--------|
|
||
| 0.1 | Инициализация npm + зависимости (Phaser, bitECS, Vite, Vitest) | ✅ |
|
||
| 0.2 | TypeScript strict конфигурация | ✅ |
|
||
| 0.3 | Vite конфигурация (HMR, chunk splitting) | ✅ |
|
||
| 0.4 | Phaser game config (1280x720, pixel-art, arcade physics) | ✅ |
|
||
| 0.5 | BootScene с титульным экраном | ✅ |
|
||
| 0.6 | Cursor rules (6 правил под предметную область) | ✅ |
|
||
| 0.7 | Implementation plan + progress tracking | ✅ |
|
||
|
||
**Критерий готовности:**
|
||
- `npm run dev` запускает dev-сервер
|
||
- Титульный экран виден на localhost:5173
|
||
- TypeScript компилируется без ошибок
|
||
|
||
---
|
||
|
||
## Phase 1: Chemistry Engine
|
||
|
||
**Цель:** Ядро химической системы — элементы, реакции, соединения
|
||
**Зависимости:** Phase 0
|
||
**Это чистая логика — идеальна для TDD (vitest)**
|
||
|
||
| # | Задача | Описание |
|
||
|---|--------|----------|
|
||
| 1.1 | Типы и интерфейсы | `Element`, `Reaction`, `Compound`, `ReactionResult`, `ElementCategory`, `MatterState` |
|
||
| 1.2 | Данные: 20 элементов | H, He, C, N, O, Na, Mg, Al, Si, P, S, Cl, K, Ca, Fe, Cu, Zn, Sn, Hg, Au — из реальной таблицы Менделеева |
|
||
| 1.3 | Реестр элементов | Загрузка из JSON, lookup по symbol/atomicNumber, валидация |
|
||
| 1.4 | Движок реакций | Ввод: элементы + условия → вывод: продукт ИЛИ причина неудачи. Lookup по отсортированному ключу реагентов (O(1)) |
|
||
| 1.5 | Данные: 50 реакций | Базовые: горение, окисление, кислотно-щелочные, синтез солей, органика. Каждая с описанием науки |
|
||
| 1.6 | Соединения | Свойства: формула, название, игровой эффект, состояние, масса. Реестр с lookup |
|
||
| 1.7 | Тесты | Загрузка элементов, lookup, все 50 реакций (корректные продукты), невалидные реакции (корректные причины отказа) |
|
||
|
||
**Критерий готовности:**
|
||
- `npm run test:run` — все тесты химии проходят
|
||
- Na + Cl → NaCl, H + H + O → H₂O, и т.д.
|
||
- Невалидная реакция возвращает человекочитаемую причину
|
||
- Все данные элементов соответствуют реальной таблице Менделеева
|
||
|
||
---
|
||
|
||
## Phase 2: ECS Foundation
|
||
|
||
**Цель:** Работающая ECS с мостом к Phaser-рендерингу
|
||
**Зависимости:** Phase 0
|
||
|
||
| # | Задача | Описание |
|
||
|---|--------|----------|
|
||
| 2.1 | World setup | bitECS world + контейнер времени (delta, elapsed, tick) |
|
||
| 2.2 | Core components | `Position`, `Velocity`, `SpriteRef`, `Health`, `ChemicalComposition` |
|
||
| 2.3 | Movement system | Обновляет Position по Velocity * delta |
|
||
| 2.4 | Phaser ↔ bitECS bridge | Синхронизация: ECS Position → Phaser sprite.x/y. Создание/удаление спрайтов по enterQuery/exitQuery |
|
||
| 2.5 | Entity factory | `createEntity(world, components)` → eid. Фабрика для типовых сущностей |
|
||
| 2.6 | Health system | Урон, лечение, смерть при health ≤ 0 |
|
||
| 2.7 | Визуальный тест | 10-20 цветных кругов двигаются по экрану — проверить скриншотом |
|
||
|
||
**Критерий готовности:**
|
||
- Сущности рендерятся как спрайты/графика
|
||
- Движение работает (видно на скриншоте)
|
||
- Удаление сущности убирает спрайт с экрана
|
||
|
||
---
|
||
|
||
## Phase 3: World Generation
|
||
|
||
**Цель:** Процедурный тайлмап для Каталитических Пустошей
|
||
**Зависимости:** Phase 2
|
||
|
||
| # | Задача | Описание |
|
||
|---|--------|----------|
|
||
| 3.1 | Tilemap система | Phaser Tilemap из data-driven определений тайлов |
|
||
| 3.2 | Biome data | `biomes.json` — Каталитические Пустоши: типы тайлов, распределение, цвета |
|
||
| 3.3 | Noise генерация | simplex-noise для terrain. Высота → тип тайла. Seed-based для воспроизводимости |
|
||
| 3.4 | Типы тайлов | Выжженная земля, кислотные озёра, кристаллические формации, гейзеры, минеральные жилы |
|
||
| 3.5 | Размещение ресурсов | Руды/минералы на основе параметров биома и noise-карты |
|
||
| 3.6 | Камера | Следование за игроком, zoom (колесо мыши), clamp по границам карты |
|
||
| 3.7 | Миникарта | Упрощённая мини-карта в углу (цветные пиксели по тайлам) |
|
||
|
||
**Критерий готовности:**
|
||
- Карта генерируется с разнообразным рельефом
|
||
- Разные тайлы визуально отличимы
|
||
- Камера плавно следует за «игроком»
|
||
- Каждый запуск даёт уникальную карту
|
||
|
||
---
|
||
|
||
## Phase 4: Player Systems
|
||
|
||
**Цель:** Играбельный персонаж: движение, сбор, крафт, бросок
|
||
**Зависимости:** Phase 2, Phase 1, Phase 3
|
||
|
||
| # | Задача | Описание |
|
||
|---|--------|----------|
|
||
| 4.1 | Player entity + контроллер | WASD движение, мышь — направление/взаимодействие |
|
||
| 4.2 | Инвентарь | Весовой (атомные массы!), слоты, stack одинаковых элементов |
|
||
| 4.3 | Сбор элементов | Взаимодействие с объектами мира (руда, озеро, растение) → элемент в инвентарь |
|
||
| 4.4 | Крафтинг | Выбрать элементы → химический движок → результат/ошибка → в инвентарь |
|
||
| 4.5 | Система броска | ПКМ — запуск элемента/соединения как снаряда. Arcade physics для полёта |
|
||
| 4.6 | Quick slots | Клавиши 1-2-3-4 для быстрого переключения подготовленных предметов |
|
||
| 4.7 | HUD | UIScene поверх GameScene: кольцо здоровья, полоска инвентаря, инфо об элементе при наведении |
|
||
|
||
**Критерий готовности:**
|
||
- Игрок ходит по карте WASD
|
||
- Подбирает элементы с земли
|
||
- Комбинирует на верстаке — видит результат или причину неудачи
|
||
- Бросает натрий в воду — экзотермическая реакция
|
||
- HUD показывает здоровье, инвентарь, quick slots
|
||
|
||
---
|
||
|
||
## Phase 5: Creatures & Ecology ✅
|
||
|
||
**Цель:** Живая экосистема в Каталитических Пустошах
|
||
**Зависимости:** Phase 2, Phase 3
|
||
|
||
| # | Задача | Описание |
|
||
|---|--------|----------|
|
||
| 5.1 | Данные существ | 3 типа: Кристаллиды (медленные, прочные), Ацидофилы (кислотные), Реагенты (парные, взрывоопасные) |
|
||
| 5.2 | AI поведение | FSM: idle → wander → feed → flee → attack. Переходы по условиям (голод, угроза, территория) |
|
||
| 5.3 | Метаболизм | Что ест, что выделяет. Ацидофилы едят минералы → выделяют кислоту |
|
||
| 5.4 | Популяционная динамика | Упрощённые Лотка-Вольтерра: рождаемость, смертность, хищничество |
|
||
| 5.5 | Жизненный цикл | Яйцо → юность → зрелость → старение → смерть → разложение (→ нутриенты) |
|
||
| 5.6 | Взаимодействие | Наблюдение (кодекс), атака, базовое приручение |
|
||
| 5.7 | Тест экосистемы | Запустить без игрока: популяции должны колебаться, не вымирать полностью |
|
||
|
||
**Критерий готовности:**
|
||
- Существа спавнятся, двигаются, едят, размножаются, умирают
|
||
- Популяция без вмешательства достигает динамического равновесия
|
||
- Истребление хищников → перенаселение травоядных → коллапс (эмерджентно!)
|
||
- Существа реагируют на игрока
|
||
|
||
---
|
||
|
||
## Phase 6: Run Cycle ✅
|
||
|
||
**Цель:** Полный рогалик-цикл: рождение → смерть → перерождение
|
||
**Зависимости:** Phase 3, Phase 4, Phase 1
|
||
|
||
| # | Задача | Описание |
|
||
|---|--------|----------|
|
||
| 6.1 | Споровая Колыбель | Сцена пробуждения: выбор школы (Алхимик для начала) |
|
||
| 6.2 | Триггер смерти | Health ≤ 0 → запуск death sequence |
|
||
| 6.3 | Анимация смерти | Тело Адепта распадается на элементы (реальный состав: 65% O, 18% C, 10% H...) |
|
||
| 6.4 | «Момент между» | WebGL fractal shader — психоделическая визуализация перерождения |
|
||
| 6.5 | Мета-прогрессия | Кодекс (открытые элементы/реакции), споры (валюта), persistence (IndexedDB) |
|
||
| 6.6 | Фазы рана | Пробуждение → Исследование → Эскалация → Кризис → Развязка. Таймер/прогрессия |
|
||
| 6.7 | Эскалация | Нарастающая энтропия: нестабильные реакции, агрессивные существа |
|
||
| 6.8 | Кризис: Химическая Чума | Цепная реакция отравляет атмосферу. Нужна химия для нейтрализации |
|
||
| 6.9 | Школа: Алхимик | Стартовый набор (H, O, C, Na, S, Fe), принцип (химическое равновесие) |
|
||
|
||
**Критерий готовности:**
|
||
- Полный цикл: spawn → explore → gather → craft → die → fractal → respawn
|
||
- Кодекс сохраняется между ранами
|
||
- Споры начисляются за открытия
|
||
- Эскалация ощутимо меняет поведение мира
|
||
- Кризис запускается и решается через химию
|
||
- Fractal shader работает (даже простой вариант)
|
||
|
||
---
|
||
|
||
## Phase 7: Mycelium ✅
|
||
|
||
**Цель:** Подземная сеть, связывающая раны
|
||
**Зависимости:** Phase 6
|
||
|
||
| # | Задача | Описание |
|
||
|---|--------|----------|
|
||
| 7.1 | Граф Мицелия | Структура данных (ngraph): узлы, рёбра, метаданные |
|
||
| 7.2 | Грибные узлы | Точки на карте, где Мицелий выходит на поверхность. Визуально — светящиеся споты |
|
||
| 7.3 | Запись знаний | Депозит открытий в Мицелий для будущих ранов |
|
||
| 7.4 | Извлечение знаний | «Вспышки» — фрагменты воспоминаний из прошлых ранов |
|
||
| 7.5 | Микоз | Визуальное искажение при долгом контакте с узлом. Открывает скрытую информацию |
|
||
| 7.6 | Интеграция с Колыбелью | Стартовые бонусы за споры |
|
||
|
||
**Критерий готовности:**
|
||
- Узлы видны на карте
|
||
- Взаимодействие с узлом показывает память прошлого рана
|
||
- Знание из рана N появляется как подсказка в ране N+1
|
||
- Микоз-эффект визуально работает
|
||
- Споры тратятся на бонусы при старте рана
|
||
|
||
---
|
||
|
||
## Phase 8: First Archont — Ouroboros ✅
|
||
|
||
**Цель:** Первый босс-бой (головоломка, не рефлексы)
|
||
**Зависимости:** Phase 5, Phase 6
|
||
|
||
| # | Задача | Описание |
|
||
|---|--------|----------|
|
||
| 8.1 | Уроборос entity | Змей, поедающий хвост. Циклические фазы атаки |
|
||
| 8.2 | Паттерн-механика | Бой = петля с нарастающей сложностью. Игрок определяет паттерн и ломает его в нужный момент |
|
||
| 8.3 | Арена | Специальная генерируемая комната на подступах к Сердцу Синтеза |
|
||
| 8.4 | Множественные решения | Химическое, физическое, наблюдательное — минимум 3 пути к победе |
|
||
| 8.5 | Награда | Архонтова Память — лор-фрагмент в Кодексе, спорная щедрая награда |
|
||
|
||
**Критерий готовности:**
|
||
- Бой имеет узнаваемый повторяющийся паттерн
|
||
- Паттерн усложняется с каждым циклом
|
||
- Минимум 2 валидных стратегии победы работают
|
||
- Победа добавляет лор в Кодекс
|
||
|
||
---
|
||
|
||
## Vertical Slice = Phase 0–8
|
||
|
||
После Phase 8 игра содержит:
|
||
- ✅ Один полный биом (Каталитические Пустоши)
|
||
- ✅ Работающая химия (~20 элементов, ~50 реакций)
|
||
- ✅ Живая экосистема (3 вида существ с динамикой популяций)
|
||
- ✅ Полный цикл рана (рождение → смерть → перерождение)
|
||
- ✅ Мета-прогрессия между ранами (Кодекс, споры)
|
||
- ✅ Мицелий (память между ранами)
|
||
- ✅ Один босс (Уроборос)
|
||
- ✅ Фрактальная сцена смерти
|
||
- ✅ Одна школа (Алхимик)
|
||
- ✅ Один тип кризиса (Химическая Чума)
|
||
|
||
Это — вертикальный срез, описанный в GDD Section X.
|
||
|
||
---
|
||
|
||
## Beyond Vertical Slice (Post-MVP)
|
||
|
||
| Фаза | Содержание |
|
||
|-------|-----------|
|
||
| Phase 9 ✅ | +2 биома (Кинетические Горы, Вердантовые Леса), +20 элементов, +100 реакций |
|
||
| Phase 10 ✅ | +3 школы (Механик, Натуралист, Навигатор), принципы физики и биологии |
|
||
| Phase 11 ✅ | Великий цикл (7 ранов): следы между ранами, Великое Обновление |
|
||
| Phase 12 | +3 Архонта (Спора Прайма, Энтропа, Когнитон) |
|
||
| Phase 13 | Оставшиеся биомы + школы + существа |
|
||
| Phase 14 | Сердце Синтеза (финальный регион), нарратив |
|
||
| Phase 15 | Аудио: лупы, эмбиент, циклические саундскейпы |
|
||
| Phase 16 | Полировка: шейдеры, частицы, UI/UX, accessibility |
|