applied akatsuki relax pp formula Xd

This commit is contained in:
HorizonCode 2021-04-28 22:44:01 +02:00
parent a65dcc2f10
commit 53140b4be4
1 changed files with 15 additions and 34 deletions

49
oppai.c
View File

@ -2078,7 +2078,7 @@ int pp_std(ezpp_t ez) {
0.4f * al_min(1.0f, nobjects_over_2k) +
(ez->nobjects > 2000 ? (float)log10(nobjects_over_2k) * 0.5f : 0.0f)
);
float miss_penality = (float)pow(0.97f, ez->nmiss);
float miss_penality = (float)pow(0.97f, ez->nmiss + (ez->n50 * 0.35f));
float combo_break = (
(float)pow(ez->combo, 0.8f) / (float)pow(ez->max_combo, 0.8f)
);
@ -2087,6 +2087,8 @@ int pp_std(ezpp_t ez) {
float acc_bonus, od_bonus;
float od_squared;
float hd_bonus;
float aim_crosscheck;
/* acc used for pp is different in scorev1 because it ignores sliders */
float real_acc;
@ -2125,13 +2127,13 @@ int pp_std(ezpp_t ez) {
ar_bonus = 1.0f;
/* high ar bonus */
if (ez->ar > 10.33f) {
ar_bonus += 0.3f * (ez->ar - 10.33f);
if (ez->ar > 10.7f) {
ar_bonus += 0.45f * (ez->ar - 10.7f);
}
/* low ar bonus */
else if (ez->ar < 8.0f) {
ar_bonus += 0.01f * (8.0f - ez->ar);
else if (ez->ar < 8.5f) {
ar_bonus += 0.025f * (8.5f - ez->ar);
}
/* aim pp ---------------------------------------------------------- */
@ -2167,45 +2169,25 @@ int pp_std(ezpp_t ez) {
/* od bonus (high od requires better aim timing to acc) */
od_squared = (float)pow(ez->od, 2);
od_bonus = 0.98f + od_squared / 2500.0f;
aim_crosscheck = al_max(0.75f, 0.6f + (float)pow(real_acc, 3.0f) / 2.0f);
ez->aim_pp *= acc_bonus;
ez->aim_pp *= od_bonus;
ez->aim_pp *= aim_crosscheck;
/* speed pp -------------------------------------------------------- */
ez->speed_pp = base_pp(ez->speed_stars);
ez->speed_pp *= length_bonus;
ez->speed_pp *= miss_penality;
ez->speed_pp *= combo_break;
ez->speed_pp *= hd_bonus;
/* scale the speed value with accuracy slightly */
ez->speed_pp *= 0.02f + accuracy;
/* it's important to also consider accuracy difficulty when doing that */
ez->speed_pp *= 0.96f + (od_squared / 1600.0f);
// REWORK: SPEED CHANGE before AR bonus
if (ez->speed_pp <= 200.0f) // https://www.desmos.com/calculator/chklgsnpca?lang=de
ez->speed_pp = (float) sin(ez->speed_pp * M_PI / 400.0f) * 100.0f;
else {
ez->speed_pp = (float) pow(ez->speed_pp, 0.8692f);
}
// REWORK END
if (ez->ar > 10.33f) {
ez->speed_pp *= ar_bonus;
}
/* acc pp ---------------------------------------------------------- */
/* arbitrary values tom crafted out of trial and error */
ez->acc_pp = (float)pow(1.52163f, ez->od) *
(float)pow(real_acc, 24.0f) * 2.83f;
ez->acc_pp = (float)pow(1.52163f, 5.0f + ez->od / 2.0f) *
(float)pow(real_acc, 18.0f) * 2.83f;
/* length bonus (not the same as speed/aim length bonus) */
ez->acc_pp *= al_min(1.15f, (float)pow(ncircles / 1000.0f, 0.3f));
if (ez->mods & MODS_HD) ez->acc_pp *= 1.08f;
if (ez->mods & MODS_FL) ez->acc_pp *= 1.02f;
// REWORK: ACC CHANGE
ez->acc_pp = (float) pow(ez->acc_pp, 0.94f);
@ -2218,10 +2200,9 @@ int pp_std(ezpp_t ez) {
ez->pp = (float)(
pow(
pow(ez->aim_pp, 1.1f) +
pow(ez->speed_pp, 1.1f) +
pow(ez->acc_pp, 1.1f),
1.0f / 1.1f
pow(ez->aim_pp, 1.158f) +
pow(ez->acc_pp, 1.186f),
0.99f / 1.1f
) * final_multiplier
);