Supreme Commander Two@SupremeCommanderTwo
← все записи

Сделал маленькую игру для NES 💻

👁 4
Хотелось попробовать что-то необычное: написать игру для старой доброй Nintendo Entertainment System она же Famicom она же известная нам Dendy. Так появилась Star Courier - небольшая аркада про сбор энергии в космосе. Управляешь кораблём, собираешь восемь энергетических ячеек и уворачиваешься от патрульных дронов. На всю миссию - три щита. После столкновения корабль ненадолго становится неуязвимым и мигает. Собрал всё - победа. Потерял щиты - можно попробовать снова. Звучит просто, но на NES даже такая игра даёт повод разобраться, как устроена консоль. Что под капотом !😈 Игровую логику написал на ассемблере 6502 (процессор Ricoh 2A03 для NES (NTSC) основан на ядре MOS 6502). Здесь приходится самому заниматься вещами, которые современные движки обычно берут на себя: читать контроллер, обновлять спрайты, выводить текст и обращаться к звуковому чипу. Графику тоже сделал с нуля. Небольшой Python-скрипт собирает пиксельный шрифт, корабль, дронов и энергетические ячейки в формат NES. Даже расположение надписей на экране нужно подготовить заранее. Особое внимание - работе с видеопамятью. Обновления во время игры выполняются в короткий промежуток между кадрами, когда консоль не рисует изображение. Это быстро приучает думать о том, что и когда делает код. Звуковые эффекты получились простейшими: один импульсный канал звукового чипа сообщает о подборе энергии и получении урона. Для такой маленькой игры этого достаточно, чтобы действия ощущались живее. Без забавных ошибок не обошлось !🙂 При проверке экрана заметил надпись SHIELDS33. Оказалось, счётчик щитов обновлял соседнюю позицию: новая цифра попадала на место пробела, а старая оставалась рядом. Ошибка всего на одну клетку - и у игрока уже будто бы 33 щита вместо трёх. Проверку игровой логики автоматизировал через Lua в эмуляторе FCEUX. Тесты нажимают кнопки, проверяют движение и границы поля. Для проверки столкновений и сбора предметов они устанавливают нужные позиции объектов в памяти. Так удалось проверить победу, поражение, временную неуязвимость и повторный запуск. Что получилось !📖 На выходе - настоящий .nes ROM размером около 24 КБ (стандартный картридж имеет 32 КБ для кода и 8 КБ для графики): с титульным экраном, игровым полем, звуками и завершённым игровым циклом. Пока проверил его в эмуляторе; до настоящей консоли ещё не добрался. Больше всего мне понравилось, насколько хорошо здесь видна связь между кодом и результатом. Несколько байтов меняют рисунок корабля, одно значение - его скорость, один неверный адрес - артефакт на экране.
1

Supreme Commander Two

Подписаться