Мир как лог наблюдений
До наблюдения мира нет. Объясняет, почему состояние локации фиксируется только в момент, когда туда приходит персонаж, и чем это отличается от «живого мира» в духе Dwarf Fortress.
DM держит планы в голове или в личном scratchpad'е. В БД ничего не
отражается до момента, когда игрок реально приходит в локацию. Единственное,
что фиксируется — состояние локации в момент наблюдения. Append-only.
Изменения только через события (correction).
Почему не «живой мир»
В Dwarf Fortress мир существует параллельно игроку: гоблины нападают, реки текут, осады случаются без участия пользователя. Это красиво — и колоссально сложно поддерживать.
Mother of Learning делает обоснованное упрощение: мир — это то, что видели персонажи. До прихода группы в локацию у неё нет состояния в БД. DM знает, что там должно быть; система не знает — и это нормально.
Три причины, почему так лучше:
-
Масштаб west-marches. 30+ игроков, несколько DM, параллельные события в разных уголках мира одновременно. Поддерживать актуальное состояние каждой локации в реальном времени — задача уровня MMORPG, не ролевой кампании.
-
DM как фильтр. DM — не исполнитель детерминированной симуляции, а рассказчик. Процедурные подсказки системы (таблицы встреч, генераторы лута) — предложения, которые DM принимает, отклоняет или меняет. Мир в БД — это то, что DM решил зафиксировать, а не то, что «рассчитала симуляция».
-
Техническая простота. Append-only лог наблюдений — простая и надёжная модель. Нет конфликтов «система думает X, DM хочет Y».
DM scratchpad — не состояние мира
Личные заметки DM о планируемых событиях, непришедших NPC, секретах локаций —
это не часть nodes / events. Они живут в инструментах DM: личный документ,
хроника с пометкой dm_only, внешний инструмент. Когда событие случается
с игроком, оно фиксируется как нода или транзакция. До этого — не существует
в системе.
LocationSnapshot — целевая концепция
В HANDOFF-архитектуре фиксируется LocationSnapshot — снимок состояния
локации в момент наблюдения: кто там был, что нашли, какие были условия.
Дальнейшие изменения — только через события correction.
В проде сейчас: ноды с node_type='location' — это актуальный snapshot.
Если DM правит локацию, запись обновляется напрямую (hard update). Журнала
изменений нет — пока не внедрён soft-delete и dm_audit_log.
→ roadmap/audit-log-and-safety.md
Процедурные подсказки vs факты мира
Система может предложить содержимое новой локации — на основании биома, глубины данжа, активных таблиц встреч. Это всегда предложение. DM принимает решение о фиксации: до принятия ничего не попадает в БД.
Это tool-first принцип в действии.
→ tool-first.md
→
event-sourcing.md— как лог событий хранит историю изменений мира. →persistence-scope.md— что из этого лога переживает сброс петли.