<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://ifwiki.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Feuerbart</id>
	<title>IFВики - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://ifwiki.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Feuerbart"/>
	<link rel="alternate" type="text/html" href="https://ifwiki.ru/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Feuerbart"/>
	<updated>2026-04-16T19:53:45Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>https://ifwiki.ru/index.php?title=%D0%9F%D0%BE%D0%BC%D0%BE%D1%89%D1%8C_%D0%BD%D0%B0%D1%87%D0%B8%D0%BD%D0%B0%D1%8E%D1%89%D0%B5%D0%BC%D1%83_%D0%B8%D0%B3%D1%80%D0%BE%D0%BA%D1%83_%D0%B2_RTADS&amp;diff=6099</id>
		<title>Помощь начинающему игроку в RTADS</title>
		<link rel="alternate" type="text/html" href="https://ifwiki.ru/index.php?title=%D0%9F%D0%BE%D0%BC%D0%BE%D1%89%D1%8C_%D0%BD%D0%B0%D1%87%D0%B8%D0%BD%D0%B0%D1%8E%D1%89%D0%B5%D0%BC%D1%83_%D0%B8%D0%B3%D1%80%D0%BE%D0%BA%D1%83_%D0%B2_RTADS&amp;diff=6099"/>
		<updated>2010-05-08T11:53:24Z</updated>

		<summary type="html">&lt;p&gt;Feuerbart: &amp;quot;кричать&amp;quot; и т.д - неопределённая форма, а не повелительное наклонение&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;Автор&#039;&#039;: [[Flint]], на основе «[http://rtads.org/beghelp.php Помощи начинающему игроку]».&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; некоторые советы и рекомендации из этой статьи могут быть применены и к играм на других платформах с текстовым вводом, однако они могут иметь иной формат команд и сокращений.&lt;br /&gt;
&lt;br /&gt;
==Что нужно для запуска игр==&lt;br /&gt;
Игры, написанные на [[RTADS]], имеют расширение .gam. Для того чтобы запустить игру, вам понадобится специальная программа – [[интерпретатор]]. Скачать его можно по следующим адресам:&lt;br /&gt;
&lt;br /&gt;
* для Windows:&lt;br /&gt;
:[http://www.rtads.org/htads_playkit_HT12_RUS.exe С русифицированным интерфейсом]&lt;br /&gt;
:[http://mirror.ifarchive.org/if-archive/programming/tads2/executables/htads_playkit_HT20.exe Английский проигрыватель] (зеркало)&lt;br /&gt;
:[http://www.ifarchive.org/if-archive/programming/tads2/executables/htads_playkit_HT20.exe Английский проигрыватель] (основной сайт)&lt;br /&gt;
&lt;br /&gt;
* для Linux:&lt;br /&gt;
:С [http://mirror.ifarchive.org/if-archive/programming/tads2/executables/qtads-1.6c-qt-3.3.x.tar.gz зеркала] ifarchive&lt;br /&gt;
:С [http://www.ifarchive.org/if-archive/programming/tads2/executables/qtads-1.6c-qt-3.3.x.tar.gz ifarchive.org]&lt;br /&gt;
:(требуется библиотека Qt 3.3 или выше)&lt;br /&gt;
&lt;br /&gt;
Версии для других операционных систем ищите в [http://www.ifarchive.org/if-archive/programming/tads2/executables/ каталоге]. Но качать файлы лучше не из каталога, а с [http://mirror.ifarchive.org/if-archive/programming/tads2/executables/ зеркала], из-за проблем со скоростью.&lt;br /&gt;
&lt;br /&gt;
Иногда автор может выпустить игру в виде исполняемого exe-файла, тогда вам ничего не нужно устанавливать. Но обычно такое не практикуется, поскольку из-за этого игры неоправданно вырастают в размерах.&lt;br /&gt;
&lt;br /&gt;
==Как играть==&lt;br /&gt;
В текстовом приключении вы играете путём набора команд, описывающих действия, которые должен выполнить персонаж. Каждый раз, когда вы видите значок &amp;quot;&amp;gt;&amp;quot; с мигающим за ним курсором, это значит, что игра ожидает от вас команды. Прочтите текст, вспомните, что происходит, какие предметы находятся в вашем распоряжении и действуйте! Не торопитесь, время в игре идет только после получения команды, пока вы раздумываете, ничего не происходит.&lt;br /&gt;
 &lt;br /&gt;
==Основные команды==&lt;br /&gt;
Самая важная и чаще всего используемая команда это «&#039;&#039;осмотреть&#039;&#039;». Так как всё содержимое игры является текстовым, то это единственный способ, которым вы можете получить информацию об игровом мире, поэтому старайтесь осматривать все предметы, попадающие в поле зрения, например «&#039;&#039;осмотреть серый валун&#039;&#039;». Для этой команды доступно сокращение «&#039;&#039;о&#039;&#039;», то есть можно набирать «&#039;&#039;о серый валун&#039;&#039;». Если вы просто введете «&#039;&#039;о&#039;&#039;», то получите описание места, в котором находитесь.&lt;br /&gt;
&lt;br /&gt;
Следующие по важности команды - это команды перемещения. Исторически сложилось так, что в текстовых играх направление движения указывается сторонами света («На севере вы видите низкий темный проход. Галерея же продолжается дальше на восток»). Поэтому, чтобы попасть в темный проход, следует писать не «&#039;&#039;идти в темный проход&#039;&#039;», а  «&#039;&#039;идти на север&#039;&#039;», или просто «&#039;&#039;север&#039;&#039;», или самый удобный вариант — сокращение «&#039;&#039;с&#039;&#039;». Соответственно, можно использовать и «&#039;&#039;з&#039;&#039;», «&#039;&#039;в&#039;&#039;», «&#039;&#039;ю&#039;&#039;», «&#039;&#039;сз&#039;&#039;» (северо запад), «&#039;&#039;св&#039;&#039;», «&#039;&#039;юз&#039;&#039;» и «&#039;&#039;юв&#039;&#039;». Перемещения в вертикальной плоскости осуществляются командами «&#039;&#039;вниз&#039;&#039;» (сокращенно «&#039;&#039;вн&#039;&#039;») и «&#039;&#039;вверх&#039;&#039;» (сокращенно «&#039;&#039;вв&#039;&#039;»). Также, в некоторых ситуациях можно куда-нибудь «&#039;&#039;войти&#039;&#039;» или «&#039;&#039;выйти&#039;&#039;». Когда вы посещаете какую-либо локацию в первый раз, выполняется её полный осмотр, а в дальнейшем при входе в неё будет выводиться лишь краткая информация. Если вы хотите снова получить полное описание, просто осмотритесь («&#039;&#039;о&#039;&#039;»). А если вам не нравится такое поведение игры, введите команду «&#039;&#039;длинно&#039;&#039;», тогда полное описание будет выводиться всегда. Отключается этот режим командой «&#039;&#039;коротко&#039;&#039;».&lt;br /&gt;
&lt;br /&gt;
Посмотреть, что за скарб вы тащите с собой можно командой «&#039;&#039;инвентарь&#039;&#039;» (сокращенно «&#039;&#039;и&#039;&#039;»). Пропустить некоторый отрезок времени можно командой «&#039;&#039;ждать&#039;&#039;» (или просто «&#039;&#039;ж&#039;&#039;»).&lt;br /&gt;
&lt;br /&gt;
А далее для прохождения игры вам придется, исходя из ситуации, формулировать собственные команды. Конечно, набор команд не бесконечен и задается автором во время создания игры. Поэтому, если, на ваш взгляд, игра не понимает совершенно очевидного, попробуйте переформулировать команду или заменить слово его синонимом. Если ничего не выходит, можете написать письмо автору игры с описанием вашего способа. В случае если способ логичен и не противоречит игровой логике, автор, скорее всего, добавит его в следующую версию программы. А вы пока испробуйте другой вариант.&lt;br /&gt;
&lt;br /&gt;
Также возможна ситуация, когда предмет упомянут в описании, но любые попытки с ним взаимодействовать приводят к появлению сообщений типа «Я не знаю слова такого-то». Это значит, что этот объект не важен для прохождения игры и служит лишь для оживления игрового мира. Для важных объектов обычно задается множество синонимов, так что если игра не понимает слово и его синонимы, то, скорее всего, не следует больше обращать на него (и на соответствующий предмет) внимание.&lt;br /&gt;
&lt;br /&gt;
==Советы по составлению команд==&lt;br /&gt;
К сожалению, игра это всего лишь программа и она может не понимать многое из того, что понимает человек. Поэтому позвольте дать вам несколько советов по составлению команд. Глагол в вашей команде всегда должен стоять на первом месте. Постарайтесь писать глаголы в неопределённой форме, например:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;кричать&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;спать&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;ждать&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
и т.п.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
К глаголу может быть присоединен прямой объект, например:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;взять кусок арматуры&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;открыть коробку&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;бросить нитроглицерин&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;тянуть чеку&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;съесть мышьяк&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;отпереть дверь&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;лечь на кровать&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;нажать красную кнопку&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;сесть в машину&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;надеть майку&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также могут добавляться и непрямые объекты. Составляйте команду так, чтобы сначала шел прямой объект, а за ним - непрямой, иначе игра может вас не понять. Например, «&#039;&#039;привязать козла к забору&#039;&#039;» - правильная команда, а «&#039;&#039;привязать к забору козла&#039;&#039;», хотя и грамматически верна, но может быть не распознана. &lt;br /&gt;
Еще примеры (правильных) команд:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;положить пирог на стол&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;отпереть дверь бронзовым ключом&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;дать мед Винни-Пуху&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;перевязать рану бинтом&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;повернуть рукоятку на 4 деления&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;ударить мертвеца лопатой&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;показать пропуск охраннику&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;набрать «привет» на клавиатуре&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;поджечь фитиль спичкой&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если ваша команда содержит некоторую неоднозначность, игра попросит вас устранить её:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;открыть дверь&lt;br /&gt;
 Какую дверь вы имеете в виду: дверь подъезда или дверь квартиры?&lt;br /&gt;
&lt;br /&gt;
В этом случае необязательно заново набирать команду (&#039;&#039;открыть дверь квартиры&#039;&#039;), можно ответить одним словом:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;открыть дверь&lt;br /&gt;
 Какую дверь вы имеете в виду: дверь подъезда или дверь квартиры?&lt;br /&gt;
 &lt;br /&gt;
 &amp;gt;квартиры&lt;br /&gt;
 Открыта.&lt;br /&gt;
&lt;br /&gt;
В некоторых командах можно использовать сразу несколько предметов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;взять серу, селитру и уголь&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;взять всё&#039;&#039; (эта команда поместит в ваш инвентарь все вещи в комнате, которые можно взять с собой)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;взять всё из коробки&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;бросить всё, кроме мины&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;положить свиток телепортации и руку жреца в хардический куб&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Взаимодействие с другими персонажами==&lt;br /&gt;
Для общения с другими персонажами существуют две команды: «&#039;&#039;спросить&#039;&#039;» и «&#039;&#039;рассказать&#039;&#039;». Например:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;спросить дьявола о сделке&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;спросить продавца о товаре&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;спросить Колю о Пете&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;спросить стражника о себе&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;рассказать милиционеру об ограблении&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;рассказать королю о заговоре&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обратите внимание на формат команды. Обязательно используется предлог &#039;&#039;о&#039;&#039; или &#039;&#039;об&#039;&#039; и за ним следует существительное (или прилагательное + существительное). То есть нельзя «&#039;&#039;спросить прохожего как пройти в библиотеку&#039;&#039;», надо писать «&#039;&#039;спросить прохожего о библиотеке&#039;&#039;».&lt;br /&gt;
&lt;br /&gt;
Также вы можете командовать другими персонажами (если они позволят, конечно) в формате «&#039;&#039;имя персонажа, команда&#039;&#039;». Например:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Шарик, возьми палку&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Петя, ударь Колю&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Шериф, стреляй в Лимонадного Джо&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;Робот, иди на север. выключи реактор. иди на юг&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Набор возможных команд и их формат абсолютно ничем не отличается от вашего. Разница, как уже упоминалось, только в том, что в начале команды вы указываете имя персонажа, который должен её выполнить.&lt;br /&gt;
&lt;br /&gt;
Еще один способ вызвать какую-то реакцию персонажа это «&#039;&#039;показать&#039;&#039;» или «&#039;&#039;дать&#039;&#039;» ему какой-то предмет. Например, «&#039;&#039;дать деньги гаишнику&#039;&#039;».&lt;br /&gt;
&lt;br /&gt;
==Системные команды==&lt;br /&gt;
&#039;&#039;сохранить&#039;&#039;, &#039;&#039;восстановить&#039;&#039; - загрузить ранее&lt;br /&gt;
сохраненную игру&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;выход&#039;&#039; - чтобы выйти из игры&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;помощь&#039;&#039; - справка&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;отчет&#039;&#039; - запись хода игры (лога) в файл&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;остотчет&#039;&#039; - остановить ведение лога&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;счет&#039;&#039; - покажет прогресс в игровой ситуации&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;отмена&#039;&#039; - отменяет последнюю команду&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;версия&#039;&#039; - сообщает версию игры&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;заново&#039;&#039; - начать игру заново&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;коротко&#039;&#039; (&#039;&#039;длинно&#039;&#039;) - режимы отображения текста описания локаций. В &amp;quot;длинном&amp;quot; режиме при каждом входе в комнату будет выполняться ее осмотр.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;ссылки&#039;&#039; - отключает или включает ссылки (если кому-то они не нравятся)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;ой&#039;&#039; - позволяет исправить написание неправильно набранного слова в последней  команде. Использовать &#039;&#039;ОЙ&#039;&#039; можно тогда, когда игра выведет следующее сообщение: &amp;amp;laquo;Я не знаю слова слово.&amp;amp;raquo;  Сразу  после  этого  сообщения  можно набрать &amp;amp;laquo;&#039;&#039;ОЙ исправленное слово&#039;&#039;&amp;amp;raquo;.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;повтор&#039;&#039; (или просто &#039;&#039;п&#039;&#039;) - повторяет последнюю команду&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Желаю приятной игры!&lt;br /&gt;
&lt;br /&gt;
==Ссылки==&lt;br /&gt;
#[http://rtads.org/beghelp.php Справка для начинающего игрока] от авторов системы&lt;br /&gt;
#[http://rtads.org/commands.php Список всех стандартных глаголов], но не забывайте, что авторы могут добавлять и собственные команды&lt;br /&gt;
&lt;br /&gt;
[[Категория:Статьи]][[Категория:Для начинающих]]&lt;/div&gt;</summary>
		<author><name>Feuerbart</name></author>
	</entry>
	<entry>
		<id>https://ifwiki.ru/index.php?title=RInform&amp;diff=6071</id>
		<title>RInform</title>
		<link rel="alternate" type="text/html" href="https://ifwiki.ru/index.php?title=RInform&amp;diff=6071"/>
		<updated>2010-05-03T18:23:12Z</updated>

		<summary type="html">&lt;p&gt;Feuerbart: /* Ссылки */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;RInform&#039;&#039;&#039; является русифицированной версией самого популярного языка разработки текстовых игр - [[Inform]]. Автор перевода - [[Гаев, Денис|Денис Гаев]].&lt;br /&gt;
&lt;br /&gt;
==Разработка==&lt;br /&gt;
Перевод был осуществлен в 2003 году и дорабатывался более двух лет, пока Денис не пропал из сети (но в начале 2008 года вернулся, так что платформа жива!). Последняя версия датирована октябрем 2004 года и берёт за основу библиотеки [[Inform]] версии 6.30.&lt;br /&gt;
&lt;br /&gt;
Система самостоятельно умеет генерировать падежные формы для имен объектов (достаточно выделить падежные окончания существительных и прилагательных, например «массивн/ая стальн/ая двер/ь», присвоив соответствующему объекту правильные род и число), и распознавать падежные формы в командах (и «открыть дверь ключом», и «открыть ключом дверь» понимаются правильно). Также распознается большое число дополнительных глагольных форм с приставками.&lt;br /&gt;
&lt;br /&gt;
К сожалению, далеко не все [[Z-интерпретатор]]ы правильно поддерживают Unicode, необходимый для русскоязычных игр. Под Windows рекомендуется использовать Windows Frotz, под *nix и Mac OS — Zoom.&lt;br /&gt;
&lt;br /&gt;
==Игры==&lt;br /&gt;
См. [[:Категория:Игры на RInform]]&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
# [http://mirror.ifarchive.org/if-archive/infocom/compilers/inform6/library/translations/RInform075.zip Библиотеки версии 0.75]&lt;br /&gt;
# [http://rinform.stormway.ru Сайт RInform]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Платформы]] [[Категория:Парсерные платформы]]&lt;/div&gt;</summary>
		<author><name>Feuerbart</name></author>
	</entry>
	<entry>
		<id>https://ifwiki.ru/index.php?title=RTADS_FAQ&amp;diff=6025</id>
		<title>RTADS FAQ</title>
		<link rel="alternate" type="text/html" href="https://ifwiki.ru/index.php?title=RTADS_FAQ&amp;diff=6025"/>
		<updated>2010-04-20T15:53:34Z</updated>

		<summary type="html">&lt;p&gt;Feuerbart: мелкие опечатки&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;&#039;&#039;Часто Задаваемые Вопросы и Ответы о системе RTADS&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Мультимедиа==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вопрос от Zargo: &amp;lt;br&amp;gt;Подскажите, пожалуйста, как можно подключить графику и звук в игру и можно ли вообще это сделать на RTADSе.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Можно, для интерпретаторов с поддержкой мультимедиа. Это проигрыватели для систем Windows, Macintosh и Linux.  &lt;br /&gt;
Выглядит и реализуется как HTML верстка с некоторыми ограничениями. Графические/музыкальные ресурсы можно зашить в файл игры или распространять отдельными файлами. Графика: jpg, png, mng. Последний позволяет отображать анимированные изображения. Также можно воспроизводить анимацию из последовательности jpg, динамическим контентом или псевдографикой. Поддержка Gif не была реализована по причине ограничений лицензии. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вопрос от [[ifn00b]]：&amp;lt;br&amp;gt;Касательно мультимедийных возможностей - какие типы аудио-файлов можно подключить к RTADS? И каким образом происходит их проигрывание - интерпретатор вызывает внешнее приложение, которое зарегистрировано в системе для файлов данного типа?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Midi, wav, MP3 и Ogg Vorbis. &lt;br /&gt;
Для проигрывания используется DirectX. &lt;br /&gt;
&lt;br /&gt;
Подробно обо всем этом можно узнать здесь (увы, на английском языке):&lt;br /&gt;
http://www.tela.bc.ca/tads-manual/tads-12.html&lt;br /&gt;
&lt;br /&gt;
P.S. По мнению большей части сообщества, избыток графики и звука уводит от настоящего IF. Будьте очень осторожны и используйте эти возможности тогда, когда это оправдано.&lt;br /&gt;
&lt;br /&gt;
==Сборка и компиляция==&lt;br /&gt;
&#039;&#039;&#039;Чем отличаются debug и release версии игры?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
В debug версию включается дополнтельная информация, которая позволяет отлаживать игру в TADS Workbench. Из-за этого: во-первых, существенно увеличивается размер файла, во-вторых, весь текст записывается в открытом виде и может быть просмотрен любым редактором, в-третьих, старые версии интерпретаторов могут слетать на играх с длинными строками, скомпилированными в отладочном режиме.&lt;br /&gt;
&lt;br /&gt;
Вывод: при выпуске игры в свет не забывайте компилировать и выкладывать release версию.&lt;br /&gt;
&lt;br /&gt;
==Отладка==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Есть ли в ТАДС способы автоматического тестирования библиотек и игр?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
В отладочных целях ещё в первых версиях ТАДС двадцатилетней давности были предусмотрены средства ввода команд из файла и вывода результата в другой файл. Таким образом, можно сверять файлы результатов с целью проверки корректности работы игры после последних изменений и её проходимость,&lt;br /&gt;
без необходимости внимательного &amp;quot;ручного&amp;quot; просмотра. &lt;br /&gt;
&lt;br /&gt;
Подробно это описано в пока непереведенной главе мануала:&lt;br /&gt;
[http://teladesign.com/tads-manual/tads-b.html Параграф &amp;quot;Testing Your Game&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
Вкратце:&lt;br /&gt;
 mygame.exe -o walkthru.in  - записывает в файл команды по мере прохождения&lt;br /&gt;
 mygame.exe -i walkthru.in -l walkthru.log  - запускает игру и вводит список команд, &lt;br /&gt;
 а выходящий текст записывает в файл.&lt;br /&gt;
Файл с выводом из предыдущей и новой версии можно сравнить с помощью специальных программ, типа [http://winmerge.org/ WinMerge].&lt;br /&gt;
&lt;br /&gt;
==Синтаксис==&lt;br /&gt;
&#039;&#039;&#039;Почему индексация массивов и строк начинается с единицы?!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Конечно же, это риторический вопрос. Но довольно часто ошибки в игре вызываются тем, что автор «на автомате» впечатал уже отложившийся на подкорке кусочек кода, который сработал бы для массивов, начинающихся с 0. Поэтому если у вас появляются ошибки выхода за пределы массива или строки какие-то обрезанные выводятся – в первую очередь проверяйте код, работающий с индексами массивов.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Никак не могу привыкнуть к этому полупаскальному-полусишному синтаксису. Можно ли как-нибудь привести его к единой форме?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Да. Существует специальная директива &amp;lt;tt&amp;gt;#pragma C+&amp;lt;/tt&amp;gt;. Она включает режим соответствия языку C для файла, в котором упомянута, поэтому вы сможете использовать привычные &amp;lt;tt&amp;gt;==&amp;lt;/tt&amp;gt; для сравнения и &amp;lt;tt&amp;gt;=&amp;lt;/tt&amp;gt; для присваивания. А директива &amp;lt;tt&amp;gt;#pragma C-&amp;lt;/tt&amp;gt; возвращает все к стандартному виду.&lt;br /&gt;
&lt;br /&gt;
Совет: если вы разрабатываете модуль, который затем может быть использован другими людьми, директивой &amp;lt;tt&amp;gt;#pragma&amp;lt;/tt&amp;gt; явно указывайте стиль, используемый в файле, чтобы авторские настройки не повлияли на работу вашего модуля.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Как создать список (list) из одного элемента?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Если вы задали переменную &amp;quot;a&amp;quot; без указания какого либо типа, т.е.&lt;br /&gt;
 local a;&lt;br /&gt;
то присвоить ей список из одного элемента  &lt;br /&gt;
 a := [b];&lt;br /&gt;
не удастся.&lt;br /&gt;
&lt;br /&gt;
Нужно либо изначально указать что это список&lt;br /&gt;
 local a=[];&lt;br /&gt;
либо поступить так:&lt;br /&gt;
 a := [] + b;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;При вызове метода foo() без аргументов возникает ошибка компиляции.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Если метод не принимает аргументов, то сотрите скобки при его вызове.&lt;br /&gt;
 bar.foo(); //ошибка&lt;br /&gt;
 bar.foo;   //вызов метода&lt;br /&gt;
&lt;br /&gt;
При объявлении метода скобки все-равно нужны!&lt;br /&gt;
&lt;br /&gt;
==Неочевидные приемы==&lt;br /&gt;
&#039;&#039;&#039;Почему не наследуются лексические свойства (sdecs, noun и пр.)?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
В стремлении упростить жизнь авторам игр, TADS не делает особых различий между классом и объектом (экземпляром класса). Однако отличия есть, хоть и небольшие. Во-первых, класс нематериален в игре — вы никак не сможете взаимодействовать с ним. Во-вторых (уже догадались?) &#039;&#039;лексические&#039;&#039; свойства (sdesc, ldesc, noun, adjective) наследуются только от классов, а от объектов нет.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
coin : item&lt;br /&gt;
    desc = &#039;золотая/1пж монета/1ж&#039;&lt;br /&gt;
    ldesc = &amp;quot;Золотая монета с изображением профиля Императора. &amp;quot;&lt;br /&gt;
    isHer = true&lt;br /&gt;
;&lt;br /&gt;
&lt;br /&gt;
coin1 : coin&lt;br /&gt;
    location = treasury&lt;br /&gt;
;&lt;br /&gt;
&lt;br /&gt;
coin2 : coin&lt;br /&gt;
    location = chest&lt;br /&gt;
;&lt;br /&gt;
&lt;br /&gt;
coin3 : coin&lt;br /&gt;
    location = purse&lt;br /&gt;
;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
В таком виде пример работать не будет, потому что лексические свойства объекта coin не наследуются потомками. Соответственно, вы просто не найдете монет в игре, потому что к ним никак нельзя будет обратиться (свойство noun-то не заполнено!). Уже догадались, как исправить? Правильно, пишем в первой строке:&lt;br /&gt;
 class coin : item&lt;br /&gt;
и все встает на свои места.&lt;br /&gt;
&lt;br /&gt;
Примечание: на момент написания заметки библиотека находилась в состоянии активной разработки и desc, к примеру, стал наследоваться нормально, просто дублируя словоформы много раз. Несмотря на это, рекомендуется ВСЕГДА использовать классы, если требуется наследовать лексические свойства.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Как динамически изменить ldesc (и другие свойства с двойными кавычками)?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Двойные кавычки (&amp;quot;) — удобная особенность языка TADS, однако принцип их работы может немного смутить новичков. Двойные кавычки служат для вывода текста на экран, то есть, как только в ходе выполнения программы интерпретатор встречает строку в двойных кавычках, он тут же отображает её. Если строка в двойных кавычках присвоена в качестве свойства какого-либо объекта, то она будет отображаться при каждом обращении к этому свойству. Смысл этого в том, чтобы облегчить автору работу с текстом — базовой единицей всей [[ИЛ]].&lt;br /&gt;
При этом следует понимать, что строка в двойных кавычках — это не переменная как таковая, а, фактически, завуалированный метод для вывода переданного текста на экран. Он ничего не возвращает, поэтому строками в двойных кавычках нельзя манипулировать так же, как обычными переменными. Например, следующий, на первый взгляд правильный код не будет работать:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vase : item&lt;br /&gt;
    gdesc = &#039;ваза/1ж&#039;&lt;br /&gt;
    ldesc = &amp;quot;Хрупкая фарфоровая ваза. &amp;quot;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
    doDrop(actor) =&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;Ваза была так тонка, что разбилась при падении. &amp;quot;;&lt;br /&gt;
        self.ldesc := &amp;quot;Теперь ваза представляет собой лишь груду черепков. &amp;quot;;&lt;br /&gt;
        pass doDrop;&lt;br /&gt;
    }&lt;br /&gt;
;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так как метод «двойные кавычки» ничего на самом деле не возвращает, &amp;lt;tt&amp;gt;ldesc&amp;lt;/tt&amp;gt; в данном примере перепишется пустым значением и описание исчезнет вообще. Для решения этой проблемы следует переписать определение &amp;lt;tt&amp;gt;ldesc&amp;lt;/tt&amp;gt; вот так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vase : item&lt;br /&gt;
    gdesc = &#039;ваза/1ж&#039;&lt;br /&gt;
    ldesc = &lt;br /&gt;
    {&lt;br /&gt;
        if (not self.broken)&lt;br /&gt;
            &amp;quot;Хрупкая фарфоровая ваза. &amp;quot;;&lt;br /&gt;
        else&lt;br /&gt;
            &amp;quot;Теперь ваза представляет собой лишь груду черепков. &amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    broken = nil&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
    doDrop(actor) =&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;Ваза была так тонка, что разбилась при падении. &amp;quot;;&lt;br /&gt;
        self.broken := true;&lt;br /&gt;
        pass doDrop;&lt;br /&gt;
    }&lt;br /&gt;
;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ещё один способ - вставить в строку с двойными кавычками вызов изменяемого свойства. Например:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vase : item&lt;br /&gt;
    gdesc = &#039;ваза/1ж&#039;&lt;br /&gt;
    ldesc = &lt;br /&gt;
    {&lt;br /&gt;
        if (not self.broken)&lt;br /&gt;
            &amp;quot;Хрупкая фарфоровая ваза. &amp;quot;;&lt;br /&gt;
        else&lt;br /&gt;
            &amp;quot;Из-за &amp;lt;&amp;lt;negodyai&amp;gt;&amp;gt; ваза превратилась в груду черепков. &amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    broken = nil&lt;br /&gt;
    negodyai=&#039;&#039;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
    doDrop(actor) =&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;Ваза была так тонка, что разбилась при падении. &amp;quot;;&lt;br /&gt;
        self.broken := true;&lt;br /&gt;
        negoyai:=dToS(actor,rdesc); &lt;br /&gt;
        // функция dToS перехватывает вывод на экран &amp;quot;двукавычного&amp;quot; &lt;br /&gt;
        // свойства rdesc и присваивает переменной negoyai&lt;br /&gt;
        pass doDrop;&lt;br /&gt;
    }&lt;br /&gt;
;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь мы превратили свойство rdesc действующего актера из строки с двойными кавычками в строку с одинарными и записали в объекте. Это свойство мы можем менять по ходу всей игры, и это будет менять описание. В данном случае - виновника происшествия.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Как реализовать части тела или объекта?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Как пример сложной фразы часто приводят примеры из серии: &lt;br /&gt;
 врезать/ударить/пнуть ногой/хвостом/ёжиком (по) лбу/ноге/ягодицам/сенсорам монстра/робота/тети Клавы&lt;br /&gt;
На самом деле, это реализуется довольно просто:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class bodypart: fixeditem&lt;br /&gt;
    dobjGen(actor, verb, indirectobj, preposition) =&lt;br /&gt;
    {&lt;br /&gt;
        self.location.dobjGen(actor, verb, indirectobj, preposition);&lt;br /&gt;
    }&lt;br /&gt;
    iobjGen(actor, verb, directobj, preposition) = &lt;br /&gt;
    { &lt;br /&gt;
        self.location.iobjGen(actor, verb, directobj, preposition); &lt;br /&gt;
    }&lt;br /&gt;
;&lt;br /&gt;
&lt;br /&gt;
zhvala : bodypart&lt;br /&gt;
    location = megaant&lt;br /&gt;
    desc = &#039;жвала/2&#039;&lt;br /&gt;
    adjective = &#039;муравья&#039; &#039;муравья#r&#039; &#039;муравью&#039; &#039;муравью#r&#039;&lt;br /&gt;
    ldesc = &amp;quot;Большие страшные жвала. &amp;quot;&lt;br /&gt;
;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Теперь &amp;quot;ударить муравья по жвалам палкой&amp;quot; будет равнозначно &amp;quot;ударить муравья палкой&amp;quot;.&lt;br /&gt;
Если вы хотите сделать отличную от такой реакцию, то напишите исключение для конкретных значений параметра verb.&lt;br /&gt;
&lt;br /&gt;
==Усложнение принимаемых фраз==&lt;br /&gt;
&#039;&#039;&#039;Как заставить понимать команду с тремя существительными, ввести наречия, сделать несколько проходов в одной стороне света и т.п.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Большинство таких нестандартных подходов не стоят затрачиваемых усилий для их реализации. Постарайтесь упростить те случаи для которых вы хотите их использовать.&lt;br /&gt;
&lt;br /&gt;
Например, по порядку:&lt;br /&gt;
# привязать лошадь веревкой к забору = привязать веревку к забору и привязать веревку к лошади&lt;br /&gt;
# тихо открыть дверь = смазать петли салом и открыть дверь&lt;br /&gt;
# на юге вы видите три пещеры. Кровавый след тянется в ту, что западнее, а из восточной выползает вязкий белесый туман&lt;br /&gt;
&lt;br /&gt;
[[Категория:Для разработчиков игр]]&lt;/div&gt;</summary>
		<author><name>Feuerbart</name></author>
	</entry>
	<entry>
		<id>https://ifwiki.ru/index.php?title=RTADS_FAQ&amp;diff=6024</id>
		<title>RTADS FAQ</title>
		<link rel="alternate" type="text/html" href="https://ifwiki.ru/index.php?title=RTADS_FAQ&amp;diff=6024"/>
		<updated>2010-04-20T15:49:29Z</updated>

		<summary type="html">&lt;p&gt;Feuerbart: мелкие опечатки&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;&#039;&#039;Часто Задаваемые Вопросы и Ответы о системе RTADS&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Мультимедиа==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вопрос от Zargo: &amp;lt;br&amp;gt;Подскажите, пожалуйста, как можно подключить графику и звук в игру и можно ли вообще это сделать на RTADSе.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Можно, для интерпретаторов с поддержкой мультимедиа. Это проигрыватели для систем Windows, Macintosh и Linux.  &lt;br /&gt;
Выглядит и реализуется как HTML верстка с некоторыми ограничениями. Графические/музыкальные ресурсы можно зашить в файл игры или распространять отдельными файлами. Графика: jpg, png, mng. Последний позволяет отображать анимированные изображения. Также можно воспроизводить анимацию из последовательности jpg, динамическим контентом или псевдографикой. Поддержка Gif не была реализована по причине ограничений лицензии. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вопрос от [[ifn00b]]：&amp;lt;br&amp;gt;Касательно мультимедийных возможностей - какие типы аудио-файлов можно подключить к RTADS? И каким образом происходит их проигрывание - интерпретатор вызывает внешнее приложение, которое зарегистрировано в системе для файлов данного типа?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Midi, wav, MP3 и Ogg Vorbis. &lt;br /&gt;
Для проигрывания используется DirectX. &lt;br /&gt;
&lt;br /&gt;
Подробно обо всем этом можно узнать здесь (увы, на английском языке):&lt;br /&gt;
http://www.tela.bc.ca/tads-manual/tads-12.html&lt;br /&gt;
&lt;br /&gt;
P.S. По мнению большей части сообщества, избыток графики и звука уводит от настоящего IF. Будьте очень осторожны и используйте эти возможности тогда, когда это оправдано.&lt;br /&gt;
&lt;br /&gt;
==Сборка и компиляция==&lt;br /&gt;
&#039;&#039;&#039;Чем отличаются debug и release версии игры?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
В debug версию включается дополнтельная информация, которая позволяет отлаживать игру в TADS Workbench. Из-за этого: во-первых, существенно увеличивается размер файла, во-вторых, весь текст записывается в открытом виде и может быть просмотрен любым редактором, в-третьих, старые версии интерпретаторов могут слетать на играх с длинными строками, скомпилированными в отладочном режиме.&lt;br /&gt;
&lt;br /&gt;
Вывод: при выпуске игры в свет не забывайте компилировать и выкладывать release версию.&lt;br /&gt;
&lt;br /&gt;
==Отладка==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Есть ли в ТАДС способы автоматического тестирования библиотек и игр?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
В отладочных целях ещё в первых версиях ТАДС двадцатилетней давности были предусмотрены средства ввода команд из файла и вывода результата в другой файл. Таким образом, можно сверять файлы результатов с целью проверки корректности работы игры после последних изменений и её проходимость,&lt;br /&gt;
без необходимости внимательного &amp;quot;ручного&amp;quot; просмотра. &lt;br /&gt;
&lt;br /&gt;
Подробно это описано в пока непереведенной главе мануала:&lt;br /&gt;
[http://teladesign.com/tads-manual/tads-b.html Параграф &amp;quot;Testing Your Game&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
Вкратце:&lt;br /&gt;
 mygame.exe -o walkthru.in  - записывает в файл команды по мере прохождения&lt;br /&gt;
 mygame.exe -i walkthru.in -l walkthru.log  - запускает игру и вводит список команд, &lt;br /&gt;
 а выходящий текст записывает в файл.&lt;br /&gt;
Файл с выводом из предыдущей и новой версии можно сравнить с помощью специальных программ, типа [http://winmerge.org/ WinMerge].&lt;br /&gt;
&lt;br /&gt;
==Синтаксис==&lt;br /&gt;
&#039;&#039;&#039;Почему индексация массивов и строк начинается с единицы?!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Конечно же, это риторический вопрос. Но довольно часто ошибки в игре вызываются тем, что автор «на автомате» впечатал уже отложившийся на подкорке кусочек кода, который сработал бы для массивов, начинающихся с 0. Поэтому если у вас появляются ошибки выхода за пределы массива или строки какие-то обрезанные выводятся – в первую очередь проверяйте код, работающий с индексами массивов.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Никак не могу привыкнуть к этому полупаскальному-полусишному синтаксису. Можно ли как-нибудь привести его к единой форме?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Да. Существует специальная директива &amp;lt;tt&amp;gt;#pragma C+&amp;lt;/tt&amp;gt;. Она включает режим соответствия языку C для файла, в котором упомянута, поэтому вы сможете использовать привычные &amp;lt;tt&amp;gt;==&amp;lt;/tt&amp;gt; для сравнения и &amp;lt;tt&amp;gt;=&amp;lt;/tt&amp;gt; для присваивания. А директива &amp;lt;tt&amp;gt;#pragma C-&amp;lt;/tt&amp;gt; возвращает все к стандартному виду.&lt;br /&gt;
&lt;br /&gt;
Совет: если вы разрабатываете модуль, который затем может быть использован другими людьми, директивой &amp;lt;tt&amp;gt;#pragma&amp;lt;/tt&amp;gt; явно указывайте стиль, используемый в файле, чтобы авторские настройки не повлияли на работу вашего модуля.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Как создать список (list) из одного элемента?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Если вы задали переменную &amp;quot;a&amp;quot; без указания какого либо типа, т.е.&lt;br /&gt;
 local a;&lt;br /&gt;
то присвоить ей список из одного элемента  &lt;br /&gt;
 a := [b];&lt;br /&gt;
не удастся.&lt;br /&gt;
&lt;br /&gt;
Нужно либо изначально указать что это список&lt;br /&gt;
 local a=[];&lt;br /&gt;
либо поступить так:&lt;br /&gt;
 a := [] + b;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;При вызове метода foo() без аргументов возникает ошибка компиляции.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Если метод не принимает аргументов, то сотрите скобки при его вызове.&lt;br /&gt;
 bar.foo(); //ошибка&lt;br /&gt;
 bar.foo;   //вызов метода&lt;br /&gt;
&lt;br /&gt;
При объявлении метода скобки все-равно нужны!&lt;br /&gt;
&lt;br /&gt;
==Неочевидные приемы==&lt;br /&gt;
&#039;&#039;&#039;Почему не наследуются лексические свойства (sdecs, noun и пр.)?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
В стремлении упростить жизнь авторам игр, TADS не делает особых различий между классом и объектом (экземпляром класса). Однако отличия есть, хоть и небольшие. Во-первых, класс нематериален в игре — вы никак не сможете взаимодействовать с ним. Во-вторых (уже догадались?) &#039;&#039;лексические&#039;&#039; свойства (sdesc, ldesc, noun, adjective) наследуются только от классов, а от объектов нет.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
coin : item&lt;br /&gt;
    desc = &#039;золотая/1пж монета/1ж&#039;&lt;br /&gt;
    ldesc = &amp;quot;Золотая монета с изображением профиля Императора. &amp;quot;&lt;br /&gt;
    isHer = true&lt;br /&gt;
;&lt;br /&gt;
&lt;br /&gt;
coin1 : coin&lt;br /&gt;
    location = treasury&lt;br /&gt;
;&lt;br /&gt;
&lt;br /&gt;
coin2 : coin&lt;br /&gt;
    location = chest&lt;br /&gt;
;&lt;br /&gt;
&lt;br /&gt;
coin3 : coin&lt;br /&gt;
    location = purse&lt;br /&gt;
;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
В таком виде пример работать не будет, потому что лексические свойства объекта coin не наследуются потомками. Соответственно, вы просто не найдете монет в игре, потому что к ним никак нельзя будет обратиться (свойство noun-то не заполнено!). Уже догадались, как исправить? Правильно, пишем в первой строке:&lt;br /&gt;
 class coin : item&lt;br /&gt;
и все встает на свои места.&lt;br /&gt;
&lt;br /&gt;
Примечание: на момент написания заметки библиотека находилась в состоянии активной разработки и desc, к примеру, стал наследоваться нормально, просто дублируя словоформы много раз. Несмотря на это, рекомендуется ВСЕГДА использовать классы, если требуется наследовать лексические свойства.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Как динамически изменить ldesc (и другие свойства с двойными кавычками)?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Двойные кавычки (&amp;quot;) — удобная особенность языка TADS, однако принцип их работы может немного смутить новичков. Двойные кавычки служат для вывода текста на экран, то есть, как только в ходе выполнения программы интерпретатор встречает строку в двойных кавычках, он тут же отображает её. Если строка в двойных кавычках присвоена в качестве свойства какого-либо объекта, то она будет отображаться при каждом обращении к этому свойству. Смысл этого в том, чтобы облегчить автору работу с текстом — базовой единицей всей [[ИЛ]].&lt;br /&gt;
При этом следует понимать, что строка в двойных кавычках — это не переменная как таковая, а, фактически, завуалированный метод для вывода переданного текста на экран. Он ничего не возвращает, поэтому строками в двойных кавычках нельзя манипулировать так же, как обычными переменными. Например, следующий, на первый взгляд правильный код не будет работать:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vase : item&lt;br /&gt;
    gdesc = &#039;ваза/1ж&#039;&lt;br /&gt;
    ldesc = &amp;quot;Хрупкая фарфоровая ваза. &amp;quot;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
    doDrop(actor) =&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;Ваза была так тонка, что разбилась при падении. &amp;quot;;&lt;br /&gt;
        self.ldesc := &amp;quot;Теперь ваза представляет собой лишь груду черепков. &amp;quot;;&lt;br /&gt;
        pass doDrop;&lt;br /&gt;
    }&lt;br /&gt;
;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так как метод «двойные кавычки» ничего на самом деле не возвращает, &amp;lt;tt&amp;gt;ldesc&amp;lt;/tt&amp;gt; в данном примере перепишется пустым значением и описание исчезнет вообще. Для решения этой проблемы следует переписать определение &amp;lt;tt&amp;gt;ldesc&amp;lt;/tt&amp;gt; вот так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vase : item&lt;br /&gt;
    gdesc = &#039;ваза/1ж&#039;&lt;br /&gt;
    ldesc = &lt;br /&gt;
    {&lt;br /&gt;
        if (not self.broken)&lt;br /&gt;
            &amp;quot;Хрупкая фарфоровая ваза. &amp;quot;;&lt;br /&gt;
        else&lt;br /&gt;
            &amp;quot;Теперь ваза представляет собой лишь груду черепков. &amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    broken = nil&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
    doDrop(actor) =&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;Ваза была так тонка, что разбилась при падении. &amp;quot;;&lt;br /&gt;
        self.broken := true;&lt;br /&gt;
        pass doDrop;&lt;br /&gt;
    }&lt;br /&gt;
;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ещё один способ - вставить в строку с двойными кавычками вызов изменяемого свойства. Например:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vase : item&lt;br /&gt;
    gdesc = &#039;ваза/1ж&#039;&lt;br /&gt;
    ldesc = &lt;br /&gt;
    {&lt;br /&gt;
        if (not self.broken)&lt;br /&gt;
            &amp;quot;Хрупкая фарфоровая ваза. &amp;quot;;&lt;br /&gt;
        else&lt;br /&gt;
            &amp;quot;Из-за &amp;lt;&amp;lt;negodyai&amp;gt;&amp;gt; ваза превратилась в груду черепков. &amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    broken = nil&lt;br /&gt;
    negodyai=&#039;&#039;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
    doDrop(actor) =&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;Ваза была так тонка, что разбилась при падении. &amp;quot;;&lt;br /&gt;
        self.broken := true;&lt;br /&gt;
        negoyai:=dToS(actor,rdesc); &lt;br /&gt;
        // функция dToS перехватывает вывод на экран &amp;quot;двукавычного&amp;quot; &lt;br /&gt;
        // свойства rdesc и присваивает переменной negoyai&lt;br /&gt;
        pass doDrop;&lt;br /&gt;
    }&lt;br /&gt;
;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь мы превратили свойство rdesc действующего актера из строки с двойными кавычками в строку с одинарными и записали в объекте. Это свойство мы можем менять по ходу всей игры, и это будет менять описание. В данном случае - виновника происшествия.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Как реализовать части тела или объекта?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Как пример сложной фразы часто приводят примеры из серии: &lt;br /&gt;
 врезать/ударить/пнуть ногой/хвостом/ёжиком (по) лбу/ноге/ягодицам/сенсорам монстра/робота/тети Клавы&lt;br /&gt;
На самом деле, это реализуется довольно просто:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class bodypart: fixeditem&lt;br /&gt;
    dobjGen(actor, verb, indirectobj, preposition) =&lt;br /&gt;
    {&lt;br /&gt;
        self.location.dobjGen(actor, verb, indirectobj, preposition);&lt;br /&gt;
    }&lt;br /&gt;
    iobjGen(actor, verb, directobj, preposition) = &lt;br /&gt;
    { &lt;br /&gt;
        self.location.iobjGen(actor, verb, directobj, preposition); &lt;br /&gt;
    }&lt;br /&gt;
;&lt;br /&gt;
&lt;br /&gt;
zhvala : bodypart&lt;br /&gt;
    location = megaant&lt;br /&gt;
    desc = &#039;жвала/2&#039;&lt;br /&gt;
    adjective = &#039;муравья&#039; &#039;муравья#r&#039; &#039;муравью&#039; &#039;муравью#r&#039;&lt;br /&gt;
    ldesc = &amp;quot;Большие страшные жвала. &amp;quot;&lt;br /&gt;
;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Теперь &amp;quot;ударить муравья по жвалам палкой&amp;quot; будет равнозначно &amp;quot;ударить муравья палкой&amp;quot;.&lt;br /&gt;
Если вы хотите сделать отличную от такой реакцию, то напишите исключние для конкретных значений параметра verb.&lt;br /&gt;
&lt;br /&gt;
==Усложнение принимаемых фраз==&lt;br /&gt;
&#039;&#039;&#039;Как заставить понимать команду с тремя существительными, ввести наречия, сделать несколько проходов в одной стороне света и т.п.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Большинство таких нестандартных подходов не стоят затрачиваемых усилий для их реализации. Постарайтесь упростить те случаи для которых вы хотите их использовать.&lt;br /&gt;
&lt;br /&gt;
Например, по порядку:&lt;br /&gt;
# привязать лошадь веревкой к забору = привязать веревку к забору и привязать веревку к лошади&lt;br /&gt;
# тихо открыть дверь = смазать петли салом и открыть дверь&lt;br /&gt;
# на юге вы видите три пещеры. Кровавый след тянется в ту, что западнее, а из восточной выползает вязкий белесый туман&lt;br /&gt;
&lt;br /&gt;
[[Категория:Для разработчиков игр]]&lt;/div&gt;</summary>
		<author><name>Feuerbart</name></author>
	</entry>
	<entry>
		<id>https://ifwiki.ru/index.php?title=RTADS_FAQ&amp;diff=6023</id>
		<title>RTADS FAQ</title>
		<link rel="alternate" type="text/html" href="https://ifwiki.ru/index.php?title=RTADS_FAQ&amp;diff=6023"/>
		<updated>2010-04-20T15:47:40Z</updated>

		<summary type="html">&lt;p&gt;Feuerbart: /* Мультимедиа */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;&#039;&#039;Часто Задаваемые Вопросы и Ответы о системе RTADS&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Мультимедиа==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вопрос от Zargo: &amp;lt;br&amp;gt;Подскажите, пожалуйста, как можно подключить графику и звук в игру и можно ли вообще это сделать на RTADSе.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Можно, для интерпретаторов с поддержкой мультимедиа. Это проигрыватели для систем Windows, Macintosh и Linux.  &lt;br /&gt;
Выглядит и реализуется как HTML верстка с некоторыми ограничениями. Графические/музыкальные ресурсы можно зашить в файл игры или распространять отдельными файлами. Графика: jpg, png, mng. Последний позволяет отображать анимированные изображения. Также можно воспроизводить анимацию из последовательности jpg, динамическим контентом или псевдографикой. Поддержка Gif не была реализована по причине ограничений лицензии. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вопрос от [[ifn00b]]：&amp;lt;br&amp;gt;Касательно мультимедийных возможностей - какие типы аудио-файлов можно подключить к RTADS? И каким образом происходит их проигрывание - интерпретатор вызывает внешнее приложение, которое зарегистрировано в системе для файлов данного типа?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Midi, wav, MP3 и Ogg Vorbis. &lt;br /&gt;
Для проигрывания используется DirectX. &lt;br /&gt;
&lt;br /&gt;
Подробно обо всем этом можно узнать здесь (увы, на английском языке):&lt;br /&gt;
http://www.tela.bc.ca/tads-manual/tads-12.html&lt;br /&gt;
&lt;br /&gt;
P.S. По мнению большей части сообщества, избыток графики и звука уводит от настоящего IF. Будьте очень осторожны и используйте эти возможности тогда, когда это оправдано.&lt;br /&gt;
&lt;br /&gt;
==Сборка и компиляция==&lt;br /&gt;
&#039;&#039;&#039;Чем отличаются debug и release версии игры?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
В debug версию включается дополнтельная информация, которая позволяет отлаживать игру в TADS Workbench. Из-за этого: во-первых, существенно увеличивается размер файла, во-вторых, весь текст записывается в открытом виде и может быть просмотрен любым редактором, в-третьих, старые версии интерпретаторов могут слетать на играх с длинными строками, скомпилированными в отладочном режиме.&lt;br /&gt;
&lt;br /&gt;
Вывод: при выпуске игры в свет не забывайте компилировать и выкладывать release версию.&lt;br /&gt;
&lt;br /&gt;
==Отладка==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Есть ли в ТАДС способы автоматического тестирования библиотек и игр?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
В отладочных целях ещё в первых версиях ТАДС двадцетилетней давности были предусмотрены средства ввода команд из файла и вывода результата в другой файл. Таким образом можно сверять файлы результатов с целью проверки корректности работы игры после последних изменений и её проходимость,&lt;br /&gt;
без необходимости внимательного &amp;quot;ручного&amp;quot; просмотра. &lt;br /&gt;
&lt;br /&gt;
Подробно это описано в пока непереведенной главе мануала:&lt;br /&gt;
[http://teladesign.com/tads-manual/tads-b.html Параграф &amp;quot;Testing Your Game&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
Вкратце:&lt;br /&gt;
 mygame.exe -o walkthru.in  - записывает в файл команды по мере прохождения&lt;br /&gt;
 mygame.exe -i walkthru.in -l walkthru.log  - запускает игру и вводит список команд, &lt;br /&gt;
 а выходящий текст записывает в файл.&lt;br /&gt;
Файл с выводом из предыдущей и новой версии можно сравнить с помощью специальных программ, типа [http://winmerge.org/ WinMerge].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Синтаксис==&lt;br /&gt;
&#039;&#039;&#039;Почему индексация массивов и строк начинается с единицы?!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Конечно же, это риторический вопрос. Но довольно часто ошибки в игре вызываются тем, что автор «на автомате» впечатал уже отложившийся на подкорке кусочек кода, который сработал бы для массивов, начинающихся с 0. Поэтому если у вас появляются ошибки выхода за пределы массива или строки какие-то обрезанные выводятся – в первую очередь проверяйте код, работающий с индексами массивов.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Никак не могу привыкнуть к этому полупаскальному-полусишному синтаксису. Можно ли как-нибудь привести его к единой форме?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Да. Существует специальная директива &amp;lt;tt&amp;gt;#pragma C+&amp;lt;/tt&amp;gt;. Она включает режим соответствия языку C для файла, в котором упомянута, поэтому вы сможете использовать привычные &amp;lt;tt&amp;gt;==&amp;lt;/tt&amp;gt; для сравнения и &amp;lt;tt&amp;gt;=&amp;lt;/tt&amp;gt; для присваивания. А директива &amp;lt;tt&amp;gt;#pragma C-&amp;lt;/tt&amp;gt; возвращает все к стандартному виду.&lt;br /&gt;
&lt;br /&gt;
Совет: если вы разрабатываете модуль, который затем может быть использован другими людьми, директивой &amp;lt;tt&amp;gt;#pragma&amp;lt;/tt&amp;gt; явно указывайте стиль, используемый в файле, чтобы авторские настройки не повлияли на работу вашего модуля.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Как создать список (list) из одного элемента?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Если вы задали переменную &amp;quot;a&amp;quot; без указания какого либо типа, т.е.&lt;br /&gt;
 local a;&lt;br /&gt;
то присвоить ей список из одного элемента  &lt;br /&gt;
 a := [b];&lt;br /&gt;
не удастся.&lt;br /&gt;
&lt;br /&gt;
Нужно либо изначально указать что это список&lt;br /&gt;
 local a=[];&lt;br /&gt;
либо поступить так:&lt;br /&gt;
 a := [] + b;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;При вызове метода foo() без аргументов возникает ошибка компиляции.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Если метод не принимает аргументов, то сотрите скобки при его вызове.&lt;br /&gt;
 bar.foo(); //ошибка&lt;br /&gt;
 bar.foo;   //вызов метода&lt;br /&gt;
&lt;br /&gt;
При объявлении метода скобки все-равно нужны!&lt;br /&gt;
&lt;br /&gt;
==Неочевидные приемы==&lt;br /&gt;
&#039;&#039;&#039;Почему не наследуются лексические свойства (sdecs, noun и пр.)?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
В стремлении упростить жизнь авторам игр, TADS не делает особых различий между классом и объектом (экземпляром класса). Однако отличия есть, хоть и небольшие. Во-первых, класс нематериален в игре — вы никак не сможете взаимодействовать с ним. Во-вторых (уже догадались?) &#039;&#039;лексические&#039;&#039; свойства (sdesc, ldesc, noun, adjective) наследуются только от классов, а от объектов нет.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
coin : item&lt;br /&gt;
    desc = &#039;золотая/1пж монета/1ж&#039;&lt;br /&gt;
    ldesc = &amp;quot;Золотая монета с изображением профиля Императора. &amp;quot;&lt;br /&gt;
    isHer = true&lt;br /&gt;
;&lt;br /&gt;
&lt;br /&gt;
coin1 : coin&lt;br /&gt;
    location = treasury&lt;br /&gt;
;&lt;br /&gt;
&lt;br /&gt;
coin2 : coin&lt;br /&gt;
    location = chest&lt;br /&gt;
;&lt;br /&gt;
&lt;br /&gt;
coin3 : coin&lt;br /&gt;
    location = purse&lt;br /&gt;
;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
В таком виде пример работать не будет, потому что лексические свойства объекта coin не наследуются потомками. Соответственно, вы просто не найдете монет в игре, потому что к ним никак нельзя будет обратиться (свойство noun-то не заполнено!). Уже догадались, как исправить? Правильно, пишем в первой строке:&lt;br /&gt;
 class coin : item&lt;br /&gt;
и все встает на свои места.&lt;br /&gt;
&lt;br /&gt;
Примечание: на момент написания заметки библиотека находилась в состоянии активной разработки и desc, к примеру, стал наследоваться нормально, просто дублируя словоформы много раз. Несмотря на это, рекомендуется ВСЕГДА использовать классы, если требуется наследовать лексические свойства.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Как динамически изменить ldesc (и другие свойства с двойными кавычками)?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Двойные кавычки (&amp;quot;) — удобная особенность языка TADS, однако принцип их работы может немного смутить новичков. Двойные кавычки служат для вывода текста на экран, то есть, как только в ходе выполнения программы интерпретатор встречает строку в двойных кавычках, он тут же отображает её. Если строка в двойных кавычках присвоена в качестве свойства какого-либо объекта, то она будет отображаться при каждом обращении к этому свойству. Смысл этого в том, чтобы облегчить автору работу с текстом — базовой единицей всей [[ИЛ]].&lt;br /&gt;
При этом следует понимать, что строка в двойных кавычках — это не переменная как таковая, а, фактически, завуалированный метод для вывода переданного текста на экран. Он ничего не возвращает, поэтому строками в двойных кавычках нельзя манипулировать так же, как обычными переменными. Например, следующий, на первый взгляд правильный код не будет работать:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vase : item&lt;br /&gt;
    gdesc = &#039;ваза/1ж&#039;&lt;br /&gt;
    ldesc = &amp;quot;Хрупкая фарфоровая ваза. &amp;quot;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
    doDrop(actor) =&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;Ваза была так тонка, что разбилась при падении. &amp;quot;;&lt;br /&gt;
        self.ldesc := &amp;quot;Теперь ваза представляет собой лишь груду черепков. &amp;quot;;&lt;br /&gt;
        pass doDrop;&lt;br /&gt;
    }&lt;br /&gt;
;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так как метод «двойные кавычки» ничего на самом деле не возвращает, &amp;lt;tt&amp;gt;ldesc&amp;lt;/tt&amp;gt; в данном примере перепишется пустым значением и описание исчезнет вообще. Для решения этой проблемы следует переписать определение &amp;lt;tt&amp;gt;ldesc&amp;lt;/tt&amp;gt; вот так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vase : item&lt;br /&gt;
    gdesc = &#039;ваза/1ж&#039;&lt;br /&gt;
    ldesc = &lt;br /&gt;
    {&lt;br /&gt;
        if (not self.broken)&lt;br /&gt;
            &amp;quot;Хрупкая фарфоровая ваза. &amp;quot;;&lt;br /&gt;
        else&lt;br /&gt;
            &amp;quot;Теперь ваза представляет собой лишь груду черепков. &amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    broken = nil&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
    doDrop(actor) =&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;Ваза была так тонка, что разбилась при падении. &amp;quot;;&lt;br /&gt;
        self.broken := true;&lt;br /&gt;
        pass doDrop;&lt;br /&gt;
    }&lt;br /&gt;
;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ещё один способ - вставить в строку с двойными кавычками вызов изменяемого свойства. Например:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vase : item&lt;br /&gt;
    gdesc = &#039;ваза/1ж&#039;&lt;br /&gt;
    ldesc = &lt;br /&gt;
    {&lt;br /&gt;
        if (not self.broken)&lt;br /&gt;
            &amp;quot;Хрупкая фарфоровая ваза. &amp;quot;;&lt;br /&gt;
        else&lt;br /&gt;
            &amp;quot;Из-за &amp;lt;&amp;lt;negodyai&amp;gt;&amp;gt; ваза превратилась в груду черепков. &amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    broken = nil&lt;br /&gt;
    negodyai=&#039;&#039;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
    doDrop(actor) =&lt;br /&gt;
    {&lt;br /&gt;
        &amp;quot;Ваза была так тонка, что разбилась при падении. &amp;quot;;&lt;br /&gt;
        self.broken := true;&lt;br /&gt;
        negoyai:=dToS(actor,rdesc); &lt;br /&gt;
        // функция dToS перехватывает вывод на экран &amp;quot;двукавычного&amp;quot; &lt;br /&gt;
        // свойства rdesc и присваивает переменной negoyai&lt;br /&gt;
        pass doDrop;&lt;br /&gt;
    }&lt;br /&gt;
;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь мы превратили свойство rdesc действующего актера из строки с двойными кавычками в строку с одинарными и записали в объекте. Это свойство мы можем менять по ходу всей игры, и это будет менять описание. В данном случае - виновника происшествия.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Как реализовать части тела или объекта?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Как пример сложной фразы часто приводят примеры из серии: &lt;br /&gt;
 врезать/ударить/пнуть ногой/хвостом/ёжиком (по) лбу/ноге/ягодицам/сенсорам монстра/робота/тети Клавы&lt;br /&gt;
На самом деле, это реализуется довольно просто:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class bodypart: fixeditem&lt;br /&gt;
    dobjGen(actor, verb, indirectobj, preposition) =&lt;br /&gt;
    {&lt;br /&gt;
        self.location.dobjGen(actor, verb, indirectobj, preposition);&lt;br /&gt;
    }&lt;br /&gt;
    iobjGen(actor, verb, directobj, preposition) = &lt;br /&gt;
    { &lt;br /&gt;
        self.location.iobjGen(actor, verb, directobj, preposition); &lt;br /&gt;
    }&lt;br /&gt;
;&lt;br /&gt;
&lt;br /&gt;
zhvala : bodypart&lt;br /&gt;
    location = megaant&lt;br /&gt;
    desc = &#039;жвала/2&#039;&lt;br /&gt;
    adjective = &#039;муравья&#039; &#039;муравья#r&#039; &#039;муравью&#039; &#039;муравью#r&#039;&lt;br /&gt;
    ldesc = &amp;quot;Большие страшные жвала. &amp;quot;&lt;br /&gt;
;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Теперь &amp;quot;ударить муравья по жвалам палкой&amp;quot; будет равнозначно &amp;quot;ударить муравья палкой&amp;quot;.&lt;br /&gt;
Если вы хотите сделать отличную от такой реакцию, то напишите исключние для конкретных значений параметра verb.&lt;br /&gt;
&lt;br /&gt;
==Усложнение принимаемых фраз==&lt;br /&gt;
&#039;&#039;&#039;Как заставить понимать команду с тремя существительными, ввести наречия, сделать несколько проходов в одной стороне света и т.п.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Большинство таких нестандартных подходов не стоят затрачиваемых усилий для их реализации. Постарайтесь упростить те случаи для которых вы хотите их использовать.&lt;br /&gt;
&lt;br /&gt;
Например, по порядку:&lt;br /&gt;
# привязать лошадь веревкой к забору = привязать веревку к забору и привязать веревку к лошади&lt;br /&gt;
# тихо открыть дверь = смазать петли салом и открыть дверь&lt;br /&gt;
# на юге вы видите три пещеры. Кровавый след тянется в ту, что западнее, а из восточной выползает вязкий белесый туман&lt;br /&gt;
&lt;br /&gt;
[[Категория:Для разработчиков игр]]&lt;/div&gt;</summary>
		<author><name>Feuerbart</name></author>
	</entry>
</feed>