воскресенье, 18 декабря 2011 г.

Прототип 8 фикс 7 бета 2

Всем привет.
Позавчера выпустил Прототип 8 фикс 7 бета 2, основная цель которого - поддержка ловушек в движке. Ловушки (они же перехваты) - позволяют перехватить любое действие, совершаемое над предметом. Т.е. можно поймать момент, когда какое-то действие (по имени) совершается с каким-то предметом (как параметр действия) - а именно: до действия (before), после действия (after), а также можно заменить действие (instead), - и выполнить свой набор инструкций.
Если при выполнении какого-то действия есть хотя бы одна замена (instead), тогда другие ловушки не работают, а выполняется только ловушка замены. Если нет, тогда выполняются все ловушки "до", затем действие, затем все ловушки "после". Если во время действия произошла ошибка, и оно не выполнилось, очередь до ловушек "после" не доходит. Это же верно, если ошибка произойдет во время выполнения любой из ловушек - следующие инструкции не будут выполняться.
Например, есть действие "взять", которое имеет шаблон "взять (что, В.П.)", в котором второй элемент (объект в В.П.) передается в процедуру Взять как параметр "предмет". В этом случае можно создать ловушки на действие "взять", совершаемое с объектом "предмет":

Предмет "Яблоко":
Ловушка на действие "взять" с объектом "предмет" до действия:
- вывести сообщение "Вы протягиваете руку, чтобы взять яблоко."
Ловушка на действие "взять" с объектом "предмет" после действия:
- вывести сообщение "Какое вкусное яблоко!"

Выглядит это примерно следующим образом:

> взять яблоко
Вы протягиваете руку, чтобы взять яблоко.
Вы взяли яблоко.
Какое вкусное яблоко!

> взять яблоко
Вы протягиваете руку, чтобы взять яблоко.
Яблоко уже у вас в инвентаре.

Или вариант с заменой:

Предмет "Яблоко":
Ловушка на действие "взять" с объектом "предмет" вместо действия:
- вывести сообщение "Яблоко оказалось приклеенным к полу!"

> взять яблоко
Яблоко оказалось приклеенным к полу!

Хотя, возможно, даже при замене действия (вместо / instead) стоит всё же выполнять ловушки "до".

Т.е. вот так:

Предмет "Яблоко":
Ловушка на действие "взять" с объектом "предмет" до действия:
- вывести сообщение "Вы протягиваете руку, чтобы взять яблоко."
Ловушка на действие "взять" с объектом "предмет" вместо действия:
- вывести сообщение "Яблоко оказалось приклеенным к полу!"

> взять яблоко
Вы протягиваете руку, чтобы взять яблоко.
Яблоко оказалось приклеенным к полу!

Как думаете?

четверг, 10 марта 2011 г.

Прототип 8 фикс 5

Привет. Сорри, что давно не писал.
Изменений в ЯРИЛе с первого прототипа очень много.
Вкратце, перечислю фичи текущей версии (правда, Прототип 8 фикс 5 ещё не вышел, но скоро).
  • Родной Редактор платформы, позволяющий редактировать игру без ручного кодирования XML.
  • Создание локаций с названием, описанием, ссылками на соседние локации (по 4м сторонам света).
  • Создание предметов с названием, описанием, ссылкой на словарные слова, указанием первоначальной локации, редактирование признаков предмета.
  • Задание стартовых процедур и локаций.
  • Подключение библиотек.
  • Стандартная библиотека "Глаголы" с несколькими глаголами (переходы по сторонам света, осмотр, взять, положить, инвентарий).
  • Редактирование процедур (из инструкций пока можно только редактировать сообщения).
  • Каждый объект (в редакторе - пока только предметы) могут ссылаться на несколько словарных словосочетаний, одно из них помечено как главное. Каждое словосочетание склоняется по падежам. Это позволяет создавать длинные имена ("глиняный кувшин со сметаной"), и обращаться в игре к таким предметам, используя разные части этого имени ("кувшин", "глиняный кувшин", "со сметаной кувшин" и т.д.)
  • Действия пока не редактируются, но загружаются их XML. Каждое действие описывается как совокупность шаблона фразы (команды игрока) и ссылки на процедуру обработки при совпадении шаблона с введённой игроком фразой. Шаблоны поддерживают жёсткую последовательность элементов, таких как набор синонимов (или) и ссылка на объект в падеже (с обращением к объекту по любому набору его словарных слов).
  • Механизм перекрытия системых процедур, таких как ОписатьТекущуюЛокацию (showLocDesc), которая запускается автоматически, к примеру, если у игры стоит настройка "показывать описание первой локации".
Это пока всё, что удалось вспомнить навскидку.
Я сейчас заканчиваю переработку словаря (раньше он поддерживал только ссылку на одно слово из объекта), затем, скорее всего, будет релиз этой версии (Прототип 8 фикс 5).

четверг, 3 декабря 2009 г.

Прототип 1

Недавно вышел закрытый прототип 1.
Первые прототипы пока будут закрытыми, потому что функционала в них поддерживается мало, и смотреть в них особенно нечего :) Собственно, функционал первого прототипа я сейчас опишу.
Он был рассчитан на простой use case (пример использования): игрок может побродить по локациям, осматриваясь. Т.е. игровой мир состоит из нескольких локаций, а игрок может только перемещаться между ними (обычные команды сторон света - север, воcток, юг, запад) и осматриваться (осмотреться). Ничего "лишнего" не было реализовано (будет в следующих прототипах).
Поэтому возможности системы следующие:
  • локации с именами, описаниями и ссылками друг на друга по сторонам света
  • действия с шаблонами (простые литералы) и ссылками на процедуры
  • процедуры с двумя инструкциями: ПоказатьОписаниеЛокации(Локация) и ПерейтиНаЛокацию(Локация)
  • системная переменная ТекущаяЛокация
  • вычисление выражений (передаваемых в качестве параметров в процедуры) типов: системная переменная; свойство какого-то объекта; формальный параметр
С локациями и системной переменной, я думаю, всё понятно, а вот про остальное вкратце расскажу.
Вы как создатель игры описываете игровой мир, состоящий из локаций и их взаимосвязей.
Далее, чтобы дать игроку возможность управлять этим как-то, вы описываете возможные команды. Это действия. Они состоят из шаблона команды и ссылкой на процедуру обработки этой команды. Шаблоны пока довольно простые - это набор элементов, каждый из которых может быть либо просто текстовой константой (литералом), либо указанием, что тут идёт обращение к объекту в каком-либо падеже. Собственно, пока уверено реализованы и протестированы только литералы.
Процедуры, которые выполняются в качестве реакции на введённую игроком команду (и верно распознаную по шаблону парсером), довольно простые - они состоят из набора инструкций с параметрами. Фактические передаваемые параметры формируются из объектов, которые игрок упомянул в команде. Например, если игрок ввёл команду "осмотреть комнату", то парсер разбирает эту команду на 2 части: первая - литерал "осмотреть", вторая - ближайший объект с именем в словаре "комната". Собственно, если вызвать инструкцию ПоказатьОписаниеЛокации с параметром №2, то она выведет на экран описанием комнаты.
С инструкциями, я думаю, тоже всё предельно понятно, подробности можно спросить в комментариях к посту, либо потом воспользоваться документацией.
Выражения нужны для того, чтобы вызывать инструкции не с заранее описанными константами, а, к примеру, использовать системные переменные или их свойства. К примеру, логично для переход на север создать действие с шаблоном "север" (литерал), а в качестве реакции в процедуре вызывать инструкцию ПерейтиНаЛокацию с параметром Локация="ТекущаяЛокация.Север".

Для поста, я думаю, достаточно текста, закругляюсь :) Все вопросы - в комментарии.
В следующем посте расскажу о скоупе второго прототипа и его текущем состоянии.

Здравствуйте

Всем привет :)
Этот блог посвящён платформе для текстовых квестов ЯРИЛ 2.0 (IFML 2.0). Здесь я собираюсь публиковать анонсы, мысли, планы и т.д. - всё, что связано с платформой и её разработкой.
Комментарии и обсуждения постов приветствуются, т.к. этот блог не просто рупор, а средство общения с пользователями и сочувствующими. :)
В следующем посте напишу текущее состояние проекта и ближайшие планы. Следите! :)