TADS

Материал из IFВики
Перейти к навигации Перейти к поиску
TADS
Тип Парсерные платформы
Разработчик(и) High Energy Software: Майкл Робертс
Языки интерфейса Английский (есть отдельный проект русской локализации TADS 2 — см. RTADS)
Операционные системы Браузер, Windows, Android, iOS, macOS, GNU/Linux и другие.
Написано на C++
Язык разработки Собственный C-подобный TADS
Читаемые форматы файлов Исходный код TADS (*.t;*.h), Библиотеки TADS 3 (*.tl), Make-файлы TADS 3 (*.t3m), Игры TADS (*.gam;*.t3;*.t3x), Внешние ресурсы TADS (*.rs?;*.3r?)
Создаваемые форматы файлов Игры TADS (*.gam;*.t3;*.t3x), Внешние ресурсы TADS (*.rs?;*.3r?), Исполняемые файлы (*.exe)
Дата первого выпуска 1987
Последняя версия 3.1.3 (сохраняющая актуальность версия 2.5.17 второго поколения)
Дата последней версии 7 марта 2016
Состояние
Лицензия Собственный вариант freeware и open source
Сайт tads.org


TADS (Text Adventure Development System) — платформа, ориентированная на разработку парсерных текстовых игр. Существует русифицированная версия на базе TADS 2 — RTADS. Безусловно, вторая по популярности (после Inform) ИЛ-платформа в мире, а также наиболее технически развитая и продвинутая в инженерном отношении, предлагающая наиболее современные возможности по программированию и наиболее развитую инфраструктуру инструментов разработки. Однако обратной стороной технической развитости является один из наиболее высоких порогов входа в разработку на TADS по сравнению со многими альтернативными парсерными платформами, что и сдерживает многих авторов игр от её использования.

TADS является старейшей ИЛ-платформой из ныне активно использующихся и разрабатывающихся, но при этом по-прежнему одной из наиболее передовых в техническом отношении, как было и в самый момент её появления в 1987 году. Это обуславливается тем, что она имеет за плечами более чем 30-летнию историю постоянного развития и совершенствования, а её основной разработчик Майкл Робертс на протяжении всего этого времени старался удерживать TADS на переднем краю развития сферы разработки программного обеспечения, не боясь переписывать движок платформы с учётом новых стандартов индустрии, в том числе и ценой потери совместимости. Это во многом противоположная целевая установка, если сравнивать с Inform, где совместимость со старыми технологиями всегда ставилась во главу угла и сам Inform изначально разрабатывался во многом как довольно специфический и архаичный язык программирования, чтобы обеспечить совместимость со старой технологической основой Z-машины.

История

Майкл Робертс познакомился с текстовыми играми на заре эпохи в 1970 годах, а с возраста 12 лет уже стал самостоятельно программировать на BASIC и пробовать разрабатывать собственные игры. Однако вскоре он заметил, что большая часть кода всех его игр дублируется, поэтому стал задумываться над тем, как избавить себя от переписывания одного и того же каждый раз с нуля:


«Мне пришло в голову, что большая часть кода может быть обобщённой для любой текстовой игры. Так я попытался написать небольшую библиотеку стандартных функций, оперировавших набором файлов данных, в которых указывались словарные лексемы, описания комнат и так далее.

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

Как только вы начинаете размещать процедурный код в файлах данных, вы, по сути, получаете язык программирования. Сначала я пытался избежать написания настоящего интерпретатора языка, делая язык очень ограниченным и легко разбираемым парсером. Это было лучше, чем просто файлы данных, но писать программы на ограниченном языке было утомительно. В конце концов, я пришёл к выводу, что действительно нужен хороший язык, который был бы прост в использовании, чтобы писать достойные игры.»

Однако эксперименты Робертса существенно не продвинулись, пока он не поступил в Калифорнийский Технологический Институт, который, несмотря на ориентацию на подготовку физиков, давал также качественное образование в области компьютерных наук, в том числе в отношении современных представлений о языках программирования и дизайне компиляторов. Именно там он познакомился с передовым на тот момент объектно-ориентированным подходом в программировании, который оказался наиболее подходящим для реализации продвинутой платформы для разработки парсерных игр.

На тот момент использование ООП не являлось стандартной практикой для написания интерактивной литературы и это было определённым новаторством. Компания Infocom во многом реализовывала свой язык программирования ZIL именно в этой парадигме, но её инструменты разработки не были доступны независимым авторам, и все мелкие издатели и любители довольствовались альтернативными менее функциональными платформами, типа AGT, базирующимися на процедурном подходе.

Первоначально то, что в последствие стало известно как TADS, развивалось Майклом Робертсом исключительно для собственных нужд. Только во второй половине 1980-х годов Робертс пришёл к мысли, что его наработки могут оказаться пригодны для массового использования, и в 1987 году TADS оформился как полноценная платформа. Со временем, вместе со своим другом Стивом МакАдамсом, Майкл Робертс создал компанию, которую, отдавая должное степени Робертса по физике, было решено назвать High Energy Software. Данная компания с сентября 1990 года стала продавать платформу TADS 1.0, а вместе с этим и распространять в качестве примеров две ныне знаковые классические игры: бесплатную Ditch Day Drifter и платную Deep Space Drifter (на сегодняшний день оби эти игры распространяются бесплатно и доступны в том числе в русских переводах: «Блуждания в окопный день» и «Бороздящий просторы вселенной» соответственно).

В итоге, в конце 1980-х — начале 1990-х годах с выходом TADS 1.0 на рынке появилась первая общедоступная платформа, позволяющая разрабатывать текстовые игры, не уступающие по функциональности играм профессиональных издателей, таких как Infocom. Более того, в ряде аспектов TADS превосходил движок Infocom, имея более чистый синтаксис языка, более проработанную и последовательную модель мира, а также аналогичную виртуальную машину, обеспечивавшую такую же переносимость, но избавленную от жёстких ограничений Z-машины.

Ограниченный характер распространения TADS на том этапе не являлся существенным препятствием для популярности платформы. Текстовые игры в тот период в англоязычных странах пользовались высокой популярностью и привлекали к себе достаточный интерес, чтобы их разработчики были готовы покупать качественные инструменты для написания интерактивной литературы. Впрочем, платформа TADS имела довольно сложную систему лицензирования по схеме shareware, в том числе в зависимости от условий распространения игры. Так, существовала возможность бесплатного использования TADS, если разработанная игра будет также бесплатной. Однако платная регистрация предоставляла инструменты разработки с расширенной функциональностью и дополнительные материалы, а именно: зарегистрированный пользователь получал специальную встраиваемую версию интерпретатора, позволявшую собирать игру в единый исполняемый файл для более удобной дистрибьюции, а также вместе со всем остальным руководство в печатном виде. Регистрация TADS стоила 40 долларов США (предыдущая версия зачастую была доступна параллельно за 25 долларов), плюс упаковка и доставка стоила 3 доллара по территории США и 8 долларов за пределы США. Если же разрабатываемую игру предполагалось распространять на коммерческой основе, то это надо было согласовывать с High Energy Software особым образом.

Впрочем, коммерческий успех, как издателей текстовых игр, так и разработчиков инструментов для их создания, в тот период уже был довольно умерен. По признанию Майкла Робертса, TADS хоть и пользовался определённой популярностью, но объёмы продаж платных регистраций вряд ли выходили за пределы сотни копий в год. Правда, с учётом того, что в то время программное обеспечение продавалось и распространялось не через Интернет, а при помощи отправки конверта с дискетой средствами обычной почты в ответ на банковский перевод или получение банковского чека по всё той же почте, да и возможности по распространению информации о своём продукте у индивидуальных разработчиков были крайне ограничены из-за неразвитости коммуникационных каналов, такие объёмы продаж для нишевого проекта не столь уж незначительны, как это может казаться по современным меркам. Кроме того, для эквивалентного сравнения покупательной способности долларовых сумм конца 1980-х с долларовыми суммами конца 2010-х их необходимо, как минимум, удваивать для прямого учёта инфляции. Так или иначе, ещё несколько лет разработка TADS как коммерческого продукта продолжалась, и 17 ноября 1992 года High Energy Software выпустила TADS 2 с существенным набором доработок и усовершенствований.

В TADS 2 был реализован целый ряд доработок языка программирования, а также реализовано виртуальное кэширование объектов, что позволило создавать и запускать игры, объём которых больше объёма свободной оперативной памяти. Кроме того, появилась система откатов состояния игры (более сотни точек отката для типичной конфигурации), а также появились дополнительные возможности по оформлению интерфейса игры, в частности, настраиваемый вид строки состояния и возможность выделения текста. При всём этом, TADS 2 сохранил совместимость с TADS 1, лишь дополнив функциональность платформы и языка программирования.

Однако в 1990-е годы эпоха популярности текстовых игр всё же начинает заканчиваться, что проявляется в виде закрытия многих коммерческих издателей интерактивной литературы. Этот процесс начался ещё в 1989 году крупными сокращениями штата в Infocom, а к второй половине 1990-х какую-либо коммерческую активность проявляли в основном владельцы прав на игры Infocom, выпускавшие относительно успешные переиздания и графические игры под знакомыми текстовыми брендами. В этих условиях те, кто пытался делать бизнес на текстовых играх, сворачивают свою деятельность и уходят в другие сферы. Многие из них так больше и не отмечаются какой-либо активностью в данной области.

Спад общей популярности интерактивной литературы сказывается и на TADS, поэтому 20 июня 1996 года Майкл Робертс объявляет о закрытии High Energy Software и о переходе к полностью бесплатному распространению TADS 2, а 16 октября того же года открывает и исходный код платформы, дав толчок работе энтузиастов по портированию TADS на ещё большее число операционных систем. Кроме того, к тому моменту уже 3 года существует платформа Inform, являющаяся полностью бесплатной и предоставляющая во многом сопоставимую с TADS функциональность для написания текстовых игр, поэтому в середине 1990-х годов TADS уже не является единственным общедоступным инструментом для написания продвинутых парсерных игр.

Однако в отличие от многих других, навсегда ушедших из интерактивной литературы с потерей её коммерческой привлекательности, Майкл Робертс по-прежнему занимается ИЛ, но уже как некоммерческим хобби, принимая участие в проведении конкурсов, создавая специальные Интернет-ресурсы, а также продолжая разработку TADS. Так, 25 марта 1998 года он выпускает TADS 2.2.3 с поддержкой HTML TADS, то есть с возможностью использования HTML-разметки и мультимедийных ресурсов для оформления интерфейса игр при помощи картинок, анимации и звука, а также управления отдельными областями экрана.

В 2000-х годах Майкл Робертс решается на кардинальное переписывание TADS: с 2000 года начинается постепенная работа над новым поколением платформы параллельно с продолжающимся развитием TADS 2, а 15 сентября 2006 года происходит общий релиз TADS 3 — следующего поколения TADS с целым рядом существенных доработок и несовместимого с TADS 2. С этого момента активная разработка TADS 2 прекращается, оставаясь на уровне общей поддержки, а основное внимание Робертс уделяет развитию TADS 3.

21 декабря 2011 года выпускается версия TADS 3.1.0, одним из основных нововведений которой является поддержка сетевых возможностей. С этого момента TADS 3 получает функциональность для реализации различных функций в рамках клиент-серверной архитектуры и ещё один дополнительный тип интерфейса Web UI, напрямую несовместимый с уже существующими plain text и HTML. Всё это предоставляет в рамках TADS дополнительные возможности по разработке онлайновых и многопользовательских игр.

Принципы технологии

Игры TADS пишутся на специальном компилируемом языке программирования. Компилятор обрабатывает исходные файлы (обычно имеющие расширение .t) и генерирует двоичный файл игры (расширение .gam для TADS 2 и .t3 (ранее .t3x) для TADS3). Байт-код игр характеризуется высокой степенью переносимости, так как предназначен для специальной виртуальной машины, на базе которой реализован целый ряд интерпретаторов TADS для большого числа всевозможных операционных систем (подробнее см. раздел «Переносимость»).

У игр TADS есть три основных вариантов интерфейса:

  1. Обычный текстовый без какого-либо мультимедийного оформления и с минимальным выделением текста. Классический аскетичный вариант, актуальный ещё для консольных интерпретаторов со времён TADS 1.0.
  2. Мультимедийный, в котором возможно оформление текста средствами специального подмножества HTML, разделение экрана на отдельные области, а также использование картинок, анимации и звуков. Требует наличие поддержки HTML TADS в используемом интерпретаторе. Однако в TADS 2 и TADS 3 данный тип интерфейса в отношении многооконности реализуется по-разному: в TADS 2 (начиная с версии 2.2.3) через так называемую схему <BANNER>, представляющую собой некоторое подобие вёрстки интерфейса как HTML-страницы посредством вставки тегов стандартными методами вывода текста на экран, а в TADS 3 через так называемый Banner Window API, представляющий собой набор специальных функций, управляющих областями экрана.
  3. Web UI, представляющий собой специальный вариант интерфейса для web-версии игры на TADS 3 и предоставляющий больше контроля за HTML-, CSS-и Java-Script-содержимым страницы. Поддерживается с версии 3.1.0.

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

Мультимедийные ресурсы игры (картинки, анимации, звуки) могут использоваться в трёх вариантах:

  1. Мультимедийные файлы могут располагаться рядом с игрой в своём оригинальном виде, и интерпретатор будет обращаться к ним в соответствии с относительным путём, указанным в коде игры. Как правило, используется в процессе разработки и отладки, когда нет смысла каждый раз пересобирать игру с упаковкой ресурсов.
  2. Мультимедийные файлы могут быть запакованы в отдельный файл ресурсов TADS (расширение .rs? для TADS 2 и .3r? для TADS 3), и интерпретатор будет воспроизводить их из этого файла. Как правило, используется для разделения игры и ресурсов с целью их отдельного распространения. В частности, можно собрать несколько ресурсных файлов с мультимедийными файлами разного качества, предоставив игроку возможность выбрать оптимальный размер для загрузки, или же вообще отказаться от мультимедиа в игре.
  3. Мультимедийные файлы могут быть запакованы внутрь основного файла игры, и игра будет поставляться уже в таком монолитном виде.

Таким образом, TADS, в отличие от многих других ИЛ-платформ, имеет собственный механизм упаковки ресурсов и не нуждается в сторонних решениях, таких как Blorb.

При работе в сетевом режиме (Web UI) TADS подгружает внешние ресурсы асинхронно, то есть выполнение программы не будет останавливаться, ожидая полной загрузки запрошенных файлов.

Основные возможности

Специальный язык программирования TADS является классическим объектно-ориентированным, реализованным на базе языка C. По синтаксису TADS 2 напоминает некоторый гибрид C и Pascal, а TADS 3 гибрид Java, C++ и C#. Разработчик также имеет возможность с помощью специальных системных флагов изменить некоторые особенности синтаксиса, например, отключить чувствительность к регистру или активировать операторы, традиционные для C. В языке TADS используется определение типа в период исполнения программы, поэтому разработчику нет необходимости заранее объявлять типы данных переменных, функций и свойств. Кроме того, в TADS используются типы данных высокого уровня (такие, как списки и строки), благодаря чему управление памятью осуществляется автоматически.

Обычная программа на TADS состоит в основном из описаний объектов (локаций, предметов, NPC); поддерживаются суперклассы и наследование (множественное). Стандартный парсер весьма развит, не уступая стандартному «инфокомовскому» уровню. Есть возможность переопределять и расширять набор «глаголов» и их синтаксис, а также переопределять библиотечные подпрограммы. TADS также поддерживает динамическое управление памятью и создание новых объектов при выполнении, что является одним из фундаментальных отличий от основной альтернативы — Inform, где динамическое управление памятью в принципе невозможно.

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

Можно создавать так называемую «stand-alone gam», то есть TADS-программу, связанную с интерпретатором в один исполняемый файл. В итоге, обеспечивается возможность распространения игр как обычного прикладного ПО без необходимости заставлять игрока отдельно устанавливать интерпретатор.

Разработчикам предоставляется полноценная многофункциональная IDETADS Workbench, актуальная как для TADS 2, так и TADS 3. С её помощью можно создавать структурированные проекты без необходимости самостоятельно отслеживать все зависимости и иерархию файлов, а также выполнять целый ряд операций в обычном графическом интерфейсе (компиляцию финальной и отладочных версий, добавление и удаление ресурсов, сборку stand-alone gam и др.). Впрочем, разработчикам также доступен и полный набор утилит командной строки, позволяющих управлять проектом: создавать внешние файлы ресурсов, компилировать исходный код, выполнять его отладку, собирать игру со встроенным плеером в единый исполняемый файл. Данные утилиты могут использоваться напрямую или же интегрироваться с профессиональным текстовым редактором для программистов или другой IDE. Кроме того, набор из консольных утилит доступен для большего числа операционных систем, чем TADS Workbench.

Среди средств разработки платформы есть весьма мощное дополнительное средство — TADS-отладчик TDB, существующий как в консольном варианте, так и с графическим интерфейсом, и позволяющий просматривать и изменять любые данные программы, выполнять её в пошаговом режиме, устанавливать контрольные точки и пр. Кроме того, платформа имеет встроенную возможность автопрохождения игр по так называемому «скрипту», то есть файлу, содержащему перечисление команд ввода. Это позволяет выполнять регрессионное тестирование игр, отслеживая проходимость и корректность реакций на все команды после внесения каких-либо изменений в код.

Ядро TADS технологии (стандартные суперклассы, «глаголы», системные сообщения) реализовано в виде универсальных библиотечных файлов (для TADS 2 adv.t и std.t, а для TADS 3 совокупность множества файлов в директории adv3, подключаемых через файл adv3.h), легко доступных для модификации. (Правда, средства для модификации работы парсера несколько менее наглядны и удобны в применении, чем в Inform, но, вместе с этим, и более гибкие, что оказывается ценно при локализации на другие языки). Также реализовано множество полезных расширений для стандартных библиотек. Существуют даже полные замены (для TADS 2 Worldclass, alt, Pianosa или wadv, а для TADS 3 adv3Lite), представляющие собой альтернативную реализацию стандартной библиотеки для языка и виртуальной машины TADS. То есть инфраструктура платформы (язык программирования, компилятор, виртуальная машина для интерпретатора) и симулируемая модель мира в достаточной степени изолированы друг от друга, и инфраструктура может быть использована в отрыве от стандартной библиотеки, а разработчик игры может реализовать собственную модель мира или принципиально иную игровую механику с нуля, что многими уже сделано и поставляется как готовое решение.

Расширение технологии HTML TADS позволяет лучше управлять выводимым текстом, путём включения в него тегов разметки (подмножество HTML). За счёт этого можно управлять шрифтами, размерами, цветом и прочими стилевыми атрибутами текста; можно включать в текст гиперссылки и графику (JPEG, PNG, MNG — анимированный PNG), воспроизводить многие популярные аудиоформаты (MIDI, WAV, MP3, OGG). Программы, ориентированные на HTML TADS, работают и в более старых TADS-интерпретаторах (хотя, конечно, без перечисленных дополнительных возможностей). Интерпретаторы TADS с поддержкой HTML существуют под практически все современные операционные системы (см. HTML TADS, QTads, Fabularium).

Новые версии системы в рамках третьего поколения TADS представляют собой существенный шаг вперёд, прежде всего, в плане описания объектной модели игры. Уже TADS 2 обладал, пожалуй, наиболее развитой стандартной библиотекой среди всех распространённых парсерных платформ, а в TADS 3 возможности по моделированию игрового мира ещё больше расширены и дают дополнительное пространство для его детализации, а также глобальные доработки синтаксиса и функциональности, соответствующие современным запросам к языкам программирования. В ходе работы над TADS 3, автор дорабатывает совместный для TADS 2 и TADS 3 интерпретатор, что означает дальнейшее улучшение мультимедийных возможностей и интерфейса. Кроме того, TADS 3 имеет специальную серверную версию для запуска игр в онлайн-режиме с рядом дополнительных возможностей, ориентированных на управление HTMl-, CSS-и JavaScript-содержимым страницы. В англоязычном сообществе третья версия уже намного обогнала по популярности вторую, однако в русскоязычном ситуация обратная в связи с отсутствием локализации TADS 3.

Отличия TADS 3 от TADS 2

Есть две основные версии TADS, находящиеся в статусе поддерживаемых и активно используемые сообществом, а именно: TADS 2, развивающаяся с 1992 года, и TADS 3, развивающаяся с 2006 года. TADS 3 значительно отличается от TADS 2 и их код несовместим, как напрямую, так и обратно, поэтому выбор конкретной версии TADS следует делать в начале разработки проекта.

Функционально TADS 3 имеет много общего с TADS 2, а также базируется на той же технологии пользовательского интерфейса HTML TADS, хотя и реализует в её рамках ряд дополнительных возможностей. Кроме того, TADS 2 и TADS 3 имеют во многом схожие инструменты разработки, такие как IDE Workbench или отладчик TDB. Язык программирования TADS 3 — это по сути расширенный вариант языка TADS 2.

Вместе с этим, TADS 3 имеет несколько крупных отличий от TADS2, а также большое число мелких изменений, среди которых можно выделить следующие:

  • Отсутствие встроенного парсера. TADS 3 больше не имеет универсальной реализации синтаксического анализатора, как TADS 2. Вместо этого, платформа предлагает набор мощных механизмов, которые упрощают создание пользовательского парсера, и стандартная англоязычная библиотека имеет реализацию пользовательского парсера для английского языка.
  • Отсутствие встроенного цикла обработки команд. Стандартная библиотека содержит реализацию интерфейса с ожиданием ввода следующей команды, но при желании автор игры может отказаться от стандартной библиотеки и более не ограничиваться подобным поведением системы. Это расширяет возможности по использованию TADS 3 для создания игр с нетипичными механиками.
  • Наличие сборщика мусора. TADS 3 получил автоматический сборщик мусора, который отслеживает более недоступные объекты, и удаляет их из памяти, избавляя разработчика от контроля за этими нюансами, а также страхуя его от всевозможных ошибок.
  • Более эффективное динамическое распределение памяти. TADS 3 ориентирован на эффективное динамическое создание объектов. Это происходит очень быстро и в сочетании с сборщиком мусора обеспечивает более современный стиль программирования, при котором объекты могут быть свободно использованы для создания временных структур данных.
  • Структурированная обработка исключений. TADS 3 имеет механизм обработки исключений, который позволяет значительно упростить структуру программы и улучшить процесс обработки ошибок и восстановления после них. Кроме того, все ошибки во время выполнения, созданные самой виртуальной машиной, используют стандартный механизм обработки исключений, который даёт разработчику контроль над тем, как игра обрабатывает ошибки среды выполнения VM и восстанавливается после них.
  • Истинная раздельная компиляция. Программы на TADS 3 можно разделить на любое количество модулей, после чего каждый модуль может быть скомпилирован отдельно, а скомпилированные модули можно связать между собой для создания полной программы. Перекомпилировать надо будет только модули, исходный код которых был изменён, что ускоряет время компиляции при создании больших игр.
  • Поддержка Unicode. Внутри TADS 3 используется Unicode для всех операций с символьной строкой, что позволяет использовать символы любого письменного языка и обеспечивать лёгкую переносимость среди всех типов компьютеров. Среди прочего, поддержка Unicode позволяет TADS 3 выполнять правильные преобразования регистра для всех символов с диакритическими знаками. В частности, в TADS 2 при локализации платформы на нелатиноалфавитные языки, например, в RTADS, приходилось писать альтернативные функции изменения регистра и использовать при написании игры уже их. Для TADS 3 такой проблемы больше нет.
  • Новые локальные переменные, объявляемые для инициализаторов for. Подобно Java или C++, TADS 3 позволяет определять новые локальные переменные в инициализаторе оператора for.
  • Локальные переменные в любом месте. TADS 3 позволяет объявлять локальные переменные в любом месте кода, а не только в начале блока, как в TADS 2.
  • Помеченные break и continue. Операторы break и continue в TADS 3 могут использовать необязательную целевую метку, определяющую, что замкнутый цикл должен быть прерван из определённого места или же продолжен с определённого места. Помеченные break и continue устраняют почти все остальные случаи, когда может быть полезен оператор goto.
  • Полный программный контроль над потоком управления игрой, в том числе сохранением и восстановлением, перезапуском и отменой хода.
  • Улучшения обработки регулярных выражений, включая служебную функцию, которая выполняет поиск по соответствиям регулярному выражению в строке и заменяет их подставляемым текстом.
  • Улучшенный генератор псевдослучайных чисел. TADS 3 использует улучшенный алгоритм генерации псевдослучайных чисел, а также обеспечивает более удобный доступ к данным в колекциях: он может псевдослучайным образом выбрать значение из списка или из списка аргументов в дополнение к традиционной генерации псевдослучайного числа.
  • Векторы и таблицы подстановки. Новый тип данных вектор обеспечивает альтернативу традиционному типу данных список. Векторы являются более эффективными для операций, где отдельные элементы коллекции постоянно обновляются. Таблицы подстановки обеспечивают тип доступа, известный как хеширование или ассоциативное индексирование, и позволяют хранить таблицу с введёнными в неё произвольными значениями, такими как строки или числа с плавающей точкой, и эффективно извлекать значение по его ключу.
  • Числа с плавающей точкой. Новый тип данных BigNumber обеспечивает арифметические операции с плавающей точкой для чисел с произвольной точностью. Тип BigNumber может быть использован для очень больших целочисленных вычислений, а также для высокоточной арифметики с плавающей точкой. BigNumber включает в себя полный набор арифметических и трансцендентных функций.
  • Анонимные объекты, шаблоны объектов, и декларация относительной вложенности. В языке ТАДС 3 имеется несколько новых функций для декларации объектов, которые предназначены для очень краткого и удобного определения объектов. Можно анонимно определить объект, что исключает необходимость именовать каждый элемент объекта; можно создавать шаблоны, которые позволяют назначить общие свойства без указания их имён; можно объявить местоположение объекта относительно недавно заявленного объекта, не называя контейнер объекта.
  • Подсписки, подмножества, сортировки и другие продвинутые возможности коллекций. Новые служебные методы для типа коллекции позволяют делать такие вещи, как извлечение произвольного диапазона индексов из списка, извлечение всех значений из списка, которые удовлетворяют заданным критериям, сортировку записей в списке по заданным критериям, применение преобразования ко всем значениям в списке, или же нахождение элемента списка, соответствующего определённым критериям.
  • Упрощённая обработка переменного числа аргументов. ТАДС 3 имеет новый синтаксис, который позволяет обрабатывать аргументы функций с переменным числом аргументов как список, а также передавать список значений как список переменного числа аргументов в функцию.
  • Анонимные функции. Язык TADS 3 предоставляет механизм, позволяющий определить встраиваемую безымянную функцию, которая может быть передана как функция обратного вызова для процедур, выполняющих итерации, перечисления или уведомления. Эта мощная конструкция позволяет написать гораздо более компактный код для многих типовых ситуаций.
  • Улучшения синтаксиса. Несколько элементов синтаксиса языка TADS были изменены для большего соответствия Java и C++. В частности, определения функций и методов стали больше напоминать соответствующие конструкции из этих языков. Кроме того, конструкторы в TADS 3 могут принимать аргументы через новый оператор.
  • Полный ANSI C препроцессор. Компилятор TADS 3 поддерживает практически все функции препроцессора стандарта ANSI C: макросы с параметрами замещения, вставку токина, преобразование в строку, #if, #elif, #line. Препроцессор TADS 3 даже подчиняется правилам ANSI C для рекурсивных и циклических макросов, позволяет определить макросы с переменным числом аргументов, а также имеет расширения правил ANSI для ещё более мощных макросов с переменным числом аргументов.
  • Расширенная библиотека. Всё вышеперечисленное относилось преимущественно к языку и виртуальной машине и не касалось стандартной библиотеки для моделирования мира, в то время как в данном направлении в TADS 3 также выполнен целый ряд серьёзных доработок и усовершенствований. Так, стандартная библиотека TADS 3 предоставляет расширенную модель чувств героя: зрения, слуха, обоняния и осязания, а также механизм расширяемости ощущений за счёт возможности вводить новые типы чувств, например, ощущение опасности при приближении к каким-то объектам; источники ощущений могут распространяться через несколько локаций, например, запах жарящейся на кухне яичницы может ощущаться в комнате через коридор, но пропадать при закрытии двери; источники света различной силы; например, тусклая свеча может позволять перемещаться по тёмному помещению, но не позволять увидеть маленький ключ на полу; позы для персонажей, например, лежание и сидение на кровати теперь может иметь разный смысл, а также есть возможность создавать новые позы; более продуманная система пошагового учёта игрового времени, в том числе с симуляцией хода времени; модульность игровых сообщений (для разных стилей сообщений по умолчанию); и определение грамматики ввода (для удобства перевода на другие естественные языки, кроме английского); в целом более модульный дизайн для облегчения создания расширений библиотеки; значительно улучшенная модель исполнения; последовательные соглашения по именованию; а также ещё многое другое.
  • События в реальном времени. Большинство интерпретаторов TADS 3 имеют расширенную поддержку обработки событий в реальном времени, в том числе интерпретаторы командной строки. Стандартная библиотека обеспечивает высокоуровневые возможности, которые делают работу с событиями в реальном времени очень простой. Эти события выглядят почти также, как счётчик ходов или демоны.
  • Расширенные возможности многооконности. Большинство интерпретаторов TADS 3 поддерживают новый API многооконности (Banner Window API), который заменяет основанную на HTML схему <BANNER> в TADS 2. В отличие от системы <BANNER>, новый API многооконности работает на большинстве платформ в символьном режиме, поэтому можно создавать сложные пользовательские интерфейсы, которые работают одинаково в более широком диапазоне систем. Новый API также предоставляет отдельный выходной поток для каждой дочерней области общего окна, что важно для интеграции событий в реальном времени. Строка состояния по умолчанию в библиотеке построена на новой оконной системе, что предоставляет огромную гибкость в настройке отображения статуса игры.
  • Поддержка сетевого клиент-серверного режима работы. TADS 3 имеет отдельную серверную версию, взаимодействие с которой осуществляется через обычный браузер без необходимости запускать на устройстве пользователя какое-то дополнительное программное обеспечение. Сетевой вариант TADS 3 имеет специальный тип интерфейса Web UI, предоставляющий расширенные возможности по управлению HTML-, CSS-и JavaScript-содержимым страницы, отображаемой в браузере пользователя. Сетевая версия TADS 3 позволяет разрабатывать в том числе и многопользовательские игры.

Кроме того, в TADS 3 есть целый ряд других более мелких усовершенствований, которые призваны облегчить разработку парсерных игр самого высокого уровня.

Тем не менее, существенная часть нововведений TADS 3 относятся к улучшениям платформы именно для разработчиков, а игроков если и затрагивают, то преимущественно косвенным образом, например, общим усовершенствованием алгоритмов парсинга, которые стали более устойчивы к неточному вводу команд. Более того, многие доработки TADS 3 лишь упрощают реализацию определённых решений в играх, тогда как TADS 2 также позволял их реализовывать, просто требовал от разработчика больше усилий в этом направлении, например, ручной контроль за созданием и удалением новых объектов вместо перекладывания этого на сборщик мусора. Таким образом, TADS 2 по своим потенциальным возможностям во многом равен TADS 3 в отношении реализации многих функций и механик модели мира, разумеется, при должном знании технических особенностей платформы и её языка программирования.

Для некоторых проектов стандартная библиотека TADS 3 может показаться чрезмерно сложной и перенасыщенной невостребованной функциональностью. Для решения этой проблемы существует альтернативная библиотека adv3Lite, реализующая упрощённый вариант модели мира и не требующая настолько глубокого погружения в процесс симуляции, как стандартная библиотека adv3. Изначально она являлась закрытым экспериментальным проектом самого Майкла Робертса, имевшим рабочее название Mercury, но 4 августа 2012 года он опубликовал её как adv3Lite и пригласил сообщество к совместной разработке. В итоге, основным ментейнером данного проекта стал Эрик Ева. adv3Lite также рекомендуется разработчикам, желающим быстро перейти на экосистему TADS 3 с TADS 2, но не нуждающимся во всех новых возможностях модели мира TADS 3.

Переносимость

Система TADS доступна на большом числе различных операционных систем: Acorn RISC OS (только интерпретатор), AmigaOS, Android, Atari ST/TT/Falcon, BeOS R5, DECStation, EPOC/Psion, iOS, Kindle (Touch, Paperwhite и Voyage), Linux, macOS/Macintosh, MorphOS, MS-DOS (в т.ч. для защищённого режима, а также версия для GO32), NeXT, OpenBSD, OS/2, PocketPC и PocketPC 2002 (процессоры ARM, MIPS и SH3), SGI Iris/Indigo, SunOS & Sun 3, Symbian Series 80, Unix, все версии Windows. Кроме того, существуют реализации интерпретатора TADS на JavaScript и только TADS 2 на Java, а также серверная версия интерпретатора TADS 3 на PHP (LAMP).

Интерпретаторы TADS предъявляют несколько большие системные требования, чем Z-интерпретаторы, поэтому на очень маломощных системах (старые ПК, наладонники) могут не работать. Кроме того, для многих устаревших операционных систем существуют лишь относительно старые версии интерпретаторов, поэтому они могут не поддерживать TADS 3 или некоторые относительно новые возможности TADS 2. Для современных операционных систем рекомендуемыми интерпретаторами TADS являются HTML TADS (Windows), QTads (Windows, macOS, GNU/Linux), Fabularium (Android), ifrotz (iOS).

Наиболее полный перечень инструментов разработки и интерпретаторов TADS для различных операционных систем можно посмотреть в соответствующем разделе IF Archive для TADS 2 и TADS 3, а также на официальных страницах загрузки TADS 2 и TADS 3.

Для желающих выполнить портирование TADS на какую-то операционную систему поставляется специальная сборка TADS System Source Code (porting kit), представляющая собой комплект общего C++-кода компилятора, интерпретатора и прочих инструментов. Пакет также включает в себя тестовые скрипты, системные заголовки и файлы документации.

Интернационализация и русская версия

Из-за объективной специфики парсерных игр использование англоязычной платформы для написания полноценных русскоязычных игр невозможно, поэтому платформа нуждается в предварительной локализации. Русская версия TADS 2 (RTADS) разрабатывается с лета 2002 года. Ведущий разработчик — Андрей Гранкин (перевод и адаптация стандартных библиотек), при участии Валентина Коптельцева (перевод и адаптация руководства) и Стаса Старкова (перевод комментариев кода стандартных библиотек). К 2017 году работы по локализации TADS 2 завершены в отношении всех компонентов: от библиотек до полной документации, а также выполнена и дополнительная адаптация, такая как встроенный генератор падежных форм (подробнее см. основную статью «RTADS»).

Русская локализация TADS 3 не существует, хотя сама платформа в версии 3 получила ряд доработок, призванных облегчить перевод на другие языки.

Использование для разработки непарсерных игр

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

Разумеется, написание на TADS игры с управлением в виде меню не представляет серьёзной проблемы, и для решения этой задачи существует целый ряд готовых библиотек, предназначенных как для создания полностью менюшных игр, так и для встраивания меню в парсерную игру, например, в виде диалога с готовыми вариантами выбора. В качестве примеров могут быть названы такие менюшные игры на TADS как «Аргинк», «Глубина» или «Похождения отважного хомяка Семена-1: Побег».

Однако возможности TADS намного шире и даже ещё на базе TADS 2 позволяют создавать совсем нетипичные игры, такие как, например, TADSTRIS, являющуюся реализацией тетриса, или «Звёздный туннель», представляющую собой риалтаймовую аудиоаркаду со стереозвуком.

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

Основным препятствием на пути использования TADS для разработки непарсерных игр является всё-таки формальная специализация платформы именно на традиционную интерактивную литературу, поэтому официальная документация практически не содержит описания соответствующих технических решений. По этой причине для создания подобных игр необходимо обладать достаточно высокими знаниями TADS, чтобы вырабатывать такие решения самостоятельно. Кроме того, во многом это всё же остаётся в большей степени упражнением для ума, нежели технически оправданным вариантом использования TADS, или же вообще золотым молотком.

Ссылки

См. также