Skip to content

Commit ed354b6

Browse files
committed
gh-3 Ввести версионность
1 parent 23f3db6 commit ed354b6

File tree

3 files changed

+93
-54
lines changed

3 files changed

+93
-54
lines changed

MANIFEST.in

+1
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,4 @@ global-include *.gif
1313
global-include *.otf
1414
global-include *.ttf
1515
global-include *.sh
16+
prune svgs

README.md README.rst

+64-43
Original file line numberDiff line numberDiff line change
@@ -1,78 +1,99 @@
1+
########
2+
Questgen
3+
########
14

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

3-
# questgen
7+
Также позволяет визуализировать то, что получилось, пример визуализации: svg_
48

5-
Библиотека для автоматической генерации заданий (квестов). Позволяет по описанию мира (в виде набора предикатов) автоматически создавать вложенные нелинейные задания с событиями и разного рода ограничениями (вроде «исход задания для этого персонажа должен быть только положительным»).
9+
.. _svg: http://tiendil.org/static/trash/collect_debt.svg
10+
11+
Конструкторы всех заданий: ``./questgen/quests/``
612

7-
Также позволяет визуализировать то, что получилось, пример визуализации: [svg](http://tiendil.org/static/trash/collect_debt.svg).
13+
Создавалась для использования в MMOZPG игре Сказка_.
814

9-
Конструкторы всех заданий: ./questgen/quests/
15+
.. _Сказка: http://the-tale.org
1016

11-
Создавалась для использования в MMOZPG игре [«Сказка»](http://the-tale.org).
17+
Визуализации всех «базовых» шаблонов заданий лежат в каталоге ``./questgen/svgs/``
1218

13-
Визуализации всех «базовых» шаблонов заданий лежат в каталоге ./questgen/svgs/
19+
Работа библиотеки описана в статье на habrahabr_.
1420

15-
## условные обозначения в визуализаторе
21+
.. _habrahabr: http://habrahabr.ru/post/201680/
22+
23+
************************************
24+
Условные обозначения в визуализаторе
25+
************************************
1626

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

19-
- серые узлы — начало и окончание задания;
20-
- фиолетовые узлы — точки выбора;
21-
- зелёные узлы — обычные точки сюжета;
22-
- красные узлы — условные переходы;
23-
- бирюзовые контуры — подквесты;
24-
- более тёмным фоном на в узлах отмечены требования к ситуации, которые должны быть выполнены для возможности перехода в эту точку сюжета;
25-
- более светлым фоном выделены действия, которые должны быть выполнены сразу после перехода в точку сюжета.
26-
- жёлтые контуры — события;
29+
* серые узлы — начало и окончание задания;
30+
* фиолетовые узлы — точки выбора;
31+
* зелёные узлы — обычные точки сюжета;
32+
* красные узлы — условные переходы;
33+
* бирюзовые контуры — подквесты;
34+
* более тёмным фоном на в узлах отмечены требования к ситуации, которые должны быть выполнены для возможности перехода в эту точку сюжета;
35+
* более светлым фоном выделены действия, которые должны быть выполнены сразу после перехода в точку сюжета.
36+
* жёлтые контуры — события;
37+
2738

28-
## установка
39+
*********
40+
Установка
41+
*********
2942

30-
pip install git+git://github.com/Tiendil/questgen.git#egg=Questgen
43+
::
3144

32-
## принцип работы
45+
pip install git+git://github.com/Tiendil/questgen.git#egg=Questgen
46+
47+
**************
48+
Принцип работы
49+
**************
3350

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

36-
```python
37-
LocatedIn(object='hero', place='place_1')
38-
```
53+
.. code:: python
54+
55+
LocatedIn(object='hero', place='place_1')
56+
3957
4058
и сохраняются в базу знаний (БЗ)
4159

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

44-
- каждая вершина имеет список требований, которые должны быть удовлетворены, прежде чем можно будет перейти в неё (например, герой должен находиться в конкретном месте);
45-
- каждая вершина имеет список действий, которые должны быть выполнены, когда мы в неё перешли;
46-
- каждая дуга имеет два списка действий:
47-
- которые должны быть выполнены, когда мы начинаем двигаться по дуге;
48-
- когда мы заканчиваем двигаться по дуге (т.е. переходим в новую вершину после удовлетворения всех её требований);
49-
- существует несколько типов вершин:
50-
- Начальная — одна на задание, с неё начинается «путешествие»;
51-
- Конечная — несколько на задание, определяет результат выполнения (для стыковки с другими заданиями);
52-
- обычная — узел истории, можешь иметь несколько входящих дуг и ровно одну исходящую;
53-
- выбор — может иметь несколько исходящих дуг, между которыми можно переключаться, пока не пришли в одну из следующих вершин;
62+
* каждая вершина имеет список требований, которые должны быть удовлетворены, прежде чем можно будет перейти в неё (например, герой должен находиться в конкретном месте);
63+
* каждая вершина имеет список действий, которые должны быть выполнены, когда мы в неё перешли;
64+
* каждая дуга имеет два списка действий:
65+
* которые должны быть выполнены, когда мы начинаем двигаться по дуге;
66+
* когда мы заканчиваем двигаться по дуге (т.е. переходим в новую вершину после удовлетворения всех её требований);
67+
* существует несколько типов вершин:
68+
* Начальная — одна на задание, с неё начинается «путешествие»;
69+
* Конечная — несколько на задание, определяет результат выполнения (для стыковки с другими заданиями);
70+
* обычная — узел истории, можешь иметь несколько входящих дуг и ровно одну исходящую;
71+
* выбор — может иметь несколько исходящих дуг, между которыми можно переключаться, пока не пришли в одну из следующих вершин;
5472

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

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

59-
1. создать описание мира;
60-
1. создать задание;
61-
1. обработать задание (см. пример использования далее);
62-
1. проверить на корректность;
63-
1. работать с квестом в коде игры (игра реализует код, который выполняется при проходе по графу).
77+
#. создать описание мира;
78+
#. создать задание;
79+
#. обработать задание (см. пример использования далее);
80+
#. проверить на корректность;
81+
#. работать с квестом в коде игры (игра реализует код, который выполняется при проходе по графу).
6482

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

85+
******
86+
Пример
87+
******
6788

68-
## Пример использования
69-
70-
см. ./helpers/example.py
89+
см. ``./helpers/example.py``
7190

72-
## Визуализация
91+
************
92+
Визуализация
93+
************
7394

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

76-
Использует graphviz через библиотеку pygraph
97+
Использует ``graphviz`` через библиотеку ``pygraph``
7798

78-
__Если создаются неверные (поехавшие) изображения, поставьте новую версию graphviz__
99+
*Если создаются неверные (поехавшие) изображения, поставьте новую версию graphviz*

setup.py

+28-11
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,31 @@
22
import setuptools
33

44
setuptools.setup(
5-
name = 'Questgen',
6-
version = '0.1.0',
7-
author = 'Aleksey Yeletsky',
8-
author_email = '[email protected]',
9-
packages = setuptools.find_packages(),
10-
url = 'https://github.com/Tiendil/questgen',
11-
license = 'LICENSE',
12-
description = "Questgen - generator of nonlenear quests with events and flow validating",
13-
long_description = open('README.md').read(),
14-
include_package_data = True # setuptools-git MUST be installed
15-
)
5+
name='Questgen',
6+
version='0.2.0',
7+
description='generator of nonlenear quests with events and flow validating',
8+
long_description = open('README.rst').read(),
9+
url='https://github.com/Tiendil/questgen',
10+
author='Aleksey Yeletsky <Tiendil>',
11+
author_email='[email protected]',
12+
license='BSD',
13+
classifiers=[
14+
'Development Status :: 5 - Production/Stable',
15+
16+
'Intended Audience :: Developers',
17+
18+
'Topic :: Games/Entertainment',
19+
'Topic :: Software Development :: Libraries :: Python Modules',
20+
21+
'License :: OSI Approved :: BSD License',
22+
23+
'Programming Language :: Python :: 2',
24+
'Programming Language :: Python :: 2.7',
25+
26+
'Natural Language :: English',
27+
'Natural Language :: Russian'],
28+
keywords=['gamedev', 'game', 'game development', 'quests', 'quests generation', 'procedural content generation'],
29+
packages=setuptools.find_packages(),
30+
include_package_data=True,
31+
test_suite = 'tests',
32+
)

0 commit comments

Comments
 (0)