Skip to main content

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

Также позволяет визуализировать то, что получилось, пример визуализации: 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

Metadata

Release files for questgen 0.4.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for questgen 0.4.2
File Size Uploaded
questgen-0.4.2.tar.gz 46.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for questgen 0.4.2
File Interpreter ABI Platform
questgen-0.4.2-py3-none-any.whl Python 3 none any Details

Total release size: 112.8 kB

Release files / questgen-0.4.2.tar.gz

Download URL questgen-0.4.2.tar.gz
Size 46.8 kB
Tags Source
SHA-256 checksum
How to use checksums
c4e62a4a4c93791b565e7df11c95bce58d34437df00e06494b21812d58b865e6
BLAKE2b-256 checksum
How to use checksums
51d2dc4a14dc5acf1d9498e249cd4c5d93c74dd40e64207657c1f21c2f1237b0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.1.11 CPython/3.10.0 Linux/5.11.0-38-generic

Release files / questgen-0.4.2-py3-none-any.whl

Download URL questgen-0.4.2-py3-none-any.whl
Size 65.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
122405db22d402779cccc19ae0199cbdf49ce690549a5a738ce9ccc403da1d1c
BLAKE2b-256 checksum
How to use checksums
192d8a95203f9d3078acdd3f049019686f03bde27b416b40d58952d8af8ed650
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.1.11 CPython/3.10.0 Linux/5.11.0-38-generic

Release history Release notifications | RSS feed

This release

0.4.2 This release

2 release files

0.4.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page