Simulant 20.09 Released!

We've just tagged the first ever stable release of Simulant: 20.09!

Today marks the start of a regular release cadence for the Simulant project. We'll aim to release Simulant every 3 months. Disruptive changes will be merged at the start of the 3 month period so that by the time of release things should have stablised nicely.

So what's new in Simulant 20.09?

Improved Skeletal Animation!

skeletal animation

The previous alpha release introduced Skeletal Animation. Simulant 20.09 brings manual manipulation of skeletal actors! Want your character to turn its head to follow a target? Now you can simply find the joint you want to manipulate, and go for it!

New Dreamcast Audio API

Previously Simulant used ALdc 1.0. This was an OpenAL implementation for the Dreamcast that did all mixing on the main SH4 processor, before sending audio over to the AICA sound processor.

Not only was this slow and wasteful, but there were a number of bugs that were never resolved. In preparation for Simulant 20.09 the Simulant team has reimplemented ALdc from scratch. Leveraging the AICA directly, and its 64 available channels to provide faster and better audio.

ALdc will continue to improve and gain functionality over the next few months!

Better "alias" API

In the previous Simulant release, you could give assets a name during construction by using the _with_alias suffixed methods. This was a very cumbersome API, and increased the number of methods on the AssetManager unnecessarily.

You can now set the name of an Asset or StageNode using it's set_name(name) method. And if you want to do so inline with construction you can use new_X()->set_name_and_get(name); which returns the object itself.

Finding nodes and assets by name is also much more straightforward. Simply use the find_X(name) methods which can be found on the AssetManager and Stage.

New StageNode::destroy_after Method

Quite often you want to destroy a stage node after a delay. For example, your game might have a missile object that should destroy itself if it's still alive after a number of seconds. This behaviour is now simple! All stage nodes now have a destroy_after(Seconds) method, so now you can fire and forget!

New .ms3d Blender Plugin

As Simulant .ms3d support was being added, we became aware that the .ms3d import/export plugin in Blender had stopped working in recent versions and had been removed from the community plugin tree. To help developers (until Simulant supports a more modern skeletal format) we've written a brand new .ms3d export plugin for Blender.

You can find the plugin in the Simulant project on GitLab.

Bug Fixes and Minor Features!

Along with those new features there are a number of bug fixes and minor changes, including:

  • Fixed a typo in the joystick button enumeration (Thanks @freakdave!)
  • Fixed .equals vs == problem when setting positions, scaling, and rotation
  • Fixed issues with object pooling
  • Made MS3D loading more resilient
  • Fixed a bug where the free list in the object pool would break
  • Added a new_submesh_as_capsule method
  • Added more operator overloads for the Degrees class (thanks @freakdave!)
  • Fixed a number of sound issues
  • Fixed depth issues on UI widgets

What's next?

Things that are lined up for next release include:

  • A complete restructure of the core engine API
  • An upgrade to the Bounce physics engine
  • More audio and performance improvements

Have fun!