Данный файл является частью Руководства по TADS для авторов игр.
Copyright © 1987 - 2016 Майкл Дж. Робертс (Michael J. Roberts). Все права защищены.
Руководство было преобразовано в формат HTML Н. К. Гайем (N. K. Guy), компания tela design.

Перевод руководства на русский язык - Валентин Коптельцев


Приложение H


Запуск мультимедийных игр TADS на интерпретаторах без поддержки соответствующих возможностей

 

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

Начиная с версии 2.2.4, нативный чисто текстовый интерпретатор TADS (он же интерпретатор командной строки или консольный интерпретатор) обеспечивает определенную степень совместимости с играми, написанными под Multimedia TADS. Это позволяет авторам писать игры с использованием некоторой части нового HTML-функционала и при этом не потерять игроков, использующих системы, для которых мультимедийные версии TADS пока недоступны.

Хотя чисто текстовый интерпретатор TADS не понимает большинство форматирующих последовательностей HTML, некоторые из них он все же распознает. Непонятные же ему элементы разметки HTML он попросту не выводит на экран; таким образом, игроки не увидят исходного кода HTML в тексте игры. Такой подход не позволяет увидеть все мультимедийные возможности игры, но по крайней мере текст игры выводится корректно, хотя и без форматирования. Для игр, ограниченно использующих возможности HTML, такой компромисс вполне разумен. Обратите внимание, что интерпретирование HTML должно быть включено последовательностью \H+ в выводимом игрой тексте. Эта последовательность может встречаться только в играх с использованием HTML; таким образом, на игры, не использующие такое форматирование, средства ограниченной совместимости интерпретатора командной строки с HTML никак не влияют.

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

Например, набор символов DOS для США (кодовая страница 437) позволяет корректно отобразить примерно половину сущностей кодовой страницы ISO Latin-1, еще для 30% использует похожие символы, а для остальных 20% - пробелы. Кодовая страница 437 не содержит многих символов за пределами базового набора ISO Latin-1, поэтому она не способна отображать большинство математических символов, а также символы Latin-2.

Помимо этого, текстовый интерпретатор TADS поддерживает следующие теги:


Ресурсы, включенные в файл игры

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


Советы по обеспечению обратной совместимости

Для обеспечения максимальной переносимости игры, безусловно, имеет смысл добиваться как можно большей ее совместимости с консольным интерпретатором. Для этого существует два пути: либо ограничиться такими средствами HTML, которые не искажают вывод текста в консольном интерпретаторе, либо проверять версию текущего интерпретатора в коде игры перед каждым обращением к мультимедийным возможностям. Второй путь, пожалуй, перспективнее, так как он, во-первых, не связывает автору руки в оформлении игры, а во-вторых, гарантированно обеспечит корректную работу не только с нативным консольным интерпретатором, но и с интерпретаторами сторонних разработчиков. Недостатком является несколько больший объем трудозатрат на реализацию соответствующих проверок.

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


Использование не искажающих вывод текста средств HTML

Многие элементы разметки HTML могут быть использованы так, чтобы не оказывать сильного влияния на восприятие текста; за счет этого их отсутствие не будет сильно бросаться в глаза. Например, большая часть тегов, отвечающих за стиль текста (например, <I>, выводящий текст курсивом, или <FONT>, позволяющий определить шрифт и размер) может быть опущена без ущерба для содержания. Если вы обращаете внимание на то, какими средствами разметки текста пользуетесь, и имеете ясное представление о том, как будет выглядеть текст без их использования, пользователи стандартного интерпретатора TADS смогут играть в вашу игру и не увидят большой разницы по сравнению с мультимедийным интерпретатором, за исключением разве что менее интересного оформления.

Аналогично, теги SOUND и IMG можно использовать исключительно для создания атмосферы и не размещать в звуковых и графических ресурсах критичную для прохождения игры информацию. Если следовать этому правилу, ваше произведение останется вполне играбельным и на интерпретаторе без мультимедийных возможностей.

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


Вывод текста в зависимости от версии интерпретатора

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

Добиться этого можно либо использованием символов препроцессинга и директив #ifdef, создавая две версии игры под разные интерпретаторы на этапе компиляции, либо при помощи обращения к функции systemInfo в коде на этапе исполнения программы с тем, чтобы убедиться, что интерпертатор поддерживает HTML. Обратите внимание, что для консольного интерпретатора эта функция в любом случае вернет значение, соответствующее отсутствию поддержки HTML, хотя более-менее новые версии этого интерпретатора и поддерживают некоторые теги.

Пример реализации обоих описанных способов можно посмотреть в коде файла advr.t, формирующем строку статуса. Вначале там используется условная компиляция, где выбирается, будет ли в скомпилированной игре использоваться стандартная строка состояния либо более современная версия на основе тега BANNER. На этапе же исполнения код для мультимедийной версии проверяет, поддерживает ли текущий интерпретатор HTML в полном объеме и, если нет, возвращается к стандартной строке состояния.

 


Так выпьем за то, чтобы наши желания совпадали с нашими возможностями.
АДМИНИСТРАТОР ГОСТИНИЦЫ, Кавказская пленница (фильм) (1966)

Приложение G Содержание

Приложение I