The Holiday Rush is a local multiplayer action game designed & developed by myself over 48 hours for the 2019 Yogscast Christmas Game Jam, the theme was "Giving".
It is a fast paced, local cooperative, action game where 2-4 players must compete to deliver as many presents into the correct mailboxes as they can within the time limit. There is the potential to hinder other players by using presents as a projectile to temporarily stun them, adding to the competitive experience.
I decided to join this Game Jam at the last minute so as a solo developer my responsibilities included:
The idea to enter into the game jam was very spontaneous as I was only made aware of it not long before it began. I chose to use Unreal Engine 4 and asset packs already at my disposal to start brainstorming ideas. Due to the impromptu nature of the game jam I decided not to spend time attempting to gather a small team, instead focusing on a project that could be prototyped and completed myself. Over the first evening of the game jam I began to draft up ideas surrounding the theme of "Giving". Knowing that due to time constraints there were some features I had to disregard and not use, such as; AI and Server side multiplayer. With that in mind, it left me with the choices of a Single player experience or a Local co-op game, which led me to several possibilities:
After some deliberation I decided to try excluding combat as it didn't really match the theme, so I ultimately ended up choosing the package delivery idea as that was the simplest in its core mechanics, meaning I would have the most room to expand and be creative with it. I ended up submitting the project before the deadline with the core game loop functioning but with some minor bugs and prototype aesthetics in place, which have since been fixed and cleaned up since.
For the sake of showing you how I work, I'm going to use the core mechanic [Throwing a Present] as an example.
There are several aspects that make up this mechanic that I'm going to explain and show.
Below is a clip of the mechanic in action, showcasing the player throwing their equipped present before a new one appears. Due to initial time constraints for the jam I was unable to do animations for the player holding the present during idle and movement, aswell as the action of throwing it.
The Throwing Mechanic is the primary action players can use besides their movement. Hitting the [Space] key for PC or [Right Trigger] for Gamepads will turn the players equipped present into a projectile actor that launches into the air ahead of them. If the player has any more presents left, the next type is chosen at random, assigned to the player and the appropriate model is attached to the player. After a small delay the player will be allowed to throw another, the delay is in place to prevent technical issues with throwing presents too quickly.
Above is a screenshot of the event for this mechanic, using the Input Throw (Space/Right Trigger). Initially checking if the player has any input as this is disabled if they are stunned or if the game is over. If the player has no more presents, logically they are unable to throw any. To gain more they can pick up other players presents if they are dropped. There is a time limitation on when the player may use the ability, to prevent spamming and technical issues, this is reinforced by a function that wont allow you to use the ability again until the delay is over. If the player throws their last package, the equipped model is hidden from view. The projectile is spawned infront of the player and is launched forward, the player loses a package and their UI is updated. Once the package has been thrown I make a check to see if any player has a present left, if they don't the game ends because no-one is able to gain more score, but if there any the game continues and the players new equipped present is randomly assigned and the model changed, after a short delay the player is able to use the Throw ability game.
Below is a clip of the mechanic in action, showcasing the player throwing their equipped present and it landing nearby, reading to be picked up. Interactions with other players or the mailboxes are detailed below.
The Projectile is the effect of using the Throw Mechanic, changing the present from being attached to the player into a projectile object that launches into the land and calls functions once it collides with another object.
Above is a screenshot of the two events for this mechanic, determining what happens if the present hits a inanimate object like the floor or wall, or hits another player. Event hit triggers as you may expect, once the present hits another object theres a check to determine if the hit object is a player. If its not a player I need to ensure that the projectile is spawnable before checking to find a suitable location for the object to spawn, if another present is already in that location the present will be spawned in a random area around that target. Once a viable location has been found I call the Drop Package function that creates a present thats able to be picked up by players before destroying this projectile. The Overlap event controls interactions with another player. First checking if the present has overlapped with a player and then making sure that player isnt the same who threw the present. The stunned effect is called on the hit player before the project is destroyed.
Below is a clip of the mechanic in action, showcasing the player throwing their equipped present at a mailbox twice, once with the incorrect type so they recieve a penalty and once with the correct type and getting score. The mailbox type changes at random times, keeping the players on their toes.
The Mailbox is the object that interacts with the projectile presents, assigning score or penalty depending on if the types match.
Once the game starts it begins the function to change the mailboxes type at random intervals between two values. The parent actor of the mailbox sets up Event Interact Projectile thats called only when the mailbox has a collision with a certain actor, the present. Saving the player who threw the present for reference later and telling the projectile it cant be spawned on the ground, due to succesfully hitting a mailbox. It then determines if the present matches the current type of the mailbox, if it does the player is rewarded and if not the player is punished. This is visually represented by a status that pops up above the mailbox temporarily.
Below is a clip of the mechanic in action, showcasing the player throwing their equipped present at another player.
Giving players to temporarily stun eachother was a decision I made to add an extra competitive element and let the players have more choice. If a player decides to use a present to stun a player instead of give it to a mailbox, they dont get the score but they prevent that player from scoring too.
Above is a screenshot of the event used in this mechanic, causing some fx to appear around the targeted player and stopping them move for a pre-determined amount of time. If the player in question is already stunned, the event does not work. This is to prevent players spamming the stun event, causing other players frustration and wasting presents. The player is marked as stunned and their input is disabled, meaning they are unable to move or throw. The visual FX appears and the stunned player drops their equipped present next to them, a new one is assigned.