Связь с администрацией сайта:       

demo

Среди толпы я одинок

12. Таблица объектов в Z-машине

12.1 Хранение
Таблица объектов проводится в динамической памяти и его адрес байта хранится в слове в заголовке на $ 0a . (Напомним, что объекты имеют флаги, так называемые атрибуты, пронумерованные от 0 и дальше, а вложенные переменные называются свойствами, пронумерованных от 1 и дальше. Объект не должен обеспечивать каждое свойство.)
 
12.2 Свойства по умолчанию для таблицы
Таблица начинается с блока, известного как таблица значений - по умолчанию «свойств». Он содержит 31 слово в версиях от 1 до 3 и 63 в версии 4 и более поздних версиях. Когда игра пытается прочитать значение свойства n для объекта, который не обеспечивает свойство n, n-я запись в этой таблице будет итоговым значением.
 
12.3 Дерево объектов
Далее это дерево объектов. Объекты нумеруются от 1 и дальше, номер объекта 0 не означает «ничего» (хотя нет формально такого объекта). Таблица состоит из списка элементов, по одному для каждого объекта.
12.3.1
В версиях от 1 до 3, имеется не более 255 объектов, каждый из которых имеет вход 9-байт следующим образом:
   дочерние свойства флаги родительского одноуровневых 32 атрибутов
  the 32 attribute flags     parent     sibling     child   properties
   ---32 bits in 4 bytes---   ---3 bytes------------------  ---2 bytes--
 
parentsiblingи childвсе должны иметь действительные числа объектов. Указатель  байта properties - адрес списка свойств, прикрепленных к объекту. Атрибуты 0 до 31 являются Flags (в любой момент времени, они либо на (1) или выключен (0)) , и сохраняют самый верхний бит: например, атрибут 0 сохраняет в бите 7 первого байта, атрибут 31 сохраняет в четвертый  бит 0.
12.3.2
В версии 4 и более поздних версиях имеется не более 65535 объектов, каждый из которых имеет запись 14 байта и записывается следующим образом:
    the 48 attribute flags     parent    sibling   child     properties
   ---48 bits in 6 bytes---   ---3 words, i.e. 6 bytes----  ---2 bytes--
 
 12.4 Таблицы свойств
Каждый объект имеет свою собственную таблицу свойств. Каждая из них может быть где угодно в динамической памяти (на самом деле, игра может изменить свойства таблицы адреса объекта в игре, при условии, что изменив на новые точки адреса на действительные адреса в другой таблице свойств). Заголовок таблицы свойств выглядит следующим образом:
   text-length     textofshortnameofobject
  -----byte----   --some even number of bytes---
 где text-length это число 2-байтовых слов, составляющих текст, который хранится в обычном формате. (Это означает, что имя объекта ограничено 765 Z-символами.) После того, как заголовок, свойства перечислены в порядке убывания или порядке возрастания номеров . (Этот порядок имеет важное значение и не является предметом конвенции.)
12.4.1
В версиях от 1 до 3, каждое свойство хранится в виде блока.
  size byte     the actual property data
                ---between 1 and 8 bytes--
где size byte выполнен в виде 32 и превышает число данных байтов минус один, плюс количество имущества. Список свойств завершается размером байта 0. (Это является недопустимым для размера байта быть кратным 32.)
12.4.2
В версии 4 и более поздних, блок свойство вместо имеет вид
   size and number       the actual property data
  --1 or 2 bytes---     --between 1 and 64 bytes--
 Свойство size and number занимает нижние 6 бит первого байта размера.
12.4.2.1
Если верхний бит (бит 7) первого байта размера установлен, то есть два размера и номер байта, то в первый байт, биты от 0 до 5 содержат номер собственности; бит 6 не определен; бит 7 установлен. Во втором байте, биты от 0 до 5 содержат длину данных свойств, подсчета в байтах; бит 6 не определен (устанавливается в сюжетных файлах Infocom); бит 7 всегда устанавливается.
12.4.2.1.1
*** [1,0] Значение 0, как длина данных свойств (во втором байте) следует интерпретировать как длину 64. (Inform может иметь такие свойства.)
12.4.2.2
Если верхний бит (бит 7) первого размера байта очищен, то есть только один размер, и номер байта. Биты от 0 до 5 содержат номер собственности; бит 6 либо очищает и указывает длину данных свойств 1, или устанавливает его, чтобы указать длину 2; бит 7 очищен.
12.5 Well-founded дерево
Это важно для игры, чтобы сохранить дерево объектов правильно(Well-founded): интерпретатор не требуется, чтобы проверить. "Well-founded" означает следующее:
(а) Объект с sibling также имеет parent.
(б) Объект является parent именно для этих объектов в списке sibling своего child.
(с) Каждый объект может быть задан на уровне n так, что объекты имеют parent на уровне 0 и все child уровня n объекта имеют уровень N + 1.
 
Примечание
Самый большой допустимый номер объекта не хранится где - нибудь в Z -машине.  Программы, такие как Infodump выводят это число, если предположить , что первоначально записи объекта заканчивается там , где начинается таблица свойств.
Игра «Sherlock» содержит ошибку в попытках установить и очистить атрибут 48.
Причина, потому что второй размер байта должен иметь верхний набор битов, что поле размер должен быть интерпретируемым вперед или назад - Z-машина должна быть в состоянии восстановить длину первого байта его данных. 
Бит 6 во втором байте в настоящее время пустует, а жаль, он же может быть использован, чтобы позволить расширить до 128 байт данные о свойствах. Но такое изменение приведет к краху сюжетных файлов Infocom (так как они устанавливают этот бит, в отличие от сюжетные файлов Inform).
Inform могут не только строить обоснованные деревья объектов в качестве начального состояния игры, но и легко собрать последовательности кода, как "переместить красный прямоугольник в синей коробке", а затем "переместить синий ящик к красной коробке".
 
 
Rate this item
(0 votes)
Login to post comments