|
2 | 2 | Questgen |
3 | 3 | ######## |
4 | 4 |
|
5 | | -Библиотека для автоматической генерации заданий (квестов). Позволяет по описанию мира (в виде набора предикатов) автоматически создавать вложенные нелинейные задания с событиями и разного рода ограничениями (вроде «исход задания для этого персонажа должен быть только положительным»). |
| 5 | +Library for automatic quest generation. Allows creation of nested, nonlinear quests with events and various constraints (e.g., "the outcome of the quest for this character must only be positive") based on a world description given as predicates. |
6 | 6 |
|
7 | | -Также позволяет визуализировать то, что получилось, пример визуализации: svg_ |
| 7 | +It also supports visualization of the generated quests. Example visualization: svg_ |
8 | 8 |
|
9 | 9 | .. _svg: http://tiendil.org/static/trash/collect_debt.svg |
10 | 10 |
|
11 | | -Конструкторы всех заданий: ``./questgen/quests/`` |
| 11 | +Quest constructors are located in: ``./questgen/quests/`` |
12 | 12 |
|
13 | | -Создавалась для использования в MMOZPG игре Сказка_. |
| 13 | +Initially developed for use in the MMORPG game "The Tale"_. |
14 | 14 |
|
15 | | -.. _Сказка: http://the-tale.org |
| 15 | +.. _The Tale: http://the-tale.org |
16 | 16 |
|
17 | | -Визуализации всех «базовых» шаблонов заданий лежат в каталоге ``./questgen/svgs/`` |
| 17 | +Visualizations of all "basic" quest templates are stored in ``./questgen/svgs/``. |
18 | 18 |
|
19 | | -Работа библиотеки описана в статье на habrahabr_. |
| 19 | +Details of the library's functionality can be found in the article on habrahabr_. |
20 | 20 |
|
21 | 21 | .. _habrahabr: http://habrahabr.ru/post/201680/ |
22 | 22 |
|
23 | | -************************************ |
24 | | -Условные обозначения в визуализаторе |
25 | | -************************************ |
| 23 | +************************** |
| 24 | +Legend for the Visualizer |
| 25 | +************************** |
26 | 26 |
|
27 | | -Отображается граф квеста без модификаций (например, со всеми вариантами события, см. далее). |
| 27 | +The quest graph is displayed without modifications (e.g., all event variants are shown). |
28 | 28 |
|
29 | | -* серые узлы — начало и окончание задания; |
30 | | -* фиолетовые узлы — точки выбора; |
31 | | -* зелёные узлы — обычные точки сюжета; |
32 | | -* красные узлы — условные переходы; |
33 | | -* бирюзовые контуры — подквесты; |
34 | | -* более тёмным фоном на в узлах отмечены требования к ситуации, которые должны быть выполнены для возможности перехода в эту точку сюжета; |
35 | | -* более светлым фоном выделены действия, которые должны быть выполнены сразу после перехода в точку сюжета. |
36 | | -* жёлтые контуры — события; |
| 29 | +* gray nodes — start and end points of the quest; |
| 30 | +* purple nodes — decision points; |
| 31 | +* green nodes — regular story points; |
| 32 | +* red nodes — conditional transitions; |
| 33 | +* cyan outlines — subquests; |
| 34 | +* darker backgrounds in nodes indicate conditions that must be met to transition to that story point; |
| 35 | +* lighter backgrounds indicate actions that must be performed immediately upon entering that story point. |
| 36 | +* yellow outlines — events; |
37 | 37 |
|
38 | | - |
39 | | -********* |
40 | | -Установка |
41 | | -********* |
| 38 | +************ |
| 39 | +Installation |
| 40 | +************ |
42 | 41 |
|
43 | 42 | :: |
44 | 43 |
|
45 | | - pip install git+git://github.com/Tiendil/questgen.git#egg=Questgen |
| 44 | + pip install questgen |
46 | 45 |
|
47 | 46 | ************** |
48 | | -Принцип работы |
| 47 | +How it Works |
49 | 48 | ************** |
50 | 49 |
|
51 | | -Состояния мира описывается в виде предикатов вроде |
| 50 | +World states are described using predicates, e.g.: |
52 | 51 |
|
53 | 52 | .. code:: python |
54 | 53 |
|
55 | 54 | LocatedIn(object='hero', place='place_1') |
56 | 55 |
|
| 56 | +and stored in a knowledge base (KB). |
57 | 57 |
|
58 | | -и сохраняются в базу знаний (БЗ) |
| 58 | +Quests are described as directed connected graphs with one initial node and several terminal nodes (also stored in the KB). |
59 | 59 |
|
60 | | -Задание описывается ориентированным связанным графом с одной начальной вершиной и несколькими конечными (который тоже хранится в БЗ). |
| 60 | +* Each node has a list of requirements that must be satisfied before transitioning into it (e.g., the hero must be at a specific location); |
| 61 | +* Each node has a list of actions to perform upon entry; |
| 62 | +* Each edge has two lists of actions: |
| 63 | + * actions performed when starting to traverse the edge; |
| 64 | + * actions performed when finishing traversal (upon satisfying all requirements of the new node); |
| 65 | +* Several types of nodes exist: |
| 66 | + * Initial — one per quest; the starting point; |
| 67 | + * Terminal — multiple per quest; determines quest outcomes (for connecting with other quests); |
| 68 | + * Regular — a narrative node; can have multiple incoming edges and exactly one outgoing edge; |
| 69 | + * Decision — can have multiple outgoing edges, selectable until one of the following nodes is reached. |
61 | 70 |
|
62 | | -* каждая вершина имеет список требований, которые должны быть удовлетворены, прежде чем можно будет перейти в неё (например, герой должен находиться в конкретном месте); |
63 | | -* каждая вершина имеет список действий, которые должны быть выполнены, когда мы в неё перешли; |
64 | | -* каждая дуга имеет два списка действий: |
65 | | - * которые должны быть выполнены, когда мы начинаем двигаться по дуге; |
66 | | - * когда мы заканчиваем двигаться по дуге (т.е. переходим в новую вершину после удовлетворения всех её требований); |
67 | | -* существует несколько типов вершин: |
68 | | - * Начальная — одна на задание, с неё начинается «путешествие»; |
69 | | - * Конечная — несколько на задание, определяет результат выполнения (для стыковки с другими заданиями); |
70 | | - * обычная — узел истории, можешь иметь несколько входящих дуг и ровно одну исходящую; |
71 | | - * выбор — может иметь несколько исходящих дуг, между которыми можно переключаться, пока не пришли в одну из следующих вершин; |
| 71 | +Multiple nodes can be combined into an "event," which expands upon quest generation completion by removing all but one node. This allows for random events. |
72 | 72 |
|
73 | | -Несколько вершин могут быть объединены в «событие», которое раскрывается при завершении генерации графа, удаляя все вершины кроме одной. Таким образом можно делать случайные события. |
| 73 | +General generation procedure: |
74 | 74 |
|
75 | | -Общий порядок генерации: |
| 75 | +#. Create world description; |
| 76 | +#. Create quest; |
| 77 | +#. Process the quest (see example usage below); |
| 78 | +#. Validate correctness; |
| 79 | +#. Handle the quest in-game (the game should implement the code that executes while traversing the graph). |
76 | 80 |
|
77 | | -#. создать описание мира; |
78 | | -#. создать задание; |
79 | | -#. обработать задание (см. пример использования далее); |
80 | | -#. проверить на корректность; |
81 | | -#. работать с квестом в коде игры (игра реализует код, который выполняется при проходе по графу). |
| 81 | +**Note:** Quest generation might fail occasionally (raising a ``questgen.exceptions.RollBackError``). This does not indicate a critical issue; it simply means the quest graph generated was unsuitable. Generation should be retried. A larger world description typically ensures faster and more successful quest generations by reducing collisions. |
82 | 82 |
|
83 | | -**Следует помнить, что генерация задания может быть неудачной (вызывается исключение questgen.exceptions.RollBackError). Это не значит, что всё плохо, это значит, что необходимо повторить генерацию, т.к. был сформирован неудачный граф задания.** Из этого следует, что для лучшей и более быстрой генерации заданий лучше иметь мир побольше, чтобы не было много коллизий. |
| 83 | +******* |
| 84 | +Example |
| 85 | +******* |
84 | 86 |
|
85 | | -****** |
86 | | -Пример |
87 | | -****** |
| 87 | +See ``./helpers/example.py`` |
88 | 88 |
|
89 | | -см. ``./helpers/example.py`` |
90 | | - |
91 | | -************ |
92 | | -Визуализация |
93 | | -************ |
| 89 | +************* |
| 90 | +Visualization |
| 91 | +************* |
94 | 92 |
|
95 | | -Визуализатор: ``./helpers/visualizer.py`` создаёт изображения шаблонов заданий в ``./questgen/svgs/`` |
| 93 | +Visualizer: ``./helpers/visualizer.py`` generates quest template images in ``./questgen/svgs/``. |
96 | 94 |
|
97 | | -Использует ``graphviz`` через библиотеку ``pygraph`` |
| 95 | +Uses ``graphviz`` via the ``pygraph`` library. |
98 | 96 |
|
99 | | -*Если создаются неверные (поехавшие) изображения, поставьте новую версию graphviz* |
| 97 | +*If generated images are incorrect (misaligned), install a newer version of graphviz.* |
0 commit comments