MAEngine


A 3D engine for Game Maker: Studio (the only one, as far as I can tell). Written in C++ using Direct3D 9. It supports loading MD2, X, and MPM models (proprietary format), vertex and skeletal animation, HLSL shaders, physics based on the Bullet engine, pathfinding using the Recast & Detour library, and 3D audio using FMOD. The engine also includes functions for working with matrices, vectors, and quaternions. The engine is in early development, but already looks promising.

The project is open source, and the source code is available on GitHub: https://github.com/TheStolenBattenberg/MAEngine.

MAEngine SDK from July 30, 2017 (7 MB)

Demo Application (7 MB)

Naturally, we immediately wondered if it was possible to run MA-Engine under Game Maker 8. After examining the source code, we discovered the following. The engine operates as a kind of complement to GMS's built-in 3D mode—that is, it receives a Direct3D context and renders its graphics into it. This approach has some advantages over 3D engines for classic Game Maker, which created a new surface on top of GM's built-in graphics—the result was the initialization of two graphics APIs, which is not ideal (although this doesn't significantly impact performance thanks to the use of the set_automatic_draw(0) function). Unfortunately, this is precisely what prevents MA-Engine from being easily ported to classic Game Maker, where it's simply impossible to obtain a pointer to the Direct3D context. Theoretically, it's possible to extend the engine and write your own context initialization—we tried it, and it actually worked. However, there are other compatibility issues that remain unresolved. For example, for matrix operations, MAEngine actively relies on new GML array functions, which are also missing from the old GM. This means implementing the matrix library within the DLL itself is necessary, which is quite a bit of work.