見出し画像

ScriptMapper V3 対応しました

結論

 ScriptMapper の新バージョンをリリースしました。V3 譜面に対応しています。ダウンロードはこの最新リリースから。

序論

 皆さん、V3 対応、してますか?

 2023 年末になって、いよいよ V3 環境への移行が本格化してきました。なぜなら、現在の作譜ソフトのデファクトスタンダードである Chromapper が、デフォルトで V3 フォーマットを使うようになったからです。今後は、最新の Chromapper で新規作成する限り、例えアークやチェインを使っていなくても、譜面のデータ形式としては V3 になります。

 そのため、ScriptMapper も V3 譜面への対応が必須となりました。開発サーバーでは、希望者には内々に配布していましたが、この度、正式なバージョンとしました。

 これが本記事で最も伝えたかったことであり、後は余談です。

ScriptMapper とは?

 譜面のタイミングに合わせて好きなようにカメラを動かせるツールだよ!

 ビー祭やその他 BeatSaber の動画作成においてそれなりに活躍しています(そのはずです)。

 詳細は 2 年前のアドカレ記事で詳細に書いたので、そちらを参照してください!

 そして、ScriptMapper を最大限活用するには、Rynan さんの ChroMapper-CameraMovement がほぼ必須ツールとなっています。カメラスクリプトに凝りたい人はこれを入れない訳にはいかない。むしろ、CameraMovement という環境の中に、モジュールとして ScriptMapper が存在するといった方が実態に即しているでしょう。

テストの必要性

 最初は私の思いつきで始まったプログラムですが、思いつきで新機能を入れたり、スポット的な要望に答えたり、他の方々のプルリク(ありがたい)を受け入れたりしている内に、生みの親である私自身も、すべての機能や経緯を把握できなくなってきました。

 これは、プロジェクトとしては不健全な状態です。「もう細かい内部ロジックを覚えていないから、バグが怖くて手を加えられない」という状況を生むからです。実際、事実上の V3 対応はかなり前から済んでいて、サーバー内では配布していましたが、その点が面倒くさくて怖くてリリースバージョンを上げることはしませんでした。

 開発は、ある程度規模が大きくなる or 期間が長くなると、テストが重要になっていきます。テストは、ある入力に対して、出力が望ましいものであることを確認することです。見方を変えれば、入力ー出力さえ望ましければ、極論、中身はなんでもいいです。

 さて、このプログラムにおいては、入力は譜面データ(のブックマーク)、出力はゲーム内でのカメラの動きになります。

 そこで、ScriptMapper に求められる入力を網羅した譜面データをテストデータとして用意し、ロジックの一貫性を保証できるようにしました。

テストケース

https://drive.google.com/file/d/1VFn_uTl9tdaPxBcMuVLXTlZNC8CswvJA/view?usp=sharing

 テストケースです。入力として譜面データ、出力として動画が入っています。もちろん、今回の更新の主題である V3 譜面(そして後方互換性を検証するために V2 譜面も)の両方のデータがあります。

 実際ダウンロードして動画を確認する人はほとんどいないと思うので、動画だけでもみたい人は以下のツイートから。

 今後、ScriptMapper のコードが変わったとしても、この入力に対してこの動画(正確には、ScriptMapper が分担する責任は SongScript.json の出力までであり、動画への変換は CameraPlus 等のプロセスを経ますが、とりあえず動画を出力とみなします)が出力される限りにおいては、ScriptMapper の要件を満たすと定義できます。

 なお、このテストケースで検証できる範囲は以下の機能になります。

center
top
side
diagf
diagb
オリジナルコマンド ※ input.csv で定義したコマンド
mirror
zoom
spin
slide
shift
push
turn
screw
rotate
vibro
copy
fill
turn
dpos
q
$
Ease : Cubic
Ease : Elastic
Ease : Circ
Ease : Quad
Ease : Expo
Ease : Back
Ease : Bounce
Ease : rot
Ease : vib
rotate ※拡張パラメータ

 ScriptMapper はこれ以外の機能(環境変数や UI 表示/非表示)などもサポートしていますが、それはテストケースにないので満たす必要がないと(現段階では)言えます。しかし、それは現状のテストケースが弱いだけであり、テストケースを増やしていけば、それも網羅できます。もちろん、理想的にはそうあるべきなので、余力があれば対応していきます。余力があれば……。


この記事が気に入ったらサポートをしてみませんか?