Roche Fusion Technical Recollection 3

In this third instalment of Twitter-powered reminiscence we will continue discussing more and more of the different systems I developed for Roche Fusion in the last few months of the game’s development.

We will focus mostly on their technical and graphical aspects, since that is my area of expertise, and the purpose of this series of posts.

Options menu (December 2014)

While Roche Fusion had had an ever growing settings menu since almost the beginning of its development we gave it a major and final overhaul in late 2014.

One of the major changes was improved graphics settings, including resolution, frames per second, and more solid fullscreen mode.

We also included a number settings to allow players to adjust the game’s performance to lower end machines, including one or two accidents that we turned into features in their own right.

Another important feature for a PC game – at least in my opinion – was mouse support. While the game itself is only playable with keyboard or controller, there really is no good excuse for not allowing mouse control in the menus – especially the rather complex settings screen.

As the last part of the options redesign we included a description for every setting, as well as a live preview for graphics settings to allow the player to clearly see the effect of their changes as every single setting in the game takes effect immediately.

Localised particle explosions (December 2014)

One of the last performance options we added to the game was to enable localised particles explosions.

As I explained two weeks ago enemies in Roche Fusion explode into particles procedurally created from their sprites when they die. To give the player more feedback on hitting their targets – and to (ab)use the power of our GPU accelerated particle systems – we wanted to add a similar, but more localised effect to every hit.

This turned out to be rather simple, given our existing explosions. The only thing that was missing was to only spawn particles around the point of impact, instead of from the entire enemy.

The result is probably one of my favourite effects in Roche Fusion by far.

On a side note, I was quite amazed how little impact this effect had on the game’s overall performance. While the creation of the particles is measurably for ships with high fire rates, it makes little difference compared to the actual physics simulation of the projectiles in the first place.

In addition, the simulation and rendering of the particles after their creation is virtually immeasurable in Roche Fusion’s fill-rate limited graphics pipeline.

Multi-threaded animated loading screen (December 2014)

With the game filling up with more and more content, it took longer and longer to actually compile, run, and test new features.

This was the main reason for me to refactor the game’s content pipeline to load all assets using multiple instead of only a single thread. This cut down the loading time from up to 30 seconds, to less than 5 on some machines.

For a write-up and the code of one of the central classes – a cross-threaded scheduler – involved, feel free to check out my post on the topic.

This system being in place allowed us to also add an animation to the loading screen for virtually free. It is being rendered on the game’s main thread while it is waiting for content to be loaded and decoded.

Apart from entertaining the user for the few seconds it takes the game to get ready, this screen also establishes our distinct visual style – and hopefully helps tie the player experience together.

Game over screen and statistics (January 2015)

While I occupied myself with adding the last few bits of content and polishing Roche Fusion overall, our second programmer Tom Rijnbeek was busy adding achievements and to the game.

To make this as easy as possible, he created a great event system that allowed the achievement system to spy on all games played and react to any events – or complex combinations thereof – appropriately. Check out this great post on how Tom made Roche Fusion’s achievement system so flexible that adding new achievements often required only a single line of code.

A side-effect of this event system was that we could not easily collect a variety of statistics – from damage dealt and taken, to combo multipliers and boss kills – during the game.

We took advantage of that to show the player a variety of – more or less – interesting information about their game on the game over screen.

Low health overlay (January 2014)

Being busy as bees to try and get Roche Fusion as close to perfect as we could for release, one of the last serious pieces of feedback we addressed was that players sometimes found it difficult to notice when they were close to dying and had to retreat to allow their shield to recharge.

While this was by no means surprising to us – after all the game becomes much to fast to allow for things like looking at health bars within a few minutes – it took us some time to figure out the best way to convey this information to the player.

In the end we decided to go with an optional post processing effect that would desaturate and pixelate the edges of the screen dynamically as the player approached death.

Together with the screen-shakes caused by being hit, this conveys a clear sense of danger to the player and gives them a subtle hint to avoid the top and sides of the screen, where they are in the most danger of getting trapped.

We were careful to make the effect clear enough to be noticed, but to spare the lower center and lower parts of the screen enough to still allow the player to see the essential information in the hud and continue playing.

Since straight forward pixelation was not sufficient for our purpose I developed a custom algorithm that is able to interpolate between a clear and a pixelated image continuously. You can read about the details and take a look at an example project in this post.

Conclusion

While the last few weeks of Roche Fusion’s development are sort of a blur in my memory, we did release the game as planned on January 23 on Steam.

I hope you found these posts looking back at the game’s development as interesting as I enjoyed writing them.

Let me know if you have any questions, or if you would like me to write about any of the topics in more depth.

Until then, enjoy the pixels!

Leave a Reply