Mantra

Humanity is on the brink of extinction. As the former lead developer for Tenso Corp, you feel its your duty to to right the wrongs that brought chaos to the world.

About Mantra:

Set in the near future, a growing force of robots controlled by a corrupt AI is hell-bent on destroying humanity. Corrupted AI code caused thousands of industrial robots to turn into human-killing murder machines, pushing humanity to the brink of extinction. 

Inspired by the likes of Doom, Titanfall and Halo, Mantra takes you through an expansive world where you'll encounter a healthy mix of action-packed combat, swift traversal spaces, and engaging puzzles to complete!

Company:

Rubyshark Games

Team Size:

70+ People

Engine:

Unreal Engine

Roles:

Combat DesignerTechnical DesignerGeneralist

My Role:

Technical Designer


- Threat Detector -

This initially started as a tool to help with encounter testing. One of the issues we ran into was unintentional behavior from enemies allowing the to get stuck off the NavMesh and/or in walls. To address this while solving the underlying issues that let them do that, I created a simple, flexible, and customizable mock-up that let designers be able to locate the enemies and test the areas better when this happened. The design was very heavily inspired by Destiny with 3 circles to help represent distance from the player.

1) Outer Circle = Farther away, but still a threat.
2) Inner Circle = Close and a bigger threat.
3) Center Circle = Extremely close and immediate threat.

Although this was initially planned to just be a developer tool to help designers eliminate enemies to continue encounters, player feedback indicated it was a pretty popular addition to the build. As such, this is an ongoing feature I am currently working on with the UI/UX team now!


- Nav-Link Generator -

Another system I designed related to both level / encounter design and AI. Originally, we had a really rudimentary version where we only needed to place NavLinks in important places. The purpose of this was to allow AI to jump between disconnected NavMeshes, or create a shorter path to jump across (I.E Jumping a gap in a horseshoe shaped encounter space.) This was done by hand  for a while, but with the addition of the Cricket enemy and shift in combat focus, we desperately needed more NavLinks in levels. My solution to this was to overhaul both parts of NavLink system; the Launcher and the generation.

Firstly, I overhauled the actual math behind the scenes to make the launcher have much more accurate and consistent jump path. The original math would frequently result in paths that were shorter or longer than the designer had intended, causing AI to fail jumps, overshoot jumps, et cetra. This was addressed by complete updating how the launch trajectories were calculated, and resulted in much more predictable and reliable NavLink Launchers.

Secondly, I created an entirely new design to actually generate the NavLinks. The issue with placing single links everywhere was that it caused the AI to become too predictable and unrealistic, due to them needing to jump from the same points and clumping by the launcher. The idea was to create several connections between two areas, using four points, creating a basic waterfall shape to the links and allowing several links to be places instantly. Additionally, the system needed to be extremely flexible and allows a lot of control to the designer after generating the links.

Generating the simple links between two points was fairly easy, but the bigger issue was getting the data from the simple links to the smart links (where the logic for jumping can be triggered from). This copying functionality is already built into Unreal Engine 4, but is not easily accessible out of the box. After going through some pretty much completely undocumented engine classes, I created a new C++ file and was able to get the functionality working. NavLinks would now generate and create a simple and smart link with the right data copied.

This allowed us to add NavLinks exponentially more efficiently, and allows for significantly better launcher accuracy without sacrificing any flexibility. The latter point being extremely important to allowing the trajectories of jumps to be evaluated at a glance instead of having to test each one. Moreover, before a designer generates the NavLinks, they still have control to decide the direction of the links, the delay after usage to reenable, etc. After generating, they are not limited to the waterfall shape and can still manually touch up and change directions of the links. This allows us to create highly dynamic and interesting encounter spaces without worrying about the enemy AI not being able to keep up!


- Tokening System / Combat Director -

Although this system has since been replaced with a much more robust combat director, I did create the original outline and implementation of this system which served to help in some part inform that later system.

The initial tokening system worked by limiting what the Crickets could do while chasing. The idea was to overwhelm the player with them chasing them, but not created an unfair system that swarmed the player and instantly gave them a game over. To do this, I created a combat director to keep track of and watch encounters. When enemies would pass certain checks, they were allowed to attack the player. These checks mostly involved distance, location, and time since they attacked last.

For example, if two Crickets wanted to attack the player we would check the distance of them from the player to see if they are close enough, and then the location. The importance of the latter is to make Crickets more likely to attack from in front of the player as opposed to being able to attack from behind the camera. This did not limit them from being able to attack from behind, but made it feel much more fair which is an important goal of the system. While this is a strong oversimplification of the system, the general idea that informed its design. This system has since been replaced by a much more complex Combat Director, which aspects of evolved this design into!

Combat Designer


- Cricket (Enemy Type) -

This is one of the biggest and most visible creations from my work at Rubyshark can be found in the "Cricket" enemy and the reverberation of adding it to the game. While this may seem a bit hyperbolic, the Cricket is the catalyst for numerous aspects of the game being either added entirely, or greatly overhauled. 

Originally nicknamed "Orville" (after the Popcorn Brand), the idea behind the Cricket stems in something I learned at Hangar 13. Namely, the concept of "Popcorn Enemies". Popcorn Enemies are a type of enemy that are there to add a burst of energy by adding intentionally weak enemies the player can "pop" to get a quick hit of adrenaline from in-between stronger foes. 

Furthermore,  combat around this time was really rough. It felt great to run around and shoot, but because enemies were on average fairly strong, the player was unintentionally encouraged to use cover to kite and deal damage instead of using their high mobility. This created a weird, rough, start-and-stop flow to the combat and was in conflict with the goal of 'Keep the player moving'. This is where the Cricket become a vital aspect to the flow of the games combat.

Crickets are designed to be extremely weak and somewhat stupid, but they spawn in much higher numbers and are much faster than any other enemy. This causes the player to get rushed down by a swarm of them during combat and forces and intuitively tells them one thing: "Move!". Crickets serve as a way to force the player to utilize mobility and keep moving,  greatly improving the flow of combat.

When I first joined Mantra  there was no enemy like this even planned to be included. The more I played through the game and experimented with combat, the more clear it became that we needed something to break up the deadlock of having to kill too many strong enemies back to back. As such I created and pitched the design to the team of adding a extremely weak "Chaser" popcorn enemy to the game. This was initially met with some pushback, as adding entire new enemy would increase the development time required to create enemies models, sounds, et cetera., but I was insistent on the importance of it. I created a mock-up of the enemy and let people on the team experiment with how it affected the flow of combat, and everyone noticed a significant improvement toward the intended design! Ever since then, Crickets have been a core part of the enemy line-up and are pretty well loved by the team.


- "Area-Hell" Boss -

Another really amazing aspect of Mantra I've been able to design and implement! The "Area-Hell" boss is a combination of Bullet Hell and Area Denial. While originally those were to separate boss designs, the team realized that they overlapped heavily. After a few iterations on the "Area Denial" Boss we realized it would be better to just combine the two bosses and create a different type entirely. This resulted in me being in charge of the new "Area Denial/Bullet Hell" boss, and the creation of a "Rushdown" type boss!

The process was more involved than I had intended. Originally, I assumed I would only be pitching the design to the other Technical Designers and the Art team to decide feasibility of the boss, but it ended up being a much more coordinated effort involving a lot department. I even ended up consulting with the Level Design team to decide ways I could make the boss feel organic and threating in the level leading up to them.

After a few versions, I landed on a design I like to refer to as "Aerial", both as a play on the type it is and a reference to the Gundam it takes some inspiration from. The design revolves around the boss using tiny drones to form the foundation of their attacks. These attacks are combination of either Area Denial or Bullet Hell, requiring the player to stay alert and engaged in order to avoid them. Additionally, since minor attacks are shared between bosses, the minor attacks all feature a special flare to them in line with the nature of the boss.

I don't want to spoil the entire boss design and every attack, so please try Mantra when it releases for free on steam to get the full experience!


And a few other things, such as:

- Bullet Hell System
- AI Perception Updates
- Combat Flow / Weapon Changes