Rigid Force Redux is a horizontal scrolling shooter for Nintendo Switch and Xbox One, developed by myself and published by Headup. Before that I have been working on various AAA titles including ANNO series and Might and Magic Heroes Online by Ubisoft Blue Byte.
Horizontal scrolling shooters like Rigid Force Redux are quite rare these days, the once massively popular genre from those early heady days of arcade gaming has waned significantly, but, I strongly believe there is still a place reserved in all gamers' hearts for this kind of gaming experience. Inspiration for Rigid Force Redux came from R-Type of course, as well as other classics such as Gradius, Katakis/Denaris, Darius, Ikaruga and from some other genres such as Turrican or the Metroid (Prime) series. The game is a tribute to these old classics, I wanted to revive the genre with the right mixture of high-quality old-fashioned gameplay with new modern game mechanics and appealing 3D graphics. Let me start with some thoughts behind the game mechanics.
Game mechanics and varied modes
Rigid Force Redux is a horizontal 2D Shooter, so as you might expect, the game will have players piloting a fighter which is armed to the teeth with numerous upgradeable weapon systems and supplemental ‘Force Shards’. Your ship, the “Rigid Force Alpha”, will have the power to shoot its way through various atmospheric levels filled with all sorts of enemies, from low level cannon fodder to huge bosses.
Our unique supplemental weapons - the Force Shards are additional weapons that dock onto the ship and make the fighter much more agile in battles. By adjusting Force Shard position, players can crucially increase on screen agility and reach enemies all around, even behind the ship. They can also gather Energy Orbs dropped by foes which will fuel a super-effective charge shot. And for the most critical situations, there is the Bullet Blade which easily wipes out enemy projectiles near the ship. Players will find many options to kit out Rigid Force Alpha with numerous combinations of weapon elements.
The Main Mission draws players into an exciting story mode with animated cutscenes and complete voice-overs. Other game modes include a classic Arcade Mode with an interesting multiplier mechanic for extensive high score runs, and a challenging Boss Rush Mode. We have also added an extended Online Leaderboard feature with 40 Achievements to keep shmup enthusiasts motivated!
The difficulties of creating combat rhythm flow and balancing enemy attack waves
Balancing gameplay flow against various enemy types, waves and their distinct attack rhythms was one of the most challenging aspects of the development process, especially when combined with general level design and eye candy background effects.
Additionally, Redux has an adjustable difficulty option and various changes in game balancing, making the console version significantly fairer than the PC version. It’s now much easier for shmup newbies to get into the game, while pros can find their level and push themselves as hard as they like.
Another key factor in determining gameplay flow was development of the enemies – should there be an attacker who shoots in several directions? How many times will they shoot, twice or more? How should they move to challenge the players? Things get even more complicated once these enemies are integrated into the level design. Even the smallest changes can affect the entire flow of each level, resulting in many adjustments and refinements to the tiniest detail. Every bit of the game has been tweaked dozens of times until the flow and rhythm felt smooth and fluid. By the way, all console versions feature 60 FPS gameplay, so it now plays even more seamlessly compared to the PC version.
Variation is also one of the top priorities of Rigid Force Redux’ level design. I paid close attention to define each stage and worked on several themes that are greatly different from each other without compromising the game’s storyline. The players will find themselves in a new and interesting area every few seconds. For example, they can be in a space station, a vast ice desert, subterranean mining systems, and even a huge factory inside a volcanic crater. There are a whole series of challenges and enemies that are specially designed for each level, including gigantic bosses.
Porting Rigid Force to Consoles
The PC version of Rigid Force Alpha was originally developed on the Acknex A8 engine, but we decided to re-develop the whole game from scratch on Unity for consoles since there was no direct and painless way to port the game to Nintendo Switch and Xbox One.
It was a massive task for a single programmer, but I managed to port the full game in a little over one year, including integration of all platform features such as gamepad support, leaderboards, achievements and more.
Switching to Unity was an excellent decision in the end, with its large and friendly user base and the engine’s overall performance supporting all platforms. A big thank you goes to Headup’s programming department for their awesome support on all platform-related questions.
The Road to Achieving 60 FPS
For Rigid Force Redux, we had a goal of achieving a smooth 60 FPS right from the start. It was certainly not an easy thing to do working on our first console game using a completely new and unfamiliar engine! We needed to combine different approaches: from the most obvious such as very detailed code analysis and constantly monitoring performance using different profiler tools, to avoiding unnecessarily expensive commands and not allowing Unity’s Garbage Collection System to execute. We also integrated several custom systems to help us achieve our desired level of performance.
For example, we created our own culling system, a very efficient pooling manager for recycling objects and various custom highly-optimised shaders. Graphics are also optimised: many individual textures were combined into larger atlas textures for considerably lower number of draw calls, and background models are optimised in a way that GPU is given more time to render without sacrificing quality.
Last but not least, Rigid Force Redux uses a Dynamic Resolution system which gradually adjusts render resolution of the screen in critical situations. The system is rarely used in the final version, but it’s hardly noticeable when it kicks in, and will only stay active until a more stable framerate is reached again.
The best example of the optimisations can be found in Rigid Force Redux’ Arcade Mode: Unity allows the conversion of variables into text, and they appear extensively in the on-screen score display. However, during our QA session, our tester found that this very function created Garbage data with every call, which in turn triggered Unity’s Garbage Collection process in every few frames. These memory clean-up processes generated a noticeable frame stuttering while playing all stages of Arcade Mode.
To control the situation, we decided to stop directly converting the scores into texts and instead analysed which score values actually existed in the game, including all possible multiplier values. We stored these values as predefined strings in an array.
Now, if an enemy is destroyed, the system checks its base score value and the multiplier value and selects the correct string from the array. Then it passes it on to a prepared 3D text object from our Pooling system, and finally displays a visual score on screen. This approach is much more complicated than a simple text conversion code-wise, but in fact, it’s much more performant and in the end, the stuttering was gone and it led us to the desired result - the tester was happy again!
What I described here are just a few examples of optimisations we’ve implemented. It took weeks, even months, of extra work, but we are happy to have a very smooth and fluid gameplay for 90% of the play time.
Thanks for reading! Please let me know if you have any Q’s and I’ll respond in the comments.