image

Поклонник Super Mario 64 смог портировать проект на компьютер спустя 24 года после его выхода, не прибегая к эмуляции Nintendo 64. Портированная игра поддерживает DirectX 12 и совместима с трассировкой лучей.

Пользователям продемонстрировали трассировку лучей Паскаля Гилчера, с помощью алгоритма фонового затенения, с помощью эффекта отражения на поверхности объектов и расширенными эффектами глубины резкости.


С поддержкой DirectX удалось реализовать широкоформатный режим игры и увеличить разрешение. Автор эксперимента смог запустить Super Mario 64 в разрешении 4K при 550 кадрах/с на ПК с процессором Intel Core i7-7700K 4,5 ГГц и видеокартой NVIDIA GeForce GTX 1080 8 Гбайт. Он порекомендовал установить ограничение частоты на 30 кадров/с.


Как отмечается, выход порта для ПК не имеет ничего общего с недавней утечкой внутренних файлов Nintendo, относящихся ко временам Gamecube. Он стал прямым результатом усилий команды Zelda по декомпиляции ПЗУ Super Mario 64 в разборный код C — реверс-инжиниринга от простого двоичного до легко читаемого кода. На эти попытки ушло два года.

Первый шаг в реверс-инжиниринге ПЗУ N64 предполагает установление версии IDO-компилятора Silicon Graphics, которая была использована для создания ПЗУ. Затем нужно выяснить, как организовано ПЗУ, говорят энтузиасты. В играх N64 файлы упорядочены в 16-байтовые блоки, что облегчает просмотр «отступов», отмечающих конец файла. Отладочные сборки игры могут также помочь инженерам задокументировать ее структуру благодаря наличию несжатых файлов и макросов C, таких как __FILE__ и __LINE__, которые показывают внутренние имена, используемые Nintendo.

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

Сложность также варьируется в зависимости от игры. Для Super Mario 64 Nintendo декомпилированный язык ассемблера было проще преобразовать обратно в C-код, а, к примеру, в случае с Ocarina of Time Nintendo использовала флаги оптимизации для генерации более быстрого кода, и полученное ПЗУ намного сложнее превратить обратно в исходный код. После нескольких месяцев работы Zelda включила в С-код только около 15% функций Ocarina of Time.
См. также: