ZX Format #06
29 июля 1997
  Софт  

Игрушки - описание редактора Адевентюр - PAW (часть 5).

<b>Игрушки</b> - описание редактора Адевентюр - PAW (часть 5).
              PAW
  Техническое руководство
         (продолжение)

music by DNK
(С) 1986 Gilsoft International Ltd.
(C) 1996 Alex ASP, перевод
_______________________________

 XII. Сборник очерков. 

В  этой части руководства идут рассуж-
дения на 9 различных тем, которые связаны
с  целом спектром свойств PAW, поэтому их
трудно было поместить в какой-либо из вы-
шепредстваленных отделов.

 1) Размышления о 128K. 

Когда  загружен PAW, используется лишь
страница  0,  на  которой  свободно 25500
байт.  Страницы 1 - 7 не используются, но
каждая может содержать по 16К.

Таблицы  Сообщений,  Описания локаций,
Соединений, Графики и Цветов по умолчанию
могут располагаться на страницах 1 - 7, а
все остальные - только на странице 0. Все
строки таблиц, относящихся к локации, бу-
дут  храниться на тех же страницах, что и
она сама.

Когда вводится описание локации, нуль-
строки записываются в таблицы Соединений,
Графики  и  Цветов  по умолчанию, которые
будут  относиться  к этой строке. Опция I
меню  Location  Text  (Описание  локации)
вставляет строку в высшую из использован-
ных страниц. Опция B того же меню исполь-
зуется  для инициализации новой страницы,
т.е.  вставляет строку на новую страницу.
Вы  сами  должны  решить, когда Вам нужно
будет использовать эту опцию, но мы можем
посоветовать   использовать   компрессор,
чтобы  подностью  использовать  доступную
память, и лишь потом начинать новую стра-
ницу,  т.к.  начав  новую страницу, Вы не
сможете  вставлять строки на старую стра-
ницу,  а  сможете лишь вносить изменения.

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

То же самое касается и таблицы текстов
сообщений:  I  вставляет строку на высшую
доступную   страницу,  B  начинает  новую
страницу, если она была ининциализирована
путем помещения в нее локации.

Если  Вы хотите, чтобы игра шла на 48К
машинах,  то,  естественно, Вы должны ис-
пользовать только страницу 0.

 2) Границы цветов. 

Одной из основных проблем при работе с
графикой  на  Спектруме является проблема
цветовых атрибутов.

Суть проблемы состоит в том, что в од-
ном знакоместе (матрица 8х8 пикселей) не-
льзя  иметь более двух цветов. Знакоместа
хорошо видны при использовании опции GRID
в  графическом редакторе. Эти два цвета -
PAPER  и  INK - цвета включенных и выклю-
ченных пикселей. Как PAPER, так и INK мо-
гут принисать одно из восьми значений для
каждого знакоместа.

Команды FILL и SHADE заполняют область
тестурой,  состоящей  из включенных и вы-
ключенных  пикселей,  поэтому если Вы ис-
пользуете  различный  INK и/или PAPER для
двух смежных заполняемых областей, то мо-
жете  получить  цветные  квадраты  вместо
плавного  соединения цветов. Это происхо-
дит из-за того, что цвета второй текстуры
в  знакоместе изменяют цвета первоначаль-
ной текстуры.

Существует несколько способов борьбы с
той проблемой:

 а) Проигнорировать ее.  Такой способ ис-
   пользован  в  некоторых картинках игры
   TEWK.  Эффект можно свести к минимуму,
   если не заполнять смежные области тек-
   стурой.

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

 в) Аккуратно  позиционировать все облас-
   ти: проводить границу по соседним зна-
   коместам.  Можно  получить  картинки в
стиле кубизма.

 г) Смешивать цвета.  Это  позволяет двум
   заполненным  по  команде  FILL  (но не
   SHADE!)  областям с различными цветами
   находиться в одном знакоместе. Сначала
   проводятся границы для областей А и В.
   Облать  А  заполняется,  используя INK
   первого  требуемого  цвета.  Область В
   заполняется,   используя  INK  второго
   требуемого  цвета. Выполняется команда
   BLOCK для прямоугольника С, где INK 8,
   а  PAPER - второй требуемый цвет. Смо-
   три Приложение 2.

 3) Программа грамматического разбора 
(парсер). 

Работа парсера заключается  в том, что
он  сканирует  введенную  строку  (до 125
символов)  на  наличие слов, хранящихся в
словаре, извлекая "фразы", которые он мо-
жет конвертировать в логические предложе-
ния (LS).

После  того, как фраза была извлечена,
происходит  сканирование таблиц Ответов и
Соединений  на  предмет распознавания LS.
Если LS не было распознано, то печатается
-SM8  ("I can't do that" "Не могу это сде-
.лать")  или  SM7 ("I can't go in that di-
-rection"  "Не  могу туда идти") в зависи-
мости  от  номера  глагола  (т.е. если он
меньше, чем 14, то печатается SM7), а за-
тем  запрашивается  новая  строка. Запрос
новой  строки  происходит и в том случае,
если  действие  по  какой-либо причине не
может произойти, например, объект слишком
тяжел,  или  создатель  игры  сам вставил
действие NEWTEXT. Результаты могут быть в
противном  случае для игрока весьма като-
строфичны.  Пример:  GET  AXE  AND ATTACK
-TROLL  (взять  топор и атаковать тролля),
если  у  Вас  нет топора, то Вы не хотите
наезжать на тролля.

Если LS успешно выполнено, то либо вы-
деляется  новая фраза, либо запрашивается
новая строка, если в буфере пусто.

Фразы   разделяются   союзами  (обычно
"AND"  и "THEN" ("И" и "ЗАТЕМ")) и любыми
знаками пунктуации.

Местоимение (обычно "IT" ("ЭТО", "ТО",
"ЭТОТ"  и  др.))  могут быть использованы
для  ссылки  на  существительное/прилага-
тельное, использованное в предыдущей фра-
зе,  даже  если  она вводилась отдельно в
предыдущий  раз. Существительные, у кото-
рых  номером  меньше 50, являются именами
собственными  и не окажут влияния на мес-
тоимение.

Формат логического предложения таков:

(Adverb)  Verb (Adjective1 (Noun1)) (pre-
position) (Adjective2 (Noun2)) 
,(Наречие) Глагол (Прилагательное1 (Сущес-
твительное1))  (предлог) (Прилагательное2
(Существительное2)) 

В  скобках указаны необязательные сло-
ва, т.о. минимальная фраза:

Verb (или Conversion Noun) 

Глагол  (или  Конверсионное  Существи-
тельное  -  это существительное с номером
меньшим 20, которое при отсутствии глаго-
ла  будет конвертировано в глагол, напри-
мер, NORTH СЕВЕР). Если Глагол опущен, то
в LS будет подразумеваться предыдущий ис-
пользованный  глагол, например, GET SWORD
AND  SHIELD (взять меч и щит) будет обра-
ботано корректно.

Заметьте, что формат фразы, набираемой
игроком, не обязательно должен строго со-
ответствовать   указанному.   Так,  фразы

GET THE SMALL SWORD QUICKLY 
(ВЗЯТЬ МАЛЕНЬКИЙ МЕЧ БЫСТРО) 

QUICKLY GET THE SMALL SWORD 
(БЫСТРО ВЗЯТЬ МАЛЕНЬКИЙ МЕЧ) 

QUICKLY THE SMALL SWORD GET 
(БЫСТРО МАЛЕНЬКИЙ МЕЧ ВЗЯТЬ) 

являются  эквивалентными и порождают одно
и то же LS. В действительности же предло-
жение,  введенное  игроком может быть та-
ким:

GET ALL. OPEN THE DOOR AND GO SOUTH THEN
GET THE BUCKET AND LOOK IN IT.
ВЗЯТЬ ВСЕ. ОТКРЫТЬ ДВЕРЬ И ИДТИ НА ЮГ ЗА-
ТЕМ ВЗЯТЬ ВЕДРО И ПОСМОТРЕТЬ ВНУТРЬ.

и породить пять (5) LS:

GET ALL     (ВЗЯТЬ ВСЕ) 
 OPEN DOOR   (ОТКРЫТЬ ДВЕРЬ) 
SOUTH       (ЮГ) 
GET BUCKET  (ВЗЯТЬ ВЕДРО) 
LOOK BUCKET (ПОСМОТРЕТЬ ВЕДРО) 

OPEN DOOR  : THE  опускается,  т.к. нет в
             словаре;
SOUTH      : GO  опускается,  т.к.  нет в
             словаре
,LOOK BUCKET: BUCKET  получается из-за IT,
               IN - предлог, опускается.

Заметьте, что DOALL не будет генериро-
вать  объект,  описанный  существительным
(прилагательным)2. Это обеспечивает прос-
тоту выполнения команды EXCEPT КРОМЕ, на-
пример,  GET  ALL  EXCEPT THE FISH (ВЗЯТЬ
ВСЕ  КРОМЕ  РЫБЫ), что имеет побочный эф-
вект, не позволяющий обработку фразы типа
PUT  ALL  EXCEPT  THE  FISH IN THE BUCKET
ЗАСУНУТЬ  ВСЕ  КРОМЕ  РЫБЫ  В ВЕДРО, т.к.
здесь три существительных.

 4) Вывод на экран. 

Символьные наборы переключаются в тек-
сте путем выбора цвета 0-5, нажатия DELE-
TE  для  генерации ESCC (управляющие коды
для печати на экране) 0-5, будет работать
только  в том случае, если символьный на-
бор  с  таким номером был вставлен в базу
данных.

ESCC 7 отрабатывается как CR (или ВК),
но не переустанавливает цвета, т.к. явля-
ется частью сообщения.

ESCC 6  работает как TAB  (табуляция),
но  использовать  нужно  остородно,  т.к.
часто  подавляется  текстовым форматтером
во время печати.

Цвета  и символьные наборы, включенные
в  тексте, останутся в силе до выполнения
действия NEWLINE. Например, чтобы напеча-
тать число монет, что несет игрок (содер-
жится,  например,  в  флаге 100), то если
учесть то, что сообщение должно содержать
контрольный  код для красного цвета бума-
ги, то строка в таблице ответов будет вы-
глядеть так:

COINS     MES 1     ; "<RED>You are car-
                       rying" 

 _  PRINT 100 
          MESSAGE 2 ; " coins." 
          DONE 

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

 5) Объекты. 

Подчерки  в  тексте  будут заменены во
время  игры на описание объекта, на кото-
рый  была сделана последняя ссылка коман-
дами  GET, DROP, DESTROY и т.п. Это глав-
ным  образом используется для того, чтобы
GET,  DROP и т.п. могли сообщить об удач-
ном  (или неудачном) исполнении, но можно
использовать   для  исследования  объекта
(EXAM)  и дпугих автоматических выдач со-
общений.

Флаг 53 используется для контроля вида
отображения объекта на экране при исполь-
зовании  действий  LISTOBJ И LISTAT. Если
его значение равно 64 (включен 6 бит), то
объекты будут выведены без перевода стро-
ки  между  ними,  формируя  таким образом
нормальное  предложение  - составной спи-
сок. Возможные форматы:

SM53 ("nothing" "ничего") - может  возни-
кнуть только с LISTAT 

объект SM48 (".") 

объект SM47 ("and ") объект SM48 (".") 

объект SM46 (",") объект SM47 ("and " 
" и ") объект SM48 (".") 

В дополнении, бит 7 флага 53 будет ус-
тановлен (значение будет больше 127), ес-
ли хотя бы один объект был напечатан. Это
позволит  определить,  требуется  или нет
NEWLINE для переустановки цветов.

Действию  LISTAT  обычно  предшествует
сообщение.

Описание  объекта составляется из пол-
ного  описания,  находящегося  в  таблице
описаний  объектов. Предпочтительный фор-
мат описания:

indefinite article (adjective) noun . ex-
tra text 

неопределенный  артикль  (прилагательное)
существительное  .  дополнительный  текст

где  неопределенный артикль "A", "An" или
"Some"  (в руском языке артикли отсутсву-
ют).   Прилагательные  и  существительные
должны быть строчными (в русском - необя-
зательно). Примеры:
,"A  small  key"  "Маленький  ключ", "Some
/sand" "Немного песка" или "An orange. Ra-
ther  mouldy"  "Апельсин.  Изрядно покрыт
,плесенью".  PAW извлекает описания следу-
ющими путями:

 а) Для GET, DROP и т.п. (т.е. "_") неоп-
ределенный артикль опускается, и описание
печатается  до  первой точки, ее не вклю-
чая,  например,  "I  now  have  the small
key."   "У  меня  теперь  есть  маленький
ключ.". 

 б) Для  составного списка объектов неоп-
ределенный  артикль из заглавного переде-
лывается в строчный и описание печатается
до первой точки, ее не включая, например,
."In the bag is a small key." "В сумке на-
  ходится маленький ключ.". 

Очевидно,  что  если Вы не используете
подчерки  или составные списки, то Вы мо-
жете  писать  описания  объектов так, как
Вам будет угодно.

Заметьте,  что  если  объект будет яв-
ляться  контейнером,  то должна существо-
вать  неиспользованная локация с таким же
номером,  чтобы  PAW  мог использовать ее
как  "содержимое",  т.е. объекту objno. 1
будет  нужна  локация  locno. 1, не забыв
пометить  этот объект как контейнер ("С")
в таблице весов объектов.

 6) Создание многочастевых адвентюр. 

Для  того,  чтобы  создать в адвентюре
большее (ударение на первый слог), а зна-
чит  более  интересное, игровое простран-
ство не жертвуя при этом качеством описа-
ния  локаций, Вы можете разделить игру на
несколько  более  мелких  областей. Лучше
всего это делать в игре, которая содержит
несколько  отдельных  игровых  областей с
единственной точкой соединения (эта точка
,носит название "bottleneck" - переводится
,как  "узкое  место" (дословно "бутылочное
горлышко")).  Пример  -  игра, где подняв
парус  на лодке Вы переплываете из первой
части игры во вторую.

Для того, чтобы очки, количество ходов
и другая информация также попадала в сле-
дую  часть,  Вы должны использовать дейс-
твия  SAVE и LOAD. Для загрузки состояния
одной  части игры в другую, Вы должны ис-
пользовать  в обеих частях одинаковое ко-
личество  локаций и объектов. Более того,
те  объекты, что могут быть перенесены из
одной части в другую, должны иметь одина-
ковые описания в обоих частях игры.

Возьмем  игру со 120ю локациями, разо-
бъем  ее на две части, каждая часть будет
содержать  по 60. Локация 60 будет сущес-
твовать  в  обеих  частях  как транзитная
(откуда  игрок стартует и где он заканчи-
вает),  а также будет использован свобод-
ный флаг, например, 26, который будет по-
казывать,  из  какой части игры отгрузка.
Когда игрок закончит первую часть, он пе-
реносится в локацию 60, и во флаге 26 ус-
танавливается 1.

Часть 1 будет содержать строки: 

FLocation 60 
Конец  первой части - Приготовьтесь к от-
грузке состояния игры. (При желании може-
те  сохранить несколько копий.) После от-
грузки  загружайте вторую часть и следуй-
те дальнейшим инструкциям.

Process 1 

END  _  AT   60; Конец игры? 
 _  LET  25  1 ; Отгрузка из части 1.
        SAVE 

Часть 2 будет содержать строки: 

Location 0 
Часть  вторая  - Приготовьтесь к загрузке
остояния игры.

FLocation 60 
Любое введение ко второй части.

Process 1 

START  _  AT0  ; Только  начали игру?
          LOAD     ; Тогда будем в другой
                   ; локации 

START  _  NOTEQ 26 ; Отгрузка  не из пер-
                   ; вой части 
          GOTO 0   ; Попросим   загрузить
                   ; другую отгрузку 
          DESC 

START  _  AT60 ; Загрузили нужную от-
                   ; грузку 
          ANYKEY   ; Ждем, пока прочитают
                   ; введение 
          RESET 1  ; Начнем  игру в лока-
                   ; ции 1 

Действие  RESET автоматически вызывает
DESC  новой стартовой локации после уста-
новки всех объектов, которые не находятся
у игрока, не надеты на нем и не находятся
в  локации 60, на свои стартовые позиции.
Заметьте, что между ANYKEY и RESET можно,
если  нужно,  поставить CLEAR, т.к. RESET
не оказывает влияния на флаги.

 7) Свет и Темнота. 

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

В PAW темнота создается путем установ-
ки в флаг 0 значения, отличного от 0. Та-
кая  переустановка  флага должна происхо-
дить каждый раз, когда игрок входит/выхо-
дит  в/из  затемненной  зоны. Перемещение
должно  осуществляться  при помощи GOTO в
таблице  ответов, чтобы можно было произ-
вести действия SET и CLEAR.

Если игроку можно дать источник света,
то  проще  всего  это  сделать при помощи
объекта  0.  При этом источником света не
обязательно  должны быть факел или свеча.
При  наличии  фантазии им могут оказаться
инфра-красные  очки или широколучевой ла-
зер.

Для  примера рассмотрим создание цикла
день-ночь. В таблице процессов 2 появятся
строки:

 _  CYCLE  EQ   5  0 ; Конец цикла 
           LET  5 24 ; Начнем новый цикл

 _  NIGHT  EQ   5 18 ; Наступила ночь 
           SET     0 
           MESSAGE X 

 _  DAYEQ   5  6 ; Наступил день 
           CLEAR   0 
           MESSAGE y 

Если часть игру будет проходить в под-
земелье  или  внутри  здания, не забудьте
решить, сможет ли игрок увидеть смену дня
и  ночи,  перед  тем, как будете печатать
соответствующее сообщение.

 8) EXTERN и загрузка картинок. 

   Команда EXTERN может быть использована
для вызова или Ваших машкодовых программ,
или  строк BASIC'а. Эту возможность можно
использовать только в полностью сделанной
игре,  т.к.  тогда освобождаются 4К ранее
занятой  памяти  (оставшиеся 2К нужны для
работы PAW, поэтому и не пытайтесь их ис-
пользовать). Важным адресом является EXT-
VEC, который печатается при загрузке PAW.
Вы  должны использовать значение получен-
ное  после записи готовой игры, в против-
ном случае могут возникнуть неприятности.

Для  тех, кто пишет в машкоде: для то-
го,  чтобы  PAW  мог выполнять машкодовые
программы, Вы должны занести три байта по
адресу  EXTVEC  вместе  с JP на стартовый
адрес.  Регистр  IX должен быть сохранен,
остальные  могут использоваться без огра-
ничений, но SP должен быть сбалансирован.
Регистр  А  содержит  параметр из EXTERN.
Если  Вы  сохраните  два  байта по адресу
EXTVEC+1,  то они будут указывать на под-
программу, которая выполняет BASIC'овскую
строку с номером, находящимся в А.

Для тех, кто пишет на BASIC'е: команда
POKE  EXTVEC,195  даст возможность выпол-
нить  по EXTERN BASIC'овскую строку с но-
мером 100+параметр, т.е. EXTERN 10 выпол-
нит  строку  110  BASIC'а. Для перехода к
следующему кондакту строка BASIC'а в кон-
це  должна содержать команду STOP. Нельзя
использовать  в BASIC'е (и в машкоде) ко-
манду  CLS,  но по адресу EXTVEC+3 содер-
жится  процедура, выполняющая аналогичную
функцию,   т.е.   команда  RANDOMIZE  USR
EXTVEC+3  очистит  экран. Адрес EXTVEC+12
содержит  номер  строки, куда будут печа-
таться  имена файлов базы данных, а адрес
EXTVEC+9  является  адресом  подпрограммы
загрузки базы данных и старта игры.

В качестве примера приводится содержи-
мое  BASIC-загрузчика для игры, его можно
(без REM'ов) сохранить на ленту (для дис-
ковой  версии потребуется небольшая пере-
делка,  и вообще, это только пример, поэ-
тому загрузчик может подобным и не быть):

 10 REM load game 
- 15 BORDER 0: PAPER 0: INK 0: REM  Так не
видно имя файла 
. 20 CLEAR 29856: REM максимальная величи-
на для RAMTOP 
, 25 LET extvec=?????: REM Вставьте нужное
число 
, 30 LOAD ""SCREEN$: PRINT AT 19,0;: REM
Грузим картинку и не поганим ее 
. 40 LOAD ""CODE: REM грузим интерпретатор
- 50 POKE extvec,195: REM включаем EXTERN
, 60 POKE extvec+12,20: REM имена файлов
базы данных - в строку 20 
- 70 RANDOMIZE USR (extvec+9): REM  загру-
жаем базу данных и начинаем игру 
100 REM строка, вызываемая EXTERN 0 
110 PRINT "hello from BASIC": STOP 
355 REM строка, вызываемая EXTERN 255 

Строки 100-355 могут при необходимости
содержать команды GOTO.

Сразу же за данной программой сохрани-
те заставочную картинку. После нее из PAW
сохраните игру (опция "А").

Замечание:  Для  корректной работы PAW
необходимо  как минимум 2К свободного ра-
бочего  пространства,  в противном случае
BASIC  начнет  постепенно исчезать, осво-
бождая  место для PAW. RAMTOP можно пони-
зить,  если будете использовать свои маш-
кодовые  программы,  но 2К должны в любом
случае оставаться свободными.



 9) Псевдо-интеллектуальность. 

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

  Представим  себе персонажа по имени Sa-
nec,  который сам может ходить. В словаре
он описывается как SANEC (номер 25, суще-
ствительное).  Флаг  20  используется для
указания   его  местонахождения.  Таблица
процессов  3 работает с речью, обращенной
к  нему,  а таблица процессов 4 описывает
его  действия  и передвижения. Нижеприве-
денные  строки  позволят ему ходить, если
Вы его об этом попросите. Через некоторое
время  это ему наскучит, и он растворится
в облаке дыма.

Message 1 

Sanec did not seem to understand what you
said. 
Кажется,  Санек не понял, что Вы ему ска-
зали. 

Message 2 

No one of that name here. 
Нет здесь никого с таким именем. 

Message 3 

Sanec replies "hello" in a gruff voice.
Грубоватым  голосом  Санек ответил: "При-
вет". 

Message 4 

Sanec  wanders that way as he has nothing
better to do. 
Санек  побрел в ту сторону, так как более
интересного  занятия у него на данный мо-
мент все равно не было. 

Message 5 

Sanec the wizard is here. 
Здесь же находится волшебник Санек. 

Message 6 

Sanec 'politely' ignores what you say. 
,Санек 'вежливо' пропустил Ваши слова мимо
ушей. 

Message 7 

Sanec  turns to face you and in his gruff
voice  announces:  "I'm  bored  with  all
this,  I'm  off  to  a  bigger  game" and
,promptly vanishes in a puff of green smo-
ke! 
,Санек повернулся к Вам лицом и своим гру-
,боватым голосом сказал: "Меня все это до-
стало,  и ты, и вся эта демовуха, поэтому
,я сматываюсь отсюда в нормальную адвентю-
ру".  Сказал он это и с шумом растворился
в клубах отвратительно зеленого дыма. 

Для  начала  должно  быть  объявлено о
присутствии  Санека.  Для этого в таблице
процессов  1,  которая  вызывается каждый
раз  при описании локации, проверяем, на-
ходится  ли  он  в  одной с нами локации,
т.е.  равно ли значение флага 20 (его ме-
стоположение) значению флага 38 (наше ме-
стоположение). Заметьте, что нужно прове-
рить,  не  находимся  ли  мы в локации 0,
т.к.  обычно эта локация содержит вводный
текст.

SANEC  _  SAME20 38 ; Санек здесь?
       _  NOTAT   0     ; Не в локации 0?
          MESSAGE 5     ; Печатаем,   что
                        ; Санек здесь

Для работы с речью, обращенной к Сане-
ку, нужны строки в таблице ответов:

SAY SANEC PREPTO; "ТО" может быть
                        ; опущено,  чтобы
                        ; понимать  пред-
                        ; ложениятипа
                        ; Глагол Существ.
          SAME20 38 ; Cанек здесь?
          PROCESS 3     ; Обработка речи
          DONE 

SAY _     PREPTO 
          MESSAGE 2     ; Нет   никого  с
                        ; таким именем
          DONE 

Cтроки в таблице процессов 3: 

*   *     PARSE         ; Для конвертации
                        ; введенной стро-
                        ; ки в LS
          MESSAGE 1     ; Сюда   приходит
                        ; PARSE,  если не
                        ; сможет сконвер-
                        ; тировать   что-
                        ; нибудь коррект-
                        ; ное
          DONE          ; LS   испорчено,
                        ; нельзя  продол-
                        ; жать дальнейшее
                        ; выполнение

HELLO     MESSAGE 3     ; Предположим,
                        ; HELLO   есть  в
                        ; словаре, поэто-
           DONE          ; му SAY TO SANEC
                        ; "HELLO"  срабо-
                        ; тает

_   _     LT      34 14 ; Cанеку  сказали
                        ; слово  передви-
 ; жения?
          MOVE20; Есть ли  проход
                        ; в  ту  сторону?
          MESSAGE 4     ; Онпереходит
                        ; туда, о чем иг-
                        ; рок оповещается

_   _     MESSAGE 6     ; Он туда не идет

Очевидно,  можно  ввести  много строк,
чтобы  Санек мог нормально понимать чело-
веческую  речь,  но даже несколько хорощо
продуманных  строчек  могут  дать большое
разнообразие ответов.

В  конце  дадим Санеку шанс исчезнуть.
когда  ему  надоест бродить без дела, для
чего в таблице процессов 4 введем следую-
щие строки:

SANEC _   EQ      20 2  ; В локации 2?
          CHANCE  10; 10% шанс
          SET     20; Локация  255 не
                        ; существует
           AT      2     ; Там  ли мы, где
                        ; Санек  (в лока-
                        ; ции 2)?
          MESSAGE 7     ; Он улетел...

И  еще одна строка в таблице процессов
2  для  вызова регулярного вызова таблицы
процессов 4: ; disappears

SANEC _   PROCESS 4 

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

 XIII. Приложение 1. 

 1) Команды графического редактора. 

Иногда во время быстрого прередвижения
линии  она может исчезнуть, что связано с
перерисовкой экрана.

Передвижение второго конца линии (при-
вязанной  точки ПТ) осуществляется клави-
шами:

 Q  W  E

 A     D

 Z  X  C

Перемещение  происходит  на  пиксел за
нажатие. Можно использовать Interface 2 /
Plus  2  joystick port 2 или Kempston(tm)
interface (SYMBOL SHIFT и J).

Удерживание  одновременно  с  нажатием
перемещающих  клавиш  клавиши  CAPS SHIFT
ускоряет  перемещение в 8 раз (8 пикселей
за нажатие).

Команды редактирования дроустринга: 

CAPS SHIFT и 8 - в начало дроустринга
CAPS SHIFT и 6 - следующая команда 
CAPS SHIFT и 7 - предыдущая команда 
-CAPS SHIFT и 0 - удалить  предыдущую  ко-
                 манду 
/CAPS SHIFT и 9 - удалить следующую коман-
                 ду 

Все  следующие команды требуют удержа-
ния SYMBOL SHIFT во время нажатия на кла-
вишу.

Переключатели: 

I Inverse      переключатель инверсии 
O Over         переключатель наложения 
Y Grid         переключатель сетки 
,J Kempston(tm) joystick переключатель 

Команды,  которые вносятся в базу дан-
ных: 

A Абсолютный  сдвиг  (PLOT  (точка) с вы-
  бранными I и O)

B Прямоугольный  блок заполняется атрибу-
  тами. Линия определяет диагональ блока.

F Заполнение области. Точка старта запол-
  нения - конец линии (см. замечание).

G GOSUB  к номеру локации с масштабирова-
  нием.

X Производит запрос цвета чернил (INK).

L Рисует линию

C Производит запрос цвета бумаги (PAPER).

P Строит  точку  в  конце линии, линию не
  рисуя
-R Относительный сдвиг точки в конец линии

S Заполнение   области  текстурой.  Точка
  старта  заполнения  -  конец линии (см.
  замечание)

V Производит запрос мерцания (FLASH).

Z Производит запрос яркости (BRIGHT).

T Печатает выбранный символ из выбранного
  символьного набора на экран.

Замечание: Fill (F) и Shade (S) не  явля-
ются  полностью входимыми заново - нельзя
заполнить  уже  заполненную область. Fill
является  Shade, у которой в текстуре все
пиксели включены.

По  ENTER  осуществляется выход из ре-
дактирования.

 2) Системные сообщения. 

Большинство системных сообщений содер-
жат  ESCC 7 для корректного размещения на
экране.

SM0 - используется  вместо описания лока-
ции, если там темно.

SM1 - печатается  действием LISTOBJ, если
присутствует хотя бы один объект.

SM2 .. SM5 - четыре  промпта ввода, кото-
рые  выбираются  случайо до тех пор, пока
во  флаг  42  не занесут корректный номер
сообщения.

SM6 - печатается  парсером,  если ни одну
  фразу ему не удалось понять.

SM7 - печатается,  если  ни одно действие
не  было  выполнено  (или  было выполнено
NOTDONE)  в таблице ответов для глагола с
номером меньшим 14.

SM8 - печатается,  если  ни одно действие
не  было  выполнено  (или  было выполнено
NOTDONE)  в таблице ответов для глагола с
номером большим 13.

SM9 .. SM11 - печатаются действием END.

SM12 - печатается кондактом QUIT

SM13, SM14 - печатаются действием END.

SM15 - сообщение действия OK.

SM16 - сообщение действия ANYKEY.

SM17 .. SM20 - сообщения действия TURNS.

SM21, SM22 - сообщения действия SCORE.

SM23, SM29 - первые  из множества сообще-
ний,  печатаемых действиями манипуляций с
объектами.

SM30 - положительный   ответ,   ожидаемый
кондактами END и QUIT.

SM31 - отрицательный   ответ,   ожидаемый
кондактами END и QUIT.

SM32 - печатается  при  заполнении  всего
крана текстом.

SM33 - маркер ввода.

SM34 - курсор.

SM35 - печатается  при возникновении пус-
того действия (тайм-аута).

SM36 .. SM45 - еще  несколько  сообщений,
печатаемых  действиями манипуляций с объ-
ектами.

SM46 - связка между объектами при продол-
жительном списке.

SM47 - заключительная  связка между пред-
последним  и последним объектами при про-
должительном списке.

SM48 - концовка  списка объектов (печата-
ется как действием LISTOBJ, так и LISTAT,
  поэтому будьте внимательны).

SM49, SM50 - еще несколько сообщений, пе-
чатаемых  действиями манипуляций с объек-
тами.

SM51 - концовка  составного предложения в
PUTIN / TAKEOUT (AUTOP / AUTOT).

SM52 - последнее   сообщение,  печатаемое
действиями манипулаций с объектами.

SM53 - сообщение для действия LISTAT, ес-
ли не был найден ни один объект.

С  SM54  и  дальше системные сообщения
свободны,  и  Вы  можете использовать их.
PAW  для  других машин может использовать
большее  число сообщений, поэтому примите
это  во внимание при переносе программы с
одной  машины  на  другую. Так, например,
PAW для CP/M использует SM54..SM60.

 3) Функции флагов PAW. 

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

Флаг 0 - когда  не равен 0, означает, что
в игре темно (см. объект 0).

Флаг 1 - содержит   количество  объектов,
находящихся  у  игрока,  но не надетых на
него.

Следующая  группа  флагов  уменьшается
PAW'ом, если их содержимое не равно 0:

Флаг 2 - при описании локации

Флаг 3 - при  описании локации и одновре-
 менно темно (Флаг 0 не равен 0)

Флаг 4 - при  описании  локации, одновре-
менно темно, одновременно отсутствует ис-
точник света (объект 0)

Флаги 5 .. 8 - каждый   временной   фрейм
(каждая  введенная фраза или пустое дейс-
твие)

Флаг 9 - каждый временной фрейм, одновре-
менно темно

Флаг 10 - каждый  временной  фрейм, одно-
временно  темно, одновременно отсутствует
объект 0

Флаги  с  11  по 28 можно свободно ис-
пользовать в игре.

Флаг 29  содержит  флаги контроля кар-
тинки, устанавливаемые действием GRAPHIC:

Бит 7 - Устанавливают  для принудительной
        отрисовки картинки (LOOK)
.Бит 6 - Устанавливают  для постоянной от-
         рисовки картинок (PICS ON)
.Бит 5 - Устанавливают  для постоянной не-
        отрисовки картинки (PICS OFF)

Флаг 30 - флаг подсчета очков

Флаги 31 / 32  (LSB/НSB)  содержат  число
ходов,  сделанных игроком (обычно - число
фраз,  извлеченных из введенного игроком)

Флаг 33 - содержит глагол текущего LS

Флаг 34 - содержит  первое  существитель-
ое текущего LS

Флаг 35 - содержит прилагательное первого
  существительного текущего LS

Флаг 36 - содержит  наречие  текущего  LS

Флаг 37 - содержит максимальное число пе-
реносимых  объектов (изначально 4), уста-
навливается действием ABILITY

Флаг 38 - содержит  номер текущей локации

Флаг 39 - содержит текущую верхнюю строку
экрана

Флаг 40 - содержит  режим  экрана (0..4),
устанавливаемый  действием  MODE.  Бит  7
принудительно  не изменяет цвет рамки эк-
рана,  бит 6 по заполнении экрана инициа-
лизирует надпись "More.." "Дальше..".

Флаг 41 - содержит  номер строки для раз-
деления  (если не в диапазоне от 4 до 24,
то 12), устанавливаемый действием PROTECT
как текущая строка экрана

Флаг 42 - содержит  номер промпта для ис-
пользования  (если  равен 0, то случайным
образом   из  SM2..SM5),  устанавливается
действием PROMPT.

Флаг 43 - содержит  предлог  текущего  LS

Флаг 44 - содержит второе существительное
текущего LS

Флаг 45 - содержит прилагательное второго
  существительного текущего LS

Флаг 46 - содержит  местоимение существи-
тельного (обычно "IT" "ЭТО" и т.п.)

Флаг 47 - содержит  местоимение  прилага-
тельного (обычно "IT")

Флаг 48 - содержит  частоту пустых дейст-
вий (тайм-аутов)

Флаг 49 - содержит  флаги управления пус-
тыми  действиями, устанавливаемые с помо-
щью INPUT и TIME (как и флаг 48), TIMEOUT
  проверяет 7 бит этого флага:

Бит  7 - устанавливается,  если  пустое
          действие произошло во время по-
          следнего фрейма 

  Бит  6 - устанавливается, если доступны
          данные   для  обратного  вызова
          (не используется создателем иг-
           ры) 

  Бит  5 - устанавливается для  автомати-
          ческого  обратного вызова вход-
          ного буфера при пустом действии

  Бит  4 - устанавливается для печати бу-
          фера  при  выходе (используется
          совместно с битом 3) 

  Бит  3 - устанавливается  для  ввода из
          нижней части экрана 

  Бит  2 - устанавливается, чтобы  пустое
          действие  могло происходить при
          ANYKEY 

  Бит  1 - устанавливается, чтобы  пустое
          действие  могло происходить при
 "More..." 

  Бит  0 - устанавливается, чтобы  пустое
           действиемогло   происходить
            только в начале ввода 

Флаг 50 - содержит   locno.   для   цикла
           DOALL, т.е. значение, следующее
          за DOALL 

Флаг 51 - содержит объект последней ссыл-
          ки  команд  GET / DROP / WEAR /
          WHATO  и т.д. Печатается вместо
            любых подчерков в тексте.

Флаг 52 - содержит  силу  игрока  (макси-
          мальный суммарный вес объектов,
          находящихся  у игрока и надетых
          на него - изначально 10)

Флаг 53 - содержит флаги печати объектов:

  Бит 7 - устанавливается,  если  хотя бы
           один   объект   печатается  как
           часть LISTOBJ или LISTAT 

  Бит 6 - устанавливается  для формирова-
          ния   продолжительного   списка
          объектов, т.е. LET 53 64 заста-
          вит  PAW выводить список объек-
          тов в виде продолжающейся стро-
          ки, формирующей предложение.

Флаг 54 - содержит  местоположение объек-
          та последней ссылки

Флаг 55 - содержит  вес объекта последней
          ссылки

Флаг 56 - равен  128, если объект послед-
          ней ссылки является контейнером

Флаг 57 - равен  128, если объект послед-
          ней ссылки одеваемый

Следует  избегать использования флагов
58 и 59, т.к. они будут задействованы для
расширения.

Флаги с 60 по 255 доступны для свобод-
ного использования.

 4) Кондакты. 

 4а) Условия: 

AT      locno 
NOTAT   locno 
ATGTlocno 
ATLTlocno 
PRESENT objno 
ABSENT  objno 
WORNobjno 
NOTWORN objno 
CARRIED objno 
NOTCARR objno 
ISATobjno locno+ 
ISNOTAT objno locno+ 
ZEROflagno 
NOTZERO flagno 
EQ      flagno 0-255 
NOTEQ   flagno 0-255 
GT      flagno 0-255 
LT      flagno 0-255 
SAMEflagno flagno 
NOTSAME flagno flagno 
ADJECT1 word 
ADVERB  word 
GPREPword 
NOUN2   word 
ADJECT2 word 
CHANCE  0-99 
TIMEOUT 
QUIT 

 4б) Действия (в начале указан тип): 

GET     4 objno 
DROP4 objno 
WEAR4 objno 
REMOVE  4 objno 
CREATE  5 objno 
DESTROY 5 objno 
SWAP5 objno   objno 
  PLACE   5 objno   locno+ 
PUTO5 locno+ 
PUTIN   4 objno   locno. 
TAKEOUT 4 objno   locno. 
GDROPALL 5 
AUTOG   4 
AUTOD   4 
AUTOW   4 
AUTOR   4 
AUTOP   4 locno 
  COPYOO  5 objno   objno 
COPYOF  5 objno   flagno 
COPYFO  5 flagno  objno 
WHATO   5 
  WEIGH   5 flagno  objno 
SET     5 flagno 
CLEAR   5 flagno 
PLUS5 flagno  0-255 
  MINUS   5 flagno  0-255 
  LET     5 flagno  0-255 
 ADD     5 flagno1 flagno2 
 SUB     5 flagno1 flagno2 
COPYFF  5 flagno1 flagno2 
RANDOM  5 flagno 
MOVE5 flagno 
GOTO5 locno 
WEIGHT  5 flagno 
ABILITY 5 0-255   0-255 
MODE5 0-4     0-3 
LINE5 0-20 
GRAPHIC 5 0-3 
PROMPT  5 sysno 
INPUT   5 0-7 
TIME5 0-255   0-7 
PROTECT 5 
PRINT   5 flagno 
TURNS   5 
SCORE   5 
CLS     5 
GNEWLINE 5 
MES     5 mesno 
MESSAGE 5 mesno 
SYSMESS 5 sysno 
PICTURE 5 locno 
PAPER   5 0-9 
INK     5 0-9 
BORDER  5 0-7 
CHARSET 5 0-255 
SAVEAT  5 
BACKAT  5 
PRINTAT 5 0-20   0-31 
LISTOBJ 5 
LISTAT  5 locno+ 
INVEN   3 
DESC1 
END     2 
DONE3 
GNOTDONE 3 
OK      3 
SAVE1 
LOAD1 
GRAMSAVE 5 
RAMLOAD 5 flagno 
ANYKEY  5 
PAUSE   5 0-255 
GPARSE   5 
NEWTEXT 5 
BEEP5 0-255  0-255 
PROCESS 5 procno 
DOALL   5 locno+ 
RESET   1 locno 
EXTERN  5 0-255 



Обозначения: 

locno. корректный номер локации

locno+ то же, что и locno плюс локации
       252 (не создан) 
       253 (надет) 
       254 (несет игрок) 
       255 (текущая локация игрока) 

mesno. корректный номер сообщения

sysno. корректный  номер системного сооб-
       щения

flagno любой флаг (от 0 до 255)

procno корректный номер субпроцесса

word   слово требуемого типа, присутству-
       ющее в словаре, или "_" любое сло-
       во
_______________________________



Другие статьи номера:

Сегодня в номере - содержание журнала.

Авторы - авторы журнала ZX-Format No.6

От авторов - свершилось давно ожидаемое событие...

Игрушки - Последний утюг (новелла по игре 48 утюгов).

Игрушки - Приключения Винни Пуха. Часть вторая.

Игрушки - описание игры The Crypt (Castle Master 2).

Игрушки - описание редактора Адевентюр - PAW (часть 1).

Игрушки - описание редактора Адевентюр - PAW (часть 2).

Игрушки - описание редактора Адевентюр - PAW (часть 3).

Игрушки - описание редактора Адевентюр - PAW (часть 4).

Игрушки - описание редактора Адевентюр - PAW (часть 5).

Программистам - Beta Basic: продолжение разговора о бейсике (часть 2).

Программистам - General Sound: Руководство по программированию.

Программистам - MMD - драйвер. Описание структуры драйвера модема для терминальной программы MMD.

Программистам - AI от В.Медноногова. Подробное описание "волнового алгоритма" трассировки (автоматического рассчета оптимального) пути, с примером реализации на Basic.

Программистам - Искуственный интеллект. Продолжение цикла статей об "AI". Общие основы нахождения пути к цели.

Программистам - Тr-Dos для программистов. Макс Петров завершает свой рассказ о нетрадиционых методах работы с диском.

Программистам - обмен опытом: "3-colour". Описание эффекта "8-цветов на точку", хелп к вьюверу и сколько слов о конвертации картинок в формат "3-colour".

Программистам - обмен опытом: "3-colour". Несколько слов о конвертации картинок в формат RGB.

Программистам - обмен опытом: программирование мультиколорных эффектов.

IS-DOS - пользователям: как выполнить индивидуальную настройку системы IS-DOS на конкретную модель ZX Spectrum-совместимого компьютера и на выполнение Ваших задач.

IS-DOS - пользователям: как скопировать системный диск IS-DOS и остаться при этом в живых.

IS-DOS - программистам: краткий курс - программирование в среде IS-DOS.

IS-DOS - news: новые программы IS-DOS.

Железо - Краткий рассказ о возможностях процессора Z-180.

Железо - Multiviewer. Описание доработочки, позволяющей мерять скорость программ по бордюру без влезания в коды - легким нажатием кнопки.

Железо - о новом проекте фирмы Peters - "Sprinter". Новый Spectrum-совместимый компьютер нового поколения Speccy.

Железо - Мнение пользователя о скорпионовском контроллере IDE HDD - SMUC.

Железо - SuperSpectrum: об одном проекте Spectrum-совместимой машины. Её особенностью является совместимость с PC.

Железо - X-Trade FAQ. Ответы на наиболее часто задаваемые вопросы по GS и XTR-модему.

Премьера - Flash tracker. Описание 4-х канального редактора цифровой музыки, работающего с SoundDrive, от самого автора SoundDrive - Flash Inc.

Премьера - Описание последней версии универсальной терминальной программы, используемой в SpbZxNet.

Премьера - Mortal Kombat: что ждёт Вас в полной версии игры и некоторые коментарии к demo версии.

Премьера - XReversy: презентация новой игрушки, из популярного семейства "реши задачку - посмотри картинку".

Интервью - Интервью с одним из известнейших спектрумистов - Андреем Ларченко.

Здесь был ты - Рассказ "Абсолютная власть".

Здесь был ты - Рассказ "Дорога".

Здесь был ты - Повелитель зубов: пародия на одну популярную трилогию...

Почта - Обратная связь: ответное письмо Alex'а из Нижнего Тагила, выставленного в прошлом номере в "Уголок ламера".

Почта - Письма читателей: Андрей Яковлев, Денис Токарчук, Алексей Гаркулим, Александр Гордеев, Евгений Шумилов, Ниточкин Вадим, Михаил Ларкин.

Почта - бесплатная реклама и обьявления.

Разное - Страшилка.: Nemo рассуждает о месте PC и Spectrum'а в современной России.

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

Разное - анкета: Результаты нашего социологического опроса спектрумистов.

Разное - Конкурс. Краткий отчет о наших конкурсах.

Разное - Проблемы рынка ПО: когда загнется Спектрум. Во всем ли виноваты Хакеры?

Разное - Перспективы ПО. Краткий обзор готовящегося к выходу ПО: Fast Tracker, Pro Sound Creator, Чёрный Ворон.

Разное - Перспективы ПО. Адвентюра From Beyond или "Извне".

Разное - мемуары о Питерской модемной сети для ZX Spectrum - SPbZXNet.

Amiga Club - Между нами, пользователями: сравнение характеристик Amiga 1200 с IBM PC.

Amiga Club - сравниваем производительность Амиг и PC. Насколько Амига актуальна в современных играх?


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
CODING - Процедура печати группы тектстовых строк из Бейсика.
Prologue - Вместо эпиграфа...
Игротека - описание игры про мафиози и ФБР - The Movie.
Железо - обзо клонов спектрума: Ленинград, Magic, Pentagon 128, Scorpion, Profi.
Demo scene - Black Cat рассказывает о себе.

В этот день...   21 ноября