Everything started from a tweet from Javits about “which CA kills better”, legitimate question due to GUTS scaling. I assumed it was an easy one at first, but it took me quite a while. So, I thought I should describe it thoroughly because it shows how I work out these questions and you should learn one or two interesting things.

Maybe you’re already lost with the terms I’m using so let’s back it up.

The question: is it gonna kill?

In some fighting games (e.g. Guilty Gears, Street Fighters), when you hit a low-life opponent, you will deal less damage. It makes the opponent harder to kill, this is usually called the GUTS scaling.

Other factors may contribute to scaling your damage: combo count, crumples, mode activation… but I will not go down that road here.

In SFV, the most powerful moves are the Critical Arts, they can deal up to 44% of damage alone. But when you are close to the kill, as noted earlier they won’t deal their full potential. The real question is: how much?

Each CA is generally composed of multiple hits, here are some examples:

Balrog (Boxer) deals one massive 330 points blow

Juri deals 4 times 60 points then a final hit at 90 points

Chun-Li deals first two kicks at 30 and 20 points, then 34 lightning leg hits of 5 points and finally a 110 points strike.

If you count everything, all those critical arts deals 330 points, but the way they are dealt is vastly different. Unfortunately, the Guts scaling is applied on each hit (contrary to what I thought initially), so if you strike plenty of little hits, each of them will deal less and less damage. Conversely, if you just strike once, Guts is applied once with hopefuly a nicer Guts scaling.

The problem we are trying to solve then is the following: what are the health limit for each CA? Consequently: what are the best CAs under low-life conditions?

Know your damage.

First, we need some data. I need to establish the list of all Critical Arts and the detail of each hit. As far as I know, this list doesn’t exist as of today. Even the madmen behind FAT didn’t list this.

We could go inside the game and collect the data. Yeah, we could. But you’re not on anyone’s blog here, if something can be automated, it will be! I used the game data files to trace all the hitboxes used on each move that is classified as Critical Arts. As you may know, I know those files really well.

Excerpt of the script output of the hitbox damage tracing for each CA

Friendly advice: don’t do this! A SFV move respects a script that is full of conditions and branches that may or may not be executed in-game (proximity conditions, hit conditions etc…). For instance, during the Chun-Li, if only the first hit whiffs, it will use a completely different hit pattern. So let’s narrow down the list: I will only look at full damage CA. If there are legitimate variations (e.g. with V-Trigger activated) I will obviously take them as well.

With some fiddling with my extraction script and some cross-checking with FAT, I’m able to provide the list of all CAs and all the hits.

Hit in the Guts.

Secondly, we need to know exactly how Guts scaling works. Fortunately, I did this research a while ago when looking at the damage scaling system for sfvsim. Here are the rules:

If life ≤ 15%, apply 75% scaling

If life ≤ 30%, apply 90% scaling

If life ≤ 50%, apply 95% scaling

Otherwise apply 100% scaling

Notice one thing: those rules are based on a percentage of the maximum hit-points that the opponent can have. For instance, Cammy has 900 maximum HP, if she has 150 HP left the scaling will be 90% while Ryu with his 1000 maximum HP, will be at 75% scaling for the same life left.

Side note: decimal values on the life bar

We are talking about 90% scaling of hits but sometimes those can be 5 points only as we have seen. Did you know that all the resources in SFV are actually decimal? They are built on top of a fixed point system which makes the computation of the damage reliable and stable. So when a scaling is applied no rounding is performed and we (almost) don’t lose some precious precision.

Note for curious computer scientists: it is based on two 16 bits integer, the first one is the integer value, then the second one represents the unsigned fractional part. As an example: (3, 6553) represents ~3.1 because 6553 is ~0.1 * 65536.

But what about F.A.N.G.?

I didn’t talk about it but he is a pain in the *rse, isn’t he? The peculiar aspect about FANG is that he poisons his adversaries. But, as we know, poison is not lethal, therefore the total amount of poison cannot be taken as a reference. That is why we have to decompose when the poison is applied first, for how long, and what is the damage after the last hit. Here’s how FANG CA works:

It launches the opponent in the air for 40 points. Poison is not active yet.

Then it hits with a ball of poison 6 times for 42 points. Poison is active right after the first ball.

Poison hits 0.1 point per frame for a total of 10 seconds

Each ball hit duration is 19 frames total

Guts scaling is not applied on the poison damage

Using those values, we can compute that the lethal damage of the poison is actually 292 + 19*5*0.1 = 301.5. Obviously, this will need extra care.

Now what?

Well, we live in the 21st century, we have access to machines capable of doing literally billions of operations each second, so let’s program! Assuming that I am able to replicate the exact damage computation of SFV, then I can try all values of the opponent life bar and see what happens for each CA. If you don’t know how to program but you have some spreadsheets skills, you can do it yourself.

Let’s plot the damage of the 3 CAs we have seen earlier: Boxer, Juri and Chun-Li. The vertical axis represents the damage and the horizontal axis represents the opponent health. I added a red line representing the kill zone, if the damage line goes behind this limit, the opponent is dead.