October 12, 2020

Arsenal Development: Week 1 of Full Time Dev

Arsenal First Week Full Dev 3 .png Arsenal First Week Full Dev 3 .png Micro Thumbnail

Today marks the completion of my first week of Arsenal development in over a year. About a year ago we decided that we needed to start pursuing a way for our business to make money and to that end we started investing in DevOps tooling and consulting. After a year of working on that, though, we feel that the time is right to put some investment into Arsenal again.

Last week we finished off the work we needed to do on our Juju Lens DevOps tool and we started getting back into Arsenal development again. The plan is to release Arsenal 0.2, the first release that you will actually be able to make games with!

We are currently working at our own expense to get Arsenal up-to-speed, built on Bevy, and making simple games, but we can't keep this up forever without any income! We are hoping that the Arsenal 0.2 release will spark interest enough for us to get sponsors on GitHub so that I can make it my full time job to develop Arsenal and give more people the power to make their dream games.

So, what did we accomplish in one week?

Dynamic ECS Systems Prototype

The big ticket item that Arsenal needs to be able to make real games, big and small, is scripting. To maximize the user experience with Arsenal, we didn't want you to have to re-compile the engine when making changes to your game. We also didn't want to force you to use Rust. This requires a scripting solution.

The first step to enabling scripting is to add the ability to create systems and components at runtime in the Bevy ECS. Because the Bevy ECS is written in Rust, where all the code is present at compile time, it didn't initially support the ability to create systems or components without re-compiling.

After a week of work we came up with a prototype and a pull request to enable this feature. The effort brought me through a lot of new stuff that I had not done before, but by the grace of God and with prayers for wisdom I found a solution that the Rust compiler would accept! We also discovered that we we could use some better benchmarking suites for Bevy.

Benchmarking Discussion

As I was working on the dynamic systems API, I was working with some very performance critical code, so I was constantly comparing the Bevy benchmarks before and after my changes. While doing this I realize some rather interesting behavior that would render drastically different benchmark results for extremely minor changes.

I started a discussion on GitHub to figure out how we could improve our benchmarks, and we decided that it would make sense to create some benchmark "games" to give a larger variety of test cases for Bevy ECS performance. These "games" would run without graphics or user input, but would have logic as similar as possible as real games to get a feel for how Bevy would perform in a more real-life situation than the ECS micro benchmarks we currently have.

@cart, the author of Bevy also has a work-in-progress attempt at a safer version of the Bevy ECS internal library that seems to be more stable on the current benchmarks, so this will give us more guidance on whether those changes are worth merging into mainstream Bevy.

We are going to take a slight detour away from the scripting initiative to make sure we can get some good benchmarks so we can more confidently make changes to the core ECS and know how well our scripting modifications are going to perform.

Summary

It's been an exciting week! We've made a lot of progress but we've still got a long way to go. These efforts on scripting and Arsenal are some of the most crucial components of one of the most essential projects to us being able to make games. There's a lot riding on this effort and we will need to keep leaning heavily on God, trusting him for wisdom and guidance. He has blessed this first week of development and we are really excited about what the future holds.

We could use all the prayer we can get as we go further into Arsenal development. Stay tuned, and Praise the Lord!