1968

Сквозь боль и страдания: Я сделал игру для денди2

Начальная заставка

Начальная заставка

Вступление

Давно, когда я еще учился в школе, зимним вечером, пройдя очередной уровень марио я загорелся идеей - сделать свой платформер для игровой приставки.

Примерно через полгода у меня появился персональный компьютер с операционной системой MS-DOS и средой программирования QBasic:

QBasic

QBasic

Ну вот! Подумал я, настал мой час и сел писать игру в надежде что как-то придумаю как запихнуть эту игру потом в приставку денди.

Наивно, но тогда не было интернета и узнать, как вообще создавать игры и заливать их на картридж было довольно сложно.

Понятное дело, после некоторых попыток у меня толком ничего не вышло.

Да, у меня получилось сделать какой-то фон, персонажа и даже заставить его двигаться и на этом разработка игры была закончена.

Прошло почти 25 лет, у всех стало модно закрывать какие-то свои гештальты, решил закрыть и я.

Для начала нужно было ознакомиться с платформой и ее особенностями, а их как оказалось довольно много, как и у всей ретро-техники.

Железо

Знакомиться с платформой я начал буквально с "кишков микросхем, заказав плату, изучив схему и собрав это все чудо из рассыпухи, благо опыт работы с паяльником довольно неплохой.

Готовая приставка

Готовая приставка

Что мы имеем:

CPU - UA6527P/UA6527, Клон популярного в свое время 8-битного процессора 6502.

PPU - 6538/6528, Видеочип, аналог видеокарты.

RAM - 62256, 2 Кбайт оперативной памяти, которые позволяют использовать горизонтальный или вертикальный скролл по очереди, было бы 4 Кб можно было бы в теории и одновременно.

Звук - 2 прямоугольных канала, 1 треугольный, 1 шумовой и цифровой канал. Да-да, примитивная звуковая карта уже в те времена.

Микросхемы приставки

Микросхемы приставки

Разрешение экрана 256х240 и 54 цвета (Есть цвет чернее черного и еще некоторые цвета, которые лучше не использовать для избежания глюков на разных телевизорах).

Приставка Dendy она же NES

Приставка Dendy она же NES

Инструментарий

Писать код для приставки можно на двух языках: на ассемблере и си.

Я решил использовать си для короткого и удобного вида кода, но некоторые вставки ассемблерного кода пришлось писать с нуля (так как скорости процессора в 5,37 МГц всегда не хватало).

Для компиляции кода я использовал компилятор cc65, с опцией --add-source (добавляет ассемблерный код, в котором уже можно найти не очевидные косяки).

Для графики, кроме фотошопа использовал программу YY-CHR:

YY-CHR

YY-CHR

Для распиливания рома на прошивку, программу NRM.

Для статичных фонов есть очень удобная программа NES Screen Tool, которая позволяет нарисовать и выгрузить экран в массив байтов. Бонусом этом массив можно еще сжать RLE сжатием.

Для написания музыки и звуков я использовал FamiTracker и библиотеку FamiTone2.

Для создания уровней Tiled + самописный конвертер в встроенный формат карты.

Для схемы картриджа Sprint layout.

Для отладки лучше всего подходит эмулятор FCEUX:

FCEUX

FCEUX

Код игры

Но самая попаболь проблема, была в том, что я решил делать платформер а не статичную игру.

Сразу загрузить массив байтов на экран нельзя, потому что длинна уровня может быть от 3 до 256 экранов в длину.

Видеочип за один кадр успевает загрузить только 2 ряда блоков по 8 пикселей.

Еще за этот кадр нужно успеть прочитать состояние джойстиков, проиграть такт музыки, обработать коллизии, передвинуть спрайты на экране и т.п.

Для оптимизации я разработал такую структуру уровня. Где экран разбит на поле 16х16:

const unsigned char LEVEL1[] = {

...

0x75,

2,

ID_OBJECT,

...

};

Первый байт — координаты на экране x = 7, y = 5.

Второй байт — номер экрана уровня.

Третий байт — идентификатор объекта.

Структура объектов в игре

Структура объектов в игре

У каждого объекта есть атрибут коллизии, может игрок пройти через него или нет. На основе этих атрибутов строиться карта коллизии уровня.

unsigned char COLLISION[64];

Первые 32 байта, это первый экран NAMETABLE, вторые 32 байта для второго экрана NAMETABLE экрана.

Каждый бит, может быть, 0 если игрок может пройти и 1 если стена.

В итоге получаем два поля по 16х16 бит = 32+32 байта.

Картридж

Я не особо хороший художник, рисовать графику, уровни, спрайты, когда у тебя всего 4 цвета на плитку, уходит уж очень много времени.

Вид игры в эмуляторе

Вид игры в эмуляторе

Было решено упростить задачу и запихать все в один банк памяти.

Это позволяет использовать картридж без маппера и не писать дополнительный код, который переключает эти банки.

Из приставки можно реально выжать намного больше и красивее, но по трудозатратам эта игра будет на уровне современной игры с красивой графикой, стоит ли оно того?

Возможно, кто-то захочет этим заняться, и я поделюсь с ним своими наработками.

В итоге схемотехника картриджа сводиться к плате с 2мя микросхемами памяти, у которой нужно просто подключить ноги к шине данных картриджа.

Схема в Sprint layout

Схема в Sprint layout

Можно было бы, конечно, заказать у китайцев картриджи на каплях или флэш-памяти, но я хотел именно винтажного вида картриджа на DIP микросхемах (такие раньше попадались только в старых или дорогих картриджах)

Сами микросхемы найти не составило проблем, сначала я развел схему под w27c512, но как оказалось более объемная память w27c010 стоит дешевле и найти ее еще проще.

После того как пришли платы, я подготовил прошивку через NRM, прошил микросхемы в программаторе XGECU T48 и впаял их на место.

Готовый картридж для Денди

Готовый картридж для Денди

Распространение

Как продвигать игру, продавать картриджи и как их распространять: большой вопрос.

Также спрос на такие игры небольшой, даже если спрос и будет, то большую партию картриджей просто невозможно будет спаять.

Я крайне доволен своей работой, выпустить игру на физическом носителе для приставки 40-летней давности довольно крутая ачивка для разработчика игр.

И по традиции, страница игры... На авито?:

https://www.avito.ru/novosibirsk/igry_pristavki_i_programmy/igra_dlya_dendi_2025_goda_7772682988

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества