Files
synthesis/IMPLEMENTATION-PLAN.md
Денис Шкабатур 6ba0746bb9 phase 9: biome expansion — 3 biomes, 40 elements, 119 reactions, 9 species
Expand beyond vertical slice with two new biomes and massive chemistry expansion:

Chemistry: +20 real elements (Li→U), +39 compounds (acids/salts/oxides/organics),
+85 reactions (Haber process, thermite variants, smelting, fermentation, etc.)

Biomes: Kinetic Mountains (physics/mechanics themed) and Verdant Forests
(biology/ecology themed), each with 8 tile types and unique generation rules.

Creatures: 6 new species — Pendulums/Mechanoids/Resonators (mountains),
Symbiotes/Mimics/Spore-bearers (forests). Species filtered by biome.

Infrastructure: CradleScene biome selector UI, generic world generator
(tile lookup by property instead of hardcoded names), actinide element category.

487 tests passing (32 new).

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-12 17:27:15 +03:00

249 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 08
После 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 |