реклама
Бургер менюБургер меню

Джон Ромеро – Икона DOOM. Жизнь от первого лица. Автобиография (страница 12)

18

Как мог заметить пытливый читатель, мои отношения с отчимом можно назвать сложными. Однако он оказал на мою жизнь и положительное влияние. Шунеман приютил нашу семью, заботился о нас, читал ненавистные мне лекции, которые каким-то образом осели в памяти, усвоились и стали дельным подспорьем для таланта, который он у меня замечал. Родители множества детей игнорировали их желание программировать и создавать игры или настаивали на выборе более традиционных профессий. Приобретение Apple II+ изменило мою жизнь.

Для нашей семьи покупка стала значимой – впрочем, оказалась бы таковой для любой семьи. Мой отчим взял полный набор: системник, периферию, монитор и принтер. Из бюджета ушло минимум пять тысяч долларов. Если бы кто-нибудь спросил меня парой месяцев ранее, окажется ли когда-нибудь подобный компьютер у нас дома – я бы лишь помотал головой. Такие суммы никогда не были нам по плечу. Впрочем, Джон надеялся, что я начну писать программы для бизнеса, нечто «полезное» – скажем, софт для организации телефонного справочника. Он считал, что это все приведет к тому, что я устроюсь на «настоящую» работу. Игры Шунеман все еще не рассматривал всерьез, чего нельзя было сказать про меня. Каждый день после школы я писал их одну за другой. Помню, как подумал: «Хочу заниматься этим каждый день до самой смерти». Желание выходить на улицу погулять пропало само собой.

В тот момент я еще не понимал, как именно сделать на компьютере игру, напоминавшую мои любимые забавы из аркадных автоматов с настоящей графикой. Роб Лэвлок открыл мне глаза на следующий шаг, подсказав, куда нужно копать, пока мы гоняли в Gorgon, написанную легендарным программистом Apple II Насиром Джебелли. Он принялся за дело рано, в 1980 году, и быстро сделал себе имя. В буквальном смысле – надпись «BY: NASIR» виднелась на стартовом экране каждого его творения. Он создавал свои проекты крайне расторопно, они казались технически безупречными и очень увлекательными[9].

Насир не просто гениально программировал видеоигры: он, помимо всего прочего, понимал, как придумать приятный геймплей. Мне нравилось, что все сделанное им уникально. Высокоскоростные гонки с видом сверху, аркада, в которой горизонтально двигающийся космолет расстреливает пришельцев и спасает людей, симулятор бомбежки вражеских территорий с самолета – его проекты доказывали, что он бросал себе технические вызовы и постоянно менял жанры. Отталкиваясь от его работ, я научился собирать игры вокруг определенной концепции или механики, давая пользователю все, чего он хочет, но избегая при этом лишних деталей, которые ничего не добавляли геймплею. Помимо прочего, я подмечал, что некоторые проекты Насира – это результат изучения им новой программистской техники. Например, появлялись новые графические возможности, и этот технологический метод применялся Джебелли на протяжении всего игрового процесса. Изучив его проекты, я понял, что лучше всего учиться непосредственно во время разработки. Игра могла помочь овладеть новыми кодерскими нюансами. В итоге Насир в одиночку спрограммировал первую, вторую и третью части Final Fantasy. Он остается одним из легендарнейших специалистов в истории.

Еще одна легенда, которая заметно повлияла на мое развитие, – Билл Бадж. Наглядный и прекрасный пример разработчика проектов для Apple II начала восьмидесятых. На его счету увлекательные ранние игры вроде трилогии Space и Penny Arcade. Следующая его затея Raster Blaster стала хитом – первый пинбол на Apple II. Проект многих сразил наповал и вдохновил на создание аналогов, однако разобраться с физическими подсчетами на языке ассемблера 6502 было непросто. Пока все ломали голову над этой загадкой, Билл в 1982 году выпустил Pinball Construction Set и шокировал индустрию. Программа, которая позволяла любому сделать собственную пинбольную игру, стала беспрецедентным явлением и невероятным техническим достижением.

Мы с Робом смотрели на экран с Gorgon, и я сказал:

– Черт, вот такие штуки я хочу разрабатывать!

– Хочешь посмотреть ее код? Из чего она сделана?

– Да!

Роб нажал на своем Apple II+ кнопку RESET, затем напечатал сперва «CALL-151», а потом «800.9FF». Внезапно на экране появился поток чисел. Все напоминало цифровую белиберду, однако именно так я впервые познакомился с шестнадцатеричным числами и символами.

– Это машинный язык, – сказал Роб. – Вот что нужно выучить для создания видеоигр.

Я глядел на экран. Все равно что смотреть на египетские иероглифы. Никакого сходства с BASIC, который я к тому моменту уже отлично знал. В одной из книг кто-то написал: «Если ты знаком с одним языком программирования, то с остальными тоже разберешься ввиду лингвистических и логических схожестей». Однако провернуть такое с машинным языком казалось невозможным.

– Понятия не имею, что это, – ответил я. – Но если все этим занимаются, то и мне стоит браться за дело.

Роб напечатал «800L», после чего на экране появился код в формате языка ассемблера.

– Это язык ассемблера, – объяснил Лэвлок. – То, что написал программист.

Он объяснил, что программа с таким названием приняла код и пересобрала его в машинный язык.

Приближалось Рождество 1982 года, и я попросил у родителей две книги: Assembly Lines: The Book Роджера Вагнера, настоящую библию программиста, и Apple Graphics and Arcade Game Design Джеффри Стэнтона, повествующую о создании аркадных игр на ассемблере. Родители по-прежнему не догоняли происходящее, но уже куда меньше осуждали мое увлечение и продолжали надеяться, что я займусь разработкой «полезных» программ. 25 декабря книги уже лежали под елкой. Счастью не было предела.

– Наконец-то я смогу выучить ассемблер! – раздался мой возглас.

У меня уже имелось справочное руководство для Apple II, однако я не мог понять указанную там продвинутую информацию об ассемблере, потому что важнейшие начальные шаги авторы не описывали. Я будто смотрел на двадцатый этаж, стоя у лестницы, которой не хватало ступенек с первого по девятнадцатый пролеты. Все надежды возлагались на книгу Вагнера, которая открыла бы все тайны, а книге Стэнтона предстояло обучить меня фокусам разработчиков коммерческих видеоигр.

К тому моменту мой самодельный экспресс-курс обучения программированию вышел на запредельные скорости. Я твердо настроился зазубрить про ассемблер все. Почти сразу выяснилось, что машинный язык, показанный мне Робом, делал все то же, что и BASIC, и даже больше, но куда быстрее. Цифровая белиберда оказалась шестнадцатеричным кодом, серией шестнадцати цифр или символов в двадцати четырех рядах. Код ассемблера – это обычный текст, но обязательно нужна программа, которая превратит его в машинный код.

Первым делом требовалось выучить шестнадцатеричную систему счисления, потому что именно ее Apple II использовал для языка ассемблера. Изучаемая в начальной школе десятичная система состоит из десяти цифр от нуля до девяти. Шестнадцатеричная же использует шестнадцать цифр: от нуля до девяти и от A до F. Вот наглядный пример: число 11 из десятичной системы в шестнадцатеричной отображается как буква B. А число 94 обозначается в шестнадцатеричной системе как 5E[10]. Такие переводы я научился делать на автомате, как школьник, заучивающий, что 12×12 – это 144.

На первых порах Роб стал моим лучшим соратником и учителем. Когда дома появился Apple II+, я сразу же принялся за создание своей версии Crazy Climber, нашей любимой аркады, но ничего не получалось. Лэвлок взглянул на код и спросил, почему я не использовал переменные. Ответ звучал очень просто: я не знал, что это такое.

Роб объяснил, что переменные содержали в себе значения, которые могли меняться в ответ на действия геймера или на какие-либо внутриигровые события. Например, переменной «Жизнь» присваивалось значение 3. Если герой получал дополнительную жизнь, показатель увеличивался на один пункт. Переменные использовались для координат осей X и Y, количества патронов, а также всего остального, что не стоило упускать из виду. Это одна из самых базовых концепций программирования, и я ничего о ней не знал. Выражаясь совсем уж простым языком: представьте, что у вас на кухне стоит миска – это переменная. В ней может помещаться как триста горошин, так и десять. Миска не меняется, но ее содержимое переменно.

Я закончил свою версию Crazy Climber, но из-за дилетантства случайно ее удалил – моя первая игра для Apple II+ в истории попросту испарилась! Однако огорчения я не испытал, просто подумал, что следующие разработки будут лучше. Началась работа над Dodge ’Em, в которой кораблю играющего требовалось уворачиваться от выстрелов инопланетян.

Благодаря Робу, рассказавшему про машинный код и переменные, а также подаренным родителями книгам я узнал, как получить доступ к внутренним механизмам Apple II+. Неделя, в которую я получил книгу про ассемблер, стерлась из памяти. Мозг постоянно обрабатывал получаемую информацию об Apple II+, о коде, на котором она работает, и о том, что я могу запустить на этом компьютере. Apple II+ и другие первые домашние ЭВМ можно было изучить «от и до». У моей первой машины имелось 64 килобайта памяти – 65 536 байт. У меня появилось четкое желание знать, за что отвечает каждый байт. Верхние 25 % памяти отводились постоянному запоминающему устройству (ПЗУ), в котором хранились программы, определяющие, как работает Apple II+. Любому, кто писал программу для этого компьютера, требовалось знать точное расположение различных функций в ROM машины. Существовали книги, в которых расписывалась «географическая адресация» ПЗУ Apple II+. Для ускорения обучения я вел заметки, выписывал адреса и пользовался плакатами, на которых указывались важнейшие места памяти, – в частности листовкой Peeks, Pokes and Pointers от компании Beagle Bros. Я твердо вознамерился запомнить про компьютер все: как работает микропроцессор 6502, как устроен экран высокого разрешения с чересстрочной разверткой. Еще хотелось заучить все возможное про ПЗУ и нулевую страницу[11].