User avatar
Star Shooter
197 posts
Offline
So for the past few days I've been looking through the open-sourced Taiko pp algorithms, and I've basically figured it out. Here's how it works....:

Taiko pp is composed of Strain, Accuracy and a final multiplier.

Strain Value:
* Take the higher of 1 or the (Star Rating/0.0075)
* Multiply by 5
* Subtract 4
* Square it
* Divide by 100,000
Length bonus: Take the lower of 1 or (the number of circles/1500), multiply by 0.1 and add 1
Multiply current strain value by this amount

Then multiply by 0.985^misses
Combo: Take your combo and square root it, then divide by the square root of the full combo. Compare this to 1 and take the lower value.
Multiply strain by this combo value.
Multiply by 1.025 for Hidden
Multiply by (1.05 x Length bonus) for Flashlight
Then multiply by accuracy (as a %)

Accuracy Value:
Take the 300 hit window and call this HitWindow300 (This is where the OD comes in, and is basically where the effect of HR/EZ takes place)

Accuracy Value = (150/HitWindow300) ^ 1.1
Multiply by accuracy to the power of 15 (out of 1, e.g. for 98% accuracy you’d do 0.98 to the power of 15)
Multiply by 22

Take (number of circles/1500) to the power of 0.3. Compare to 1.15, take the lower value
Multiply your Accuracy value by this amount

Formula for actual accuracy percentage:
(Amount of 100s * 150) + (Amount of 300s * 300) / (number of circles * 300)
(Not exactly relevant since you get this from the game anyway)

Total pp:
Multiplier on all plays: 1.10

Multiply this by the following amounts for these mods:
NoFail: 0.90x
Hidden: 1.10x

Final formula: ((StrainValue ^ 1.1) + (AccuracyValue ^ 1.1)) ^ (1.0 / 1.1) * Multiplier

I made a very simple calculator for this in JavaScript (so it'll run in any decent browser) - you can find that here.

The weirdest thing I found though, was the misses. What I expected to happen was that it would use your max combo and compare that to the map's maximum combo. Your combo is actually calculated as the maximum combo minus the number of misses. So if you got 3 misses on a 1000 combo map, that's actually calculated as you scoring 997/1000 combo, regardless of where you had those misses. _yu68 should actually have gotten 580pp for his Technonationalism play since his max combo was 762/1149. He had 3 misses, and it only comes out to 680pp if you calculate this as 1146/1149.

Another example of this is on Uta - despite tuengsocool getting about 650 combo less than XK2238, he only gets slightly less pp because of the slightly lower accuracy - since they both got 4 misses, they both calculate as 3503/3507.

Some notes about the calculator:
"Number of circles" isn't correct in convert maps - the number of circles shown in osu! is for Standard mode, so it won't be the same number in Taiko. You'll have to input the maximum combo there instead.
Your combo - As I said in the previous paragraph, you'd have to input this as max combo minus misses for it to match up with the real values. I really don't know why.
Values can differ very slightly because the Star Rating in osu! is rounded to two decimal places; for example, what shows as a 6.86 star map in osu! can actually be anywhere between 6.855 and 6.865 stars, so there may be a very slight discrepancy there.

I don't know if anyone cares, but hopefully this post is useful :)
Last edited by numbermaniac on , edited 6 times in total.
ImageImage
User avatar
Rhythm Incarnate
7,551 posts
Offline
May I host it on my website? You will be credited for that awesome work. :)
User avatar
Combo Commander
351 posts
Offline
This is very accurate, nicely done :D
Image Sandgodoven!
User avatar
Tempo Trainee
13 posts
Offline
Good job, that shows some work behind the pp system in taiko and gives us something else to look at. :)
User avatar
Star Shooter
197 posts
Offline
_Gezo_ wrote:
May I host it on my website? You will be credited for that awesome work. :)


Sure :)
ImageImage
User avatar
Rhythm Incarnate
7,551 posts
Offline
Another thing I would like to point out is that I made an OD table some time ago. It would be useful as they all contain the "300" values and follow a formula for EZ and HR, and values are multiplied by their factor with DT and HT. It will be much easier to use for this aspect. Instead of constantly looking for what 7+DT+HR is, or 3+EZ+DT, or 5.5 being inaccurate, the program will get the values on their own.
User avatar
Star Shooter
197 posts
Offline
_Gezo_ wrote:
Another thing I would like to point out is that I made an OD table some time ago. It would be useful as they all contain the "300" values and follow a formula for EZ and HR, and values are multiplied by their factor with DT and HT. It will be much easier to use for this aspect. Instead of constantly looking for what 7+DT+HR is, or 3+EZ+DT, or 5.5 being inaccurate, the program will get the values on their own.


That sounds fantastic! Where can I get it?
ImageImage
User avatar
Rhythm Incarnate
7,551 posts
Offline
https://www.dropbox.com/s/kaqumg6u91yt6 ... D.pdf?dl=0

There are different formulas but yeah I'll probably try to figure them out again
User avatar
Star Shooter
197 posts
Offline
Update 1.1: I removed the "your combo" box, because of the way Taiko calculates pp, this value can be calculated from the number of misses. Same download link as before. (Also means one less box to fill in :p)
ImageImage
User avatar
Beat Clicker
75 posts
Offline
I love you :)

_Gezo_ wrote:
https://www.dropbox.com/s/kaqumg6u91yt6hh/ULTIMATE%20OD%20TABLE%20FIXED.pdf?dl=0

There are different formulas but yeah I'll probably try to figure them out again


I tried to figure out the formulas and came up with this:

https://www.dropbox.com/s/p3v6p1oxbqge5 ... .xlsx?dl=0

Maybe try it (?)
User avatar
Combo Commander
367 posts
Offline
.
Last edited by Conor on , edited 1 time in total.
User avatar
Beat Clicker
75 posts
Offline
I've finally figured out the formulas in a clean way (these are on the spreadsheet as well):

Code:
NM OD:    Initial OD        
EZ OD:    OD/2
HR OD:    OD*1.4
DT OD:    ROUND(OD/1.5+5.5) TO 2 DECIMALS        
HT OD:    ROUND(OD/0.75-5.5) TO 2 DECIMALS
EZ+DT OD: ROUND(EZ OD/1.5+5.5) TO 2 DECIMALS
HR+DT OD: ROUND(HR OD/1.5+5.5) TO 2 DECIMALS
EZ+HT OD: ROUND(EZ OD/0.75-5.5) TO 2 DECIMALS
HR+HT OD: ROUND(HR OD/0.75-5.5) TO 2 DECIMALS
300 Hit window: ROUND(49.5-(OD/0.5)*1.5) TO 1 DECIMAL    


Hope it helps :)

EDIT: Here's the new and better (???) taiko pp calculator (automated 300 hit window calculation based off _Gezo_'s od table): https://www.dropbox.com/s/52mikcnntehqn ... .html?dl=0
User avatar
Cymbal Sounder
42 posts
Offline
Wow, great job. Thank you for sharing this with us.
Image
User avatar
Star Shooter
197 posts
Offline
Pohm wrote:
I've finally figured out the formulas in a clean way (these are on the spreadsheet as well):

Code:
NM OD:    Initial OD        
EZ OD:    OD/2
HR OD:    OD*1.4
DT OD:    ROUND(OD/1.5+5.5) TO 2 DECIMALS        
HT OD:    ROUND(OD/0.75-5.5) TO 2 DECIMALS
EZ+DT OD: ROUND(EZ OD/1.5+5.5) TO 2 DECIMALS
HR+DT OD: ROUND(HR OD/1.5+5.5) TO 2 DECIMALS
EZ+HT OD: ROUND(EZ OD/0.75-5.5) TO 2 DECIMALS
HR+HT OD: ROUND(HR OD/0.75-5.5) TO 2 DECIMALS
300 Hit window: ROUND(49.5-(OD/0.5)*1.5) TO 1 DECIMAL    


Hope it helps :)

EDIT: Here's the new and better (???) taiko pp calculator (automated 300 hit window calculation based off _Gezo_'s od table): https://www.dropbox.com/s/52mikcnntehqn ... .html?dl=0


Sweet! I thought DT was just the 300 hit window times 2/3, and HT was the 300 hit window times 4/3. I figured out the 300 hit window as 49.5-(3*OD) (edit: actually, that's the exact same as yours, because dividing by 0.5 is equal to multiplying by 2, and then that times 1.5 is 3), but both your formula and mine return OD6.5 as 30 ms, when it's in fact 29.5. This is just about the only thing I've been stuck on.
ImageImage
User avatar
Beat Clicker
78 posts
Offline
I'm a bit late to the party, but I've recently picked back up on my Taiko pp calculator and I remember failing to find a clean formula to calculate the hitwindow from the OD. What I did instead was hard code specific decimals to subtract from the hit window. Actually, have a look at the function I wrote:

Code:
private double GetHitWindow300()
{
    string ODstr = map.GetTag("Difficulty", "OverallDifficulty");
    if(ODstr.Length > 3)
        throw new Exception("Error, OD has more than one decimal place");

    double OD = Convert.ToDouble(ODstr);

    if(((int)mods & (int)Modifiers.HardRock) > 0)
        OD *= 1.4;
    else if(((int)mods & (int)Modifiers.Easy) > 0)
        OD *= 0.5;

    OD = Dewlib.Clamp(OD, 0, 10);

    //Calculate the integer part of OD first, then modify later based on the decimal
    double window = 49.5 - 3 * Math.Floor(OD);

    //If OD has a decimal place
    if(OD % 1 != 0)
    {
        //Avoid precision bugs - round to one decimal place
        double ODdecimal = Math.Round(OD - Math.Floor(OD), 1);

        if(0.1 <= ODdecimal && ODdecimal <= 0.3)
            window -= 1;
        else if(0.4 <= ODdecimal && ODdecimal <= 0.6)
            window -= 2;
        else if(0.7 <= ODdecimal && ODdecimal <= 0.9)
            window -= 3;
    }

    if(((int)mods & (int)Modifiers.DoubleTime) > 0 || ((int)mods & (int)Modifiers.Nightcore) > 0)
        window /= 1.5;
    else if(((int)mods & (int)Modifiers.HalfTime) > 0)
        window /= 0.75;

    return window;
}


If anyone needs an explanation I can explain it, but yea, OD is weird when it comes to decimals...
Reply 21 posts jump | 1, 2  next

Users browsing this forum: None


Jump to: