Developing a Hack and Slash Shooter with Time Rewinding Mechanics in Unreal Engine

Zahid Ali Jeelani shares the development process of the hack and slash game ENENRA, explains how the movement animations in parkour sequences were created, and talks about stylistic choices that made the combos.

Introduction

Hey everyone, my name is Zahid Ali Jeelani, I am 29 years old and based in the UK. My academic background involves having studied Games Development in college and Computer Games Design at a degree level at the University of Wolverhampton.  

I am currently working at Ninja Theory on the Hellblade 2 project as a combat designer, this is my first video games industry job which I managed to get into a few months after graduating from university whilst developing ENENRA. 

ENENRA

I started ENENRA in September 2020, this was around the time I graduated from university. The project was originally called ‘Tempus’ and was a first-person hack and slash/shooter hybrid game with an emphasis on time rewinding mechanics. This changed rapidly into a third-person hack and slash game with a broader range of time manipulation abilities. I had never made a third-person game before, or a hack and slash, so this was a massive challenge for me.  

I have always loved games like Devil May Cry, Vanquish, Metal Gear Rising, and Ninja Gaiden. These games were heavy inspirations for ENENRA in terms of combat and enemy AI. Moments such as the fight against Mistral in Metal Gear Rising are one of my favourite moments and something that inspires me heavily for the future of boss fights and cinematics.  

Parkour

One of the newer parkour moves I added was a wall hook, or cling, which allows the player to hold on to the wall for a moment before ejecting off. This was all done through Unreal Engine's Blueprint.

A trace would fire in front of the player to check if the wall is in range and get the location of the wall and the impact point. I would then use this data to have the player character move to the location and impact point with an offset so he does not simply go through the wall.  

During the movement, the animation used ‘masks’ the movement to the wall. Movement is stopped immediately, and the gravity is turned down to 0. Gravity is then turned back on through animation notifiers, which then creates the effect that the player is ‘sliding’ down the wall. This gravity is not at full strength until the player interrupts this animation or the animation blends out.  

There is also another line trace that fires from an extremely high position to check the ‘height’ of the location. If the wall is too high, the wall hook is performed, if the wall is too short, a mantle is performed.  

Another line trace is used to determine the thickness of the wall, in this case, if the wall is too thin, the character will perform a mantle into a flip. In the case of ejecting off the wall, the script checks if the player is clinging to the wall and if they jump, launches the player in the opposite direction, calculating the height and angle the player must move. 

The trail effects on the parkour moves are fairly simple. I use the Niagara particle system. You can find various on the Unreal Marketplace. This is a use case scenario, for example, they can be attached as notifiers to a montage or be fired through scripting itself and attached as a system.  

Combat

Currently, there is the ‘Jack of All Trades’ stance, which involves aerial attacks, homing, and zoning attacks. This stance also involves some use of dual blades through the use of pause combos. This stance is available to try currently in build V2.13 here.

There are two more combat stances to be added. One will be a ranged combat stance in which the player will be able to slice the air around the enemy damaging them, move between enemies much quicker that the current free flow system, and a lot of evading attacks. The last combat stance is a secret that will be unlocked through story progression.  

The combat works on a hybrid free-flow system. You are able to freely attack enemies around you by pushing the stick towards them and moving instantly to them in a 360-degree radius. The hybrid part is when you lock on to an enemy, you gain aerial attacks, executions, and abilities such as the Wave Slash and Stasis Sword.  

Combos

At first, I used multiple inputs to allow for combos, this caused the problem of ‘infinite’ combos, being able to switch combos in and out in rapid succession and never giving the enemy a chance. I changed this to a one-button combat system similar to Devil May Cry, so the only way of interrupting combos is with launchers, homing attacks, and dashes.  

Blending between attacks is crucial, but blending too much can take away from the impact of the animation. This is a stylistic choice where I decided to have subtle blending between attacks. The reason I chose this way is to show agency in the player’s input. You press an attack you expect an attack to come out. ENENRA is not a slow-paced fighting game, so there are no massive anticipation moments in the animation instead, the combat is very quick, with quick reactions and movement. Further impact is added to executions where anticipation frames make sense.  

A good tip to keep in mind is when making combos and blending between the attacks, have the animations ‘make sense’, for example, if your character is swinging from left to right, the next attack would make sense to swing his weapon from right to left. If the animation leaves your character in the air, the next animation should not start from a grounded position, Unless the animation is trimmed and adjusted.  

I would also recommend adjusting the animations through keyframing to match the style of game you are making. This is done fairly simply on Unreal Engine by adjusting the bones of the animation itself and ‘keying’ the changes.

When I was first setting up my combat system, I tried adding everything I could possibly add. I have now created a system that allows me to simply slot in an animation into a combo node and assign the input and conditions for when this combo can be performed, for example, is the player in the air? Is the player dashing? And so on. This started off around a year ago and is still gaining improvements but feels much quicker than setting up individual attacks into individual montages and incrementing them with an integer. In this example, it now takes me around 30 minutes to set up a full combo as all notifiers and timings (metrics) have been standardised on my project.  

Future Plans

I am now working on building levels and cinematics. Developing this game as a solo developer is a pretty difficult task, I am hoping to have this game released by mid-2023. I am now working with multiple voice actors, artists, modellers, and composers to really push ENENRA further.  

Zahid Ali Jeelani, Game Developer

Interview conducted by Arti Burton

This content is brought to you by 80 Level in collaboration with Unreal Engine. We strive to highlight the best stories in the gamedev and art industries. You can read more Unreal Engine interviews with developers here.

Join discussion

Comments 0

    You might also like

    We need your consent

    We use cookies on this website to make your browsing experience better. By using the site you agree to our use of cookies.Learn more