Моё детство пришлось на эпоху Nintendo Entertainment System, и я всегда хотел создать собственную игру для NES. Я записывал идеи в блокнотах, чертил уровни на миллиметровке и тратил кучу времени, сочиняя MIDI-саундтреки для несуществующих игр. Все эти идеи оставались погребёнными в прошлом до 2018 года, когда я увидел документальный фильм Джо Гранато The New 8-bit Heroes о его одиссее по созданию игры своей детской мечты. Сегодня, после успешного сбора средств на его ПО NESMaker в Kickstarter, этот проект может упростить процесс создания собственных игр для NES. Однако Джо был не первым, самодельные (homebrew) игры имеют длинную историю. Сегодня мы исследуем этот уголок истории NES и расскажем о создании игр для NES на протяжении 20 лет после завершения официальной коммерческой жизни системы.
GIF из homebrew-игры Lizard
Три тысячи долларов
Это приз, который получал победитель проводившегося Nintendo соревнования «Изобрети лучшую видеоигру». Финал конкурса проводился в Здании Сената США имени Расселла, всего в нескольких шагах от Капитолия. Результаты, объявленные в шестом выпуске Nintendo Power за 1988 год, продемонстрировали навыки пятнадцатилетнего Скотта Кэмпбелла (сейчас работающего с Marvel). Его работа называлась Lockarm — это адвенчура о принце Деррике и его приключениях на пути к восстановлению мощи фамильного меча. Игра так и не была доделана, но идея создания собственных игр для NES жива и сегодня.
Потрясающая игра Lockarm вдохновила многих детей мечтать по-полной. (Nintendo Power/Internet Archive)
Новые игры для NES создаются и по сей день…
Если считать историю Nintendo по официальным релизам, то последняя игра для системы (Wario’s Woods) появилась в конце 1994 года. На протяжении жизни системы множество классических игр позволило сформироваться воззрениям и мечтам целого поколения, а также создало своё наследие в виде персонажей и франшиз — Mario, Zelda, Kirby и Metroid, в сериях которых и сегодня появляются новые игры.
(И успехов вам в ремонте своей старой NES — Nintendo завершила сервисное обслуживание машин ещё в 2007 году, ссылаясь на возраст системы.)
Когда издатели перешли к другим консолям, таким как Super Nintendo и Sega Genesis, для старой серой коробочки перестали выпускать игры, Nintendo Power Magazine прекратила рассказывать о ней, а магазины начали распродавать остатки картриджей. Прошло несколько лет. Для сохранения памяти появились такие веб-сайты о NES, как Roger Barr’s i-Mockey (который позже дал нам игру на Flash Abobo’s Big Adventure: the Ultimate Tribute to the NES), TSR’s NES Archive и NES World. И несмотря на то, что Nintendo забросила систему, новый класс программистов продолжал работать, чтобы сохранить жизнь своим идеям и стремлениям.
…и на то были причины
О важности наследия NES говорит нам то, что большинство авторов homebrew продолжает создавать игры для системы не только по ностальгическим причинам, а в основном потому, что они любят NES.
«Я всегда хотел создавать игры для NES, ещё с тех пор, когда был ребёнком. Помню, как сидел и рисовал на бумаге карты, представляя, как люди играют в мои игры», — рассказывает относительный новичок сцены NES homebrew Натан Толберт, уже создавший для ежегодного соревнования NESDEV пару проектов.
Один из создателей, Антион Фантис, хочет вернуть некоторые из элементов ретро-игр, которые потеряны в современном поколении. Поскольку NES стала самой знаковой из таких систем, ему нравится программировать для неё и он воспринимает ограничения системы как средства создания как можно более точного воссоздания ретро-игры.
Для современных разработчиков очень привлекательным выглядит технический аспект программирования. Брэдли Бэйтман, художник, работавший над портом Leisure Suit Larry для KHAN games, считает, что программирование игр для NES становится более доступным.
«Мы как сообщество дошли до той точки, в которой о системе понятно ПОЧТИ всё», — рассказал он нам. Многие эмуляторы стали достаточно точными, чтобы тестировать ROM, а процесс устранения проблем и настройки без использования оборудования стал проще.
Дерек Эндрюс из Gradual Games начал участвовать в сцене частично из-за ностальгии, но в основном потому, что NES по самой своей природе стимулирует программиста ограничивать масштабы проекта, не говоря уж о возможности получить после завершения процесса «твёрдую копию» игры на картридже.
Многие из homebrew-разработчиков, с которыми мы разговаривали, упоминают возросшую популярность инди-игр наподобие Shovel Knight, сложность программирования для старых систем, привлекательность возможности поиграть в качественные игры на своей любимой системе и даже сочинение музыки для NES.
Пообщавшись с некоторыми ветеранами сцены NES homebrew, стало понятно одно — сцена очень слабо связана с ностальгией.
6502
Ядро, на котором основан ЦП NES. В американской NES процессор работает с частотой 1,79 МГц. Он помещён в чип RP2A03. В этом удобном чипе в американской версии системы также содержится звуковой процессор APU. PAL-версия (европейская) NES работает с частотой 1,66 МГц и использует другую версию чипа — RP2A07. Передовая (на то время) технология могла адресовать одновременно до 64 килобайт памяти.
Исторический чип.
Ассемблерная строка: уникальные сложные задачи программирования на ассемблере
Из-за этого медленного 8-битного процессора игры для Nintendo Entertainment System писались на версии языка программирования ассемблера для процессора 6502. Язык ассемблера, если вы не знаете — это низкоуровневый язык программирования, в котором код помещался в ассемблер и исполнялся как машинный код. Он имел несколько уникальных версий — 6502, x86, ARM, MIPS, 68000, Z80 и так далее, в зависимости от машины.
«Сегодня нет ничего похожего на архитектуру NES… и это потрясающе», — заявил Кевин Хэнли из KHAN Games в эпизоде своего подкаста про NES homebrew The Assembly Line.
Ассемблер — не самый простой в использовании язык, потому что он трудозатратен и хитёр. Фрэнк Вестфал, создатель NES-игры Armed for Battle, в интервью описал это так: «Кодирование на ассемблере может быть интересным и очень монотонным. Для выполнения действий на нём требуется множество строк. Самой сложной проблемой при кодировании Armed for Battle была необходимость повторного использования ОЗУ, когда игра стала огромной».
Ему пришлось реорганизовать ОЗУ, отсортировать разные части кода и отслеживать его большую часть, чтобы он не вёл себя хаотично во время игровых боёв. И это было обычной работой для программиста NES.
По словам Дерека Эндрюса, частично благодаря подобным проблемам язык программирования и является таким привлекательным. Его игры Nomolos: Storm the CATsle и Legends of Owlia основаны на играх, которые он когда-то пытался создать в QBasic (но так никогда и не закончил, потому что был, по собственным словам, «ленивым подростком»), но доделал на языке ассемблера. Это процесс сам по себе может быть удовольствием.
«Кодинг для NES — это очень долгая работа, но благодаря ей я возвращаюсь в реальность, в которой наслаждаюсь каждым сложным, долгим и медленным шагом процесса. Вознаграждением служит огромное удовольствие от завершения подобного проекта».
«Каждый человек учится по-своему, и у каждого собственный подход к программированию. Я не буду говорить, что это доступно каждому, хотя на самом деле это так. Скорее можно сказать, что не каждому этого захочется».
— Участник Homebrew-сцены Брэд Смит. Смит — музыкант и профессиональный программист, в свободное время занимающийся созданием и записью на картриджи музыки для NES. Его последний homebrew-релиз Lizard можно скачать с официального сайта.
Хотите сами заняться созданием игр? Надеюсь, вам нравятся таблицы шестнадцатеричных чисел
Веб-сайты наподобие NESDEV и Nintendo Age — находка для потенциальных homebrew-разработчиков. Их руководства по программированию на ассемблере и ежегодные homebrew-соревнования помогают потенциальным homebrew-рам войти в мир создания новых NES-игр. Ассемблер можно изучать, читая различные туториалы по 6502, этот документ по ассемблеру для начинающих или по посту Брайана Паркера (из RetroUSB) NintendoAge Nerdy Nights Programming. Достаточно открыть Notepad ++ и готовиться к внимательному чтению горы шестнадцатеричных таблиц в процессе работы.
Однако сегодня есть и ещё один способ начать программировать для NES. По словам Кевина Хэнли с KHAN Games, известного портом под NES первой части Leisure Suit Larry и собственной игрой Study Hall, многообещающе выглядит язык программирования C, хотя лично он предпочитает ассемблер.
NES-порт Leisure Suit Larry
«Изначально, в эпоху расцвета NES, игры писались только на языке ассемблера 6502», — рассказывает нам Хэнли. «Многие люди, в том числе и я, продолжают писать игры на этом языке. За последние несколько лет после появления библиотеки для C, опубликованной Shiru (потрясающим российским NES-программистом), многие люди создали игры на C. Возникают некоторые споры о том, можно ли написать таким образом стоящую игру, но одни из самых любимых моих homebrew-проектов, в том числе Quest Forge, были написаны на C».
Автор Lizard Брэд Смит подтверждает, что некоторые homebrew-ры пользовались C для создания игр, но он замечает, что могут иногда сложно заставить языки высокого уровня работать со старыми процессорами. Брэд — настоящий кладезь технической мудрости NES; на своём веб-сайте он подробно описывает процесс создания Lizard — от рендеринга спрайтов до скроллинга фонов и создания саундтрека для NES.
К концу 2018 года NESMaker надеется упростить процесс, написав point-and-click GUI для создания NES-игр без кодинга.
«Это как разница между индивидуальной покраской автомобиля и созданием машины с нуля из кучи болтов и листового металла. И то, и другое интересно, но внутри совершенно отличается».
— Дуг Фрейкер, создатель homebrew-игр для NES Vigilante Ninja 1 & 2. Кроме этих игр он написал туториал по программированию игр для NES на языке C вместо стандартного ассемблера, который обычно используется в системе.
The Legend of Zelda: Outlands.
Почему хакинг ROM-ов нельзя считать разновидностью homebrew-программирования
В первые годы эмуляции NES часто можно было найти вещь под названием «ROM-хак». Все игры наподобие Super Dragon Bros., The Legend of Zelda: Outlands и Mario Adventure являются хаками ROM-ов, а не homebrew-играми. По словам Брэдли Бейтмана, разница существенна.
«Существует очень большая разница между ROM-хаками и homebrew», — говорит он, шутливо добавляя: «и не перепутайте их, иначе homebrew-ры вам голову оторвут».
В ROM-хаке ресурсы игры изменяются, улучшаются или изменяются аспекты самой игры. Такие изменения создают ощущение «новой» игры. Изменения сохраняются в патче (списке изменений, внесённых в игру) и применяются к игре. Патч заставляет программу постоянно изменять код на лету.
Для ROM-хака обычно требуется уже имеющийся ROM, который патчится файлом .ips, содержащим изменённый код. Существуют и другие форматы. используемые для патчей, но .ips, вероятно, самый популярный.
Каждый homebrew-ер, с которым мы говорили, приводил разные аналогии о различиях, но все они были единогласны в одном — homebrew-игры создаются с нуля, а ROM-хаки — на основе уже готового каркаса.
Музыкант Брэд Смит объясняет это по-своему: ROM-хаки — это кавер-версии, а homebrew — совершенно новые альбомы.
1987
В этом году Джо Гранато и его друг придумали идею того, что постепенно выросло в Mystic Searches. На следующий год они создали «дизайн» игры. Идея продолжала жить в творчестве Джо (в его текстах), пока наконец он с помощью друзей не воплотил её в реальность. Это игра о трубадуре, путешествующем по всему миру.
Battle Kid.
Пятёрка наших любимых homebrew-игр для NES
Некоторые из самых серьёзных homebrew-проектов для NES можно найти на RetroUSB, где также продаётся лучшая NES-система — AVS. Ещё одним отличным источником homebrew-игр является Sly Dog Studios — веб-сайт потрясающего homebrew-ера Роба Брайанта, сокровищница homebrew-игр для NES и Infinite NES Lives.
1. Battle Kid. Вдохновившись невероятно сложными и не прощающими ошибок платформерами наподобие I Wanna be the Guy, NES-разработчик Sivak создал этот шедевр в 2010 году. Он имеет схему Metroidvania, потрясающую музыку, замечательную графику и игровой процесс. Игру можно купить — в виде картриджа, и никак иначе — на RetroUSB.
2. Lizard. В огромном открытом мире игры мальчик в костюме ящерицы собирает монеты и исследует руины древней цивилизации. Увлекательная, позволяющая выбирать темп прохождения и невероятно качественно выполненная игра определённо стоит внимания. Её можно купить как программу или картридж на официальном сайте.
3. Eskimo Bob. Эта игра основана на довольно причудливом шоу Newgrounds из начала 2000-х. Главный герой бродит по арктическому пейзажу, собирает рыбу и избегает забавных препятствий. На некоторых уровнях можно переключаться между Бобом и другим персонажем, Альфонсо, который может бить палкой. Игру можно найти на официальном сайте.
4. Study Hall. В этой игре KHAN Games в стиле "Donkey Kong Jr. встречает Glider" игрок управляет нарисованным человечком, который должен решать головоломки на протяжении 16 уровней. Игра есть на RetroUSB.
5. Nomolos Storming the CATsle. В этом забавном сайдскроллере разработчика Gradual Games игрок управляет котом в броне и с мечом, атакующим замок. Игра бесплатна. Можно скачать её здесь.
«Ностальгия — это только пролог»
Так Джо Гранато представляет свою документальную ленту The New 8-bit Heroes. Фильм рассказывает о работе Джо по созданию игры из его детства. В нём объясняются современные сложности создания игры для NES и есть короткие интервью с несколькими выдающимися homebrew-ерами NES. Команда Джо создала NESMaker — набор WYSIYWG-инструментов, облегчающих процесс разработки. Документалка позволяет вкратце познакомиться с homebrew-сценой.
Инструменты наподобие NESMaker имеют потенциал для того, чтобы сделать homebrew более доступной для мало искушённых в технологиях программистов для NES, но есть ещё и другие инструменты. ПО может повлиять на homebrew-сцену, помочь художникам и людям, не имеющим времени или терпения на код, а также служить отличным порталом в программирование на ассемблере.
NintendoAge и NESDev уже показали нам путь. Тем временем, ютуберы наподобие Джона Риггса, Immortal John Hancock (от которого я впервые узнал о Lizard) и Metal Jesus Rocks знакомят публику со сценой через свои каналы на YouTube.
Nintendo Entertainment System — это не призрак и не давно умершая консоль, занесённая песками времени. Нет, система вполне жива и имеет светлое будущее.
Кевин Хэнли говорит по этому поводу следующее: «Я очень ценю то, что являюсь частью сообщества, и ценю то, что вы уделили ему время. Лучшие homebrew-игры для NES ещё будут выходить, поэтому следите за нами. Будут появляться продукты, взрывающие мозг даже по современным стандартам. Поэтому оставайтесь с нами».