- Mycelium graph: nodes/edges/strength, deposit discoveries, weighted extraction - Fungal nodes: ECS entities on world map with bioluminescent glow animation - Knowledge system: deposit at nodes (+ auto on death), memory flash retrieval - Mycosis: visual tint overlay on prolonged node contact, reveal threshold - Spore shop: 5 Cradle bonuses (health, elements, knowledge boost) - MetaState extended with MyceliumGraphData, IndexedDB persistence updated - GameScene: node spawning, glow rendering, E-key interaction, mycosis overlay - CradleScene: spore shop UI, Mycelium stats, purchased effects forwarding - 36 new tests (385 total) Co-authored-by: Cursor <cursoragent@cursor.com>
16 KiB
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 |