Simulant 20.12 Released!

Happy Holidays!

For an early Christmas present, I've just tagged version 20.12 of the Simulant game engine!

It's been a pretty quiet release cycle - there's been a lot going on in the world recently! However, there are still some really neat changes in this release!

Better Coroutines

Coroutines landed a while back, but the API for using them was clunky and unfamiliar. In 20.12 we've added familiarly-named functions to manage coroutines: cr_async, cr_await and cr_yield.

cr_async also now returns a CRPromise<T> which has a convenient then() method for triggering events once the coroutine has completed. This is great for scheduling game logic to run sequentially, and is a bit more elegant than using idle tasks.

Better MS3D Support

MS3D support landed in 20.09, but it wasn't fully compatible with the Dreamcast port and caused unaligned read crashes if you tried to use it there. This has now been fixed and MS3D models can be used on the Dreamcast.

Scene Management Improvements

Firstly, scene management function names have been cleaned up. You can now preload a scene, before activation or, you can preload_in_background to do so in a coroutine. Utilizing the .then() pattern can allow you to preload in the background, then activate a scene once done - which is great for loading screens.

On top of that preload, preload_in_background, and activate accept arbitrary variadic arguments which are accessible in your scene's load method. This allows you to have one scene class, but pass flags to it on activation to alter its state. For example, you could pass the filename to a level file, or enable an "arcade" mode etc.

Bug fixes

There have also been an array of bug fixes, including numerous sound bugs (including fixing garbled stereo sound) and problems with frustum culling!