A Guide to Frame Data
By OmegaRyuji
Introduction: What am I getting into?
If you have been looking for information on fighting games in the past decade, chances are you have at least come across some mention of “frame data.” However, what that actually means and how to properly use it is something that players are usually left to figure out on their own. Hopefully, this mini-guide can help you see that working with some numbers can put you on the road to a whole new way of developing and refining your play.
Basics of Frame Data: The only frames I know about are for hanging up pictures
A “frame” is a single still image which makes up part of an animation. As you might already know, what you see when you play KOF is actually a series of still images drawn in rapid succession to create the illusion of fluid movement (or not-so-fluid, at times).
In a nutshell, frame data is a way of representing how long animations take. Any non-projectile attack’s animation can be broken into three general phases: startup (everything that happens before the attack can actually hit), active (the time when it is possible to do damage {the time the move connects, the damage might happened like command throws}), and recovery (all of the time after the attack can no longer deal damage before the character is able to do something else). Projectile attacks are a bit of a special case, since the active part of the animation is (usually) completely separate from the character’s animation, so the character only actually has startup and recovery animations. Similarly, non-attacking animations, such as jumping or rolling, also go through startup and recovery animations. What frame data tells you is how long each of those animations is based on how many frames each of those animations requires.
Now, you might be thinking, “That’s all well and good, but why not measure the animations in terms of how long they actually take, instead of using some esoteric concept that’ll end up confusing a lot of people?” The problem with that approach is that animations are not shown at the same speed universally. For instance, it’s not uncommon for PS2 home ports of games to run slightly faster than the arcade versions. Similarly, the time it takes to show 30 frames in one game isn’t necessarily the same as it will be in another, and there is also the issue of occasional slowdown while playing the game (particularly when there is a lot of stuff happening on the screen). However, no matter how much real time it takes to show them, the game will always be animated one frame at a time, which is why that can serve as a universal measure of time.
A word of warning: there are differing conventions in exactly how to count startup frames. Some people count only the frames before any active frames, while others also include the first active frame (the second method makes things slightly easier when frame advantage and static difference come into consideration a little later). All examples used here will NOT include the first active frame as part of the startup time, but it is something to keep in mind in case your calculations keep ending up off by 1 frame.
How to Read Frame Data: 2 minus 3 equals negative fun!
When you look at a frame data resource, such as this (frame data for Blue Mary in KOF2002):
http://www28.atwiki.jp/kof2002/pages/189.html#id_332e565a
You usually see a bunch of attacks followed by a bunch of numbers. As mentioned above, these numbers represent various phases of the animation. For example, take a look at the information for Mary’s standing CD:
立ちC+D(15, 8, 20)
This means that, upon pressing CD, there are 15 frames where Mary is locked into an initial animation (startup), then 8 frames where the animation can hit the opponent (active), and lastly, 20 more frames where Mary is locked in another animation (recovery). Information for single hit attacks like this is usually very straightforward, as the 3 numbers shown will always follow the format of “startup, active, recovery.” A more complex example would be her f/b+B command move, which has 2 hits:
ダブルローリング(16, 3, 14, 3, 24)
In this case, there are 16 frames of startup, followed by 3 active frames for the first hit, then another 14 frames of animation that cannot cause damage, 3 more active frames for the second hit, and finishing with 24 frames of recovery. Paying attention to any gaps between sets of active frames will be more important later on when the topic of meaty attacks is covered, but even now, it can be useful to know that there is a 14 frame period where Mary is completely vulnerable between the hits of f+B. Attacks that hit multiple times should always be shown with an alternating series of active and intermediate frames. For attacks where there are no additional frames between sets of active frames, such as Mary’s cl.D, it’s typical for a zero to be shown between each hit:
D(11, 3, 0, 5, 19)
Moves which put the character into a special state (typically, airborne) or which have invincibility should have further breakdowns. For instance, Mary’s qcf+A:
スピンフォールA(4+23, 4, 1+16)
4+23 for startup means that she has 4 frames of startup on the ground, followed by 23 more frames of startup in the air. Essentially, there are 27 total startup frames, but after the first 4, Mary cannot be thrown (aside from air throws) and will also pass over attacks that always miss airborne opponents, such as Goro’s ground pound. Likewise, 1+16 for recovery means 1 recovery frame in the air and 16 more recovery frames on the ground. Similarly, for her dp+B:
バーチカルアローB(5[全身M], 4[胸から上M], 0, 14, 15+16)
Mary has 5 startup frames which are fully invincible, 4 active frames with some upper body invincibility for the first hit, 14 active frames with the second hit, 15 recovery frames in the air, and 16 more recovery frames on landing. The last thing that may be noted separately is pre-flash and post-flash startup of DMs. In the case of Mary’s A~A~f~B~C, for instance, this is combined with the elements from the previous two examples:
M・ダイナマイトスイング( {1 + 28[暗転] + 1, 19}[全身M], 19+21)
There is 1 startup frame that is fully invincible before the screen freezes, 28 superflash frames (this can be ignored since everything is frozen during this time for dramatic effect), 1 additional fully invincible startup frame after the freeze, 19 fully invincible active frames, 19 frames of recovery in the air, and 21 frames of recovery on the ground.
If this is your first time going through frame data, this might seem intimidating, but that last example is pretty much the limit of how complex things get. It does sometimes require an understanding of the character’s animations to make sense of things (like knowing which moves put the character into the air), but the most important thing is to pay attention to where the commas are, since that is what denoted changes in phase between startup, active (and intermediate), and recovery.
Note: It is not uncommon for frame data to also be presented in tables with columns for startup, active, and recovery frames. In this case, multihit attacks may have their components separated by commas (like shown here), or it may follow a slightly different convention (such as showing the active frames for Mary’s f/b+B as “3(14)3”). Hopefully, as more resources become available for KOF, they will have a legend explaining their format, but otherwise, it may require some thought or asking for help to understand things.
Making Use of Frame Data: Should I call in an accountant for these numbers?
So, now that you can understand how long your animations take and where the invincibility is, you’re ready to take on the world, right? Not so fast. Memorizing all of the numbers in the universe won’t help you if you don’t understand how to interpret them. This usually comes in three forms: judging safety if an attack is blocked, figuring out what will never combo, and developing frame traps.
Judging how safe something is when blocked relies on the idea of frame advantage. Whenever a defending character blocks something, they enter their own fixed animation known as blockstun, which also has its own frame data. When comparing this animation length with the remaining time for the attack, you will usually find that the numbers are not the same. For instance, a weak normal attack like cl.A causes 9 frame of blockstun in 2002, so this is what happens if someone blocks Mary’s cl.A on its first active frame:
Mary’s cl.A frame data: (2, 4, 5)
Frame |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
Defender |
X |
X |
X |
B |
B |
B |
B |
B |
B |
B |
B |
B |
X |
Attacker |
S |
S |
A |
A |
A |
A |
R |
R |
R |
R |
R |
X |
X |
Legend:
S = startup frame
A = active frame
R = recovery frame
B = blockstun frame
X = character is free to act
As you can see, Mary is able to act again one frame sooner than the opponent after having her cl.A blocked. In this case, she is completely safe, because she has recovered from the animation of her cl.A and is free to act again before the other character has recovered from his blockstun animation. Rather than doing this in a chart, this formula can be used:
“Blockstun animation frames” – (“Remaining active frames” + “Recovery frames”) = Attacker’s frame advantage (or disadvantage, if negative)
So, in this case: 9 – (3 + 5) = +1
On the other hand, suppose the opponent blocked the first active frame of Mary’s cr.B:
Mary’s cr.B frame data: (3, 5, 8)
9 – (4 + 8) = -3
In this case, Mary will still have 3 frames of recovery animation to go through after the opponent has recovered from blockstun, so if she does not cancel cr.B into something else, she may be vulnerable to being punished with something that has less than 3 frames of startup, such as Clark’s hcf+K command grab (0 startup), Kyo’s cl.C (2 frame startup), or another Mary’s A~A~f~B~C DM (also 2 frame startup).
However, things are not quite so clean and simple. Suppose Mary had knocked down Iori and timed a cr.B as he is standing up so that it was blocked on the last active frame (timing something to hit a rising opponent later in the animation than usual is called a “meaty attack”). Now, the situation becomes:
9 – (0 + 8) = +1
Thus, a meaty cr.B that hits on the last active frame is safe on block. However, things can get even better for Mary than that. Her cl.B also hits low and has the following frame data:
(3, 6, 4)
Last active frame blocked advantage: 9 – (0 + 4) = +5
If she does this as a meaty hitting on the last frame against Iori, not only can he not punish it on block, but his dp+C and qcf~hcb+P will both start so slowly (5 frame startup and 1+5 frame total startup, respectively) that she can recover in time to block them, and his command grab is slow enough (7[full invincible]+4 startup) that she can avoid that, too (in fact, she can deal with both with an option select input, but that is beyond the scope of this article)! Iori’s only real options are to take the hit and whatever damage follows or to block and deal with Mary’s continued advantage.
Keep in mind that, typically, when the frame advantage/disadvantage for attacks is presented, it is calculated based on the first active frame being blocked, which is known as “static difference.” While this is usually the case, exceptions do happen, like the above meaty cr.B example, so you should be wary of relying solely on static difference without considering if the attack is actually going to make contact on the active frame being considered. For instance, Mary’s dp+D is -34 if the first active frame of the second hit is blocked, but it may miss low crouching opponents, resulting in an effective -38 instead because the frame disadvantage should be based only the first hit making contact (not very significant in this case since both instances are highly punishable, of course).
Another example of static difference not applying is for moves with moving hitboxes. Typical examples of this are Terry’s qcb+P or Andy’s d/b~f+P. The frame data for Terry’s qcb+A:
(13, 10, 18)
Special moves in 2002 all cause 17 frames of blockstun, so this gives a static difference of 17 – (9 + 18) = -10. However, if you use the move at maximum range, the situation changes to 17 – (0 + 18) = -1. This is a similar idea to using meaty attacks on wakeup. In both cases, your objective is to have the attack blocked as late as possible in order to minimize the amount of remaining animation time the character has to go through while the opponent is in blockstun.
This concept, in turn, can tie into the second use of frame data mentioned: figuring out what moves will never combo. There are some characters in 2002 who are able to link from a light attack into cl.C or cl.D. For example, Iori can link from his cl.B into cl.C:
cl.B (5, 3, 5)
cl.C (2, 2+5, 14) (note: the active frames being presented as 2+5 has to do with canceling windows, which will be discussed next)
Light attacks in 2002 universally cause 11 frames of hitstun. Thus, if cl.B hits on the first active frame, Iori is left at 11 – (2 + 5) = +4. This is less than the time it takes for cl.C to hit (3 frames, 2 startup and 1 active), and testing in the game can show that the knockback on a point blank cl.B is small enough to still get cl.C afterwards instead of st.C, so the link is possible. On the other hand, cl.D:
(4, 6, 13)
This will never combo after a typical cl.B, since it hits on frame 5 and cl.B is only +4 on hit. However, as you might be able to figure out, a meaty cl.B can link into cl.D, since the advantage on hit will be +5 or +6, depending on which active frame was the one that hit.
How does this work in combos involving canceling normals into command moves into specials? This relies on understanding that (outside of some special cases) canceling of one move into another is done during the active frames, most typically off of the first active frame. Here is an example of why Mary is able to combo cl.C(2), f/b+A, qcf~hcb+A:
cl.C (3, 2, 0, 2+2, 23) (the “2+2” means the second hit has 4 active frames, of which only the first 2 can be canceled)
ハンマーアーチ(キャンセル版)(18, 4, 33)
M・スプラッシュローズA( {1 + 28[暗転] + 10}[全身M], 16[脛下M], 36)
So, cl.C can be canceled into f/b+A on the first 2 active frames of the second hit. Because cl.C causes 19 frames of hitstun and f/b+A hits on frame 19 (due to 18 startup), it may be canceled on either active frame in order to combo the f/b+A (for simplicity, let’s ignore knockback here for the moment). Afterwards, since the command move causes 19 frames of hitstun and the DM hits on frame 11, canceling any of the active frames will have a chance of comboing.
Why “have a chance of comboing” instead of “will definitely combo”? Because frame data does not show how knockback will affect how late into the active frames of the DM Mary will be when she actually reaches her opponent, and likewise for comboing from the cl.C(2) into f/b+A. This is why frame data only truly shows what moves will be too slow to ever combo. For example, judging just from frame data, it looks like O.Chris can combo into his qcb+C:
КАГАМИ О ХОФУРУ ХОНО(鏡を屠る炎)C(5+11, 4+4, 9+21)
The first active frame is at frame 17, and both strong normals and command moves cause 19 frames of hitstun. However, what is not immediately obvious is that the first active frame tends to miss crouching opponents, so doing a combo into this special requires the opponent to be standing. Similarly, O.Yashiro’s hcf+P should startup quickly enough to combo:
НИРАГУ ДАЙЧИ(淬ぐ大地)A(8[全身M], 31)
However, due to its short range, anything more than one light hit pushes the opponent out of reach.
The third major application of frame data is to develop frame traps. A frame trap is a sequence of moves where the blockstun for one expires shortly before the active frames for the next connect, so that if your opponent tries to do anything in between aside from blocking, rolling, or doing an invincible special/DM, you will score a counterhit. The simplest way of finding a frame trap is to look for moves with a static difference that is 1 or 2 frames less than the startup of something else. Take a look at O.Chris using cl.A,cl.C:
cl.A (4, 3, 5)
Static difference: 9 – (2 + 5) = +2
cl.C (3, 3+3, 29)
Since the cl.A leaves O.Chris at +2, his cl.C will begin 2 frames sooner than anything the opponent tries to do. This means that cl.C will make contact 2 frames into whatever the opponent tries (3 frames startup + 1 active – 2 frame disadvantage for defender = 2). Since the fastest moves in 2002 (not counting instant command grabs) only hit on frame 3, the cl.C will beat any non-invincible move.
Frame traps become even more flexible when meaty attacks are taken into consideration. Let’s revisit the example of Mary using a meaty cl.B:
(3, 6, 4)
Last active frame blocked advantage: 9 – (0 + 4) = +5
Mary has no moves with 6 frame startup, and while she does have two moves with 5 frame startup (st.B and cr.C), those are usually not the preferred combo starters. However, if we also consider that Mary’s dash has 3 frames of startup, that can be used as a time filler to make something else into a frame trap (a similar concept to Goro using dashes, whiffs, and/or rolls to time unblockable ground pounds in 98). Thus, we have a meaty frame trap for Mary as:
cl.B (3, 6, 4) gives +5 frame advantage on having the last active frame blocked
Dash (3 frame startup) still leaves Mary at +2
cl.C (3, 2, 0, 2+2, 23) works as a frame trap now
A final word with frame traps is that they can even be built for specific matchups by exploring the opponent’s frame data as well. Consider Yamazaki playing against Yashiro. Yashiro’s fastest move has 3 frames of startup, so there is one extra frame of flexibility on frame traps against him compared to what is needed for a universal frame trap in 2002. Thus, Yamazaki gains this option:
cl.A (3, 5, 5) has static difference of 9 – (4 + 5) = 0.
cl.C (2, 6, 22) is tied with the other fastest moves in 2002
Against Kyo, for instance, Yamazaki’s cl.C would have the risk of trading with Kyo’s cl.C. However, since Yashiro does not have an attack that starts so quickly, he is left with either having to block, spending meter for a guard cancel, or risking a reversal dp+C or qcb+K.
Limits of Frame Data: But my calculator said that the answer is “Error Low Bat”
This was touched on briefly a few times in the previous section. Whenever you are trying to make use of frame data, it is important to keep in mind that it only presents a partial picture. Frame data is great for understanding how long actions take, but it tells you nothing about spacing, how hitboxes move, knockback on contact, and so forth. Frame data will tell you, for instance, when something absolutely cannot be punished, but it will only hint at what may be capable of punishing something that has a slight disadvantage on block. Any conclusions you come to purely from frame data should always be tested in the actual game (preferably in training mode for obvious reasons) before you can consider them truly valid.
In other words, frame data will either tell you “this is 100% not possible” or “this may be possible.” Figuring out anything beyond that requires actually playing. Frame data is a useful tool, but it is not always enough by itself.
Using frame data for calculating frame advantage/disadvantage also assumes that the opponent does not use guard cancels to alter their blockstun. Thanks to this system in KOF, it is very rare for anything to be 100% faultless if the opponent has meter. However, frame advantage and frame trapping can be used to bait the opponent into using guard cancels, which will deplete their meter and potentially leave them open to punishment, and that’s when the theoretical mind games start to spiral out of control.
The bottom line is that frame data is a tool which can guide you in the right direction, but it is not the be-all-end-all of knowledge. In fact, everything that frame data tells you can be discovered from just playing the game enough. However, human error in execution adds a lot of variance to any knowledge gained that way, plus looking at frame data is a lot easier, faster, and more definitive than trying to find out by trial if you can squeeze anything in between parts of a frame trap, so we come to the typical saying from the proponents of using frame data:
Frame data can never tell you something that match experience will not, but it can lead you to the same conclusions much faster and more clearly.