diff --git a/oppai.c b/oppai.c index 51f7dff..7c30f4f 100644 --- a/oppai.c +++ b/oppai.c @@ -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 );