ROGUE TANK

Rogue Tank is a chaotic 3D tank shooter with rogue-lite elements. Shoot, zap, burn and crash through waves of elite enemies. Enhance your tank by creating deadly combinations of upgrades and become a force of mass destruction!

2023 - Ongoing

Personal Project

Unreal Engine 4, Trello

PERSONAL PROJECT

Creating the Player Controls for Tank Movement and Shooting Gameplay
Designing the Player Upgrade System and Individual Power Ups
Crafting the Enemy AI and Enemy Spawn System
Building Interesting Combat Arenas

After the previous projects, I wanted to take the lessons learned from the development of Sugar Blast and Dune Strider into my own personal project. Inspired by games such Risk of Rain 2, Twisted Metal and the BattleBots show I decided to start working on Rogue Tank. Some of the challenges I faced were:

PLAYER CONTROLS FOR TANK MOVEMENT AND SHOOTING

Initial Prototype and Playtesting
I put together a first prototype, based on a ray-casted suspension. Additionally, I built in basic shooting functionality based on a line-trace. I also made some bare-bones enemies. This allowed me to playtest the initial 3C's and research done.

Research
I researched 3C's in third-person games, focusing on shooters, racers and off-course, games with tanks in them! In this research I wanted to tackle some key elements of a tank shooter:

Suitable inputs that were easy to pick up and learn, and felt good to use.
The mental budget of the player. I had learned from Sugar Blast that combining both fast-paced movement and shooting can be difficult.
Challenges that come with a third-person camera, and the disparity between the tank's gun and the player point of view.
Tank character, that both felt true to a tank and was intuitive to use, but was also playful and could have an "arcady" vibe.

Key Iterations
One of the most enjoyed features of many playtesters was the ability to damage enemy tanks by colliding with them. I followed the fun, tweaking the acceleration and turning rate of the tank character to accomodate for a "ramming" playstyle.

I switched from line-trace hit detection to a projectile based system. This broadened the player weapon and enemy design possibility. For example, slow moving, homing bullets that the player can shoot as well as dodge!

More Weapons!
The lessons learned from the prototypes and research done was used to make a classic rocket launcher weapon. As development continued, I created a total of 12 different weapons for the game. Each with their own unique functionality and gunplay.

PLAYER UPGRADE SYSTEM AND POWER UPS

Designed to be Combined
One of the main goals within the upgrade system was to design upgrades that are more fun and more powerful when combined together. This way, players could shape their "build" over the course of a game. The GIF on the right shows a strong burst damage combination of two upgrades, namely:

Flint and Steel: Ramming enemies sets them on fire.
Molten Armor: Enemies on fire take bonus damage from your primary gun.

Specific Upgrades
Key in designing upgrades that were to be combined, I made each upgrade very specific in its' functionality. There is no upgrade that upgrades your all damage by X percent. Instead, it upgrades your damage when a condition is met, only one source of your damage, or is only available on specific weapons. This allows players to discover interactions between specific offensive, utility and defensive power-ups.

General Upgrade System
To keep the player characters' blueprint logic and code organized throughout development, I built an upgrade system that allows logic to be stored in individual components. These components can then be added to the player during runtime. This had three development benefits:

Organized Files: Components are their own game file, with logic stored in their own blueprints. This kept the character blueprints clean as well.
Inheritance, Copy, Paste: New upgrades are created as child actors of the base upgrade blueprint, immediately giving them all the base logic needed when made. This added a lot of velocity to creating a large quantity of upgrades.
Faster Iterations: Upgrades key info was easily changed in a general data table, whereas upgrade specific info was changed in the component logic itself, allowing me to quickly test different possibilities.

Level Up!
Enemy tanks destroyed drop scrap parts. The player can then drive closeby these drops to pick them up, and later spend them to upgrade their tank!

I built the scrap pick-ups, and a shop in which the player exchanges them for powerful upgrades. Players must choose their power-ups strategically, as enemies scale up in power as well over the course of a run.

ENEMY AI AND ENEMY SPAWNING SYSTEM

Initial Enemy Prototype
Early into the project, I created a prototype enemy that allowed me to further test the gameplay. I built simple movement using the Unreal Engine behaviour trees. Prototype enemies would move in attack range and then fire a projectile at the player. I added an attack wind-up, allowing the player to dodge their attack.

A Bunch of Problems
In the initial protypes, enemies would bunch up together due to their simple movement. They would synchronize their attacks as it was based on the distance to the player. It didn't matter whether you were battling with 1 or 5 enemies. Simply driving around them, was an easy way to win!

In a new iteration, I implemented enemies spreading out using the Unreal Engine ECS feature. This felt a lot better right away. Players would now have to consider their movement, and couldn't simply drive in circle around the enemies. Additionally, I built an enemy attack director, which set a maximum amount of enemy attacks at the same time. This avoided the attack synchronisation of the earlier version, and could be used as a turning knob for difficulty as well. Enemies now both felt a lot more "clever" and were a lot more fun to fight according to playtests!

Designing Unique Enemies
One of the challenges in Rogue Tank is designing unique enemies. When most enemies are tanks they can easily look the same, making it difficult for players to tell enemies apart and react accordingly. I created tanks with clear different silhouettes, colors and sounds, allowing players to distinguish tank enemies better. Also, if their movement and attack patterns are too similar, enemies don't create unique ways to challenge the player. I designed enemy movement and attacks that are not only different in metrics, but also in behaviour, posing different challenges for the player per enemy. Some example enemies are shown below:

1, Zapper: Moves quickly towards the player and damages it when in range by zapping!

2, Gunner: Stays at mid range and fires a line projectile attack.

3, Artillery: Moves away from the player and launches an area effect explosion.

4, Heavy: Very slow movement, fires homing projectiles, has a weakspot on its' back.

Flexible Waves of Enemies
Early in the project, I created waves by storing enemy spawn timer information in a data table. While this system worked as intended, it was very rigid and couldn't accomodate for different maps, difficulty levels or replayability. I had to either make unique waves for every combination, or refine the spawn system.

I built a flexible wave system that procedurally spawns enemies, taking into account variables such as the current difficulty level, the map and enemies alive. Instead of taking one wave, it chooses accordingly from bite-sized wave fragments, allowing a balance between controlled hand-crafted challenges and procedurally generated sets of enemies.

INTERESTING COMBAT ARENAS

Incentivizing Player Behaviour through Level Design
In early level prototypes, I placed various small structures inside the levels. I noticed two patterns of player behaviour when playesting. Firstly, players were using structures as cover a lot, making for a very defensive and low movement playstyle. Secondly, players would often, to their frustration, bump into structures while driving towards the camera position.

I designed open, concave level layouts with little to no cover. This incentivized a high-movement and more offensive playstyle. Players were constantly dodging enemy attacks and ramming into them to interrupt enemy attacks. Also they weren't bumping accidently into objects anymore.

Risk and Reward Level Ingredients
The new open levels came with their own problems. Mainly, they were boring. To spice up the levels I created various traps that could damage both the player and enemies. Initially, I dotted them around the levels, and first playtests showed players staying away and ignoring these traps.

I designed new level design ingredients with risk-reward mechanics in mind. I.e., Flame pits now have Boostpads placed adjacent to them. Special Power Pick-ups are placed within the range of a Tesla Coil trap. Playtests now showed players using these traps to their advantage.

Crafting Unique Experiences per Level
To avoid having the different maps feel too similar, I created unique themes with each their own color palettes and level design ingredients. Some traps are simple reskins allowing for project velocity. I.e., "electric walls" have been reskinned to "lava walls".

Other, more eloborate traps are unique to the level. One of my personal favorites are the Volcano and Airplanes in the suited levels. These create epic moments of chaotic gameplay, and keep the gameplay fresh between different maps.

Rogue Tank truely is a passion project. I'm creating something that I love. However, that doesn't take away all the technical and design learnings from building the combat. I have faced tons of different challenges creating the gameplay and thoroughly enjoyed it.

Working alone has also truely humbled me in the amount of work needed to going from playable prototypes, to fully released games.

GET IN TOUCH