I have been not very on the ball while I have a job (I've only been able to poke at this when not working and also not tired), but I'm still planning on rolling out an update to this Soon™.
Details are as follows:
- GameMaker has changed too much over the years, and the old methods are too slow. I've gotten a little more clever too (I think), so the system has been rebuilt from the ground up
- GameMaker's new garbage collector has forced me to drop the GML implementation. Too much garbage gets generated by matrix functions, and alternate garbage-free methods are too slow - essentially, the system is slower (and in many cases doesn't even run) on any version of GameMaker released after the garbage collector was introduced. As such, the entire core has been ported to external C++ libraries, with GML structs wrapping the operations
- Advantage of the new C++ port is that everything is much faster and more flexible, though you won't be able to modify the core anymore (unless I sell a version with C++ source access, but I barely have time to provide support for the current version, let alone support for C++ code)
- The C++ version also cannot be broken directly by any further changes to the runtime
- The major disadvantage is not all platforms are supported out of the box. The supported platforms are as follows:
- Windows x64
- MacOS (both Intel-based and Apple Silicone have been tested working)
- Ubuntu+SteamDeck
- HTML5 via WebAssembly (it honestly works way better than I ever expected, especially considering the previous version never worked on HTML5)
- Android
- Remaining platform statuses are as follows
- iOS - Unsupported, but in progress - I built a binary, but lack of clarity from Apple on what is required to make a dynamic library that can be distributed via the App Store has thrown a spanner in the works in making sure this works in an acceptable way (and it's hard to tell if I can make an "approved" build compile with GameMaker's current extension system)
- tvOS - I don't have a tvOS device, and I don't plan on buying one. Maybe it would work if iOS builds are made, but I don't know how
- Consoles - Without access to NDA'd build tools, I can't make this work on console. However, if you have access to console SDK's or a publisher who knows how to use CMake, we could probably make an agreement to share the source code so they can compile it on those platforms.
- GX.Games - this platform does not support non-GML extensions at time of writing. If/when support is added for JS or WASM extensions, it should be really quick to add support for this platform to the extension
Some other limitations:
- 64 bones per armature. The plan is to increase this limit to either 128 or 256 (hopefully before release), but this will have an effect on performance, I'm just hoping it's a small effect
- I'm officially dropping plans for a 3D collision implementation as part of this system, which shouldn't cause any problems since it was barely usable anyway. It's a lotta work to get right by myself, and there's no good way to make a one-size-fits-all solution with reasonable performance at this time. Maybe that'll change in with the new runtime, but my current recommendation is to build your own tailored systems on top of something like bullet3d in C++ (or hire me to do it for you 🤫)
- Uh I actually can't think of any others compared to previous versions. I thought there'd be a longer list
The initial delay has been because I can't figure out how to get the new code to compile for iOS and remain allowed on the App Store (there's some unclear information on the acceptability of dynamically loaded libraries and I don't want to port the C++ source to Objective-C or whatever and have to maintain 2 codebases - so until I can work that out, no iOS support, even though I really want it to be ready to add to Too Many Birds)
However, I've decided it's better to get this out and working again rather than wait an indefinite period for iOS support and leave you with something that barely functions with new GameMaker runtimes.
The Core is complete (minus a few concept features, like a built-in IK solver), so I just have to flesh out a few of the interface structs. Stuff like mesh binding and materials, then I'll enter a test phase and get the new version out, alongside some upgrade documentation and compatibility scripts. I will also put a live demo on the store page, since the HTML5 version works now
Even though it's a total rewrite, upgrade will be free for existing users, I'm considering bumping the price up later, but not sure yet