最后活跃于 1 month ago

This is the NX2 Score stuff. These are how they are calculated in NX2 Game.

NX2 Score Description 原始文件
1So for NX, NX2, NXA(Not Tested) the score works like that.
2
3We have a few defined integer globals:
4SCORE_PERFECT = 1000 // This is if you hit a perfect
5SCORE_GREAT = 500
6SCORE_GOOD = 100
7SCORE_BAD = -200
8SCORE_MISS = -500
9SCORE_MISS_LONGNOTE = -300
10SCORE_NIGHTMARE_BONUS = 500000 // If the music is double, you get this more at score.
11SCORE_GRADE_S = 100000 // If you got S, this is added too.
12
13this is usually used as a ENUM. So for getting scores, we have a little formulae:
14
15Basicly, we use 4 things to calculate: Judgment (those PERFECT, GREAT, GOOD), Combo, Note Number, and a boolean that if is a long note body.
16
17Ok so for calculating, if is a we use a variable integer Score.
18
19if is a long note and the judgement is miss, we have Score = SCORE_MISS_LONGNOTE (that is -300)
20else, we have the other table values.
21
22Ok so this is not the only thing to calc.
23If the judgment is less or equal that Great, we have following conditions:
24 if Combo >= 51 we add 1000
25 if NoteNum >= 4 we multiply by 2 else if NoteNum >= 3 we multiply by 1.5
26
27
28This score is added to global score (aka Song Score).
29
30If its a double side, we add SCORE_NIGHTMARE_BONUS, and if it got S, we add SCORE_GRADE_S
31So its like:
32
33if (IsLongNote && (Judgment == eMiss))
34 Score = SCORE_MISS_LONGNOTE;
35else
36 Score = ScoreTable[Judgment - ePerfect];
37
38
39if (Judgment <= eGreat) {
40 if (Combo >= 51)
41 Score += 1000;
42 if (NoteNum >= 4)
43 Score *= 2;
44 else if (NoteNum >= 3)
45 Score = int(Score * 1.5f);
46}
47return Score;
48