Week 4 - Boss Battle Design


Hi everyone, Ricardo here

This week, each one of us developed a prototype to tackle some aspect of our game we wanted to explore. I was in charge of a "boss battle" prototype, implementing an example interaction, to get feedback on.

Boss battles are common in platformers and metroidvanias as a different challenge introduced to the player. They generally have different attacks, patterns, and timings, and it's up to the player to figure them out and exploit them to beat the challenge.

We want to have a mix of combat and movement, but focusing on the latter. We want bosses to test more movement skills than actual combat. For that, I wanted to have some type of flying boss, to encourage the player to gain high ground, therefore having to constantly move and jump around. Lastly, while making most of the attacks dodgeable, I wanted some form of attack the player couldn't dodge without using the environment in some way.

I pictured a "dragon" boss and sketched a diagram of what its movements would look like. Being a dragon, I wanted it to shoot fireballs, presenting a challenge akin to "bullet hell" games, and got further inspiration from some bosses from  Cuphead, specifically Wally Warbles:Cuphead: How To Beat Wally Warbles

Having the rough "AI" laid out, it was time for coding. In that regard, using the state machine pattern worked wonderfully for transforming the design ideas directly into boss actions. The remaining time was spent tweaking various things, be it player movement and jump height, boss attack timings, damage values, number of fireballs, and whatnot.


Here is the final fight in action:

Get A Child's Tale

Comments

Log in with itch.io to leave a comment.

I am curious about how you implemented the behavior state machine in Unity, can you share some info?

Is it a Unity package? Is it just handwritten code?

(+1)

I used a framework developed by Diogo Mendonça, which was done for the earlier DDJ course. It's available here on GitHub. The state machine has to be built entirely on code, but it's just a matter of "converting" a diagram into a chain of dependencies and connections.