Welcome to the blog about the development behind Iron Impact, a showcase piece I created for my portfolio to show off my game design, level design and character mechanics.
The concept idea behind this was to learn a more advanced version of character implantation than I previously learned, I previously learned how to set up a basic character animation blueprint and a complex and out-dated way to set up a character and enemy blueprint which was full of errors and cover ups.
For this project I decided to use the paragon character Crunch, the main reason for this is it has a full set up character rig and comes with all the animations I need to create an advanced character animation blueprint.
I started of simple and built up from there, I started with one state machines that played an idle animation, from here I then created a jog state. I started of by using a simple one directional blend space which went from walk to run and then I turned this into an advanced multidirectional blend space that incorporates running forwards, backwards and leans which I used as strafe movement. I then added additional states between the jog state to start and stop that character movement giving it a more blended start and stop.
After creating jog state, I created a basic turn in place system that uses the yaw direction and depending which way the character is moving on the yaw it places an turn in place animation for this direction. I then created another state machine for the jump locomotion to keep the ground locomotion state clean and used cache to capture the poses.
I used these cache poses to add a slot to player the montages for the combat system later on and then used these cache poses to blend them so when the character is attacking and moving it blends that slot cache pose with the cache locomotive pose to create a blended animation, thus removing the gliding effect when the player attacks, which was one of the many problems I encountered when I first learned character implantation.
For the attacks I starts of using six animation that would turn into the primary attack mode, I converted this into montages and added sound and particle effects. I felt the attacks felt a bit static, so I researched how to add curves into the montages and from this I was able to add a twist to the character primary attacks moves which only plays when the player is moving. I then added reset animation to the ground locomotive to reset after the animation and blend back into idle animation.
Finally, I created an aim offset blend space which uses the aim offset animations to create head movement for this character as it a melee based. Then created a basic IK system for the legs.
The primary attack is initialised from the character blueprint, it uses a simple system to check if it is already attacking and then uses an integer as a counter to see how many times the mouse has been click, it plays each animation and then resets, either when it reaches the last animation, or the player stops input. To create more advanced attack moves I researched input commands and how to create multikey attack combos. The concept behind input command it gives the user a buffer time to be able to input a command of keys which is matched plays the matching animation.
For this I used a plug-in that gives me the ability to create an input command a file blueprint that will look for the keys entered, and the time give. I placed these inputs into an array then use a condition to see if they have been matched and then use another array with the animation montages stored inside. When the input command is called and is matched it uses the array number it is placed in and calls the identical number from the montage array and calls a unique special attack.
To enhance the attacks, I then used the notifies to call hit sprites, sounds, particles, camera shakes and control vibrations. The character damage was also called from the notifies which enable and disable collision boxes on the character hands.
The NPC uses a simple behaviour tree it has three states on the tree which has it own individual decorator conditions. It starts of with a basic check to see if the NPC is dead or paused then goes into the next branch when the condition is met. In the next branch these scans for the players character via the pawn sensing and then checks if it’s a radius to see if it can move to the players character then it enters the attack state checking its in the correct distance to attack, if not moves closer to the target and launches the attack.
The attack logic is transferred to the NPC blueprint and where uses a similar set up of the character attack system. To make the NPC more challenging a random probability equation was added to give the NPC a one in three chance to dodge the attack.
I decided that I wanted a fully dynamic HUD system that is built into the player, enemy and world thus getting rid of the need of 2D graphics and making the user feel more immersed in the game. For the NPC I used a model created by Adrian M for the unreal market place that had a basic skeleton but had extra models that could be attached to the NPC to give the impression of armour. When the NPC gets low health the armour parts start to drop off.
The player was more challenging, I modelled a back plate that fitted onto the paragon crunch character and then created a material that used the texture coordinates, as the GPU renders each pixel in shader node, for this I want the material to run from pixel 0,0 to 0,1. To achieve this I added a mask on red channel. I then connected this to an IF node using constants to work out if it greater than 0 or less than 1 to select a part of the texture coordinate. I then used two 3vector nodes, one red and one green and lerp these to use the texture coordinates as an alpha.
Now when I change the value connected to the IF node it will display either red or green and the colour spectrum in between. To make this work when the player takes damage I converted into a parameter and then I could change the value of this in the players blueprint by dividing by the maximum and current health.
For the environment I wanted to have a type of arena that was closed off, but spectators could still watch, I got the basic shape idea from an ice hockey ring, a long oval shape. For the theme I wanted an illegal underground fighting to feel to the game, that was off limits to everyone and only certain type of people got an invite.
I decided to base in in a shipping yard and I felt this would add to the feel that it is secluded and hidden from the public and then went for a cyber punk feel as I’m using robots, I felt this theme would go hand in hand. I created the shipping containers using Maya, using the same model but editing the style for the background and spectator boxes. I then took this into substance painter and created four basic colours and added extra detailing, grim and logos to the containers.
For the rest of the props I used the soul pack, created by unreal engine. I decided to use this as this had cyber punk assets that I could use to add junk, shanty style viewing areas and the emissive advertising lights. For the floor I created a parallax material so that I can combine two textures together an create a puddle effect which I used to paint tools to add on the floor, I then combined this with a landscape and used this to create more depth and height to the floor. I then added rain and fog effects to the scene and edited the sky to turn into night time, then added lighting to my scene taking advantage of the volumetric lighting effect.
Below is a playthrough video of iron impact showing a player win and enemy win