Учебник по IFML 1.0
Вы также можете обратиться к спецификации IFML или к сборнику вопросов по IFML
© TOY Soft, 2001
Автор: Sonic
ICQ: 120422848
Дата: 15.09.01
Содержание:
Часть
I. Основы
1. Введение
2. Общие описания
3. Описания по
умолчанию
4. Базовые свойства
5. Скрипт Реакции
Объекта (СРО)
Часть II.
Операции с объектами
6. Перекрытие
свойств
IFML создан специально для
описания виртуального мира
текстового квеста (VWoA). Поэтому,
основной принцип структуры языка -
описание. Весь виртуальный мир
делится на локации, предметы,
игровую среду и игрока. При этом в
описание данных объектов входит
также описание реакции самых
объектов на различные события.
События в данном случае
представляют собой попытку игрока
сделать что-либо с объектом.
Попытка представляет собой команду
игрока, введённую в интерпретаторе
в строке ввода. Она (команда) может
выглядеть следущим образом:
1) <действие предмет>, например
"зажечь спичку", причём
предмет находится в винительном
падеже;
2) <действие> или <общее слово>,
например "войти" или
"восток".
При этом "зажечь" будет именем
реакционного события в объекте
"спичка" и будет частью его
описания, вызывая каждый раз, когда
игрок вводит "зажечь спичку"; а
"войти" или же "восток"
будут вызываться из текущей
локации или другого "текущего"
объекта. Сама же реакция
описывается на специальном языке -
Скрипте Реакции Объекта (СРО),
который рассмотрен ниже.
Файл, содержащий историю
(текстовый квест), по сути является
текстовым описанием локаций и
предметов, которые входят в игру.
Всё описание локаций заключено
между строками:
новлок "имя"
и:
коннов
Описание предмета заключается
между строками:
новпред "имя"
и:
коннов
Описание локаций и предметов
состоит из свойств, событий и
базовых свойств (см. 4.
Базовые свойства). Свойства
описываются так:
имя=значение
и служат внутренними переменными.
События описываются следующим
образом:
имя={
команда1
команда2
...
}
и являются списком команд уже
игровой среды, предписывающим
действия среды в ответ на событие.
Событие происходит, когда
пользователь вводит команду типа:
действие предмет
(например, зажечь спичку), при этом
вызывается на исполнение список
команд с именем "действие",
которое описано в объекте
"предмет".
Если в внутри файла истории нужно написать какой-то поясняющий текст, то он пишется на отдельной строчке и начинается с 2х символов косой черты (//).
Перед, после и между словами, где синтаксисом предусмотрены промежутки, может быть сколько угодно пробелов и символов табуляции (клавиша Tab).
Если нужно в нескольких
объектах использовать одни и те же
свойства и события, то придётся их
описывать каждый раз. Этого можно
избежать, используя описания по
умолчанию. Описания по умолчанию
- это описания, которые входят в
каждый объект, идущий после их
объявления. Они объявляются
следующим образом:
#умолчсв "имя"=значение
для свойства и:
#умолчсоб "имя"
В<вариант> {
скрипт-команды
}
для события. Вариант состоит из
любых 2х символов. В версии IFML
1.0 оставлен как заготовка для
введения других событий по
умолчанию с тем же именем.
Таким образом, после распознавания
анализатором "Интерпретатора
IFML" следущего кода:
#умолчсв "описание"=Нет
ничего необычного.
создастся объект предмет с
именем "нож" и свойствами:
описание, острый; и событиями:
исследовать, резать. Если далее
будут объявлены другие объекты,
свойство "описание" и событие
"исследовать" так же войдут в
них.
#умолчсоб "исследовать" В00
{
сказать Вы смотрите на это
и видите:
сказать сам.описание
}
новпред "нож"
острый=да
резать={
если
сам.острый="да" то
сам.острый="нет" иначе сказать
"Нож тупой, им ничего не
разрежишь."
}
коннов
Базовые свойства - это свойства,
которые присутствуют в каждом
объекте IFML. Они создаются
автоматически. Таковыми являются,
например, имя и УИДО (см. 0.4. Список аббревиатур и
сокращений спецификации
IFML). Также базовыми являются
набор статусов и имя объекта в
винительном падеже.
Имя объекта задаётся при его
создании (слово в кавычках после
ключевого слова новлок
) и
используется в скрипте. По другому
его определить или переопределить
нельзя.
УИДО вообще присутствует неявно, он
задаётся автоматически при
создании объекта и не может
меняться, как и имя. Т.к.
"Игрок", "Игровая среда"
и "Проигрыватель" тоже
являются объектами, они тоже имеют
базовые свойства, в том числе и
УИДО. У объекта "Игровая среда"
УИДО равен 1, у "Проигрывателя"
- 2, а у "Игрока" - 3. УИДО, равный
0, указывает на пустой,
несуществующий объект. УИДО может
использоваться в скрипте как
непосредственный указатель на
объект.
Другие базовые свойства, которые
могут изменяться непосредственно в
описании объекта, определяются
специальным образом. Чтобы
предотвратить смешивание базовых и
обычных свойств, в начале базового
ставится символ собаки (@), который
указывает на базовое свойство.
Таким образом, чтобы изменить
винительный падеж или один из
статусув объекта, нужно написать
внутри описания объекта в любом
месте:
@вп = <значение>
- для
задания винительного падежа
@ст <номер> = <значение>
- для задания статуса.
Т.к. локации предназначены также
для вмещения предметов, то
присутствие предмет в локации
задаётся базовым свойством @пред
:
@пред = <имя>
- предмет
должен быть описан ранее
Существуют также базовые свойства
самой игровой среды. Но так как
среда не описывается, эти свойства
задаются прямо между описаниями
объектов. Вот их список:
Свойство | Описание |
@титул |
заголовок окна интерпретатора |
@шимя |
имя шрифта Windows на экране |
@шраз |
размер шрифта |
@шцвет |
цвет шрифта цвет определяется кодовым словом, приведённым в таблице ниже |
@цвет |
цвет экрана |
@пом |
строка помощи, справочной информации, всплывающей при щелчке на пункте меню "Справка -> Об этой истории..."; если отсутсвует, интерпретатор выводит строку: "Автор ничего не сообщил..." |
Таблица цветов
Кодовое слово | Значение |
Aqua | |
Black | |
Blue | |
Fuchsia | |
Gray | |
Green | |
Lime | |
Maroon | |
Navy | |
Olive | |
Purple | |
Red | |
Silver | |
Teal | |
White | |
Yellow | |
InactiveCaptionText | Текущий цвет текста заголовка неактивного окна |
BtnHighlight | Текущий цвет подсвечивания на кнопке |
3DDkShadow | Только в Windows 95 или NT4.0: Тёмная тень 3х-мерных элементов отображения |
3DLight | Только в Windows 95 или NT4.0: Светлый цвет 3х-мерных элементов отображения (для граней, стоящих лицом к источнику света) |
InfoText | Только в Windows 95 или NT4.0: Цвет текста всплывающей подсказки |
InfoBk | Только в Windows 95 или NT4.0: Цвет фона всплывающей подсказки |
Background | Текущий цвет рабочего стола Windows |
ActiveCaption | Текущий цвет заголовка активного окна |
InactiveCaption | Текущий цвет заголовка неактивного окна |
Menu | Текущий цвет меню |
Window | Текущий цвет окон |
WindowFrame | Текущий цвет кадров окна |
MenuText | Текущий цвет текта меню |
WindowText | Текущий цвет текста в окне |
CaptionText | Текущий цвет заголовка активного окна |
ActiveBorder | Текущий цвет границы активного окна |
InactiveBorder | Текущий цвет границы неактивного окна |
AppWorkSpace | Текущий цвет рабочего пространства приложения |
HighLight | Текущий цвет фона выбранного текста |
HighLightText | Текущий цвет выбранного текста |
BtnFace | Текущий цвет лица кнопки |
BtnShadow | Текущий цвет тени от кнопки |
GrayText | Текущий цвет затуманненого текста |
BtnText | Текущий цвет текста кнопки |
5. Скрипт Реакции Объекта (СРО)
Скрипт Реакции Объекта (СРО), или просто скрипт, состоит из языковых команд. Каждая из них должна быть на отдельной строке. Приведу их в виде списка:
Команда | Описание |
очистить |
полностью очищает экран |
сказать
<выражение> |
выводит
сообщение на экран <выражение> состоит из текста, заключённого в двойные кавычки, целых чисел, ссылок на свойства объектов, специальных символов и математических операций между ними (сложение (+), вычитание (-), умножение (*) и целочисленное деление(/)), которые (кроме сложения) действуют только на числа. Указание на свойство объекта состоит из имени объекта, точки и имени свойства. См. также следующую таблицу. Спец. символы: $ - перенос строки |
тлок
<название> |
устанавливает текущую локацию |
конец |
завершает работу скрипта |
идти
<номер> |
переходит к строке скрипта, первая строка скрипта имеет номер 1 |
если
<условие> то <команда1>
[иначе <команда2>] |
проверяет,
выполняется ли <условие>,
тогда запускает <команду1>,
иначе - <команду2> <условие> состоит из двух выражений, между которыми находится знак логического сравнения (=,<,>,<=,>=,<>). |
<объект.свойство>
= <выражение> |
присваивает свойству объекта значание, полученное после вычисления выражения |
Также в скрипте используются псевдо-имена, т.е. имена, которые только обозначают какой-то объект. Вот их список:
Псевдо-имя | Тип | Описание |
сам |
объект | обозначает объект, в котором находится данный скрипт |
теклок |
объект | обозначает объект - текущую локацию |
@имя |
свойство | указывает на имя объекта |
Часть II. Операции с объектами
Иногда может возникнуть ситуация,
когда необходимо присутствующее
свойство заменить другим. Например,
Вы используете свойство по
умолчанию "описание", которое
хотите внедрит в каждый объект, но в
нескольких объектах Вам нужно его
изменить. Для этого используется перекрытие
свойств. Т.е. новое свойство
перекрывает, закрывает собой
предыдущее. Для перекрытия нужно
просто описать новое свойство с
точно таким же именем.
Приведу пример:
#умолчсв "описание"=Нет
ничего необычного
Здесь свойство "описание"
будет перекрывать старое с точно
таким же именем. Поэтому при вводе
игроком строки "исследовать
нож" будет выведена строка
"Ржавый нож с насечкой на
рукоятке", а не "Нет ничего
необычного".
#умолчсоб "исследовать" В00
{
сказать "Вы смотрите на
это и видите:"
сказать сам.описание
}
новпред "нож"
описание=Ржавый нож с
насечкой на рукоятке
коннов
"Для чего же это нужно", -
спросите Вы, - "перекрывать
свойство по умолчанию, ведь оно и
было создано для использования?".
Всё дело в том, что свойство по
умолчанию вставляется в каждый
следующий объект. Например, для
большинства объектов Вам надо
свойство с одним и тем же значением,
а для нескольких - уникальные, вот
только их и придётся перекрыть, а
остальные будут пользоваться
описаниями по умолчанию.