I like to make the game fps slow down when you're hitting with a strong attack like when you do the last attack of your combo, makes you feel like you're performing a strong attack on the enemy.
I've been watching your shorts lately and I gotta say this is some of the BEST game dev content on youtube - simple, short and easy to digest - as it should be!! I can't express enough how much I appreciate these!!
Another way to do this is using a method track in your animation player, and setting a boolean value through there to "enable" the follow-up. Allows for a lot of precision and doesn't bloat the scene tree as much in my opinion.
You could also use a Finite State machine, and have startup, active, recovery frames built in to control the attack, and a cancel window start and end to control cancelling. Then you can make any number of branching paths and all you have to do is tune the numbers.
I think the cleanest way to this is with states. Each attack is a state and speicific attacks can transition into other ones. You can use the animation end event to signal the transitions. No timers needed, more efficient.
Did this exact thing when I was working on a group project (3rd-person monster fighter battle royale) and it worked pretty well! It did get pretty messy (accounting for the switching to the second attack animation and then going to the third, or setting back to the first if the combo was over), but that’s mainly cause I had way worse naming conventions (like they were so, so unnecessarily long and detailed). That and there were various monsters with different timings, so it got a bit messy organizing stuff. Though after fine-tuning and consolidating a lot of code, it was pretty clean and super effective. Oh yeah, awesome video btw!
A trick I've implemented in my latest project is to make functions that I activate in the animation player; there's a function who add one to a combo number who influences the next attack who will come (usually, the function gets activated after the impact frames of the attack) then a function at the end of the attack animation itself mainly there for going back to neutral if you don't click in the delay. Compared to the timers and bulean that I used in previous projects, it leads to WAY more consitent combos.
I definitely need to watch more of your videos! I want to make an RPG eventually and this is an interesting and engaging way to start on that path so thank you! You’ve earned my sub 😁
I really like these simple explanations they are really cool
Side bar the pixel art is so beautiful
For a more complex combo system with multiple kinds of attacks, combine input buffering and a Timed Automaton :)
This is really easy ,helpful and straight to the point. keep making videos like these i like them alot
One cool example of this is one of the basic sword combos in the DMC 2013. If you just mash the light attack button repeatedly, you get a combo. But, if you delay the transition from the second attack to the third by a little bit, you get a different combo
I wanted to say thank you so much for making these 🙏 They've been great help and honestly I enjoy learning more about game dev using examples from izadoras edge
this will work as long as performance stays good but to achieve maximum consistency you should look at input buffering. if i hit attack just before the first strike ends it should remember that and queue up the second attack to be do immediately after . you dont want it to count for the entire first attack though or some mashers might get inconsistent results when they try to only do a single attack or partial combo
This game has changed so much
Wishlisted Isadora’s Edge yesterday, I have high hopes for this! Cant wait to see all the little details I wouldn’t notice without these videos!
In Godot, you could get around using timers entirely by using a function call track in the animation player. You would set up a function like "enable_combo_attack()", add logic that would enable detection of the attack input for combos, then call that function in each attack animation through a function call track by calling your previously created function. That way, you can control down to the frame of the animation when you can cancel, and if you get hit in the middle of your attack you don't have to worry about stopping timers from running in the background.
To expand on combo timers, I've played games that have multiple combo timers attached to attack sets. Most fighting games have this aspect in them. Say a light combo has 5 attacks in it that are hit in quick succession. Well you could for example put a slightly longer combo timer after the third attack that then chains into a seperate multi-hit combo. Doing this outside of fighting games is usually done in move upgrades, such as DMC or God of War.
@kurtisblack9271