Ромеро, продвинутый геймер, сыгравший, наверное, во все имеющиеся для PC игры, никогда не видел ничего подобного; у ребят был шанс стать первыми в этом направлении. Они назвали свою игру Slordax; она напрямую наследовала такие аркадные хиты, как Space Invaders или Galaga. У парней было четыре недели на ее создание.
Команда сработалась с первых дней. Кармак корпел над кодом для движка графики, пока Ромеро занимался дизайном игрушки. Тому Холлу порой удавалось проникнуть в офис Gamer’s Edge, чтобы поработать над внешним видом чудовищ и общими декорациями Slordax. Адриан же был всецело поглощен созданием космических кораблей и астероидов. Ромеро с самого начала понял, что стажер крайне талантлив.
И хотя для Адриана компьютер оставался все еще чем-то непривычным, он быстро приноровился к его палитре. Компьютерный арт в то время был чем-то сродни пуантилизму
[23]
из-за ограниченных возможностей графики. Большинство палитр имели только четыре цвета, существовал так называемый Computer Graphics Adapter, CGA; но недавняя эволюция в мире игр привела к появлению шестнадцати цветов в Enhanced Graphics Adapter, EGA. Но и этого оказалось мало для настоящего художника. В распоряжении Адриана было всего несколько цветов. Он даже не мог их смешать; ему оставалось лишь рисовать целые миры тем, что имелось под рукой. Профессионалы называли это pushing pixels. Было ясно, что Адриан легко с ними справлялся.
Также было ясно, что Адриан особо не горел желанием рассказывать что-либо о себе. Одной из причин являлось то, что он до сих пор не определился, как относиться к своим коллегам. Кармак напоминал робота: он говорил, зависая после каждого предложения с «м-м-м», и мог целый день просидеть за компьютером, не произнеся ни слова, но при этом выдавая шедевр за шедевром. Ромеро точно был чокнутым со своими шуточками об эвисцерации
[24]
и расчлененке, а также с мультиками о Мелвине, которые он так и продолжал рисовать. При этом Адриан находил его забавным.
Вот Том Холл – совсем другое дело. Адриан увидел его впервые, когда тот прискакал в комнату в голубых колготках, белой нижней рубашке и кепке, держа в руках меч. Том стоял, подняв одну бровь, и издавал какие-то нечеловеческие звуки, на что Ромеро реагировал лишь громким смехом. Это был костюм Тома на Хеллоуин. Том иногда оставался, чтобы помочь с дизайном и инструментарием для игры, но Адриан был счастлив, что тот не торчал тут все время.
Однажды вечером, когда все сотрудники, включая Ромеро и Адриана, уже разошлись по домам, Том засиделся в офисе. Единственными, кто оставался, были он да Кармак. Работа над Slordax потихоньку подходила к концу, и Кармак занимался чем-то своим. Сова по природе, он любил засиживаться в офисе до утра, наслаждаясь тишиной и одиночеством, используя дивный шанс погрузиться с головой в работу. Он делал то, что ему всегда нравилось: писал коды для игр и был счастлив не думать о будущем. Если бы он имел возможность сидеть здесь безвылазно, работая над играми, и иметь достаточно денег на продукты и крышу над головой, он был бы доволен. Как он заявил парням в первые дни совместной работы: посади его в клетушку с компьютером, пиццей и парой банок диетической колы, и ему этого вполне хватит для полного счастья.
Том устроился в кресле, и Кармак стал рассказывать ему, как он додумался до создания анимированной графики. Экран отображает тысячу пикселей; группа пикселей образует тайл. Когда художник делает игру, он сначала использует пиксели, чтобы создать тайл, а уже потом из этих тайлов формирует мир на экране. Это напоминало процесс выкладывания кафельной плиткой пола на кухне. Имея в распоряжении изобретенный Кармаком способ оживления изображения, можно было существенно улучшить картинку на экране.
– Я смогу сделать так, – предложил он, – что твой персонаж будет запрыгивать на тайл и действовать дальше уже оттуда.
– Это несложно? – поинтересовался Том.
– Совсем нет, м-м-м, – ответил Кармак. – Мне только нужно знать, какие именно действия программировать: что именно будет делать персонаж, когда запрыгнет на анимированный тайл.
«Это очень круто», – подумал Том, потому что игры типа Super Mario Brothers 3 полностью состояли из таких вот тайлов; например, персонаж мог допрыгнуть до мигающего кубика, из которого потом сыпался дождь из золотых монет. Том был заинтригован.
Кармак нажал несколько кнопок на клавиатуре и показал Тому свой новый личный рекорд: сайд-скроллинг
[25]
. Эффект, набравший популярность благодаря Defender и Mario, позволял увидеть, что игровой мир продолжается, когда персонаж приближается к одному из краев экрана. Потратив несколько ночей на эксперименты, Кармак наконец понял, как имитировать это движение на PC. Как всегда, он решил проблему по-своему. Слишком многие, как ему казалось, выбирали путь наименьшего сопротивления. Но это не имело смысла. Сначала он испытал самый очевидный способ, работая над программой, которая бы рисовала графику ровно по всему экрану. Это не давало эффекта, так как (и все это знали) PC работал слишком медленно. Затем он выбрал другой вариант: оптимизацию. Интересно, был ли какой-то способ использовать компьютерную мощь на полную катушку, чтобы изображения прорисовывались быстрее? Перепробовав все возможные варианты, он пришел к выводу, что решения нет.
Но затем начал думать в таком ключе: итак, чего я пытаюсь добиться? Я хочу, чтобы экран двигался аккуратно вместе с персонажем. Кармак вспомнил свою более раннюю игру, The Catacomb. В ней ему удалось создать такой эффект, что экран прокручивался тайл за тайлом вместе с героем, подходившим к концу подземелья. Этот прием был известен как tile-based scrolling, позволявший двигать экран поэтапно, фрагмент за фрагментом. Что Кармаку нужно было теперь, так это сделать движение экрана более плавным, даже если бы персонаж перемещался совсем незаметно. Но проблема заключалась в том, что компьютер затрачивал слишком много времени и сил на прорисовку всего изображения при малейшем движении персонажа. И вот тогда-то Кармака и осенило!
«А что если, – подумал он, – вместо того чтобы перерисовывать всю картинку, поискать способ перерисовывать только те фрагменты, которые действительно меняются? Тогда скроллингового эффекта достичь будет проще». Он представил себе, как бы выглядел экран компьютера, если бы персонаж бежал вправо, а над ним сияло голубое небо. Чтобы передать движение, можно нарисовать над его головой белое пушистое облако. Компьютер выдавал этот эффект очень примитивным образом, перерисовывая каждый крошечный голубой пиксель, начиная с верхнего левого угла и двигаясь дальше вдоль всего экрана, по пикселю за раз, хотя единственное, что менялось в небе, – белое пушистое облачко. Компьютер не мог интуитивно сократить столь монотонный процесс, хотя это было самым разумным. Поэтому Кармак сделал следующее: он решил перехитрить компьютер и заставить его работать эффективнее. Благодаря новому коду Кармака ПК стал считать, что, скажем, седьмой тайл слева являлся на самом деле первым на экране, и начинал прорисовывать новый объект именно там, где было нужно Кармаку. Вместо того чтобы снова и снова перерисовывать маленькие голубые пиксели неба, предшествовавшие облаку, компьютер начинал сразу с облака. Чтобы игрок почувствовал эффект плавного движения, Кармак добавил еще одну деталь: он дал компьютеру команду нарисовать дополнительный тайл голубого цвета за пределами правого края экрана и сохранить его в памяти до того момента, когда игрок туда доберется. И так как эти тайлы уже находились в памяти, компьютеру не нужно было их прорисовывать – он мог быстро вывести их на экран. Кармак назвал весь процесс adaptive tile refresh.