Kid Fury vs. the Dodgeballians is a top-down action game where you ward off an alien invasion. We were tasked to combine two different sports as a base for the game.
We chose to combine baseball with dodgeball making some fast paced action and bullet hell characteristics.
Role: Programmer, IT
Span: 4 Weeks in Feb 2020
Team Size: 12 (3 Programmers)
Engine: Unreal Engine 4
I designed and implemented the main mechanic of the game. Our initial plan was that the swing would be a small window sweet spot to return incoming projectiles within a set radius.
This did not feel nice or intuitive at all which led me to rethinking the idea.
I went back to the drawing board and thought more on what would feel nice to the player. I realized we could make something like Overwatch’s Reinhardt swing. The key point I wanted to transfer over from that swing as the sweeping hitbox and the freeze frames when striking an object. The feeling when hitting multiple objects in one swing then turns into something really satisfying.
Here is an example of how it works within the game
With all VFX, sounds and feedback we got the great feel of hitting many projectiles we wanted.
I worked together with the other programmers and game designers to implement the enemy behaviour. I set up the basic functionality in a behaviour tree. I made blueprints with tasks, services and decorators that designers could use to further define the enemies.
In this example the enemy follows a set patrol path.
The flow of actions is:
Stop all movement.
Find a walkable spot from the patrol path.
Rotate the enemy, special with legs (read more in animations section).
Move to the walkable spot.
Increment path index variable.
And with set interval, fire projectile at the player!
I worked with implementing the 3D artists' animations. For starters it was simple, a character with run / walk, swing and death animations. Good start for me as I had never worked with animations in any engine or program before.
Here is the animation blueprint for the character
I had to blend lower body with upper body to make the swing animation play smoothly with the rest of the character. I solved this by blending poses with a bool as selection when to blend in the upper body over the Idle / Run pose
I set all variables from events within the animation blueprint. The events got called from the character's blueprint. These set up the blending of poses and the animation state machine.
And this is how the state machine turned out for the upper body
Started out simple yeah, but when I got to implementing the enemies was when the real challenge started. Because we wanted the enemy head to behave like a turret and the legs to rotate in the direction of travel I had to improvise a lot.
Since the animations were originally made as one walk clip and one attack clip, they did not blend well. And since my expertise in the area was mild at best I talked with the artist and explained the problems that arose when blending.
With this in mind he could adjust the animations which made the blending easier for me.
One thing that we decided was that the legs should have a fixed attachment point to the head whilst walking.
The head would only rotate around the up axis. This let me control the head manually from code to face the player when needed and separated the movement from the legs to the head.
Here is how the leg animation looks with the fixed attachment points
In the enemy movement clip from earlier we can see all the animations playing together. Not perfect but it worked for us.
This was my first group project in Unreal and my first cross disciplinary project. With that in mind this project beat my expectations by a long shot.
Overall, it was very easy communicating and collaborating with artists, designers and of course the other programmers. There were some disagreements here and there, but we managed to straighten those within the group.
On the jury day we received a lot of praise from both the professionals and our teachers. They pushed us to sign up for The Rookies where we got far but not all the way through.
Credits to Team 7:
Fredrik Bohlin, Patrik Hälleby, Bobban Johnson, Karl Johansson, Joakim Lembke, David Liljefors, Sofia Liljefors, Sean Meegan, Daniel Velu, Erik Petterson, Kiia Raikunen, Knut Svanfeldt