Danielle is a former covert agent and now works as a mercenary. She utilizes state-of-the-art equipment and operates alongside her robotic companion Shadow. Danielle unlocks new abilities during her journey that help her fight the martian forces.
The player controls Danielle from an isometric view using WASD for movement and the mouse for aiming. Our goal was to allow the player to freely aim and shoot while moving in any direction.
At the beginning of the project, we used the default animation blueprint that was included with the player model.
During our Beta tests, however, we received feedback that the animation could use some polish. We decided to create a new animation blueprint that added new movement, aiming and death animations.
Old Animation for Danielle
New Animation for Danielle
Dash provides a rapid movement boost while granting invulnerability for the duration on a short cooldown. Our goal was to enable the player to react to enemy attacks by dodging incoming projectiles.
Additionally, the player can dash through laser hazards if timed correctly.
Danielle gains invulnerability for a short duration while dashing.
As an additional defensive tool, the player can deploy a shield by holding down the right mouse button to gain protection from frontal attacks. The shield uses energy and allows the player to freely move or shoot while it is active.
In its early iteration, it was a dome effect that the player deployed with a press of a button and it was active for a short duration.
We recognized that this promoted a stationary playstyle and made certain laser hazards trivial so we decided to change it to its current version.
For the visual effect, I created a translucent material that moves a texture sample in a desired direction and attached it to a static mesh. This material was later reused for the shadow doors and energy bridges as well.
I modulated a hovering aircraft SFX in order to create the sound effect for the shield that aimed to signal the player its sci-fi nature of the ability without being too distracting from the gameplay.
Shield early version
Shield in the final version
The stakeholder brief stated that the game had to include two weapons. For the primary weapon, we designed an energy rifle that fires a projectile in a straight line with unlimited ammunition which is always available to the player. For the secondary weapon, we wanted a gun that invokes triangularity by dealing damage in a straight line to all enemy units it hits, which had a resource cost. The player can either use it on a single enemy or try to line up additional enemies for a devastating attack.
Our goal was to involve Shadow in the gameplay so we decided to make him the secondary weapon. This meant to emphasize Danielle and Shadow's relationship and enforce the fact that they had to rely on each other in order to complete the mission and give a reason for his existence in the game.
The Particle Beam went through a lot of iterations before we finalized its design. The main issue we were facing was Shadow`s movement behaviors which made aiming hard and unpredictable. While we were testing different solutions I experimented with a similar effect that our lasers used. Since it was a channeled ability, pinpoint accuracy was not important and the visual design fits well in the existing universe we created.
For the sound, I used a sped-up plane SFX sample on a loop with a higher pitch in order to create an effect that sounds powerful and feels satisfying to use.
One of our core pillars of the game is the symbiotic relationship between Danielle and Shadow. In order to emphasize this, we wanted to involve him in the gameplay. However, during the design phase, we were cautious in his involvement since we were not quite sure how difficult it would be to implement a realistically moving AI partner that follows Danielle around in such a short amount of time. Our initial solution was to cloak Shadow during combat and only reveal him in key moments during the game.
While I was working on the enemy behavior I discovered a solution to fake the AI for Shadow by adding two points to the player model that served as targets for Shadow to follow. To create a realistic movement I used random offsets numbers between the two points in regular intervals to simulate hovering while the player is stationary. Using the points vector value Shadow can rotate to the same direction the player is facing and depending on the distance between the two, Shadow's velocity is varied making his movement look natural.
Shadow`s movement in-game
Robot Guardian stats
Robotic Guardians are the standard enemies presented in levels 3-4. They fire damaging projectiles in a line which dissipate on player or mesh collision.
After spawning the guardians enter an aggroed state and attack the player if it is in line of sight. If the player finds a cover the guardian follows the player until it is visible again.
The enemy was designed to create bullet hell scenarios where the gameplay focuses on dodging endless waves of colored bullets. The bullet speed is tuned so the player has a chance to react to it before impact by dashing or activating the shield.
The player fighting with the enemy units.
I used Unreal`s build-in behavior tree (BT) for the enemy AI. On each update, the BT goes through a sequence list to check for states that are true or false in order to determine to shoot or move to the player's position.
Enemy Behaviour Tree
For the animation, I created a simple state machine that swaps between Idle and Running depending on its speed value. I used blend poses for the shooting that allows it to be played while the guardian is standing still or moving.
Animation blend poses for shooting and dying animation
Sound cues were used for the spawn and death sounds. There are 10 different wave files randomized for enemy spawns and 5 SFX for death. I took the sounds from free samples then, modulated them in Audacity to give it an out worldly sci-fi effect.
The heads-up display is an overlay that the player can see at all points in time during gameplay. It conveys the current state of the game to the player and will update accordingly as the game state changes, e.g. taking damage will lower the health bar.
The prototype design placed the Health Bar to the top left corner the energy bar to the middle and the evade cooldown indicator underneath the character.
Prototype UI for concept and in-game
Over time the energy bar was moved to the top left corner in order to reduce the visual clutter. For the text boxes, I created a blueprint that allowed me to set the text content from the editor and it would type out the text with a typewriter effect.
Early textbox for story beats
Late in production, we received feedback from our testers regarding the UI. One of the problems they were facing was that they were confused about which ability was active at a time (shield or laser). To solve this issue I added two images underneath the energy bar to indicate the active ability.
Another feedback we received was that players completely missed that they received new abilities in level 3 and they did not use them at all. To solve this we added a tutorial screens to the game to showcase these features at the beginning of the level.
Tutorial images that teach the player how the new abilities work.
The player can interact with various objects in the environment like terminals, shadow charges, doors, and power-ups. To alert the player, a UI element shows up whenever the player is next to one of these objects.
Old Interact Button
New Interact Button
Additionally, a rotating particle is used to show the player which environmental elements can be used. For this effect, I created an emissive material with a texture sample than used this material to create a particle effect that rotates it and changes its size/color values.
Indicator to terminals
The menu went through layout changes over the development but its design stayed relatively the same since the pre-alpha version. Originally we did not have a logo or any other material that I could place on the menu that would help to connect the player to the IP. So I used the main character model in order to populate the area with a few assets from our early level build to serve as a background. Over time the background has been changed to indicate the progression from level 2 to 3.
New menu items were introduced in order to help the testers navigate through the content.
The game has no save/load features, the continue button allows the player to continue the story from Part 1 while the level 3 and 4 button allows easy access to each map for testers/reviews.
Menu Design in first playable and Alpha version
Menu Design in the final version
When the player dies or presses Esc the pause menu pops up that allows the player to restart the level, go to the main menu, or exit from the game. For the finalized version this has been updated to match the design used on the main menu.
Death/Pause menu during production
Death/Pause Menu in the final version