BeatSageで生成したBeatSaber譜面のノーツ速度(NJS,NotesJumpSpeed)をmodを用いずに直接書き換える

 BeatSaber楽しんでますか?カスタム曲を入れて楽しんでいると、BeatSageで作った譜面の速度が物足りなくなる場面があると思います。ノーツ速度はNotesJumpSpeed(NJS)と言う値で管理され、例えばBeatSageで作成した譜面のデフォルトNJSはExpertで12、ExpertPlusで16となっています。これらの速度は音ゲーマーのようなノーツへの反射を楽しむ人にとっては物足りない値となっています。

 NJSをゲーム内から弄るmodにはかつてはLeveltweaks等があったのですが、beatSaberのバージョンアップのたびにmodが壊れるため更新待ちの間は使えません。アップデートの更新を切るのも案外面倒です。曲ごとに速度を設定する必要があるのも面倒ですよね。

 そこで、譜面に保存されているNJSを直接書き換えることによりノーツ速度を上げてみようと思いました。NJSは各譜面のフォルダ内のinfo.dat内に以下のように記述されています。

"Expert.dat", "_noteJumpMovementSpeed": 12

 

ここの12という値を任意の値に書き換えることでNJSを自由に操作できます。手動で書き換えてもいいのですが、カスタム曲が多いときは面倒なので、pythonを用いてそれぞれのカスタム曲フォルダ内のinfo.datを書き換えさせようと思います。

 

import os
for fd_path, sb_folder, sb_file in os.walk("C:\Program Files (x86)\Steam\steamapps\common\Beat Saber\Beat Saber_Data\CustomLevels"):
    for fol in sb_folder:
        print(fd_path + '\\' + fol)
        file_name = fol + '\\' + "info.dat"

        with open(file_name, encoding="cp932"as f:
            data_lines = f.read()

        data_lines = data_lines.replace(
            '"Expert.dat", "_noteJumpMovementSpeed": 12''"Expert.dat", "_noteJumpMovementSpeed": 18')

        with open(file_name, mode="w"encoding="cp932"as f:
            f.write(data_lines)

このスクリプトを書いたpythonファイルをNJSchange.py等としてC:\Program Files (x86)\Steam\steamapps\common\Beat Saber\Beat Saber_Data\CustomLevels内に保存し、Windows PowerShell等から実行すればExpert難易度のNJSが12から18に書き換わります。あとはBeatSaberを再起動すればノーツ速度が早くなっています。

保存場所

f:id:shike_bengara:20211228134641p:plain

実行

f:id:shike_bengara:20211228134713p:plain



なお、BeatSageで生成したのでない譜面のNJSも同時に書き換わってしまいますので、ご注意ください。スクリプト5行目のfile_nameのあたりにフォルダ名にBeat_Sageを含むかどうかの判別を含めばよいと思います。