Project 6, Year 2
Spite Legacy was our sixth group project developed in the second year at The Game Assembly. It's heavily inspired by the Diablo franchise. During the production of this game we were developing our own in-house engine called Cog3D, using DirectX11 as the graphics backend. I did some of the rendering, pipeline work and gameplay programming.
At the beginning of this project, we combined mine and Björn Franzéns engine. The parts that were mine were the
Level importer, including reading navmesh from an .obj file
String pulling, using simple stupid funneling algorithm
Although, most of the rendering was later re-written by William Arnback, since our earliest code were hastily implemented.
My biggest focus on this project has definitely been on the gameplay front.
Here's a summary of my implementations:
Player (state machine system)
Knockback effect on player and enemies
"Boomer" enemy explosion
Gameplay loop, level transitions, game states, portals, etc.
Below I'll go through some of the bigger implementations more in-depth.
The boss is based on Belial from Diablo 3, where you fight his upper-body for the entirety of the fight.
The boss is a 3-phase boss where you start off by fighting minions, surviving by either defeating them all or until a timer runs out. Once the first phase is done, the boss reveals itself and you can start attacking it. The boss slams, sweeps and screeches. There are enemies climbing on the walls onto the platform, and there are falling debris during the fight. The third phase is a berserk phase.
The boss will sweep the platform from either left to right, or right to left. The player can either run away or try dodge it by using their dash ability to jump through it.
The boss screeches, slowing the player and debris starts falling more and more frequently, which forces the player to keep moving.
The boss will attempt to slam the player. It has 3 places on the boss platform where it'll slam, and it always picks the one closest to where the player is.
Once the boss reaches a certain amount of health, it enters into a berserk mode, being the third phase. Its attacks start happening more frequently.
We wanted to design of the boss to be well synergized with the player's abilities, giving the player a chance to respond well to any of its attacks. We wanted to player to "keep moving", thus most attacks were aimed to hit the player, forcing them to not just stand still and hit the boss.
While fighting the boss, there's a lot of debris flying around the entire platform, some randomly falling onto the platform, and some being aimed at the player. There's enemies climbing onto the platform during the encounter as well. These enemies are mostly there as a source of health globes for the player.
After defeating the boss, you've completed the game, and is left with the final cinematic.
The main inspiration for our player is the monk class from Diablo 3. We designed the player to have a lot of control over the battlefield, allowing them to dash on low cooldown, dragging enemies together with a vacuum-like attack, and knocking them away with a blastwave.
The player is built using a state machine. The reason for this is to split up the logic of the player into smaller parts, making it easier to manage and maintain. I implemented the design for all abilities using Diablo 3 as full reference, splitting the abilities up into different states that the player can "enter" as they're using their abilities.
The end result made for a very manageable and iterative codebase.
The monk from Diablo 3 has a signature dash move on a very short cooldown. We wanted to have that as well for our monk. The core usability for this ability was mobility, but we could design levels around it as well.
The player summons a wind, dragging all enemies and resource globes within it towards the player.
3 Step Combo
The basic attack is a 3 step combo that jabs, kicks and sweeps, gaining a secondary resource on hits which allows for heavier attacks.
The player lights up the area around it, bursting enemies within it into flames, quickly dealing damage to them.
The player becomes immunes to all damage, quickly healing to full health. After a short time, the player blasts everything outwards, sending enemies away and dealing massive damage to them.
This is the player's "spender" ability. The player slams their staff into the ground, summoning a chasm of stones, dealing damage to anything in its path.
At the final level, at the end, there is a scripted event that triggers phase 1 of the boss where you fight swarms of enemies. The enemies would land on the navmesh near the player regardless of where they were on the map. Defeating all enemies or surviving for an amount of time would eventually trigger the boss fight.
We had an enemy that'd run towards you and explode, causing high damage. It'd telegraph an area of effect using particles, and damage the player and all enemies caught within it. If there were more than one boomer enemy, it had a chance to cause a chain reaction, blowing everything up. I did the logic and VFX implementation of that.
Critters & Secret level
During the final weeks of the project we were in a good place. We decided to add some critters to the game that the player could step on, very similar to how you're able to step on small insects/rodents in the old Diablo games. I implemented a very simple AI for a rat critter that can be squished if the player steps on it, scaring all surrounding rats. It was a pretty fun feature that we decided to build more on.
Since so many of our team members were originally members from the game Overrated Delivery Service, we wanted to highlight that in a secret level. The way you could trigger the secret level is by stepping on a few rats in the player hub.
I implemented the main menu, which includes the level select screen, settings, credits and the transition into the game.
Team: Cogstorm Entertainment
Music & SFX
Joakim Wimer Oxborg