Движок 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_attributesrarity (common..legendary..artifact)редкость магических предметов
item_attributesslot_slug (голова, доспех, кольцо…)слоты снаряжения
item_attributesattunement (requires_attunement)настройка предмета
monster-статблокполя AC, HP, CR, saving throws, скоростей, языковCR и сейвы — чисто D&D
spell nodesшкола, уровень, компоненты, время кастаSRD spell-формат
categoriesscope='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, роли, RLSowner/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. Персонаж из одного пака переносится в другой с проверкой совместимости.

roadmap/content-packs.md

Движок как RPG-рогалик

Эпик «RPG-движок» (спеки 045–051, .specify/epics/rpg-engine/constitution.md) строит универсальный механизм модулей:

Раса, классовая фича, фит, предмет, спелл, бафф, факультатив — один механизм «модуль». Никакого пер-категорийного хардкода.

Новая категория контента = данные, не код. Эффекты модуля («+1 к КД», «преимущество на Скрытность») — декларативные блоки. D&D 5e — просто набор таких деклараций, упакованный в content-pack.

Миграционный путь

«Экстрагировать D&D из движка» — не один большой рефакторинг, а серия шагов:

  1. Engine Core (spec-045) — механизм модулей. Движок понимает «модуль с эффектами» без знания о конкретных эффектах D&D.
  2. Спеллы (spec-046) — первый полноценный content-table за пределами nodes.fields. Плюс машинерия импорта из dnd.su.
  3. Форк нод (spec-047)forked_from на ноде, канон → homebrew.
  4. Классы/подклассы (spec-050) — таблицы прогрессии, полностью контент-зависимые.

После всех этих шагов item_attributes.rarity и статблоки монстров становятся данными content-pack «D&D 5e SRD», а не частью engine-схемы.


node-graph.md — универсальная схема, которая остаётся в движке. → roadmap/engine-pivot.md — полная карта миграции к движку + пакам.