I Hate Jackie
A 3D third person shooter game developed in Unreal Engine 5 (UE5) in ten days. The player plays as Michelle, and have to survive through waves of zombie-Jackie attacks, until they eventually fall victim and perish to their eternal enemy.
You used to hate Jackie when she would come pester you day and night. Now that a mysterious disease turned her into an infinitely-multiplying zombie that craves for your brains more than she did when she was human... things couldn't be better! Hunt down all the zombie-Jackies and put an end to this fun... I mean madness!
My focus on this project was to learn, understand and utilise the different technical functionalities of Unreal Engine 5.
Aspects of the game that I worked on included game mechanics design, level design and technical design.
Read on to see my process.
ideation
The game was intended to be a roguelike game. As mentioned earlier, since my focus was to learn and familiarize myself with the engine, I also wanted to keep the project relatively simple.
I went on to list down a list of items that I thought would encompass the scope of the project, including level design, character design, and game logic. I also brainstormed a series of ideas and features that I would add to the game.
The game would eventually not include all the initially brainstormed ideas, in the name of keeping things simple (and working within my limited timeline). Nonetheless, the process was useful in generating ideas that would branch to other ideas as I continued the development of the game.
character set up
Keeping things simple, I decided to feature only two characters in my game: Michelle and Jackie. Michelle was the character that the player controls while Jackie is the enemy of the game.
I downloaded the character models and animations from Mixamo, and created custom animation blueprints in UE5 for both Michelle and Jackie.
Michelle's animations involved creating an aiming offset which blends her animations to look up or down depending on where the camera was aiming at, and a blend space which blends the animations of idle, walking, strafing left or right, and walking backwards together depending on movement speed and direction.
Meanwhile, Jackie's animation setup slightly differs, involving multiple attack animations and a similar application of blend spaces.
Jackie's animation blueprint also includes information on what happens when the attack animation plays, and how that leads to damaging Michelle if Jackie comes into contact with her.
I also added stagger animations to both characters, to trigger when hit by the other.
Blend spaces of Michelle and Jackie
Combat
With the animations set up, I moved on to adding the combat system.
On level start, Jackie will move towards the player character using the UE5 built-in function AI Move. Upon overlap with Michelle, Jackie will initiate an attack animation.
Each attack animation by Jackie will trigger a sphere trace by channel, which essentially traces a path in front of Jackie. If Michelle comes into that path, damage is taken.
One bug that the game has is that Jackies sometimes attack each other instead of Michelle, distorting the challenge of the game completely as Michelle can end up not taking any damage despite being inside a horde of Jackies.
At the moment, I have decided not to put in more time to fix the bug, although it may be something I look into the future if I were to continue development of this game, or develop another game with similar mechanics.
Level Design
I began the process by making some sketches or concept diagrams, to determine the circulation of the player. I knew that I wanted a central plaza type space in the middle of the level, for the player to orientate themselves to, and something directional to provide orientation. Roads were intentionally windy such that buildings would obstruct the player's view into the distance, forcing a shorter reaction time. I also created funnel points in the middle using bridges over a river to create strategic choking points or kill boxes.
The level was also designed to minimize dead ends, or dead spots where the player would never need to visit. Spawning points of Jackie are placed at nine different locations across the map, randomly spawning Jackie at one of the nine spawn points.
Environment Design
After the level design, I had to design an environment that compliments it. For this project, I used the FANTASTIC - Village Pack from the Unreal Marketplace.
The environment design could be broken down into six steps.
Creation and sculpting of landscape, use roads and terrain differences to plan the layout.
Adding the river.
Creating the boundaries of the level by placing walls.
Populate the village with buildings.
Add foliage, decoration, props, etc., to suggest livelihood.
Final touch ups and atmosphere, lighting changes.
wave mechanics
The game was intended to be a roguelike game, while I did not have the time to implement character upgrades to make the character stronger each round, I did introduce a wave logic, with incremental difficulty as time passes.
As the waves increases linearly, the number of Jackies spawned in a wave and the delay between each spawn follows a geometric sequence, increasing and decreasing respectively, with the spawn delay clamped at one second minimum.
Wave logic and corresponding Blueprint
user interface
Given that the game was to be simple, I kept the user interface straightforward, featuring only a main menu, about menu, death menu and heads up display with very simple functionality.
final thoughts
The total working days of this project was ten days, which honestly gave me a shock on how much can be done in such a short period. Granted that the mechanisms of the games are very simplistic in nature and the designs are basic, this really sparked many inspirations and ideas for future projects.
Needless to say, I learnt a lot through this project as well, specifically about UE5 and its functionalities. I look forward to working on the next project.
I am extremely thankful for all the content creators whose tutorials on YouTube I referred to. All video references are included in the devlog.
infinite side-scrolling runner
infinite side-scrolling runner