В том, что касается использования памяти, Pirates! поставили перед нами весьма необычную проблему. Навигация и драки в игре были двухмерными, чтобы свести к минимуму необходимые для их обсчета ресурсы, но даже так большие фрагменты игры пришлось делать в текстовом формате. Ни для какой дополнительной анимации места попросту не оставалось. Мы, конечно, и так собирались оставить в стороне все промежуточные хождения, и все же то, что оставалось, выглядело слишком уж скудно. И мы решили попробовать использовать отдельные картинки – что-то вроде альбома, заполняют который сами игроки. К тому моменту видеокарты уже проделали большой путь и далеко ушли от глыбообразных крокодилов и шишкообразных обезьян, а мастерство Майкла Эйра росло с каждой созданной игрой. Передовые технологии и талант нашего художника позволили нам сделать весьма впечатляющую для того времени графику. Я хотел использовать в игре как можно больше этих замечательных изображений, но на все ресурсов по-прежнему не хватало. К счастью, нас спас программист Рэндал Мастеллер, который по-новому интерпретировал один старый добрый прием.
Операционные системы всегда оптимизировались для максимально эффективного хранения и отображения шрифтов, ведь без выведения текста на экран выполнить какие бы то ни было действия было бы нельзя. Именно шрифты загружались в память компьютера первыми, именно их легче всего было заменить или убрать. Программисты уже давно знали, что представление любой информации в форме шрифта позволяет загружать ее быстрее.
Обычно этот прием использовали при работе с небольшими картинками. Например, в моей первой символьной игре я использовал «звездочку» для изображения астероида, потому что ничего, кроме стандартных текстовых символов, у меня в распоряжении не было. Но шрифт вовсе не обязательно должен был состоять из букв и цифр. Если бы произошел этакий чудесный анахронизм и мой мини-компьютер Nova загрузился с игривым шрифтом Wingdings от Microsoft, то «звездочка» отобразилась бы как маленький конверт. При нажатии большой литеры M на экране высветилась бы классическая мультяшная бомба, вместо цифры 8 – миленький телефон с циферблатом. Конечно, остальные функции компьютера при таком раскладе стали бы недоступны, но идея здесь в том, что можно составить из маленьких картинок пользовательский шрифт, и он будет грузиться быстрее, чем если бы компьютер подгружал те же изображения через видеокарту.
Следующим шагом была загрузка в шрифтовом формате простых анимированных картинок – этот прием я использовал во Floyd of the Jungle. Каждое существо там изображалась одной буквой, а последние буквы алфавита были отведены под их слегка видоизмененные версии. Например, вместо символа «c» был крокодил с закрытой пастью, а вместо большой «C» – он же, только пасть была уже открыта. Если прописать команду быстрого переключения между двумя этими символами, на экране крокодил будет открывать и закрывать пасть. А если добавить в этот цикл еще пару крокодильих букв, то крокодил на экране научится ходить и щелкать челюстями одновременно. После загрузки шрифта в память на экран можно было вывести хоть одного крокодила, хоть сотню – это не требовало дополнительных ресурсов. Пока ваш алфавит не превышал максимально допустимого количества символов в шрифте – 256, – процессор компьютера мог переключаться между ними с той же легкостью, с какой он пролистывал текстовый файл.
Инструмент Рэндала позволял анализировать большую картинку и находить наиболее эффективный способ преобразования каждого блока размером 8 на 8 пикселей в шрифтовой символ. Эта техника представляла собой нечто вроде живописи цифрами: например, если верхний левый угол экрана был полностью занят небом, значит, символ «1» соответствовал сплошному блоку синего цвета, и все остальные большие куски синего также обозначались символом «1». Когда мы добирались до облака, цифрой «2» приходилось обозначать изогнутый кусок синего и белого, но потом наша задача опять упрощалась: подряд шел целый ряд белых кусков, и всем им соответствовал символ «3». Чем проще была картинка, тем больший размер изображения мы могли описать с помощью отведенных нам 256 символов. Когда игрок выбирал на экране пункт меню, мы стирали шрифт вместе со всем остальным, что было на экране, и загружали новое изображение.