Моё детство пришлось на эпоху Nintendo Entertainment System, и я всегда хотел создать собственную игру для NES. Я записывал идеи в блокнотах, чертил уровни на миллиметровке и тратил кучу времени, сочиняя MIDI-саундтреки для несуществующих игр. Все эти идеи оставались погребёнными в прошлом до 2018 года, когда я увидел документальный фильм Джо Гранато The New 8-bit Heroes о его одиссее по созданию игры своей детской мечты. Сегодня, после успешного сбора средств на его ПО NESMaker в Kickstarter, этот проект может упростить процесс создания собственных игр для NES. Однако Джо был не первым, самодельные (homebrew) игры имеют длинную историю. Сегодня мы исследуем этот уголок истории NES и расскажем о создании игр для NES на протяжении 20 лет после завершения официальной коммерческой жизни системы.

GIF из homebrew-игры Lizard
image

Три тысячи долларов


Это приз, который получал победитель проводившегося 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.

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
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.

Lizard NES game

2. Lizard. В огромном открытом мире игры мальчик в костюме ящерицы собирает монеты и исследует руины древней цивилизации. Увлекательная, позволяющая выбирать темп прохождения и невероятно качественно выполненная игра определённо стоит внимания. Её можно купить как программу или картридж на официальном сайте.

Eskimo Bob 1

Eskimo Bob 2

3. Eskimo Bob. Эта игра основана на довольно причудливом шоу Newgrounds из начала 2000-х. Главный герой бродит по арктическому пейзажу, собирает рыбу и избегает забавных препятствий. На некоторых уровнях можно переключаться между Бобом и другим персонажем, Альфонсо, который может бить палкой. Игру можно найти на официальном сайте.


4. Study Hall. В этой игре KHAN Games в стиле "Donkey Kong Jr. встречает Glider" игрок управляет нарисованным человечком, который должен решать головоломки на протяжении 16 уровней. Игра есть на RetroUSB.

Nomolos Storming the CATsle

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 ещё будут выходить, поэтому следите за нами. Будут появляться продукты, взрывающие мозг даже по современным стандартам. Поэтому оставайтесь с нами».

Комментарии (9)


  1. Nuwen
    23.05.2018 13:34

    Откровенно говоря, выглядят самодельные игры невзрачно. Больше походят на игры для atari или spectrum. Разработчикам явно не хватает умений в пиксельарте и использовании специфической гаммы NES.


    1. Lazm
      23.05.2018 13:48

      В статье почему-то ни слова о Twin Dragons, которая выглядит ярко.


    1. sup
      23.05.2018 17:43

      Про atari надо уточнять, может вы с atari lynx сравниваете. Но с тем, что среди homebrew игр пока шедевров не видно, пожалуй, соглашусь. Пока игры на уровне 1986 года, хотя музыка обгоняет графическую составляющую. Но Capcom тоже не сразу стала делать шедевры, лишь бы интерес не угас.


  1. Alozar
    23.05.2018 19:55

    У меня только один вопрос!
    На NES запускали Doom???



    1. vlreshet
      24.05.2018 11:26

      Очень сомневаюсь. Больно уж слабый девайс, слишком.


  1. mkc
    24.05.2018 11:51

    Это ж блин пипец… я тут FAT16 на асме не могу толком реализовать, а они всю оперативную память отслеживают, без утечек и потерь переменных…


    1. lleo_aha
      24.05.2018 12:20

      Это не пипец. Вот пипец:
      www.youtube.com/watch?v=rLgwNHxCxzQ
      Это для спектрума как раз, у которого даже видеопроцессора нет. RTS, выделение юнитов мышкой, туман войны


  1. Alexey2005
    24.05.2018 13:26

    Интерес со стороны программистов к таким системам обусловлен отсутствием фрагментации. Именно кроссплатформенность убила программирование как искусство, превратив его в ремесло.
    Возникла ситуация, когда программист лишний раз чихнуть боится, чтоб не дай Бог не поломать совместимость с половиной потенциальных устройств, на которых игра должна запускаться. Какие уж тут трюки и хаки, тут наоборот надо кодить как можно более шаблонно и стандартно, безо всякой самодеятельности. И программирование превращается в рутину.
    Вы только представьте, какой же это кайф, когда абсолютно точно знаешь характеристики устройства, на котором должен работать софт. Когда не надо адаптировать под 100500 разрешений и миллиард размеров экрана. Когда не надо беспокоиться о том, какой версией ОС пользуются ваши потребители. Когда нет такого, что шейдера, написанные под одну видеокарту, на другой выдают просто чёрный экран, а то и роняют систему в BSOD. В таких условиях из системы можно выжать в разы больше.
    Интерес со стороны пользователей подогревается тем, что в таких играх (о чудо!) отсутствуют донат, реклама и DLC. По нынешним меркам так удивительно, что оказывается при разработке игры во главу угла может ставиться геймплей, а играть можно сразу в полную версию и не отвлекаясь на рекламные баннеры.
    Современные маркетологи почему-то не способны придумать схему монетизации, чтоб без доната, рекламы и DLC. Сами они объясняют это засильем пиратов, при этом умалчивая, что NES-игры пиратили не меньше. На территории России в 90-е не то что лицензионный картридж, но даже собственно приставку лицензионную днём с огнём не сыскать было, всё сплошь клоны пиратские продавались.