Libsm64: как культовый Super Mario 64 превратили в библиотеку для игровых движков

Super Mario 64 — это не просто одна из первых 3D-игр, а настоящий эталон жанра платформеров. Однако на протяжении десятилетий её код оставался закрытым, а использование персонажа Марио в сторонних проектах было возможно лишь через эмуляцию целого ROM, что накладывало массу ограничений. Проект libsm64 меняет ситуацию: команда разработчиков провела реверс-инжиниринг игры и превратила её в статическую библиотеку на C, которую можно встраивать в любые игровые движки — от Unity и Godot до собственных фреймворков. В этой статье мы разберём, как устроен libsm64, сравним его с традиционной эмуляцией и оценим практическую ценность для инди-разработчиков и исследователей.

Что такое libsm64?

libsm64 — это открытая библиотека, доступная на GitHub Источник, которая воспроизводит логику, физику и рендеринг Марио из Super Mario 64. В отличие от полного порта игры (sm64pc), здесь акцент сделан на модульность: разработчик получает не готовую игру, а набор функций для управления персонажем. Библиотека написана на чистом C (C99) и собирается как статическая (.a) или динамическая (.so/.dll) библиотека. Важно: libsm64 не включает оригинальные ассеты (текстуры, модели, звуки) — их необходимо извлечь из легальной копии Super Mario 64 с помощью специальных утилит, таких как sm64extract.

Как это работает?

Основу libsm64 составляет реверс-инжиниринг оригинального машинного кода Super Mario 64, версии для Nintendo 64. Команда проекта восстановила исходную логику: алгоритмы движения Марио (тройные прыжки, wall kicks, long jumps), обработку столкновений с геометрией, поведение камеры, сбор монет и взаимодействие с врагами. Всё это было переписано на C и оформлено в виде API. Типичный цикл работы с библиотекой выглядит так:

  • Инициализация: sm64_init() загружает извлечённые ассеты и настраивает внутренние структуры.
  • Обновление: каждый кадр вызывается sm64_update(input_state, delta_time), где input_state содержит значения осей контроллера N64 (аналоговый стик, кнопки).
  • Рендеринг: после обновления sm64_render() генерирует список команд OpenGL (или абстрактные примитивы), которые можно передать в ваш рендерер.

Такой подход даёт полный контроль: можно заменить рендеринг на современный (шейдеры, PBR), модифицировать физику или даже комбинировать Марио с собственными механиками.

Технические детали

  • Аудио: встроен эмулятор аудио N64 (на базе библиотеки mixmastr64). Звуки воспроизводятся через callback-функцию, которую вы предоставляете. Можно отключить звук или заменить его на свои сэмплы.
  • Рендеринг: библиотека использует фиксированный конвейер OpenGL 1.x, но команды генерируются в буфер, который легко перехватить. Сообщество уже адаптировало libsm64 для OpenGL 3.x, Vulkan и DirectX 12.
  • Физика: полная модель из оригинала — гравитация, инерция, коллизии с треугольниками (BSP-деревья). Это значит, что поведение Марио идентично оригиналу вплоть до глитчей (например, backwards long jump).
  • Память: библиотека не выделяет динамическую память после инициализации — все данные хранятся в статических массивах. Это упрощает интеграцию в проекты с жёсткими ограничениями по памяти (например, встраиваемые системы).

Сравнение с эмуляцией

Эмуляция (Project64, Mupen64Plus) позволяет запустить оригинальную игру целиком, но не даёт изолированного доступа к персонажу. libsm64, напротив, предоставляет именно ту степень детализации, которая нужна для интеграции. Сведём различия в таблицу:

Параметр Эмуляция полного ROM libsm64
Цель Запуск оригинальной игры Библиотека для встраивания
Контроль над персонажем Только через эмулируемый ввод Через API (аппаратный или программный ввод)
Возможность модификации Патчи ROM, LUA-скрипты Прямое редактирование кода библиотеки
Производительность Зависит от эмулятора (обычно 60 FPS) Близка к нативной (низкие накладные расходы)
Требование к наличию ROM Обязателен (загрузка целиком) Необходим только для извлечения ассетов
Портируемость на новые платформы Требуется портировать эмулятор Достаточно скомпилировать libsm64 под целевую платформу

libsm64 проигрывает в простоте (нужна работа с ассетами и рендерингом), но выигрывает в гибкости и производительности.

Практические примеры использования

  1. Инди-игры: добавление Марио в качестве секретного персонажа или босса. Разработчик может взять только анимации и физику, а графику перерисовать в своём стиле.
  2. Образование: изучение того, как работали 3D-платформеры на N64. Студенты могут модифицировать движение Марио и наблюдать изменения в реальном времени.
  3. Инструменты: создание редакторов уровней, где Марио используется для тестирования геометрии, или бенчмарков для сравнения производительности разных рендереров.
  4. Интеграция с современными движками: уже существуют примеры встраивания libsm64 в Godot и Unity через нативные плагины. Код проекта доступен на GitHub; платформа ASI Biont поддерживает подключение к GitHub через API — подробнее на asibiont.com/courses.

Ограничения и риски

  • Юридические: код libsm64 основан на реверс-инжиниринге, что в большинстве стран считается законным, однако использование торговой марки Nintendo и распространение ассетов без лицензии — нарушение авторских прав. Проект предупреждает, что предназначен для образовательных целей.
  • Технические: библиотека включает только логику Марио, без уровней и NPC. Вам придётся самостоятельно реализовать окружение, интерфейс и другие игровые элементы. Также рендеринг заточен под возможности N64 (низкое разрешение текстур, отсутствие нормал-маппинга).
  • Отсутствие многопользовательского режима: в текущей версии поддерживается только одиночное управление. Ведутся работы над сетевой игрой, но стабильной реализации пока нет.

Будущее проекта

На июль 2026 года libsm64 активно развивается. В планах:
- Поддержка более современных API (Vulkan, Metal, DirectX 12) без дополнительных прослоек.
- Возможность загрузки ассетов из других версий Super Mario 64 (например, Nintendo DS или Shindou Edition).
- Интеграция с системами физики Havok и PhysX для гибридных проектов.
- Появление готовых мостов для популярных движков (Unreal Engine, Godot) в виде официальных плагинов.

Заключение

libsm64 — замечательный пример того, как сообщество может вдохнуть новую жизнь в классику, не нарушая закон. Это не замена эмуляции, а инструмент для тех, кто хочет использовать оригинальные геймплейные механики в своих проектах. Разработчикам стоит учитывать технические ограничения и юридические риски, но для образовательных и исследовательских целей библиотека открывает огромные возможности. Если вы хотите глубже изучить проект, начните с чтения README на GitHub и экспериментов с приведённым примером на SDL2.

← Все статьи

Комментарии

Читайте также

Этот $9 ключ физически блокирует ваши самые зависимые приложения: фишка для продуктивности

27 июля 2026

Кембриджский курс «Глобальные перспективы» для нижней средней школы (1129): Развивайте критическое мышление с помощью персонализированных уроков на основе ИИ

27 июля 2026

TOGAF 10 + ArchiMate 3 — Корпоративная архитектура: адаптивный курс на основе ИИ для развития реальных навыков EA

27 июля 2026

Cambridge International A-Level Economics (9708): разбор курса, программа AS и A2, как AI помогает освоить макро- и микроэкономику

27 июля 2026

Как я построил Full-Stack SaaS за 7 дней с помощью FutureX: опыт Vibe Coding

27 июля 2026

Как автоматизировать ферму с помощью интеграции метеостанции и бескодового ИИ-агента ASI Biont

27 июля 2026

Строительные нормы (СП, СНиП, ГОСТ): как AI-обучение на Asibiont помогает освоить нормативную документацию за считанные недели

27 июля 2026

Cambridge International A-Level Biology (9700): Как подготовиться к экзаменам с персонализированным AI-обучением

27 июля 2026

Курс «Автономные мульти-агентные AI системы» на Asibiont: как перестать гадать и начать строить продакшн-решения с CrewAI, AutoGen и LangGraph

27 июля 2026