🎹

CS IIDXの1ノートあたりのゲージ回復量(とTOTAL値)を調べてみた

2024/02/11に公開

はじめに

いつものTOTAL値計算式、7.605*NOTES/(0.01*NOTES+6.5)
これはblack train氏が推測で出した式らしいです
この式がどれくらい正確なのか、本家で実際に使われている式がどうなっているのか気になったので、PS2のソフトをデバッガや逆アセンブラで調べてみました。
中身を見たのは持ってるCS IIDXで一番新しいHAPPY SKYです。
昔4000円くらいでブックオフに売ってたのを買いました。
調べた内容はあくまでこのハピスカでの仕様なので、そのほかや現在のタイトルでも全く同じかどうかは不明です。

ゲージについて

まずIIDXのノーマルゲージ周りの仕様について。
上のリンク先を読めばなんとなくわかると思いますが、IIDXのノマゲ回復量はBMSとは違って総回復量(=TOTAL値)ではなく、「1ノートあたりの回復量(0.02%刻み)」を設定していると思われます。

ゲージ自体の内部的な扱いは、調べると100%=5000の整数のようでした。
この場合1=0.02%になるので、回復量が0.02%刻みであることと辻褄も合います。

本題

結論だけ言うと、使われている式は80000/(((NOTES-350)/3+350)*6)でした。
変形すると80000/(NOTES*2+1400)ですが、演算が整数だけで行われるので多少誤差が出ます。(回復量が切り替わるノート数の境目が1~2程ずれる程度)
これがPGREAT(or GREAT)1つあたりの回復量です。

\Large{\frac{80000}{NOTES*2+1400}}

ただし、NOTESが350未満の場合はNOTES*6が分母になります。要は80000/NOTES*6ですね。
分子の80000は、GAME LEVEL(曲レベルではない)からくる固定値(CSでのレベル3の時)です。(詳しく調べてないんですが*6もゲームレベル由来の値だったかも?)

ちなみに、普通のプレイ検証だけでもわかる部分ではありますがノマゲにおいては
・GOODの回復量はこの半分を切り捨て
・BAD/空POORの減少量は-100、POORは-300
・ゲージ初期値は1100(22.00%ちょうど)、最低値は100(2.00%ちょうど)
でした。

回復量をゲージ総量100%換算にすると、値は1/50になるので1ノートあたり80000/(NOTES*2+1400)/50、つまりだいたい800/(NOTES+700)ということになります。
いつもの式を1ノートあたりの回復量として変形すると760.5/(NOTES+650)です。
わりと似てますね。
逆に本家の計算式をTOTAL値版に直すと8*NOTES/(0.01*NOTES+7)になります。

グラフで比較

まとめ

という訳で、IIDX本家(CS HAPPY SKY)におけるTOTAL値は
8*NOTES/(0.01*NOTES+7)
でした。
0.02%刻みで厳密に算出する場合は
(80000/(((NOTES-350)/3+350)*6))/50*NOTES
を/50以外整数演算でやるなり切り捨てを挟むなりすれば出せます。bmsの仕様上ゲージの実装が大抵の場合浮動小数点数になるので100%合わせるのは無理そうですが
ノート数が350未満の場合は800/3≒266.67で固定、0.02%刻みなら(80000/NOTES*6)/50*NOTESです。

ノート数と回復量の関係はこんな感じ↓(最初のリンク先の「3 誤差について」についても気になったので表に入れてみました)

ノート数 GREAT回復量 TOTAL値 最大誤差
350~352 0.76% 266.00~267.52 99.8%
353~382 0.74% 261.22~282.68 97.4%
383~412 0.72% 275.76~296.64 97.5%
413~442 0.70% 289.10~309.40 97.4%
443~478 0.68% 301.24~325.04 97.2%
479~514 0.66% 316.14~339.24 97.3%
515~550 0.64% 329.60~352.00 97.2%
551~592 0.62% 341.62~367.04 97.0%
593~634 0.60% 355.80~380.40 97.0%
635~679 0.58% 368.30~393.82 96.8%
680~730 0.56% 380.80~408.80 96.6%
731~781 0.54% 394.74~421.74 96.6%
782~838 0.52% 406.64~435.76 96.3%
839~901 0.50% 419.50~450.50 96.2%
902~967 0.48% 432.96~464.16 96.1%
968~1039 0.46% 445.28~477.94 95.9%
1040~1120 0.44% 457.60~492.80 95.7%
1121~1204 0.42% 470.82~505.68 95.6%
1205~1300 0.40% 482.00~520.00 95.3%
1301~1405 0.38% 494.38~533.90 95.0%
1406~1522 0.36% 506.16~547.92 94.8%
1523~1654 0.34% 517.82~562.36 94.5%
1655~1801 0.32% 529.60~576.32 94.2%
1802~1966 0.30% 540.60~589.80 93.8%
1967~2158 0.28% 550.76~604.24 93.3%
2159~2377 0.26% 561.34~618.02 92.9%
2378~2635 0.24% 570.72~632.40 92.3%
2636~2938 0.22% 579.92~646.36 91.7%
2939~3301 0.20% 587.80~660.20 91.0%
3302~3745 0.18% 594.36~674.10 90.0%
3746~4300 0.16% 599.36~688.00 88.9%
4301~5014 0.14% 602.14~701.96 87.5%
5015~5968 0.12% 601.80~716.16 85.7%
5969~7300 0.10% 596.90~730.00 83.4%
7301~9301 0.08% 584.08~744.08 80.0%


TOTAL値は計算式ではなくゲーム内の相当値です。
最大誤差については、例えば2378ノーツの場合、計算上のTOTAL値は約618、実際の値は約570といった風になります。
0.02%刻みによる誤差は大きくても1割(~long曲のDB(^_^;)でも2割以下)程度なので、BMSで言う低TOTALほど気になるものではなさそうですね。
そもそも式の性質上ノート数が多い曲ほどゲージが渋い(3y3s(long)が特に言われている)感じはあるので、ノート数が多いBMS譜面製作の際はTOTAL値は高めに設定した方が良いのかも?譜面傾向にもよるけど

そのほか

最初にも書きましたが、現行のACやINFINITASをリバースエンジニアリングした訳ではないので今も同じ式が使われているかどうかは不明です。
どこかのタイミングでゲージの増減が大きく変わったとかは聞きませんし(ゲームレベルは廃止されているらしいですが)、動画などで確認した限りでも大きく変化はなさそうなので、仮に同じではなかったとしても近い計算式は使われていそうです。

todo:調べた手順とかの追記(このままだとあんまり技術記事っぽくないので)

Discussion