経緯を話すのが苦手なので、いきなり結論から話しますが、以下の結論に至りました。
[表示点]=画面の表示に使用する点数。小数点以下も持っているが、表示時に丸める。
[内部点]=ゲームの内部で使用される実際の点数。この点数はノーツを押した瞬間に加算される。
1. 点数計算として1フレーム毎に以下を判定し実施する。
1-1. ノーツが押された場合→内部点計算フェイズと表示点計算フェイズをこのフレームで押されたノーツ数だけ順番に行う。
1-2. ノーツが押されなかった場合→表示点計算フェイズを行う。
2. 内部点計算フェイズ:ノーツが押された場合、[内部点]にそのノーツの判定結果に応じた点数を加算する。
3. 表示点計算フェイズ:[表示点]と[内部点]の差分の1/4を[表示点]に加算する。
4. 点数計算後、[表示点]を四捨五入し、画面に表示する。([表示点]自体は編集しない)
※しかし、何らかの誤差がある模様…表示用の点数も小数点以下を持っているということがミソです。
文字で書くと非常に分かりにくいので、具体例を。
以下の動画を例にお話します。(検証にも使わせていただきました。ありがとうございます。)
■具体例1:1ノーツ目
スコアは0→397と増えていきました。
スコアが加算された時、コマ送りでどのように増えていっているかを以下の表にまとめました。
具体的に計算してみます。
・内部点計算フェイズ
ノーツを押した瞬間、[内部点]は0+397=「397」となります。
・表示点計算フェイズ
現在の差分は397-0=「397」ですので、397/4=「99.25」が[表示点]に加算され、[表示点]は「99.25」となります。
・画面表示
[表示点]を四捨五入し、画面に「99」と表示されます。
そして1/60秒後、フレームへ進みます。
このフレームではノーツを押していないため、表示点のみ計算します。
・表示点計算フェイズ
現在の差分は397-99.25=「297.75」ですので、297.75/4=「74.4375」が[表示点]に加算され、[表示点]は「173.6875」となります。
・画面表示
[表示点]を四捨五入し、画面には「174」と表示されます。
このように繰り返した結果が以下の表になります。
省略していますが、繰り返すことで[表示点]は限りなく397点に近づきます。
(どこかで丸められている可能性もありますが、これ以上は検証が難しいです)
動画の点数と並べてみましたが全く同じとなりました。
■具体例2:2・3ノーツ目
2ノーツと3ノーツ目はロング終点と別のロング始点の同時押しとなります。
スコアは397→1191と増えていきました。
同時押しですので、片方ずつ計算します。
・片方のノーツ(2ノーツ目) 内部点計算フェイズ
この3つのノーツの配点は同じなので、[内部点]が397+397=「794」になります。
・片方のノーツ(2ノーツ目) 表示点計算フェイズ
現在の差分は794-397=「397」ですので、397/4=99.25が[表示点]に加算され、[表示点]は「496.25」となります。
・もう片方のノーツ(3ノーツ目) 内部点計算フェイズ
[内部点]が794+397=「1191」になります。
・もう片方のノーツ(3ノーツ目) 表示点計算フェイズ
現在の差分は1191-496.25=「694.75」ですので、694.75/4=「173.6875」が[表示点]に加算され、[表示点]は「669.9375」となります。
・画面表示
[表示点]を四捨五入し、画面には「670」と表示されます。
これ以降のフレームは表示点のみ計算します。
まとめると、以下の様な結果となり、動画と一致しました。
■誤差について
この計算にも何かしらの誤差があるようで、具体的には187ノーツ目で起きています。
動画のスコアと上記計算の結果を並べるとこうなります。僅かにずれています。
これに関しては全く分かりません…
[表示点]が小数点以下まで持っているため、何かしらの非常に細かいズレが起きているのではないかと考えています。
なお、その直後の188ノーツ目は正しく計算できています。
個人的に気になったどうでもいいことを書き記しましたが、ここまで見てくださりありがとうございました。