Beat Saber 1.40.0 では、NJS (Note Jump Speed) が曲中で変更できるようになりました。そこで、即席で NJS を表示するメーターを表示する mod を作ってみました。
マッパーの Jabob さんがこの可変 NJS を利用したカスタム譜面を作られていたので、この mod を使ってどんな感じか見てみましょう。
なかなかおもしろい効果になっていますね。
この可変 NJS を譜面に組み込むには、どういうデータを入力すれば良いのでしょう?上の譜面の ExpertPlus.beatmap.dat をテキストエディタで開いてみると、末尾のほうに下記のような NJS のデータが見つかります。
"njsEvents":[{"b":78.0},{"b":90.0,"i":1},{"b":94.0,"i":2},...
"njsEventData":[{"p":1,"e":-1},{"d":-5.0},{"d":2.0,"e":1},...
njsEventData の b、i、そして njsEventData の p、d、e はなにを表すのか?調べてみました。
njsEvents.b: beat
どの時間のイベントかを表す単位ですが、Beat Saber の譜面の場合は時分秒ではなく beat で指定します。1 beat の時間は、譜面データに設定された bpm から決まります。たとえば 200bpm の譜面は 1 分間に 200 beat、1 秒間に 3.33 beat になるので、78 beat の位置は 23.4 秒の位置、となります。
njsEvents.i: index
njsEvents のイベントで njsEventData のどのデータを使うかの指定です。
njsEventData.p: (use) previous
1 であれば、前イベントのデータを参照する。
njsEventData.d: delta
譜面の初期 NJS からの変化量。0 なら変化なし、-5 なら 1 beat で NJS が 5 減る、という感じですが、下の ease type と合わせて変化の速度は変わります。
njsEventData.e: ease type
変化量の与え方。DoTween の Easeing と同じで、1=Linear ならリニア (線形) に変化を加える。 2=InSine, 3=OutSine... とたくさんありますが、Easeing の違いは下記ページがわかりやすいと思います。
"njsEvents":[{"b":94.0,"i":2},{"b":106.0,"i":1},{"b":110.0,"i":3},
"njsEventData":[{"p":1,"e":-1},{"d":-5.0},{"d":2.0,"e":1},{"e":1},
94beat、28秒のところで、index=2、NJS +2.0 の変化をリニアに加える
106beat、31.8秒のところで、index=1、NJS -5.0 の変化をリニアに加える
110beat、33秒のところで、index=3、NJS +-0 (譜面の初期 NJS)、NJS 変化なし
となるわけですね。
最初に紹介した NJS 表示の mod については、Beat Saber 1.40.0 用の BSIPA と BSML がないと動かないので、これらが正式公開されてから配布する予定です。
(とりあえず、置いとくだけ置いときました。今のところは 1.40.0 で BSIPA と BSML を自力で動かせる人向け)