Captain Rocket vs the World of Tomorrow
Level Design, Level Scripting
Genre: Twin Stick, Arcade
Engine: Unity 5
Production Time: 7 weeks
Role: Level Design, Level Scripting
Production Team Size: 9 People
Captain Rocket vs the World of Tomorrow is a twin-stick arcade shooter taking place in an alternative version of the New York world fair of 1929. As Captain Rocket, players have to fight off a robot uprising and save the New York World Fair from certain destruction.
The game was created for Futuregames Game Project 3 and was made by 9 people over the course of 7 weeks.
Design Goal and Game Pillars
- Arena Sections
- Transition Sections
- Intense gameplay
Captain Rocket is a quick-paced twin-stick shooter with lots of things happening on the screen at the same time. Our goal was to quickly ease players into an adrenaline-fueled experience and put them under enough pressure to force them to utilize their dodge-boost ability while keeping the experience fair but challenging. All this while continuously ramping up the difficulty and introducing new challenges to keep the game feeling fresh until the very last encounter.
I was responsible for setting up the level as well as scripting and balancing where and when enemies would spawn.
Level Overview and Pacing
The level is pretty straight forward. Reach the end and shoot anything that moves. It is divided into two different kind of sections:
Linear sections, where the player must fight their way through ambushing robots. These sections are used as breathers and to introduce new enemy combinations. They are more open than arenas and give the player more room to move about and avoid enemy ambushes.
Arenas, where the difficulty spikes and the player must survive waves of enemies in an enclosed space. The arenas are used to break up the pacing and offer a different kind of challenge compared to the linear sections. The main inspiration for the arenas came from DOOM (2016).
TUTORIAL, AREA 1 & ARENA 1
- The level is easy at first with very few enemies attacking to introduce players to the game and mechanics in a controlled environment.
- Shortly after entering the first transition area two doors unexpectedly open and robots swarm out. This is designed to shock the player into action and while the threat is real, they are given ample time to react. The rest of this transition area plays out in similar fashion, constantly spawning hordes of enemies and keeping the player on their toes.
- The first Arena section seems like just another room at first, but as the player is about to exit, the door in front of them slams shut and they are greeted by multiple waves of enemies from different directions. There is no room to fall back or escape, the player must make use of their dodge ability and guns to clear the room before the gates will open.
AREA 2 & ARENA 2
- The second transition area introduces the ranged shield enemy which the player must flank in order to take out, however, smaller swarm enemies often spawn and counter-flank when this is done. Not quite as intense as the previous arena, but definitely ramping up the difficulty from previous transition section.
- Arena 2 takes place by a café between two bridges. The combat area is bigger than Arena 1, but this time players must also fight the shield enemies while being swarmed by smaller bots, further ramping up the difficulty.
AREA 3 & BOSS
- Transition Area 3 is shorter and more straight forward. It is meant to feel more like a slight breather before the boss encounter rather than to introduce something new.
- The Boss arena is mostly open to allow for freedom of movement and to make it easier to dodge the volleys fired by the boss and any of the smaller robots that spawn from it.
Levels were iterated on in stages. I started out by drawing a myriad of disconnected rooms and corridors using photoshop and planning out various encounters and events. The rooms deemed good enough were then connected to form a smooth and ever increasing pacing curve with spikes and slopes in appropriate places.
When the first level draft was fully drawn, I started blocking out walls, floors and large objects using Maya as it was much faster and accurate than using basic geometric shapes in Unity. This whitebox was then imported into Unity to be tested and iterated on. Basic shapes were eventually used to create smaller objects such as cover pieces and were added directly in Unity.
Scripts, events and enemy spawners were finally added to the whitebox to test and balance the rooms. When the gameplay felt solid, I went on with a rough art-pass using partially finished and mostly untextured assets to decorate the level. The art team then took over to do a more polished art-pass as I went back to balance the gameplay elements and tweak level scripts as well as making sure the gameplay was not interrupted by any of the final art pieces.
Photos from the actual New York world fair in 1929 were used as inspiration for the level layout and design.
Initial sketch iterations of various arenas and transition sections. Some designs went on to be whiteboxed and eventually ended up in the final product while some of the more open designs were scrapped early or were redesigned during whiteboxing.
Initial whitebox created in Maya and imported into Unity. Scripts and set dressing was continuously added to it until it was no longer needed and then deleted. Small changes were made based on testing and feedback but the events and challenges stayed mostly the same.
There are two major level scripts used in the game: Single Spawners and Arena Spawners. Single spawners run a single script while arena spawners are prefabs that may contain multiple single spawners and various other scripts.
Single Spawners are spawn points that will spawn a set amount of enemies when the player steps into a trigger volume. When triggered, two doors will slide open and enemies will pour out of them, charging the player. I wrote the C# code for these and implemented them into the level.
Arena Spawners consist of a game object with multiple single spawners inside it. An arena spawner essentially handles a single wave of enemies within the arenas. Each arena spawner is unique and when all enemies have been killed, the next arena spawner is instantiated until the final spawner is instantiated and runs the script to open the doors out of the arena. The C# code that instantiates the next spawner was written by our main programmer while I created the prefabs and implemented them into the level.
Single Spawner breakdown
When the player enters a specific volume trigger, the trigger checks if it has been triggered before. If not, it will send a signal to a nearby spawner (defined by the level designer). The spawner will spawn en enemy, wait 0.2 seconds and then spawn another as long as it has spawned as many as are specified under “spawn amount”.
Spawn Location: Define an object in the wold where you want the enemies to spawn.
Enemy Type: Define what type of enemy you want to spawn.
Spawn Delay: Define a short delay between each individual enemy to make sure they don’t spawn on top of each other.
Spawn Amount: How many enemies will be spawned.
Start Active: If checked, spawner will start spawning as soon as game starts or as soon as it is instantiated (Mostly used when combined with arena spawners).
Single Spawner C# Code
Arena Spawner breakdown
When the player enters a specific volume trigger, the trigger checks if it has been triggered before. If not, it will send a signal to a nearby spawner which will instantiate an arena spawner. When all enemies are dead, the next arena spawner will be instantiated. This will continue until the final arena spawner runs out of enemies to spawn and all other enemies are dead. At that point the arena exit will open and the player is free to continue.
No Enemies Left Object: Next arena spawner to be instantiated when all current enemies are dead.
Level Script: Any other scripts that should run when this arena spawner is instantiated.
Trigger Gate: Whether this arena spawner should shut the door behind the player.
Enemy Timer: How often to check if there are any enemies left.
Shall Open Door: Whether killing all remaining enemies during this wave should open the arena exit.
Door Name: Specify which door, if any, should be opened.
Spawnerposition: Position of Single Spawners within the prefab.
The player makes a grand entrance and slams into the ground, killing all nearby bots that are wandering about. A picture of an Xbox controller show up and explains the basic controls. It disappears when the player leaves the area.
The player is met by light resistance at first but is soon ambushed by hordes of enemies. Players must fall back or use the dash ability to avoid being hurt.
As the player enters the arena, the doors suddenly close and waves of enemies start swarming in, forcing the player to hold their ground in a confined space. This sudden difficulty spike serves to break up the gameplay by forcing the player into a different kind of situation. The fast robots are introduced as well, although they behave almost exactly like the red robots but move slightly faster.
The heavy shield enemies are introduced. One of them spawns at the end of the arena as an introduction to their behavior, but soon the player is met by two at once, combined with the regular small enemies. This creates a new combat dynamic and prepares the player for the next arena battle.
Arena 2 is more open than Arena 1. Mostly because of the large number of enemies but also because of the ranged shield enemies who are capable of locking down large areas with their flamethrowers. Signs, arrows and even the statue serve to point the player in the right direction after the arena battle is over.
Arena 2 was extremely hectic, so the next transition area is less challenging and allows the player to catch their breath before the final encounter.
The final boss appears in the form of a giant hover tank. The arena is very open to allow the boss more freedom of movement but also to give the player room to dodge any enemies that spawn and the large plasma volleys fired by the tank.