Budokai Reader Tool
How to use it, with examples
Author: NIM (Budokai online discord server)
I. Content of the folder
After downloading the Budokai_reader.zip and extracting it, you get a Budokai_reader folder with a
Readme.txt, this tutorial, and a “files” folder. Inside this folder you will find an exe called
“budokai_reader_window.exe”, that’s the program you have to use.
I advise you to create a shortcut of this exe and put it next to the files folder, to make it easier to
start the program the next time (no need to go into the files folder and find the exe again).
When starting the program, a new “Temp” folder will be created inside the “files” folder. You don’t
have to do anything in particular with this folder, the tool will automatically create and delete files
there. In principle, this Temp folder should be empty whenever the tool is fully closed. If it’s not the
case, please report it to me, and don’t hesitate to clean this folder manually.
The “Animation_tool” folder contains the animation displayer tool made by my brother (many thanks
to him!), again there’s not much for you to do there. The program will automatically create and
delete an “Animation” folder inside, in principle this folder should be empty (or even absent) when
the tool is closed. Again, don’t hesitate to report any bug in that regard.
II. Overview of the program
I’ll first describe each section of the program, and I’ll go in to examples later.
A. Game/Character/Attack selection
The “Choose an ISO” button is where you’ll start, click there and select the game ISO that you want
to analyze. This tool is a reader and therefore will never edit your ISO. That being said, don’t hesitate
to make a copy of your ISO if you want to be extra cautious.
Depending on the game, the framerate will be 60 fps, 50 fps, or both (for example, in the B4 mod,
one can choose the framerate when the game boots up, by pressing all shoulder buttons at the same
time at the language select screen).
After having chosen a game, you can choose a character in the list. This in turn will update the
“Choose a form” list and give you access to the “Choose an attack” entry field. As the “?” button
there tells us:
After typing your input, you can press “Submit” and see what strings were found. By switching
between “grounded” and “airborne” you get access to the moveset when your character is on the
ground or when he is in the air.
B. Global settings for all frame data display
Frame data usually indicates the “chronology” of a move, i.e. at which time exactly which property
occurs. For example, when people say that a jab has a 7f speed, they mean that the jab will land on
the opponent at frame 7. Which raises the question “what is frame 0?”
By putting Time origin at the start of the animation, frame 0 is when the animation of the move
starts, in other words when the game starts processing your input. Usually it will occur a few frames
after you actually press your button, because of input delay.
But if you put Time origin at the previous hit, then frame 0 is when the previous hit in your string
landed on the opponent. If your attack is a starter then the setting has no effect. Else it will shift all
the frame data by a constant amount, which is the delay between “previous hit lands” and
“animation starts”.
The second setting is about black screen frames, which occur during special moves. If you say Yes to
Include black screen frames, then all the frame data will take into account black screen frames. So if
your attack has black screen frames between frame 10 and frame 23, then hits at frame 30, the tool
will tell you that it hits at frame 30. If you say No then black screen frames will be excluded from the
computations. With the previous example, the tool would tell you that the attack hits at frame 17 (30
minus 13 black screen frames excluded).
C. String properties display
This section is a sort of summary of the string you’re interested in. It gives you the basic properties of
the string, using a specific nomenclature explained by the “?” button:
It also tells you the total damage of the string and its ki cost if there is one.
D. Chain properties display
This section is only useful for attacks that are not starters.
It will tell you the timing at which you can chain your attack with respect to the previous one. This
timing is given by two numbers:
- “starts at earliest at frame ...”: this corresponds to the situation where you press your button
as early as possible (buffered input)
- “starts at latest at frame ...”: conversely, this corresponds to the situation where you delay
your button press on purpose to throw off your opponent’s timing
If these two numbers are very different from each other, it means that you have a large window to
chain your attack, giving you the opportunity to introduce variations in your timing.
In the same vein as the discussion made in B., this timing only makes sense with respect to a time
origin, which must be specified. Here the tool gives you two informations: using the start of the
previous attack animation as the origin (not super useful but why not), and using the last hit of the
previous attack as the origin. This second information is useful to know how much of a gap there is
inside your string, but more on that later.
(Note that the “constant shift: delay between “previous hit lands” and “animation starts””
mentioned in B. is explicitly written here)
E. Chronology display
This section simply tells you everything that happens during your attack, with the timing of each
event. The frame data here is directly affected by the settings discussed in B.
Whenever the tool displays a window (for example: Active hitbox between frames 11-14), the first
value is the frame at which the property starts, the second value is the frame at which it ends. In this
example, the hitbox is no longer active at frame 14.
In this section, the “Armor”, “Charge”, and “Tracking” are probably the most interesting
informations.
You can also visualize the animation with the “display animation” button. Again, the “?” button gives
us some informations about how to use the tool.
Note, as it is said here, that the frame display inside the tool will be affected by your settings in
section B.
F. Hit-by-hit properties
This section will have as many tabs as hits performed by your attack (most attack deal a single hit but
many of them deal multiple hits, like Goku’s KKKK that deals two hits).
For each hit, you get to know the active frames, the range, the frame at which the maximum range is
attained (dubbed “Best frame”), and the damage. Here is what the “?” button tells us
Again, the frame data displayed here is affected by your settings in section B.
Let me emphasize again that the range is by no means 100% accurate (I won’t discuss here all the
reasons why the computation may be wrong, we can talk about it if you want).
The tool also tells you how the hit behaves in different situations:
- Front is hitting the opponent normally, from the front
- Charged or Counter is hitting the opponent as a counter-hit or while fully charging the attack
(if it’s chargeable of course)
- Juggle is hitting a juggled opponent or an opponent that will be juggled when hit (for
example what happens when you hit an opponent right after guardbreaking them)
- Back is hitting an opponent in the back
- Block is hitting an opponent that is guarding
If the effect is a stun or blockstun (or even a bounce or a knockdown), the tool also tells you the
duration of this stun. For blockstun, you’ll often see two numbers, like 23 (15). This means that the
blockstun animation will last 23 frames, but the opponent will actually regain control after 15 frames
(if he mashes his inputs, the blockstun animation will be interrupted).
If the effect is a juggle or a knockaway, then you’ll see other informations like juggle height,
knockaway distance, etc.
G. Frame advantage
The “?” button actually tells us everything we need to know
To say it differently and to summarize, these values indicate how much the option that you’re
choosing is safe or unsafe (a positive value means a safe option, a negative value means an unsafe
option).
If the value is negative, its absolute value is the time window available to the opponent to counter
you. If the value is positive, it tells you how much time/leniency/flexibility you have to perform your
option.
The “on hit”, “on block”, “on dodge”, “on teleport” refers to how the hit interacts with the opponent.
I’ll go into specific examples later in this document to properly explain how to use all these
informations.
III. Examples of informations obtained with the tool
A. Showing all strings of a character
After having selected your character, you can type ‘all’ in the “Choose an attack” entry, then submit,
and the tool will show you all attacks available to the character. For example, with Goku, you’ll see P,
then PP, then PPP, etc.
If you want to show only attacks starting with a specific starter, say >P, you can type >P- then submit
(it also works with a longer prefix, like >PP-, etc.).
If you really want to display only full strings and not each and every indivual hit of the strings, you
can also submit “full strings”, and it will show only the attacks that are at the very end of each string.
For example you’ll get PPPP and not P, PP, PPP.
Note that you can’t type something like ‘>P- full strings’, or rather it will ignore the >P- condition.
B. Finding out the strengths and weaknesses of the starters of a character
Let’s say we are studying a character in particular (in the following I’ll choose Goku from B4 in 60fps),
and we want to know how fast, how much range, how much tracking, armored frames, etc. for each
of his starters.
I choose the B4 ISO, Goku in base form, and I’ll focus on the grounded moveset in this example. To
get each starter of Goku, I can either type P, submit, then K, submit, then >P, submit, etc. or I can
simply type “all starters” and the tool will fetch all attacks from Goku that require a single input
(either standalone attacks or attacks that are at the beginning of a string). After that I can simply
select P, K, etc. which will make it easier to compare the data from the different starters together.
If I want to look at a particular starter (say, P) and the strings available from it, I can also type P- to
get all attacks starting with P.
Then I look at the “Chronology display” and the “Hit-by-hit properties” to figure out the properties
I’m interested in.
Here I show the example of P (very fast with 7f, short range and short tracking duration). Another
example with >P+K (much slower but early armor, good range), etc.
C. Hitboxes and hurtboxes, and how safe is an attack against counter-hit
The animation displayer allows you to visualize hitboxes and hurtboxes. When you perform an
attack, you character gains a hitbox, and your attack will land as soon as this hitbox intersects one of
the opponent’s hurtboxes. Conversely, if the opponent lands a hit on one of your hurtboxes, you’re
the one getting hit.
Therefore, knowing the position of your hitbox relatively to your hurtboxes may help you to
determine how safe your attack is against counter-hits.
Let’s take Trunks (in B4, 60fps) as an example and let’s examine again his starters, for example we
want to compare his P and >P starters. Despite the obvious difference in speed and ranges, the
animations reveal that the hitbox-hurtbox positioning is completely different between these two
attacks.
So I type P, then I click on “Display animation”, I see the animation, that’s cool, then
- I press Enter to go back to the start of the animation
- I press H to toggle on hurtboxes
- I press Space to enter the frame-by-frame mode
- I press the right arrow to go frame by frame until the active frame (which is frame 7
according to the tool)
- Finally, I move the camera around
By doing this for P then >P, I get the following images:
where one can see that the >P sword hitbox is a huge ball (lol) which is located very far in front of
Trunks, away from his hurtboxes. In contrast, the P hitbox is close to Trunks’ hurtboxes.
In simpler terms, Trunks’ >P allows him to hit without getting hit, as long as he uses it at max
range. Another interesting piece of information is that this >P attack actually deals two hits:
which makes it active for quite a long time. One can also see the two hitboxes one after the other
in the animation displayer tool.
D. Pressuring with cancels and anti-TC strings
As another example, let’s say we want to find good pressure strings, in other words we want short
strings with fast cancels and no gaps. Ideally these fast cancels should leave us safe on block, safe on
teleport (anti-TC), and not too unsafe on dodge.
Let’s go back to Goku in B4, 60 fps, for this example. Since I want to browse through his cancels, I’ll
just type “all cancels” or “chargeable attacks” or something like this
1. Finding fast cancels
Once I have found a cancel, there are two situations to consider: either the cancel happens before
the attack may hit the opponent, or the attack actually hits several times with a cancel point in the
middle of those hits. First case would be Goku’s PPPP, second case would be Goku’s KKKK.
To quickly check this information, one can simply look at the chronology display and read “Charges at
frame xx for hit n.yy”. If it’s for hit n.1 then it’s the first situation, if it’s for n.2 or higher, then it’s the
second situation.
See for example PPPP
Let’s keep this example for the moment. To know how fast this cancel is, we need to look at the
“Frame advantage” section. This will tell us the time difference between the opponent’s recovery
(meaning he’s able to press buttons again) and our chosen ‘event’, here the cancel.
We’re still on the PPPP page and we look at the ‘PPP then P cancel” line. Note that this same line can
also be found by looking at the page of PPP, here is how it looks:
In any case, this line tells us that our cancel will happen
- 21 frames before the opponent’s recovery if PPP hits him
- 4 frames before the opponent’s recovery if PPP lands on block
- 5 frames after the opponent’s recovery if PPP is dodged
- 6 frames before the opponent’s recovery if he teleports on PPP
all of this assuming a frame-perfect cancel.
From this we can conclude that this string offers a fairly good combo tool since Goku has >P and K
and <K starters with a speed around 10 frames.
It’s also a pretty good blockstring since the opponent will take a risk challenging after blocking. Let’s
detail this point a bit more to show how the numbers work. Let’s say the opponent blocks PPP,
anticipates the cancel and tries to challenge with his fastest starter, ie the 7f jab. Since he’s late by 4
frames compared to our (frame-perfect..) cancel, any move from us faster than 7+4 = 11f will land
before his. For example Goku’s <K is 9f (and deals a long stun, and can be followed by a P cancel, etc.)
Interesting remark: cancelling PPPP- into P or >P or <P will likely result in at least one additional
frame compared to cancelling into K because you would have to hold P, press G while P is held, let go
of P then press P again. Cancelling into K requires you to hold P, press G while P is held, then press K.
So if you really want to get close to frame-perfect cancelling, I think it’s better to follow up with a
different input than the one you’re cancelling (that’s the same logic as RBD inertia by the way).
Going back to PPP into P cancel, the -5f on dodge tells us that trying to keep up the pressure against
an opponent spamming dodge is risky. Let’s say the opponent dodges then mashes P (7f jab): by the
time our frame-perfect cancel occurs, we are already 5 frames late, so his jab will hit us in 2 frames.
Our only chance here would be to guard, dodge, or input an armored more like >P+K (armored from
frame 0) extremely fast. Other options include aura guard (but seems hard to do with this timing) or
the armored aura dash (G+D).
Since PPPP is not armored, one could wonder if releasing PPPP instead of cancelling it could be a
good counter against an opponent trying to dodge+jab us at the end of PPP. For this let’s go to the
PPP attack and look at the data for “PPP then P hit”:
We can see that it’s -12f on dodge, which means that the opponent will recover 12 frames before our
attack hits him. This is actually no surprise because, if you have good memory, PPPP can be cancelled
at frame 7 and lands at frame 14 (at earliest). So indeed PPPP would land 7 frames after the PPPP
cancel would occur, and 5 + 7 = 12. Again, we can see that it’s not a really reliable option because this
12f delay can be beaten with a fast jab. So Goku definitely can’t spam PPPP all day... too bad right? :p
Note that another piece of information can be found by looking at the active frame of PPPP while
enabling Time origin at previous hit, which then tells us that PPPP hits 18 frames after PPP lands. That
information usually isn’t really useful to players because they don’t know how to compare this
number to block/dodge/teleport animations. But if your opponent does a frame-perfect aura guard
(no recovery) against your PPP, then it tellsyou exactly how much time he has to counter PPPP.
I digressed a bit, let me conclude with the anti-TC potential of the PPPP cancel. Here we have a 5f
advantage against an opponent that teleports. This is enough to counter him with a fast starter like
<K (or grab) if he tries to challenge with a jab, but it’s not enough to prevent him from blocking or
dodging (since we have no starters faster than 5f). So it’s a good anti-TC bait string but it’s not
guaranteed either.
I’ll quickly show another example with the KKKK cancel, here is the data for it:
Here we can see that the advantage on hit is huge (because KKKK hit n.1 deals a long stun), the
advantage on block is enough to keep pressuring the opponent without letting him any way out, the
advantage on teleport is enough to catch the opponent with a fast starter (like <K, 9f) without giving
him any defensive option whatsoever (so don’t empty teleport on KKKK’s first hit), and the
advantage on dodge is 0, meaning that both players are able to press buttons again at the same time.
I won’t go into much more detail, my goal here is just to show how one can use this data and how to
interpret it (in my opinion).
2. Finding good pressure strings
Having a good cancel point is nice, but what about the string before the cancel occurs? If there’s a
huge gap during this string, the opponent may counter before you even have a chance to perform
your cancel.
To answer this kind of questions (how much gap there is during the string), you have several
approaches at your disposal:
- the simplest one is simply to look at the “string properties display” and check if there are
some gaps (indicated by ‘, “, _ depending on how easily the opponent can counter you)
- the longest one (but more detailed) is simply to look at the “frame advantage” section for
each hit of the string
Let’s show this quickly for two strings: PPPP and K<KP:
One can see that there is no countering window between P and PP, a small one between PP and PPP
and a medium one between PPP and PPPP (that’s the one we have already discussed, with the 12f
disadvantage on dodge).
So performing PPP then P cancel leaves one exposed to a dodge+jab counter between PP and PPP.
How severe is this gap? let’s look at the frame advantage data for PP, at the line “PP then P hit”:
On dodge there is a 11 frame disadvantage, which is not negligible! This means that PPP will land 11
frames after the opponent recovers from dodging PP, which leaves us a small but consistent window
to counter us.
What about K<KP? the tool shows no gap between K and <K. However, when we look at the frame
advantage data for K, at the line “K then <K hit”:
There’s a 13 frame disadvantage on dodge! But K<K is armored (as indicated by the bold font for “<k”
in the string display), therefore one cannot challenge it with a jab. To be precise, its armor starts 6
frames after the opponent recovers from dodging, so even with a perfect execution he can’t hit us
before the armor starts (since jabs are 7f).
E. Fully chargeable attacks mid-combo
Since fully charged hits are important for damage optimization, one may want to quickly find attacks
that may be fully charged. The tool can help with that (this feature is not perfect but at least it should
give you some fairly consistent results).
Let’s keep Goku as an example, I’ll then simply fetch all chargeable attacks by typing “chargeable
attack” or something like this, and browse through the attacks that it finds.
For each attack, I then look at the “Chronology display” section, especially the line about the charge.
See the difference between, say, PPPP and K<KP:
Here you go!
Typing “fully chargeable attacks” doesn’t work, so that’s the best method available for now.