Данный файл является частью Руководства по TADS для авторов игр.
Copyright © 1987 - 2016 Майкл Дж. Робертс
(Michael J. Roberts). Все права защищены.
Руководство было преобразовано в формат HTML Н. К. Гайем (N. K. Guy),
компания tela design.
Перевод руководства на русский язык - Валентин Коптельцев
Примечание переводчика: данная глава представляет скорее исторический интерес - вряд ли сейчас кто-то будет пользоваться нативным консольным интерпретатором, входящим в дистрибутив 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 поддерживает следующие теги:
Чисто текстовый интерпретатор также распознает теги <TITLE> и <ABOUTBOX>, но при этом просто игнорирует весь текст и разметку, размещенные между ними и соответствующими им закрывающими тегами (</TITLE> и </ABOUTBOX>). Тем не менее, за счет этого данные теги оказываются "безвредными", то есть их наличие не ведет к искажениям текста, выводимого консольным интерпретатором, и при их размещении в исходном коде игры нет необходимости вводить проверку версии интерпретатора.
Необходимо еще раз отметить, что вышеописанная ограниченная поддержка тегов появилась, начиная с версии интерпретатора 2.2.4. Интерпретатор версии 2.2.3 также распознает разметку HTML после указания последовательности \H+, однако он просто ее игнорирует.
Обратите внимание, что при включении ресурсов непосредственно в файл игры версии интерпретаторов более старые, чем 2.2.3, не смогут его открыть. Начиная с версии 2.2.3 консольный интерпретатор будет игнорировать ресурсы. Подробнее о проблемах совместимости читайте здесь.
Для обеспечения максимальной переносимости игры, безусловно, имеет смысл добиваться как можно большей ее совместимости с консольным интерпретатором. Для этого существует два пути: либо ограничиться такими средствами HTML, которые не искажают вывод текста в консольном интерпретаторе, либо проверять версию текущего интерпретатора в коде игры перед каждым обращением к мультимедийным возможностям. Второй путь, пожалуй, перспективнее, так как он, во-первых, не связывает автору руки в оформлении игры, а во-вторых, гарантированно обеспечит корректную работу не только с нативным консольным интерпретатором, но и с интерпретаторами сторонних разработчиков. Недостатком является несколько больший объем трудозатрат на реализацию соответствующих проверок.
Вне зависимости от выбранного подхода, в процессе разработки следует периодически (и достаточно часто) проверять работу вашей игры и на мультимедийном, и на чисто текстовом интерпретаторе. Это позволит вам сравнительно быстро выявлять проблемы с совместимостью, что, в свою очередь, дает два преимущества: во-первых, закончив разработку игры, вы не окажетесь конфронтированы с огромной и не самой простой задачей по обеспечению обратной совместимости; а во-вторых, вы быстро набьете руку на данном классе проблем, упростив себе жизнь в дальнейшем.
Многие элементы разметки HTML могут быть использованы так, чтобы не оказывать сильного влияния на восприятие текста; за счет этого их отсутствие не будет сильно бросаться в глаза. Например, большая часть тегов, отвечающих за стиль текста (например, <I>, выводящий текст курсивом, или <FONT>, позволяющий определить шрифт и размер) может быть опущена без ущерба для содержания. Если вы обращаете внимание на то, какими средствами разметки текста пользуетесь, и имеете ясное представление о том, как будет выглядеть текст без их использования, пользователи стандартного интерпретатора TADS смогут играть в вашу игру и не увидят большой разницы по сравнению с мультимедийным интерпретатором, за исключением разве что менее интересного оформления.
Аналогично, теги SOUND и IMG можно использовать исключительно для создания атмосферы и не размещать в звуковых и графических ресурсах критичную для прохождения игры информацию. Если следовать этому правилу, ваше произведение останется вполне играбельным и на интерпретаторе без мультимедийных возможностей.
При таком подходе к обеспечению обратной совместимости следует очень внимательно отнестись к использованию более сложных тегов форматирования, например, <TABLE> или <BANNER>, поскольку, если интерпретатор не будет их воспринимать, это может привести к существенному искажению раскладки текста.
Если в игре используются средства HTML, игнорирование которых приведет к искажению текста, вы, тем не менее, можете обеспечить совместимость с интерпретаторами TADS без мультимедийных возможностей за счет использования раздельной обработки текста для мультимедийного и для консольного интерпретатора.
Добиться этого можно либо использованием символов препроцессинга и директив #ifdef, создавая две версии игры под разные интерпретаторы на этапе компиляции, либо при помощи обращения к функции systemInfo в коде на этапе исполнения программы с тем, чтобы убедиться, что интерпертатор поддерживает HTML. Обратите внимание, что для консольного интерпретатора эта функция в любом случае вернет значение, соответствующее отсутствию поддержки HTML, хотя более-менее новые версии этого интерпретатора и поддерживают некоторые теги.
Пример реализации обоих описанных способов можно посмотреть в коде файла advr.t, формирующем строку статуса. Вначале там используется условная компиляция, где выбирается, будет ли в скомпилированной игре использоваться стандартная строка состояния либо более современная версия на основе тега BANNER. На этапе же исполнения код для мультимедийной версии проверяет, поддерживает ли текущий интерпретатор HTML в полном объеме и, если нет, возвращается к стандартной строке состояния.
Так выпьем за то, чтобы наши желания совпадали с нашими возможностями.
АДМИНИСТРАТОР ГОСТИНИЦЫ, Кавказская пленница (фильм) (1966)
Приложение G | Содержание |