Logo
 

 

система разработки интерактивной литературы на русском языке
главная/материалы

Функции, специфичные
для русского языка

Эти функции написаны А. Гранкиным и находятся в файле advr.t они необходимы авторам для корректного написания сообщений. Данный файл был создан Дмитрием Смиронвым, но позже обновлён и дополнен ГрАндом.

Примеры использования описанных ниже приемов можно найти в учебной игре "Три медведя" и "Блуждания в окопный день";

Основные предметы русифицированы и вы можете использовать, например объект room, точно так же, как и в английском варианте. Однако чтобы Ваша игра говорила по-русски грамотно, нужно использовать специальные подходы.

Функции

kpstok (mrod,grod, chislo)
Добавляет русские окончания кратким причастиям страдательного типа(kratkogo prichastiya stradatelnogo typa okonchanie). Например, ОТКРЫТ(Ы,А,О). Пол нужно указывать каждой новой вещи самому в главном игровом файле. Если мужской и женский род не указаны, или указаны оба - используется средний. Использовать не советую, так как функция yao(obj) гораздо более удобна в использовании, и даёт тот же результат. Единственный случай, когда она может вам понадобиться - необходимость передать род и число от различных объектов. Отчего может возникнуть такая необходимость - совершенно не представляю, и потому функцию kpstok можно считать чистейшим атавизмом.
glok (obj, sprag, type)

Добавляет русские окончания глаголам(glogolnoe okonchanie). В параметрах требуется указывать спряжение (1/2). Тип — это со звуком "й" окончание или нет. С "й" — это второй (1/2). С 18 релиза функция больше не принимает свойства lico и chislo отдельно, а находит эти свойства у переданного в качестве параметра объекта obj. Функция работает верно для всех параметров, кроме единственного числа первого лица("Я"), т.к. в этом случае некоторые глаголы меняются более существенно.

Число Лицо Первое спряж Второе спряж
Ед 1-л у ю у ю
  2-л ешь ёшь ишь ишь
  3-л ет ёт ит ит
Мн 1-л ем ём им им
  2-л ете ёте ите ите
  3-л ют ут ат ят
glsok (ca, mrod,grod,chislo)
Это функция для окончаний прошлого времени глаголов. Параметр "ca" определяет вид окончания глагола в прошедшем времени. Рекомендую вместо неё использовать функции iao(obj), saas(obj) и ella(obj).
ca=0 даёт (и; нулевое, а, о)
ca=1 даёт (ись; ся, ась, ось)
ca=2 даёт (ли; ёл, ла, ло)
ZA (str)
Изменяет первую букву слова на заглавную. Работает только для строк, заключенных в одинарные кавычки, типа: 'пень'.
dToS (obj, prop)
Ловит текст из строки с двойными кавычками и преобразует в одноковычный(double-quoted string to single-quoted string). Работает только для свойств объектов. Нужно для последующей обработки свойств, содержащих текст в двойных кавычках, например ldesc. Параметр obj — это имя объекта, prop — ссылка на свойство объекта. Например a:=dToS(Me,&sdesc) присвоит переменной "a" значение имени героя "Me" в одинарных кавычках. Функция предоставлена Майком Робертсом.
ZAG (obj, prop)
Данная комбинация функции ZA и dToS позволяет взять свойство prop у объекта obj, сделать первую букву заглавной, и вывести результат на экран. Например: ZAG(Me, &vdesc), выведет имя главного персонажа в винительной форме и начинающееся уже с заглавной буквы.
ok (obj, textIfIsThem, textIfIsHim, textIfIsNeuter, textIfIsHer )
Эта универсальная функция для вывода окончаний появляется начиная с 21 релиза. Она берёт свойства у объекта obj, и в зависимости от них, выводит окончание, выбранное среди четырёх других параметров. Т.е. textIfIsThem, textIfIsHim, textIfIsNeuter, textIfIsHer - текст в одинарных кавычках. Пример: "<<self.sdesc>> развернул<<ok(self,"ись","ся","ось","ась")>>. ";
numok ( num, s1, s4, s5 )
Функция для подстановки окончаний, зависимых от числа (numerovanyh slov okonchanie). Функцию предложил zverik. Также появляется начиная с 21 релиза
s1 — окончание в случае единицы, s4 — от 2 до 4, s5 — от 5 до 9 и для 0.
Пример: "Здесь лежит <<sayPrefixCount(num)>> спич<<ok(self,'ка','ки','ек')>>. ";
yao (obj)
Эта функция призвана заменить функцию kpstok и упростить её использование. Вместо того, чтобы требовать все необходимые параметры отдельно, yao принимает объект как параметр и использует его свойства пола и числа. "yao" является транскрипцией "ыао" - тех букв, которые функция должна выводить в зависимости от свойств предмета. Аналогично названы и последующие функции, что должно помочь их запоминанию.
iao (obj)
Сходно с yao, но вместо буквы "ы" во множественном числе выводится "и".
saas (obj)
Выводит окончания "ись", "ся", "ось", "ась".
ella (obj)
Выводит окончания "ли", "ёл", "ло", "ла".
oyay (obj)
Выводит окончания "ые", "ой", "ое", "ая".
dezyo (str)
Заменяет все буквы "ё" в строке str на "е".
loweru (str)
Переводит все русские заглавные буквы, встреченные в строке str, в прописные.
Если Вам не нравятся названия каких-либо из этих функций, то их легко изменить подобным образом:
MyFunctionName: function(obj, sprag, type)
{
glok(obj, sprag, type);
}


Правила создания объектов

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

У всех объектов есть свойства sdesc, rdesc, ddesc, vdesc, tdesc, pdesc, соответствующие формам соответственно Именительного, Родительного, Дательного, Винительного, Творительного и Предложного падежей.

Именительный Кто, Что
Родительный Кого, чего
Дательный Кому, чему
Винительный Кого, что
Творительный Кем, чем
Предложный О Ком, о чем

Для удобства создания описаний объектов рекомендуется пользоваться генератором падежей.

Падежные формы используются, чтобы система правильно произносила названия предметов, однако для того, чтобы система правильно понимала формы слов, вводимых игроком, этого не достаточно.

Чтобы парсер понимал формы вводимые игроком нужно включить все формы в свойство 'noun':

yezhik : thing
   location = throne
   sdesc = "любимый плюшевый ёжик короля"
   rdesc = "любимого плюшевого ёжика короля"
   ddesc = "любимому плюшевому ёжику короля"
   vdesc = "любимый плюшевый ёжик короля"
   tdesc = "любимым плюшевым ёжиком короля"
   pdesc = "любимом плюшевом ёжике короля"
   adjective = 'любимый' 'любимого' 'любимому' 'любимым' 'любимом'
     'плюшевый' 'плюшевого' 'плюшевому' 'плюшевым' 'плюшевом'
     'короля'
   noun = 'ежик' 'ежика' 'ежику' 'ежиком' 'ежике'
   ldesc = "Любимый плюшевый ёжик короля. "
   isHim = true
;

Есть еще одна тонкость -- для того, чтобы парсер понимал предложения типа «ударить гоблина телефоном», в смысле «ударить гоблина с помощью телефона» нужно в список свойства noun добавить форму с суффиксом «#t»; чтобы была понятна фраза «дать арахис слону» добавить форму с суффиксом «#d» соответственно, а чтобы был понят «кусок мяса»(определение после существительного), помимо 'мяса' в список adjective необходимо ввести 'мяса#r'. Например:

yezhik : thing
   location = throne
   sdesc = "любимый плюшевый ёжик короля"
   rdesc = "любимого плюшевого ёжика короля"
   ddesc = "любимому плюшевому ёжику короля"
   vdesc = "любимый плюшевый ёжик короля"
   tdesc = "любимым плюшевым ёжиком короля"
   pdesc = "любимом плюшевом ёжике короля"
   adjective = 'любимый' 'любимого' 'любимому' 'любимому#d' 'любимым' 'любимым#t' 'любимом'
     'плюшевый' 'плюшевого' 'плюшевому' 'плюшевому#d' 'плюшевым' 'плюшевым#t' 'плюшевом'
     'короля' 'короля#r'
   noun = 'ежик' 'ежика' 'ежику' 'ежиком' 'ежике' 'ежику#d' 'ежиком#t'
   ldesc = "Любимый плюшевый ёжик короля. "
   isHim = true
;

Полезные методы

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

itobjdesc

Выводит "их","её","его", в зависимости от пола и числа объекта.

ritobjdesc

Выводит те же местоимения, но в родительном падеже. Аналогично работают ditobjdesc, titobjdesc и pitobjdesc, а vitobjdesc отсутствует, т.к. в данном случае совпадает с itobjdesc.

itselfdesc

Выводит "них самих же", "него же", "неё саму же" или "него же", в зависимости от объекта.

disamvdesc

Свойство disamvdesc представляет собой винительный падеж объекта, используемый в случае разъяснения объекта. Используется только тогда, когда вы не хотите отображать прилагательные в составе названия.
Пример:
>инв
Ты несёшь:
стул
>взять стул
Который стул Вы имеете в виду: стул или высокий стул?
>стул
Который стул Вы имеете в виду: стул или высокий стул?
и т.д. Т.е. здесь мы никогда стул не возьмём.

добавляем стулу vdesc="обычный стул"
>инв
Ты несёшь:
обычный стул
То, что слово "обычный" видно всегда, может быть очень некрасиво или преждевременно выдавать информацию о предмете.

После добавления стулу disamvdesc="обычный стул":
>инв
Ты несёшь:
стул
>взять стул
Который стул Вы имеете в виду: обычный стул или высокий стул?

Методы, определённые для глаголов

vopr

Задаёт вопрос для вывода в том случае, если не указан прямой объект. По умолчанию равен "Что ".
"[vopr] Вы хотите [глагол]?".

pred

Указывает предлог для корректного вывода сообщения "Я не знаю как [глагол] [предлог] [объект]".

type

Указывает на поддержку глаголом косвенных объектов в падеже без предлога. Значение 1 означает творительный, 2 - дательный, 3 - оба падежа. Например, чтобы фраза "открыть дверь ключом" была понята, необходимо не только задать 'ключом#t' в список noun объекта ключа, но и присвоить свойству type глагола "открыть" значение 1.

Прочее

Лицо объекта указано в свойстве lico, принимающем числовые значения от 1 до 3. По умолчанию, имеет значение 3.

Механизм подстановки через значок "%" почти не используется в advr.t, но по-прежнему действует и может оказаться полезным. По этому поводу смотрите в руководство.

Copyright © 2002-2015 Гранкин Андрей
Лицензионное соглашение
Жду писем: rtads@mail.ru
Сайт появился 13.09.2002
Дизайн и хостинг: Дмитрий Смирнов