Vimjam 2 Game Jam

Project Details

  • Project Status: Complete
  • Engine: Unity
  • Languages: C#

From the 10th of September to the 20th, I decided to take part in the VimJam 2 game jam.

Considering my love for boss fights, this requirement would normally have been perfect. I however wanted to change the game up a bit and not go straight for the standard epic boss fight.


Design

I decided I wanted to develop a game where the player could “boss” around a bunch of enemies to do their bidding. This eventually evolved into a minigame of sorts, where the objective was to gain more points than your AI opponent by killing continuously spawning enemies within a limited amount of time. It was simple and sounded doable within my limited amount of time. A number of items would spawn throughout the minigame, either randomly or through enemies dropping them. These items could be picked up by either the player or AI (Whoever got to them first) and used.

This would include standard melee weapons, with some being more powerful than others.

Or unique items such as a horn that could control enemies, forcing them to attack your opponent.

Each minigame would only last a minute, where the player with the highest number of points would win. It was an incredibly simple game, though I would be lying is I said that I had accomplished everything I had wanted in the project. Due to only having 10 days and unfortunately starting a bit late, there was a serious time crunch, so I could not polish up the game as much as I would have liked.

In terms of design, there are a lot of things I would change if I went back to it. As the game is quite repetitive, it’s important to make the act of continuously killing enemies actually thrilling to do. Feedback is incredibly important to the feel of a game. It should feel good to kill enemies and encourage the player to continue killing (I realise how ominous that sounds). As of currently, the act of killing an enemy feels static and bland.

Screen shake, explosive visual effects, simple death sounds. There are a lot of simple features that could be added to massively improve the game feel. Some games even freeze on hitting an enemy to give a sense of power behind the hit which would be incredibly useful on the end of a combo along with increasing the knock back on the enemy, really emphasising the hit.

It’s important to ensure features such as visual effects are not too “explosive” though, as the player will be killing a lot of enemies over and over. The last thing they would want is a visual effect that maybe covers the screen on every death or is the exact same effect every time.

The game could also feel a lot better through simple polishing of the code. The game does feel quite clunky, and the collision works half of the time, which really can spoil the experience.


Programming

When it comes to programming, I put a large emphasis on flexibility and scalability, as I wanted each component to work independently of each other as much as possible.

The item system for example works through the use of an abstract Item class that contains logic relevant to all items found within the game from the melee weapon to the horn. This includes information such as who is holding the weapon, if it is picked up, and logic for picking up and using the item. This just acts as a basic parent for all items, with for example melee weapons having their own class that inherits from this Item class.

Weapons contain a number of properties such as their damage, range, as well as combo properties which allow the weapon to have multiple attacks in sequence.

This gives me the flexibility to create different types of melee weapons with the ease of changing a few values, with it being flexible enough to even use as a basic damage source (Outside of being used by a weapon). What I mean by that is this same component is even used by the enemies, as it contains the basic logic to deal damage that they need. Even though they don’t hold a weapon, to the game they are and that’s how they are able to deal damage to the player.

The biggest issue with Melee Weapons was the damage range, which was incredibly annoying at times due to how I implemented it. Essentially each weapon has a damage point with enemies within a radius around that point taking damage from the weapon when used. The radius amount however is incredibly precise and didn’t work well when enemies are right in your face as they would be outside that radius and miss. Next time I will likely use a box collision system or something similar, which I think would work out much better.

Another area to talk about is the AI for the opponent player. They were originally planned to be a player controlled opponent but as I was running out of time, I decided to develop an incredibly simple AI for them using a Finite State Machine.

The AI has 2 states for now. It will first look for a weapon within the scene, and then once acquired one, it will look for enemies to slay. All the item functionality for the opponent is the exact same as for the player.

Overall, I do believe I got quite a lot done in the limited time I had. Some issues lead to me having to start the game jam a week later, so I only had 3 days to develop the game completely. Maybe going for something that was even simpler would have been the best course.