Русский Информ

Версия 0.75 — сентябрь 2004

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

Вашему вниманию предлагается новая версия системы "Русский Информ". Система предназначена для разработки интерактивной литературы (другими словами, текстовых игр) на русском языке.

Данная версия системы основана на последнем оригинальном релизе пакета "Информ" (

Inform 6.30 + libraries 6/11). Она состоит из набора стандартных библиотек и из расширений, переведенных на русский язык, и исходных текстов нескольких демонстрационных игр на русском языке.

Системные требования

Игры, создаваемые с помощью технологии "Информ", представляют собой двоичные программы в формате

Z-code, который переносим и не зависит от платформы. Все, что требуется для их выполнения — программа-интерпретатор, совместимая с вашим компьютером и ОС. Учтите, однако, что для игр на русском языке необходим интерпретатор с полной поддержкой Unicode. (Последние пока еще не очень распространены.)

Для

Windows 9x/NT/XP лучший вариант — это Windows Frotz 2002 (by David Kindler). В отличие от других версий WinFrotz, у него проблем с Unicode нет никаких. Его можно скачать, например, с http://www.ifarchive.org/if-archive/infocom/interpreters/frotz/WindowsFrotz2002.zip.

Для других платформ ничего пока не посоветую, но надеюсь, что проблема решаема.

Для разработки собственных игр необходим, прежде всего, собственно компилятор языка

Inform (рекомендуется Inform 6.30). Его версию для Windows 9x/NT/XP можно взять на http://www.ifarchive.org/if-archive/infocom/compilers/inform6/executables/inform630_win32.zip. Информ-компилятор (обычно inform.exe) — простая консольная утилита Win32, вызываемая из командной строки. Для ее установки просто скопируйте ее в каталог, доступный по PATH.

Для автоматической компиляции всех игр, входящих в этот пакет, также необходима утилита

make. (Если ее у вас нет, версию для DOS/Win можно взять, например, на ftp://ftp.delorie.com/pub/djgpp/current/v2gnu/mak3791b.zip.) Также раскройте архив, и положите файл make.exe в любой каталог, доступный по PATH. Для автоматической компиляции всех исходных файлов достаточно просто ввести команду "make", находясь в том каталоге, где лежит Makefile.

Подробно описать все опции и параметры компилятора здесь, конечно, нереально (введите команду

inform без параметров, чтобы получить их список). Однако, если кратко: для компиляции программы на русском языке команда должна выглядеть примерно так:

inform.exe

+LIBDIR +charset_map=LIBDIR\cyrwin.cm +language_name=Russian GAME.inf

Здесь

LIBDIR — тот каталог, где лежат все библиотечные файлы (Russian.h, RussiaG.h, RusMCE.h), а GAME.inf — собственно файл с исходным текстом игры. Если компиляция пройдет успешно, результатом будет файл GAME.z5. Можно добавить к командной строке опцию -D, задающую генерацию отладочной версии игры, в которой будут доступны мета-команды.

Более подробную информацию о технологии

Inform и формате Z-code можно найти во многих местах, в частности:

- на домашней странице

Inform: http://www.inform-fiction.org
- в центральном
IF-архиве: www.ifarchive.org

Системные расширения

В пакет включено одно полезное библиотечное расширение

— "smartcango" (файл libext/smartcantgo.h). Оно автоматически дополняет программу такой полезной возможностью, как команда выходы (или пути), выводящая список всех направлений, в которых Вы можете идти, и мест, куда Вы в результате попадете. Эта же информация будет автоматически выводиться, если Вы пойдете в несуществующем направлении. Для примеров использования этого расширения см. исходные тексты AdventR и RuinsR.

Игры

В пакет включены следующие игры:

- AdventR.z5
: Приключение (aka ADVENTURE)
(исходный текст: AdventR.inf)

Это полностью переведенная на русский язык версия классического текстового квеста

Adventure, разработанного еще в начале 70-х годов. Классика есть классика — это первый квест в истории компьютеров, с которого этот почтенный жанр начал свое существование.

- AliceR.z5
: "Сквозь зеркало"
(исходный текст: AliceR.inf)

Русский перевод маленькой демонстрационной Информ-игры

(написанной, как легко догадаться, по мотивам Кэрролла). Игра очень простая, и проходится за восемь ходов. Файл прохождения (AliceR.wlk) есть.

- CloakR.z5
: "Плащ Тьмы"
(исходный текст: CloakR.inf)

Русский перевод

Cloak Of Darkness, предельно простой IF-игры (она специально сделана такой, т.к. Roger Firth написал ее в качестве эталонного теста для разнообразных IF-систем). Содержит одну тривиальную проблему, решается в несколько ходов.

- RuinsR.z5
: "Среди Руин"
(исходный текст: RuinsR.inf)

Русский перевод

Ruins, демонстрационной игры, написанной Грэхемом Нельсоном. Игра не очень большая, но при этом содержит немало хитрых моментов. Прохождение — RuinsR.wlk.

- Unicode.z5
(исходный текст: Unicode.inf)

Тривиальная

Z-программа (заимствованная мною из дистрибутива WinFrotz2002), проверяющая, правильно ли ваш интерпретатор вводит и выводит символы Unicode. Если она идет правильно, все остальные игры тоже должны идти без проблем.

Глаголы и действия

Вот список всех служебных глаголов, поддерживаемых системой. В скобках указаны соответствующие действия (

actions) Информ-системы. Квадратными скобками выделены необязательные фрагменты.

Сохр
Сохран[ить]

: Сохранить игру (Save)

(в WF открывает диалог)

Загр
Загруз[ить]

: Загрузить игру (Restore)

(в WF открывает диалог)

Начало
Перезапуск
Перезапуст

[ить]: Перезапустить игру (Restart)

(требует подтверждения)

Конец

[За]конч[ить]: Выйти из игры и из интерпретатора (Quit)

(требует подтверждения)

Счет

: Общий счет (Score)

(сколько ходов Вы сделали и очков заработали)

полн

: детальный список очков (FullScore)

Извещ

: Режим вывода извещений об изменениях счета:

вкл: включить (NotifyOn)

выкл: выключить (NotifyOff)

Опис

: Режим вывода описаний мест:

дл: только длинные (LMode2)

кр: только краткие (LMode3)

норм: по умолчанию (LMode1)

(длинные для новых, краткие для знакомых)

Скрипт

Транскрипт

: Режим транскрипта

(увы, на WF в русских играх его польза равна нулю):

вкл: включить (ScriptOn)

выкл: выключить (ScriptOff)

Провер

[ить] Внутренняя проверка файла игры (Verify)

Имена

: Список всех местоимений, и объектов, которым они соответствуют в данный момент (Pronouns)

Места

: Список всех мест, где Вы побывали (Places)

Предметы

: Список всех вещей, которые побывали у Вас в руках (Objects)

Версия

: Версия игры и краткая информация о ней (Version)

Мета

: “Мета-глаголы”, доступные только в отладочных версиях игр

Вот несколько допустимых мета-действий:

Мета трасс

вкл/выкл: Включить/выключить трассировку парсера

Мета акт вкл

/выкл: Включить/выключить отслеживание действий

Мета форм

obj: Вывод списка падежных форм для объекта obj

(Для особо любопытных

: полный список мета-глаголов легко найти в ”RussiaG.h”. Многие из них позволяют делать очень нетривиальные вещи.)

А вот список основных рабочих глаголов (и соответствующих им действий Информ-системы). Предлоги, выделенные полужирным шрифтом, если они есть, являются обязательными для понимания фразы. Большинство глаголов понимаются не только в неопределенной форме (открыть ворота), но и в повелительном наклонении (открой ворота). Допустимо также очень много вариантов приставок.

Там, где требуются некоторые аргументы, они обозначаются таким образом:

dir

: компасное направление (с, ю, з, в…);

obj

: произвольный предмет;

objlist

: список произвольных предметов
(в качестве разделителя может использоваться запятая или же союз и);

actor

: произвольный NPC-персонаж игры;

topic

: любая тема для беседы (т. е. произвольная последовательность слов).

Большинство глаголов также критично к падежам: имя объекта должно иметь именно ту падежную форму, которую требуют правила русского языка.

Для их обозначения здесь используются такие суффиксы:

- ИП: Именительный падеж

- РП: Родительный падеж

- ДП: Дательный падеж

- ВП: Винительный падеж

- ТП: Творительный падеж

- ПП: Предложный падеж

Кроме того, для ссылки на объекты могут употребляться также личные местоимения (его

, ее, их). Они же могут употребляться в качестве притяжательных (по терминологии Информа, "дескрипторов"). Например, допустимо взять его плащ или открыть ее сумочку, если известно, к кому в данный момент относятся его и ее. Наконец, можно использовать местоимение все (всех, всем…).

Инв[ентарь]

Ваш инвентарь, т.е. все, что у Вас с собой (

Inv). Листинг может выводиться в “высокой” (Инв высок — InvTall) или “широкой” (Инв широк — InvWide) форме. По умолчанию, выводится в той форме, которая использовалась в последний раз.

Г[л[яд[еть]]]
Глян[уть]
См[отр[еть]]

(Без параметров): Просто осмотреть текущую локацию (

Look).

- obj-ИП
- obj-ВП

Осмотреть предмет

obj (Examine obj).

- на
/в obj-ПП
- внутри
obj-РП

Посмотреть содержимое контейнера или поверхности

obj (Search obj).

(Вместо Смотреть здесь допускается также Иск

[ать].)

- под
obj-ТП

Искать под предметом

obj (LookUnder obj)

- о
topic в obj-ПП
- в
obj-ПП о topic

Посмотреть в

источнике obj информацию на тему topic (Consult obj about topic).

(Здесь вместо Смотреть допускается также Чит

[ать] или Иск[ать].)

Ид[ти]
Ех[ать]
Беж[ать]

(Без параметров): Идти неизвестно куда (

VagueGo) — обычно бессмысленное действие.

- dir
- в/на dir

Идти в компасном направлении

dir (Go dir). (Чаще всего сам глагол при этом опускается.)

Вой[ти]

(Без параметров): Войти внутрь (

GoIn) — куда именно, зависит от контекста.

- в/на obj-ВП

Войти в предмет

obj, если это возможно (Enter obj).

Вый[ти]

Выйти с/из того предмета, где Вы сейчас находитесь (

Exit).

(Глаголы Вст

[ать], Сес[ть], Леч[ь] обычно работают как синоним для Войти; Встать без параметров — как синоним для Выйти.)

Вз[ять]
Бр[ать]
Извлеч[ь]
Дост

[ать]

- objlist-ВП

Взять предметы

objlist (Take objlist).

- objlist-ВП из/с obj-РП

- из/с obj-РП objlist-ВП

Извлечь все предметы

objlist из контейнера obj (Remove objlist from obj).

[По]лож[ить]

Класт[ь]
Помест[ить]

- objlist-ВП

Положить все предметы

objlist (Drop objlist).

- objlist-ВП в obj-ВП

- в obj-ВП objlist-ВП

- objlist-ВП внутрь obj-РП

- внутрь obj-РП objlist-ВП

Вложить предметы

objlist внутрь контейнера obj (Insert objlist into obj).

- objlist-ВП на obj-ВП

- на obj-ВП objlist-ВП

Положить предметы

objlist на поверхность obj (PutOn objlist onto obj).

Брос[ить]
Швырн[уть]
Метн[уть]
Кин

[уть]

- objlist-ВП в/на obj-ВП

- в/на obj-ВП objlist-ВП

Бросить предметы

objlist на/в obj (ThrowAt objlist at obj).

(Без аргументов

работает так же, как и Drop.)

[О]порожн[ить]

Выл[ить]
Высып[ать]

- obj-ВП

Опорожнить контейнер

obj (Empty obj).

- obj1-ВП в/на obj2-ВП

- в/на obj2-ВП obj1-ВП

Перелить/пересыпать содержимое из контейнера

obj1 в контейнер obj2 (EmptyT obj1 into obj2).

Над[еть]
Од[еть]

- obj-ВП

Надеть на себя предмет

obj, если это возможно (Wear obj).

Разд[еть]
Сн[ять]

- obj-ВП

Снять с себя предмет

obj, если это возможно (Disrobe obj).

Вкл[юч[ить]]

- obj-ВП

Включить предмет

obj (SwitchOn obj).

Выкл[юч[ить]]

- obj-ВП

Выключить предмет

obj (SwitchOff obj).

Откр[ыть]

- obj-ВП

Открыть предмет

obj (Open obj).

Закр[ыть]

- obj-ВП

Закрыть предмет

obj (Close obj).

Отпер[еть]

- obj-ВП key-ТП

- key-ТП obj-ВП

Отпереть предмет

obj ключом key (Lock obj by key).

(В этом контексте также допустимо Открыть

.)

Запер[еть]

- obj-ВП key-ТП

- key-ТП obj-ВП

Запереть предмет

obj ключом key (Unlock obj by key).

(В этом контексте также допустимо Закрыть

.)

Толк[ать]
Наж

[ать]
Пих[ать]

- obj-ВП

Толкнуть/нажать на предмет

obj (Push obj).

- obj1-ВП на/в obj2-ВП

- на/в obj2-ВП obj1-ВП

Переместить предмет

obj1 в/на obj2 (Transfer obj1 to obj2).

Тян[уть]
Тащ[ить

]
Волоч[ь]

- obj-ВП

Тянуть/тащить предмет

obj (Pull obj).

- obj1-ВП на/в obj2-ВП

- на/в obj2-ВП obj1-ВП

Переместить предмет

obj1 в/на obj2 (Transfer obj1 to obj2).

Верт[еть]
Вращ[ать]

[По]верн]уть]

- obj-ВП

Вертеть/вращать предмет

obj (Turn obj).

Двиг[ать]

- obj1-ВП на/в obj2-ВП

- на/в obj2-ВП obj1-ВП

Переместить предмет

obj1 на obj2 (Transfer obj1 to obj2).

Установ[ить]
Настро[ить]

- obj-ВП

"Установить" предмет obj (Set obj).

- obj-ВП на val

- на
val obj-ВП

Установить (т.е. настроить) устройство

obj на значение val (SetTo obj to val).

[По]мах[ать]

(Без аргументов): Просто помахать руками (

WaveHands).

- obj-ТП

Помахать предметом

obj (Wave obj).

Дат

[ь]
Предлож[ить]

- obj-ВП actor-ДП

- actor-ДП obj-ВП

Предложить предмет

obj персонажу actor (Give obj to actor).

Показ[ать]

- obj-ВП actor-ДП

- actor-ДП obj-ВП

Продемонстрировать предмет

obj персонажу actor (Show obj to actor).

[Рас]спрос[ить]

- о
/про topic у actor-ВП

- у
actor-ВП о/про topic

Расспросить персонажа

actor о теме topic (Ask actor about topic).

[Рас]сказ[ать]

- actor-ДП о/про topic

Рассказать персонажу

actor о теме topic (Tell actor about topic).

Ответ[ить]

- actor-ДП о/про topic

Дать персонажу

actor ответ "topic" (Answer topic to actor).

Попрос[ить]
Выпрос[ить]

- topic у actor-ВП

- у actor-ВП topic

Попросить

"topic" у персонажа actor (AskFor actor for topic).

Уб[ить]
Удар

[ить]
Атаков[ать]

- obj-ВП

Убить

или атаковать предмет (или персонажа) obj (Attack obj).

[Съ]ес[ть]
[Со]жр[ать]

- obj-ВП

Съесть предмет

obj (Eat obj).

[Вы]пить

- obj-ВП

Выпить предмет

obj (Drink obj).

Ж[д[ать]]

Просто подождать немного (

Wait).

Спа

[ть]
Дрем[ать]

Просто поспать немного (

Sleep).

[Раз]буд[ить]

(Без параметров): Проснуться самому (

Wake).

- actor-ВП

Разбудить персонажа

actor (WakeOther actor).

Пе

[ть]

Спеть что-нибудь

(Sing).

[За|В]лез[ть]

- obj-ВП

Залезть на предмет

obj (Climb obj).

Куп[ить]

- obj-ВП

Купить предмет

obj (Buy obj).

Сж

[ать]
[С]дав[ить]

- obj-ВП

Сжать

/сдавить руками предмет obj (Squeeze obj).

Плав[ать]
Ныр

[ять]

Поплавать/понырять (

Swim).

Кач[ать]

[ся]

- obj-ВП

- на obj-ВП

Качаться на предмете

obj, например, на качелях (Swing obj).

Ду

[ть]

- obj-ВП

- в obj-ВП

Подуть на

/в предмет obj (Blow obj).

Мол[ить][ся

]

Молить или молиться (

Pray).

Целов[ать]
Обним[ать]

- actor-ВП

Попытаться поцеловать и/или обнять персонажа

actor (Kiss actor).

Дум

[ать]

Ну да, поразмышлять немного (о жизни, например ;) (

Think).

[При]слуш[ать][ся]

(Без параметров): Просто послушать вокруг (

Listen).

- obj-ВП

- к obj-ДП

Прислушаться к предмету

obj (Listen obj).

[По]нюх[ать]

(Без параметров): Просто понюхать воздух (

Smell).

- obj-ВП

Понюхать предмет

obj (Smell obj).

Вкус[ить]
Вкуш[ать]
Лиз[ать

]

- obj-ВП

Попробовать на вкус предмет

obj (Taste obj).

Трон

[уть]

- obj-ВП

Коснуться предмета

obj (Touch obj).

[При]кас[ать][ся]

- obj-РП

- к obj-ДП

Коснуться предмета

obj (Touch obj).

Тер[еть

]

- obj-ВП

Тереть предмет

obj (Rub obj).

[С|При]вяз[ать]

- obj-ВП

Связать предмет

obj (Tie obj).

- obj1-ВП с obj2-ТП

- с obj2-ТП obj1-ВП

- obj1-ВП к obj2-ДП

- к obj2-ДП obj1-ВП

Привязать предмет

obj1 к предмету obj2 (Tie obj1 to obj2).

[С|Под]жеч[ь]

- obj-ВП

Жечь предмет

obj (Burn obj).

- obj1-ВП obj2-ТП

- obj2-ТП obj1-ВП

Жечь

obj1 с помощью obj2 (Burn obj1 by obj2).

[На]полн[ить]

- obj-ВП

Наполнить предмет

obj (Fill obj).

[Пере]рез[ать]

- obj-ВП

Резать предмет

obj (Cut obj).

Прыг

[ать]
Скак[ать]

(Без параметров): Прыгать на месте (Jump).

- obj-ВП

Перепрыгнуть через предмет

obj (JumpOver obj).

[Вы]коп[ать]
[Вы]ры[ть]

- obj-ВП

Копать предмет

obj (Dig obj).

- obj1-ВП obj2-ТП

- obj2-ТП obj1-ВП

Копать

obj1 с помощью obj2 (Dig obj1 by obj2).

Прост[ить]

Попросить прощения (

Sorry).

Да
Нет

Согласиться

(Yes) или отказаться (No).

Конечно, каждая игра может дополнить этот список своими собственными глаголами. Обычно в них сообщается в документации или по ходу игры.

Если Вы встретите

NPC, ему можно попробовать отдавать распоряжения или команды. Синтаксис обычный:

actor, Command

или

Попрос

[ить] actor-РП Command

или

Сказ

[ать] actor-ДП Command

Наконец, в одной команде допускается несколько действий. В качестве разделителя используйте потом

, затем или просто точку.

Вот несколько примеров команд, построенных исключительно на основе стандартного набора глаголов (они будут пониматься, если в словаре игры есть соответствующие объекты).

Осмотреться

(можно просто "См")

Осмотреть стол

(можно просто "См стол")

Идти на север

(можно просто "Идти С" или "С")

Читать о памятнике в путеводителе

Войти в телефонную кабину

Взять из коробки молоток, отвертку и клещи

Положить все

Бросить кинжал в тролля

Брось мяч в кольцо

Возьми плащ затем надень его

Отопри латунным ключом дубовую дверь потом открой ее

Перепрыгни через канаву

Установить настенные часы на 11:35

Поджечь записку зажигалкой

Бросить все монетки в фонтан

Перерезать красную ленточку

Привязать бельевую веревку к телевизионной антенне

Разбить стекло потом повернуть красную рукоятку

Копать угольную яму совковой лопатой

Вставить ключ в отверстие; повернуть его; нажать верхнюю кнопку

Задуть черную свечу

Залезть на грот-мачту затем привязать вымпел

Дать Кольцо Черному властелину

Показать кардиограмму медсестре

Рассказать главкому о плане "Барбаросса"

Спросить профессора о летней сессии

И так далее. Очень многие глаголы допускают дополнительные варианты, даже не упомянутые в списке выше. Поэкспериментируйте.

Проблемы

- Значительная избыточность распознавателя. Помимо всех допустимых грамматических форм, понимается также большое количество не существующих в русском языке. То же справедливо и в отношении глаголов (особенно, с приставками). С этим трудно что-либо поделать.

- Групповые спецификации, обращающиеся к контейнеру или поверхности, не работают правильно
. Например, команды типа "взять все со стола" или "взять все из шкафа" будет иметь ответом "Их здесь просто нет!" (в то время, как брать предметы по одному можно). Это тоже, по-видимому, проблема парсера.

- Механизм уточнения команды работает корректно далеко не всегда. Скажем, если была команда "взять ключ", и последовал вопрос: "Что имеется в виду: бронзовый ключ или золотой ключ
?" — простой ответ ("бронзовый" или "золотой") скорее всего не будет работать (но ответ, урезанный до основы слова — в данном случае, "бронзов" или "золот" — будет понят правильно). Надежнее подправить саму команду и повторить ее. Проблема в парсере — скорее всего, к следующему релизу она будет решена.

Контактная информация

Информацию об ошибках, критику, предложения и идеи предлагается обсуждать на форуме сайта “Опус и ляпсус” (

http://www.taplap.ru), где я бываю достаточно регулярно. В крайнем случае, можно написать автору.

Приятного времяпровождения! Успехов в тестировании и использовании системы!