Skip to content

mm3/questgen

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

43 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

questgen

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

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

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

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

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

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

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

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

установка

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

About

quests generation library for the-tale.org

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%