I've pretty much figured out Taiko pp

posted
Total Posts
23
show more
RynaHitsune
Wow, great job. Thank you for sharing this with us.
Topic Starter
numbermaniac

Pohm wrote:

I've finally figured out the formulas in a clean way (these are on the spreadsheet as well):
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.
dewero
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:
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...
montymintypie
Fixed the broken OD calculations by everyone, made some checkboxes pretty, made the calculation realtime, added a nice hosted domain.

I might add input validation and more CSS later.

http://pp.mon.im/
Pohm

montymintypie wrote:

Fixed the broken OD calculations by everyone, made some checkboxes pretty, made the calculation realtime, added a nice hosted domain.

I might add input validation and more CSS later.

http://pp.mon.im/
Awesome :0!!
dewero
...Do you mind if I copy your OD calculation function? It's much cleaner than my implementation haha. I'll give credit if you're ok with it.
montymintypie
Go for it, no worries
dewero
Nice, thanks!

By the way, it looks like you forgot to clamp od after applying the multiplier from HR/EZ :P

http://puu.sh/rixFO/7e3a6e8060.jpg
montymintypie
Fixed. Also added display of OD with mods applied.
Yales
Thank you very much for this work! ><
karezzu
Well America actually has the greatest educational system, but Is GG thanks to you guys?
Please sign in to reply.

New reply