![見出し画像](https://assets.st-note.com/production/uploads/images/124283593/rectangle_large_type_2_7f81f68cc123012186709c6953d0dc28.png?width=1200)
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 のテストケースを作成しましたが、ちょうどよい感じに機能紹介にもなるので、旧 Twitter にも動画を貼っておきます pic.twitter.com/6aZImeOb5e
— hibit (@hibit_at) December 11, 2023
今後、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 表示/非表示)などもサポートしていますが、それはテストケースにないので満たす必要がないと(現段階では)言えます。しかし、それは現状のテストケースが弱いだけであり、テストケースを増やしていけば、それも網羅できます。もちろん、理想的にはそうあるべきなので、余力があれば対応していきます。余力があれば……。