Хабрахабр

[Перевод] Как Doom попал на Super Nintendo

image

Эта статья — перевод главы книги Game Engine Black Book: DOOM, подробного анализа внутреннего устройства одной из самых влиятельных игр id Software. В этой главе рассказывается о сложном процессе портирования DOOM на Super Nintendo и о ключевой роли, которую сыграл в нём разработчик игры Star Fox студии Argonaut Games.

Книга написана автором и программистом Фабьеном Сангларом, а полный её текст теперь можно приобрести в бумажном и цифровом виде.

Super Nintendo Entertainment System была выпущена в Японии в 1990 году, а на следующий год появилась в США и Европе.

В Японии Super Fami-Com (FAMIly COMputer) приобрела мгновенный успех, и вся первоначальная партия в 300 тысяч устройств была раскуплена за считанные часы. Она стала 16-битным потомком 8-битной NES. Ажиотаж был так силён, что правительство попросило Nintendo на будущее выпускать свои консоли по выходным, чтобы избежать волнений.

Издатели имели право выпускать всего по пять игр в год. Для обеспечения высокого качества игр консоли Nintendo создала безжалостную систему контроля. Чтобы все играли по правилам (а также для защиты игр от копирования), перед запуском игры консоль SNES проверяла наличие чипа CIC. Чтобы это правило действовало, Nintendo оставила право производства картриджей только за собой; издатели были вынуждены покупать их у Nintendo. За всё время было продано почти 50 миллионов консолей, поэтому SNES считается одной из самых популярных консолей в истории, как с точки зрения объёмов продаж, так и каталога игр. Это был мощный защитный механизм, который удалось взломать только к концу срока жизни SNES.
На протяжении девяти лет жизни консоли была выпущена 721 игра, и среди них были такие хиты, как Super Mario World, Zelda III[The Legend of Zelda: A Link to the Past], Mario Kart, F-Zero, Super Metroid и Donkey Kong Country.

Её 16-битный процессор 65C816 с частотой 3,58 МГц имел 128 кибибайт ОЗУ. Технически превосходство SNES заключалось в области 2D-графики. Звуковая система консоли состояла из мощного сочетания 8-битного процессора Sony SPC700 и 16-битного цифрового процессора обработки сигналов с 64 кибибайтами выделенной ОЗУ. Он управлял устройством PPU (Picture Processing Unit) с 64 кибибайтами ОЗУ, которое занималось обработкой больших спрайтов и могло поддерживать до 256 цветов при разрешении 256x240.

Nintendo чётко осознавала, что 3D станет следующим важным этапом развития игр, но у неё не было возможностей для его реализации. Несмотря на впечатляющий движок обработки двухмерных спрайтов и в особенности функцию Mode 7, машине не доставало сил для таких вычислительно затратных операций, как 3D-вычисления. Волею судеб решение этой проблемы нашлось у небольшой британской фирмы.

Argonaut Games

В 1982 году Джез Сан в одиночку разрабатывал игры, предназначенные исключительно для компьютеров C64, Atari ST и Amiga. Для продажи своих творений ему нужна была компания. Увидев сходство между своим именем (J.San) и Ясоном (Jason) из мифа об аргонавтах, он назвал её Argonaut Games plc.

К 1990 году он собрал талантливых людей в лондонском офисе компании, и у него появился интерес к портативной консоли Nintendo Game Boy, выпущенной в 1989 году. Фирма недолго оставалась ансамблем из одного человека. Команде удалось совершить два казавшихся почти невозможных подвига: они создали каркасный (wireframe) 3D-движок и взломали защиту CIC, чтобы установить его на Game Boy.

«Логотип Nintendo опускался с верхней части экрана, и когда он достигал середины, загрузчик проверял, находится ли логотип в нужном месте.

Если бы кто-то захотел создать игру без разрешения Nintendo, то им бы пришлось использовать слово Nintendo без лицензирования; поэтому Nintendo могла бы подать иск о незаконном использовании торговой марки. Игра запускалась только в том случае, если это слово находилось в нужном месте ПЗУ. Система считывала слово Nintendo дважды — сначала чтобы вывести его на экран в процессе загрузки, во второй раз — чтобы проверить его правильность перед запуском игры с картриджа. Мы выяснили, что это просто резистор и конденсатор — детали ценой примерно в один цент — и разобрались, как обмануть защиту. При второй проверке мы подавали на резистор и конденсатор питание так, чтобы в памяти было правильное слово Nintendo, и игра грузилась без малейших проблем» — Джез Сан, из интервью Eurogamer, записанного в 2014 году. И это была фатальная ошибка — в первый раз, когда консоль считывала слово Nintendo, мы заставили её возвращать Argonaut, чтобы оно опускалось сверху экрана.

На CES ’90 его демо движка с выставочного стенда Nintendo проделало путь аж до офиса компании в Киото. Тогда Джез об этом ещё не знал, но время он выбрал идеально. Как раз тогда Nintendo работала в Японии над играми для Super Famicom, которые должны были показать в момент выпуска консоли её технологическое превосходство. Super Mario World только зарождалась, зато лётный симулятор Pilotwings был уже немного более сложной игрой.

Однако сами самолёты всё равно оставались обычными двухмерными отрисованными вручную спрайтами. Для симуляции рельефа в Pilotwings использовался режим Mode 7 устройства PPU (способный выполнять такие аффинные преобразования, как поворот, масштабирование и разрезание изображения на части), а также режим HDMA. Это беспокоило продюсера игры Сигэру Миямото, потому что не позволяло плавно поворачивать камеру вокруг самолётов (разбитые на части спрайты были неровными).

Но на этот раз они сделали исключение и пригласили в свой головной офис в Киото Джеза с Диланом Катбертом, работавшего над 3D-движком. В то время Nintendo не любила работать со сторонними компаниями, и уж тем более с иностранцами.

Им показали всё: от секретной SNES до секретных Mario и Pilotwings. Молодые люди (Джезу было 23 года, Дилану — 18) встретились со всеми вице-президентами Nintendo: Миямото, Гумпэем Ёкои, Такэхиро Изуси, Ясухиро Минагавой и Генио Такеда. Затем их спросили, можно ли найти способ отрисовывать самолёты как настоящие полигональные объекты.

Как ни удивительно, даже несмотря на то, что раньше я никогда не занимался оборудованием, они сказали „да“ и дали мне на реализацию миллион долларов». «Я сказал им, что это лучшее, чего им удастся добиться, если только они не позволят мне разработать оборудование, чтобы SNES стала лучше в 3D. — Джез Сан

Джез смело пообещал им «десятикратный» рост производительности, поэтому Nintendo с радостью приняла предложение о разработке специального оборудования для игры. Pilotwings придётся выпустить со спрайтовыми самолётами, чтобы успеть к выходу Super Famicom, но чип, который позже назовут Super FX, будет использован для ещё одного проекта Nintendo.

Он назывался Star Fox.

Star Fox

Согласно договору, Nintendo имела право на все решения по гейм-дизайну, а также финансировала Argonaut Games для производства не только оборудования, но и 3D-движка для игры. Джез-сан незамедлительно начал нанимать известных ему британских специалистов.

Проект Бена Чиза, Роба Маколея и Джеймса Хейквилла имел кодовое название Mathematical Argonaut Rotation I/O, или MARIO. Для разработки оборудования он подписал договор с Flare Technology (теми же людьми, которые разрабатывали конструкцию Atari Jaguar). Так как консоль модернизировать было невозможно, чип впаивался в каждый новый игровой картридж, что значительно увеличивало его розничную цену. В результате созданное ими устройство оказалось столь мощным, что в шутку они называли Super NES «всего лишь коробкой для установки нашего чипа».

Такого никто не делал! «Мы разрабатывали чип Super FX так, как не конструировал оборудование никто до нас — сначала мы создали ПО и собственный набор инструкций для максимальной оптимизации работы ПО. Это был первый в мире видеопроцессор (Graphics Processing Unit), и у нас есть патенты, которые это доказывают» — Джез Сан Вместо создания 3D-чипа мы по сути разработали полнофункциональный RISC-микропроцессор, имевший математические функции и функции рендеринга пикселей, а всем остальным занималось ПО.

Карл Грэм и Пит Уорнс работали над созданием движка в лондонском офисе компании, в то время как Дилан Катберт, Кристер Уомбелл и Джайлс Годдард (а позже и Колин Рид) переехали в офисы Nintendo в Киото и тесно сотрудничали с командой Миямото.

Star Fox была выпущена 21 февраля 1993 года и продалась тиражом в четыре миллиона копий. Проект увенчался коммерческим и технологическим успехом.

Сиквел мегахита Star Fox 2 был завершён «аргонавтами» и готов к релизу в 1996 году, но Nintendo внезапно прервала проект, опасаясь его влияния на выпуск Nintendo 64. Дальнейшая история взаимоотношений между двумя компаниями печальна. Позже Nintendo переманила к себе Годдарда и Уомбелла. Компании Argonaut это не понравилось и отношения с Nintendo испортились. Он уволился из Argonaut и, устроившись в Sony, приступил к работе над PlayStation. Дилан Катберт тоже мог к ним присоединиться, но ему помешал в этом пункт договора о запрете конкуренции.

В результате они заменили Йоши крокодилом и назвали игру Croc: Legend of the Gobbos. «Развод» двух компаний завершился, когда Nintendo не позволила Argonaut использовать персонажа Йоши в платформенной игре, которую компания планировала выпустить на PS1. Позже Nintendo выпустила Mario 64, одна механика которой подозрительно напоминала Croc… и даже около года побеждала с ней на рынке.

Чип MARIO имел простую конструкцию на основе 16-битного RISC-процессора с частотой 10,74 МГц и 512 байтным i-кэшем. У него был собственный набор инструкций, оптимизированный для математических вычислений, и собственный буфер кадров, оптимизированных для размещения пикселей. Его работа заключалась в рендеринге в буфер кадров, данные из которого периодически передавались в ОЗУ SNES с помощью DMA. Он мог рендерить до 76 458 полигонов
в секунду, что обеспечивало Star Fox примерно 15 fps.

Была выпущена новая версия чипа под названием GSU, способная работать с частотой 21,4 МГц. Став свидетелями феноменального успеха Star Fox, его технологиями заинтересовались другие студии. Первое поколение GSU использовалось в четырёх играх: Dirt Racer, Dirt Trax FX, Stunt Race FX и Vortex.

Оно использовалось в трёх играх: DOOM, Super Mario World 2: Yoshi’s Island и Winter Gold. Второе поколение (GSU-2) имело тот же процессор с частотой 21,4 МГц и дополнительные контакты, припаянные к шине для увеличения размера поддерживаемых ПЗУ и буфера кадров.

Если вскрыть картридж DOOM, то можно увидеть все упомянутые выше компоненты:

[1] 16-битный GSU-2, [2] 512-кибибайтный буфер кадров, в который выполнял запись GSU, [3] 2-мебибайтное ПЗУ, в котором хранились код и ресурсы, [4] модуль из шести инверторов и [5] чип CIC для защиты от копирования.

Мы не знали, возможно ли это на самом деле. «Десятикратный рост производительности был с моей стороны чистым преувеличением. Вместо десятикратного роста производительности в 3D мы на самом деле повысили его в 40 раз. Но это позволило нам преувеличить, и в то же время превзойти обещания. Чип не только мог выполнять 3D-вычисления и работать с векторной графикой, но и обеспечивать поворот и масштабирование спрайтов, а эта функция была чрезвычайно нужна была собственным играм Nintendo, например, Super Mario World 2: Yoshi’s Island». В некоторых областях, например в математических 3D-вычислениях, рост был даже стократным. — Джез Сан

Интересный факт: некоторым фанатам удалось собрать все игры (721 наименование) из каталога SNES. Обычно картридж DOOM можно заметить издалека. Только три игры было дозволено выпустить не в стандартном сером корпусе. Две были красными — DOOM и Maximum Carnage, а Killer Instinct был чёрным.

Doom на Super Nintendo

DOOM на SNES появился благодаря гению и решимости одного человека: Рэнди Линдена. Он обожал эту игру и решил портировать её на популярную консоль, чтобы ею могли насладиться больше игроков. У Рэнди не было доступа ни к исходному коду, ни к ресурсам версий игры для PC или консоли. Ему пришлось начинать с нуля.

В ней подробно описывалась структура файлов .wad. Для получения ресурсов он мог воспользоваться «неофициальной спецификацией Doom», написанной Мэттью Феллом. WAD. Спрайты, текстуры, музыку, звуковые эффекты и карты Рэнди извлёк из DOOM. С движком история была совершенно иной.

DOOM на SNES был ещё одним из программистских подвигов, которые можно было совершить. "DOOM была поистине революционной игрой, и я хотел, чтобы в неё могли сыграть люди без PC.

Группа сотрудников Sculptured помогла мне завершить игру, чтобы её можно было вовремя выпустить к праздникам. Я начал проект самостоятельно и создав полностью функциональный прототип, показал его демо в Sculptured Software.

Прежде чем приступать к самой игре, я написал полный набор инструментов — ассемблер, компоновщик, отладчик. Процесс разработки был сложным по множеству причин, и в первую очередь потому, что в то время ещё не было систем разработки для чипа SuperFX.

Для скачивания кода, установки точек останова, исследования памяти при передаче данных между двумя устройствами использовался последовательный протокол. Аппаратный комплект разработки состоял из хакнутого картриджа Star Fox (потому что в нём был чип SuperFX) и пары модифицированных игровых контроллеров, подключенных к обоим разъёмам SNES и соединённых с параллельным портом Amiga.

Я смутно вспоминаю, что свободно было всего около 16 байт, то есть место больше не оставалось! Мне бы хотелось, чтобы в игре было больше уровней, но, к сожалению, игра занимала самое объёмное из доступных ПЗУ и занимала его почти полностью. Да, можно было даже играть с кем-нибудь онлайн!" — Рэнди Линден в интервью для Gaming Reinvented Тем не менее, мне удалось вместить поддержку Super Scope, мыши и модема XBand!

В этой версии примечательно то, как Рэнди приходилось «срезать углы» с учётом возможностей и ограничений движка порта.

На рисунке 6.8 видно, что несмотря всего на 600 кибибайт ОЗУ, сохранился синий пол (хоть и одинакового цвета). Заметьте, что геометрия не изменилась (должно быть, добиться этого оказалось чрезвычайно сложно, ведь у Рэнди не ни DoomED, ни doombsp), а на E1M1 сохранились все ступеньки из оригинала.

Reality engine, как его назвал Рэнди, способен был работать с геометрией карт с PC, но у него, скорее всего, возникали проблемы со скоростью заполнения и сэмплированием текстур, потому что текстуры потолка и пола полностью отсутствуют.

На показанном выше скриншоте видно, что окно на самом деле не отображается во весь экран. Эта проблема касалась не только DOOMStar Fox, Star Fox 2 и всем играм с Super FX приходилось уменьшать размер рабочей области. Скорее всего это было вызвано ограниченной скоростью передачи SNES, не позволявшей выполнять DMA-передачу для полноэкранного рендеринга.

Вертикальные линии дублировались, то есть Reality Engine был способен рендерить в разрешении всего 108x144. Из 256x224 пикселей «родного» разрешения консоли удавалось отрисовывать всего 216x176, и только 216x144 использовались для 3D (на 32 строках отрисовывалась панель состояния). «Низкая» частота кадров не отпугивала игроков от игры в DOOM. И даже при таком низком разрешении средняя частота кадров составляла 10 FPS, что было серьёзным достижением. По словам Рэнди Линдена, картриджи продавались очень хорошо.

В список функций, пожертвованных ради драгоценного ОЗУ, попало разрешение спрайтов, которое пришлось значительно уменьшить; иногда их даже было сложно разобрать (в противовес оружию игрока, которое рендерилось в более высоком разрешении). Пришлось удалить все позы врагов, за исключением спрайтов, смотрящих на игрока, избавиться от драк монстров друг с другом, распространения звука (монстры пробуждались только при визуальном контакте), вырезать бОльшую часть звуковых эффектов (все монстры звучали, как импы).

Ко времени выпуска DOOM на сцене появилась процедура определения рейтингов ESRB. Интересный факт: изначально Nintendo запрещала использование крови в играх на SNES. Учитывая количество крови и кусков плоти, не удивительно, что DOOM на SNES получил рейтинг M («от 17 лет»).

Полный текст книги «Game Engine Black Book: DOOM» можно приобрести на веб-сайте Фабьена Санглара.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть