June 30, 2020

Arsenal Development - Now on GitHub Sponsors!

Well, it's been a while since the last Arsenal update, and that's because, frankly, not much has happened with it. As a startup trying to make our business sustainable, working full time on an Open Source project with no income was not something that we could maintain. But there's still hope for Arsenal as we have just put Katharos Technology on GitHub Sponsors.

For the last so many months we have been focusing our efforts on creating a Digital Transformation consulting practice, but making games has still been on our minds every day! In any free time that we could scrounge up we've still been putting all the effort we can into developing the technology we need to make games, but that has not amounted to much for Arsenal yet.

Through GitHub Sponsors, though, we give the community a chance to help back our development and give us time to spend working on Arsenal and other game related Open Source projects. If we can meet our goal of $14,800/month, we will be able to cover our hardware and server costs while funding a developer to work full time on Open Source game tools.

Arsenal Development Direction

After some thought we have decided to change direction with Arsenal's plan to build on top of the Amethyst game engine. This has mostly to do with our desire to be able to experiment with different ways of doing things and different backing technologies without having to worry about any pre-existing structure that we will want to maintain or avoid breaking. We want to start fresh with a clean slate that we can add whatever we want to without having to worry about compatibility with existing structure.

Technologies

These are some of the technologies we are thinking of building Arsenal on. These aren't set in stone because we will learn more as we try them out and that may effect our decisions.

Shipyard ECS

For the entity component system ( ECS ) that will power Arsenal we are considering Shipyard. We had previously been looking forward to Amethyst's integration with the Legion ECS, and we still think that Legion would be a great improvement for Amethyst, but Shipyard has its own advantages that we think can benefit Arsenal.

The design of Shipyard, which is based off of the design for EnTT, allows for customizing the performance of your systems based on systems' individual needs for either saving memory or increasing iteration speed ( see here ). Legion's design does some more automatic optimization, so to speak, but doesn't allow you to customize it manually when need be.

The trade-off is essentially:

  • Legion: Hands off optimization for the general use-case ( beginner friendly )
  • Shipyard: Customized performance according to needs ( more work, but more tailored )

With Arsenal wanting to be able to produce massive scale games, we believe that the performance tailoring that is possible with Shipyard is the better option for Arsenal.

Scripting

The big blocker for continued progress with Arsenal has continued to be scripting support. Arsenal has a rather ambitious goal for language-agnostic, fully interoperable scripting support based heavily on the Amethyst Scripting RFC. This requires an integration into whatever ECS we use, and neither Shipyard nor Legion have produced a scripting interface that we can use to power this yet.

We have opened the discussion for a scripting interface for Shipyard, and have started a plan for the effort, which is promising. This the highest priority item for progressing Arsenal development.

WGPU

For Arsenal's renderer we are planning on building on WGPU. We believe WGPU will become the go-to for Rust graphics as it quickly grows into a mature library. A large motivation for using WGPU is the fact that it allows us to implement a renderer with no unsafe Rust. This will make Arsenal's renderer much easier to contribute to while putting the burden of the unsafe parts of the renderer on the experienced WGPU community.

In addition to being safe, WGPU is incredibly portable and built on GFX, just like the Amethyst renderer.

Next Steps

Instead of trying to jump straight into integrating these changes into Arsenal, our plan is to develop a small, 2D focused, game engine that we can use as a test-bed for the features before they go into Arsenal.

The plan is to integrate the Shipyard ECS with a simple scripting language such as Python and create ECS systems for an already existing rendering engine. This will allow you to control a Rust-powered renderer by writing ECS systems in Python. The renderer we use for this engine will not be Arsenal's final renderer and it will be whatever Rust renderer is easiest for us to get started with.

The purpose of the engine will be to evaluate the concept of an ECS based engine that can be used to get someone with a minimal knowledge of programming effectively working on games without needing to learn a lot about code organization or language concepts. We want to make the game programming process as simple as possible.

This engine will not be hooked up to Blender yet but will probably integrate a Tiled map loader to allow you to create scenes.

The goal is to make this engine useful by itself, so that people can start experimenting with it and maybe even starting to make some games with it, but to take these concepts later and work them into Arsenal. At that point Arsenal will supersede this starter engine and become the go-to for both simple 2D games and then on to more advanced 3D games as well.

Closing Thoughts

We're very excited to be on GitHub Sponsors, and hopefully provide more opportunity for the community to get involved and contribute to the further development of great Open Source game tools. If you have any questions, don't hesitate to contact us.