Как-то так получилось, что при работе в редакции мне часто приходилось писать новостные заметки про Game Boy. Про ту самую легендарную консоль, буквально перевернувшую идею гейминга и позволившую играть везде, а не быть привязанным к телевизору или монитору. Я писал про порты современных игр на платформу 1989 года, и мне стало интересно узнать, как же писали и продолжают писать игры под Game Boy. За все это время мне удалось узнать много нового, разобраться в деталях, и теперь я готов поделиться этим.
В планах у меня — выпустить серию статей. Начнем с истории портативной консоли, познакомимся с инструментами, разберем аспекты разработки под Game Boy, напишем простенькую базовую игру и, надеюсь, сможем запустить ее на настоящей железке. К тому же, в моих закладках собралась папка со ссылками на полезные ресурсы и сообщества активных разработчиков на Game Boy.
Как все начиналось
Работа над созданием портативных консолей началась еще в 70-ых годах прошлого столетия. Sega и Nintendo соревновались в завоевании игрового рынка с помощью своих флагманских консолей, и компании начали предлагать варианты карманного гейминга. Сперва это были простенькие электронные игрушки. Устройства были достаточно компактными, но играть можно было только лишь в одну игру. Никаких картриджей и библиотек. Одним из таких первых гаджетов стало устройство Tic-Tac-Toe от японской компании Waco.
В 80-ых ситуация резко меняется, и Nintendo выпускает на рынок первую консоль серии Game & Watch, созданную разработчиком игр Гунпэй Юкоем (Gunpei Yokoi). Дисплей портативной консоли был выполнен из сегментированного ЖК-экрана, что ограничивало возможности устройства. На Game & Watch можно было играть только в одну игру, но Nintendo вплоть до 1991 года исправно выпускала новые ревизии с новыми проектами. Консоли этой линейки были распространены в Европе и США, а в СССР появились собственные клоны. Под маркой «Электроника» вышла хорошо знакомая игра «Ну, погоди!». А раскладные варианты Game & Watch оказали влияние на развитие серии Nintendo DS.
Компании удалось продать более 40 млн экземпляров Nintendo Game & Watch, а Юкой в это время начал работать над Metroid для Famicom и думал о том, как портировать полноценные тайтлы на карманные устройства. Инженер объединился с Сатору Окада (Satoru Okada) и начал разработку новой карманной консоли. Сам Юкой занимался дизайном и внешним видом, а Окада взял на себя работу над железом.
Game Boy вышла в Японии 21 апреля 1989 года. Устройство построили на базе процессора Sharp LR35902 DMC-CPU с тактовой частотой 4,19 мГц. Основной и видеопамяти было ровно по 8 Кбайт. Картинка выводилась на монохромный 2,6-дюймовый дисплей с четырьмя оттенками серого. Game Boy уже не был ограничен только лишь одной игрой. В приставку можно было вставлять картриджи с разными проектами. На старте Nintendo выпустила игры Super Mario Land и Tetris. За первую неделю японцы скупили более 300 тыс. устройств, и компания начала работать над играми и расширять библиотеку. За все время удалось продать более 118 млн консолей.
В ноябре 1996 года Nintendo обновила линейку и представила Game Boy Pocket. Общий размер удалось уменьшить на 30%, но при этом увеличился экран гаджета. Также прошлое поколение питалось от четырех батарей типа AA, а новая версия — уже от двух типа AAA. Время автономной работы снизилось с 30 часов до 10. Больше никаких кардинальных изменений компания не вносила.
В 1998 линейку ждало очередное обновление, компания выпустила Game Boy Light. Из названия следует, что теперь дисплей обзавелся подсветкой. На верхней части корпуса добавили переключатель, отвечающий за активацию освещения. Консолью стало возможно пользоваться в темноте, а до этого на рынке начали появляться аксессуары в виде внешних фонариков. Из-за нововведений версия Light стала чуть больше. Продавалась консоль только в Японии, но позже весь мир тоже получил подсветку дисплея в новых ревизиях Game Boy Pocket.
21 октября 1998 вышло глобальное обновление Game Boy. Nintendo представила версию Color. Теперь дисплей стал цветным и поддерживал работу с 32-тысячной палитрой. Тактовую частоту процессора подняли до 8 мГц. Изменился и внешний вид. Если раньше консоль выходила в строгих серых цветах, то теперь стали доступны восемь цветных вариантов корпуса; была даже прозрачная модель, позволяющая разглядеть внутренности. Для системы выпустили более 700 проектов, бестселлером стала Pokémon Gold и Silver. Была и обратная совместимость со старыми картриджами, которые отображались в четырех цветах. Спад популярности консоли произошел только в 2001 году после выпуска Game Boy Advance.
21 марта 2001 года свет увидела наследница Game Boy Color — Game Boy Advance. Консоль изменила свою форму, и теперь ее стало более удобно держать в руках. В портативку установили 32-разрядный процессор arm7tdmi на частоте 16,78 мГц. Консоль уже могла запускать 3D-игры и поддерживала полную обратную совместимость со всеми прошлыми поколениями. Дисплей также был цветным, а питание осуществлялось с помощью двух батареек типа AA. Была выпущена ограниченная ревизия с ТВ-выходом, и карманную консоль можно было подключать к большому экрану.
В 2003 Nintendo обновила линейку и выпустила Game Boy Advance SP — компактную модель в форм-факторе раскладушки. Крупных изменений в железе не было, но теперь консоль питалась от встроенного аккумулятора. Одного заряда хватало на 10 часов игры с подсветкой или на 18 часов без нее. На перезарядку уходило около трех часов. Также компания расширила возможности локального мультиплеера. Если раньше между собой можно было соединять две консоли, то теперь поддерживалась перелинковка сразу с четырьмя. А вот стандартный выход наушников Mini-jack 3,5 мм заменили на разъем в собственном исполнении, и теперь надо было отдельно приобретать переходник. Чуть позже Nintendo выпустила ревизию AGS-101. В ней была более качественная подсветка, и ее нельзя было отключить. Был только выбор между двумя режимами яркости. Версия AGS-101 вышла в 2005 году и изначально исключительно для американского рынка, но потом модели начали продавать в Европе и Китае. В Японии эту модель так и не выпустили.
В 2005 году Nintendo представила последнюю консоль линейки Game Boy — Game Boy Micro. Дизайн опять полностью переработали, устройство стало прямоугольным, более угловатым и еще более компактным. Во внешнем виде уже начали прослеживаться черты Nintendo DS. Особых изменений в железе не было. Можно отметить, что аккумулятор стал меньше, и одного заряда хватало уже на 8 часов при стандартной яркости. От полной обратной совместимости отказались, и Micro могла запускать только игры, написанные под Game Boy Advance. Также компания выпустила внешний беспроводной модуль, который помогал соединять консоли для локального мультиплеера.
На этом эпоха Game Boy закончилась, и Nintendo начал развивать линейку DS. В новом поколении консоли стали мощнее, в них появились социальные функции и начались эксперименты с двумя активными дисплеями.
Выбор языка
Game Boy довольно старая платформа, и компания-производитель давно перестала поддерживать ее. Поэтому выбор языков и инструментов не столь велик. Но все же стоит отметить, что последнее время ретро-игры стали привлекать к себе больше внимания, и, бывает, в Сети появляются интересные решения, упрощающие разработку.
Игры под Game Boy можно писать на Assembly (ASM) и C. Выбор в основном зависит от компилятора, который будет использоваться, и начальных знаний. Рекомендуется писать код на Ассемблере. Именно на нем можно максимально грамотно использовать ресурсы консоли, которые строго ограничены, но порог входа гораздо выше, чем в C. Рассмотрим плюсы и минусы каждого из вариантов.
Assembly (ASM)
Плюсы:
мощный и гибкий;
обеспечивает максимальную производительность;
быстрый.
Минусы:
высокий порог входа;
для работы над оптимизацией требуется значительный опыт;
практически невозможно портировать готовый проект на другие платформы.
C (Си)
Плюсы:
порог входа ниже;
отладка кода на C дается в разы легче;
высоконагруженные функции можно заменять на ASM-модули и вызывать из кода на C;
Минусы:
теряет в скорости из-за особенностей архитектуры Game Boy;
иногда компиляторы ошибаются, и код может не запускаться. Такие ошибки встречаются крайне редко, но имеют место быть;
на C проще писать неэффективный код, так как некоторые базовые возможности языка просто не предусмотрены на платформе.
Платформы для разработки и компиляторы
RGBDS (Rednex Game Boy Development System) вместе с ASM
Инструмент, позволяющий собирать ASM-код в готовый ROM-файл. Включает в себя отдельные инструменты для трех этапов разработки и утилиту преобразования PNG-изображений в файлы графики Game Boy. Проект активно разрабатывается, авторы добавляют коммиты ежемесячно. Доступен для Windows, Linux и macOS.
Плюсы:
активное и опытное сообщество разработчиков;
работает с эмулятором BGB, что упрощает отладку.
Минусы:
набор функций несколько ограничен и уступает GBDK-2020.
GBDK-2020 (GameBoy Developers Kit) с C (Си)
Полноценный инструмент для всего цикла разработки игр под Game Boy. Включает в себя практически все необходимые утилиты. В него встроены API для взаимодействия с аппаратными возможностями консоли. Сама версия GBDK-2020 — улучшенная версия классического набора инструментов GBDK.
Плюсы:
содержит все необходимое для разработки;
живое и активное сообщество, готовое отвечать на вопросы и помогать новичкам;
есть поддержка эмулятора Emulicious для отладки;
большая база примеров и уже готовых проектов с открытым исходным кодом, все это поможет разобраться с особенностями разработки.
Минусы:
проявляет гиперопеку над новичками и упрощает многие аспекты аппаратной работы. Из-за этого детали кода остаются за кулисами, и начинающие могут воспринимать их как само собой разумеющееся.
Движок, базирующийся на GBDK, но добавляющий новые фукнции и упрощающий уже имеющиеся. Сам движок написан на C, но код игры можно писать как на C, так и на ASM.
Плюсы:
есть шаблоны для базовых элементов игры, все это упрощает процесс написания кода и ускоряет работу:
есть примеры готовых игр. Их меньше, чем в GBDK-2020, но они есть.
Минусы:
еще больше тонкостей скрыто под оболочкой.
Бесплатный движок с открытым исходным кодом. Инструмент был разработан как побочный продукт участия программиста Криса Малтби (Chris Maltby) в геймджеме. Разработчик применял в своей работе несколько самописных инструментов и в итоге решил, что может объединить все в один продукт. Движок поддерживает весь пайплайн создания игр под Game Boy: спрайты, скриптинг, управление камерой, настройку сцен, создание музыки, компиляцию и упаковку в итоговый файл. К тому же GB Studio работает по принципу drag-and-drop, что делает порог входа еще ниже. А на YouTube можно найти достаточно уроков.
Плюсы:
самый низкий порог входа;
есть много примеров, готовых игр и шаблонов;
активное сообщество.
Минусы:
игры на GB Studio работают медленнее всего;
ограниченные возможности скриптинга;
буквально вся работа кода скрыта от глаз разработчика.
После обзора языков и инструментов выбор становится очевидным. Если нет желания писать код и разбираться в деталях работы Game Boy, то следует сделать выбор в пользу движка GB Studio. Если уже есть глубокий опыт низкоуровневого программирования, то можно смело выбирать ASM и сразу начинать писать качественные игры. Если есть опыт работы с любым современным языком программирования, то можно начать со связки C и GBDK, а в процессе изучения постепенно переходить на ASM. Проекты будут становиться все больше, и их придется оптимизировать, а для этого надо будет прибегать к ассемблерным вставкам.
Ресурсы
Материалов и ресурсов по разработке на Game Boy в Сети не так много. Проект уже давно некоммерческий и забытый, поэтому все документации собираются силами энтузиастов. Но это не сказывается на их качестве. Все сделано с вниманием к деталям и новичкам.
Наиболее полное и подробное руководство для разработчиков. Документацию собирают с 1995 года и до сих пор пополняют новыми статьями и материалами. Ресурс охватывает все аспекты разработки и призван стать настольным сайтом программиста под Game Boy.
Еще одна документация, которая включает в себя информацию не только о программной части, но и железной. Есть множество ссылок на полезные статьи, гайды и ролики. Будет полезна разработчикам игр, эмуляторов и копий консолей.
Дискорд-сервер сайта gbdev.io. На сервере есть разделы для обсуждения всего стека разработки и база знаний. Сервер активный и насчитывает почти 800 участников. Пользователи отвечают на вопросы и делятся результатами.
Такой же сервер, но в нем собраны разработчики, предпочитающие работать с GBDK-2020.
Дискорд-сервер движка GB Studio
Архив-коллекция самодельных игр для Game Boy. В базе числится более 700 проектов. Можно использовать для поиска идей или обучающих материалов.
Архив кода, проектов и литературы, собранный за более чем 20 лет существования Game Boy.
Коллекция репозиториев. Здесь собраны игры, эмуляторы, материалы, инструменты и компиляторы.
Я в цикле статей буду использовать связку GBDK-2020 и C (Си). Все дело в том, что у меня нет достаточного опыта написания кода на Ассемблере, были только эксперименты и попытки разобраться, но процесса полного погружения не было. На C у меня ушел целый год универа, поэтому по этой части я неплохо разбираюсь и могу написать что-то внятное. С GB Studio я особо не разбирался. Скачал, запустил, изучил интерфейс, подвигал элементы в игре из примера и собрал. Выглядит достаточно интересно, в планах у меня посвятить чуть больше времени движку и попробовать сделать на нем что-то приличное.