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?
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!
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!
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
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.
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!
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.
Along with those new features there are a number of bug fixes and minor changes, including:
Things that are lined up for next release include:
I just missed tagging Alpha 4 by the end of June, which would've continued the 6 monthly release cycle that I'd organically fallen into. This was largely because I've been pushing some final bug fixes into the release to make it so much better!
And what a release it is, a total of 51 merge requests were merged this cycle! Let's see what they bring!
Skeletal animation has been a glaring missing feature in Simulant for years, but now it's here and ready to go! The first skeletal mesh file format that Simulant supports is Milkshape 3D, but in the next few releases I plan to bring more new formats into the mix.
Mesh objects that support skeletal animation support both pre-defined animations through the existing KeyFrameAnimated interface, and also manual joint manipulation through the new skeleton API.
Previously there was a poorly implemented flag for disabling culling of actors. Now, you can disable all spatial culling of any stage node by setting its
is_cullable property. This is useful for debugging, or if you know that a node will always be visible it can lead to small performance improvements.
StageNode pooling was rewritten for Alpha 3, but the resulting code had some deficiencies, particularly around iteration and insertion performance. The next iteration of that pooling has arrived in Alpha 4, bringing huge speed improvements.
When loading heightmap meshes from texture data, Simulant has always provided information about the way the heightmap was generated via the stored
TerrainData has gained utility functions to get the exact height at a world coordinate, and to give you the triangle indexes at a world coordinate. These are super useful for placing things on your terrain, or performing ray-intersections.
Additionally, you can now pass a
new_mesh_from_heightmap instead of a file which is great if you're generating the heightmap procedurally.
Simulant now has a basic implementation of Coroutines, and all mutexes throughout the codebase have been removed. Not only do Coroutines provide a simpler model of concurrency, and reduced complexity of the entire codebase, but they've improved performance.
None of the Simulant API is now threadsafe, and Coroutines should be used for all concurrency.
Although Simulant isn't threadsafe, that doesn't mean you won't need threads at all. Simulant now provides a consistent and clean threading API for all platforms for you to use in your own code. This is an alternative to C++'s std::thread which has spotty (or non-existent) implementations on older compilers.
Too many to mention, but here are the hightlights
... and many many more!
Special thanks go to Charlotte Koch and David Reichelt for their contributions this cycle!
It's been 6 months since the last Alpha release of Simulant and it's now time for another! In fact this 6 monthly cycle has become an unintentional habit that I may as well continue!
So what's new since last time?
Well first let's look at the stats:
382 files changed, 12986 insertions(+), 7013 deletions(-)
That's a fair amount of code churn! Lots of deletions, lots more insertions, so what to do they add up to?
Massive massive thanks to @freakdave for his great contributions to this release. And also a shout out to @HaydenKow for generally being a great mentor, and everyone else on the Simulant Discord for generally being awesome!
Merry Christmas! The festive season seems like a good time for an announcement, so here we go!
I'm pleased to announce the Alpha release of the Simulant Game Engine - a new open-source project to bring modern game development flows to older platforms.
Simulant is a portable general-purpose game engine, written in C++. It's aim is to allow writing games for older 3D consoles like the SEGA Dreamcast, as well as modern platforms such as Windows, Linux and Android.
Simulant is built to let you get a game up and running fast! The API is designed to be easy-to-use and to read so that even novice C++ developers can build games and experiment. The
simulant command line tool lets you set up a scaffold project, and build, package and test for multiple platforms with a few simple commands.
Simulant requires using Linux as a development OS, but uses cross-compilers and Docker to build your game for other platforms.
The development of Simulant as led to the development of GLdc, a brand new OpenGL implementation for the SEGA Dreamcast, and the fledgling ALdc which hopes to bring OpenAL compatibility to the same platform.
Simulant comes with a bunch of features:
And if that isn't enough, the whole thing is controllable from a simple command-line management command, which allows you to bootstrap projects, build them for multiple platforms, run unit tests, and package your game for Linux (flatpak) and Dreamcast (.CDI). Windows installer support is coming soon!
You don't even have to compile the game engine yourself, just install the management command and it will download pre-compiled game engine libraries which are generated automatically via a complex build system!
Simulant is built to support multiple OpenGL renderers. Currently there are OpenGL 1.1 and OpenGL 2.1 renderers and a GLES 2 renderer will happen soon. As for platforms:
Providing you have a Linux installation available (preferably Fedora 28 or 29), getting up and running should be easy. Head on over to the tutorial!
Simulant is currently at Alpha stage. This means the codebase is unstable, and the API is subject to change. If you're using Simulant to build a game, make sure you update frequently, and file bugs and submit patches to help improve things.
Keep an eye on the Simulant Discord chat, and issue tracker.
Simulant has so far been pretty much a one-man project, for it to reach its potential it needs other contributors. If you want to help out, hit the Discord group and come join the community! Here are some useful links for getting started!
And if you don't have the time to contribute, but want to support my work then my patreon is here
Simulant is very much under development, so pay attention to the following caveats:
Simulant is released under the LGPL (with patches accepted under dual LGPL+MIT licensing), there are a number of reasons for this, but it does mean that:
For more information, take a look at the licensing page