Но затем начал думать в таком ключе: итак, чего я пытаюсь добиться? Я хочу, чтобы экран двигался аккуратно вместе с персонажем. Кармак вспомнил свою более раннюю игру, The Catacomb. В ней ему удалось создать такой эффект, что экран прокручивался тайл за тайлом вместе с героем, подходившим к концу подземелья. Этот прием был известен как tile-based scrolling, позволявший двигать экран поэтапно, фрагмент за фрагментом. Что Кармаку нужно было теперь, так это сделать движение экрана более плавным, даже если бы персонаж перемещался совсем незаметно. Но проблема заключалась в том, что компьютер затрачивал слишком много времени и сил на прорисовку всего изображения при малейшем движении персонажа. И вот тогда-то Кармака и осенило!
«А что если, – подумал он, – вместо того чтобы перерисовывать всю картинку, поискать способ перерисовывать только те фрагменты, которые действительно меняются? Тогда скроллингового эффекта достичь будет проще». Он представил себе, как бы выглядел экран компьютера, если бы персонаж бежал вправо, а над ним сияло голубое небо. Чтобы передать движение, можно нарисовать над его головой белое пушистое облако. Компьютер выдавал этот эффект очень примитивным образом, перерисовывая каждый крошечный голубой пиксель, начиная с верхнего левого угла и двигаясь дальше вдоль всего экрана, по пикселю за раз, хотя единственное, что менялось в небе, – белое пушистое облачко. Компьютер не мог интуитивно сократить столь монотонный процесс, хотя это было самым разумным. Поэтому Кармак сделал следующее: он решил перехитрить компьютер и заставить его работать эффективнее. Благодаря новому коду Кармака ПК стал считать, что, скажем, седьмой тайл слева являлся на самом деле первым на экране, и начинал прорисовывать новый объект именно там, где было нужно Кармаку. Вместо того чтобы снова и снова перерисовывать маленькие голубые пиксели неба, предшествовавшие облаку, компьютер начинал сразу с облака. Чтобы игрок почувствовал эффект плавного движения, Кармак добавил еще одну деталь: он дал компьютеру команду нарисовать дополнительный тайл голубого цвета за пределами правого края экрана и сохранить его в памяти до того момента, когда игрок туда доберется. И так как эти тайлы уже находились в памяти, компьютеру не нужно было их прорисовывать – он мог быстро вывести их на экран. Кармак назвал весь процесс adaptive tile refresh.
Как понял Том, это означало только одно:
– Давай так и поступим! – воскликнул Том. – Давай сегодня же разработаем первый уровень Super Mario!
Он подключил Super Mario к телевизору в офисе Gamer’s Edge и стал играть. Затем открыл тайловый редактор[26], в котором они работали на своих PC. Подобно художнику, делающему копию с картины, он воссоздал каждый крошечный тайл первого уровня Super Mario на PC, поставив Nintendo на паузу. Он перенес все: золотые монеты, пушистые белые облака; единственное, что он поменял, это персонажа. Вместо того чтобы копировать Марио, он использовал стоковую графику, которая была у них в Dangerous Dave. А Кармак в это время оптимизировал сайд-скроллинговый код, приводя в исполнение элементы игры, поставленной Томом на паузу. Несколько десятков банок колы валялись на полу, когда парни закончили первый уровень. На часах было 5:30 утра. Ребята сохранили уровень на диске, положили его на стол Ромеро и разошлись по домам спать.
Придя на следующий день в офис, Ромеро увидел на своем столе диск и записку со словом «Dave2», написанную рукой Тома. Ромеро вставил диск в компьютер и набрал путь к файлу. Экран потемнел. А затем на нем появились следующие слова:
По одну сторону отобразился портрет Dangerous Dave, одетого в зеленую футболку и красную бейсболку. По другую – строгий судья в белом парике, ударяющий молотком. Ромеро в нетерпении нажал «пробел», жаждая узнать, что будет дальше. Итак, знакомая обстановка Super Mario Brothers 3: бледно-голубое небо, пушистые белые облачка, пышные зеленые кусты, анимированные тайлы с маленькими вопросительными знаками… и, странное дело, персонаж Dangerous Dave, стоящий наизготовку для начала игры. Ромеро перешел на клавиши со стрелками, подвигал Дэйва, а затем стал смотреть, как тот плавно идет вдоль экрана. И вдруг он потерял его.