Skip to main content

Generator of nonlenear quests with events and flow validating.

Project description

Библиотека для автоматической генерации заданий (квестов). Позволяет по описанию мира (в виде набора предикатов) автоматически создавать вложенные нелинейные задания с событиями и разного рода ограничениями (вроде «исход задания для этого персонажа должен быть только положительным»).

Также позволяет визуализировать то, что получилось, пример визуализации: svg

Конструкторы всех заданий: ./questgen/quests/

Создавалась для использования в MMOZPG игре Сказка.

Визуализации всех «базовых» шаблонов заданий лежат в каталоге ./questgen/svgs/

Работа библиотеки описана в статье на habrahabr.

Условные обозначения в визуализаторе

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

  • серые узлы — начало и окончание задания;

  • фиолетовые узлы — точки выбора;

  • зелёные узлы — обычные точки сюжета;

  • красные узлы — условные переходы;

  • бирюзовые контуры — подквесты;

  • более тёмным фоном на в узлах отмечены требования к ситуации, которые должны быть выполнены для возможности перехода в эту точку сюжета;

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

  • жёлтые контуры — события;

Установка

pip install git+git://github.com/Tiendil/questgen.git#egg=Questgen

Принцип работы

Состояния мира описывается в виде предикатов вроде

LocatedIn(object='hero', place='place_1')

и сохраняются в базу знаний (БЗ)

Задание описывается ориентированным связанным графом с одной начальной вершиной и несколькими конечными (который тоже хранится в БЗ).

  • каждая вершина имеет список требований, которые должны быть удовлетворены, прежде чем можно будет перейти в неё (например, герой должен находиться в конкретном месте);

  • каждая вершина имеет список действий, которые должны быть выполнены, когда мы в неё перешли;

  • каждая дуга имеет два списка действий: * которые должны быть выполнены, когда мы начинаем двигаться по дуге; * когда мы заканчиваем двигаться по дуге (т.е. переходим в новую вершину после удовлетворения всех её требований);

  • существует несколько типов вершин: * Начальная — одна на задание, с неё начинается «путешествие»; * Конечная — несколько на задание, определяет результат выполнения (для стыковки с другими заданиями); * обычная — узел истории, можешь иметь несколько входящих дуг и ровно одну исходящую; * выбор — может иметь несколько исходящих дуг, между которыми можно переключаться, пока не пришли в одну из следующих вершин;

Несколько вершин могут быть объединены в «событие», которое раскрывается при завершении генерации графа, удаляя все вершины кроме одной. Таким образом можно делать случайные события.

Общий порядок генерации:

  1. создать описание мира;

  2. создать задание;

  3. обработать задание (см. пример использования далее);

  4. проверить на корректность;

  5. работать с квестом в коде игры (игра реализует код, который выполняется при проходе по графу).

Следует помнить, что генерация задания может быть неудачной (вызывается исключение questgen.exceptions.RollBackError). Это не значит, что всё плохо, это значит, что необходимо повторить генерацию, т.к. был сформирован неудачный граф задания. Из этого следует, что для лучшей и более быстрой генерации заданий лучше иметь мир побольше, чтобы не было много коллизий.

Пример

см. ./helpers/example.py

Визуализация

Визуализатор: ./helpers/visualizer.py создаёт изображения шаблонов заданий в ./questgen/svgs/

Использует graphviz через библиотеку pygraph

Если создаются неверные (поехавшие) изображения, поставьте новую версию graphviz

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

questgen-0.4.2.tar.gz (46.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

questgen-0.4.2-py3-none-any.whl (65.9 kB view details)

Uploaded Python 3

File details

Details for the file questgen-0.4.2.tar.gz.

File metadata

  • Download URL: questgen-0.4.2.tar.gz
  • Upload date:
  • Size: 46.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.11 CPython/3.10.0 Linux/5.11.0-38-generic

File hashes

Hashes for questgen-0.4.2.tar.gz
Algorithm Hash digest
SHA256 c4e62a4a4c93791b565e7df11c95bce58d34437df00e06494b21812d58b865e6
MD5 9d9f730a3370aedbd2b3c8f93d0769cf
BLAKE2b-256 51d2dc4a14dc5acf1d9498e249cd4c5d93c74dd40e64207657c1f21c2f1237b0

See more details on using hashes here.

File details

Details for the file questgen-0.4.2-py3-none-any.whl.

File metadata

  • Download URL: questgen-0.4.2-py3-none-any.whl
  • Upload date:
  • Size: 65.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.11 CPython/3.10.0 Linux/5.11.0-38-generic

File hashes

Hashes for questgen-0.4.2-py3-none-any.whl
Algorithm Hash digest
SHA256 122405db22d402779cccc19ae0199cbdf49ce690549a5a738ce9ccc403da1d1c
MD5 f75e36e79efafded8f3b0e0fe8984a27
BLAKE2b-256 192d8a95203f9d3078acdd3f049019686f03bde27b416b40d58952d8af8ed650

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page