mirror of
https://github.com/MewoLab/AquaDX.git
synced 2025-10-25 20:12:39 +00:00
86 lines
2.1 KiB
TypeScript
86 lines
2.1 KiB
TypeScript
export type GameName = 'mai2' | 'chu3' | 'ongeki' | 'wacca'
|
|
|
|
const multTable = {
|
|
'mai2': [
|
|
[ 100.5, 22.4, 'SSSp' ],
|
|
[ 100.0, 21.6, 'SSS' ],
|
|
[ 99.5, 21.1, 'SSp' ],
|
|
[ 99, 20.8, 'SS' ],
|
|
[ 98, 20.3, 'Sp' ],
|
|
[ 97, 20, 'S' ],
|
|
[ 94, 16.8, 'AAA' ],
|
|
[ 90, 15.2, 'AA' ],
|
|
[ 80, 13.6, 'A' ],
|
|
[ 75, 12, 'BBB' ],
|
|
[ 70, 11.2, 'BB' ],
|
|
[ 60, 9.6, 'B' ],
|
|
[ 50, 8, 'C' ],
|
|
[ 40, 6.4, 'D' ],
|
|
[ 30, 4.8, 'D' ],
|
|
[ 20, 3.2, 'D' ],
|
|
[ 10, 1.6, 'D' ],
|
|
[ 0, 0, 'D' ]
|
|
],
|
|
|
|
// TODO: Fill in multipliers for Chunithm and Ongeki
|
|
'chu3': [
|
|
[ 100.75, 0, 'SSS' ],
|
|
[ 100.0, 0, 'SS' ],
|
|
[ 97.5, 0, 'S' ],
|
|
[ 95.0, 0, 'AAA' ],
|
|
[ 92.5, 0, 'AA' ],
|
|
[ 90.0, 0, 'A' ],
|
|
[ 80.0, 0, 'BBB' ],
|
|
[ 70.0, 0, 'BB' ],
|
|
[ 60.0, 0, 'B' ],
|
|
[ 50.0, 0, 'C' ],
|
|
[ 0.0, 0, 'D' ]
|
|
],
|
|
|
|
'ongeki': [
|
|
[ 100.75, 0, 'SSS+' ],
|
|
[ 100.0, 0, 'SSS' ],
|
|
[ 99.0, 0, 'SS' ],
|
|
[ 97.0, 0, 'S' ],
|
|
[ 94.0, 0, 'AAA' ],
|
|
[ 90.0, 0, 'AA' ],
|
|
[ 85.0, 0, 'A' ],
|
|
[ 80.0, 0, 'BBB' ],
|
|
[ 75.0, 0, 'BB' ],
|
|
[ 70.0, 0, 'B' ],
|
|
[ 50.0, 0, 'C' ],
|
|
[ 0.0, 0, 'D' ]
|
|
],
|
|
|
|
'wacca': [
|
|
[ 100.0, 0, 'AP' ],
|
|
[ 98.0, 0, 'SSS' ],
|
|
[ 95.0, 0, 'SS' ],
|
|
[ 90.0, 0, 'S' ],
|
|
[ 85.0, 0, 'AAA' ],
|
|
[ 80.0, 0, 'AA' ],
|
|
[ 70.0, 0, 'A' ],
|
|
[ 60.0, 0, 'B' ],
|
|
[ 1.0, 0, 'C' ],
|
|
[ 0.0, 0, 'D' ]
|
|
]
|
|
}
|
|
|
|
export function getMult(achievement: number, game: GameName) {
|
|
achievement /= 10000
|
|
const mt = multTable[game]
|
|
for (let i = 0; i < mt.length; i++) {
|
|
if (achievement >= (mt[i][0] as number)) return mt[i]
|
|
}
|
|
return [ 0, 0, 0 ]
|
|
}
|
|
|
|
export function roundFloor(achievement: number, game: GameName, digits = 2) {
|
|
// Round, but if the rounded number reaches the next rank, use floor instead
|
|
const mult = getMult(achievement, game);
|
|
achievement /= 10000
|
|
const rounded = achievement.toFixed(digits);
|
|
if (getMult(+rounded * 10000, game)[2] === mult[2] && rounded !== '101.0') return rounded;
|
|
return (+rounded - Math.pow(10, -digits)).toFixed(digits);
|
|
}
|