Skip to content

Commit

Permalink
Add force difficulty statistics score multiplier
Browse files Browse the repository at this point in the history
  • Loading branch information
Rian8337 committed Dec 2, 2023
1 parent f2a73fb commit e5e4fdd
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 6 deletions.
3 changes: 3 additions & 0 deletions src/ru/nsu/ccfit/zuev/osu/game/GameScene.java
Original file line number Diff line number Diff line change
Expand Up @@ -821,6 +821,9 @@ public void onUpdate(final float pSecondsElapsed) {
stat.setMaxObjectsCount(lastTrack.getTotalHitObjectCount());
stat.setMaxHighestCombo(lastTrack.getMaxCombo());

stat.setBeatmapCS(beatmapData.difficulty.cs);
stat.setBeatmapOD(beatmapData.difficulty.od);

stat.setCustomAR(ModMenu.getInstance().getCustomAR());
stat.setCustomOD(ModMenu.getInstance().getCustomOD());
stat.setCustomCS(ModMenu.getInstance().getCustomCS());
Expand Down
9 changes: 9 additions & 0 deletions src/ru/nsu/ccfit/zuev/osu/menu/ModMenu.java
Original file line number Diff line number Diff line change
Expand Up @@ -390,6 +390,15 @@ private void changeMultiplierText() {
if (changeSpeed != 1.0f){
mult *= StatisticV2.getSpeedChangeScoreMultiplier(getSpeed(), mod);
}
if (selectedTrack != null) {
if (isCustomCS()) {
mult *= StatisticV2.getCustomCSScoreMultiplier(selectedTrack.getCircleSize(), customCS);
}

if (isCustomOD()) {
mult *= StatisticV2.getCustomODScoreMultiplier(selectedTrack.getOverallDifficulty(), customOD);
}
}

multiplierText.setText(StringTable.format(R.string.menu_mod_multiplier,
mult));
Expand Down
52 changes: 46 additions & 6 deletions src/ru/nsu/ccfit/zuev/osu/scoring/StatisticV2.java
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,9 @@ public class StatisticV2 implements Serializable {
private double negativeHitOffsetSum;
private double unstableRate;

private Float beatmapCS;
private Float beatmapOD;

private Float customAR;
private Float customOD;
private Float customCS;
Expand Down Expand Up @@ -733,6 +736,14 @@ public void setCustomCS(@Nullable Float customCS) {
this.customCS = customCS;
}

public void setBeatmapCS(float beatmapCS) {
this.beatmapCS = beatmapCS;
}

public void setBeatmapOD(float beatmapOD) {
this.beatmapOD = beatmapOD;
}


public void setFLFollowDelay(float delay) {
flFollowDelay = delay;
Expand Down Expand Up @@ -772,15 +783,15 @@ public void addHitOffset(double accuracy) {
);
}
}

public double getNegativeHitError() {
return negativeTotalOffsetSum == 0 ? 0 : negativeHitOffsetSum / negativeTotalOffsetSum;
}

public double getPositiveHitError() {
return positiveTotalOffsetSum == 0 ? 0 : positiveHitOffsetSum / positiveTotalOffsetSum;
}

public float getSpeed(){
float speed = changeSpeed;
if (mod.contains(GameMod.MOD_DOUBLETIME) || mod.contains(GameMod.MOD_NIGHTCORE)){
Expand Down Expand Up @@ -909,16 +920,45 @@ private void computeModScoreMultiplier() {
modScoreMultiplier *= m.scoreMultiplier;
}

if (isLegacySC) {
// The legacy SC mod has a 1.06 multiplier.
modScoreMultiplier *= 1.06f;
if (isCustomCS() && beatmapCS != null) {
modScoreMultiplier *= getCustomCSScoreMultiplier(beatmapCS, customCS);
}

if (isCustomOD() && beatmapOD != null) {
modScoreMultiplier *= getCustomODScoreMultiplier(beatmapOD, customOD);
}

if (changeSpeed != 1f) {
modScoreMultiplier *= getSpeedChangeScoreMultiplier();
}
}

public static float getCustomCSScoreMultiplier(float beatmapCS, float customCS) {
float multiplier = 1;
float diff = Math.abs(beatmapCS - customCS);

if (customCS >= beatmapCS) {
multiplier += 0.0075f * (float) Math.pow(diff, 1.5);
} else {
multiplier -= 0.01f * (float) Math.pow(diff, 1.5);
}

return multiplier;
}

public static float getCustomODScoreMultiplier(float beatmapOD, float customOD) {
float multiplier = 1;
float diff = Math.abs(beatmapOD - customOD);

if (customOD >= beatmapOD) {
multiplier += 0.005f * (float) Math.pow(diff, 1.3);
} else {
multiplier -= 0.005f * (float) Math.pow(diff, 1.35);
}

return multiplier;
}

/**
* Determines if the score has the old SC mod enabled, this will be replaced with a custom CS when replaying.
*/
Expand Down

0 comments on commit e5e4fdd

Please sign in to comment.