В настольно-ролевых играх часто принято использовать генераторы, дающие некие исходы и варианты лута/предметов/ситуаций из различных списков. В компьютерной сфере пишутся системы, обрабатывающие описания и реплики от пользователя и высылающие ему в ответ сгенерированные описания реакций и событий.

Что насчёт некого обратного, или гибридного способа - пользователь не пишет запрос литературно, а конструирует его в пару кликов и получает ответ в виде набора направляющих ассоциаций, а не законченного конкретного текста. Благодаря этим направляющим пользователь может сам описать, сколь угодно подробно, что же произошло.

В этой статье речь пойдёт о паре сюжетно-ролевых калькуляторов, собранных на движке Godot, в которых я частично автоматизировал варианты своей сюжетостроительной игромеханики, основанной на взаимодействии идентификаторов объектов. Доступны в браузере или в виде windows/linux приложений.

Штамм 33

Игромеханика практически повторяет одноимённую настольно-ролевую систему

Подразумевается некий базовый сюжетный расклад - глобальные силы трёх различных измерений проникают в реальный мир, инфицируя своим влиянием различные его объекты, места, существа и так далее. Такие объекты становятся носителями концепций иномировых парадигм и продолжают заражать ими реальность, всячески мутируя при этом. Заражённая сказочными энергиями книга меняет облик комнаты, где хранится на полке. Незнакомка, излучающая измерение ужаса, гуляет в городском парке, привнося туда области увядания и разложения. Цифровые копии пользователя вырываются из его личного компьютера, распространяя киберпанковое излучение в мир.

В приложении мы видим набор из нескольких стартовых объектов/субъектов со случайными двухзначными идентификаторами. Цвет каждого объекта указывает на парадигму, носителем которой он является. Стартовые объекты можно удалить и завести свои собственные (поначалу нейтральные, не привязанные к парадигмам).

Красная Королева и Червь выбраны для взаимодействия.
Красная Королева и Червь выбраны для взаимодействия.

Далее пользователь может выделять два любых объекта и вычислять для них один из двух вариантов взаимодействия (нажав одну из кнопок):

1) Объекты каким-либо образом сюжетно "сближаются", "притягиваются".

2) Объекты сюжетно "отдаляются", "конфликтуют".

В первом случае идентификаторы объектов перемножаются, во втором случае делятся. Результирующее число будет интерпретировано одной из парадигм в набор из нескольких слов ассоциаций, абстрактно описывающих, к чему же собственно привело взаимодействие объектов.

Например: Кот (46) бежит по Мосту (39) = 46 х 39 = ситуация 1794. Если же Кот падает с Моста или, наоборот, Мост падает на Кота, то нужно разделить объекты друг на друга для получения результата взаимодействия.

Первая парадигма (на старте "Сказка") интерпретирует результаты, чья первая ненулевая цифра 1,2 или 3. Вторая ("Хоррор") - начинающиеся с 4,5,6. Третья - оставшиеся.

Вышеописанная ситуация 1794 будет разрешена в концепциях первой, сказочной парадигмы, где 1 - Жизнь, 7 - Трансформация, 9 - Предмет.

Некоторые объекты не могут взаимодействовать определённым способом, по причине того, что установлены некоторые ограничения (результаты, меньшие определённого числа, блокируются) - совершенно любые идентификаторы было бы сложно обрабатывать математически корректно. Невозможность взаимодействия объектов в определённых конфигурациях может быть расценена с точки зрения сюжета как слишком малый эффект от ситуации.

Если пользователь в состоянии придумать появившийся в игровом мире новый объект на основе полученных подсказок, то он пишет уже свою конкретную интерпретацию в специальном поле и тем самым превращает её в новый сюжетный объект.

Например: ситуацию с котом на мосту, выдавшую Жизнь-Трансформация-Предмет в качестве ответа, мы можем интерпретировать в то, что кот нашёл на мосту некий полезный предмет, Оберег. Тогда в списке объектов появится новый доступный для взаимодействий объект - Оберег (1794).

Красная Королева отправилась к Червю (выбрано умножение объектов). Результат описан как Story Dark. Это может означать, например, что Червь её съел или похитил. Интерпретируя результат придумаем какой-нибудь объект, пусть от Королевы осталась только Корона, валяющаяся на земле. Кстати, эта ситуация также привела к открытию сюжетного достижения "44".
Красная Королева отправилась к Червю (выбрано умножение объектов). Результат описан как Story Dark. Это может означать, например, что Червь её съел или похитил. Интерпретируя результат придумаем какой-нибудь объект, пусть от Королевы осталась только Корона, валяющаяся на земле. Кстати, эта ситуация также привела к открытию сюжетного достижения "44".

В данном ролевом калькуляторе имеются условия для "прохождения" сюжетного сценария. Это система достижений, всего их 9 и когда все собраны, то история считается законченной. Вернее можно поставить точку, продолжить текущую, либо начать новую. Достижения вычисляются автоматически - это пары одинаковых цифр ("11", "44", "77" и так далее), встречающиеся в образующихся числах.

Особая пара "33" имеет деструктивное действие и может возникать неограниченное количество раз, в отличие от обычных достижений. Это своеобразный иммунный ответ реальности на особо опасную разновидность иномирового заражения, уничтожающий взаимодействующих носителей.

Слева ситуация привела к уничтожению Червя и Духа Червя, при их разделении (возникла пара "33"). Справа экран действующих парадигм, где выбран развёрнутый список киберпанковых концепций.
Слева ситуация привела к уничтожению Червя и Духа Червя, при их разделении (возникла пара "33"). Справа экран действующих парадигм, где выбран развёрнутый список киберпанковых концепций.

История взаимодействий выводится в специальном логе (включая и те, что пользователь интерпретировал и те, что описаны абстрактно). А в финале выводится список взаимодействий, которые привели к возникновению достижений.

Здесь можно почитать статью о том, как развивалась сюжетостроительная механика от первых тестов до движка настольно-ролевой игры:

Myth-o-Matic

Это более упрощённая версия приложения, для более отвлечённого процесса сюжетостроения. На этот раз глобального мета-сюжета нет и можно придумывать любые свои исходные. За все интерпретации отвечает лишь одна парадигма, установленная в качестве главной. Однако, в любой момент можно переключаться на другую (обыгрывая таким образом, например, переходы из одного мира в другой или перенос места действия сюжета в другую локацию).

Игромеханика здесь немного видоизменена. Вместо умножения либо деления идентификаторов все случаи взаимодействия описываются через умножение - и когда объекты объединяются, и когда конфликтуют. То есть число, описывающее весь спектр взаимодействий каждой конкретной пары строго постоянно, что бы они не делали. Сами числа при этом обрезаются до удобных малых значений.

Для большего стартового разнообразия (раз доступных вариантов взаимодействия стало меньше) добавляемые объекты генерируются уже из диапазона двух- и трёх-значных чисел. Взаимодействия между любыми объектами здесь всегда возможны, в отличие от "вирусного" варианта игромеханики.

Охота за достижениями в этот вариант не включена, предполагая больший фокус на саму разворачивающуюся историю. Для более удобного манипулирования списками объектов и логом истории рекомендуется скачать стэндэлон версию приложения, где есть возможность открыть папку с файлом сохранения и редактировать её в текстовом редакторе.

Комментарии (5)


  1. amarao
    31.03.2022 17:27

    А пример результата? Пока слишком абстрактно выглядит.


    1. thenonsense Автор
      31.03.2022 17:46

      Вот, например, быстро набросанная сюжетная заготовка:

      Здесь заведены нейтральные объекты (от Центра до Певицы), которые потом различным образом взаимодействовали. Певица взглянула на картину (выпало что-то про кровь и глаза), ей стало плохо и она укрылась в Комнате картинной галереи. Тем временем некий Паук ворвался в Торговый центр (стена, глаз) - проломил стену и оттуда, словно через портал, вылезло Чудовище из другого мира. Далее Певица убегала от призрака, обнаружив Склеп. Туда же спустился Космонавт, потеряв Шлем, но обнаружив Истлевший Том. Паук, собравшийся посетить Подземелье оказался вместе с этой локацией уничтожен иммунным ответом реальности, так как возникла пара "33".

      На картинке момент, когда Кот прокрался в Комнату и предложено написать интерпретацию (или запись в логе останется такой же, как то, что подсвечено белым, и новый объект истории не появится).

      Более подробные примеры, как что происходит по шагам можно ещё в этих статьях посмотреть (там примерно похожая механика):


      1. amarao
        31.03.2022 21:05
        +1

        Я так и не понял, вы текст генерируете или нет? Или это просто пермутации объектов делает?


        1. thenonsense Автор
          01.04.2022 04:41

          На этот вопрос отвечает второй абзац статьи.

          Операция над объектами А и Б вычисляет два-три слова (в одном из трёх списков, где по 9 слов в каждом) в качестве ответа (который может быть расписан пользователем в любой текст). Программа сама текстовые предложения не формирует.


  1. farafonoff
    31.03.2022 17:43
    +4

    Ничего непонятно, но очень интересно