11,426,907 users, 10,962 online now.
A total of 7.45 billion ranked plays!
21 posts jump | 1, 2  next
 Star Shooter197 posts 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,000Length bonus: Take the lower of 1 or (the number of circles/1500), multiply by 0.1 and add 1Multiply current strain value by this amountThen multiply by 0.985^missesCombo: 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 HiddenMultiply by (1.05 x Length bonus) for FlashlightThen 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.1Multiply 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 22Take (number of circles/1500) to the power of 0.3. Compare to 1.15, take the lower valueMultiply your Accuracy value by this amountFormula 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.10Multiply this by the following amounts for these mods:NoFail: 0.90xHidden: 1.10xFinal formula: ((StrainValue ^ 1.1) + (AccuracyValue ^ 1.1)) ^ (1.0 / 1.1) * MultiplierI 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 2017-01-24 00:38:14 UTC, edited 6 times in total.
 Rhythm Incarnate7,561 posts May I host it on my website? You will be credited for that awesome work.
 Combo Commander384 posts This is very accurate, nicely done Sandgodoven!
 Tempo Trainee13 posts Good job, that shows some work behind the pp system in taiko and gives us something else to look at.
 Star Shooter197 posts _Gezo_ wrote:May I host it on my website? You will be credited for that awesome work. Sure
 Rhythm Incarnate7,561 posts 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.
 Star Shooter197 posts _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?
 Rhythm Incarnate7,561 posts https://www.dropbox.com/s/kaqumg6u91yt6 ... D.pdf?dl=0There are different formulas but yeah I'll probably try to figure them out again
 Star Shooter197 posts 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)
 Beat Clicker75 posts I love you _Gezo_ wrote:https://www.dropbox.com/s/kaqumg6u91yt6hh/ULTIMATE%20OD%20TABLE%20FIXED.pdf?dl=0There are different formulas but yeah I'll probably try to figure them out againI tried to figure out the formulas and came up with this:https://www.dropbox.com/s/p3v6p1oxbqge5 ... .xlsx?dl=0Maybe try it (?)
 Combo Commander367 posts . Last edited by Conor on 2016-09-13 02:53:09 UTC, edited 1 time in total.
 Beat Clicker75 posts 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/2HR OD:    OD*1.4DT OD:    ROUND(OD/1.5+5.5) TO 2 DECIMALS        HT OD:    ROUND(OD/0.75-5.5) TO 2 DECIMALSEZ+DT OD: ROUND(EZ OD/1.5+5.5) TO 2 DECIMALSHR+DT OD: ROUND(HR OD/1.5+5.5) TO 2 DECIMALSEZ+HT OD: ROUND(EZ OD/0.75-5.5) TO 2 DECIMALSHR+HT OD: ROUND(HR OD/0.75-5.5) TO 2 DECIMALS300 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
 Cymbal Sounder42 posts Wow, great job. Thank you for sharing this with us.
 Star Shooter197 posts 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/2HR OD:    OD*1.4DT OD:    ROUND(OD/1.5+5.5) TO 2 DECIMALS        HT OD:    ROUND(OD/0.75-5.5) TO 2 DECIMALSEZ+DT OD: ROUND(EZ OD/1.5+5.5) TO 2 DECIMALSHR+DT OD: ROUND(HR OD/1.5+5.5) TO 2 DECIMALSEZ+HT OD: ROUND(EZ OD/0.75-5.5) TO 2 DECIMALSHR+HT OD: ROUND(HR OD/0.75-5.5) TO 2 DECIMALS300 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=0Sweet! 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.
 Beat Clicker78 posts 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...
21 posts jump | 1, 2  next
 Users browsing this forum: None

 Jump to:  Select a forum osu! ------------------    Development       Completed Projects          osu! iPhone             Bug Reports          Ranking Criteria             Finalized/Denied Amendments             osu!droid                Bug Reports    Gameplay & Rankings       Tournaments       Mapping Techniques       Taiko       Catch the Beat       osu!mania    Skinning       Work In Progress Skins       Completed Skins       Feature Requests          Completed Requests    Help       Resolved Issues       Confirmed Issues Beatmaps    Ranked/Approved Beatmaps    Pending Beatmaps    Works In Progress/Help       General Questions       Storyboarding       Modding Queues    Beatmap Graveyard    Beatmap Projects       Completed Projects    Beatmap Management       Archive Other    General Discussion    Off-Topic       Forum Games          Mafia       Surveys    Introductions    Music Hall    Otaku Culture    Video Games    Art Language Specific    Русский    中文    한국어    Other Languages       Indonesian       Malaysian       Deutsch       Español       Français       Italiano       Magyar       Nederlands       Polski       Português       Skandinavien       Suomi       Tagalog       Türkçe       ภาษาไทย       日本語             BAT/MAT Discussion