MAEngine


3D-движок для Game Maker: Studio (единственный, насколько можно судить). Написан на C++ с использованием Direct3D 9. Поддерживает загрузку моделей MD2, X и MPM (собственный формат), вершинную и скелетную анимацию, шейдеры на HLSL, физику на основе движка Bullet, поиск пути при помощи библиотеки Recast & Detour, а также 3D-звук при помощи FMOD. Кроме того, в движке есть функции для работы с матрицами, векторами и кватернионами. Движок находится на ранней стадии разработки, но уже выглядит многообещающе.

Проект открытый, исходники доступны на GitHub: https://github.com/TheStolenBattenberg/MAEngine.

MAEngine SDK от 30.07.2017 (7 Мб)

Демонстрационное приложение (7 Мб)

Нам, естественно, сразу стало интересно, можно ли запустить MA-Engine под Game Maker 8. Изучив исходники, мы выяснили следующее. Движок работает в качестве своеобразного дополнения для встроенного 3D-режима GMS - то есть, получает контекст Direct3D и рендерит свою графику в нем. Этот подход имеет некоторое преимущество перед 3D-движками для классического Game Maker, которые создавали новую поверхность поверх встроенной графики GM - получалась инициализация двух графических API, что не очень хорошо (хотя это и особо не влияет на производительность благодаря использованию функции set_automatic_draw(0)). К сожалению, именно это не позволяет легко портировать MA-Engine под классический Game Maker, где попросту нет возможности получить указатель на контекст Direct3D. Теоретически, можно расширить движок и написать свою инициализацию контекста - мы попробовали, и это действительно сработало. Однако есть и другие проблемы совместимости, которые остаются нерешенными - например, для матричных операций MAEngine активно использует новые функции GML, касающиеся работы с массивами, а в старом GM их тоже нет. Это означает, что необходимо реализовать матричную библиотеку внутри самой DLL, а это достаточно большой объем работы.