CAP BSR Calculator Repository

GMars

It's ya boy GEEEEEEEEMARS
is a Site Content Manager Alumnusis a Battle Simulator Admin Alumnusis a Social Media Contributor Alumnusis a Senior Staff Member Alumnusis a Top Community Contributor Alumnusis a Top Metagame Resource Contributor Alumnusis a Top CAP Contributor Alumnusis a Top Contributor Alumnusis a Smogon Media Contributor Alumnus
Hi everyone, we've updated the CAP BSR to account for the legal Pokemon in Sword and Shield. Since CAP LC Pokemon are usable in CAP battles now on Pokemon Showdown, they've also been included in this version of the BSR calculator. Big thanks to Quanyails for help with this update and for writing a script to pull the stats for all the SwSh + CAP Pokemon, and thanks to Wulfanator72, LucarioOfLegends, and Jho for help in reviewing which formes should be included in this version.

SwSh BSR Calculator (Download)
Last Updated: April 10th, 2020

This thread will also serve to announce updates to the calculator as new main series DLCs are released and made available on Showdown.

Please let us know if you find any errors in the calculator, thank you!
 
As a math major and statistician. This is awesome.
Would love to work on this in the future.

For 27 stat limits, Ive got some experiments to do.
 
Doesn't this calculator have a bias towards mixed attackers? Both special sweepiness and physical sweepiness contribute to the rating, but generally you don't run mixed sets. I checked old posts for some insight on the rating formulae, but I wish to learn more.
 
hublo
The best way I'd summarize how BSR works with respect to mixed attackers is that a mixed attacker like Infernape isn't a better physical attacker relative to a purely physical attacker like Machmp merely because Infernape can also run special or mixed sets. In terms of their Physical Sweepiness component, the two mons are just evaluated based on Speed and Attack. Special Attack/the ability to go mixed just isn't factored into PS.

In terms of how the final BSR is calculated from PS, PT, SS, and ST, it's not literally just PS + PT + SS + ST, but it's not that far off from that. So, yes, being better at both Physical and Special sweeping will result in a higher BSR than being good at just Physical sweeping alone, even if the Pokemon will only ever run physically attacking sets.

This does mean that Beartic comes out ahead of Golurk in BSR in at least some part due to its higher SS stat, even though neither Golurk nor Beartic will ever be using special attacks. If I assign Beartic the same SS as Golurk, then the BSR gap between the two mons drops to 7 points from the actual 15. So about half of the BSR difference here comes from a special sweepiness rating that will never matter, while the other half comes from Beartic's greater bulk.

Species NameHPAtkDefSpASpDSpeSFBSTPTSTPSSSBSR
Beartic9513080708050190505131.29520136.48282126.6295483.75912250.48834
Golurk8912480558055211483125.57219130.48354127.0773372.08958235.66864

The fact that Beartic is rewarded like this for a SpA stat it will never use is perhaps not ideal. But the point of BSR is really just to look at stats in a vacuum and in that sense, Beartic really is a more viable special attacker than Golurk is, and the BSR reflects that.

IMO this doesn't mean that BSR is wrong. It really just comes down to the fact that BSR isn't the end-all be-all. It evaluates stats in a vacuum and you then have to look at them with added context of the Pokemon/metagame.

For example, Beartic is ostensibly bulkier than Golurk due to a higher HP base stat of 95 vs 89 and the PT and ST stats reflect that. Yet no one would ever use Beartic defensively in any metagame due to its Ice typing and the many weaknesses that come with that, including to Stealth Rock, as well as its lack of a support movepool that would make a defensive set worthwhile. Golurk on the other hand has a good defensive typing with 3 immunities, as well as Stealth Rock, which in some metagames has led to it being used as a bulky SR setter.
Similarly, if you look at the BSR, you'd say Dragapult is a better physical attacker than special attacker, but we know it usually isn't, and that's because of movepool.
 
I dug some more in the old threads by X-Act and needless to say I was fascinated by his posts. From what I understood:
  • Calc level 100 stats
  • Calc the % of pokemon you outspeed
  • Assuming each pokemon stat follows a normal distribution, re-scale the stats to have a mean of 100 and a standard deviation of 50
  • Plug the values into the sweepiness and tankiness formulae
  • Take the mean of the resulting values and re-scale to a mean of 200 and a standard deviation of 100.
I still have some questions though. Where does the +415 in the sweepiness formula come from? Why work with level 100 stats? Why wasn't there a follow up on the typing rate? And what happened to X-Act?
 
Where does the +415 in the sweepiness formula come from?
I didn't know this either, but I looked into it and found this explanation! That's actually really fascinating - I'm glad you asked!!

Why work with level 100 stats?
This is because BSRs are mainly used for Showdown (and specifically CAP), where a standard battle has all Pokémon at level 100 - the goal is for the results to be as practical and relevant as possible, so using something like raw base stats wouldn't really mean anything. Think about a sweeper with base 100 Attack and a sweeper with base 110 Attack - if you just used raw base stats, you'd think the second sweeper was 10% better than the first one, right? But their actual stats if they invest are 299 and 319 - so the second one only hits more like 6.7% harder. The rating system is designed to take that into account!
Of course, if you were using it for a different format, like VGC (level 50) or Little Cup (level 5), you would definitely want to change that!! But level 100 is what's relevant for CAP, so it's the standard for the formula.

Why wasn't there a follow up on the typing rate?
I can't really speak to why anyone else decided against this, but I think it's just a matter of scope. BSR is far from the only factor that tells us about a Pokémon's viability - honestly, I think the most important factor would to account for the base power of moves, followed by damage- or stat-boosting Abilities, because those consistently, directly affect damage output more than conditional type matchups - but I can see why it would be hard to take all of these things into account. Ultimately, BSR is only a guideline anyway - it's not meant to measure how strong a Pokémon is at all, just literally how good its stats alone appear to be.
Buuut aside from that, if we're using it for CAP (which I think is why it was created from the start? but if I'm wrong on that... it's definitely at least its main purpose now), typing will have been decided already by the time BSR is being considered - so it gets taken into account when people decide on the legal ranges during the Stats Discussion stage. Automating that would leave less room for discussion/discretion/case-by-case judgment, and it would also complicate the process more than ease it, because now the approval of the same BSR and bias values could mean something completely different for two different Pokémon and people basically need to relearn the process for every individual CAP.
With that said, I kind of support leaving that out of it, although I'm not sure if this was the rationale behind the original decision.

Aaand no idea on the last one, haha. Sorry :'D
 
X-Act retired some time in 2010. It happened around the time of some major changes in his work/life that made him feel he would no longer be able to actively contribute. People across the site definitely had to learn how to take on a lot of the things he was doing. He was very involved and the leading expert on many things beyond BSR.
 
I am submitting this for QC since the calculator needed an update to account for the additions of DLC1

WIP SwSh BSR Calculator DLC1 (Download)

For those that prefer google sheets. use this link (make sure to go to File > Make a copy)

Top 50 Usage sheet should be updated closer to the stats stage
 
Last edited:
After realizing people who edit or do experiments with the spreadsheet must keep guessing numbers to get the formulas to work, my OCD has been triggered and I had to fix the spreadsheet. This version should be more intuitive to use and maintain.

https://docs.google.com/spreadsheets/d/1zrWlUYz0OeeDeOAx5T5AylAegzu_y9Uu3-DVyQAAMvc

Changes made:
  • Standardization calculations are now automated
  • Cleaned up the spreadsheet formulas so Excel no longer complains about inconsistencies
  • Speed factor (SF) converted to percentile format (e.g. 88% SF means you outspeed 88% of all mons)
  • Color references now use a heatmap - red/orange/yellow/green rather than the colors of the rainbow
  • Maintaining & updating the sheet been made a lot easier - instructions are below
  1. Go to the BSR of All Pokemon sheet
  2. Scroll down and select the last Pokemon's row, or however many mons you want to add
  3. Right click -> Copy
  4. Right click again -> Insert Copied Cells
  5. Enter in the new Pokemon's name and base stats
Instr01.png
  1. Go to the BSR of Top 50 CAP Meta Pokemon sheet
  2. Replace the Pokemon names with those of the latest top 50
  3. The corresponding stats should update automatically. If #N/A errors pop up it means you entered a name not found in the BSR of All Pokemon sheet, and you need to update that list too (see instructions above)
  4. Update the footer banner with the new usage month
Instr02.png
The formulas have been tweaked so that when you add in new mons, you no longer need to update the selection ranges or the speed factor sheet etc.
 
If you're the type of person who likes coding instead of a spreadsheet (like me), you might enjoy having the BSR formulas in code!

I've created a Pokemon BSR library in JavaScript here. The algorithm has been verified to match the spreadsheet, so it can also be used to double-check that any changes made to the BSR algorithm didn't mess with the final values. This also contains all of the historical articles on the BSR formula I could find.

You don't need to download the library directly unless you know what you're doing. You can use Breezi on the CAP Discord server to run this code for you through commands!
 
Doesn't bsr weigh mixed offense too highly? Looking at Marshadow and Mew for example:

Marshadow: 90 hp, 125 attack, 80 defense, 90 special attack, 90 special defense, 125 speed
-bst: 600
-bsr: 388.4

Mew: 100 everything
-bst: 600
-bsr: 391.2

How would mew have a higher bsr? Isn't it almost clear Marshadow has a better stat distribution?
 
MagikaripIsOP I moved your question here. The answer is yes. BSR will assume all 6 stats are used so every spread will be treated as a mixed wall and mixed attacker that will sweep. Just like BST. That means mixed attacker spreads will have naturally higher BSRs and BSTs. We had this problem in the CAP 28 stats and ended up applying a mask to lessen the limit for mixed attackers. Another quick fix is being proposed to take on the issue better

As for the real solution, it's to consider only the attacking stat being used. For BST this will be HP+max(Atk,SpA)+Def+SpD+Spe.
For BSR it'll be max(PS,SS)+PT+ST.

Obviously that assumes we can go only physical or special in offense and not mixed, which is wrong. The formula should therefore be max(PS,SS,MS)+PT+ST where MS is the rating for mixed sweepiness. We don't have such a rating yet so it needs to be derived - there's a number of possible models for it and it's a matter of working out the 'best' one. Anyone interested having a go can feel free to get in touch with me :)
 
MagikaripIsOP I moved your question here. The answer is yes. BSR will assume all 6 stats are used so every spread will be treated as a mixed wall and mixed attacker that will sweep. Just like BST. That means mixed attacker spreads will have naturally higher BSRs and BSTs. We had this problem in the CAP 28 stats and ended up applying a mask to lessen the limit for mixed attackers. Another quick fix is being proposed to take on the issue better

As for the real solution, it's to consider only the attacking stat being used. For BST this will be HP+max(Atk,SpA)+Def+SpD+Spe.
For BSR it'll be max(PS,SS)+PT+ST.

Obviously that assumes we can go only physical or special in offense and not mixed, which is wrong. The formula should therefore be max(PS,SS,MS)+PT+ST where MS is the rating for mixed sweepiness. We don't have such a rating yet so it needs to be derived - there's a number of possible models for it and it's a matter of working out the 'best' one. Anyone interested having a go can feel free to get in touch with me :)
Wouldn’t it be better to go with max(ps,ss) for now since the vast majority of Pokémon only run one? Of course there are exceptions but far less than going with the current route.

also since I’m here again, I managed toget the spreadsheet sorting work for me. Any reason it doesnt have every Pokémon. Too consuming?

I don’t want to sound pushy or anything by the way, just genuine questions
 
Here's a revamp of the BSR calculator for CAP 29.

https://docs.google.com/spreadsheets/d/1PiNMVpXsPxxUhGgo4A495-ir6PaGM2Tid1id3gRYA_4

Changes
  • Upgraded to the new formulas discussed in this PR thread
  • Added a calculator for the Turns (T) value *
  • Modified the Speed Factor (SF) to account for speed ties
  • Added in the new CAPs and prevos as well as the new mons from Crown Tundra
  • Updated the top 50 based on the Snake Draft usage stats of 11/2020
  • Added a toggle for which offense ratings to show - if the TL sets PS and SS limits, keep this at "PS+SS"; otherwise select "S only"
* If you want to play around with the Turns value calculator I recommend saving a separate copy of the file cause the formulas will read from the result of the green cell, which will subsequently alter your stat ratings if you're also submitting for CAP 29. Submissions will need to use the default value T=1.99517. If in doubt just don't touch anything there and you'll be good ;)

Big shout out to MrDollSteak for adding in the new mons and also independently implementing a separate version of this update so we can cross check each other for mistakes. We'll be around to assist with any issues with the calculator - feel free to give us a ping.
 
BSR calc update for CAP 30! Added Chromera and Dorsoil and updated the top 50 to the Swiss Tour stats.
Thanks to Tada and MDS for giving me all the data to copy paste over.

https://drive.google.com/drive/folders/1_0Wq1TW3h0U-c8QqbxxwPTXLhqQlhcpH?usp=sharing

Edit: direct link to the spreadsheet without the archive folder
https://docs.google.com/spreadsheets/d/1J3k6r19sJlAb-rGWluUp5ehfggUkMyApXx6tcr7rR6s/edit?usp=sharing

Use file > make a copy to use it in google sheets. Or file > download to use it in your own spreadsheet program.

Edit 2: Updated the targets list in T value sheet to the new top 50. Apologies that I forgot to update this earlier. The corrected default T is now 1.86611 as opposed to what it was previously (1.94534). Fortunately, this fix has a very minimal effect on BSR values with a difference of only 1-2 units. Follow the same link.
 
Last edited:
Here is a version updated with Ramnarok and Shox prevo, as well as WCAP stats.
https://docs.google.com/spreadsheets/d/1g-cpduLOy-FekdEuDM3dAGimR1aF0c2ALMkZ7iO6JCA/edit?usp=sharing

Noob's guide to BSR

One might look at the BSR sheet and be very confused as to what's happening. I'll provide a rundown here, summarizing this thread: https://www.smogon.com/forums/threads/change-to-bsr-calculations.3671584/. The goal is to provide some insight on these values, so people can have some intuition beyond plugging values into the sheet and seeing what comes out. After reading the thread, I think the design of BSR is pretty cool, so I figured I wanted to share.

BSR is a measure of power for a Pokemon's stats that aims to circumvent some issues with BST. On the defensive side, it aims to equalize high-HP, low Defense spreads with low-HP, high Defense spreads that have similar overall bulk. On the offensive side, it aims to account for speed dynamics and account for mixed attacker dynamics, reducing the penalty for having points in the non-attacking offensive stat.

One useful feature of BSR is that it is calibrated to BST (roughly). This means that the average and standard deviation of all Pokemon's BSR is equal to the average and standard deviation of all Pokemon's BST. This means that, for Pokemon who are relatively unaffected by BSR adjustments (average speed, balanced HP/Defenses, no major disparity between attacking stats), BSR and BST will be very similar. An example of this is Charizard, who has a BST of 534 and a BSR of 533.46.

From here, I will discuss raw BSR (and the associated ) unless I am talking about interpretation of the values. This just makes it simpler, but the calibration process is simply:

BSR = (rBSR - mean(rBSR))* 120 / sd(rBSR) + 420

420 is slightly lower than the actual average BST (430.0) and 120 is slightly higher than the actual standard deviation (108.8) but it is close enough...
The BSR formula is PT + ST + 2 * S, where PT, ST, are Physical and Special Tankiness respectively, and S is Sweepiness. Sweepiness is a complicated formula that depends on PS and SS, Physical and Special Sweepiness respectively. I will cover this after the 4 values that we are all familiar with in stat limits.

The formula for PT is (HP*2 + 141) * (Def*2 + 36). This might be slightly confusing, but these are values of HP and Defense of a Pokemon at Level 100, with neutral nature, 31 IVs, and 0 EVs. This is a pretty intuitive measure of bulk.

One thing to note is that PT does not measure the effect of EVs on bulk. This means certain spreads can gain much more bulk from EVs than others, even if they share the same PT. Consider Chuggalong (45/117, 90.86 PT) vs Iron Valiant (74/90, 90.94 PT). Uninvested, both Pokemon take roughly the same damage from Physical attacks, but HP investment does more for Chuggalong than Iron Valiant.
0 Atk Gliscor Facade (140 BP) vs. 0 HP / 0 Def Chuggalong: 85-100 (36.7 - 43.2%) -- guaranteed 3HKO
0 Atk Gliscor Facade (140 BP) vs. 0 HP / 0 Def Iron Valiant: 106-125 (36.6 - 43.2%) -- guaranteed 3HKO
0 Atk Gliscor Facade (140 BP) vs. 252 HP / 0 Def Iron Valiant: 106-125 (30.1 - 35.5%) -- 29.2% chance to 3HKO
0 Atk Gliscor Facade (140 BP) vs. 252 HP / 0 Def Chuggalong: 85-100 (28.9 - 34%) -- 2.1% chance to 3HKO

Above all applies to ST, but replace Def with SpD.

PT and ST are calibrated to mean 75 and sd 30. This means an average Pokemon has PT of 75 (a bit higher than Syclant), top 16% has a PT of 105 (about Colossoil), and top 2% has PT of around 135 (about Pyroak).

You can consider PT to be about the Def of a Pokemon with average (70-75) HP. For example, Tactite (70.65) has 67.7 PT, and Iron Valiant (74/90) has 90.94 PT.

PT and ST are relatively straightforward so this section is short.

Before I explain PS and SS, I will need to explain SF and T. These are important values
SF is "speed factor". This measures the proportion of Pokemon that a given Speed stat outspeeds. The rationale is that Speed is only valuable when it allows us to outspeed something, so Speed that does not allow us to outspeed any additional Pokemon is not useful (not necessarily true). This aspect of SF was very apparent during Ramnarok's process, where speeds between 151 and 179 gave the same PS/SS values despite relevant breakpoints (+1 Gholdengo, +1 Great Tusk, Modest outspeeding Timid Pult, etc.).

There is a caveat, which is that Pokemon which we speed-tie with count as half in SF calculations. This can be seen where the SF of 5 Speed is 0.061%, while the SF of 6 Speed is 0.121%. This means we outspeed Munchlax half the time at 5 Speed and all the time at 6 Speed, which makes sense given how speed ties work.

T is "turns to kill". There is a complicated formula for this, but it is usually just set by Stats Leader. The idea behind T is that Speed is not always relevant, if both Pokemon deal damage to each other without knocking each other out. For example, if 2 Blisseys are hitting each other with Pound, both take some damage regardless of who goes first, so speed doesn't matter. Thus, we mainly care about speed on the turn where it decides life or death.

The impact of these values is explained in the following section

PS and SS are more complicated. The formula for PS is (Atk*2 + 36) * (SF + T) / (1 - SF + T).

(Atk*2 + 36) is the Attack value of a Pokemon at Lv100 with neutral nature, 31IVs, and 0EVs.
SF / (1 - SF) is a function that provides increasing penalties the closer SF is to 1 (outspeeds the whole metagame), and increasing benefits the closer SF is to 0. If SF is 0, this term goes to 0, and likewise if SF is 1, this term goes to infinity. The tipping point is when SF = 0.5, which is the median Speed of Pokemon (66).

Adding T to the numerator and denominator dampens this effect. This makes sense, as Speed is considered important only in the life-or-death situations, and T measures how often those turns arise. In the following graph, we can see how T = 1 (red), 1.5 (blue), 2 (green), and 3 (purple) affect the SF to PS curve:
View attachment 822352
Thus, low T values allow more Attack for slow spreads and penalize fast spreads more, while high T values reduce the effect of Speed on PS.

Above all applies to SS, but replace Atk with SpA.

Like PT and ST, these values are calibrated to mean 75 and sd 30. An average Pokemon has 75 PS (Skarmory, Mienfoo... lol), top 16% of Pokemon have at least 105 PS (Flamigo, Fezandipiti), and top 2% of Pokemon have at least 135 PS (Zarude, Lycanroc).

Oddly, PS and SS roughly match when Speed is 85 (SF = 71). For example, Duraludon has 95/120/85 with 98.43 PS, 122.89 SS and Rillaboom has 125/60/85 with 122.82 PS, 74.23 SS (???). Faster Pokemon will have higher PS than their Attack stat eg. Deoxys-S (95/180 123.3 PS) while slower Pokemon will have lower PS than their Attack stat eg. Kingambit (135/50, 94.37 PS).

One of the big goals of the BSR revamp was to allow reasonable dump stats (off-Attacking stat) to not affect BSR. This was accomplished using a new term, S (sweepiness) that aggregates PS and SS.

The formula for S is (Magic Term) * (SF + T) / (1 - SF + T).
S is similar to PS and SS, but replaces (Attack * 2 + 36) with a magic term, which is the maximum of the following:

  • (Atk*2 + 36) / mean(PT)
  • (SpA*2 + 36) / mean(ST)
  • geomean((Atk*2 + 36), (SpA*2 + 36)) / mean(min(PT,ST))
The first term is for physical attackers. It is the Attack value divided by the average Physical tankiness of all Pokemon.
The second term is for special attackers. It is the Special Attack value divided by the average Special tankiness of all Pokemon.
The third term is for mixed attackers. Geometric mean is an averaging method that penalizes large disparities between the 2 values. This is divided by the average of the lower of PT and ST for each Pokemon.

The rationale is that mixed attackers gain value by targeting the weaker defense of Pokemon. Thus, their offensive potential should be judged with this in mind.

The major benefit of this formula is that if a Pokemon is classified as a Physical attacker, its SpA stat does not factor into BSR at all (and likewise for Special attackers).

One can see which term is the largest for their stat spread by toggling offense ratings from "PS+SS" to "S only" in the BSR calculator. In the column labeled OCAT (Offensive category), it will say PHYS, SPEC, or MIXED, corresponding to which term is used for S calculations.

Interestingly, a Pokemon with 100 Atk needs 78 SpA to be classified as mixed, while a Pokemon with 100 SpA needs 80 Atk to be classified as mixed. I suppose this means that Pokemon with uneven defense distributions lean Physical.

The calibration is the same as for SS and PS, using mean 75 and sd 30.

Hopefully this helps people understand how BSR works better, so we can have more fun and informed discussion during Stats Limits.

TL DR:
Read the whole thing, nerd.
 
Last edited:
Back
Top