Движок vs контент
Долгосрочно Mother of Learning — универсальный движок, не D&D 5e специфичный инструмент. Объясняет, что именно «знает про WotC» текущий код и как это разделяется через content-packs.
Текущий прод — D&D-flavored MVP: движок и контент перемешаны. Схема
знает про rarity, attunement, item_slot; статблоки монстров — стандарт
D&D 5e. Долгосрочная цель: D&D 5e — это один из контент-паков, движок не
знает о Wizards of the Coast.
Что в коде специфично для D&D
Поля и таблицы, которые понимают только D&D 5e:
| Объект | Поле / таблица | D&D-концепция |
|---|---|---|
item_attributes | rarity (common..legendary..artifact) | редкость магических предметов |
item_attributes | slot_slug (голова, доспех, кольцо…) | слоты снаряжения |
item_attributes | attunement (requires_attunement) | настройка предмета |
| monster-статблок | поля AC, HP, CR, saving throws, скоростей, языков | CR и сейвы — чисто D&D |
| spell nodes | школа, уровень, компоненты, время каста | SRD spell-формат |
categories | scope='item' сиды (8 категорий, 13 слотов, 2 источника) | D&D item taxonomy |
Контент (предметы, монстры, спеллы) привезён из dnd.su — 800+ предметов в миграциях 044–052+, монстры SRD в миграциях 019/013–023.
Что — чистый движок
Вещи, не связанные ни с D&D, ни с конкретной системой:
- Граф нод и рёбер (
nodes,edges,node_types,edge_types) — типонезависим, любой slug создаётся без кода. - Транзакционный лог (
transactions,categories) — монеты как cp/sp/gp/pp пришиты к D&D, но схема лога универсальна. - Петли, сессии, хроники — механика повторяющихся циклов не специфична для D&D.
- Auth, роли, RLS —
owner/dm/playerне знают про систему правил. - Approval workflow — паттерн review+approve применим к любой системе.
- Realtime broadcast — технически нейтрален.
- Telegram Mini App shell — интерфейс, не правила.
Целевая архитектура: content-pack
Content-pack — портабельный пакет данных и схем:
- Состав: monsters, spells, items, classes, races, conditions, backgrounds — всё в переносимом формате (JSON Schema, версии).
- Изоляция: content-pack не меняет engine-таблицы. D&D-специфика
(
rarity, CR, spell slots) — внутри пака, движок знает только о «модулях» с эффектами. - Версионирование: пак имеет version, кампания подключает конкретную версию. Обновление пака — явное действие, не молчаливый update.
- Переносимость: DM форкает пак (
forked_from), вносит homebrew — спека 047. Персонаж из одного пака переносится в другой с проверкой совместимости.
Движок как RPG-рогалик
Эпик «RPG-движок» (спеки 045–051, .specify/epics/rpg-engine/constitution.md)
строит универсальный механизм модулей:
Раса, классовая фича, фит, предмет, спелл, бафф, факультатив — один механизм «модуль». Никакого пер-категорийного хардкода.
Новая категория контента = данные, не код. Эффекты модуля («+1 к КД», «преимущество на Скрытность») — декларативные блоки. D&D 5e — просто набор таких деклараций, упакованный в content-pack.
Миграционный путь
«Экстрагировать D&D из движка» — не один большой рефакторинг, а серия шагов:
- Engine Core (spec-045) — механизм модулей. Движок понимает «модуль с эффектами» без знания о конкретных эффектах D&D.
- Спеллы (spec-046) — первый полноценный content-table за пределами
nodes.fields. Плюс машинерия импорта из dnd.su. - Форк нод (spec-047) —
forked_fromна ноде, канон → homebrew. - Классы/подклассы (spec-050) — таблицы прогрессии, полностью контент-зависимые.
После всех этих шагов item_attributes.rarity и статблоки монстров становятся
данными content-pack «D&D 5e SRD», а не частью engine-схемы.
→
node-graph.md— универсальная схема, которая остаётся в движке. →roadmap/engine-pivot.md— полная карта миграции к движку + пакам.