Игра, с которой все началось: Mystery House
Мне пришлось посоветовать Роберте не слишком детализировать свои картинки. 80 килобайт свободной памяти на дискете – это не так уж и много. Каким-то образом в этот крошечный объем памяти нужно было впихнуть и картинки, и игровую программу.
Я все еще размышлял над своим компилятором Fortran, а Робертина игра этому мешала. Нехорошо. Я знал, что мне нужно как-то обеспечить Роберту всем, что нужно для создания игры, иначе я никогда не закончу работу над компилятором.
Ей нужна была утилита, в которой можно было бы создавать игру, не досаждая мне. И которая бы могла скомпилировать игру так, чтобы все влезло на дискету. Чтобы понять проблему, возьмите буханку хлеба и попытайтесь запихнуть ее в рюмку. Если как следует сдавить, хлеб, конечно, влезет куда угодно, но на вкус он уже никогда не будет прежним.
Мне предстояло решить одновременно несколько проблем.
1) Надо было написать Роберте утилиту для создания рисунков.
2) Ее работы нужно было хранить (оцифровывать), чтобы они уместились на очень маленьком носителе.
3) Роберте понадобится еще одна или несколько утилит, с помощью которых можно было бы заскриптовать игру.
4) Ей понадобится компилятор, который соберет части ее игры и каким-то образом уместит их на дискету и в ограниченную память компьютера Apple II.
Делов-то!
В конце концов я придумал для игры очень простую концепцию с использованием таблиц, реализованных как набор обычных текстовых файлов. Я уж и не помню, что именно я делал, но помню, что файлы были такие: комнаты, объекты, сообщения, глаголы, существительные и действия.
При написании кода, на котором должна была работать игра, я ставил превыше всего многозадачность (в человеческом смысле). Я хотел, чтобы Роберта могла уже разрабатывать игру, пока я разбираюсь с технологией. Чтобы добиться этого, я отделил логику игры от собственно кода, который должен был эту логику реализовывать.
В итоге Роберта написала «код» игры на самых обычных бумажных листочках. Затем этот текст мы набрали с клавиатуры – получились простые текстовые файлы, которые я потом сжал, чтобы они занимали как можно меньше места на дискете.
Она описала каждое место в игре примерно так:
Объекты были описаны с использованием того же подхода:
Глаголы:
Существительные:
Сообщения:
Чуть интереснее было с «действиями». Мне нужно было дать Роберте возможность писать код. У Роберты был некоторый опыт программирования, но навыков было немного. Мне предстояло написать на ассемблере настоящий код («интерпретатор»). Мой интерпретатор должен был считывать созданные Робертой таблицы и решать, что выводить на экран.
В таблице «Действия» происходило действие. Чтобы описать его, Роберте нужно было указать комнату, в которой будет происходить действие, какие условия должны быть выполнены, чтобы действие произошло, и что случится, если действие будет выполнено.
Прошло сорок лет, и я давно забыл, как именно выглядел код. Но я помню, что Роберта быстро во всем разобралась и смогла создать таблицу действий без моего участия.
Пока Роберта гейм-дизайнерствовала, исписывая одну стопку бумаги за другой, я писал код для нескольких утилит:
1) Жене нужен был какой-то простой экран для ввода данных, куда можно было бы вводить данные с клавиатуры и создавать текстовые файлы, которые я буду компилировать.
2) Ей нужен был компилятор, который брал бы ее текстовые файлы и компилировал их в серию чисел.
3) Ей нужен был интерпретатор, который бы выводил на экран игровой процесс уже на основе скомпилированных данных.
Тут нужно учитывать, что в те времена у разработчиков игр не было никакого инструментария. Сейчас есть приложения и для анимации, и для редактирования/отладки исходников, а тогда ничего этого не было. Мне каким-то образом удалось написать код прямо на машинном языке (он же ассемблер), но я не помню, как это сделал. Возможно, у самой Apple и были какие-то утилиты, но мне они были недоступны. Что бы я ни делал, это получалось очень примитивно, ужасно медленно и болезненно. И, не забывайте, у меня была еще и работа на полный день плюс несколько подработок. Выкроить сколько-то часов еще и для Робертиного проекта было нелегко.