Изменения

Перейти к навигации Перейти к поиску

RTADS

151 байт добавлено, 14:43, 3 апреля 2019
Нет описания правки
'''RTADS''' — это локализованная на русский язык известная [[платформа]] [[TADS|TADS 2]] (Text Adventure Development System], на что и указывает буква «R» (Russian) в её названии. Локализация произведена [[Гранкин, Андрей|Андреем Гранкиным]] в 2002 году и активно дорабатывалась в последующие годы. Также используется написание (R)TADS, которое, как правило, применяется в случаях, когда языковая специфика не имеет существенного значения и обсуждаемые вопросы справедливы как в отношении оригинальной, так и в отношении локализованной версии.
RTADS — это одна из наиболее функциональных и отлаженных русскоязычных платформ для написания [[ПарсерПарсерные игры|парсерной]] [[Интерактивная литература|интерактивной литературы]], а также наиболее распространённая из них по количеству и размеру написанных [[ПарсерПарсерные игры|парсерных игр]] на русском языке. Впрочем, известны неоднократные случаи использования RTADS и для написания не только парсерных, но и менюшных, или вообще не текстовых игр (подробнее см. «[[TADS#Использование для разработки непарсерных игр|TADS: Использование для разработки непарсерных игр]]»). Официальный комплект поставки RTADS даже уже включает специальную библиотеку для создания менюшных игр, да и существует множество сторонних библиотек такого плана.
Данная статья посвящена преимущественно особенностям RTADS, специфичным для русского языка, поэтому для получения общей информации о платформе в целом следует также ознакомиться с [[TADS|основной статьёй про TADS 2]].
(Данный раздел посвящён истории платформы RTADS, построенной на базе [[TADS|TADS 2]]. Для получения информации об истории оригинальной платформы см. основную статью «[[TADS#История|TADS: История]]».)
Впервые с [[Интерактивная литература|текстовыми играми]] [[Гранкин, Андрей|Андрей Гранкин]] познакомился в 1992 году на компьютере [[wikipedia:ZX Spectrum|Spectruм]]. Впрочем, по его собственному признанию, ни одну из тех игр пройти ему в свои 9 лет не удалось из-за недостаточных знаний английского языка, однако они оставили у него ощущение больших скрытых богатств, и с тех пор его неодолимо тянуло ко всем играм изобилующим текстом. Следующим знаковым этапом приобщения [[Гранкин, Андрей|Андрея Гранкина]] к текстовым играм стало его знакомство с Rogue-подобной игрой [[wikipedia:NetHack|NetHack]] в 1999 году, в отношении которой он даже предпринимал серьёзные попытки перевода на русский, а затем и с играми класса [[MUD]]. Именно после них он стал целенаправленно интересоваться вопросом однопользовательских [[ПарсерПарсерные игры|игр с текстовым вводом]], и однажды, случайно увидев игру «[[Зомби 1 - Бегство]]», понял, что это то, что надо, хотя и в неудачной реализации:
{{начало цитаты}}
«...я, наконец, догадался, что должен существовать целый жанр текстовых игр, и вышел на поиски именно их. В интернете по этому поводу нашёлся сайт [[Кащей (персоналия)|Кащея]], с играми, ужасающими сильнее, чем любые [[Зомби]]. [[Opus & Lapsus|ТяпЛяп]], тогда уже существовавший, загружаться отказался. Зато по ссылкам я вышел на [[Infocom|Inforcom'овские]] игры и с удовольствием играл в них около полугода. Когда же они надоели, а было это в июне 2002 года, мне захотелось самому написать нечто подобное. Неделя экспериментов с [[Inform|Inform'ом]] завершилась частичным переводом библиотек, созданием пары комнат с описаниями и вещами на русском, а также заваленным экзаменом. Что печально, ни один [[интерпретатор]] так и не позволил вводить русские буквы, удивлённо высвечивая вместо них вопросительные знаки. Пришлось забросить это начинание, и вернуться к учёбе.
В конце августа, досада от предыдущей неудачи развеялась и я решился попытаться ещё разок, на этот раз уже с системой [[TADS|ТАДС]]. Опыты оказались удачными, система прекрасно понимала русский без каких-либо настроек. Работа пошла быстрыми темпами, так как в это время Москва стала задыхаться в дыме лесных пожаров, и целых две недели я почти никуда не выходил по вечерам, а всё свободное время мучил файл под названием adv.t. Возможно я бы всё же не закончил это дело, если бы не наткнулся снова на сайт [[Opus & Lapsus|ТяпЛяп]], и не узнал что [[Заикин, Павел|Заикин Павел]] также занимается этим переводом. Обнаружилось, что этого события давно ждут и подобные попытки уже совершались ранее. В страхе что меня опередят, в следующую неделю я не только завершил перевод, но и написал [[Волк, коза и капустаТри медведя|экспериментальную игрушку]], призванную показать все возможности системы. 13 сентября я выложил свои труды на сайт и объявил об этом общественности, от которой примерно через неделю начали приходить одобрительные отзывы. Так началась история этого проекта...»
{{конец цитаты}}
Впрочем, некоторое время спустя [[Гранкин, Андрей|Андрей Гранкин]] всё же снова вернулся к переводу и платформы [[Inform]], пролоббировав в [[Windows Frotz]] доработки, необходимые для поддержки русского ввода, а также сделав базовый перевод стандартной библиотеки [[Inform]] и написав тестовую игру, что в последствие и стало основой проекта [[RInform]] [[Гаев, Денис|Дениса Гаева]] (подробнее см. «[[RInform#История|RInform: История]]»). Впрочем, основные усилия им всё же тратились именно на проект RTADS.
На 2002-2003 годы пришёлся наиболее активный этап разработки RTADS, когда шла основная работа по адаптации стандартной библиотеки к специфики специфике русского языка. Менее чем за полтора года был выпущен 21 релиз, за счёт которых в итоге удалось достигнуть высокого уровня [[Парсер|синтаксического анализа]] русскоязычных команд и процедурной генерации описаний с учётом лексических параметров игровых объектов, превосходившего все альтернативные русскоязычные платформы и самодельные парсерные движки, существовавшие на тот момент.
В 2003 году к проекту RTADS подключился [[Коптельцев, Валентин|Валентин Коптельцев]], хорошо знакомый с платформой [[TADS]] ещё в её оригинальном виде и являвшийся автором ряда англоязычных игр на ней. [[Коптельцев, Валентин|Валентин]] взялся за перевод официальной документации [[TADS]] и её адаптацию к RTADS, то есть за дополнение темами, освещающими нюансы написания русскоязычных игр. Вместе с работой [[Старков, Стас|Стаса Старкова]] по переводу технических комментариев к коду стандартных библиотек всё в том же 2003 году, это обеспечило высокий уровень документированности платформы RTADS, позволявший привлекать новых авторов, желающих писать парсерные игры, но неготовых для этого предварительно глубоко погружаться в исходные коды для понимания принципов работы движка.
Также существует модуль [[Модуль проверки орфографии для RTADS|spellchecker]] для автоисправления ошибок при вводе команд, написанный [[Гранкин, Михаил|Михаилом Гранкиным]], который раньше включался в официальный комплект поставки RTADS, но в последствие был из него исключён и теперь поставляется отдельно. Однако в advr.t сохранён интерфейс для его подключения.
Дополнительная библиотека [[GameInfo|gameinfo.t]], которая отвечает за автоматическое создание файла библиографического описания игры по стандарту [[Договор Бабеля|Договора Бабеля, ]], , содержащаяся в комплекте поставки [[TADS|TADS 2]] не имеет языковых зависимостей и может быть использована в RTADS в своём оригинальном виде.
=== Отличия RTADS от TADS 2 ===
=== Возможности парсера для игроков ===
Платформа RTADS имеет развитый [[Парсер|синтаксический анализатор]], соответствующий требованиям современных стандартов [[ПарсерПарсерные игры|парсерных игр]], но в дополнение к общим для большинства платформ возможностям ,он также имеет некоторое количество менее распространённых функций, позволяющих лаконично формулировать одной командой действия с достаточно сложной логикой. Эти возможности активно используются опытными игроками, а также повышают удобство геймплея в случае игр с высокодетализированной моделью мира и [[Загадка|пазлами]], ориентированными на сложное взаимодействие с множеством предметов.
RTADS поддерживает обработку команд из одного действия («[[Глагол|глагола]]»), из действия и [[Объект|объекта]], а также из действия и двух [[Объект|объектов]], например, «встать», «взять ключ», «открыть дверь ключом» соответственно. При этом, возможно связывание частей команды при помощи различных предлогов, обозначение объектов или действий более чем одним словом, использование названий объектов в разных падежных формах, а также использование в качестве объекта не только предмета из игрового мира, но и числа или строки текста в кавычках, например, для команд типа «повернуть переключатель микроволновки на 5» или «напечатать "привет" на клавиатуре».
=== Примеры кода и возможностей платформы для разработчиков ===
Ниже приводится несколько примеров кода RTADS, демонстрирующих общий синтаксис языка и его базовые конструкции, а также возможности платформы в отношении решения типовых задач по написанию [[ПарсерПарсерные игры|парсерных игр]] с учётом специфики русского языка.
<code><pre>
==== Сортировка методом пузырька ====
Язык программирования (R)TADS имеет развитые алгоритмические возможности и поддерживает основные конструкции и типы данных, характерные для языков промышленного уровняобщего назначения, что позволяет просто и компактно реализовывать достаточно сложные алгоритмы, не отвлекаясь на странные с точки зрения прикладного программирования особенности синтаксиса, систему типов и модель работы с памятью, встречающиеся у альтернативных [[ИЛ]]-[[платформ]]. Кроме того, он содержит ряд возможностей из области синтаксического сахара, ориентированных на специфику текстовых игр, например, упрощённый вывод текста на экран из любого места программы или специальную конструкцию внедрения логических выражений, вызовов отдельных функций, значений переменных или возвращаемых значений функций в выводимый на экран текст без необходимости описывать такие операции отдельно и затем делать конкатенацию. Хотя в явном виде операции конкатенации (как модифицирующей, так и немодифицирующей) в (R)TADS также доступны в полной мере, в отличие от некоторых альтернативных [[Платформа|платформ]], например, [[Inform|(R)Inform]], где этому препятствует архаичная модель работы с памятью.
Листинг:
==== Создание локации ====
Модель мира в играх на (R)TADS представляет собой совокупность объектов, для создания которых стандартная библиотека платформы предлагает большое количество готовых классов, имеющих всевозможные наборы типовых свойств, имитирующих те или иные свойства абстрактных сущностей, таких как помещения, коробкиконтейнеры, поверхности, одежда, еда и так далее. Разработчик может создать объект необходимого класса и сделать в нём ряд модификаций, адаптирующих его под задачи игры.
Листинг:
==== Создание предмета ====
При создании [[ПарсерПарсерные игры|парсерных игр]] на русском языке одной из главных особенностей является необходимость учитывать возможность ввода названия объектов в разных падежных формах, поэтому разработчику необходимо обеспечить распознавание объекта по всем словоформам его названий. Кроме того, и сама игра должна уметь склонять названия объектов в своих сообщениях, а для этого ей нужна чёткая информация о формах слова для соответствующих падежей. RTADS обладает всеми необходимыми механизмами для решения этих задач.
Листинг с ручным указанием словоформ:
==== Определение класса и функции, динамическое создание объектов ====
(R)TADS имеет развитый язык программирования, характеризующийся классической реализацией ООП с поддержкой суперклассов и множественного наследования, что позволяет упрощать написание кода за счёт высокой степени его переиспользования. В языке также существует механизм динамического создания объектов, позволяющий создавать и удалять новые объекты в процессе выполнения программы, что позволяет легко реализовывать многие продвинутые игровые механики. Одинаковые предметы игрового мира могут быть описаны особым образом, который позволяет пренебречь стандартным требованием [[ПарсерПарсерные игры|парсерных игр]], подразумевающем необходимость давать всем игровым объектам в одной локации уникальные названия.
Листинг:
==== Создание новых «глаголов» ====
Стандартная библиотека платформы имеет более сотни предопределённых «[[Глагол|глаголов]]», которые покрывают все типовые взаимодействия с игровым миром, традиционные для [[ПарсерПарсерные игры|парсерных игр]]. Однако особенности сюжета или геймплея часто обуславливают необходимость добавления новых «[[Глагол|глаголов]]» или модификации уже имеющихся. (R)TADS позволяет практически неограниченно расширять их перечень в игре, поддерживая команды в виде простых действий, действий в отношении объекта и действий в отношении объекта (прямого) с помощью объекта (косвенного). Одно и то же действие может работать как по одной схеме, так одновременно и по двум или всем трём схемам.
Листинг создания нового «глагола» как простого действия:
==== Создание отдельной области на экране ====
(R)TADS при работе в интерфейсе с поддержкой [[HTML TADS]] позволяет делить экран на произвольные области — так называемые баннеры — и управлять ими отдельно: выводить туда какой-то текст или картинку, менять только в них шрифт или фон и так далее. Это позволяет менять вид интерфейса, отходя от традиционного телетайпного стиля [[ПарсерПарсерные игры|парсерных игр]]. Вместе с этим, при должных усилиях разработчика, такая игра может сохранить полную проходимость и эргономичность интерфейса в обычном текстовом режиме без поддержки [[HTML TADS]].
Листинг:
Существуют специализированные редакторы для работы с [[TADS|TADS 2]], в частности, Imaginate, Implementor и TFE (TADS File Editor).
Схемы подсветки синтаксиса языка [[TADS|TADS 2]] существуют для таких общераспространённых редакторов как Aditor, Emacs, FAR, FED, FTE, Notepad++, TextPad, UltraEdit, Vim. Кроме того, ввиду близости синтаксиса [[TADS]] к синтаксису [[C++]] в какой-то мере можно использовать и его схемы подсветки и файлы синтаксиса или режима.
Также существует проект кодогенератора «[[Конструктор]]», выполненный как программа (игра) RTADS, в которой можно специальными командами создавать объекты мира (локации и предметы), тут же тестировать их поведение путём взаимодействия с ними стандартным игровым образом, а затем отдельной командой вывести сгенерированный код, описывающий построенный мир.
* [[:Категория:Игры на RTADS|Игры на RTADS]]
* [[:Категория:Интерпретаторы TADS|Интерпретаторы TADS]]
* [[:Категория:Библиотеки RTADSTADS|Библиотеки RTADSTADS]]

Навигация