ZX Format
#06
29 июля 1997 |
|
Игрушки - описание редактора Адевентюр - PAW (часть 4).
PAW Техническое руководство (продолжение) music by DNK (С) 1986 Gilsoft International Ltd. (C) 1996 Alex ASP, перевод _______________________________ IX. Описание графического редактора. Эта чсть PAW позволяет производить не- которые операции над дроустрингами (по- следовательность графических команд) каж- дой локации. Во время редактирования строка располагается в памяти следующим образом: ┌──────────┐ │ END │ Маркер конца строки ├──────────┤ │ │ /│ NEXT │ Еще не отрисованные команды ├──────────┤ │ │ │ SPARE │ Доступная память │ │ ├──────────┤ .│ END │ Временн. маркер конца строки ├──────────┤ │ │ │ DRAW │ Основной дроустринг └──────────┘ В дроустрингах используется метод по- следовательной привязки: в базовой точке (далее БТ) хранятся координаты точки, для которой в последний раз были выполнены команды PLOT, MOVE TO и т.д., а в привя- занной точке (далее ПТ) хранятся коорди- наты для следующей отрабатываемой команды PLOT, FILL и т.д. В графическом редакторе можно разде- лить команды на 4 группы. Любая команда, что вставляется в дроустринг, требует од- новременного нажатия SYMBOL SHIFT. 1) Команды дроустрингов: G ABS MOVE A БТ становится равной х,у из ПТ, уста- навливаются только атрибуты. Можно при- нять за PLOT с включенными INVERSE, OVER. PLOT P Включает пиксел в ПТ согласуясь с IN- VERSE и OVER, затем БТ=ПТ. G REL MOVE R БТ=ПТ, экран не изменяется. Можно при- нять за относительный сдвиг со старой по- зиции. LINE L Рисует линию с концами в БТ и ПТ, со- гласуясь с INVERSE и OVER, затем БТ=ПТ. Можно принять за относительный сдвиг со тарой позиции. FILL F В область с началом в ПТ включаются все пикселы. FILL вызывает SHADE, поэтому комментарии к SHADE также верны. Команда занимает 3 байта. SHADE S Область с началом в ПТ заполняется текстурой. В базе данных содержатся 16 текстур с номерами от 0 до 15, которые могут быть отредактированы в редакторе символов (Сharacter Editor). Определение текстуры происходит следу- ющим образом: а) Запрашиваются два номера текстуры (от 0 до 15). Если Вы хотите использовать только одну текстуру, то два раза ука- жите один и тот же номер. б) Происходит сложение текстур командой OR, т.е. одна текстура накладывается на другую. в) Если был включен INVERSE, то резуль- тирующая текстура инвертируется, т.е. все пикселы переключаются в противопо- ложное состояние Замечания: 1: SHADE производит заполнение сначала сверху вниз, а затем снизу вверх. Все об- ласти, которые SHADE не заполнила должны быть заполнены отдельно путем подачи ко- манды SHADE снова, хотя аккуратный выбор ПТ сведет эту проблему к минимуму. 2: Если заполняемая область будет слиш- ком сложной, то SHADE не будет выполнять- ся. Это сделано для того, чтобы анализи- ровать пересечение заполнения с уже за- полненным участком. Поэтому область может быть заполнена только один раз, так как уже заполненная область будет слишком сложной для повторного заполнения. Не нужно пытаться сначала заполнить область текстурой при помощи команды SHADE, а за- тем наложить фон при помощи команды FILL, лучше использовать SHADE с включенным IN- VERSE. Занимает 4 байта. TEXT T Если были введены какие-нибудь сим- вольные наборы, то последует запрос на номер символьного набора. Затем запраши- вается код символа (от 32 до 127). Этот символ печатается в знакоместо, в котором находится БТ. Эта команда была введена для того, чтобы вставлять куски картинки, нарисованные в редакторе символов (Сha- racter Editor), что в некоторых случаях позволяет экономить память - 8 байт вме- сто кучи линий и точек. Команда занимает 4 байта. BLOCK B Позволяет заполнить текущими атрибута- ми прямоугольник, БТ и ПТ образуют его диагональ. Занимает 5 байт. 2) Команды, работающие с цветами: INK X Выбранный цвет становится текущим. При INK 8 цвет чернил берется из текущего знакоместа. PAPER C Выбранный цвет становится текущим. При PAPER 8 цвет фона берется из текущего знакоместа. FLASH V Запрашивается новое значение мерцания (0, 1 или 8) BRIGHT Z Запрашивается новое значение яркости (0, 1 или 8) Все вышеприведенные команды занимают по одному байту. INVERSE I Переключает состояние INVERSE (инвер- сия). OVER O Переключает состояние OVER (наложе- ние). Ни INVERSE, ни OVERне занимают ни бай- та, но их состояние кодируется во всех командах, на которые они оказывают воз- действие. 3) Подпрограммная команда: GOSUB G Запрашивается номер картинки, который должен находиться в диапазоне от 0 до locno. Затем запрашивается масштабный ко- эффициент (от 0 до 7), который определяет масштаб в восьмых долях. Если он равен 0, то картинка не масштабируется (8/8). За- имает 2 байта. Замечания: 1: Изменение масштаба отразится лишь для команд REL MOVE, LINE, FILL и SHАDE. Ко- манды ABS MOVE, PLOT, BLOCK и TEXT не масштабируются и, в основном, не должны использоваться в подпрограммах, хотя бу- дут работать как положено, и иногда могут быть успешно использованы. 2: Вызов вложенных подпрограмм (вызов подпрограммы из подпрограммы) может осу- ществляться до десятого уровня вложеннос- ти. 3: Масштабирование не действует за рам- ками GOSUB, т.е. если в подпрограмме бу- дет использоваться GOSUB, то отрисовывае- мый дроустринг не будет отмасштабирован. 4: Если подпрограмма будет вызывать саму себя, то произойдет ошибка "Limit reac- hed" "Достигнут предел", так как произой- дет вложенный вызов более десяти раз. 4) Команды редактирования: START > Устанавливает указатель на начало дроустринга. NEXT / Выполняет следующую команду дроустрин- га. Если таковой не будет, команда игно- рируется. PREVIOUS / Устанавливает указатель на одну коман- ду дроустринга назад и перерисовывает эк- ран. DELETE (CAPS SHIFT и 0 на 48K) Удаляет предыдущую команду дроустринга и перерисовывает экран. DELETE NEXT (CAPS SHIFT и 9 на 48K) Удаляет следующую команду дроустринга, если она есть. GRID Y Работает в качестве переключателя, ри- сует знакоместную сетку из INK 0, PAPER 7 и PAPER 6, что позволяет принимать во внимание атрибутные границы. G JOYSTICK J Включает/выключает Kempston (tm) joy- stick. Клавиши, находящиеся вокруг 'S' пере- двигают ПТ на пиксел за раз, а при нажа- том CAPS SHIFT - на 8 пикселов. Раскладка такова: Q W E A S Z X C Джойстик должен быть подключен на порт 2 к Interface 2 или Spectrum Plus 2. Он может также быть подключен к Kemp- ston (tm) interface, тогда SYMBOL SHIFT и J должны быть нажаты одновременно, чтобы PAW смог считывать оттуда сигналы. CAPS SHIFT также вызывает ускорение передвиже- ния джойстика в 8 раз. Кнопка FIRE будет вызывать то же действие, что и команда SYMBOL SHIFT и L - будет чертиться линия. X. Сообщения Редактора об ошибках и их значение. Из-за того, что PAW представляет собой довольно сложную программу, в результате его работы могут возникать ошибки. При обнаружении таковых, в нижней части эк- рана печатается их описание. Затем PAW ждет нажатия любой клавиши, после чего возвращается в то меню, при работе кото- рого произошла ошибка. Существует два ис- ключения: 1) При возникновении ошибки во время ре- дактирования дроустринга - в этом случае указатель помещается на команду, предшес- твующую той, при выполнении которой прои- зошла ошибка, т.о. выполнение команды NEXT вновь приведет к ошибке. Если не по- нятно, как можно исправить эту ошибку, то можно дать команду DELETE NEXT, и коман- да, выдававшая ошибку будет удалена. За- метьте, что последующие за неправильной команды еще не отрисованы, в них также может возникнуть ошибка. 2) При работе игры: если не присутствует редактор PAW, то после сообщения об ошиб- ке осуществляется переход на инициализа- цию новой игры. Если же редактор PAW при- сутствует, то в нижнюю часть экрана печа- тается строка диагностики. В ней отобра- жаются таблица процессов, глагол и сущес- твительное строки, а также кондакт, в ко- тором произошла ошибка. Затем осуществля- ется диагностика флагов, чтобы легче мож- но было подтвердить установленную причину возникновения ошибки. По нажатию ENTER печатается сообщение об ошибке и осущес- твляется переход в главное меню PAW. При использовании собственных программ с командой EXTERN, могут возникнуть ошиб- ки допущенные в блоке, который вызывается по EXTERN, поэтому оттестируйте свои про- раммы вне PAW. PAW также генерирует несколько ошибок амостоятельно: BREAK Во время операций со внешними устрой- ствами или во время работы игры нажали BREAK. STOP in INPUT Нажали CAPS SHIFT и 6. Tape loading error Как и в BASIC'е. Заметьте, что ошибки во время загрузки базы данных фатальны для последней, поэтому требуется загру- зить базу данных заново. Database full Нет места в базе данных под то, что Вы пытались сделать. Limit reached Максимальное число локаций, сообщений, объектов, таблиц процессов или RAM стра- ниц уже задействовано. Иначе - достигнута максимальная глубина вложенности в под- программах или в подпроцессах (равна 10). Также может произойти из-за попытки сде- лать DOALL в цикле DOALL. Integer our of range Во время рисования картинки команда LINE вышла за размеры экрана. Это обычно происходит из-за изменения начальной точ- ки во время редактирования. Out of memory Появляется, если строка из таблицы процессов или из таблицы соединений не входит в буфер (случается довольно ред- ко). Также появляется, если попытаться начать работать с новой RAM страницей на 48К машине, загружать 128К игру на 48К машину. Также может появиться при недо- статке рабочего места из-за установки ка- налов перед загрузкой или из-за большого размера программы, работающей с EXTERN. Invalid Argument Печатается, если кондакт обнаруживает некорректный аргумент, например, при по- пытке занести в флаг 38 номер несуществу- ющей локации, при попытке произвести PUTIN/TAKEOUT над объектом, не являющимся контейнером, при установке объекта в ло- кацию 255 (только COPYFO). Замечания: 1: Во время ввода машина может издать низкий сигнал, если возникнет переполне- ние экрана и/или входного буфера. 2: Если в базе данных существует строка, которая будет слишком длинна, чтобы по- меститься на одном экране, машина может издать низкий сигнал, когда эта строка будет напечатана в нижнюю часть экрана для исправления. 3: Если в таблицу соединений будет вве- дена слишком большая строка путем исполь- зования сокращений типа N 1 W 6 и т.п., а сокращения будут затем удалены, то при декодировании получится строка NORTH 1 WEST 6 и т.п., которая может не войти в буфер ввода. Если такое случится, то бу- дет выдано Out of memory. Выходом будет вновь ввести эти сокращения в словарь. 4: При работе с дисковой версией могут наблюдаться незначительные расхождения в получаемых ошибках. XI. PAW и принтер. PAW печатает на принтер, используя ка- нал #3 (обычно "P"). Если это обычный ZX термопринтер или его эквивалент Alphacom, то печать проис- ходит с использованием стандартных под- программ, прошитых в ПЗУ. На 128К машинах термопринтер работает в режиме 48К и пе- чатает в точности то, что находится на экране, используя те же самые символьные наборы и т.д. Опции "C" в символьном и графическом меню выполнят стандартную ко- манду COPY. На 128К машинах канал принтера выво- дится на порт RS232, и PAW это знает. Весь текст, идущий на печать, направляет- ся в указаный порт, при этом символы фильтруются следующим образом: 0 - 31 подавляются, исключая 7 и 13, что печатаются как CR (13), и 6 (TAB), что печатается как про- бел 32 - 127 печатаются как и должны 128 - 162 печатается вопрос ("?") 163 и 164 токены PLAY и SPECTRUM. .165 - 255 либо стандартные токены, если база данных не компрессирована, либо токены PAW, если база дан- ных компрессирована. Если у Вас стоит Interface 1, то можно использовать RS232 для печати, путем от- крывания канала "t" командой OPEN #3, "t" перед загрузкой PAW. Тогда канал будет работать как описано для RS232 в 128К ма- шинах. В общем случае можно использовать лю- бой принтер, который корректно переадре- совывает канал #3, с условием, чтобы для принтера не играла никакой роли эта пере- адресация. Если же эти условия не выполняются, то если Вы неплохо знаете ассемблер, то мо- жете написать свой драйвер принтера. По- сле загрузки PAW печатает адрес PRTADD, который увказывает на вектора внутри PAW, связанные с системой принтера (символ на- ходится в A): PRTADD DEFW PRTRET; Адрессимвольного вывода COPVEC JP DOCOPY; Здесь происходит ко- пирование экрана PRTRET RET ; Сюда пишется Ваш драйвер Память свободна до 29504. Сохраните свой драйвер с адреса запуска, имя файла в десятой позиции должно содержать символ "А", сохраните также файл длиной 0 байт с символом "B" в десятой позиции имени фай- ла. Вы должны переадресовать канал #3 (Куда угодно), чтобы PAW подумал, что пе- ред его загрузкой был подключен нетер- мальный принтер. Затем в главном меню ис- пользуйте опцию Load database (Загрузить базу данных) для того, чтобы загрузить свой драйвер (PAW будет думать, что Вы загружаете базу данных и загрузит оба файла, один из которых и содержит драй- вер). _______________________________
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября