Time to dig up an old topic with a big update!
That's right. A major version step. Among all the things that have changed since last time, what's the main focus of this update? Putting it in one word:
Portability.
Nope, Duality doesn't magically run on Linux and Android out of the box. Supporting a framework of this size on multiple platforms besides working and studying is just not possible for me alone. And rather than doing ten things badly, I'd rather do one thing in a good way - developing the engine itself, that is. Still, there is a lot of sleeping potential in multiplatform support for Duality, so I decided to at least take some small steps into the right direction - and started the biggest refactoring operation in the five-year history of the framework.
Since it's been so long since my last update, I've put in the considerable effort of looking up a visual representation of the process for you:
In those last few frames, when the cat finally escapes the bathtub with a last glance of panic, but you can already sense its relief? That's me a few weeks ago.
So, what does refactoring have to do with portability? Simply put,
my goal was to make it as easy as possible to port a Duality game to your target platform. That means you shouldn't need to go through all the engine code to do so, because that's exactly the part that
isn't easy. To avoid this, what I've done is determine all the parts of platform-dependent code in the core, put them behind a platform abstraction layer, and then move them to a distinct plugin. The result is a platform-agnostic core with platform-agnostic core and game plugins - and a bunch of backend plugins with the actual platform code. Here's a diagram showing what I mean:
I haven't ported Duality on other platforms for you - but I prepared the field, so you can do so as easy as possible. To be most efficient, we - that means you (the developer) and me (the Duality guy) - split up work and each do what we are best at: I develop the core engine, you add the backend for the platform you're already proficient at as a distinct plugin. Engine core, game logic, third-party plugins and game content can remain entirely unaffected by this, because they're standing on the shoulders of the aforementioned abstraction layer.
That's the theory. We all haven't tested this in practice yet, except on the default platform "Windows", but I'm fairly sure that a big part of porting work has been done. All of it? Definitely not. But it's a start, and if you choose to take the last steps, you'll have to know a lot less about the engine to do so.
Now that we've cleared up the focus of this big update, there are a lot of secondary features, fixes and gimmicks that made it into the v2.0 release. Since copying here would just be redundant, I'd like to just leave you a link to my website for
a (almost) complete changelog, and if you're adventurous, you can also explore the
GitHub issue list of the milestone - it has all the details and archived progress reports and reveals a lot about the thought process that way.
One more thing: With the new release, there are a lot of new sample packages, which you can simply install using the integrated Package Manager in Duality, take a look and play around with them. If you've always wanted to give Duality a try, the threshold for that once again just dropped a bit
You'll find the binary download on the info page (click on the image above). Here's a preview of the Custom Particle System sample:
(Click to see it in motion)
There's also a new icon for launcher and editor, which finally matches the logo on the website:
(Yeah, it's actually not that relevant, just happy with how it turned out, compared to the old one
)
That's it again from my side. Feedback is always welcome, but until then: Happy Developing!