Здесь вкусная еда.
Здесь бутылка воды.
]
Тут все стало очень интересно. Роберта была в этот момент неподалеку на кухне, и я позвал ее к компьютеру. Она прочитала напечатанный текст у меня из-за плеча, а затем отодвинула меня в сторону. Она хотела сама попробовать. Я был недоволен! Только вошел во вкус, а жена отобрала у меня игрушку.
Весь остаток вечера я не мог даже подойти к телетайпу. Для Роберты всего окружающего мира словно не существовало, и она пробыла в таком состоянии несколько часов. Насколько мне помнится, она просидела за игрой всю ночь и к утру прошла полностью. Если верить самой Роберте, прохождение заняло у нее от нескольких недель до месяца.
Работа над моим компилятором Fortran шла бойко, и вскоре она стала гораздо проще – Apple выпустила дисковод для гибких магнитных дисков (дискет). Аудиокассеты были медленными и ненадежными носителями информации, тогда как на дискету помещалось уже около 110 тысяч байт (символов) информации. Дискеты, правда, тоже были ужасно медленными, но хотя бы более надежными.
Дискета на 110 Кб. Сюда может поместиться одна картинка в низком качестве
Ранняя текстовая приключенческая игра от Скотта Адамса и Adventure International
Тем временем Роберта тосковала по уже пройденной Colossal Cave – ей хотелось поиграть во что-нибудь подобное.
Я заказал ей несколько игр на аудиокассетах – их выпускала флоридская компания под названием Adventure International. Разрабатывал их некий Скотт Адамс, и устроены они были примерно так же, как и Colossal Cave. Игрок вводил с клавиатуры команды, чтобы исследовать мир, который игра полностью описывала текстом. Роберта быстро прошла все купленные игры, а затем начала думать о том, не создать ли ей собственную…
Жена несколько раз пыталась показать мне, над чем работает, но я был занят и все пропускал мимо ушей. Все мое время поглощали разрабатываемый компилятор, основная работа на полную ставку и попутные подработки.
И вот однажды в субботу вечером наша жизнь круто изменилась, когда Роберта сказала, что хочет сходить со мной на ужин в ресторан – у нее для меня какой-то сюрприз. Я понятия не имел, что это может быть за сюрприз. Мы заказали столик в шикарном стейк-хаусе (The Plank House) и вызвали детям няню.
Что бы там Роберта ни задумала, это, похоже, было для нее важно.
За ужином Роберта изложила идею собственной приключенческой игры. Она задумала игру под названием Mystery House («Таинственный дом») – концепция в целом была основана на романе Агаты Кристи «Десять негритят» и настольной игре «Клуэдо»[13]. В Mystery House восемь персонажей должны были оказаться заперты в доме, где их одного за другим убивали. Пока Роберта описывала убийства, мне хотелось спрятаться под стол: жена оперировала словами, не слишком типичными для романтического ужина: «убийство», «смерть», «пистолет», «нож», «кровь» и «душить». Другая семейная пара за соседним столиком явно слышала обрывки разговора и видела, как Роберта оживленно и очень громко говорит что-то в духе: «Ледорубом в глаз – разве не здорово?»
Роберта продолжила обсуждение и по возвращении домой – она раскатала на кухонном столе большой лист ватмана, весь разрисованный пузырями с текстом и соединительными линиями. В пузырях значились описания мест: «Крыльцо», «Кладбище», «Чердак».
Роберта говорила, а я внимательно слушал. Наконец-то она меня заинтересовала! Я начал размышлять, как можно сделать такую игру. На мой взгляд, это была тривиальная задачка по программированию – полдня работы, и готова игра на радость Роберте. У нее эта идея явно вызывала нешуточный энтузиазм.
Я размышлял вслух и спросил Роберту: «Интересно, можно ли сделать так, чтобы игра показывала еще и картинки – где происходит действие?» Роберта спросила, возможно ли это, и я ответил: «Не думаю, но было бы забавно попробовать». Если я и собирался на несколько дней оторваться от своего компилятора, то только ради какого-нибудь развлечения. И я уже начал задаваться вопросом, можно на Apple II отображать картинки или нет.
Я, конечно, высказал идею ввести в игру графику, но почти сразу пришлось дать заднюю. Было бы забавно поэкспериментировать в этом направлении, но я бы вряд ли хоть чего-то добился. Изображения требуют больших объемов данных. Даже на одну-единственную картинку нужна была целая стопка дискет.
Роберта была в восторге! Она не сомневалась, что я смогу что-нибудь придумать, и хотела, чтобы я немедленно бросил свою возню с компилятором Fortran и накодил ей игру.
Теперь у Роберты была цель в жизни. А когда Роберта чего-то хочет, единственное, что можно сделать, – не стоять у нее на пути.
Глава 8. (1980) Детища Роберты (это игра и компания!)
Я упряма, честолюбива и точно знаю, чего хочу. Если это делает меня стервой – окей.
Роберта твердо собралась не давать мне покоя, пока я не придумаю, как сделать ей игру. Текстовую игру написать было проще простого. Но на ватмане у Роберты было вычерчено штук тридцать или сорок пузырьков, и каждый изображал то или иное место в игре. Нарисовать в виде какой-то графики хотя бы одну такую локацию на компьютере Apple II было просто нереально. Я считал, что Роберта зря тратит время, но в то же время не мог перестать думать о том, как бы это реализовать.
Роберта была настолько уверена в моих способностях, что начала делать эскизы локаций. Я наблюдал за тем, как она рисует, и у меня-таки возникла идея.
В одном из немногочисленных тогда калифорнийских компьютерных магазинов я увидел штуковину под названием VersaWriter. С ее помощью можно было перенести рисунок в компьютер.
Моя идея заключалась в том, чтобы с помощью VersaWriter занести в память компьютера координаты только конечных точек линий вместо того, чтобы сохранять картинку пиксель за пикселем. Чтобы понять, что именно я тогда задумал: представьте себе координатную сетку и на ней простой прямоугольник. Его можно представить серией чисел, например 10, 20, 30, 40. Это может означать примерно следующее: «отсчитай 10 пикселей (точек) слева и 20 пикселей сверху и построй прямоугольник так, чтобы его нижний правый угол попал в другие координаты – 30 пикселей слева, 40 пикселей сверху». Таким же образом можно изобразить и линию, используя те же четыре байта (числа). Сейчас эта идея может казаться очевиднее некуда[14], но по тем временам это было что-то неслыханное. С таким подходом линию, прямоугольник или даже круг можно было описать с помощью ничтожного объема данных.
К VersaWriter прилагалось готовое программное обеспечение, но мне нужно было написать свою собственную программу, которая позволила бы Роберте «прорисовывать» свои рисунки на компьютере по одной точке за раз. Местный компьютерный магазин дал мне контакты разработчика VersaWriter – тот посчитал, что у меня клевая идея, и предоставил всю техническую информацию, чтобы я мог написать нужные для Роберты утилиты.
Роберта прилепила клейкой лентой свой рисунок к чертежной доске VersaWriter и стала отмечать конечные точки линий с помощью пантографа. В конце каждой линии она нажимала клавишу «Ввод» на клавиатуре Apple II. Несколько минут такой работы, и на экране появилась готовая картинка! Открывающее изображение дома заняло всего около 150 байт! Ну, положим, чуть более детализированная картинка заняла бы чуть больше памяти, но внезапно игра моей жены стала вполне возможной. Даже если бы картинки занимали по 200 байт каждая, семьдесят картинок заняли бы всего около 14 килобайт, или пятую часть дискеты!
Игра, с которой все началось: Mystery House
Мне пришлось посоветовать Роберте не слишком детализировать свои картинки. 80 килобайт свободной памяти на дискете – это не так уж и много. Каким-то образом в этот крошечный объем памяти нужно было впихнуть и картинки, и игровую программу.
Я все еще размышлял над своим компилятором Fortran, а Робертина игра этому мешала. Нехорошо. Я знал, что мне нужно как-то обеспечить Роберту всем, что нужно для создания игры, иначе я никогда не закончу работу над компилятором.
Ей нужна была утилита, в которой можно было бы создавать игру, не досаждая мне. И которая бы могла скомпилировать игру так, чтобы все влезло на дискету. Чтобы понять проблему, возьмите буханку хлеба и попытайтесь запихнуть ее в рюмку. Если как следует сдавить, хлеб, конечно, влезет куда угодно, но на вкус он уже никогда не будет прежним.
Мне предстояло решить одновременно несколько проблем.
1) Надо было написать Роберте утилиту для создания рисунков.
2) Ее работы нужно было хранить (оцифровывать), чтобы они уместились на очень маленьком носителе.
3) Роберте понадобится еще одна или несколько утилит, с помощью которых можно было бы заскриптовать игру.
4) Ей понадобится компилятор, который соберет части ее игры и каким-то образом уместит их на дискету и в ограниченную память компьютера Apple II.
Делов-то!
В конце концов я придумал для игры очень простую концепцию с использованием таблиц, реализованных как набор обычных текстовых файлов. Я уж и не помню, что именно я делал, но помню, что файлы были такие: комнаты, объекты, сообщения, глаголы, существительные и действия.
При написании кода, на котором должна была работать игра, я ставил превыше всего многозадачность (в человеческом смысле). Я хотел, чтобы Роберта могла уже разрабатывать игру, пока я разбираюсь с технологией. Чтобы добиться этого, я отделил логику игры от собственно кода, который должен был эту логику реализовывать.