In my final year studying Game Development, part of the
curriculum was a group project. So, the summer before school
started, a couple of friends asked me if I wanted to form a
team with them. When we got together to brainstorm about the
idea, we decided to continue working on a game jam that a
couple of them did some time before that.
The game is about a chicken who is tired of being stuck in a
farm. She wants to escape and, using her mental link to her
ancestors, devolve back into a dinosaur. By solving puzzles,
parkouring and dodging or fighting enemies, the player can
escape the farm and win freedom for the chicken.
This project was the biggest project I had worked on up until
then. Working in a team of 5 people, proper communication was
required in order to bring this project to a success. The game
was made in Unreal Engine 5 and using Hacknplan and Perforce
for planning and version control.
I was one of two programmers one the team. At the start of the
project, when discussing who would be responsible for certain
areas of the game, it was decided that I would mainly focus on
AI and UI.
For the AI side of my work, there were a couple of NPCs in the
game. Each had its own behaviour, being either friendly or
enemy, wandering or patrolling. For these behaviours, I made
use of Unreal Engine’s build-in behaviour tree. This made
defining behaviour for all different NPCs very easy. Using
C++, I made custom nodes to be used in the behaviour tree.
Most of these nodes were made as general nodes, so they could
be used by multiple NPCs, even though their behaviour was
different.
Working on the game’s UI was a lot more fun than I thought it
would be. Having never made a UI for a bigger game, I didn’t
really know what to expect. Finding out the best ways to link
up all of the UI elements with actions that happened in-game
was challenging at times, but super fun. The in-game UI
consisted of a minimalistic static UI, showing only the bare
minimum, wanting to maximise the immersion of the game. This
was coupled by pop-ups which either taught the player how to
interact with the world or showed dialogue boxes when talking
to NPCs.
At the end of the level, we wanted a small boss fight. We
decided that the guard dog of the farm would make for a good
enemy. This dog would chase the player all the way to the end
of the level. The player had to use everything they learned
throughout the level to clear a path and escape. The dog had
to rubber-band after the player, never getting too far from
the player, but also not too fast that the player wouldn’t
have time to react. There were gaps in the road that the dog
had to jump over and a split of paths where the dog had to
take another path than the player.
I spend a big part of the development process to get this boss
fight to feel challenging but rewarding. After a bunch of
playtesting, with a lot of different people, we eventually got
the feedback that the chase was fun challenge.
Other than AI and UI, which were my main responsibilities, I
worked on some of the puzzles that were spread around the
level. These puzzles included loose planks, opening gates and
falling boulders.