Recreating the Leviathan Axe Gameplay
I've always loved God of War as a series and of course I'm incredibly excited for Ragnarok. I thought it would be a cool project to create the Leviathan Axe from God of War 4 in Unreal to have some fun with the gameplay mechanic itself for a 3 week project.
The basic mechanics I wanted to replicate were the Throwing and Recall actions. I really wanted to focus on the base gameplay and had the goals of 1) make the controls feel good and 2) make the movement smooth and not distracting for the gameplay.
For throwing the axe- it's pretty straightforward. The camera is in a third person perspective and the forward of the camera is the aim. The player is able to throw the axe and it will continue to fly until it hits something it can't go through, like a wall or the floor.
It will damage any enemies it collides with on the way and stick at its final hit point.
I really wanted to focus on the speed and aim of the throw- I feel those are both extremely important to the player experience and they need to feel fair to the player. I say fair and not realistic to emphasize the importance of the feel of the throw- even if it isn't super accurate to real life. I would rather the player enjoy throwing the axe and have it sail through the air with magic rather than calculate the proper physics and have a rather disappointing mechanic.
The axe gets recalled similar to the way Thor recalls his hammer in the Avengers movies. When the player starts a recall action, the axe will fly back to their hands- also damaging any enemies it collides with along the way. The distance between the player and the axe does account for the time it takes for it to return, as well as how fast it moves by the end. I really wanted to tweak the timing and simplicity of the recall.
I feel this mechanic is great for battle strategy and getting that 'boomerang' effect when in combat, but I also still want it to be entertaining and neat for players who don't necessarily utilize that. I would love to expand on the current recall and add the ability to curve around obstacles and have more interesting navigation patterns, but that won't be in this project timeline.
Most of the project was not necessarily spent on the actual function of the throw/recall, but mostly on tweaking the feel of the mechanics and the flow between them. The implementation ended up being a very condensed and simple blueprint- most of the trial and error was on what strategy of movement would fit best.
I initially started with trying to have the axe simulate physics the entire time, and quickly changed to actively turning on/off the physics simulation between the throws and recalls. This allowed me to better create a magical look for the axe recall and a satisfying effect for the throw. I really wanted the throw to feel like it had power and sailed through the air.
After creating the throw/recall functionality, I decided to add some flare to the recall and added an easy spin to the axe movement, as well as an axe mesh from the Fantasy Weapon pack from Prop Garden LLC in the marketplace. I also added a small niagara particle effect for that magical effect, but that part is just for fun. I could not find a throw animation to quickly throw in, but that can be a future goal as well.
These are the resulting Blueprints in the end- overall the functions ended up clean and simple:
These are the basic throwing functions on the Axe and the Player, respectively:
The player's job is really just to let go of the axe and then tell the axe to 'throw itself' so that physics communication between the two is simplified.
The axe's job is to simulate physics again and then use an Apply Impulse node to create the movement. This created a nice throwing effect rather than a propulsion effect like a rocket.
The Recall functions:
This function mainly relied on the player. The axe's only job is to stop the physics simulation while the player actually attaches the axe and changes its location. The player blueprint always has the location of the axe.
And the functions on the Axe for the movement and the collision with the ending point:
Overall, this project was great for trying to keep things simple in Unreal. I wanted to keep the axe and the player as connected as possible because they need to harmonize and always be communicating with each other. It was also a nice project to start off with and learn scoping limits- for example I really wanted to put time into the polish and feeling of the axe and the actual mechanics rather than trying to panic and create an enemy to use as a target. I would love to do that in the future, but I feel my main goal for these 3 weeks was to really make the throw and recall feel the way I was hoping.
In the future, I would love to even simply find a throwing animation to add to polish it. It would also be great to add an aiming effect, allowing the player to switch between a more mobile stance and an obvious throwing one.