воскресенье, 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).