Разработчикам игр на Atril, часть 2: Параграф и блоки


Чт Май 29, 2014 17:57
Jumangee
Во всех бочках затычка

Разработчикам игр на Atril
Часть 2: Параграф и блоки

Актуально для: Atril 2.1

Игровой модуль игры объединяет всю игровую логику книги-игры. По-сути игровой модуль это набор параграфов, при этом могут существовать "технические" параграфы, которые не существуют в оригинальной книге-игре, но выполняют определённые задачи.

Каждый параграф разделён на блоки трёх типов: текст, скрипт и действие. Количество блоков каждого типа в параграфе не ограничено.

Текст
Представляет собой часть текста параграфа. Де-факто блок текста обычно представляет собой параграф текста, т.е. это параграф параграфа. Но чтобы никого не путать, назовём его текстовым блоком. Для разметки текста в блоке используется HTML, собственно благодаря его использованию в текст можно добавить любые объёмы (т.е. не обязательно только один "параграф параграфа"), но в этом случае текст на экране сложнее сделать удобочитаемым (нюансы css).
Пример текстовых блоков (для наглядности – из редактора игр):

Кроме области ввода текста можно видеть и три дополнительных поля выполняющих определённые задачи.
if: показать блок только если скрипт, название которого указано в поле, возвратил true.
ifnot: показать блок только если скрипт, название которого указано в поле, возвратил false.
Дополнительные аттрибуты (name=value): перечень атрибутов блока, используется в продвинутом функционале.
Условия if и ifnot могут быть указаны одновременно, в этом случае для отображения блока потребуется выполнение обоих условий одновременно. Формат вызова скриптов будет рассмотрен позднее.

Действие
Это текстовое описание операции, которую может совершить игрок. Т.е. по-факту это текстовая ссылка. Список действий всегда выводится после текста параграфа. Добавление действий (ссылок) внутри текста параграфа будет рассмотрено позднее.
Пример блоков действий (для наглядности – из редактора игр):

Дополнительные поля блока "действие":
if: блок "доступен" только если скрипт, название которого указано в поле, возвратил true.
ifnot: блок "доступен" только если скрипт, название которого указано в поле, возвратил false
goto: если указать название параграфа, то после клика на действие будет выполнен переход
do: указание название блока скрипта, который будет выполнен при клике на действие
Дополнительные аттрибуты (name=value): перечень атрибутов блока, используется в продвинутом функционале.
Также как и в текстовом блоке, условия if и ifnot могут быть указаны вместе. Поля goto и do аналогично, в этом случае, сначала выполняется скрипт do, а затем переход на goto. При выполнении скрипта do есть возможность "отменить" переход по goto (например, ссылка "купить" – в тексте do выполнить проверку наличия денег и при недостаточности средств отказать в продолжении)

Скрипт
Блок описывающий некоторую функциональность с помощью JavaScript (неплохой учебник для новичка есть например вот здесь)
Пример блоков действий (для наглядности – из редактора игр):

Главным атрибутом скриптового блока является название, именно по названию другие блоки могут вызывать созданный скрипт.
По-умолчанию, блок скрипта существует только "в текущем параграфе", т.е. после перехода на другой параграф, скрипты перестанут существовать. Но зачастую необходимы скрипты, которые существуют на протяжении всего времени игры. Признак блока "Глобальный" даёт возможность вызывать этот скрипт в любое время. Тем не менее, "подгрузка" такого глобального скрипта (читай – создание в памяти) происходит в момент перехода на параграф.

Пт Май 30, 2014 10:38
Antokolos
2  3  2  Бывалый авантюрист

Ещё бы хотелось минимальный пример модуля в XML-формате, включающий все описанные фичи. Конкретно интересует такое: вызывается некий параграф, который запускает скрипты при своём посещении, от параграфа есть несколько ссылок, причём при активации ссылки также запускается некий скрипт.

В моём редакторе идея такая: при посещении параграфа может быть выставлен некий флаг его посещения, равно как и при переходе по ссылке может быть выставлен некий флаг, обозначающий, что пользователь воспользовался именно этой ссылкой. Кроме того, и при посещении параграфа, и при переходе по ссылке могут быть выполнены некоторые действия над существующими переменными. В дальнейшем выставленные флаги могут быть использованы, чтобы включать/выключать ссылки в других местах.

В приложениях иллюстрирую мысль графически. На картинке в квадратных скобках указано место, в которое устанавливаются флаги, а через /good/ показано место, где флаги используются для ограничения показа ссылок. txt-файл — это экспорт указанного квеста в QSP (нужно использовать txt2gam из набора QSP, чтобы превратить это в файл qsp, пригодный для проигрывания плеером qsp). В zip-архиве лежат файлы проекта, который может быть открыт в Non-Linear Book Builder. Просто распакуйте и при открытии проекта укажите корневую папку распакованных файлов.


Представьтесь для добавления комментариев - регистрация в один клик!
Разделы форума