Home » Ошибка с мастер-диском в Space Quest II

Ошибка с мастер-диском в Space Quest II

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

Если где-то в вашей коллекции приключенческих игр Sierra скрывается одна из этих дискет емкостью 720 КБ, то, скорее всего, вы не одиноки. Версии 2.0D и 2.0F Space Quest II не были редкостью.

Простой список каталогов

Перечисление файлов на диске не выявило ничего необычного:

Показанный листинг относится к версии 2.0D. Никаких загадочных дополнительных файлов нет, по сути он выглядит как любой другой диск с игрой Sierra. Ничто не является неуместным.

Временные метки показывают, что основные файлы данных игры, то есть PICDIR, LOGDIR, VIEWDIR, SNDDIR, VOL.0 и VOL.1, были созданы 14 марта 1988 года. Файлы .OVL датированы 15 марта 1988 года, а интерпретатор AGI сам код датирован 18 марта 1988 года. Эти временные метки файлов отражают неделю деятельности, в течение которой кто-то в офисе Sierra был сосредоточен на подготовке 2.0D-версии Space Quest II.

Одна вещь, которая немного любопытна в приведенном выше списке каталогов, заключается в том, что «свободное» пространство на диске больше, чем используемое. Использовано 302 918 байт и предположительно свободно 402 432 байта.

Использование шестнадцатеричного редактора

Чтобы поближе взглянуть на то, что находится на диске, и заглянуть в эту якобы неиспользуемую часть, нам понадобится инструмент, называемый шестнадцатеричным редактором. Еще в 1980-х годах широко используемым инструментом для этого была Norton Utilities. В наши дни отличным современным эквивалентом является превосходный HxD Hex Editor, написанный Маэлем Хёрцем.

Для только что отформатированной дискеты DOS мы ожидаем, что все неиспользуемые сектора будут заполнены значением байта 0xF6 (т.е. байтом-заполнителем формата DOS по умолчанию), что действительно имеет место для Диска 2 Space Quest II версии 2.0. D, как показано ниже:

Однако на Диске 1 нет ни одного неиспользуемого сектора, заполненного байтом 0xF6; фактически самая длинная строка последовательных байтов 0xF6 на Диске 1 состоит всего из двух. Учитывая, что более половины диска представляет собой «свободное» пространство, очевидно, что диск не был отформатирован перед подготовкой в ​​качестве главного диска SQ2. Ниже показан пример раздела диска SQ2 Disk 1, помеченного как неиспользуемый:

Вместо того, чтобы заполняться байтом 0xF6, он заполняется чем-то, похожим на исходный код C. Это убедительно свидетельствует о том, что главный диск использовался для какой-то другой цели до того, как он стал главным диском SQ2 Disk 1. Затем файлы были удалены, но диск после этого не был должным образом отформатирован. Из-за особенностей работы файловой системы DOS FAT удаление файла фактически не приводит к удалению данных. Вместо этого он просто помечает сектора как неиспользуемые, чтобы в будущем их можно было использовать для нового файла. Если эти сектора никогда больше не будут использоваться для нового файла, то они сохранят то, что ранее хранилось на них, поэтому было важно, чтобы люди полностью форматировали дискету после сохранения на ней конфиденциальных файлов.

Read more:  Ошибка с фотографией герцогини Кейт: почему за ней подозревают сотовый телефон Google

Исходный код интерпретатора AGI

Трудно точно увидеть, как выглядят приведенные выше данные при просмотре в шестнадцатеричном редакторе, но они явно похожи на текст, поэтому давайте скопируем и вставим текст ASCII с правой стороны в текстовый редактор, чтобы увидеть, что у нас есть:

Как мы видим, это действительно похоже на исходный код C. Определены две функции: одна называется DisplayStatusLine, а другая — StatusLineOn. В случае с DisplayStatusLine отображается строка текста, включающая текущий счет и сведения о том, включен или выключен звук. Это выглядит знакомо? Держу пари, что так и есть. Взгляните на верхнюю часть экрана Space Quest II ниже:

Этот конкретный фрагмент исходного кода C отвечает за отображение белой строки состояния в верхней части игрового экрана с черным текстом, который показывает пользователю, какой у него текущий счет. Этот исходный код является частью самого интерпретатора AGI!

Это всего лишь один небольшой пример. Пролистывание неиспользуемых секторов в шестнадцатеричном редакторе показывает, что такого исходного кода очень много. Мало того, код хранится в последовательных секторах, то есть он не фрагментирован, как можно было бы ожидать, поэтому относительно легко извлечь эти данные с диска, а затем разделить их на отдельные исходные файлы C. Точки разделения легко определить, поскольку вверху каждого файла есть комментарий, в котором указывается имя исходного файла. Разделение на отдельные файлы дает нам всего 93 файла, состоящих из 75 исходных файлов C, 16 исходных файлов языка ассемблера и 2 файлов DOS BAT:

Всего имеется более 15 000 строк кода, и большинство этих файлов завершены.

Оказывается, этот диск с игрой Space Quest 2 содержит около 70% исходного кода интерпретатора AGI Sierra On-Line, включая комментарии и историю изменений. Далее в статье мы рассмотрим, как рассчитывалась цифра 70%.

Когда мы говорим «интерпретатор AGI», мы имеем в виду файл с именем «AGI» в списке каталогов, показанном ранее, вместе с файлами .OVL. Файл «AGI» — это исполняемый файл, который выполняет фактическую интерпретацию игровых данных, содержащихся в файлах LOGDIR, PICDIR, VIEWDIR, SNDDIR, OBJECT, WORDS.TOK и VOL.

История изменений исходного файла

Некоторые исходные файлы содержат историю изменений в комментарии к заголовку вверху. Ниже приведен пример исходного файла ANIMATE.C:

Комментарий к заголовку начинается с указания имени исходного файла. Затем он дает краткое описание того, что он делает, в данном случае «Обработка одного цикла анимации в приключенческой игре». Далее у нас есть строка «компилировать: MWC». Похоже, здесь указано имя компилятора C, который использовался для компиляции исходного кода C. MWC — компилятор C от компании Марка Уильямса, который был очень популярен в те времена. После этого в шапке есть раздел «История изменений», что делает чтение очень интересным. В нем упоминаются дата, время, инициалы лица, внесшего изменение, и описание изменения.

Read more:  Стоян Михалев из ПП-ДБ: С каждыми последующими выборами становится все сложнее

Программисты представились, используя свои инициалы, в том числе инициал отчества. JAS — это не кто иной, как Джефф Стивенсон, главный программист, работавший над кодом интерпретатора AGI, а DCI — Крис Иден. Если вы посмотрите на титры игр AGI 1985-89 годов, вы увидите, что Джеффу и Крису всегда приписывали работу над системой разработки игр.

Роберт Хейтман также упоминается, но его внимание было в основном сосредоточено на графических инструментах (т.е. редакторе изображений (PE) и редакторе представлений (VE)), тогда как Джефф и Крис работали в основном над кодом интерпретатора. Поэтому неудивительно видеть их инициалы в истории изменений исходного кода C интерпретатора AGI.

Карта памяти AGI.EXE

В дополнение к 93 файлам исходного кода интерпретатора AGI диск SQ2 2.0D 720 КБ Disk 1 также содержит более 2000 строк карты памяти исполняемого файла AGI.EXE. Для производственных выпусков игр AGI исполняемый файл интерпретатора называется просто AGI и не является исполняемым напрямую, но во время разработки игр Sierra On-Line использовала версию интерпретатора с расширением .EXE, которую можно было запускать напрямую. . Кто-то в Sierra создал карту памяти исполняемого файла AGI.EXE, то есть интерпретатора AGI, 7 октября 1987 года. Небольшой ее фрагмент показан ниже:

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

Карта памяти также дает нам довольно полный список модулей и исходных файлов, составляющих интерпретатор AGI. Каждый модуль указывает файл, в котором он определен. Если мы посчитаем количество упомянутых отдельных исходных файлов, оно составит 98. Число тех исходных файлов, которые полностью присутствуют на диске SQ2, равно 71. Вот где мы получаем эта цифра составляет примерно 70% от объема исходного кода интерпретатора AGI, находящегося на диске SQ2. Для некоторых модулей включен только заголовочный файл C, поэтому эти модули не включены в этот расчет.

Интеллектуальная собственность Сьерры

В 1984 году Sierra On-Line удалось выжить как бизнесу. Незадолго до выхода King’s Quest, в мае/июне того же года, Кену Уильямсу пришлось уволить около 100 своих сотрудников, сократив количество сотрудников примерно со 130 до примерно 30. Хотя это была борьба, часть того, что Судьбу изменил успех системы приключенческих игр AGI и игр, созданных с ее использованием. К концу 1984 года King’s Quest вошла в двадцатку лучших в чартах продаж программного обеспечения для компьютерных игр. Он оставался там в течение следующих полугода, вплоть до выпуска King’s Quest II, и вскоре King’s Quest II тоже оказался в чартах. Этому во многом способствовала сделка, которую Sierra заключила с Tandy Radio Shack о продаже версий игр Tandy в магазинах Radio Shack.

Игры AGI продолжали оставаться бестселлерами с 1985 по 1988 год. В те годы интерпретатор AGI был основным средством зарабатывания денег Sierra On-Line и, следовательно, основной частью их интеллектуальной собственности. Они не только изобрели жанр приключенческих игр с 3D-анимацией, но и имели преимущество перед конкурентами, которое продержалось несколько лет. Можно с уверенностью сказать, что исходный код интерпретатора AGI — это то, что Sierra не хотела бы попасть в руки своих конкурентов.

Read more:  «Должна быть ошибка» — шок от счетов за электроэнергию — RTE.ie

То, что 70% исходного кода в конечном итоге было массово скопировано и отправлено десяткам, если не сотням тысяч их клиентов, было большой ошибкой.

Как это произошло?

Когда Sierra готовила новую версию игры, она включала создание главного диска «производственной копии», который будет использоваться машиной для копирования дисков FormMaster. Эта машина не просто копировала файлы с главного диска в каждую копию, а вместо этого копировала каждый байт каждого сектора диска, независимо от того, использовались ли эти сектора в данный момент или нет. В случае дисков SQ2 Disk 1 версий 2.0D и 2.0F это означало, что он также скопировал предположительно неиспользуемые 402 432 байта, хотя для этого не было никаких причин. Вот почему подготовка мастер-диска включала в себя его полное форматирование перед копированием на него игры, и по большей части Sierra On-Line сделала этот шаг правильно. Большинство оригинальных дисков с игрой Sierra были отформатированы перед использованием. Казалось бы, кто-то забыл сделать это для диска Space Quest II версии 2.0D Disk 1, и этот же диск затем использовался и для версии 2.0F SQ2.

Это означало, что потенциально на сотнях тысяч дисков SQ2, отправленных покупателям и розничным магазинам, была спрятана копия 70% исходного кода интерпретатора AGI.

Увернулся от пули

Почти наверняка это была непреднамеренная ошибка, но если бы кто-нибудь в Сьерре осознал, что это произошло в то время, то это могло бы стать преступлением, за которое можно было бы уволить. Удивительно, но никто, похоже, не заметил, что это произошло, ни Sierra, ни их конкуренты или их клиенты, и это было обнаружено только десятилетия спустя, первое известное открытие этого онлайн-пользователя NewRisingSun в октябре 2016 года.

Также случайно, что это произошло в конце эпохи ОИИ. В марте 1988 года Sierra уже разработала свою систему приключенческих игр SCI и собиралась выпустить первую игру, использующую ее, — King’s Quest IV. Таким образом, «потеря» исходного кода интерпретатора AGI в общественное достояние, если бы кто-то это заметил, возможно, не была бы такой радикальной, как это было всего за год или два до этого.

Тем не менее, это создает интересную историю цифровой археологии и позволяет нам 36 лет спустя увидеть, как наши герои из Sierra On-Line написали свой интерпретатор AGI.


Для тех, кому интересно, я загрузил извлеченный исходный код интерпретатора AGI в репозиторий GitHub: https://github.com/lanceewing/agi

Проверить ГИБКИЙвеб-интерпретатор AGI, реализация которого частично основывалась на исходном исходном коде AGI.


2024-05-23 15:16:20


1716480944
#Ошибка #мастердиском #Space #Quest

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.