Генерация бэкстори
У объектов должен быть бэкстори, который привел к тому что они заброшены.
Проще всего будет генерировать бэкстори в обратном порядке, исходя от случившейся катастрофы что привела к заброшенному состоянию.
История катастрофы генерируется по графу нод, где каждая катастрофа является крайней нодой. Другими нодами являются элементы колонии (ресурсы, оборудование, командование). Сначала выбирается внешняя (входная) нода из общего списка внешних нод. После этого рандомно выбирается связанная нода, затем рандомно выбирается нода связанная с уже выбранной нодой, и так далее.
Пример:
- Катастрофа - вооружённое столкновение с пиратами
- Получаем список смежных нод, в данном случае одна - служба безопасности, выбираем её как точку провала.
- Получаем список смежных со службой безопасности нод: командование, энергообеспечение, телекоммуникации - это ноды, требующиея для работы ноды СБ. Случайно выбираем одну из нод, например - командование. Помечаем её как точку провала.
- Выбираем случайную смежную с командованием ноду...
Граф не является пирамидой - телекоммуникации могут так же быть зависимы от энергообеспечения, а командование от телекоммуникаицй и СБ. То что граф не является пирамидой в данном случае является главным фактором определяющим количество возможных уникальных бэкстори. Этапом истории является не нода а соединение между нодами, что позволяет посещать одну ноду несколькими путями. Все соединения односторонние, так что "СБ-Командование" и "Командование-СБ" это два разных соединения.
Чтобы генератор не обходил все возможные связи в графе, максимальное количество пройденных связей должно быть ограничено.
При первом проходе каждой ноды, ей генерируются трейты - положительный и отрицательный. К примеру, у ноды СБ может быть положительный трейт - героизм, и отрицательный - малочисленность. У проходных нод есть оба трейта чтобы обеспечить эквилибриум. У тупиковой ноды, на которой закончилась генерация, оставляется только отрицательный трейт. Трейты являются дополнительной информацией для генерации документов и прочих объектов истории, а так же они несут роль "тупиковой ноды", определяющий причину провала последнего в цепочке отдела.
Цепочка связей так же определяет их хронологию.
Генератор документов
У модуля колонии есть ассоциированная с ней нода, которая определяет возможные типы документов в модуле. Каждый тип документа может должен иметь список возможных связей (командование-сб, инженеры-командование и т.п.) и код для их генерации в текст (делать по аналогии с TabletopSetup). Генератор должен убедится что в документах есть отсылка на каждую из связей. Для этого из модулей колонии генерируется список возможных документов, после чего выбираются документы покрывающие все связи.
Разработка
Для удобства разработки и повышения качества архитектуры кода генератор должен писаться отдельно от игры и потом встроен в неё. Так как разработка генератора не сложна технически, а объём и качесивр контента зависит преимущественно от нод, то генератор целком включается в MVP.