"Bane of the Necromancer" is a hack & slash inspired boss battle created over the course of three weeks.
This project started as one of the assignments we received during our C# course - to create a basic 2D scrolling boss battle. Since I had spent much time learning scripting on my own prior to this course, I wanted to push myself further than what was required. With the approval of my teacher, I chose to create a boss battle inspired by "Diablo 3" and "The Binding of Isaac".
The player's main goal in this game is to simply survive the encounter and defeat the boss.
Before I started to design the boss battle, I wanted to have good idea over what assets I would have at my disposal.
Starting to create a game by visiting the Unity Asset Store is - based on previous experiences - usually not a great idea. However, since I did not want to sacrifice any time or money on finding/creating perfect assets for this small assignment, I decided that it was fine to adapt the design to the available assets.
After spending some time finding assets of similar art style in the asset store, I had a player character, an antagonist and a modular environment which I could work with. With those in mind, I was now ready to start designing a boss battle.
Designing the three phases
One of the first things I established within the design was the role of the angel statues. Involving the environment into the gameplay is always a great way to make an experience more immersive.
In this case, the statues functioned as strategic covers which the player could use to defend herself/himself from the enemies - especially the ranged ones.
The rest of the design is all about throwing a nice mixture of melee and ranged enemies at the player, to keep the encounter interesting. Every phase is meant to increase the difficulty, and the last phase functions as a final skill gate where the player gets to face off against all of the mechanics of the enemies at once.
Blending animations in Mecanim
As the player model I chose to work with did not come with animations that worked well for my purposes, I downloaded a free package of wizard animations from the Unity Asset Store. Those animations were animated for humanoid rigs, which meant I could retarget the animations to my player character.
I made use of Unity's "Avatar Masks" in order to have separate layers of animation for the upper and lower body. The lower body was animated based on WASD input and the direction of the mouse, while the upper body responded to the mouse input.
Especially the lower body was really challenging programming-wise, as I had to battle with a lot of advanced trigonometry in order to create an efficient and correct type of blending.
Blending lower and upper body animations based on WASD input, the in-game mouse position and mouse input.
Improving the visuals
The original arena was simply a flat brick room, which was created entirely for testing purposes. After having spent two and a half weeks creating the gameplay, I spent the last days improving the visual aspect of the boss fight. This consisted of propping the level, tweaking post process effects and making the lighting more interesting.
At first, I made some attempts at making the scene play out during daylight. This looked great, but caused some problems during the cutscenes since the player - from that angle - got to see the empty horizon right outside the borders of the gameplay area. Because of this, I chose to revamp the scene into having a darker environment, which in my opinion also worked out better with the graveyard theme.
I had lots of fun creating this boss battle and I learned many neat scripting tricks which I will probably have great use of in future projects. Blending animations on multiple layers, creating events bound to specific animation frames and scripting the Diablo-esque targeting system were the main challenges in this project, but also the things I learned the most from.
If I would have had more time, I would have liked to improve the player combat mechanics, as constantly shooting projectiles eventually got quite tiresome. Creating a complete level full of smaller enemies and checkpoints would also have been on my to-do list as it would have been a nice warm-up for the player and an opportunity to foreshadow the epic boss fight.
Given the time I had, I'm proud of how it turned out and look forward to scripting more events and gameplay experiences in the future.