Геймпад на базе Arduino Nano Matter запускает Quake со скоростью 27 кадров в секунду

Разработчик решений Silicon Labs Никола Врачиен (Nicola Wrachien) разработал геймпад для Arduino Nano Matter, на который он успешно портировал Quake – популярную игру в жанре шутера от первого лица. Мы видели, как разработчики и инженеры переносили Doom на все – от зубных щеток до GPS-приемников. Ранее, на празднование 30-летия Silicon Labs, Врачиен смог портировать Doom на Sparkfun Thing Plus Matter MGM240P.  

Но чтобы сделать игру более интересной и сложной, он хотел проверить, можно ли запустить Quake на MGM240SD22VNA MCU, и ему это удалось. В конце концов, он не только смог запустить игру, но и реализовал улучшенную графику (лучше, чем в Doom), лучшую физику, 3D-рендеринг и многое другое.

Этот геймпад построен на базе платы Arduino Nano Matter, которая включает MGM240SD22VNA MCU от Silicon Labs, а также 256 КБ ОЗУ, что очень мало по сравнению с изначальными системными требованиями Quake – минимум 8 МБ ОЗУ и процессор класса Pentium. Он воспринял это как вызов и разработал специальную печатную плату в форме геймпада с кнопками, джойстиками и ЖК-дисплеем 320×240 пикселей.

Что касается программного обеспечения, то кодовая база SDLQuake1.09 позволяла разрабатывать его на современном компьютере под управлением Windows. Для оптимизации пространства константы хранились во флэш-памяти вместо ОЗУ. Однако, доступ к данным из внешней флэш-памяти SPI был очень медленным. Чтобы преодолеть это, микроконтроллер был разогнан до 136 МГц, и было реализовано несколько стратегий оптимизации, включая кэширование текстур, асинхронную загрузку текстур DMA, оптимизированный рендеринг врагов, функции языка ассемблера и частичное обновление экрана. Также были разработаны дополнительные инструменты для упрощения процесса, включая генерацию таблицы констант, преобразование QuakeC в C, конвертер Quake Pak для оптимизации данных игры для рендеринга.

Результат проделанной работы — это полноценный игровой процесс, включающий в себя искусственный интеллект противника, игровую логику, поведение монстров, триггеры, двери, секреты и телепорты. 3D-движок также полностью реализован со статическим и динамическим освещением и турбулентными водными поверхностями. На врагах и объектах используется затенение методом Гуро. Также присутствует стереозвук, включая окружающие, статические и динамические звуки. Метод тонирования Гуро — это распространенная техника затенения, используемая в 3D-графике.

В дополнение к игровому процессу, также реализована консоль для активации чит-кодов. Вы можете сохранить свою игру с точным состоянием игры, включая состояния и позиции как игроков, так и монстров. Элементы управления можно настраивать, а настройки, включая расположение клавиш, гамму и громкость звука, сохраняются в энергонезависимой памяти. Благодаря всем этим функциям игра работает со средней частотой 27 кадров в секунду, обычно от 17 до 45 кадров в секунду при разрешении 320×200 пикселей, как в оригинальной игре.

Все эти функции используют 256 КБ ОЗУ, доступные на плате, включая 20 КБ радио-памяти, поскольку этот порт не используется для радиосвязи. Производительность достигается за счет разгона MGM240 до частоты 136 МГц. Имеется 16 переназначаемых кнопок вместе с двумя аналоговыми джойстиками, которые используются для перемещения. Две 16-мегабайтные микросхемы SPI flash IC используются для хранения игровых данных, которые загружаются с SD-карты. Стереодинамики обеспечивают звук, а также имеется 3,5-мм аудиоразъем для наушников или внешних динамиков. На печатной плате также можно найти схему зарядки для подключения LiPo-батарей. Печатная плата разработана для компонентов только со сквозными отверстиями, что обеспечивает легкую сборку.

Ранее мы видели как Doom был портирован на RP2040, и мы видели людей, запускающих Doom на кубиках LEGO.  Рекомендуем вам ознакомиться с указанными обзорами, если вас интересуют эти темы.

На протяжении многих лет Doom служил эталоном для запуска игр на ограниченном оборудовании, но с портом Quake планка была поднята. Более подробную информацию можно найти в репозитории Next Hack на GitHub или на их веб-сайте. Вы также можете ознакомиться с постом Silicon Labs для получения дополнительной информации.

Выражаем свою благодарность источнику из которого взята и переведена статья, сайту cnx-software.com.

Оригинал статьи вы можете прочитать здесь.

0 0 votes
Article Rating
Подписаться
Уведомление о
guest

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

0 Комментарий
Inline Feedbacks
View all comments