Написал свою первую игру для Dendy (NES) - The Iron Steam
Всем привет. В этом посте я расскажу о своем первом опыте разработки игры для моей любимой консоли из детства под гордым названием денди (хотя раньше мы их приставками называли, но сейчас уже терминология устоялась). Далее вас ждет много интересного, так что заготавливайте вкусняшки.
Логотип консоли Dendy
История создания игры
Идея создать свою собственную игру для денди появлялась у меня довольно давно, но плотно занялся я этим вопросом только в конце 2022го года.
Основным стимулом для разработки игры послужило мое желание создавать свои модули расширения для консоли, так как для денди их практически не выпускалось, а у меня по этому поводу есть много идей и планов (модуль подключения обычно клавиатуры, модуль выхода в интернет и т.д.).
Изначально была поставлена задача написать хотя бы "Hello, World", который я мог бы запустить на эмуляторе. Но, начав читать переводной курс по разработке игр для денди на языке Си на хабре, мне удалось написать простейшую программу всего лишь за полчаса. И этого мне показалось слишком мало.
Более-менее освоив курс статей с хабра за 2-3 недели, в конце января 2023го было принято решение разработать пошаговую стратегию про стимпанковых мехов для закрепления навыков. Думал, что ограничусь созданием минимального геймплея, но разработка зашла немного дальше.
Такой сеттинг и жанр я выбрал, так как люблю пошаговые стратегии, стимпанк и игры про мехов (фронт мишн ван лав). Тем более у меня были наработки на эту тему в плане механик и немного лора (я делал наброски подобной игры для современных компов, но забросил).
В итоге с начала февраля 2023го началась активная разработка игры и продолжалась она до середины апреля (далее у меня появились более важные дела и игру пришлось отложить до лучших времен).
Игру я хотел анонсировать еще летом, так как базовые механики уже работоспособны и она проходима (хотя конкретно концовки у игры нет, можно просто пройти все уровни и прокачивать меха). Есть даже примерочный открытый мир, но он будет полностью перерисован и доработан.
Скриншот боевого геймплея актуальной версии игры
Особенности разработки игры для Денди
Разработка игр для NES/Famicom консолей является крайне специфическим занятием, так как требует понимания работы приставки на аппаратном уровне, что для многих является отталкивающим фактором. Но, так как у меня есть опыт разработки софта для микроконтроллеров, эта особенность для меня была не слишком критична.
Далее стоял вопрос о инструментах для разработки игры. Традиционно игры для денди пишут на ассемблере, так как ресурсы консоли очень ограничены и важен каждый такт процессора и каждый байт памяти. Я мог бы писать и на ассемблере, но это затянуло бы проектор и увеличило шансы к его забрасыванию на свалку истории.
В итоге я выбрал компилятор CC65, который позволяет писать код для денди денди на языке си. Этот компилятор поддерживается до сих пор и регулярно выходят обновления.
В качестве среды для разработки я выбрал Visual Studio Code. Для удобной сборки и запуска проекта был написан батник и добавлены горячие клавиши (но это тоже тема для отдельного поста). Так я собираю проект и запускаю его в эмуляторе нажатием одной клавиши на клавиатуре.
Глубоко закапываться в технические особенности консоли и разработки под нее я не хочу, так как ресурс все-таки развлекательный. Хочу отметить только несколько основных особенностей.
Вся графика состоит из тайлов 8х8 пикселей. При этом каждый тайл может использовать только 3 цвета и один прозрачный цвет (прозрачный цвет отображает цвет фона, а цвет фона определяется определенными битами регистров палитр).
Это значит, что требуется сводить все используемые спрайты к трем цветам, но если если спрайт состоит из нескольких тайлов, каждый тайл может использовать разные палитры (примерно так же это работает и для фона, но там немного сложнее).
Поэтому, если вы хотите вывести случайную картинку в формат NES, то ее нужно свести в формат 4 цветов и до нужно разрешения (256×240 пикселей). Вот пример преобразования картинки в формат, который уже можно вывести в вашу игру:
Реальное фото я преобразовал в денди формат (фото использовано с разрешения автора)
Подготовку изображения в почти автоматическом режиме легко сделать в фотошопе или гимпе (я использую гимп).
Но самая сложная часть разработки - это рисования пиксель арта в условиях очень низкого разрешения и ограниченности в количество цветов.
Для первых версий игры я использовал готовые спрайты из Front Mission без дополнительной подготовки. Они выглядели так себе, так как игра выходила на 16-битных консолях. Вот так это выглядело:
Спрайты меха в разных положениях
Когда я показывал людям эти спрайты и не уточнял, что это такое, большинство говорило, что похоже больше на месиво пикселей (я с этим согласен, меха там разглядеть сложно).
Но для тестов мне таких спрайтов хватало. И после рисования сетки поля я решил ее немного украсить травой, что в итоге породило вот такое кислотное чудо:
Скриншот режима битвы одной из ранних версий игры
На скриншоте выше видно, что трава действительно вышла даже немного симпатичная и в меню я тогда использовал некрасивые рамки.
Помимо режима битвы в игру был добавлен режим открытого мира. Карту мира я набросал довольно быстро и больше ее особо не переделывал. Выглядит она на данных момент вот так:
Временная карта мира
На карте мира каждая локация обозначена постройкой и войти в нее можно с помощью нажатия кнопки "A" на геймпаде. Локация в верхнем-левом углу - это локация-хаб с магазином, а остальные запускают сценарий битвы при входе (в каждой локации разный набор врагов, они отличаются комплектацией мехов и их количеством).
После того, как основные механики были реализованы, был начат процесс перерисовки мехов.
Как я уже говорил, одновременно можно использовать 3 цвета и один прозрачный цвет, который использует цвет фона. 3 цвета на при разрешении 16х24 пикселя на одно меха - это очень мало.
Поэтому я использовал решение, которое дало мне дополнительный цвет. Для этого я отказался от травы на экране и залил весь экран черным фоном. Это дало мне черный четвертый цвет для рисования мехов. Т.е. если я делаю прозрачный пиксель в спрайте, он выглядит как черный. Это позволило нарисовать более-менее адекватных мехов, которые выглядят как мехи. Вот так это выглядит в редакторе:
Спрайты мехов с использования прозрачных пикселей с черным фоном
Уже намного интереснее, но для анимации ходьбы нужно нарисовать для каждого положения по два спрайта (этим я пока не занимался, так как такой мелкий пиксельарт приходится рисовать буквально по пикселю, это очень муторно).
Многие технические ограничения консоли можно обойти за счет использования мапперов, но я пока обхожусь без него, так как хочу сделать создание реального картриджа максимально дешевым и простым. Стараюсь уложиться в стандартные 32 килобайта (место я потратил еще не все, музыка и прочее туда должно поместиться, тем более многое можно оптимизировать).
Резюмируя особенности разработки, можно сказать, что разработка игр для ретро-консолей особо ничем не отличается от разработки программ для микроконтроллеров. По этой причине постоянно приходится смотреть даташиты, описывающие разные узлы консоли.
Механики и ЛОР игры
Игра представляет собой классическую пошаговую стратегию, основанную на механике использования очков действия (AP). Каждое действие тратит очки действия, примерно как в лучшей в мире игре Fallout 2 (только у меня клетки квадратные). Система с фазами (как в X-COM) мне нравится меньше.
Панель, которая отображает состояние деталей меха и количество очков действия.
В режиме битвы игрок управляет своим мехом и пытается уничтожить вражеские мехи. Мех считается уничтоженным, если он лишается тела или обеих рук (без рук мех бесполезен). При этом, если мех лишается головы, он сильно теряет в точности, а если у него взрываются ноги, то он не может передвигаться. Битва заканчивается уничтожением всех вражеских мехов или гибелью игрока. Если игрок побеждает, он получает деньги за каждую сохраненную деталь вражеского меха.
Все оружие в игре делится на 4 типа:
Рукопашное оружие (может атаковать на одну клетку и есть возможность выбора точки атаки)
Пушки (наносят урон по случайной части меха с расстояния)
Снайперское оружие (наносят урон с расстояния и имеют возможность выбрать деталь вражеского меха для атаки)
Дробовики/картечницы (наносят урон по нескольким случайным частям меха)
Возможно будут еще какие-то типы оружия.
Вот пример меню выбора части меха для атаки:
Меню выбора части меха для нанесения по ней урона
Еще есть режим осмотра мехов (отображает имя, состояние частей меха и вооружение):
Режим осмотра меха, очки действия не тратит (Но может должно тратить?)
В режиме перемещения вы перемещаете меха курсором (каждый шаг тратит одно очко AP). Кнопка 'A' подтверждает перемещение, а кнопка 'B' возвращает меха на начальную точку (отменяет перемещение).
Механика использования экипировки пока не реализована.
Следующей важной частью игры является прокачка меха.
Вот так выглядит список доступных мест в локации-хабе:
Выбор места для посещения в хабе
А вот для примера магазин оружия:
Магазин оружия
Кнопка А покупает оружие в правую руку, В в левую, а Select возвращает вас на карту мира.
Вот мы и рассмотрели все основные особенности игры. Остальное вы можете попробовать сами используя эмулятор (ссылку на скачивание эмулятора и рома игры я дам в конце, если пикабу ссылки не уберет).
Планы по развитию игры
Планов по развитию игры у меня довольно много. Давайте приведу основные планы в виде списка:
Создание нормальной карты мира и проработка локаций на ней
Динамические анимации движения мехов в режиме битвы
Создание возможности ходить персонажем по хаб-локации и общаться там с людьми (но это сильно упирается в 32 килобайта памяти)
Написание лора с сюжетом и добавление его в игру
Создание диалоговой системы
Добавление звуков и музыки в игру (музыка на денди особенно специфическая штука)
Добавление новых спрайтов для мехов
Добавление различных построек и препятствий в режиме битвы (для оживления поля битвы)
Улучшение ИИ и добавление новых механик в битву
Расширение количества доступных частей и оружия для мехов
Режим игры для двоих игроков (PvP и PvE)
Для первого поста и анонса игры, я думаю, информации более-чем достаточно. Очень жду ваших предложений и замечаний по игре. Весь этот текст был написан в первую очередь ради получения обратной связи от потенциальных игроков, так как я не могу знать, что нравится другим людям, а исходить только из собственных соображений - это путь в никуда.
Поэтому жду вас в комментариях, готов ответить на все ваши вопросы. Спасибо за внимание.
Список основных ресурсов, которые я использовал при разработке:
Цикл статей по разработке игры для денди - https://habr.com/ru/articles/348022/
Википедия по разработке для NES (там все оч подробно описано и с примерами кода, но английским) - https://www.nesdev.org/wiki/NES_reference_guide
Живой форум по разработке ретро-игр (и не только) - emu-land.net
Сайт компилятор СС65 - https://www.cc65.org/
Еще несколько хороших статей про устройство консоли (на русском) - http://dendy.migera.ru/nes/g00.html
Эмулятор который я использую для отладки игры - fceux.com
Страница проекта. Там можно скачать ROM-файл для эмулятора (Нужно ли делать отдельный паблик для игры?) - http://73-it.ru/the-iron-steam.html
Видео-версия статьи с геймплеем и моими комментариям
Castlevania: another Simon's Quest
Будучи поклонником серии игр Castlevania и имея опыт писанины со времен паскаля и ассемблера, решил сваять альтернативную историю похождений Саймона Бельмонта.
С нуля и до того, что есть в видосе (практически завершенный движ) накатал за три недели вечеров, периодически впихивая разные посетившие идеи (зомбаки видны ток когда задом к ним, например, а так - тени)). Shadow Waltz назвал. Не юзал исходники, ток своё. Дольше всего мудился со спрайтами и тайтлами, пожалуй. И... Не выдумав сюжета, обнаружил, что заскучал)) Закинул прожект до времени, когда игрательное настроение сменится на созидательное.
Gremlins 2 - The New Batch (NES), Alfred Chiken (NES)
Сегодня хочу рассказать о двух попавшихся мне неплохих играх на NES/Dendy, пропущенных в детстве: Gremlins 2 - The New Batch и Alfred Chicken (хотя мне кажется, что с точки зрения грамматики должно быть Alfred The Chicken, но на титульном экране артикля нет).
Gremlins 2:
Мне почему-то кажется, что эта игра попадалась мне на слух и может даже на вид в детстве, но поиграть в неё не довелось. Возможно, только кажется, потому как и про фильм я много слышал, но не смотрел (надо как-нибудь исправить).
Игра представляет собой псевдо-3D платформер с неплохой рисовкой и приятной музыкой. По атмосфере мне напомнило Batman Returns. Кстати, разработчик игры - фирма Sunsoft, делала игры Batman и на NES, и на SEGA, а вот Batman Returns делала Konami, но мне напомнило именно её, возможно из-за вида сверху-сбоку.
Как я уже писал в предыдущих постах, главный критерий для меня - возможность играть на реальном железе. Да, я играю на эмуляторе, но играю по максимуму без сэйв-лоадов, а из читов пользуюсь только доступными на реальном железе (game genie). И здесь игра подходит идеально - есть система паролей - всегда можно продолжить с уровня, на котором закончил, и эти пароли показываются прямо в игре, не нужно иметь специальную книжку или лезть на специальный сайт.
Всего в игре 5 уровней, в каждом из которых по 3 подуровня: 2 лабиринта и босс. Исключения: в первом уровне нет босса, в последнем - он уже в уровне 5-2. По окончании каждого уровня меняется оружие на более удобное: сперва медленно и по дуге летящие помидоры (?), потом прямо летящие спички, потом скрепки, летящие до конца экрана. Именно с тем, что "оружие" не сразу стреляет через весь экран связано первое сложное место:
Вот этот вот злой гремлин плюётся огнём, причём в случайном порядке, не позволяющем выбрать тактику. С "большой земли" его не достать имеющимся на этот момент оружием, поэтому надо прыгать ближе к нему и убивать оттуда, надеясь, что не прилетит. Стрелять по диагонали можно, но лично у меня возникли сложности с позиционированием, не знаю в чём дело: в джойстике, винде или самой игре, может, на железе такой проблемы нет. Сложности в подобных моментах добавляет ещё то, что при получении урона вас отбрасывает назад и можно свалиться с платформы. Один раз можно свалиться без штрафа - есть воздушный шарик, на котором потом можно ещё и перелететь сложный участок. Далее тратится по полсердечка, т.е. 6 или 8 раз можно упасть/получить урон.
Изначально даётся 3 сердечка (6 хитпойнтов) и 1 шарик (1 безопасное падение) и сколько-то жизней (не помню), продолжения в игре бесконечные, но после продолжения даётся только 1 жизнь, и если умер на уровне х-3 (босс), то начинаешь с уровня х-2. На каждом уровне есть магазин бонусов, где можно купить дополнительный шарик, сердечко, максимальные сердечки (их станет 4 вместо 3), жизнь и ещё что-то, обозначенное буквой P (насколько я понял, посмотрев прохождение уже после того, как сам прошёл - это усиление оружия). Всего 5 предметов, но в каждом магазине представлены только какие-то 3.
Статус-экран
Магазин бонусов
Ещё один сложный момент заключается в том, что не всегда понятно: яма перед тобой или тень от предмета, но я для уверенности просто перепрыгивал всё чёрное. Кстати, о прыжках: есть в игре такие вращающиеся булавы, так вот их можно перепрыгивать, о чём я догадался далеко не сразу.
Место, до которого я честно дошёл (почти самый конец уровня 4-2)
Выше на скрине место, до которого я дошёл сам по-честному, дальше использовал Game Genie. Нужно попасть на синюю платформу сверху, этому препятствует двигающаяся влево-вправо жёлтая платформа, минуя которую допрыгнуть нельзя, вращающаяся булава и серый элеватор, который стаскивает наверх, дополнительная проблема - попасть на элеватор вдоль серой стены нельзя, игра просто не даёт на него зайти, сделать это можно только стоя посередине платформы, на которой персонаж на скрине выше. Я тупо кучу раз подыхал тут, зависая на входе на элеватор и получая при этом булавой, либо сваливаясь в яму с элеватора, не успевая нажать прыжок. В целом, конечно, элеваторы - самая бесячая штука в игре.
Моя оценка по итогу:
музыка - 10/10
картинка - 10/10
удобство игры - 8/10 (хотелось бы не проходить уровень перед боссом, если сложность с ним)
геймплей - 7/10 (долбаные элеваторы)
Добавил себе в папочку для переноса на флэш-картридж и дальнейшей игры на железе.
/**************************************************************************************************/
Alfred Chiken:
Про эту игру сказать особо нечего, поэтому не стал её выносить в отдельный пост. Типичная головоломка "найди кнопку, открывающую выход, по пути собери всё, что можешь" от фирмы Twilight, других игр которой я не знаю (согласно википедии их 16 штук). Играем за Альфреда. Ищем выход, собираем кристаллы, перепрыгиваем или убиваем заводных мышей, пикируя на них (кнопка вниз в прыжке). Есть и подводный уровень. По атмосфере мне напомнило Tom & Jerry, возможно из-за сырного фона. Два больших минуса игры: один трек на всю игру, который быстро начинает надоедать, и отсутствие системы паролей, т.е. если сел, то играй до конца. В остальном игра приятная и по картинке и по самому игровому процессу - всё в балансе, проходится без проблем.
Моя оценка по итогу:
музыка - 4/10 (есть мелодия, есть полифония, не просто пиканье, но бесконечные повторы....)
картинка - 8/10 (я бы добавил тёмных тонов - очень яркая)
удобство игры - 4/10 (ни паролей, ни настроек)
геймплей - 10/10 (всё в балансе, нет "скользких" уровней, залипаний, управление нормальное)
Добавил себе в папочку для переноса на флэш-картридж и дальнейшей игры на железе.
Dendy Project Dart - топовые гонки на NES
Отличная идея, созданная ещё в 2020 году, на основе жаб убийц и их гидроциклов👍.
Жаль что игра так и осталась лишь на уровне «Бэта», идея была хорошая, и графика классная, а музыка и вовсе шик.
____________________
Платформа: NES
Жанр: Боевик, Гонки
Дата выхода: 2020
____________________
👉А какие вы знаете самые свежие игры выпущенные на Денди (НЕС)? Поделитесь знаниями, если не жалко😉
Dendy игра Rockin' Kats (Крутые коты) 1991
Вспоминая игры Денди))))
Игра Крутые коты это история о о коте Вилли, который должен разыскать свою потерянную даму сердца.
Но несмотря на множество врагов, наш герой не падает духом. Вооружившись своим незаменимым оружием - боксерской перчаткой с мощной пружиной, он отважно отправляется на улицу, где таит множество опасностей, поджидающих его на каждом шагу. Но ради любимой он готов на все!
А вы помните такую игру из детства?
Даже в 2023 году RG280V - все ещё лучшая ретро игровая cоло-портативка (отзыв ПК игрока)
Вдогонку к своей писанине про Steam Deck на скорую руку поделюсь своим недавним личным открытием: существует целый класс устройств "ретро портативных handheld игровых консолей", о котором я даже не подозревал.
Суть проста: производители берут достаточно старое железо, устанавливают его в корпус с несколькими кнопками-джойстиками, более-менее экран, батарейку; нарекают это "ретро консолью", заливают внутрь кастомную прошивку "для игр", заливают тысячи образов самих ретро игр - и продают за 50-300 долларов (дороже особо не продашь, там Steam Deck уже начинается) как игровой девайс для ностальгирующих по детству "уже не детей".
При этом (хозяйке на заметку) во всё старьё можно без всяких проблем бесплатно играть на любом Android телефоне (залить туда эмуляторы, залить тысячи игр, взять блютус геймпад/пользоваться экранными кнопками - и вперед), и я даже это попробовал в какой-то момент; но в целом, тапать по экрану - это было "как-то не то", а подключать каждый раз к телефону геймпад/запускать эмуляторы - показалось "слишком проблемно" для быстрых игровых сессий "на несколько минут" в условной очереди/транспорте.
Поэтому, прошерстив интернет, я взял себе б/у за ~30 долларов (несколько тысяч рублей) вот этот гаджет: Anbernic RG280V. Помещается в ладонь, заряда хватает часов на 5, количество кнопок аналогично Playstation 1 (вышла в 1994), и играть на нем можно ВО ВСЕ системы, вышедшие до плейстейшн 1 включительно: NES (денди), Sega, Super NES, Sega MD/Genesis, PS1, игровые автоматы (их много всяких разных), некоторые MS-DOS игры, какие-то отдельные кастомные порты современных игр. В общем все игры, выпущенные "до конца 90х" - в целом запускаются и играются "очень неплохо".
И, что скажу. Оказалось, что это "очень прикольно"! :)
Из памяти всплывают уже совсем позабытые моменты из детства, какие-то ранние переживания; прохождение англоязычных игр без какого бы то ни было понимания "а что там написано", многонедельные попытки преодолеть "очередной трудный уровень" - и прочее прочее прочее. В общем, такая личная машина времени размером с половину современного мобильного телефона.
Добавлю, что особый интерес у меня вызывают не только "игры из моего детства", но и игры, которых в моем детстве у меня не было, а вот у всех знакомых коллег "западных иностранцев" они были (по причине наличия игровых консолей, тогда как я почти сразу стал ПК-игроком). И такой взгляд в прошлое дает мне новую перспективу при оценке современного положения игровой индустрии, различных рынков и различий в привычках игроков в зависимости от потреблённого в детстве контента.
В общем, любопытное "путешествие" получилось; и как раз вот этой эмоцией мне и захотелось со всеми поделиться.
____
А девайс - классный :) Всем, кому интересно - с удовольствием рекомендую, и правда "топовая игрушка" у них вышла (если брать "за недорого" или б/у).