Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
Tags

M's Model Kit!

Export animated models and scenes from Blender, load and run them in GameMaker Studio 2! · By mMcFab

A Quick Update on the Status of Updates Sticky

A topic by mMcFab created Sep 18, 2023 Views: 88 Replies: 5
Viewing posts 1 to 6
Developer (2 edits)

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

Developer

I've been working through this over the last couple of days and I've pretty much finished the updated GML-side code now. I think I just need to provide a compatibility layer + update guide for the old system and it's pretty much done. I'm hoping that when I say Soon­™ I actually mean it this time

Developer

Over-compensating for lack of updates probably, but there are only 2 tasks in the way of release now: Documentation, and compatibility functions (to aid porting from the old version) 

I need to make a tweak so blendshapes/shapekeys can be exported from blender objects with generative modifiers (currently they just aren't exported if you have something like subsurf or mirror active), but that is lower priority, arguably a non-blocking nice-to-have thing, since shapekeys do export and function if you have no generative modifiers

I'm debating finishing and releasing the update within the next 10 days, OR jamming out a game to make sure it's production ready and then publish it at the end of october. I think for safety's sake I should do the production test, even though I'd love to get this upgraded and functional version out ASAP. I think I'd rather put out something well vetted and well documented that should hopefully last longer with more modern versions of GameMaker

Developer

OK, the implementation checklist is complete. There are a few compatibility scripts and materials that work with the demo project (with a few minor edits, but nothing complex and results are identical with much better performance than expected)

So there are 2 things to do - test it over the next month or so to make sure I don't give you something broken, and make blendshapes with generative modifiers work (which is just a blender script update, my plan is to get that done tomorrow)

And documentation, I suppose :P that one helps a lot

Developer (3 edits)

...and we are done, minus documentation, shapekeys export even with generative modifiers (as long as the number of verts and loops is the same as the basis shapekey - so some modifiers like degenerate may still disable some shapekeys. Just gonna do my mini game test and we should be out soon! Would you believe the hardest thing to figure out was getting blender to clean up copied meshes when I was done with them? Annoying, but it's done

Also considering making a file upgrader script, to convert the old mmod files into the new mmk files with the new features, to ease the transition a little more than the compatibility functions already do Ok I did it, couldn't help myself. There's a function to convert legacy models into the new format (subbing in data in some cases, but it works), so if you've lost the source model, they'll auto-convert through MMK_model_load, or you can manually call MMK_upgrade_old_model and save out the returned buffer to save on repeat conversions. The result won't be as accurate or feature-rich as re-exporting your raw models, but this should reduce teething issues when I get the update published

Developer

Accidentally over-scoping the test project and have too much going on to get it done in time. Will instead be doing a local test using Too Many Birds, if it all works out I hope to still publish the update on schedule 

(also considering glTF import support long term...)