[et_pb_section admin_label=”section” transparent_background=”off” background_color=”#3a3a3a” allow_player_pause=”off” inner_shadow=”off” parallax=”off” parallax_method=”off” custom_padding=”34px|0px|96px|0px” padding_mobile=”off” make_fullwidth=”off” use_custom_width=”off” width_unit=”on” make_equal=”off” use_custom_gutter=”off” fullwidth=”off” specialty=”off” disabled=”off”][et_pb_row admin_label=”Row” make_fullwidth=”off” use_custom_width=”off” width_unit=”on” custom_width_px=”1080px” custom_width_percent=”80%” use_custom_gutter=”off” gutter_width=”2″ custom_padding=”0px|0px|4px|0px” padding_mobile=”off” allow_player_pause=”off” parallax=”off” parallax_method=”off” make_equal=”off” column_padding_mobile=”on” parallax_1=”off” parallax_method_1=”off” parallax_2=”off” parallax_method_2=”on” parallax_3=”off” parallax_method_3=”on” parallax_4=”off” parallax_method_4=”on” disabled=”off”][et_pb_column type=”4_4″][et_pb_divider admin_label=”Divider” color=”#ffffff” show_divider=”on” divider_style=”solid” divider_position=”top” divider_weight=”1px” hide_on_mobile=”on” disabled=”off”] [/et_pb_divider][et_pb_text admin_label=”Text” background_layout=”dark” text_orientation=”center” text_font_size=”30″ use_border_color=”off” border_style=”solid” disabled=”off” text_text_color=”#eb961e” border_color=”#ffffff”]
Captain Rocket vs the World of Tomorrow
[/et_pb_text][et_pb_text admin_label=”Text” background_layout=”dark” text_orientation=”center” text_font_size=”28″ use_border_color=”off” border_style=”solid” disabled=”off”]
Level Design, Level Scripting
[/et_pb_text][et_pb_divider admin_label=”Divider” color=”#ffffff” show_divider=”on” divider_style=”solid” divider_position=”top” divider_weight=”1px” hide_on_mobile=”on” disabled=”off”] [/et_pb_divider][/et_pb_column][/et_pb_row][et_pb_row admin_label=”row” make_fullwidth=”off” use_custom_width=”off” width_unit=”off” custom_width_px=”1080px” custom_width_percent=”80%” use_custom_gutter=”off” gutter_width=”2″ custom_padding=”25px|0px|75px|0px” padding_mobile=”off” allow_player_pause=”off” parallax=”off” parallax_method=”on” make_equal=”off” column_padding_mobile=”on” parallax_1=”off” parallax_method_1=”on” parallax_2=”off” parallax_method_2=”on” parallax_3=”off” parallax_method_3=”on” parallax_4=”off” parallax_method_4=”on” disabled=”off”][et_pb_column type=”1_4″][et_pb_text admin_label=”Text” background_layout=”dark” text_orientation=”left” text_line_height=”1em” use_border_color=”off” border_style=”solid” disabled=”off” border_color=”#ffffff”]
Platform: PC
Genre: Twin Stick, Arcade
Engine: Unity 5
Production Time: 7 weeks
Role: Level Design, Level Scripting
Production Team Size: 9 People
[/et_pb_text][/et_pb_column][et_pb_column type=”3_4″][et_pb_text admin_label=”Text” background_layout=”dark” text_orientation=”left” use_border_color=”off” border_style=”solid” disabled=”off” border_color=”#ffffff”]
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.
[/et_pb_text][/et_pb_column][/et_pb_row][et_pb_row admin_label=”Row” make_fullwidth=”off” use_custom_width=”off” width_unit=”on” custom_width_px=”1080px” custom_width_percent=”80%” use_custom_gutter=”off” gutter_width=”2″ custom_padding=”0px|0px|2px|0px” padding_mobile=”off” allow_player_pause=”off” parallax=”off” parallax_method=”off” make_equal=”off” column_padding_mobile=”on” parallax_1=”off” parallax_method_1=”off” parallax_2=”off” parallax_method_2=”on” parallax_3=”off” parallax_method_3=”on” parallax_4=”off” parallax_method_4=”on” disabled=”off”][et_pb_column type=”4_4″][et_pb_video admin_label=”Video” src=”https://youtu.be/HoWl-H7w994″ disabled=”off”] [/et_pb_video][/et_pb_column][/et_pb_row][et_pb_row admin_label=”Row” make_fullwidth=”off” use_custom_width=”off” width_unit=”off” custom_width_px=”1080px” custom_width_percent=”80%” use_custom_gutter=”off” gutter_width=”2″ custom_padding=”73px|0px|0px|0px” padding_mobile=”off” allow_player_pause=”off” parallax=”off” parallax_method=”on” make_equal=”off” column_padding_mobile=”on” parallax_1=”off” parallax_method_1=”on” parallax_2=”off” parallax_method_2=”on” parallax_3=”off” parallax_method_3=”on” parallax_4=”off” parallax_method_4=”on” disabled=”off”][et_pb_column type=”4_4″][et_pb_text admin_label=”Text” background_layout=”dark” text_orientation=”center” text_font_size=”22″ use_border_color=”off” border_style=”solid” disabled=”off” text_text_color=”#eb961e” border_color=”#ffffff”]
Design Goal and Game Pillars
[/et_pb_text][et_pb_divider admin_label=”Divider” color=”#ffffff” show_divider=”on” divider_style=”solid” divider_position=”top” divider_weight=”1px” hide_on_mobile=”on” disabled=”off”] [/et_pb_divider][/et_pb_column][/et_pb_row][et_pb_row admin_label=”Row” make_fullwidth=”off” use_custom_width=”off” width_unit=”off” custom_width_px=”1080px” custom_width_percent=”80%” use_custom_gutter=”off” gutter_width=”2″ custom_padding=”31px|0px|9px|0px” padding_mobile=”off” allow_player_pause=”off” parallax=”off” parallax_method=”on” make_equal=”off” column_padding_mobile=”on” parallax_1=”off” parallax_method_1=”on” parallax_2=”off” parallax_method_2=”on” parallax_3=”off” parallax_method_3=”on” parallax_4=”off” parallax_method_4=”on” disabled=”off”][et_pb_column type=”1_4″][et_pb_text admin_label=”Text” background_layout=”dark” text_orientation=”left” text_font_size=”18″ use_border_color=”off” border_style=”solid” disabled=”off”]
Core Pillars:
[/et_pb_text][et_pb_text admin_label=”Text” background_layout=”dark” text_orientation=”left” use_border_color=”off” border_style=”solid” disabled=”off” border_color=”#ffffff”]
- Arena Sections
- Transition Sections
- Intense gameplay
[/et_pb_text][/et_pb_column][et_pb_column type=”3_4″][et_pb_text admin_label=”Text” background_layout=”dark” text_orientation=”left” use_border_color=”off” border_style=”solid” disabled=”off” border_color=”#ffffff”]
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.
[/et_pb_text][/et_pb_column][/et_pb_row][et_pb_row admin_label=”Row” make_fullwidth=”off” use_custom_width=”off” width_unit=”off” custom_width_px=”1080px” custom_width_percent=”80%” use_custom_gutter=”off” gutter_width=”2″ custom_padding=”52px|0px|58px|0px” padding_mobile=”off” allow_player_pause=”off” parallax=”off” parallax_method=”on” make_equal=”off” column_padding_mobile=”on” parallax_1=”off” parallax_method_1=”on” parallax_2=”off” parallax_method_2=”on” parallax_3=”off” parallax_method_3=”on” parallax_4=”off” parallax_method_4=”on” disabled=”off”][et_pb_column type=”4_4″][et_pb_text admin_label=”Text” background_layout=”dark” text_orientation=”center” text_font_size=”22″ use_border_color=”off” border_style=”solid” disabled=”off” text_text_color=”#eb961e” border_color=”#ffffff”]
Level Overview and Pacing
[/et_pb_text][et_pb_divider admin_label=”Divider” color=”#ffffff” show_divider=”on” divider_style=”solid” divider_position=”top” divider_weight=”1px” hide_on_mobile=”on” disabled=”off”] [/et_pb_divider][/et_pb_column][/et_pb_row][et_pb_row admin_label=”Row” make_fullwidth=”off” use_custom_width=”off” width_unit=”off” custom_width_px=”1080px” custom_width_percent=”80%” use_custom_gutter=”off” gutter_width=”2″ padding_mobile=”off” allow_player_pause=”off” parallax=”off” parallax_method=”on” make_equal=”off” column_padding_mobile=”on” parallax_1=”off” parallax_method_1=”on” parallax_2=”off” parallax_method_2=”on” parallax_3=”off” parallax_method_3=”on” parallax_4=”off” parallax_method_4=”on” disabled=”off”][et_pb_column type=”4_4″][et_pb_text admin_label=”Text” background_layout=”dark” text_orientation=”left” use_border_color=”off” border_style=”solid” disabled=”off” border_color=”#ffffff”]
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).
[/et_pb_text][et_pb_image admin_label=”Image” src=”http://www.berjjet.se/wp-content/uploads/2017/09/CR_Overview.png” show_in_lightbox=”off” url_new_window=”off” use_overlay=”off” animation=”off” sticky=”off” align=”left” force_fullwidth=”off” always_center_on_mobile=”on” use_border_color=”off” border_color=”#ffffff” border_width=”1px” border_style=”solid” disabled=”off”] [/et_pb_image][/et_pb_column][/et_pb_row][et_pb_row admin_label=”Row” make_fullwidth=”off” use_custom_width=”off” width_unit=”off” custom_width_px=”1080px” custom_width_percent=”80%” use_custom_gutter=”off” gutter_width=”2″ padding_mobile=”off” allow_player_pause=”off” parallax=”off” parallax_method=”on” make_equal=”off” column_padding_mobile=”on” parallax_1=”off” parallax_method_1=”on” parallax_2=”off” parallax_method_2=”on” parallax_3=”off” parallax_method_3=”on” parallax_4=”off” parallax_method_4=”on” disabled=”off”][et_pb_column type=”4_4″][et_pb_image admin_label=”Image” src=”http://www.berjjet.se/wp-content/uploads/2017/09/RocketPacing.png” show_in_lightbox=”off” url_new_window=”off” use_overlay=”off” animation=”off” sticky=”off” align=”center” force_fullwidth=”off” always_center_on_mobile=”on” use_border_color=”off” border_color=”#ffffff” border_style=”solid” disabled=”off”] [/et_pb_image][/et_pb_column][/et_pb_row][et_pb_row admin_label=”Row” make_fullwidth=”off” use_custom_width=”off” width_unit=”off” custom_width_px=”1080px” custom_width_percent=”80%” use_custom_gutter=”off” gutter_width=”2″ padding_mobile=”off” allow_player_pause=”off” parallax=”off” parallax_method=”on” make_equal=”off” column_padding_mobile=”on” parallax_1=”off” parallax_method_1=”on” parallax_2=”off” parallax_method_2=”on” parallax_3=”off” parallax_method_3=”on” parallax_4=”off” parallax_method_4=”on” disabled=”off”][et_pb_column type=”1_3″][et_pb_text admin_label=”Text” background_layout=”dark” text_orientation=”center” text_font_size=”22″ use_border_color=”off” border_style=”solid” disabled=”off” text_text_color=”#eb961e” border_color=”#ffffff”]
TUTORIAL, AREA 1 & ARENA 1
[/et_pb_text][et_pb_text admin_label=”Text” background_layout=”dark” text_orientation=”left” use_border_color=”off” border_style=”solid” disabled=”off”]
- 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.
[/et_pb_text][/et_pb_column][et_pb_column type=”1_3″][et_pb_text admin_label=”Text” background_layout=”dark” text_orientation=”center” text_font_size=”22″ use_border_color=”off” border_style=”solid” disabled=”off” text_text_color=”#eb961e” border_color=”#ffffff”]
AREA 2 & ARENA 2
[/et_pb_text][et_pb_text admin_label=”Text” background_layout=”dark” text_orientation=”left” use_border_color=”off” border_style=”solid” disabled=”off”]
- 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.
[/et_pb_text][/et_pb_column][et_pb_column type=”1_3″][et_pb_text admin_label=”Text” background_layout=”dark” text_orientation=”center” text_font_size=”22″ use_border_color=”off” border_style=”solid” disabled=”off” text_text_color=”#eb961e” border_color=”#ffffff”]
AREA 3 & BOSS
[/et_pb_text][et_pb_text admin_label=”Text” background_layout=”dark” text_orientation=”left” use_border_color=”off” border_style=”solid” disabled=”off”]
- 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.
[/et_pb_text][/et_pb_column][/et_pb_row][et_pb_row admin_label=”Row” make_fullwidth=”off” use_custom_width=”off” width_unit=”off” custom_width_px=”1080px” custom_width_percent=”80%” use_custom_gutter=”off” gutter_width=”2″ custom_padding=”52px|0px|58px|0px” padding_mobile=”off” allow_player_pause=”off” parallax=”off” parallax_method=”on” make_equal=”off” column_padding_mobile=”on” parallax_1=”off” parallax_method_1=”on” parallax_2=”off” parallax_method_2=”on” parallax_3=”off” parallax_method_3=”on” parallax_4=”off” parallax_method_4=”on” disabled=”off”][et_pb_column type=”4_4″][et_pb_text admin_label=”Text” background_layout=”dark” text_orientation=”center” text_font_size=”22″ use_border_color=”off” border_style=”solid” disabled=”off” text_text_color=”#eb961e” border_color=”#ffffff”]
Design Process
[/et_pb_text][et_pb_divider admin_label=”Divider” color=”#ffffff” show_divider=”on” divider_style=”solid” divider_position=”top” divider_weight=”1px” hide_on_mobile=”on” disabled=”off”] [/et_pb_divider][/et_pb_column][/et_pb_row][et_pb_row admin_label=”Row” make_fullwidth=”off” use_custom_width=”off” width_unit=”off” custom_width_px=”1080px” custom_width_percent=”80%” use_custom_gutter=”off” gutter_width=”2″ custom_padding=”52px|0px|58px|0px” padding_mobile=”off” allow_player_pause=”off” parallax=”off” parallax_method=”on” make_equal=”off” column_padding_mobile=”on” parallax_1=”off” parallax_method_1=”on” parallax_2=”off” parallax_method_2=”on” parallax_3=”off” parallax_method_3=”on” parallax_4=”off” parallax_method_4=”on” disabled=”off”][et_pb_column type=”4_4″][et_pb_text admin_label=”Text” background_layout=”dark” text_orientation=”left” use_border_color=”off” border_style=”solid” disabled=”off”]
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.
[/et_pb_text][/et_pb_column][/et_pb_row][et_pb_row admin_label=”Row” make_fullwidth=”off” use_custom_width=”off” width_unit=”off” custom_width_px=”1080px” custom_width_percent=”80%” use_custom_gutter=”off” gutter_width=”2″ custom_padding=”24px|0px|0px|0px” padding_mobile=”off” allow_player_pause=”off” parallax=”off” parallax_method=”on” make_equal=”off” column_padding_mobile=”on” parallax_1=”off” parallax_method_1=”on” parallax_2=”off” parallax_method_2=”on” parallax_3=”off” parallax_method_3=”on” parallax_4=”off” parallax_method_4=”on” disabled=”off”][et_pb_column type=”1_2″][et_pb_image admin_label=”Image” src=”http://www.berjjet.se/wp-content/uploads/2017/09/RocketAgain.jpg” show_in_lightbox=”off” url_new_window=”off” use_overlay=”off” animation=”off” sticky=”off” align=”left” force_fullwidth=”off” always_center_on_mobile=”on” use_border_color=”off” border_color=”#ffffff” border_width=”1px” border_style=”solid” disabled=”off”] [/et_pb_image][/et_pb_column][et_pb_column type=”1_2″][et_pb_image admin_label=”Image” src=”http://www.berjjet.se/wp-content/uploads/2017/09/WorldOfTomorrow.jpg” show_in_lightbox=”off” url_new_window=”off” use_overlay=”off” animation=”off” sticky=”off” align=”left” force_fullwidth=”off” always_center_on_mobile=”on” use_border_color=”off” border_color=”#ffffff” border_width=”1px” border_style=”solid” disabled=”off”] [/et_pb_image][/et_pb_column][/et_pb_row][et_pb_row admin_label=”Row” make_fullwidth=”off” use_custom_width=”off” width_unit=”off” custom_width_px=”1080px” custom_width_percent=”80%” use_custom_gutter=”off” gutter_width=”2″ custom_padding=”15px|0px|25px|0px” padding_mobile=”off” allow_player_pause=”off” parallax=”off” parallax_method=”on” make_equal=”off” column_padding_mobile=”on” parallax_1=”off” parallax_method_1=”on” parallax_2=”off” parallax_method_2=”on” parallax_3=”off” parallax_method_3=”on” parallax_4=”off” parallax_method_4=”on” disabled=”off”][et_pb_column type=”4_4″][et_pb_text admin_label=”Text” background_layout=”dark” text_orientation=”left” use_border_color=”off” border_style=”solid” disabled=”off”]
Photos from the actual New York world fair in 1929 were used as inspiration for the level layout and design.
[/et_pb_text][/et_pb_column][/et_pb_row][et_pb_row admin_label=”Row” make_fullwidth=”off” use_custom_width=”off” width_unit=”off” custom_width_px=”1080px” custom_width_percent=”80%” use_custom_gutter=”off” gutter_width=”2″ custom_padding=”50px|0px|24px|0px” padding_mobile=”off” allow_player_pause=”off” parallax=”off” parallax_method=”on” make_equal=”off” column_padding_mobile=”on” parallax_1=”off” parallax_method_1=”on” parallax_2=”off” parallax_method_2=”on” parallax_3=”off” parallax_method_3=”on” parallax_4=”off” parallax_method_4=”on” disabled=”off”][et_pb_column type=”1_2″][et_pb_image admin_label=”Image” src=”http://www.berjjet.se/wp-content/uploads/2017/09/OverviewSketchNew.jpg” show_in_lightbox=”off” url_new_window=”off” use_overlay=”off” animation=”off” sticky=”off” align=”left” force_fullwidth=”off” always_center_on_mobile=”on” use_border_color=”off” border_color=”#ffffff” border_width=”1px” border_style=”solid” disabled=”off”] [/et_pb_image][et_pb_text admin_label=”Text” background_layout=”dark” text_orientation=”left” use_border_color=”off” border_style=”solid” disabled=”off”]
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.
[/et_pb_text][/et_pb_column][et_pb_column type=”1_2″][et_pb_image admin_label=”Image” src=”http://www.berjjet.se/wp-content/uploads/2017/09/Whitebox.jpg” show_in_lightbox=”off” url_new_window=”off” use_overlay=”off” animation=”off” sticky=”off” align=”left” force_fullwidth=”off” always_center_on_mobile=”on” use_border_color=”off” border_color=”#ffffff” border_width=”1px” border_style=”solid” disabled=”off”] [/et_pb_image][et_pb_text admin_label=”Text” background_layout=”dark” text_orientation=”left” use_border_color=”off” border_style=”solid” disabled=”off”]
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.
[/et_pb_text][/et_pb_column][/et_pb_row][et_pb_row admin_label=”Row” make_fullwidth=”off” use_custom_width=”off” width_unit=”off” custom_width_px=”1080px” custom_width_percent=”80%” use_custom_gutter=”off” gutter_width=”2″ custom_padding=”52px|0px|58px|0px” padding_mobile=”off” allow_player_pause=”off” parallax=”off” parallax_method=”on” make_equal=”off” column_padding_mobile=”on” parallax_1=”off” parallax_method_1=”on” parallax_2=”off” parallax_method_2=”on” parallax_3=”off” parallax_method_3=”on” parallax_4=”off” parallax_method_4=”on” disabled=”off”][et_pb_column type=”4_4″][et_pb_text admin_label=”Text” background_layout=”dark” text_orientation=”center” text_font_size=”22″ use_border_color=”off” border_style=”solid” disabled=”off” text_text_color=”#eb961e” border_color=”#ffffff”]
Level Scripts
[/et_pb_text][et_pb_divider admin_label=”Divider” color=”#ffffff” show_divider=”on” divider_style=”solid” divider_position=”top” divider_weight=”1px” hide_on_mobile=”on” disabled=”off”] [/et_pb_divider][/et_pb_column][/et_pb_row][et_pb_row admin_label=”Row” make_fullwidth=”off” use_custom_width=”off” width_unit=”off” custom_width_px=”1080px” custom_width_percent=”80%” use_custom_gutter=”off” gutter_width=”2″ custom_padding=”52px|0px|0px|0px” padding_mobile=”off” allow_player_pause=”off” parallax=”off” parallax_method=”on” make_equal=”off” column_padding_mobile=”on” parallax_1=”off” parallax_method_1=”on” parallax_2=”off” parallax_method_2=”on” parallax_3=”off” parallax_method_3=”on” parallax_4=”off” parallax_method_4=”on” disabled=”off”][et_pb_column type=”4_4″][et_pb_text admin_label=”Text” background_layout=”dark” text_orientation=”left” use_border_color=”off” border_style=”solid” disabled=”off”]
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.
[/et_pb_text][et_pb_text admin_label=”Text” background_layout=”dark” text_orientation=”left” text_font_size=”18″ use_border_color=”off” border_style=”solid” disabled=”off”]
Single Spawner breakdown
[/et_pb_text][et_pb_text admin_label=”Text” background_layout=”dark” text_orientation=”left” use_border_color=”off” border_style=”solid” disabled=”off” border_color=”#ffffff”]
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”.
[/et_pb_text][/et_pb_column][/et_pb_row][et_pb_row admin_label=”Row” make_fullwidth=”off” use_custom_width=”off” width_unit=”off” custom_width_px=”1080px” custom_width_percent=”80%” use_custom_gutter=”off” gutter_width=”2″ custom_padding=”65px|0px|30px|0px” padding_mobile=”off” allow_player_pause=”off” parallax=”off” parallax_method=”on” make_equal=”off” column_padding_mobile=”on” parallax_1=”off” parallax_method_1=”on” parallax_2=”off” parallax_method_2=”on” parallax_3=”off” parallax_method_3=”on” parallax_4=”off” parallax_method_4=”on” disabled=”off”][et_pb_column type=”1_2″][et_pb_image admin_label=”Image” src=”http://www.berjjet.se/wp-content/uploads/2017/09/SpawnerScript.jpg” show_in_lightbox=”off” url_new_window=”off” use_overlay=”off” animation=”off” sticky=”off” align=”left” force_fullwidth=”off” always_center_on_mobile=”on” use_border_color=”off” border_color=”#ffffff” border_width=”1px” border_style=”solid” disabled=”off”] [/et_pb_image][et_pb_text admin_label=”Text” background_layout=”dark” text_orientation=”left” use_border_color=”off” border_style=”solid” disabled=”off” border_color=”#ffffff”]
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).
[/et_pb_text][et_pb_image admin_label=”Image” src=”http://www.berjjet.se/wp-content/uploads/2017/09/giphy-downsized-large.gif” show_in_lightbox=”off” url_new_window=”off” use_overlay=”off” animation=”off” sticky=”off” align=”left” force_fullwidth=”off” always_center_on_mobile=”on” use_border_color=”off” border_color=”#ffffff” border_style=”solid” disabled=”off”] [/et_pb_image][et_pb_text admin_label=”Text” background_layout=”dark” text_orientation=”left” text_font_size=”18″ use_border_color=”off” border_style=”solid” disabled=”off” border_color=”#ffffff”]
Single Spawner C# Code
[/et_pb_text][/et_pb_column][et_pb_column type=”1_2″][et_pb_image admin_label=”Image” src=”http://www.berjjet.se/wp-content/uploads/2017/09/SpawnChart.png” show_in_lightbox=”off” url_new_window=”off” use_overlay=”off” animation=”off” sticky=”off” align=”left” force_fullwidth=”off” always_center_on_mobile=”on” use_border_color=”off” border_color=”#ffffff” border_width=”1px” border_style=”solid” disabled=”off”] [/et_pb_image][/et_pb_column][/et_pb_row][et_pb_row admin_label=”Row” make_fullwidth=”off” use_custom_width=”off” width_unit=”off” custom_width_px=”1080px” custom_width_percent=”80%” use_custom_gutter=”off” gutter_width=”2″ custom_padding=”0px|0px|58px|0px” padding_mobile=”off” allow_player_pause=”off” parallax=”off” parallax_method=”on” make_equal=”off” column_padding_mobile=”on” parallax_1=”off” parallax_method_1=”on” parallax_2=”off” parallax_method_2=”on” parallax_3=”off” parallax_method_3=”on” parallax_4=”off” parallax_method_4=”on” disabled=”off”][et_pb_column type=”4_4″][et_pb_image admin_label=”Image” src=”http://www.berjjet.se/wp-content/uploads/2017/09/Code.jpg” show_in_lightbox=”off” url_new_window=”off” use_overlay=”off” animation=”off” sticky=”off” align=”left” force_fullwidth=”off” always_center_on_mobile=”on” use_border_color=”off” border_color=”#ffffff” border_style=”solid” disabled=”off”] [/et_pb_image][/et_pb_column][/et_pb_row][et_pb_row admin_label=”Row” make_fullwidth=”off” use_custom_width=”off” width_unit=”off” custom_width_px=”1080px” custom_width_percent=”80%” use_custom_gutter=”off” gutter_width=”2″ custom_padding=”52px|0px|0px|0px” padding_mobile=”off” allow_player_pause=”off” parallax=”off” parallax_method=”on” make_equal=”off” column_padding_mobile=”on” parallax_1=”off” parallax_method_1=”on” parallax_2=”off” parallax_method_2=”on” parallax_3=”off” parallax_method_3=”on” parallax_4=”off” parallax_method_4=”on” disabled=”off”][et_pb_column type=”4_4″][et_pb_text admin_label=”Text” background_layout=”dark” text_orientation=”left” text_font_size=”18″ use_border_color=”off” border_style=”solid” disabled=”off” border_color=”#ffffff”]
Arena Spawner breakdown
[/et_pb_text][et_pb_text admin_label=”Text” background_layout=”dark” text_orientation=”left” use_border_color=”off” border_style=”solid” disabled=”off” border_color=”#ffffff”]
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.
[/et_pb_text][/et_pb_column][/et_pb_row][et_pb_row admin_label=”Row” make_fullwidth=”off” use_custom_width=”off” width_unit=”off” custom_width_px=”1080px” custom_width_percent=”80%” use_custom_gutter=”off” gutter_width=”2″ custom_padding=”65px|0px|30px|0px” padding_mobile=”off” allow_player_pause=”off” parallax=”off” parallax_method=”on” make_equal=”off” column_padding_mobile=”on” parallax_1=”off” parallax_method_1=”on” parallax_2=”off” parallax_method_2=”on” parallax_3=”off” parallax_method_3=”on” parallax_4=”off” parallax_method_4=”on” disabled=”off”][et_pb_column type=”1_2″][et_pb_image admin_label=”Image” src=”http://www.berjjet.se/wp-content/uploads/2017/09/ArenaSPawner.jpg” show_in_lightbox=”off” url_new_window=”off” use_overlay=”off” animation=”off” sticky=”off” align=”left” force_fullwidth=”off” always_center_on_mobile=”on” use_border_color=”off” border_color=”#ffffff” border_style=”solid” disabled=”off”] [/et_pb_image][et_pb_text admin_label=”Text” background_layout=”dark” text_orientation=”left” use_border_color=”off” border_style=”solid” disabled=”off” border_color=”#ffffff”]
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.
[/et_pb_text][/et_pb_column][et_pb_column type=”1_2″][et_pb_image admin_label=”Image” src=”http://www.berjjet.se/wp-content/uploads/2017/09/Chart2.png” show_in_lightbox=”off” url_new_window=”off” use_overlay=”off” animation=”off” sticky=”off” align=”left” force_fullwidth=”off” always_center_on_mobile=”on” use_border_color=”off” border_color=”#ffffff” border_style=”solid” disabled=”off”] [/et_pb_image][/et_pb_column][/et_pb_row][et_pb_row admin_label=”Row” make_fullwidth=”off” use_custom_width=”off” width_unit=”off” custom_width_px=”1080px” custom_width_percent=”80%” use_custom_gutter=”off” gutter_width=”2″ custom_padding=”52px|0px|58px|0px” padding_mobile=”off” allow_player_pause=”off” parallax=”off” parallax_method=”on” make_equal=”off” column_padding_mobile=”on” parallax_1=”off” parallax_method_1=”on” parallax_2=”off” parallax_method_2=”on” parallax_3=”off” parallax_method_3=”on” parallax_4=”off” parallax_method_4=”on” disabled=”off”][et_pb_column type=”4_4″][et_pb_text admin_label=”Text” background_layout=”dark” text_orientation=”center” text_font_size=”22″ use_border_color=”off” border_style=”solid” disabled=”off” text_text_color=”#eb961e” border_color=”#ffffff”]
Level Walkthrough
[/et_pb_text][et_pb_divider admin_label=”Divider” color=”#ffffff” show_divider=”on” divider_style=”solid” divider_position=”top” divider_weight=”1px” hide_on_mobile=”on” disabled=”off”] [/et_pb_divider][/et_pb_column][/et_pb_row][et_pb_row admin_label=”Row” make_fullwidth=”off” use_custom_width=”off” width_unit=”off” custom_width_px=”1080px” custom_width_percent=”80%” use_custom_gutter=”off” gutter_width=”2″ custom_padding=”52px|0px|58px|0px” padding_mobile=”off” allow_player_pause=”off” parallax=”off” parallax_method=”on” make_equal=”off” column_padding_mobile=”on” parallax_1=”off” parallax_method_1=”on” parallax_2=”off” parallax_method_2=”on” parallax_3=”off” parallax_method_3=”on” parallax_4=”off” parallax_method_4=”on” disabled=”off”][et_pb_column type=”4_4″][et_pb_image admin_label=”Image” src=”http://www.berjjet.se/wp-content/uploads/2017/09/Rocket_Tutorial.jpg” show_in_lightbox=”off” url_new_window=”off” use_overlay=”off” animation=”off” sticky=”off” align=”left” force_fullwidth=”off” always_center_on_mobile=”on” use_border_color=”off” border_color=”#ffffff” border_style=”solid” disabled=”off”] [/et_pb_image][et_pb_text admin_label=”Text” background_layout=”dark” text_orientation=”left” use_border_color=”off” border_style=”solid” disabled=”off” border_color=”#ffffff”]
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.
[/et_pb_text][et_pb_image admin_label=”Image” src=”http://www.berjjet.se/wp-content/uploads/2017/09/Rocket_Transition1.jpg” show_in_lightbox=”off” url_new_window=”off” use_overlay=”off” animation=”off” sticky=”off” align=”left” force_fullwidth=”off” always_center_on_mobile=”on” use_border_color=”off” border_color=”#ffffff” border_style=”solid” disabled=”off”] [/et_pb_image][et_pb_text admin_label=”Text” background_layout=”dark” text_orientation=”left” use_border_color=”off” border_style=”solid” disabled=”off” border_color=”#ffffff”]
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.
[/et_pb_text][et_pb_image admin_label=”Image” src=”http://www.berjjet.se/wp-content/uploads/2017/09/Rocket_Arena1.jpg” show_in_lightbox=”off” url_new_window=”off” use_overlay=”off” animation=”off” sticky=”off” align=”left” force_fullwidth=”off” always_center_on_mobile=”on” use_border_color=”off” border_color=”#ffffff” border_style=”solid” disabled=”off”] [/et_pb_image][et_pb_text admin_label=”Text” background_layout=”dark” text_orientation=”left” use_border_color=”off” border_style=”solid” disabled=”off” border_color=”#ffffff”]
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.
[/et_pb_text][et_pb_image admin_label=”Image” src=”http://www.berjjet.se/wp-content/uploads/2017/09/Rocket_Transition2.jpg” show_in_lightbox=”off” url_new_window=”off” use_overlay=”off” animation=”off” sticky=”off” align=”left” force_fullwidth=”off” always_center_on_mobile=”on” use_border_color=”off” border_color=”#ffffff” border_style=”solid” disabled=”off”] [/et_pb_image][et_pb_text admin_label=”Text” background_layout=”dark” text_orientation=”left” use_border_color=”off” border_style=”solid” disabled=”off” border_color=”#ffffff”]
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.
[/et_pb_text][et_pb_image admin_label=”Image” src=”http://www.berjjet.se/wp-content/uploads/2017/09/Rocket_Arena2.jpg” show_in_lightbox=”off” url_new_window=”off” use_overlay=”off” animation=”off” sticky=”off” align=”left” force_fullwidth=”off” always_center_on_mobile=”on” use_border_color=”off” border_color=”#ffffff” border_style=”solid” disabled=”off”] [/et_pb_image][et_pb_text admin_label=”Text” background_layout=”dark” text_orientation=”left” use_border_color=”off” border_style=”solid” disabled=”off” border_color=”#ffffff”]
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.
[/et_pb_text][et_pb_image admin_label=”Image” src=”http://www.berjjet.se/wp-content/uploads/2017/09/Rocket_Transition3.jpg” show_in_lightbox=”off” url_new_window=”off” use_overlay=”off” animation=”off” sticky=”off” align=”left” force_fullwidth=”off” always_center_on_mobile=”on” use_border_color=”off” border_color=”#ffffff” border_style=”solid” disabled=”off”] [/et_pb_image][et_pb_text admin_label=”Text” background_layout=”dark” text_orientation=”left” use_border_color=”off” border_style=”solid” disabled=”off” border_color=”#ffffff”]
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.
[/et_pb_text][et_pb_image admin_label=”Image” src=”http://www.berjjet.se/wp-content/uploads/2017/09/Rocket_Boss.jpg” show_in_lightbox=”off” url_new_window=”off” use_overlay=”off” animation=”off” sticky=”off” align=”left” force_fullwidth=”off” always_center_on_mobile=”on” use_border_color=”off” border_color=”#ffffff” border_style=”solid” disabled=”off”] [/et_pb_image][et_pb_text admin_label=”Text” background_layout=”dark” text_orientation=”left” use_border_color=”off” border_style=”solid” disabled=”off” border_color=”#ffffff”]
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.
[/et_pb_text][/et_pb_column][/et_pb_row][/et_pb_section]