It’s been almost a month since I wrote my last capstone related blog post and a lot has happened. I meant to update this a bit more frequently but I’ve been incredibly busy as of late. I’m gonna try to play catch up this week, but for now, I want to go into one of the most integral concepts in a fighting game – our combo system.
What’s a Combo?
Fighting games are pretty deep beasts, so I’ll try to keep it quick. In a fighting a combo occurs when one player performs a sequence of moves in such a rate that the enemy is in hit stun the whole time and unable to block, meaning guaranteed hits and damage. Our game already supported basic combos in the form of links. A link is where the hit stun applied by one move is longer than the recovery of that move and the startup of another.
It’s a lot easier to visualize isn’t?
In the above example, Ryu could start a combo as long as the next move he performs starts up in at most 6 frames. Links however are quite limiting in terms of game design. Many other fighting games have also incorporated cancels into their formula. A cancel is when a move is performed mid another move, thus ceasing any recovery frames and proceeding straight into a new move. In Street Fighter, many of Ryu’s moves can be cancelled into his signature hadouken for example. The big step for Lucha Megadrive was to add cancels.
Ideally, I wanted to extend my already existing tools to allow my designer to change what moves can cancel into what without ever having to modify a line of code. However, we plan to have a variety of fighters with different move-sets, so I wanted to keep the tool as vague and as modular as possible. The original implementation ended up being that the designer could input what general motions to listen for (for example, punch, kick, quarter circle punch, etc) and then to follow up by making a transition in the animation tree. At first this seemed feasible, however with the amount of cancels that were going into the games design our animation tree quickly become a spider web from hell. I was gonna post a picture but I’ll spare you all from it, but trust me – it was bad. Not to mention, becoming increasingly time consuming for the designer.
I quickly foresaw the cancel system I had implemented becoming a very unpleasant part of the development process. As a result, I went in and overhauled the majority of the system. The new system would be more precise and not very vague, but end up being much more readable and not involving any sort of animation transitions. All the designer has to do is select what move should cancel into what and, bam, the move is now cancellable.
It’s as easy as that. You want light punch to cancel into super? Done in a second.
The compromise I had to make however is that I had to make some hard coded cases specifically to the character at hand to hard switch the animation state whenever the prerequisites for cancelling are met. I usually try to avoid this, but the benefits are definitely worth it in this scenario, and hard coding the other cases as we add new character won’t take too much time at all.
So we actually had combos working for quite a while now, but this is my first step in playing catch up. As I write this, I’m actually preparing for the senior show that is happening later tonight, where my team will have the chance to present our game and market it to the faculty. If we pull this off, and then they like the game after demos tomorrow, we can continue on to senior production.
Personally I’m very nervous, not because I don’t believe in our game, much on the contrary actually, but it’s a situation that could end up either way. Lucha Megadrive is a huge passion project for me, and I would probably be a bit devastated if we got cut in this stage. Regardless, the team and I have made something super cool, and I look forward to talking about what happened in the past month in future blog posts.